Changelog in Linux kernel 6.6.130

 
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>

ACPI: processor: Fix previous acpi_processor_errata_piix4() fix [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Tue Mar 17 21:39:05 2026 +0100

    ACPI: processor: Fix previous acpi_processor_errata_piix4() fix
    
    [ Upstream commit bf504b229cb8d534eccbaeaa23eba34c05131e25 ]
    
    After commi f132e089fe89 ("ACPI: processor: Fix NULL-pointer dereference
    in acpi_processor_errata_piix4()"), device pointers may be dereferenced
    after dropping references to the device objects pointed to by them,
    which may cause a use-after-free to occur.
    
    Moreover, debug messages about enabling the errata may be printed
    if the errata flags corresponding to them are unset.
    
    Address all of these issues by moving message printing to the points
    in the code where the errata flags are set.
    
    Fixes: f132e089fe89 ("ACPI: processor: Fix NULL-pointer dereference in acpi_processor_errata_piix4()")
    Reported-by: Guenter Roeck <linux@roeck-us.net>
    Closes: https://lore.kernel.org/linux-acpi/938e2206-def5-4b7a-9b2c-d1fd37681d8a@roeck-us.net/
    Reviewed-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Link: https://patch.msgid.link/5975693.DvuYhMxLoT@rafael.j.wysocki
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ALSA: hda/conexant: Add quirk for HP ZBook Studio G4 [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Sat Feb 7 14:13:17 2026 +0100

    ALSA: hda/conexant: Add quirk for HP ZBook Studio G4
    
    [ Upstream commit 1585cf83e98db32463e5d54161b06a5f01fe9976 ]
    
    It was reported that we need the same quirk for HP ZBook Studio G4
    (SSID 103c:826b) as other HP models to make the mute-LED working.
    
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/64d78753-b9ff-4c64-8920-64d8d31cd20c@gmail.com
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=221002
    Link: https://patch.msgid.link/20260207131324.2428030-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda/conexant: Fix headphone jack handling on Acer Swift SF314 [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Tue Feb 17 11:44:11 2026 +0100

    ALSA: hda/conexant: Fix headphone jack handling on Acer Swift SF314
    
    [ Upstream commit 7bc0df86c2384bc1e2012a2c946f82305054da64 ]
    
    Acer Swift SF314 (SSID 1025:136d) needs a bit of tweaks of the pin
    configurations for NID 0x16 and 0x19 to make the headphone / headset
    jack working.  NID 0x17 can remain as is for the working speaker, and
    the built-in mic is supported via SOF.
    
    Cc: <stable@vger.kernel.org>
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=221086
    Link: https://patch.msgid.link/20260217104414.62911-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda: cs35l56: Fix signedness error in cs35l56_hda_posture_put() [+ + +]
Author: Richard Fitzgerald <rf@opensource.cirrus.com>
Date:   Thu Feb 26 11:17:28 2026 +0000

    ALSA: hda: cs35l56: Fix signedness error in cs35l56_hda_posture_put()
    
    [ Upstream commit 003ce8c9b2ca28fbb4860651e76fb1c9a91f2ea1 ]
    
    In cs35l56_hda_posture_put() assign ucontrol->value.integer.value[0] to
    a long instead of an unsigned long. ucontrol->value.integer.value[0] is
    a long.
    
    This fixes the sparse warning:
    
    sound/hda/codecs/side-codecs/cs35l56_hda.c:256:20: warning: unsigned value
    that used to be signed checked against zero?
    sound/hda/codecs/side-codecs/cs35l56_hda.c:252:29: signed value source
    
    Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
    Fixes: 73cfbfa9caea8 ("ALSA: hda/cs35l56: Add driver for Cirrus Logic CS35L56 amplifier")
    Link: https://patch.msgid.link/20260226111728.1700431-1-rf@opensource.cirrus.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: pci: hda: use snd_kcontrol_chip() [+ + +]
Author: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Date:   Wed May 7 04:59:45 2025 +0000

    ALSA: pci: hda: use snd_kcontrol_chip()
    
    [ Upstream commit 483dd12dbe34c6d4e71d4d543bcb1292bcb62d08 ]
    
    We can use snd_kcontrol_chip(). Let's use it.
    
    Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Link: https://patch.msgid.link/87plglauda.wl-kuninori.morimoto.gx@renesas.com
    Stable-dep-of: 003ce8c9b2ca ("ALSA: hda: cs35l56: Fix signedness error in cs35l56_hda_posture_put()")
    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: Cap the packet size pre-calculations [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Wed Feb 25 09:52:28 2026 +0100

    ALSA: usb-audio: Cap the packet size pre-calculations
    
    [ Upstream commit 7fe8dec3f628e9779f1631576f8e693370050348 ]
    
    We calculate the possible packet sizes beforehand for adaptive and
    synchronous endpoints, but we didn't take care of the max frame size
    for those pre-calculated values.  When a device or a bus limits the
    packet size, a high sample rate or a high number of channels may lead
    to the packet sizes that are larger than the given limit, which
    results in an error from the USB core at submitting URBs.
    
    As a simple workaround, just add the sanity checks of pre-calculated
    packet sizes to have the upper boundary of ep->maxframesize.
    
    Fixes: f0bd62b64016 ("ALSA: usb-audio: Improve frames size computation")
    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-2-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: Remove VALIDATE_RATES quirk for Focusrite devices [+ + +]
Author: Geoffrey D. Bennett <g@b4.vu>
Date:   Sat Feb 21 02:34:48 2026 +1030

    ALSA: usb-audio: Remove VALIDATE_RATES quirk for Focusrite devices
    
    [ Upstream commit a8cc55bf81a45772cad44c83ea7bb0e98431094a ]
    
    Remove QUIRK_FLAG_VALIDATE_RATES for Focusrite. With the previous
    commit, focusrite_valid_sample_rate() produces correct rate tables
    without USB probing.
    
    QUIRK_FLAG_VALIDATE_RATES sends SET_CUR requests for each rate (~25ms
    each) and leaves the device at 192kHz. This is a problem because that
    rate: 1) disables the internal mixer, so outputs are silent until an
    application opens the PCM and sets a lower rate, and 2) the Air and
    Safe modes get disabled.
    
    Fixes: 5963e5262180 ("ALSA: usb-audio: Enable rate validation for Scarlett devices")
    Signed-off-by: Geoffrey D. Bennett <g@b4.vu>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Link: https://patch.msgid.link/09b9c012024c998c4ca14bd876ef0dce0d0b6101.1771594828.git.g@b4.vu
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: usb-audio: Use correct version for UAC3 header validation [+ + +]
Author: Jun Seo <jun.seo.93@proton.me>
Date:   Thu Feb 26 10:08:20 2026 +0900

    ALSA: usb-audio: Use correct version for UAC3 header validation
    
    commit 54f9d645a5453d0bfece0c465d34aaf072ea99fa upstream.
    
    The entry of the validators table for UAC3 AC header descriptor is
    defined with the wrong protocol version UAC_VERSION_2, while it should
    have been UAC_VERSION_3.  This results in the validator never matching
    for actual UAC3 devices (protocol == UAC_VERSION_3), causing their
    header descriptors to bypass validation entirely.  A malicious USB
    device presenting a truncated UAC3 header could exploit this to cause
    out-of-bounds reads when the driver later accesses unvalidated
    descriptor fields.
    
    The bug was introduced in the same commit as the recently fixed UAC3
    feature unit sub-type typo, and appears to be from the same copy-paste
    error when the UAC3 section was created from the UAC2 section.
    
    Fixes: 57f8770620e9 ("ALSA: usb-audio: More validations of descriptor units")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Jun Seo <jun.seo.93@proton.me>
    Link: https://patch.msgid.link/20260226010820.36529-1-jun.seo.93@proton.me
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: usb-audio: Use inclusive terms [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Wed Feb 25 09:52:31 2026 +0100

    ALSA: usb-audio: Use inclusive terms
    
    [ Upstream commit 4e9113c533acee2ba1f72fd68ee6ecd36b64484e ]
    
    Replace the remaining with inclusive terms; it's only this function
    name we overlooked at the previous conversion.
    
    Fixes: 53837b4ac2bd ("ALSA: usb-audio: Replace slave/master terms")
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Link: https://patch.msgid.link/20260225085233.316306-5-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    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: fix MAC_TCR_SS register width for 2.5G and 10M speeds [+ + +]
Author: Raju Rangoju <Raju.Rangoju@amd.com>
Date:   Thu Feb 26 22:37:53 2026 +0530

    amd-xgbe: fix MAC_TCR_SS register width for 2.5G and 10M speeds
    
    [ Upstream commit 9439a661c2e80485406ce2c90b107ca17858382d ]
    
    Extend the MAC_TCR_SS (Speed Select) register field width from 2 bits
    to 3 bits to properly support all speed settings.
    
    The MAC_TCR register's SS field encoding requires 3 bits to represent
    all supported speeds:
      - 0x00: 10Gbps (XGMII)
      - 0x02: 2.5Gbps (GMII) / 100Mbps
      - 0x03: 1Gbps / 10Mbps
      - 0x06: 2.5Gbps (XGMII) - P100a only
    
    With only 2 bits, values 0x04-0x07 cannot be represented, which breaks
    2.5G XGMII mode on newer platforms and causes incorrect speed select
    values to be programmed.
    
    Fixes: 07445f3c7ca1 ("amd-xgbe: Add support for 10 Mbps speed")
    Co-developed-by: Guruvendra Punugupati <Guruvendra.Punugupati@amd.com>
    Signed-off-by: Guruvendra Punugupati <Guruvendra.Punugupati@amd.com>
    Signed-off-by: Raju Rangoju <Raju.Rangoju@amd.com>
    Link: https://patch.msgid.link/20260226170753.250312-1-Raju.Rangoju@amd.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

amd-xgbe: fix sleep while atomic on suspend/resume [+ + +]
Author: Raju Rangoju <Raju.Rangoju@amd.com>
Date:   Mon Mar 2 09:51:24 2026 +0530

    amd-xgbe: fix sleep while atomic on suspend/resume
    
    [ Upstream commit e2f27363aa6d983504c6836dd0975535e2e9dba0 ]
    
    The xgbe_powerdown() and xgbe_powerup() functions use spinlocks
    (spin_lock_irqsave) while calling functions that may sleep:
    - napi_disable() can sleep waiting for NAPI polling to complete
    - flush_workqueue() can sleep waiting for pending work items
    
    This causes a "BUG: scheduling while atomic" error during suspend/resume
    cycles on systems using the AMD XGBE Ethernet controller.
    
    The spinlock protection in these functions is unnecessary as these
    functions are called from suspend/resume paths which are already serialized
    by the PM core
    
    Fix this by removing the spinlock. Since only code that takes this lock
    is xgbe_powerdown() and xgbe_powerup(), remove it completely.
    
    Fixes: c5aa9e3b8156 ("amd-xgbe: Initial AMD 10GbE platform driver")
    Signed-off-by: Raju Rangoju <Raju.Rangoju@amd.com>
    Link: https://patch.msgid.link/20260302042124.1386445-1-Raju.Rangoju@amd.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    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>

 
apparmor: fix differential encoding verification [+ + +]
Author: John Johansen <john.johansen@canonical.com>
Date:   Fri Oct 17 01:53:00 2025 -0700

    apparmor: fix differential encoding verification
    
    commit 39440b137546a3aa383cfdabc605fb73811b6093 upstream.
    
    Differential encoding allows loops to be created if it is abused. To
    prevent this the unpack should verify that a diff-encode chain
    terminates.
    
    Unfortunately the differential encode verification had two bugs.
    
    1. it conflated states that had gone through check and already been
       marked, with states that were currently being checked and marked.
       This means that loops in the current chain being verified are treated
       as a chain that has already been verified.
    
    2. the order bailout on already checked states compared current chain
       check iterators j,k instead of using the outer loop iterator i.
       Meaning a step backwards in states in the current chain verification
       was being mistaken for moving to an already verified state.
    
    Move to a double mark scheme where already verified states get a
    different mark, than the current chain being kept. This enables us
    to also drop the backwards verification check that was the cause of
    the second error as any already verified state is already marked.
    
    Fixes: 031dcc8f4e84 ("apparmor: dfa add support for state differential encoding")
    Reported-by: Qualys Security Advisory <qsa@qualys.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Reviewed-by: Georgia Garcia <georgia.garcia@canonical.com>
    Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

apparmor: Fix double free of ns_name in aa_replace_profiles() [+ + +]
Author: John Johansen <john.johansen@canonical.com>
Date:   Wed Sep 10 06:22:17 2025 -0700

    apparmor: Fix double free of ns_name in aa_replace_profiles()
    
    commit 5df0c44e8f5f619d3beb871207aded7c78414502 upstream.
    
    if ns_name is NULL after
    1071         error = aa_unpack(udata, &lh, &ns_name);
    
    and if ent->ns_name contains an ns_name in
    1089                 } else if (ent->ns_name) {
    
    then ns_name is assigned the ent->ns_name
    1095                         ns_name = ent->ns_name;
    
    however ent->ns_name is freed at
    1262                 aa_load_ent_free(ent);
    
    and then again when freeing ns_name at
    1270         kfree(ns_name);
    
    Fix this by NULLing out ent->ns_name after it is transferred to ns_name
    
    Fixes: 145a0ef21c8e9 ("apparmor: fix blob compression when ns is forced on a policy load")
    Reported-by: Qualys Security Advisory <qsa@qualys.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Reviewed-by: Georgia Garcia <georgia.garcia@canonical.com>
    Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

apparmor: fix memory leak in verify_header [+ + +]
Author: Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>
Date:   Tue Jan 20 15:24:04 2026 +0100

    apparmor: fix memory leak in verify_header
    
    commit e38c55d9f834e5b848bfed0f5c586aaf45acb825 upstream.
    
    The function sets `*ns = NULL` on every call, leaking the namespace
    string allocated in previous iterations when multiple profiles are
    unpacked. This also breaks namespace consistency checking since *ns
    is always NULL when the comparison is made.
    
    Remove the incorrect assignment.
    The caller (aa_unpack) initializes *ns to NULL once before the loop,
    which is sufficient.
    
    Fixes: dd51c8485763 ("apparmor: provide base for multiple profiles to be replaced at once")
    Reported-by: Qualys Security Advisory <qsa@qualys.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Reviewed-by: Georgia Garcia <georgia.garcia@canonical.com>
    Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
    Signed-off-by: Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

apparmor: fix missing bounds check on DEFAULT table in verify_dfa() [+ + +]
Author: Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>
Date:   Thu Jan 29 16:51:11 2026 +0100

    apparmor: fix missing bounds check on DEFAULT table in verify_dfa()
    
    commit d352873bbefa7eb39995239d0b44ccdf8aaa79a4 upstream.
    
    The verify_dfa() function only checks DEFAULT_TABLE bounds when the state
    is not differentially encoded.
    
    When the verification loop traverses the differential encoding chain,
    it reads k = DEFAULT_TABLE[j] and uses k as an array index without
    validation. A malformed DFA with DEFAULT_TABLE[j] >= state_count,
    therefore, causes both out-of-bounds reads and writes.
    
    [   57.179855] ==================================================================
    [   57.180549] BUG: KASAN: slab-out-of-bounds in verify_dfa+0x59a/0x660
    [   57.180904] Read of size 4 at addr ffff888100eadec4 by task su/993
    
    [   57.181554] CPU: 1 UID: 0 PID: 993 Comm: su Not tainted 6.19.0-rc7-next-20260127 #1 PREEMPT(lazy)
    [   57.181558] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    [   57.181563] Call Trace:
    [   57.181572]  <TASK>
    [   57.181577]  dump_stack_lvl+0x5e/0x80
    [   57.181596]  print_report+0xc8/0x270
    [   57.181605]  ? verify_dfa+0x59a/0x660
    [   57.181608]  kasan_report+0x118/0x150
    [   57.181620]  ? verify_dfa+0x59a/0x660
    [   57.181623]  verify_dfa+0x59a/0x660
    [   57.181627]  aa_dfa_unpack+0x1610/0x1740
    [   57.181629]  ? __kmalloc_cache_noprof+0x1d0/0x470
    [   57.181640]  unpack_pdb+0x86d/0x46b0
    [   57.181647]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   57.181653]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   57.181656]  ? aa_unpack_nameX+0x1a8/0x300
    [   57.181659]  aa_unpack+0x20b0/0x4c30
    [   57.181662]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   57.181664]  ? stack_depot_save_flags+0x33/0x700
    [   57.181681]  ? kasan_save_track+0x4f/0x80
    [   57.181683]  ? kasan_save_track+0x3e/0x80
    [   57.181686]  ? __kasan_kmalloc+0x93/0xb0
    [   57.181688]  ? __kvmalloc_node_noprof+0x44a/0x780
    [   57.181693]  ? aa_simple_write_to_buffer+0x54/0x130
    [   57.181697]  ? policy_update+0x154/0x330
    [   57.181704]  aa_replace_profiles+0x15a/0x1dd0
    [   57.181707]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   57.181710]  ? __kvmalloc_node_noprof+0x44a/0x780
    [   57.181712]  ? aa_loaddata_alloc+0x77/0x140
    [   57.181715]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   57.181717]  ? _copy_from_user+0x2a/0x70
    [   57.181730]  policy_update+0x17a/0x330
    [   57.181733]  profile_replace+0x153/0x1a0
    [   57.181735]  ? rw_verify_area+0x93/0x2d0
    [   57.181740]  vfs_write+0x235/0xab0
    [   57.181745]  ksys_write+0xb0/0x170
    [   57.181748]  do_syscall_64+0x8e/0x660
    [   57.181762]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
    [   57.181765] RIP: 0033:0x7f6192792eb2
    
    Remove the MATCH_FLAG_DIFF_ENCODE condition to validate all DEFAULT_TABLE
    entries unconditionally.
    
    Fixes: 031dcc8f4e84 ("apparmor: dfa add support for state differential encoding")
    Reported-by: Qualys Security Advisory <qsa@qualys.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Reviewed-by: Georgia Garcia <georgia.garcia@canonical.com>
    Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
    Signed-off-by: Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

apparmor: fix race between freeing data and fs accessing it [+ + +]
Author: John Johansen <john.johansen@canonical.com>
Date:   Sun Mar 1 16:10:51 2026 -0800

    apparmor: fix race between freeing data and fs accessing it
    
    commit 8e135b8aee5a06c52a4347a5a6d51223c6f36ba3 upstream.
    
    AppArmor was putting the reference to i_private data on its end after
    removing the original entry from the file system. However the inode
    can and does live beyond that point and it is possible that some of
    the fs call back functions will be invoked after the reference has
    been put, which results in a race between freeing the data and
    accessing it through the fs.
    
    While the rawdata/loaddata is the most likely candidate to fail the
    race, as it has the fewest references. If properly crafted it might be
    possible to trigger a race for the other types stored in i_private.
    
    Fix this by moving the put of i_private referenced data to the correct
    place which is during inode eviction.
    
    Fixes: c961ee5f21b20 ("apparmor: convert from securityfs to apparmorfs for policy ns files")
    Reported-by: Qualys Security Advisory <qsa@qualys.com>
    Reviewed-by: Georgia Garcia <georgia.garcia@canonical.com>
    Reviewed-by: Maxime Bélair <maxime.belair@canonical.com>
    Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

apparmor: fix race on rawdata dereference [+ + +]
Author: John Johansen <john.johansen@canonical.com>
Date:   Tue Feb 24 10:20:02 2026 -0800

    apparmor: fix race on rawdata dereference
    
    commit a0b7091c4de45a7325c8780e6934a894f92ac86b upstream.
    
    There is a race condition that leads to a use-after-free situation:
    because the rawdata inodes are not refcounted, an attacker can start
    open()ing one of the rawdata files, and at the same time remove the
    last reference to this rawdata (by removing the corresponding profile,
    for example), which frees its struct aa_loaddata; as a result, when
    seq_rawdata_open() is reached, i_private is a dangling pointer and
    freed memory is accessed.
    
    The rawdata inodes weren't refcounted to avoid a circular refcount and
    were supposed to be held by the profile rawdata reference.  However
    during profile removal there is a window where the vfs and profile
    destruction race, resulting in the use after free.
    
    Fix this by moving to a double refcount scheme. Where the profile
    refcount on rawdata is used to break the circular dependency. Allowing
    for freeing of the rawdata once all inode references to the rawdata
    are put.
    
    Fixes: 5d5182cae401 ("apparmor: move to per loaddata files, instead of replicating in profiles")
    Reported-by: Qualys Security Advisory <qsa@qualys.com>
    Reviewed-by: Georgia Garcia <georgia.garcia@canonical.com>
    Reviewed-by: Maxime Bélair <maxime.belair@canonical.com>
    Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

apparmor: fix side-effect bug in match_char() macro usage [+ + +]
Author: Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>
Date:   Thu Jan 29 17:08:25 2026 +0100

    apparmor: fix side-effect bug in match_char() macro usage
    
    commit 8756b68edae37ff546c02091989a4ceab3f20abd upstream.
    
    The match_char() macro evaluates its character parameter multiple
    times when traversing differential encoding chains. When invoked
    with *str++, the string pointer advances on each iteration of the
    inner do-while loop, causing the DFA to check different characters
    at each iteration and therefore skip input characters.
    This results in out-of-bounds reads when the pointer advances past
    the input buffer boundary.
    
    [   94.984676] ==================================================================
    [   94.985301] BUG: KASAN: slab-out-of-bounds in aa_dfa_match+0x5ae/0x760
    [   94.985655] Read of size 1 at addr ffff888100342000 by task file/976
    
    [   94.986319] CPU: 7 UID: 1000 PID: 976 Comm: file Not tainted 6.19.0-rc7-next-20260127 #1 PREEMPT(lazy)
    [   94.986322] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    [   94.986329] Call Trace:
    [   94.986341]  <TASK>
    [   94.986347]  dump_stack_lvl+0x5e/0x80
    [   94.986374]  print_report+0xc8/0x270
    [   94.986384]  ? aa_dfa_match+0x5ae/0x760
    [   94.986388]  kasan_report+0x118/0x150
    [   94.986401]  ? aa_dfa_match+0x5ae/0x760
    [   94.986405]  aa_dfa_match+0x5ae/0x760
    [   94.986408]  __aa_path_perm+0x131/0x400
    [   94.986418]  aa_path_perm+0x219/0x2f0
    [   94.986424]  apparmor_file_open+0x345/0x570
    [   94.986431]  security_file_open+0x5c/0x140
    [   94.986442]  do_dentry_open+0x2f6/0x1120
    [   94.986450]  vfs_open+0x38/0x2b0
    [   94.986453]  ? may_open+0x1e2/0x2b0
    [   94.986466]  path_openat+0x231b/0x2b30
    [   94.986469]  ? __x64_sys_openat+0xf8/0x130
    [   94.986477]  do_file_open+0x19d/0x360
    [   94.986487]  do_sys_openat2+0x98/0x100
    [   94.986491]  __x64_sys_openat+0xf8/0x130
    [   94.986499]  do_syscall_64+0x8e/0x660
    [   94.986515]  ? count_memcg_events+0x15f/0x3c0
    [   94.986526]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   94.986540]  ? handle_mm_fault+0x1639/0x1ef0
    [   94.986551]  ? vma_start_read+0xf0/0x320
    [   94.986558]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   94.986561]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   94.986563]  ? fpregs_assert_state_consistent+0x50/0xe0
    [   94.986572]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   94.986574]  ? arch_exit_to_user_mode_prepare+0x9/0xb0
    [   94.986587]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   94.986588]  ? irqentry_exit+0x3c/0x590
    [   94.986595]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
    [   94.986597] RIP: 0033:0x7fda4a79c3ea
    
    Fix by extracting the character value before invoking match_char,
    ensuring single evaluation per outer loop.
    
    Fixes: 074c1cd798cb ("apparmor: dfa move character match into a macro")
    Reported-by: Qualys Security Advisory <qsa@qualys.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Reviewed-by: Georgia Garcia <georgia.garcia@canonical.com>
    Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
    Signed-off-by: Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

apparmor: fix unprivileged local user can do privileged policy management [+ + +]
Author: John Johansen <john.johansen@canonical.com>
Date:   Fri Nov 7 08:36:04 2025 -0800

    apparmor: fix unprivileged local user can do privileged policy management
    
    commit 6601e13e82841879406bf9f369032656f441a425 upstream.
    
    An unprivileged local user can load, replace, and remove profiles by
    opening the apparmorfs interfaces, via a confused deputy attack, by
    passing the opened fd to a privileged process, and getting the
    privileged process to write to the interface.
    
    This does require a privileged target that can be manipulated to do
    the write for the unprivileged process, but once such access is
    achieved full policy management is possible and all the possible
    implications that implies: removing confinement, DoS of system or
    target applications by denying all execution, by-passing the
    unprivileged user namespace restriction, to exploiting kernel bugs for
    a local privilege escalation.
    
    The policy management interface can not have its permissions simply
    changed from 0666 to 0600 because non-root processes need to be able
    to load policy to different policy namespaces.
    
    Instead ensure the task writing the interface has privileges that
    are a subset of the task that opened the interface. This is already
    done via policy for confined processes, but unconfined can delegate
    access to the opened fd, by-passing the usual policy check.
    
    Fixes: b7fd2c0340eac ("apparmor: add per policy ns .load, .replace, .remove interface files")
    Reported-by: Qualys Security Advisory <qsa@qualys.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Reviewed-by: Georgia Garcia <georgia.garcia@canonical.com>
    Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

apparmor: fix: limit the number of levels of policy namespaces [+ + +]
Author: John Johansen <john.johansen@canonical.com>
Date:   Tue Mar 3 11:08:02 2026 -0800

    apparmor: fix: limit the number of levels of policy namespaces
    
    commit 306039414932c80f8420695a24d4fe10c84ccfb2 upstream.
    
    Currently the number of policy namespaces is not bounded relying on
    the user namespace limit. However policy namespaces aren't strictly
    tied to user namespaces and it is possible to create them and nest
    them arbitrarily deep which can be used to exhaust system resource.
    
    Hard cap policy namespaces to the same depth as user namespaces.
    
    Fixes: c88d4c7b049e8 ("AppArmor: core policy routines")
    Reported-by: Qualys Security Advisory <qsa@qualys.com>
    Reviewed-by: Ryan Lee <ryan.lee@canonical.com>
    Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

apparmor: replace recursive profile removal with iterative approach [+ + +]
Author: Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>
Date:   Tue Jan 13 09:09:43 2026 +0100

    apparmor: replace recursive profile removal with iterative approach
    
    commit ab09264660f9de5d05d1ef4e225aa447c63a8747 upstream.
    
    The profile removal code uses recursion when removing nested profiles,
    which can lead to kernel stack exhaustion and system crashes.
    
    Reproducer:
      $ pf='a'; for ((i=0; i<1024; i++)); do
          echo -e "profile $pf { \n }" | apparmor_parser -K -a;
          pf="$pf//x";
      done
      $ echo -n a > /sys/kernel/security/apparmor/.remove
    
    Replace the recursive __aa_profile_list_release() approach with an
    iterative approach in __remove_profile(). The function repeatedly
    finds and removes leaf profiles until the entire subtree is removed,
    maintaining the same removal semantic without recursion.
    
    Fixes: c88d4c7b049e ("AppArmor: core policy routines")
    Reported-by: Qualys Security Advisory <qsa@qualys.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Reviewed-by: Georgia Garcia <georgia.garcia@canonical.com>
    Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
    Signed-off-by: Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

apparmor: validate DFA start states are in bounds in unpack_pdb [+ + +]
Author: Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>
Date:   Thu Jan 15 15:30:50 2026 +0100

    apparmor: validate DFA start states are in bounds in unpack_pdb
    
    commit 9063d7e2615f4a7ab321de6b520e23d370e58816 upstream.
    
    Start states are read from untrusted data and used as indexes into the
    DFA state tables. The aa_dfa_next() function call in unpack_pdb() will
    access dfa->tables[YYTD_ID_BASE][start], and if the start state exceeds
    the number of states in the DFA, this results in an out-of-bound read.
    
    ==================================================================
     BUG: KASAN: slab-out-of-bounds in aa_dfa_next+0x2a1/0x360
     Read of size 4 at addr ffff88811956fb90 by task su/1097
     ...
    
    Reject policies with out-of-bounds start states during unpacking
    to prevent the issue.
    
    Fixes: ad5ff3db53c6 ("AppArmor: Add ability to load extended policy")
    Reported-by: Qualys Security Advisory <qsa@qualys.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Reviewed-by: Georgia Garcia <georgia.garcia@canonical.com>
    Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
    Signed-off-by: Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
arm64: dts: rockchip: Fix rk356x PCIe range mappings [+ + +]
Author: Shawn Lin <shawn.lin@rock-chips.com>
Date:   Mon Jan 5 16:15:28 2026 +0800

    arm64: dts: rockchip: Fix rk356x PCIe range mappings
    
    [ Upstream commit f63ea193a404481f080ca2958f73e9f364682db9 ]
    
    The pcie bus address should be mapped 1:1 to the cpu side MMIO address, so
    that there is no same address allocated from normal system memory. Otherwise
    it's broken if the same address assigned to the EP for DMA purpose.Fix it to
    sync with the vendor BSP.
    
    Fixes: 568a67e742df ("arm64: dts: rockchip: Fix rk356x PCIe register and range mappings")
    Fixes: 66b51ea7d70f ("arm64: dts: rockchip: Add rk3568 PCIe2x1 controller")
    Cc: stable@vger.kernel.org
    Cc: Andrew Powers-Holmes <aholmes@omnom.net>
    Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
    Link: https://patch.msgid.link/1767600929-195341-1-git-send-email-shawn.lin@rock-chips.com
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Signed-off-by: Sasha Levin <sashal@kernel.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>

arm64: mm: Batch dsb and isb when populating pgtables [+ + +]
Author: Ryan Roberts <ryan.roberts@arm.com>
Date:   Tue Feb 17 13:34:07 2026 +0000

    arm64: mm: Batch dsb and isb when populating pgtables
    
    [ Upstream commit 1fcb7cea8a5f7747e02230f816c2c80b060d9517 ]
    
    After removing uneccessary TLBIs, the next bottleneck when creating the
    page tables for the linear map is DSB and ISB, which were previously
    issued per-pte in __set_pte(). Since we are writing multiple ptes in a
    given pte table, we can elide these barriers and insert them once we
    have finished writing to the table.
    
    Execution time of map_mem(), which creates the kernel linear map page
    tables, was measured on different machines with different RAM configs:
    
                   | Apple M2 VM | Ampere Altra| Ampere Altra| Ampere Altra
                   | VM, 16G     | VM, 64G     | VM, 256G    | Metal, 512G
    ---------------|-------------|-------------|-------------|-------------
                   |   ms    (%) |   ms    (%) |   ms    (%) |    ms    (%)
    ---------------|-------------|-------------|-------------|-------------
    before         |   78   (0%) |  435   (0%) | 1723   (0%) |  3779   (0%)
    after          |   11 (-86%) |  161 (-63%) |  656 (-62%) |  1654 (-56%)
    
    Signed-off-by: Ryan Roberts <ryan.roberts@arm.com>
    Tested-by: Itaru Kitayama <itaru.kitayama@fujitsu.com>
    Tested-by: Eric Chanudet <echanude@redhat.com>
    Reviewed-by: Mark Rutland <mark.rutland@arm.com>
    Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
    Link: https://lore.kernel.org/r/20240412131908.433043-3-ryan.roberts@arm.com
    Signed-off-by: Will Deacon <will@kernel.org>
    [ Ryan: Trivial backport ]
    Signed-off-by: Ryan Roberts <ryan.roberts@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: mm: Don't remap pgtables for allocate vs populate [+ + +]
Author: Ryan Roberts <ryan.roberts@arm.com>
Date:   Tue Feb 17 13:34:08 2026 +0000

    arm64: mm: Don't remap pgtables for allocate vs populate
    
    [ Upstream commit 0e9df1c905d8293d333ace86c13d147382f5caf9 ]
    
    During linear map pgtable creation, each pgtable is fixmapped /
    fixunmapped twice; once during allocation to zero the memory, and a
    again during population to write the entries. This means each table has
    2 TLB invalidations issued against it. Let's fix this so that each table
    is only fixmapped/fixunmapped once, halving the number of TLBIs, and
    improving performance.
    
    Achieve this by separating allocation and initialization (zeroing) of
    the page. The allocated page is now fixmapped directly by the walker and
    initialized, before being populated and finally fixunmapped.
    
    This approach keeps the change small, but has the side effect that late
    allocations (using __get_free_page()) must also go through the generic
    memory clearing routine. So let's tell __get_free_page() not to zero the
    memory to avoid duplication.
    
    Additionally this approach means that fixmap/fixunmap is still used for
    late pgtable modifications. That's not technically needed since the
    memory is all mapped in the linear map by that point. That's left as a
    possible future optimization if found to be needed.
    
    Execution time of map_mem(), which creates the kernel linear map page
    tables, was measured on different machines with different RAM configs:
    
                   | Apple M2 VM | Ampere Altra| Ampere Altra| Ampere Altra
                   | VM, 16G     | VM, 64G     | VM, 256G    | Metal, 512G
    ---------------|-------------|-------------|-------------|-------------
                   |   ms    (%) |   ms    (%) |   ms    (%) |    ms    (%)
    ---------------|-------------|-------------|-------------|-------------
    before         |   11   (0%) |  161   (0%) |  656   (0%) |  1654   (0%)
    after          |   10 (-11%) |  104 (-35%) |  438 (-33%) |  1223 (-26%)
    
    Signed-off-by: Ryan Roberts <ryan.roberts@arm.com>
    Suggested-by: Mark Rutland <mark.rutland@arm.com>
    Tested-by: Itaru Kitayama <itaru.kitayama@fujitsu.com>
    Tested-by: Eric Chanudet <echanude@redhat.com>
    Reviewed-by: Mark Rutland <mark.rutland@arm.com>
    Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
    Link: https://lore.kernel.org/r/20240412131908.433043-4-ryan.roberts@arm.com
    Signed-off-by: Will Deacon <will@kernel.org>
    [ Ryan: Trivial backport ]
    Signed-off-by: Ryan Roberts <ryan.roberts@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: mm: Don't remap pgtables per-cont(pte|pmd) block [+ + +]
Author: Ryan Roberts <ryan.roberts@arm.com>
Date:   Tue Feb 17 13:34:06 2026 +0000

    arm64: mm: Don't remap pgtables per-cont(pte|pmd) block
    
    [ Upstream commit 5c63db59c5f89925add57642be4f789d0d671ccd ]
    
    A large part of the kernel boot time is creating the kernel linear map
    page tables. When rodata=full, all memory is mapped by pte. And when
    there is lots of physical ram, there are lots of pte tables to populate.
    The primary cost associated with this is mapping and unmapping the pte
    table memory in the fixmap; at unmap time, the TLB entry must be
    invalidated and this is expensive.
    
    Previously, each pmd and pte table was fixmapped/fixunmapped for each
    cont(pte|pmd) block of mappings (16 entries with 4K granule). This means
    we ended up issuing 32 TLBIs per (pmd|pte) table during the population
    phase.
    
    Let's fix that, and fixmap/fixunmap each page once per population, for a
    saving of 31 TLBIs per (pmd|pte) table. This gives a significant boot
    speedup.
    
    Execution time of map_mem(), which creates the kernel linear map page
    tables, was measured on different machines with different RAM configs:
    
                   | Apple M2 VM | Ampere Altra| Ampere Altra| Ampere Altra
                   | VM, 16G     | VM, 64G     | VM, 256G    | Metal, 512G
    ---------------|-------------|-------------|-------------|-------------
                   |   ms    (%) |   ms    (%) |   ms    (%) |    ms    (%)
    ---------------|-------------|-------------|-------------|-------------
    before         |  168   (0%) | 2198   (0%) | 8644   (0%) | 17447   (0%)
    after          |   78 (-53%) |  435 (-80%) | 1723 (-80%) |  3779 (-78%)
    
    Signed-off-by: Ryan Roberts <ryan.roberts@arm.com>
    Tested-by: Itaru Kitayama <itaru.kitayama@fujitsu.com>
    Tested-by: Eric Chanudet <echanude@redhat.com>
    Reviewed-by: Mark Rutland <mark.rutland@arm.com>
    Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
    Link: https://lore.kernel.org/r/20240412131908.433043-2-ryan.roberts@arm.com
    Signed-off-by: Will Deacon <will@kernel.org>
    [ Ryan: Trivial backport ]
    Signed-off-by: Ryan Roberts <ryan.roberts@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ARM: clean up the memset64() C wrapper [+ + +]
Author: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
Date:   Fri Feb 13 08:39:29 2026 +0100

    ARM: clean up the memset64() C wrapper
    
    commit b52343d1cb47bb27ca32a3f4952cc2fd3cd165bf upstream.
    
    The current logic to split the 64-bit argument into its 32-bit halves is
    byte-order specific and a bit clunky.  Use a union instead which is
    easier to read and works in all cases.
    
    GCC still generates the same machine code.
    
    While at it, rename the arguments of the __memset64() prototype to
    actually reflect their semantics.
    
    Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Reported-by: Ben Hutchings <ben@decadent.org.uk> # for -stable
    Link: https://lore.kernel.org/all/1a11526ae3d8664f705b541b8d6ea57b847b49a8.camel@decadent.org.uk/
    Suggested-by: https://lore.kernel.org/all/aZonkWMwpbFhzDJq@casper.infradead.org/ # for -stable
    Link: https://lore.kernel.org/all/aZonkWMwpbFhzDJq@casper.infradead.org/
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.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: 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: simple-card-utils: use __free(device_node) for device node [+ + +]
Author: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Date:   Tue Dec 3 02:10:23 2024 +0000

    ASoC: simple-card-utils: use __free(device_node) for device node
    
    [ Upstream commit 419d1918105e5d9926ab02f1f834bb416dc76f65 ]
    
    simple-card-utils handles many type of device_node, thus need to
    use of_node_put() in many place. Let's use __free(device_node)
    and avoid it.
    
    Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
    Link: https://patch.msgid.link/87r06pfre8.wl-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: 4185b95f8a42 ("ASoC: simple-card-utils: fix graph_util_is_ports0() for DT overlays")
    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>

 
atm: lec: fix null-ptr-deref in lec_arp_clear_vccs [+ + +]
Author: Jiayuan Chen <jiayuan.chen@shopee.com>
Date:   Wed Feb 25 20:32:40 2026 +0800

    atm: lec: fix null-ptr-deref in lec_arp_clear_vccs
    
    [ Upstream commit 101bacb303e89dc2e0640ae6a5e0fb97c4eb45bb ]
    
    syzkaller reported a null-ptr-deref in lec_arp_clear_vccs().
    This issue can be easily reproduced using the syzkaller reproducer.
    
    In the ATM LANE (LAN Emulation) module, the same atm_vcc can be shared by
    multiple lec_arp_table entries (e.g., via entry->vcc or entry->recv_vcc).
    When the underlying VCC is closed, lec_vcc_close() iterates over all
    ARP entries and calls lec_arp_clear_vccs() for each matched entry.
    
    For example, when lec_vcc_close() iterates through the hlists in
    priv->lec_arp_empty_ones or other ARP tables:
    
    1. In the first iteration, for the first matched ARP entry sharing the VCC,
    lec_arp_clear_vccs() frees the associated vpriv (which is vcc->user_back)
    and sets vcc->user_back to NULL.
    2. In the second iteration, for the next matched ARP entry sharing the same
    VCC, lec_arp_clear_vccs() is called again. It obtains a NULL vpriv from
    vcc->user_back (via LEC_VCC_PRIV(vcc)) and then attempts to dereference it
    via `vcc->pop = vpriv->old_pop`, leading to a null-ptr-deref crash.
    
    Fix this by adding a null check for vpriv before dereferencing
    it. If vpriv is already NULL, it means the VCC has been cleared
    by a previous call, so we can safely skip the cleanup and just
    clear the entry's vcc/recv_vcc pointers.
    
    The entire cleanup block (including vcc_release_async()) is placed inside
    the vpriv guard because a NULL vpriv indicates the VCC has already been
    fully released by a prior iteration — repeating the teardown would
    redundantly set flags and trigger callbacks on an already-closing socket.
    
    The Fixes tag points to the initial commit because the entry->vcc path has
    been vulnerable since the original code. The entry->recv_vcc path was later
    added by commit 8d9f73c0ad2f ("atm: fix a memory leak of vcc->user_back")
    with the same pattern, and both paths are fixed here.
    
    Reported-by: syzbot+72e3ea390c305de0e259@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/all/68c95a83.050a0220.3c6139.0e5c.GAE@google.com/T/
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Suggested-by: Dan Carpenter <dan.carpenter@linaro.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Jiayuan Chen <jiayuan.chen@shopee.com>
    Link: https://patch.msgid.link/20260225123250.189289-1-jiayuan.chen@linux.dev
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.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>

batman-adv: avoid OGM aggregation when skb tailroom is insufficient [+ + +]
Author: Yang Yang <n05ec@lzu.edu.cn>
Date:   Fri Mar 20 11:18:44 2026 +0100

    batman-adv: avoid OGM aggregation when skb tailroom is insufficient
    
    commit 0d4aef630be9d5f9c1227d07669c26c4383b5ad0 upstream.
    
    When OGM aggregation state is toggled at runtime, an existing forwarded
    packet may have been allocated with only packet_len bytes, while a later
    packet can still be selected for aggregation. Appending in this case can
    hit skb_put overflow conditions.
    
    Reject aggregation when the target skb tailroom cannot accommodate the new
    packet. The caller then falls back to creating a new forward packet
    instead of appending.
    
    Fixes: c6c8fea29769 ("net: Add batman-adv meshing protocol")
    Cc: stable@vger.kernel.org
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Signed-off-by: Yuan Tan <tanyuan98@outlook.com>
    Signed-off-by: Xin Liu <bird@lzu.edu.cn>
    Signed-off-by: Ao Zhou <n05ec@lzu.edu.cn>
    Signed-off-by: Yang Yang <n05ec@lzu.edu.cn>
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
    [ Adjust context ]
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
binfmt_misc: restore write access before closing files opened by open_exec() [+ + +]
Author: Zilin Guan <zilin@seu.edu.cn>
Date:   Thu Mar 5 10:35:01 2026 +0800

    binfmt_misc: restore write access before closing files opened by open_exec()
    
    [ Upstream commit 90f601b497d76f40fa66795c3ecf625b6aced9fd ]
    
    bm_register_write() opens an executable file using open_exec(), which
    internally calls do_open_execat() and denies write access on the file to
    avoid modification while it is being executed.
    
    However, when an error occurs, bm_register_write() closes the file using
    filp_close() directly. This does not restore the write permission, which
    may cause subsequent write operations on the same file to fail.
    
    Fix this by calling exe_file_allow_write_access() before filp_close() to
    restore the write permission properly.
    
    Fixes: e7850f4d844e ("binfmt_misc: fix possible deadlock in bm_register_write")
    Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
    Link: https://patch.msgid.link/20251105022923.1813587-1-zilin@seu.edu.cn
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    [ Use allow_write_access() instead of exe_file_allow_write_access()
    according to commit 0357ef03c94ef
    ("fs: don't block write during exec on pre-content watched files"). ]
    Signed-off-by: Robert Garcia <rob_garcia@163.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Bluetooth: hci_sync: Fix hci_le_create_conn_sync [+ + +]
Author: Michael Grzeschik <m.grzeschik@pengutronix.de>
Date:   Thu Mar 5 14:50:52 2026 +0100

    Bluetooth: hci_sync: Fix hci_le_create_conn_sync
    
    [ Upstream commit 2cabe7ff1001b7a197009cf50ba71701f9cbd354 ]
    
    While introducing hci_le_create_conn_sync the functionality
    of hci_connect_le was ported to hci_le_create_conn_sync including
    the disable of the scan before starting the connection.
    
    When this code was run non synchronously the immediate call that was
    setting the flag HCI_LE_SCAN_INTERRUPTED had an impact. Since the
    completion handler for the LE_SCAN_DISABLE was not immediately called.
    In the completion handler of the LE_SCAN_DISABLE event, this flag is
    checked to set the state of the hdev to DISCOVERY_STOPPED.
    
    With the synchronised approach the later setting of the
    HCI_LE_SCAN_INTERRUPTED flag has not the same effect. The completion
    handler would immediately fire in the LE_SCAN_DISABLE call, check for
    the flag, which is then not yet set and do nothing.
    
    To fix this issue and make the function call work as before, we move the
    setting of the flag HCI_LE_SCAN_INTERRUPTED before disabling the scan.
    
    Fixes: 8e8b92ee60de ("Bluetooth: hci_sync: Add hci_le_create_conn_sync")
    Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: HIDP: Fix possible UAF [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Thu Mar 5 10:17:47 2026 -0500

    Bluetooth: HIDP: Fix possible UAF
    
    [ Upstream commit dbf666e4fc9bdd975a61bf682b3f75cb0145eedd ]
    
    This fixes the following trace caused by not dropping l2cap_conn
    reference when user->remove callback is called:
    
    [   97.809249] l2cap_conn_free: freeing conn ffff88810a171c00
    [   97.809907] CPU: 1 UID: 0 PID: 1419 Comm: repro_standalon Not tainted 7.0.0-rc1-dirty #14 PREEMPT(lazy)
    [   97.809935] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.17.0-debian-1.17.0-1 04/01/2014
    [   97.809947] Call Trace:
    [   97.809954]  <TASK>
    [   97.809961]  dump_stack_lvl (lib/dump_stack.c:122)
    [   97.809990]  l2cap_conn_free (net/bluetooth/l2cap_core.c:1808)
    [   97.810017]  l2cap_conn_del (./include/linux/kref.h:66 net/bluetooth/l2cap_core.c:1821 net/bluetooth/l2cap_core.c:1798)
    [   97.810055]  l2cap_disconn_cfm (net/bluetooth/l2cap_core.c:7347 (discriminator 1) net/bluetooth/l2cap_core.c:7340 (discriminator 1))
    [   97.810086]  ? __pfx_l2cap_disconn_cfm (net/bluetooth/l2cap_core.c:7341)
    [   97.810117]  hci_conn_hash_flush (./include/net/bluetooth/hci_core.h:2152 (discriminator 2) net/bluetooth/hci_conn.c:2644 (discriminator 2))
    [   97.810148]  hci_dev_close_sync (net/bluetooth/hci_sync.c:5360)
    [   97.810180]  ? __pfx_hci_dev_close_sync (net/bluetooth/hci_sync.c:5285)
    [   97.810212]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   97.810242]  ? up_write (./arch/x86/include/asm/atomic64_64.h:87 (discriminator 5) ./include/linux/atomic/atomic-arch-fallback.h:2852 (discriminator 5) ./include/linux/atomic/atomic-long.h:268 (discriminator 5) ./include/linux/atomic/atomic-instrumented.h:3391 (discriminator 5) kernel/locking/rwsem.c:1385 (discriminator 5) kernel/locking/rwsem.c:1643 (discriminator 5))
    [   97.810267]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   97.810290]  ? rcu_is_watching (./arch/x86/include/asm/atomic.h:23 ./include/linux/atomic/atomic-arch-fallback.h:457 ./include/linux/context_tracking.h:128 kernel/rcu/tree.c:752)
    [   97.810320]  hci_unregister_dev (net/bluetooth/hci_core.c:504 net/bluetooth/hci_core.c:2716)
    [   97.810346]  vhci_release (drivers/bluetooth/hci_vhci.c:691)
    [   97.810375]  ? __pfx_vhci_release (drivers/bluetooth/hci_vhci.c:678)
    [   97.810404]  __fput (fs/file_table.c:470)
    [   97.810430]  task_work_run (kernel/task_work.c:235)
    [   97.810451]  ? __pfx_task_work_run (kernel/task_work.c:201)
    [   97.810472]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   97.810495]  ? do_raw_spin_unlock (./include/asm-generic/qspinlock.h:128 (discriminator 5) kernel/locking/spinlock_debug.c:142 (discriminator 5))
    [   97.810527]  do_exit (kernel/exit.c:972)
    [   97.810547]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   97.810574]  ? __pfx_do_exit (kernel/exit.c:897)
    [   97.810594]  ? lock_acquire (kernel/locking/lockdep.c:470 (discriminator 6) kernel/locking/lockdep.c:5870 (discriminator 6) kernel/locking/lockdep.c:5825 (discriminator 6))
    [   97.810616]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   97.810639]  ? do_raw_spin_lock (kernel/locking/spinlock_debug.c:95 (discriminator 4) kernel/locking/spinlock_debug.c:118 (discriminator 4))
    [   97.810664]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   97.810688]  ? find_held_lock (kernel/locking/lockdep.c:5350 (discriminator 1))
    [   97.810721]  do_group_exit (kernel/exit.c:1093)
    [   97.810745]  get_signal (kernel/signal.c:3007 (discriminator 1))
    [   97.810772]  ? security_file_permission (./arch/x86/include/asm/jump_label.h:37 security/security.c:2366)
    [   97.810803]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   97.810826]  ? vfs_read (fs/read_write.c:555)
    [   97.810854]  ? __pfx_get_signal (kernel/signal.c:2800)
    [   97.810880]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   97.810905]  ? __pfx_vfs_read (fs/read_write.c:555)
    [   97.810932]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   97.810960]  arch_do_signal_or_restart (arch/x86/kernel/signal.c:337 (discriminator 1))
    [   97.810990]  ? __pfx_arch_do_signal_or_restart (arch/x86/kernel/signal.c:334)
    [   97.811021]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   97.811055]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   97.811078]  ? ksys_read (fs/read_write.c:707)
    [   97.811106]  ? __pfx_ksys_read (fs/read_write.c:707)
    [   97.811137]  exit_to_user_mode_loop (kernel/entry/common.c:66 kernel/entry/common.c:98)
    [   97.811169]  ? rcu_is_watching (./arch/x86/include/asm/atomic.h:23 ./include/linux/atomic/atomic-arch-fallback.h:457 ./include/linux/context_tracking.h:128 kernel/rcu/tree.c:752)
    [   97.811192]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   97.811215]  ? trace_hardirqs_off (./include/trace/events/preemptirq.h:36 (discriminator 33) kernel/trace/trace_preemptirq.c:95 (discriminator 33) kernel/trace/trace_preemptirq.c:90 (discriminator 33))
    [   97.811240]  do_syscall_64 (./include/linux/irq-entry-common.h:226 ./include/linux/irq-entry-common.h:256 ./include/linux/entry-common.h:325 arch/x86/entry/syscall_64.c:100)
    [   97.811268]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   97.811292]  ? exc_page_fault (arch/x86/mm/fault.c:1480 (discriminator 3) arch/x86/mm/fault.c:1527 (discriminator 3))
    [   97.811318]  entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
    [   97.811338] RIP: 0033:0x445cfe
    [   97.811352] Code: Unable to access opcode bytes at 0x445cd4.
    
    Code starting with the faulting instruction
    ===========================================
    [   97.811360] RSP: 002b:00007f65c41c6dc8 EFLAGS: 00000246 ORIG_RAX: 0000000000000000
    [   97.811378] RAX: fffffffffffffe00 RBX: 00007f65c41c76c0 RCX: 0000000000445cfe
    [   97.811391] RDX: 0000000000000400 RSI: 00007f65c41c6e40 RDI: 0000000000000004
    [   97.811403] RBP: 00007f65c41c7250 R08: 0000000000000000 R09: 0000000000000000
    [   97.811415] R10: 0000000000000000 R11: 0000000000000246 R12: ffffffffffffffe8
    [   97.811428] R13: 0000000000000000 R14: 00007fff780a8c00 R15: 00007f65c41c76c0
    [   97.811453]  </TASK>
    [   98.402453] ==================================================================
    [   98.403560] BUG: KASAN: use-after-free in __mutex_lock (kernel/locking/mutex.c:199 kernel/locking/mutex.c:694 kernel/locking/mutex.c:776)
    [   98.404541] Read of size 8 at addr ffff888113ee40a8 by task khidpd_00050004/1430
    [   98.405361]
    [   98.405563] CPU: 1 UID: 0 PID: 1430 Comm: khidpd_00050004 Not tainted 7.0.0-rc1-dirty #14 PREEMPT(lazy)
    [   98.405588] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.17.0-debian-1.17.0-1 04/01/2014
    [   98.405600] Call Trace:
    [   98.405607]  <TASK>
    [   98.405614]  dump_stack_lvl (lib/dump_stack.c:122)
    [   98.405641]  print_report (mm/kasan/report.c:379 mm/kasan/report.c:482)
    [   98.405667]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   98.405691]  ? __virt_addr_valid (arch/x86/mm/physaddr.c:55)
    [   98.405724]  ? __mutex_lock (kernel/locking/mutex.c:199 kernel/locking/mutex.c:694 kernel/locking/mutex.c:776)
    [   98.405748]  kasan_report (mm/kasan/report.c:221 mm/kasan/report.c:597)
    [   98.405778]  ? __mutex_lock (kernel/locking/mutex.c:199 kernel/locking/mutex.c:694 kernel/locking/mutex.c:776)
    [   98.405807]  __mutex_lock (kernel/locking/mutex.c:199 kernel/locking/mutex.c:694 kernel/locking/mutex.c:776)
    [   98.405832]  ? do_raw_spin_lock (kernel/locking/spinlock_debug.c:95 (discriminator 4) kernel/locking/spinlock_debug.c:118 (discriminator 4))
    [   98.405859]  ? l2cap_unregister_user (./include/linux/list.h:381 (discriminator 2) net/bluetooth/l2cap_core.c:1723 (discriminator 2))
    [   98.405888]  ? __pfx_do_raw_spin_lock (kernel/locking/spinlock_debug.c:114)
    [   98.405915]  ? __pfx___mutex_lock (kernel/locking/mutex.c:775)
    [   98.405939]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   98.405963]  ? lock_acquire (kernel/locking/lockdep.c:470 (discriminator 6) kernel/locking/lockdep.c:5870 (discriminator 6) kernel/locking/lockdep.c:5825 (discriminator 6))
    [   98.405984]  ? find_held_lock (kernel/locking/lockdep.c:5350 (discriminator 1))
    [   98.406015]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   98.406038]  ? lock_release (kernel/locking/lockdep.c:5536 kernel/locking/lockdep.c:5889 kernel/locking/lockdep.c:5875)
    [   98.406061]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   98.406085]  ? _raw_spin_unlock_irqrestore (./arch/x86/include/asm/irqflags.h:42 ./arch/x86/include/asm/irqflags.h:119 ./arch/x86/include/asm/irqflags.h:159 ./include/linux/spinlock_api_smp.h:178 kernel/locking/spinlock.c:194)
    [   98.406107]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   98.406130]  ? __timer_delete_sync (kernel/time/timer.c:1592)
    [   98.406158]  ? l2cap_unregister_user (./include/linux/list.h:381 (discriminator 2) net/bluetooth/l2cap_core.c:1723 (discriminator 2))
    [   98.406186]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   98.406210]  l2cap_unregister_user (./include/linux/list.h:381 (discriminator 2) net/bluetooth/l2cap_core.c:1723 (discriminator 2))
    [   98.406263]  hidp_session_thread (./include/linux/instrumented.h:112 ./include/linux/atomic/atomic-instrumented.h:400 ./include/linux/refcount.h:389 ./include/linux/refcount.h:432 ./include/linux/refcount.h:450 ./include/linux/kref.h:64 net/bluetooth/hidp/core.c:996 net/bluetooth/hidp/core.c:1305)
    [   98.406293]  ? __pfx_hidp_session_thread (net/bluetooth/hidp/core.c:1264)
    [   98.406323]  ? kthread (kernel/kthread.c:433)
    [   98.406340]  ? __pfx_hidp_session_wake_function (net/bluetooth/hidp/core.c:1251)
    [   98.406370]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   98.406393]  ? find_held_lock (kernel/locking/lockdep.c:5350 (discriminator 1))
    [   98.406424]  ? __pfx_hidp_session_wake_function (net/bluetooth/hidp/core.c:1251)
    [   98.406453]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   98.406476]  ? trace_hardirqs_on (kernel/trace/trace_preemptirq.c:79 (discriminator 1))
    [   98.406499]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   98.406523]  ? kthread (kernel/kthread.c:433)
    [   98.406539]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   98.406565]  ? kthread (kernel/kthread.c:433)
    [   98.406581]  ? __pfx_hidp_session_thread (net/bluetooth/hidp/core.c:1264)
    [   98.406610]  kthread (kernel/kthread.c:467)
    [   98.406627]  ? __pfx_kthread (kernel/kthread.c:412)
    [   98.406645]  ret_from_fork (arch/x86/kernel/process.c:164)
    [   98.406674]  ? __pfx_ret_from_fork (arch/x86/kernel/process.c:153)
    [   98.406704]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   98.406728]  ? __pfx_kthread (kernel/kthread.c:412)
    [   98.406747]  ret_from_fork_asm (arch/x86/entry/entry_64.S:258)
    [   98.406774]  </TASK>
    [   98.406780]
    [   98.433693] The buggy address belongs to the physical page:
    [   98.434405] page: refcount:0 mapcount:0 mapping:0000000000000000 index:0xffff888113ee7c40 pfn:0x113ee4
    [   98.435557] flags: 0x200000000000000(node=0|zone=2)
    [   98.436198] raw: 0200000000000000 ffffea0004244308 ffff8881f6f3ebc0 0000000000000000
    [   98.437195] raw: ffff888113ee7c40 0000000000000000 00000000ffffffff 0000000000000000
    [   98.438115] page dumped because: kasan: bad access detected
    [   98.438951]
    [   98.439211] Memory state around the buggy address:
    [   98.439871]  ffff888113ee3f80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [   98.440714]  ffff888113ee4000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    [   98.441580] >ffff888113ee4080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    [   98.442458]                                   ^
    [   98.443011]  ffff888113ee4100: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    [   98.443889]  ffff888113ee4180: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    [   98.444768] ==================================================================
    [   98.445719] Disabling lock debugging due to kernel taint
    [   98.448074] l2cap_conn_free: freeing conn ffff88810c22b400
    [   98.450012] CPU: 1 UID: 0 PID: 1430 Comm: khidpd_00050004 Tainted: G    B               7.0.0-rc1-dirty #14 PREEMPT(lazy)
    [   98.450040] Tainted: [B]=BAD_PAGE
    [   98.450047] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.17.0-debian-1.17.0-1 04/01/2014
    [   98.450059] Call Trace:
    [   98.450065]  <TASK>
    [   98.450071]  dump_stack_lvl (lib/dump_stack.c:122)
    [   98.450099]  l2cap_conn_free (net/bluetooth/l2cap_core.c:1808)
    [   98.450125]  l2cap_conn_put (net/bluetooth/l2cap_core.c:1822)
    [   98.450154]  session_free (net/bluetooth/hidp/core.c:990)
    [   98.450181]  hidp_session_thread (net/bluetooth/hidp/core.c:1307)
    [   98.450213]  ? __pfx_hidp_session_thread (net/bluetooth/hidp/core.c:1264)
    [   98.450271]  ? kthread (kernel/kthread.c:433)
    [   98.450293]  ? __pfx_hidp_session_wake_function (net/bluetooth/hidp/core.c:1251)
    [   98.450339]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   98.450368]  ? find_held_lock (kernel/locking/lockdep.c:5350 (discriminator 1))
    [   98.450406]  ? __pfx_hidp_session_wake_function (net/bluetooth/hidp/core.c:1251)
    [   98.450442]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   98.450471]  ? trace_hardirqs_on (kernel/trace/trace_preemptirq.c:79 (discriminator 1))
    [   98.450499]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   98.450528]  ? kthread (kernel/kthread.c:433)
    [   98.450547]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   98.450578]  ? kthread (kernel/kthread.c:433)
    [   98.450598]  ? __pfx_hidp_session_thread (net/bluetooth/hidp/core.c:1264)
    [   98.450637]  kthread (kernel/kthread.c:467)
    [   98.450657]  ? __pfx_kthread (kernel/kthread.c:412)
    [   98.450680]  ret_from_fork (arch/x86/kernel/process.c:164)
    [   98.450715]  ? __pfx_ret_from_fork (arch/x86/kernel/process.c:153)
    [   98.450752]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [   98.450782]  ? __pfx_kthread (kernel/kthread.c:412)
    [   98.450804]  ret_from_fork_asm (arch/x86/entry/entry_64.S:258)
    [   98.450836]  </TASK>
    
    Fixes: b4f34d8d9d26 ("Bluetooth: hidp: add new session-management helpers")
    Reported-by: soufiane el hachmi <kilwa10@gmail.com>
    Tested-by: soufiane el hachmi <kilwa10@gmail.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: ISO: Fix defer tests being unstable [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Fri Feb 27 15:23:01 2026 -0500

    Bluetooth: ISO: Fix defer tests being unstable
    
    [ Upstream commit 62bcaa6b351b6dc400f6c6b83762001fd9f5c12d ]
    
    iso-tester defer tests seem to fail with hci_conn_hash_lookup_cig
    being unable to resolve a cig in set_cig_params_sync due a race
    where it is run immediatelly before hci_bind_cis is able to set
    the QoS settings into the hci_conn object.
    
    So this moves the assigning of the QoS settings to be done directly
    by hci_le_set_cig_params to prevent that from happening again.
    
    Fixes: 26afbd826ee3 ("Bluetooth: Add initial implementation of CIS connections")
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: L2CAP: Fix accepting multiple L2CAP_ECRED_CONN_REQ [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Tue Mar 3 13:29:53 2026 -0500

    Bluetooth: L2CAP: Fix accepting multiple L2CAP_ECRED_CONN_REQ
    
    commit 5b3e2052334f2ff6d5200e952f4aa66994d09899 upstream.
    
    Currently the code attempts to accept requests regardless of the
    command identifier which may cause multiple requests to be marked
    as pending (FLAG_DEFER_SETUP) which can cause more than
    L2CAP_ECRED_MAX_CID(5) to be allocated in l2cap_ecred_rsp_defer
    causing an overflow.
    
    The spec is quite clear that the same identifier shall not be used on
    subsequent requests:
    
    'Within each signaling channel a different Identifier shall be used
    for each successive request or indication.'
    https://www.bluetooth.com/wp-content/uploads/Files/Specification/HTML/Core-62/out/en/host/logical-link-control-and-adaptation-protocol-specification.html#UUID-32a25a06-4aa4-c6c7-77c5-dcfe3682355d
    
    So this attempts to check if there are any channels pending with the
    same identifier and rejects if any are found.
    
    Fixes: 15f02b910562 ("Bluetooth: L2CAP: Add initial code for Enhanced Credit Based Mode")
    Reported-by: Yiming Qian <yimingqian591@gmail.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    [ adapted variable names ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: L2CAP: Fix type confusion in l2cap_ecred_reconf_rsp() [+ + +]
Author: Lukas Johannes Möller <research@johannes-moeller.dev>
Date:   Tue Mar 10 21:59:46 2026 +0000

    Bluetooth: L2CAP: Fix type confusion in l2cap_ecred_reconf_rsp()
    
    commit 15145675690cab2de1056e7ed68e59cbd0452529 upstream.
    
    l2cap_ecred_reconf_rsp() casts the incoming data to struct
    l2cap_ecred_conn_rsp (the ECRED *connection* response, 8 bytes with
    result at offset 6) instead of struct l2cap_ecred_reconf_rsp (2 bytes
    with result at offset 0).
    
    This causes two problems:
    
     - The sizeof(*rsp) length check requires 8 bytes instead of the
       correct 2, so valid L2CAP_ECRED_RECONF_RSP packets are rejected
       with -EPROTO.
    
     - rsp->result reads from offset 6 instead of offset 0, returning
       wrong data when the packet is large enough to pass the check.
    
    Fix by using the correct type.  Also pass the already byte-swapped
    result variable to BT_DBG instead of the raw __le16 field.
    
    Fixes: 15f02b910562 ("Bluetooth: L2CAP: Add initial code for Enhanced Credit Based Mode")
    Cc: stable@vger.kernel.org
    Signed-off-by: Lukas Johannes Möller <research@johannes-moeller.dev>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: L2CAP: Fix use-after-free in l2cap_unregister_user [+ + +]
Author: Shaurya Rane <ssrane_b23@ee.vjti.ac.in>
Date:   Thu Nov 6 23:50:16 2025 +0530

    Bluetooth: L2CAP: Fix use-after-free in l2cap_unregister_user
    
    [ Upstream commit 752a6c9596dd25efd6978a73ff21f3b592668f4a ]
    
    After commit ab4eedb790ca ("Bluetooth: L2CAP: Fix corrupted list in
    hci_chan_del"), l2cap_conn_del() uses conn->lock to protect access to
    conn->users. However, l2cap_register_user() and l2cap_unregister_user()
    don't use conn->lock, creating a race condition where these functions can
    access conn->users and conn->hchan concurrently with l2cap_conn_del().
    
    This can lead to use-after-free and list corruption bugs, as reported
    by syzbot.
    
    Fix this by changing l2cap_register_user() and l2cap_unregister_user()
    to use conn->lock instead of hci_dev_lock(), ensuring consistent locking
    for the l2cap_conn structure.
    
    Reported-by: syzbot+14b6d57fb728e27ce23c@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=14b6d57fb728e27ce23c
    Fixes: ab4eedb790ca ("Bluetooth: L2CAP: Fix corrupted list in hci_chan_del")
    Signed-off-by: Shaurya Rane <ssrane_b23@ee.vjti.ac.in>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: L2CAP: Validate L2CAP_INFO_RSP payload length before access [+ + +]
Author: Lukas Johannes Möller <research@johannes-moeller.dev>
Date:   Tue Mar 10 21:59:47 2026 +0000

    Bluetooth: L2CAP: Validate L2CAP_INFO_RSP payload length before access
    
    commit dd815e6e3918dc75a49aaabac36e4f024d675101 upstream.
    
    l2cap_information_rsp() checks that cmd_len covers the fixed
    l2cap_info_rsp header (type + result, 4 bytes) but then reads
    rsp->data without verifying that the payload is present:
    
     - L2CAP_IT_FEAT_MASK calls get_unaligned_le32(rsp->data), which reads
       4 bytes past the header (needs cmd_len >= 8).
    
     - L2CAP_IT_FIXED_CHAN reads rsp->data[0], 1 byte past the header
       (needs cmd_len >= 5).
    
    A truncated L2CAP_INFO_RSP with result == L2CAP_IR_SUCCESS triggers an
    out-of-bounds read of adjacent skb data.
    
    Guard each data access with the required payload length check.  If the
    payload is too short, skip the read and let the state machine complete
    with safe defaults (feat_mask and remote_fixed_chan remain zero from
    kzalloc), so the info timer cleanup and l2cap_conn_start() still run
    and the connection is not stalled.
    
    Fixes: 4e8402a3f884 ("[Bluetooth] Retrieve L2CAP features mask on connection setup")
    Cc: stable@vger.kernel.org
    Signed-off-by: Lukas Johannes Möller <research@johannes-moeller.dev>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: LE L2CAP: Disconnect if received packet's SDU exceeds IMTU [+ + +]
Author: Christian Eggers <ceggers@arri.de>
Date:   Wed Feb 25 18:07:25 2026 +0100

    Bluetooth: LE L2CAP: Disconnect if received packet's SDU exceeds IMTU
    
    [ Upstream commit e1d9a66889867c232657a9b6f25d451d7c3ab96f ]
    
    Core 6.0, Vol 3, Part A, 3.4.3:
    "If the SDU length field value exceeds the receiver's MTU, the receiver
    shall disconnect the channel..."
    
    This fixes L2CAP/LE/CFC/BV-26-C (running together with 'l2test -r -P
    0x0027 -V le_public -I 100').
    
    Fixes: aac23bf63659 ("Bluetooth: Implement LE L2CAP reassembly")
    Signed-off-by: Christian Eggers <ceggers@arri.de>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: LE L2CAP: Disconnect if sum of payload sizes exceed SDU [+ + +]
Author: Christian Eggers <ceggers@arri.de>
Date:   Wed Feb 25 18:07:27 2026 +0100

    Bluetooth: LE L2CAP: Disconnect if sum of payload sizes exceed SDU
    
    [ Upstream commit b6a2bf43aa37670432843bc73ae2a6288ba4d6f8 ]
    
    Core 6.0, Vol 3, Part A, 3.4.3:
    "... If the sum of the payload sizes for the K-frames exceeds the
    specified SDU length, the receiver shall disconnect the channel."
    
    This fixes L2CAP/LE/CFC/BV-27-C (running together with 'l2test -r -P
    0x0027 -V le_public').
    
    Fixes: aac23bf63659 ("Bluetooth: Implement LE L2CAP reassembly")
    Signed-off-by: Christian Eggers <ceggers@arri.de>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: qca: fix ROM version reading on WCN3998 chips [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Date:   Wed Mar 11 01:02:57 2026 +0200

    Bluetooth: qca: fix ROM version reading on WCN3998 chips
    
    [ Upstream commit 99b2c531e0e797119ae1b9195a8764ee98b00e65 ]
    
    WCN3998 uses a bit different format for rom version:
    
    [    5.479978] Bluetooth: hci0: setting up wcn399x
    [    5.633763] Bluetooth: hci0: QCA Product ID   :0x0000000a
    [    5.645350] Bluetooth: hci0: QCA SOC Version  :0x40010224
    [    5.650906] Bluetooth: hci0: QCA ROM Version  :0x00001001
    [    5.665173] Bluetooth: hci0: QCA Patch Version:0x00006699
    [    5.679356] Bluetooth: hci0: QCA controller version 0x02241001
    [    5.691109] Bluetooth: hci0: QCA Downloading qca/crbtfw21.tlv
    [    6.680102] Bluetooth: hci0: QCA Downloading qca/crnv21.bin
    [    6.842948] Bluetooth: hci0: QCA setup on UART is completed
    
    Fixes: 523760b7ff88 ("Bluetooth: hci_qca: Added support for WCN3998")
    Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: SMP: make SM/PER/KDU/BI-04-C happy [+ + +]
Author: Christian Eggers <ceggers@arri.de>
Date:   Wed Feb 25 18:07:28 2026 +0100

    Bluetooth: SMP: make SM/PER/KDU/BI-04-C happy
    
    [ Upstream commit 0e4d4dcc1a6e82cc6f9abf32193558efa7e1613d ]
    
    The last test step ("Test with Invalid public key X and Y, all set to
    0") expects to get an "DHKEY check failed" instead of "unspecified".
    
    Fixes: 6d19628f539f ("Bluetooth: SMP: Fail if remote and local public keys are identical")
    Signed-off-by: Christian Eggers <ceggers@arri.de>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.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/bonding: reject vlan+srcmac xmit_hash_policy change when XDP is loaded [+ + +]
Author: Jiayuan Chen <jiayuan.chen@shopee.com>
Date:   Thu Feb 26 16:03:01 2026 +0800

    bpf/bonding: reject vlan+srcmac xmit_hash_policy change when XDP is loaded
    
    [ Upstream commit 479d589b40b836442bbdadc3fdb37f001bb67f26 ]
    
    bond_option_mode_set() already rejects mode changes that would make a
    loaded XDP program incompatible via bond_xdp_check().  However,
    bond_option_xmit_hash_policy_set() has no such guard.
    
    For 802.3ad and balance-xor modes, bond_xdp_check() returns false when
    xmit_hash_policy is vlan+srcmac, because the 802.1q payload is usually
    absent due to hardware offload.  This means a user can:
    
    1. Attach a native XDP program to a bond in 802.3ad/balance-xor mode
       with a compatible xmit_hash_policy (e.g. layer2+3).
    2. Change xmit_hash_policy to vlan+srcmac while XDP remains loaded.
    
    This leaves bond->xdp_prog set but bond_xdp_check() now returning false
    for the same device.  When the bond is later destroyed, dev_xdp_uninstall()
    calls bond_xdp_set(dev, NULL, NULL) to remove the program, which hits
    the bond_xdp_check() guard and returns -EOPNOTSUPP, triggering:
    
    WARN_ON(dev_xdp_install(dev, mode, bpf_op, NULL, 0, NULL))
    
    Fix this by rejecting xmit_hash_policy changes to vlan+srcmac when an
    XDP program is loaded on a bond in 802.3ad or balance-xor mode.
    
    commit 39a0876d595b ("net, bonding: Disallow vlan+srcmac with XDP")
    introduced bond_xdp_check() which returns false for 802.3ad/balance-xor
    modes when xmit_hash_policy is vlan+srcmac.  The check was wired into
    bond_xdp_set() to reject XDP attachment with an incompatible policy, but
    the symmetric path -- preventing xmit_hash_policy from being changed to an
    incompatible value after XDP is already loaded -- was left unguarded in
    bond_option_xmit_hash_policy_set().
    
    Note:
    commit 094ee6017ea0 ("bonding: check xdp prog when set bond mode")
    later added a similar guard to bond_option_mode_set(), but
    bond_option_xmit_hash_policy_set() remained unprotected.
    
    Reported-by: syzbot+5a287bcdc08104bc3132@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/all/6995aff6.050a0220.2eeac1.014e.GAE@google.com/T/
    Fixes: 39a0876d595b ("net, bonding: Disallow vlan+srcmac with XDP")
    Signed-off-by: Jiayuan Chen <jiayuan.chen@shopee.com>
    Link: https://patch.msgid.link/20260226080306.98766-2-jiayuan.chen@linux.dev
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf: export bpf_link_inc_not_zero. [+ + +]
Author: Kui-Feng Lee <thinker.li@gmail.com>
Date:   Wed May 29 23:59:42 2024 -0700

    bpf: export bpf_link_inc_not_zero.
    
    [ Upstream commit 67c3e8353f45c27800eecc46e00e8272f063f7d1 ]
    
    bpf_link_inc_not_zero() will be used by kernel modules.  We will use it in
    bpf_testmod.c later.
    
    Signed-off-by: Kui-Feng Lee <thinker.li@gmail.com>
    Link: https://lore.kernel.org/r/20240530065946.979330-5-thinker.li@gmail.com
    Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
    Stable-dep-of: 56145d237385 ("bpf: Fix a UAF issue in bpf_trampoline_link_cgroup_shim")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Fix a UAF issue in bpf_trampoline_link_cgroup_shim [+ + +]
Author: Lang Xu <xulang@uniontech.com>
Date:   Tue Mar 3 17:52:17 2026 +0800

    bpf: Fix a UAF issue in bpf_trampoline_link_cgroup_shim
    
    [ Upstream commit 56145d237385ca0e7ca9ff7b226aaf2eb8ef368b ]
    
    The root cause of this bug is that when 'bpf_link_put' reduces the
    refcount of 'shim_link->link.link' to zero, the resource is considered
    released but may still be referenced via 'tr->progs_hlist' in
    'cgroup_shim_find'. The actual cleanup of 'tr->progs_hlist' in
    'bpf_shim_tramp_link_release' is deferred. During this window, another
    process can cause a use-after-free via 'bpf_trampoline_link_cgroup_shim'.
    
    Based on Martin KaFai Lau's suggestions, I have created a simple patch.
    
    To fix this:
       Add an atomic non-zero check in 'bpf_trampoline_link_cgroup_shim'.
       Only increment the refcount if it is not already zero.
    
    Testing:
       I verified the fix by adding a delay in
       'bpf_shim_tramp_link_release' to make the bug easier to trigger:
    
    static void bpf_shim_tramp_link_release(struct bpf_link *link)
    {
            /* ... */
            if (!shim_link->trampoline)
                    return;
    
    +       msleep(100);
            WARN_ON_ONCE(bpf_trampoline_unlink_prog(&shim_link->link,
                    shim_link->trampoline, NULL));
            bpf_trampoline_put(shim_link->trampoline);
    }
    
    Before the patch, running a PoC easily reproduced the crash(almost 100%)
    with a call trace similar to KaiyanM's report.
    After the patch, the bug no longer occurs even after millions of
    iterations.
    
    Fixes: 69fd337a975c ("bpf: per-cgroup lsm flavor")
    Reported-by: Kaiyan Mei <M202472210@hust.edu.cn>
    Closes: https://lore.kernel.org/bpf/3c4ebb0b.46ff8.19abab8abe2.Coremail.kaiyanm@hust.edu.cn/
    Signed-off-by: Lang Xu <xulang@uniontech.com>
    Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
    Link: https://patch.msgid.link/279EEE1BA1DDB49D+20260303095217.34436-1-xulang@uniontech.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Fix stack-out-of-bounds write in devmap [+ + +]
Author: Kohei Enju <kohei@enjuk.jp>
Date:   Wed Feb 25 05:34:44 2026 +0000

    bpf: Fix stack-out-of-bounds write in devmap
    
    [ Upstream commit b7bf516c3ecd9a2aae2dc2635178ab87b734fef1 ]
    
    get_upper_ifindexes() iterates over all upper devices and writes their
    indices into an array without checking bounds.
    
    Also the callers assume that the max number of upper devices is
    MAX_NEST_DEV and allocate excluded_devices[1+MAX_NEST_DEV] on the stack,
    but that assumption is not correct and the number of upper devices could
    be larger than MAX_NEST_DEV (e.g., many macvlans), causing a
    stack-out-of-bounds write.
    
    Add a max parameter to get_upper_ifindexes() to avoid the issue.
    When there are too many upper devices, return -EOVERFLOW and abort the
    redirect.
    
    To reproduce, create more than MAX_NEST_DEV(8) macvlans on a device with
    an XDP program attached using BPF_F_BROADCAST | BPF_F_EXCLUDE_INGRESS.
    Then send a packet to the device to trigger the XDP redirect path.
    
    Reported-by: syzbot+10cc7f13760b31bd2e61@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/all/698c4ce3.050a0220.340abe.000b.GAE@google.com/T/
    Fixes: aeea1b86f936 ("bpf, devmap: Exclude XDP broadcast to master device")
    Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Signed-off-by: Kohei Enju <kohei@enjuk.jp>
    Link: https://lore.kernel.org/r/20260225053506.4738-1-kohei@enjuk.jp
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Forget ranges when refining tnum after JSET [+ + +]
Author: Paul Chaignon <paul.chaignon@gmail.com>
Date:   Thu Jul 10 20:20:53 2025 +0200

    bpf: Forget ranges when refining tnum after JSET
    
    commit 6279846b9b2532e1b04559ef8bd0dec049f29383 upstream.
    
    Syzbot reported a kernel warning due to a range invariant violation on
    the following BPF program.
    
      0: call bpf_get_netns_cookie
      1: if r0 == 0 goto <exit>
      2: if r0 & Oxffffffff goto <exit>
    
    The issue is on the path where we fall through both jumps.
    
    That path is unreachable at runtime: after insn 1, we know r0 != 0, but
    with the sign extension on the jset, we would only fallthrough insn 2
    if r0 == 0. Unfortunately, is_branch_taken() isn't currently able to
    figure this out, so the verifier walks all branches. The verifier then
    refines the register bounds using the second condition and we end
    up with inconsistent bounds on this unreachable path:
    
      1: if r0 == 0 goto <exit>
        r0: u64=[0x1, 0xffffffffffffffff] var_off=(0, 0xffffffffffffffff)
      2: if r0 & 0xffffffff goto <exit>
        r0 before reg_bounds_sync: u64=[0x1, 0xffffffffffffffff] var_off=(0, 0)
        r0 after reg_bounds_sync:  u64=[0x1, 0] var_off=(0, 0)
    
    Improving the range refinement for JSET to cover all cases is tricky. We
    also don't expect many users to rely on JSET given LLVM doesn't generate
    those instructions. So instead of improving the range refinement for
    JSETs, Eduard suggested we forget the ranges whenever we're narrowing
    tnums after a JSET. This patch implements that approach.
    
    Reported-by: syzbot+c711ce17dd78e5d4fdcf@syzkaller.appspotmail.com
    Suggested-by: Eduard Zingerman <eddyz87@gmail.com>
    Acked-by: Yonghong Song <yonghong.song@linux.dev>
    Acked-by: Eduard Zingerman <eddyz87@gmail.com>
    Signed-off-by: Paul Chaignon <paul.chaignon@gmail.com>
    Link: https://lore.kernel.org/r/9d4fd6432a095d281f815770608fdcd16028ce0b.1752171365.git.paul.chaignon@gmail.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    [ shung-hsi.yu: no detection or kernel warning for invariant violation before
      6.8, but the same umin=1,umax=0 state can occur when jset is preceed by r0 < 1.
      Changes were made to adapt to older range refinement logic before commit
      67420501e868 ("bpf: generalize reg_set_min_max() to handle non-const register
      comparisons"). ]
    Signed-off-by: Shung-Hsi Yu <shung-hsi.yu@suse.com>
    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 raid stripe tree definitions [+ + +]
Author: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Date:   Thu Sep 14 09:06:56 2023 -0700

    btrfs: add raid stripe tree definitions
    
    [ Upstream commit ee1293308e01d359688243d665138f35a6f1f9b8 ]
    
    Add definitions for the raid stripe tree. This tree will hold information
    about the on-disk layout of the stripes in a RAID set.
    
    Each stripe extent has a 1:1 relationship with an on-disk extent item and
    is doing the logical to per-drive physical address translation for the
    extent item in question.
    
    Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Stable-dep-of: 511dc8912ae3 ("btrfs: fix incorrect key offset in error message in check_dev_extent_item()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: add support for inserting raid stripe extents [+ + +]
Author: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Date:   Thu Sep 14 09:06:58 2023 -0700

    btrfs: add support for inserting raid stripe extents
    
    [ Upstream commit 02c372e1f016e5113217597ab37b399c4e407477 ]
    
    Add support for inserting stripe extents into the raid stripe tree on
    completion of every write that needs an extra logical-to-physical
    translation when using RAID.
    
    Inserting the stripe extents happens after the data I/O has completed,
    this is done to
    
      a) support zone-append and
      b) rule out the possibility of a RAID-write-hole.
    
    Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Stable-dep-of: 511dc8912ae3 ("btrfs: fix incorrect key offset in error message in check_dev_extent_item()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: always fallback to buffered write if the inode requires checksum [+ + +]
Author: Qu Wenruo <wqu@suse.com>
Date:   Mon Feb 23 18:33:48 2026 +1030

    btrfs: always fallback to buffered write if the inode requires checksum
    
    commit 968f19c5b1b7d5595423b0ac0020cc18dfed8cb5 upstream.
    
    [BUG]
    It is a long known bug that VM image on btrfs can lead to data csum
    mismatch, if the qemu is using direct-io for the image (this is commonly
    known as cache mode 'none').
    
    [CAUSE]
    Inside the VM, if the fs is EXT4 or XFS, or even NTFS from Windows, the
    fs is allowed to dirty/modify the folio even if the folio is under
    writeback (as long as the address space doesn't have AS_STABLE_WRITES
    flag inherited from the block device).
    
    This is a valid optimization to improve the concurrency, and since these
    filesystems have no extra checksum on data, the content change is not a
    problem at all.
    
    But the final write into the image file is handled by btrfs, which needs
    the content not to be modified during writeback, or the checksum will
    not match the data (checksum is calculated before submitting the bio).
    
    So EXT4/XFS/NTRFS assume they can modify the folio under writeback, but
    btrfs requires no modification, this leads to the false csum mismatch.
    
    This is only a controlled example, there are even cases where
    multi-thread programs can submit a direct IO write, then another thread
    modifies the direct IO buffer for whatever reason.
    
    For such cases, btrfs has no sane way to detect such cases and leads to
    false data csum mismatch.
    
    [FIX]
    I have considered the following ideas to solve the problem:
    
    - Make direct IO to always skip data checksum
      This not only requires a new incompatible flag, as it breaks the
      current per-inode NODATASUM flag.
      But also requires extra handling for no csum found cases.
    
      And this also reduces our checksum protection.
    
    - Let hardware handle all the checksum
      AKA, just nodatasum mount option.
      That requires trust for hardware (which is not that trustful in a lot
      of cases), and it's not generic at all.
    
    - Always fallback to buffered write if the inode requires checksum
      This was suggested by Christoph, and is the solution utilized by this
      patch.
    
      The cost is obvious, the extra buffer copying into page cache, thus it
      reduces the performance.
      But at least it's still user configurable, if the end user still wants
      the zero-copy performance, just set NODATASUM flag for the inode
      (which is a common practice for VM images on btrfs).
    
      Since we cannot trust user space programs to keep the buffer
      consistent during direct IO, we have no choice but always falling back
      to buffered IO.  At least by this, we avoid the more deadly false data
      checksum mismatch error.
    
    Cc: stable@vger.kernel.org # 6.6
    [ Conflicts caused by code extracted into direct-io.c ]
    Suggested-by: Christoph Hellwig <hch@infradead.org>
    Reviewed-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: Qu Wenruo <wqu@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: do not strictly require dirty metadata threshold for metadata writepages [+ + +]
Author: Qu Wenruo <wqu@suse.com>
Date:   Fri Feb 27 11:43:00 2026 +0800

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

btrfs: fix compat mask in error messages in btrfs_check_features() [+ + +]
Author: Mark Harmstone <mark@harmstone.com>
Date:   Tue Feb 17 17:46:41 2026 +0000

    btrfs: fix compat mask in error messages in btrfs_check_features()
    
    [ Upstream commit 587bb33b10bda645a1028c1737ad3992b3d7cf61 ]
    
    Commit d7f67ac9a928 ("btrfs: relax block-group-tree feature dependency
    checks") introduced a regression when it comes to handling unsupported
    incompat or compat_ro flags. Beforehand we only printed the flags that
    we didn't recognize, afterwards we printed them all, which is less
    useful. Fix the error handling so it behaves like it used to.
    
    Fixes: d7f67ac9a928 ("btrfs: relax block-group-tree feature dependency checks")
    Reviewed-by: Qu Wenruo <wqu@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: Sasha Levin <sashal@kernel.org>

btrfs: fix incorrect key offset in error message in check_dev_extent_item() [+ + +]
Author: Mark Harmstone <mark@harmstone.com>
Date:   Tue Feb 17 10:21:44 2026 +0000

    btrfs: fix incorrect key offset in error message in check_dev_extent_item()
    
    [ Upstream commit 511dc8912ae3e929c1a182f5e6b2326516fd42a0 ]
    
    Fix the error message in check_dev_extent_item(), when an overlapping
    stripe is encountered. For dev extents, objectid is the disk number and
    offset the physical address, so prev_key->objectid should actually be
    prev_key->offset.
    
    (I can't take any credit for this one - this was discovered by Chris and
    his friend Claude.)
    
    Reported-by: Chris Mason <clm@fb.com>
    Fixes: 008e2512dc56 ("btrfs: tree-checker: add dev extent item checks")
    Reviewed-by: Qu Wenruo <wqu@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: Sasha Levin <sashal@kernel.org>

btrfs: fix NULL dereference on root when tracing inode eviction [+ + +]
Author: Miquel Sabaté Solà <mssola@mssola.com>
Date:   Tue Feb 24 03:32:14 2026 +0000

    btrfs: fix NULL dereference on root when tracing inode eviction
    
    [ Upstream commit f157dd661339fc6f5f2b574fe2429c43bd309534 ]
    
    When evicting an inode the first thing we do is to setup tracing for it,
    which implies fetching the root's id. But in btrfs_evict_inode() the
    root might be NULL, as implied in the next check that we do in
    btrfs_evict_inode().
    
    Hence, we either should set the ->root_objectid to 0 in case the root is
    NULL, or we move tracing setup after checking that the root is not
    NULL. Setting the rootid to 0 at least gives us the possibility to trace
    this call even in the case when the root is NULL, so that's the solution
    taken here.
    
    Fixes: 1abe9b8a138c ("Btrfs: add initial tracepoint support for btrfs")
    Reported-by: syzbot+d991fea1b4b23b1f6bf8@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=d991fea1b4b23b1f6bf8
    Signed-off-by: Miquel Sabaté Solà <mssola@mssola.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    [ Adjust context ]
    Signed-off-by: Bin Lan <lanbincn@139.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: fix objectid value in error message in check_extent_data_ref() [+ + +]
Author: Mark Harmstone <mark@harmstone.com>
Date:   Tue Feb 17 14:39:46 2026 +0000

    btrfs: fix objectid value in error message in check_extent_data_ref()
    
    [ Upstream commit a10172780526c2002e062102ad4f2aabac495889 ]
    
    Fix a copy-paste error in check_extent_data_ref(): we're printing root
    as in the message above, we should be printing objectid.
    
    Fixes: f333a3c7e832 ("btrfs: tree-checker: validate dref root and objectid")
    Reviewed-by: Qu Wenruo <wqu@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: Sasha Levin <sashal@kernel.org>

btrfs: fix transaction abort on file creation due to name hash collision [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Thu Mar 19 14:54:43 2026 -0400

    btrfs: fix transaction abort on file creation due to name hash collision
    
    [ Upstream commit 2d1ababdedd4ba38867c2500eb7f95af5ddeeef7 ]
    
    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: Sasha Levin <sashal@kernel.org>
    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 Mar 19 14:35:14 2026 -0400

    btrfs: fix transaction abort on set received ioctl due to item overflow
    
    [ Upstream commit 87f2c46003fce4d739138aab4af1942b1afdadac ]
    
    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>
    [ adapted BTRFS_PATH_AUTO_FREE macro to manual btrfs_free_path calls ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: fix transaction abort when snapshotting received subvolumes [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Thu Mar 19 13:16:35 2026 -0400

    btrfs: fix transaction abort when snapshotting received subvolumes
    
    [ Upstream commit e1b18b959025e6b5dbad668f391f65d34b39595a ]
    
    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>
    [ adapted error check condition to omit unlikely() wrapper ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: fix warning in scrub_verify_one_metadata() [+ + +]
Author: Mark Harmstone <mark@harmstone.com>
Date:   Tue Feb 17 17:46:13 2026 +0000

    btrfs: fix warning in scrub_verify_one_metadata()
    
    [ Upstream commit 44e2fda66427a0442d8d2c0e6443256fb458ab6b ]
    
    Commit b471965fdb2d ("btrfs: fix replace/scrub failure with
    metadata_uuid") fixed the comparison in scrub_verify_one_metadata() to
    use metadata_uuid rather than fsid, but left the warning as it was. Fix
    it so it matches what we're doing.
    
    Fixes: b471965fdb2d ("btrfs: fix replace/scrub failure with metadata_uuid")
    Reviewed-by: Qu Wenruo <wqu@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: Sasha Levin <sashal@kernel.org>

btrfs: log new dentries when logging parent dir of a conflicting inode [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Tue Mar 3 16:57:43 2026 +0000

    btrfs: log new dentries when logging parent dir of a conflicting inode
    
    [ Upstream commit 9573a365ff9ff45da9222d3fe63695ce562beb24 ]
    
    If we log the parent directory of a conflicting inode, we are not logging
    the new dentries of the directory, so when we finish we have the parent
    directory's inode marked as logged but we did not log its new dentries.
    As a consequence if the parent directory is explicitly fsynced later and
    it does not have any new changes since we logged it, the fsync is a no-op
    and after a power failure the new dentries are missing.
    
    Example scenario:
    
      $ mkdir foo
    
      $ sync
    
      $rmdir foo
    
      $ mkdir dir1
      $ mkdir dir2
    
      # A file with the same name and parent as the directory we just deleted
      # and was persisted in a past transaction. So the deleted directory's
      # inode is a conflicting inode of this new file's inode.
      $ touch foo
    
      $ ln foo dir2/link
    
      # The fsync on dir2 will log the parent directory (".") because the
      # conflicting inode (deleted directory) does not exists anymore, but it
      # it does not log its new dentries (dir1).
      $ xfs_io -c "fsync" dir2
    
      # This fsync on the parent directory is no-op, since the previous fsync
      # logged it (but without logging its new dentries).
      $ xfs_io -c "fsync" .
    
      <power failure>
    
      # After log replay dir1 is missing.
    
    Fix this by ensuring we log new dir dentries whenever we log the parent
    directory of a no longer existing conflicting inode.
    
    A test case for fstests will follow soon.
    
    Reported-by: Vyacheslav Kovalevsky <slava.kovalevskiy.2014@gmail.com>
    Link: https://lore.kernel.org/linux-btrfs/182055fa-e9ce-4089-9f5f-4b8a23e8dd91@gmail.com/
    Fixes: a3baaf0d786e ("Btrfs: fix fsync after succession of renames and unlink/rmdir")
    Reviewed-by: Boris Burkov <boris@bur.io>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: move btrfs_crc32c_final into free-space-cache.c [+ + +]
Author: Josef Bacik <josef@toxicpanda.com>
Date:   Fri Aug 25 16:19:19 2023 -0400

    btrfs: move btrfs_crc32c_final into free-space-cache.c
    
    [ Upstream commit 102f2640a346e84cb5c2d19805a9dd38a776013c ]
    
    This is the only place this helper is used, take it out of ctree.h and
    move it into free-space-cache.c.
    
    Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Reviewed-by: Anand Jain <anand.jain@oracle.com>
    Signed-off-by: Josef Bacik <josef@toxicpanda.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Stable-dep-of: 511dc8912ae3 ("btrfs: fix incorrect key offset in error message in check_dev_extent_item()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: move btrfs_extref_hash into inode-item.h [+ + +]
Author: Josef Bacik <josef@toxicpanda.com>
Date:   Fri Aug 25 16:19:21 2023 -0400

    btrfs: move btrfs_extref_hash into inode-item.h
    
    [ Upstream commit 98e4f060c4f565a3b62e8cdfe6b89f59167312b6 ]
    
    Ideally this would be un-inlined, but that is a cleanup for later.  For
    now move this into inode-item.h, which is where the extref code lives.
    
    Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Reviewed-by: Anand Jain <anand.jain@oracle.com>
    Signed-off-by: Josef Bacik <josef@toxicpanda.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Stable-dep-of: 511dc8912ae3 ("btrfs: fix incorrect key offset in error message in check_dev_extent_item()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: read raid stripe tree from disk [+ + +]
Author: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Date:   Thu Sep 14 09:06:57 2023 -0700

    btrfs: read raid stripe tree from disk
    
    [ Upstream commit 515020900d447796bc2f0f57064663617a11b65d ]
    
    If we find the raid-stripe-tree on mount, read it from disk. This is
    a backward incompatible feature. The rescue=ignorebadroots mount option
    will skip this tree.
    
    Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Stable-dep-of: 511dc8912ae3 ("btrfs: fix incorrect key offset in error message in check_dev_extent_item()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: remove btrfs_crc32c wrapper [+ + +]
Author: Josef Bacik <josef@toxicpanda.com>
Date:   Fri Aug 25 16:19:20 2023 -0400

    btrfs: remove btrfs_crc32c wrapper
    
    [ Upstream commit 03e86348965a5fa13593db8682132033d663f7ee ]
    
    This simply sends the same arguments into crc32c(), and is just used in
    a few places.  Remove this wrapper and directly call crc32c() in these
    instances.
    
    Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Reviewed-by: Anand Jain <anand.jain@oracle.com>
    Signed-off-by: Josef Bacik <josef@toxicpanda.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Stable-dep-of: 511dc8912ae3 ("btrfs: fix incorrect key offset in error message in check_dev_extent_item()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: tree-checker: fix misleading root drop_level error message [+ + +]
Author: ZhengYuan Huang <gality369@gmail.com>
Date:   Thu Mar 12 08:33:21 2026 +0800

    btrfs: tree-checker: fix misleading root drop_level error message
    
    [ Upstream commit fc1cd1f18c34f91e78362f9629ab9fd43b9dcab9 ]
    
    Fix tree-checker error message to report "invalid root drop_level"
    instead of the misleading "invalid root level".
    
    Fixes: 259ee7754b67 ("btrfs: tree-checker: Add ROOT_ITEM check")
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: ZhengYuan Huang <gality369@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>

 
bus: omap-ocp2scp: Convert to platform remove callback returning void [+ + +]
Author: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Date:   Thu Nov 9 21:28:32 2023 +0100

    bus: omap-ocp2scp: Convert to platform remove callback returning void
    
    [ Upstream commit 854f89a5b56354ba4135e0e1f0e57ab2caee59ee ]
    
    The .remove() callback for a platform driver returns an int which makes
    many driver authors wrongly assume it's possible to do error handling by
    returning an error code. However the value returned is ignored (apart
    from emitting a warning) and this typically results in resource leaks.
    
    To improve here there is a quest to make the remove callback return
    void. In the first step of this quest all drivers are converted to
    .remove_new(), which already returns void. Eventually after all drivers
    are converted, .remove_new() will be renamed to .remove().
    
    Trivially convert this driver from always returning zero in the remove
    callback to the void returning variant.
    
    Link: https://lore.kernel.org/r/20231109202830.4124591-3-u.kleine-koenig@pengutronix.de
    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Stable-dep-of: 5eb63e9bb65d ("bus: omap-ocp2scp: fix OF populate on driver rebind")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bus: omap-ocp2scp: fix OF populate on driver rebind [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Dec 19 12:01:19 2025 +0100

    bus: omap-ocp2scp: fix OF populate on driver rebind
    
    [ Upstream commit 5eb63e9bb65d88abde647ced50fe6ad40c11de1a ]
    
    Since commit c6e126de43e7 ("of: Keep track of populated platform
    devices") child devices will not be created by of_platform_populate()
    if the devices had previously been deregistered individually so that the
    OF_POPULATED flag is still set in the corresponding OF nodes.
    
    Switch to using of_platform_depopulate() instead of open coding so that
    the child devices are created if the driver is rebound.
    
    Fixes: c6e126de43e7 ("of: Keep track of populated platform devices")
    Cc: stable@vger.kernel.org      # 3.16
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20251219110119.23507-1-johan@kernel.org
    Signed-off-by: Kevin Hilman <khilman@baylibre.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
cache: ax45mp: Fix device node reference leak in ax45mp_cache_init() [+ + +]
Author: Felix Gu <ustc.gu@gmail.com>
Date:   Sat Jan 31 01:49:09 2026 +0800

    cache: ax45mp: Fix device node reference leak in ax45mp_cache_init()
    
    [ Upstream commit 0528a348b04b327a4611e29589beb4c9ae81304a ]
    
    In ax45mp_cache_init(), of_find_matching_node() returns a device node
    with an incremented reference count that must be released with
    of_node_put(). The current code fails to call of_node_put() which
    causes a reference leak.
    
    Use the __free(device_node) attribute to ensure automatic cleanup when
    the variable goes out of scope.
    
    Fixes: d34599bcd2e4 ("cache: Add L2 cache management for Andes AX45MP RISC-V core")
    Signed-off-by: Felix Gu <ustc.gu@gmail.com>
    Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
can: bcm: fix locking for bcm_op runtime updates [+ + +]
Author: Oliver Hartkopp <socketcan@hartkopp.net>
Date:   Wed Feb 18 11:58:06 2026 +0100

    can: bcm: fix locking for bcm_op runtime updates
    
    [ Upstream commit c35636e91e392e1540949bbc67932167cb48bc3a ]
    
    Commit c2aba69d0c36 ("can: bcm: add locking for bcm_op runtime updates")
    added a locking for some variables that can be modified at runtime when
    updating the sending bcm_op with a new TX_SETUP command in bcm_tx_setup().
    
    Usually the RX_SETUP only handles and filters incoming traffic with one
    exception: When the RX_RTR_FRAME flag is set a predefined CAN frame is
    sent when a specific RTR frame is received. Therefore the rx bcm_op uses
    bcm_can_tx() which uses the bcm_tx_lock that was only initialized in
    bcm_tx_setup(). Add the missing spin_lock_init() when allocating the
    bcm_op in bcm_rx_setup() to handle the RTR case properly.
    
    Fixes: c2aba69d0c36 ("can: bcm: add locking for bcm_op runtime updates")
    Reported-by: syzbot+5b11eccc403dd1cea9f8@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/linux-can/699466e4.a70a0220.2c38d7.00ff.GAE@google.com/
    Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
    Link: https://patch.msgid.link/20260218-bcm_spin_lock_init-v1-1-592634c8a5b5@hartkopp.net
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: ems_usb: ems_usb_read_bulk_callback(): check the proper length of a message [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon Feb 23 17:51:17 2026 +0100

    can: ems_usb: ems_usb_read_bulk_callback(): check the proper length of a message
    
    commit 38a01c9700b0dcafe97dfa9dc7531bf4a245deff upstream.
    
    When looking at the data in a USB urb, the actual_length is the size of
    the buffer passed to the driver, not the transfer_buffer_length which is
    set by the driver as the max size of the buffer.
    
    When parsing the messages in ems_usb_read_bulk_callback() properly check
    the size both at the beginning of parsing the message to make sure it is
    big enough for the expected structure, and at the end of the message to
    make sure we don't overflow past the end of the buffer for the next
    message.
    
    Cc: Vincent Mailhol <mailhol@kernel.org>
    Cc: Marc Kleine-Budde <mkl@pengutronix.de>
    Cc: stable@kernel.org
    Assisted-by: gkh_clanker_2000
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Link: https://patch.msgid.link/2026022316-answering-strainer-a5db@gregkh
    Fixes: 702171adeed3 ("ems_usb: Added support for EMS CPC-USB/ARM7 CAN/USB interface")
    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:   Mon Mar 16 13:19:47 2026 -0400

    can: gs_usb: gs_can_open(): always configure bitrates before starting device
    
    [ Upstream commit 2df6162785f31f1bbb598cfc3b08e4efc88f80b6 ]
    
    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>
    [ adapted the `.fd` sub-struct ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    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>

can: mcp251x: fix deadlock in error path of mcp251x_open [+ + +]
Author: Alban Bedel <alban.bedel@lht.dlh.de>
Date:   Mon Feb 9 15:47:05 2026 +0100

    can: mcp251x: fix deadlock in error path of mcp251x_open
    
    [ Upstream commit ab3f894de216f4a62adc3b57e9191888cbf26885 ]
    
    The mcp251x_open() function call free_irq() in its error path with the
    mpc_lock mutex held. But if an interrupt already occurred the
    interrupt handler will be waiting for the mpc_lock and free_irq() will
    deadlock waiting for the handler to finish.
    
    This issue is similar to the one fixed in commit 7dd9c26bd6cf ("can:
    mcp251x: fix deadlock if an interrupt occurs during mcp251x_open") but
    for the error path.
    
    To solve this issue move the call to free_irq() after the lock is
    released. Setting `priv->force_quit = 1` beforehand ensure that the IRQ
    handler will exit right away once it acquired the lock.
    
    Signed-off-by: Alban Bedel <alban.bedel@lht.dlh.de>
    Link: https://patch.msgid.link/20260209144706.2261954-1-alban.bedel@lht.dlh.de
    Fixes: bf66f3736a94 ("can: mcp251x: Move to threaded interrupts instead of workqueues.")
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: ucan: Fix infinite loop from zero-length messages [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon Feb 23 17:30:20 2026 +0100

    can: ucan: Fix infinite loop from zero-length messages
    
    commit 1e446fd0582ad8be9f6dafb115fc2e7245f9bea7 upstream.
    
    If a broken ucan device gets a message with the message length field set
    to 0, then the driver will loop for forever in
    ucan_read_bulk_callback(), hanging the system.  If the length is 0, just
    skip the message and go on to the next one.
    
    This has been fixed in the kvaser_usb driver in the past in commit
    0c73772cd2b8 ("can: kvaser_usb: leaf: Fix potential infinite loop in
    command parsers"), so there must be some broken devices out there like
    this somewhere.
    
    Cc: Marc Kleine-Budde <mkl@pengutronix.de>
    Cc: Vincent Mailhol <mailhol@kernel.org>
    Cc: stable@kernel.org
    Assisted-by: gkh_clanker_2000
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Link: https://patch.msgid.link/2026022319-huff-absurd-6a18@gregkh
    Fixes: 9f2d3eae88d2 ("can: ucan: add driver for Theobroma Systems UCAN devices")
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: usb: etas_es58x: correctly anchor the urb in the read bulk callback [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon Feb 23 17:39:20 2026 +0100

    can: usb: etas_es58x: correctly anchor the urb in the read bulk callback
    
    commit 5eaad4f768266f1f17e01232ffe2ef009f8129b7 upstream.
    
    When submitting an urb, that is using the anchor pattern, it needs to be
    anchored before submitting it otherwise it could be leaked if
    usb_kill_anchored_urbs() is called.  This logic is correctly done
    elsewhere in the driver, except in the read bulk callback so do that
    here also.
    
    Cc: Vincent Mailhol <mailhol@kernel.org>
    Cc: Marc Kleine-Budde <mkl@pengutronix.de>
    Cc: stable@kernel.org
    Assisted-by: gkh_clanker_2000
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Reviewed-by: Vincent Mailhol <mailhol@kernel.org>
    Tested-by: Vincent Mailhol <mailhol@kernel.org>
    Link: https://patch.msgid.link/2026022320-poser-stiffly-9d84@gregkh
    Fixes: 8537257874e9 ("can: etas_es58x: add core support for ETAS ES58X CAN USB interfaces")
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: usb: f81604: correctly anchor the urb in the read bulk callback [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon Feb 23 13:10:32 2026 +0100

    can: usb: f81604: correctly anchor the urb in the read bulk callback
    
    commit 952caa5da10bed22be09612433964f6877ba0dde upstream.
    
    When submitting an urb, that is using the anchor pattern, it needs to be
    anchored before submitting it otherwise it could be leaked if
    usb_kill_anchored_urbs() is called.  This logic is correctly done
    elsewhere in the driver, except in the read bulk callback so do that
    here also.
    
    Cc: Ji-Ze Hong (Peter Hong) <peter_hong@fintek.com.tw>
    Cc: Marc Kleine-Budde <mkl@pengutronix.de>
    Cc: Vincent Mailhol <mailhol@kernel.org>
    Cc: stable@kernel.org
    Assisted-by: gkh_clanker_2000
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Link: https://patch.msgid.link/2026022334-starlight-scaling-2cea@gregkh
    Fixes: 88da17436973 ("can: usb: f81604: add Fintek F81604 support")
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: usb: f81604: handle bulk write errors properly [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon Feb 23 13:10:31 2026 +0100

    can: usb: f81604: handle bulk write errors properly
    
    commit 51f94780720fa90c424f67e3e9784cb8ef8190e5 upstream.
    
    If a write urb fails then more needs to be done other than just logging
    the message, otherwise the transmission could be stalled.  Properly
    increment the error counters and wake up the queues so that data will
    continue to flow.
    
    Cc: Ji-Ze Hong (Peter Hong) <peter_hong@fintek.com.tw>
    Cc: Marc Kleine-Budde <mkl@pengutronix.de>
    Cc: Vincent Mailhol <mailhol@kernel.org>
    Cc: stable@kernel.org
    Assisted-by: gkh_clanker_2000
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Link: https://patch.msgid.link/2026022334-slackness-dynamic-9195@gregkh
    Fixes: 88da17436973 ("can: usb: f81604: add Fintek F81604 support")
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: usb: f81604: handle short interrupt urb messages properly [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon Feb 23 13:10:30 2026 +0100

    can: usb: f81604: handle short interrupt urb messages properly
    
    commit 7299b1b39a255f6092ce4ec0b65f66e9d6a357af upstream.
    
    If an interrupt urb is received that is not the correct length, properly
    detect it and don't attempt to treat the data as valid.
    
    Cc: Ji-Ze Hong (Peter Hong) <peter_hong@fintek.com.tw>
    Cc: Marc Kleine-Budde <mkl@pengutronix.de>
    Cc: Vincent Mailhol <mailhol@kernel.org>
    Cc: stable@kernel.org
    Assisted-by: gkh_clanker_2000
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Link: https://patch.msgid.link/2026022331-opal-evaluator-a928@gregkh
    Fixes: 88da17436973 ("can: usb: f81604: add Fintek F81604 support")
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    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: 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>

cifs: open files should not hold ref on superblock [+ + +]
Author: Shyam Prasad N <sprasad@microsoft.com>
Date:   Wed Mar 18 20:35:52 2026 -0400

    cifs: open files should not hold ref on superblock
    
    [ Upstream commit 340cea84f691c5206561bb2e0147158fe02070be ]
    
    Today whenever we deal with a file, in addition to holding
    a reference on the dentry, we also get a reference on the
    superblock. This happens in two cases:
    1. when a new cinode is allocated
    2. when an oplock break is being processed
    
    The reasoning for holding the superblock ref was to make sure
    that when umount happens, if there are users of inodes and
    dentries, it does not try to clean them up and wait for the
    last ref to superblock to be dropped by last of such users.
    
    But the side effect of doing that is that umount silently drops
    a ref on the superblock and we could have deferred closes and
    lease breaks still holding these refs.
    
    Ideally, we should ensure that all of these users of inodes and
    dentries are cleaned up at the time of umount, which is what this
    code is doing.
    
    This code change allows these code paths to use a ref on the
    dentry (and hence the inode). That way, umount is
    ensured to clean up SMB client resources when it's the last
    ref on the superblock (For ex: when same objects are shared).
    
    The code change also moves the call to close all the files in
    deferred close list to the umount code path. It also waits for
    oplock_break workers to be flushed before calling
    kill_anon_super (which eventually frees up those objects).
    
    Fixes: 24261fc23db9 ("cifs: delay super block destruction until all cifsFileInfo objects are gone")
    Fixes: 705c79101ccf ("smb: client: fix use-after-free in cifs_oplock_break")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    [ adapted kmalloc_obj() macro to kmalloc(sizeof()) ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
clk: tegra: tegra124-emc: fix device leak on set_rate() [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Nov 21 17:40:03 2025 +0100

    clk: tegra: tegra124-emc: fix device leak on set_rate()
    
    [ Upstream commit da61439c63d34ae6503d080a847f144d587e3a48 ]
    
    Make sure to drop the reference taken when looking up the EMC device and
    its driver data on first set_rate().
    
    Note that holding a reference to a device does not prevent its driver
    data from going away so there is no point in keeping the reference.
    
    Fixes: 2db04f16b589 ("clk: tegra: Add EMC clock driver")
    Fixes: 6d6ef58c2470 ("clk: tegra: tegra124-emc: Fix missing put_device() call in emc_ensure_emc_driver")
    Cc: stable@vger.kernel.org      # 4.2: 6d6ef58c2470
    Cc: Mikko Perttunen <mperttunen@nvidia.com>
    Cc: Miaoqian Lin <linmq006@gmail.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
clsact: Fix use-after-free in init/destroy rollback asymmetry [+ + +]
Author: Daniel Borkmann <daniel@iogearbox.net>
Date:   Fri Mar 13 07:55:31 2026 +0100

    clsact: Fix use-after-free in init/destroy rollback asymmetry
    
    [ Upstream commit a0671125d4f55e1e98d9bde8a0b671941987e208 ]
    
    Fix a use-after-free in the clsact qdisc upon init/destroy rollback asymmetry.
    The latter is achieved by first fully initializing a clsact instance, and
    then in a second step having a replacement failure for the new clsact qdisc
    instance. clsact_init() initializes ingress first and then takes care of the
    egress part. This can fail midway, for example, via tcf_block_get_ext(). Upon
    failure, the kernel will trigger the clsact_destroy() callback.
    
    Commit 1cb6f0bae504 ("bpf: Fix too early release of tcx_entry") details the
    way how the transition is happening. If tcf_block_get_ext on the q->ingress_block
    ends up failing, we took the tcx_miniq_inc reference count on the ingress
    side, but not yet on the egress side. clsact_destroy() tests whether the
    {ingress,egress}_entry was non-NULL. However, even in midway failure on the
    replacement, both are in fact non-NULL with a valid egress_entry from the
    previous clsact instance.
    
    What we really need to test for is whether the qdisc instance-specific ingress
    or egress side previously got initialized. This adds a small helper for checking
    the miniq initialization called mini_qdisc_pair_inited, and utilizes that upon
    clsact_destroy() in order to fix the use-after-free scenario. Convert the
    ingress_destroy() side as well so both are consistent to each other.
    
    Fixes: 1cb6f0bae504 ("bpf: Fix too early release of tcx_entry")
    Reported-by: Keenan Dong <keenanat2000@gmail.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Cc: Martin KaFai Lau <martin.lau@kernel.org>
    Acked-by: Martin KaFai Lau <martin.lau@kernel.org>
    Link: https://patch.msgid.link/20260313065531.98639-1-daniel@iogearbox.net
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
crypto: atmel-sha204a - Fix OOM ->tfm_count leak [+ + +]
Author: Thorsten Blum <thorsten.blum@linux.dev>
Date:   Wed Mar 18 21:07:36 2026 -0400

    crypto: atmel-sha204a - Fix OOM ->tfm_count leak
    
    [ Upstream commit d240b079a37e90af03fd7dfec94930eb6c83936e ]
    
    If memory allocation fails, decrement ->tfm_count to avoid blocking
    future reads.
    
    Cc: stable@vger.kernel.org
    Fixes: da001fb651b0 ("crypto: atmel-i2c - add support for SHA204A random number generator")
    Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    [ adapted kmalloc_obj() macro to kmalloc(sizeof()) ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    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>

 
dm-verity: disable recursive forward error correction [+ + +]
Author: Mikulas Patocka <mpatocka@redhat.com>
Date:   Thu Feb 26 13:04:18 2026 +0800

    dm-verity: disable recursive forward error correction
    
    [ Upstream commit d9f3e47d3fae0c101d9094bc956ed24e7a0ee801 ]
    
    There are two problems with the recursive correction:
    
    1. It may cause denial-of-service. In fec_read_bufs, there is a loop that
    has 253 iterations. For each iteration, we may call verity_hash_for_block
    recursively. There is a limit of 4 nested recursions - that means that
    there may be at most 253^4 (4 billion) iterations. Red Hat QE team
    actually created an image that pushes dm-verity to this limit - and this
    image just makes the udev-worker process get stuck in the 'D' state.
    
    2. It doesn't work. In fec_read_bufs we store data into the variable
    "fio->bufs", but fio bufs is shared between recursive invocations, if
    "verity_hash_for_block" invoked correction recursively, it would
    overwrite partially filled fio->bufs.
    
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Reported-by: Guangwu Zhang <guazhang@redhat.com>
    Reviewed-by: Sami Tolvanen <samitolvanen@google.com>
    Reviewed-by: Eric Biggers <ebiggers@kernel.org>
    [ The context change is due to the commit bdf253d580d7
    ("dm-verity: remove support for asynchronous hashes")
    in v6.18 and the commit 9356fcfe0ac4
    ("dm verity: set DM_TARGET_SINGLETON feature flag") in v6.9
    which are irrelevant to the logic of this patch. ]
    Signed-off-by: Rahul Sharma <black.hawk@163.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dmaengine: mmp_pdma: Fix race condition in mmp_pdma_residue() [+ + +]
Author: Guodong Xu <guodong@riscstar.com>
Date:   Sat Feb 28 14:47:36 2026 +0800

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

 
dpaa2-switch: do not clear any interrupts automatically [+ + +]
Author: Ioana Ciornei <ioana.ciornei@nxp.com>
Date:   Tue Dec 19 13:59:30 2023 +0200

    dpaa2-switch: do not clear any interrupts automatically
    
    [ Upstream commit f6da276479c63ca29774bc331a537b92f0550c45 ]
    
    The DPSW object has multiple event sources multiplexed over the same
    IRQ. The driver has the capability to configure only some of these
    events to trigger the IRQ.
    
    The dpsw_get_irq_status() can clear events automatically based on the
    value stored in the 'status' variable passed to it. We don't want that
    to happen because we could get into a situation when we are clearing
    more events than we actually handled.
    
    Just resort to manually clearing the events that we handled. Also, since
    status is not used on the out path we remove its initialization to zero.
    
    This change does not have a user-visible effect because the dpaa2-switch
    driver enables and handles all the DPSW events which exist at the
    moment.
    
    Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 74badb9c20b1 ("dpaa2-switch: Fix interrupt storm after receiving bad if_id in IRQ handler")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

dpaa2-switch: Fix interrupt storm after receiving bad if_id in IRQ handler [+ + +]
Author: Guenter Roeck <linux@roeck-us.net>
Date:   Thu Feb 26 21:58:12 2026 -0800

    dpaa2-switch: Fix interrupt storm after receiving bad if_id in IRQ handler
    
    [ Upstream commit 74badb9c20b1a9c02a95c735c6d3cd6121679c93 ]
    
    Commit 31a7a0bbeb00 ("dpaa2-switch: add bounds check for if_id in IRQ
    handler") introduces a range check for if_id to avoid an out-of-bounds
    access. If an out-of-bounds if_id is detected, the interrupt status is
    not cleared. This may result in an interrupt storm.
    
    Clear the interrupt status after detecting an out-of-bounds if_id to avoid
    the problem.
    
    Found by an experimental AI code review agent at Google.
    
    Fixes: 31a7a0bbeb00 ("dpaa2-switch: add bounds check for if_id in IRQ handler")
    Cc: Junrui Luo <moonafterrain@outlook.com>
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com>
    Link: https://patch.msgid.link/20260227055812.1777915-1-linux@roeck-us.net
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drbd: fix "LOGIC BUG" in drbd_al_begin_io_nonblock() [+ + +]
Author: Lars Ellenberg <lars.ellenberg@linbit.com>
Date:   Thu Feb 19 15:20:12 2026 +0100

    drbd: fix "LOGIC BUG" in drbd_al_begin_io_nonblock()
    
    commit ab140365fb62c0bdab22b2f516aff563b2559e3b upstream.
    
    Even though we check that we "should" be able to do lc_get_cumulative()
    while holding the device->al_lock spinlock, it may still fail,
    if some other code path decided to do lc_try_lock() with bad timing.
    
    If that happened, we logged "LOGIC BUG for enr=...",
    but still did not return an error.
    
    The rest of the code now assumed that this request has references
    for the relevant activity log extents.
    
    The implcations are that during an active resync, mutual exclusivity of
    resync versus application IO is not guaranteed. And a potential crash
    at this point may not realizs that these extents could have been target
    of in-flight IO and would need to be resynced just in case.
    
    Also, once the request completes, it will give up activity log references it
    does not even hold, which will trigger a BUG_ON(refcnt == 0) in lc_put().
    
    Fix:
    
    Do not crash the kernel for a condition that is harmless during normal
    operation: also catch "e->refcnt == 0", not only "e == NULL"
    when being noisy about "al_complete_io() called on inactive extent %u\n".
    
    And do not try to be smart and "guess" whether something will work, then
    be surprised when it does not.
    Deal with the fact that it may or may not work.  If it does not, remember a
    possible "partially in activity log" state (only possible for requests that
    cross extent boundaries), and return an error code from
    drbd_al_begin_io_nonblock().
    
    A latter call for the same request will then resume from where we left off.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
    Signed-off-by: Christoph Böhmwalder <christoph.boehmwalder@linbit.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drbd: fix null-pointer dereference on local read error [+ + +]
Author: Christoph Böhmwalder <christoph.boehmwalder@linbit.com>
Date:   Fri Feb 20 12:39:37 2026 +0100

    drbd: fix null-pointer dereference on local read error
    
    commit 0d195d3b205ca90db30d70d09d7bb6909aac178f upstream.
    
    In drbd_request_endio(), READ_COMPLETED_WITH_ERROR is passed to
    __req_mod() with a NULL peer_device:
    
      __req_mod(req, what, NULL, &m);
    
    The READ_COMPLETED_WITH_ERROR handler then unconditionally passes this
    NULL peer_device to drbd_set_out_of_sync(), which dereferences it,
    causing a null-pointer dereference.
    
    Fix this by obtaining the peer_device via first_peer_device(device),
    matching how drbd_req_destroy() handles the same situation.
    
    Cc: stable@vger.kernel.org
    Reported-by: Tuo Li <islituo@gmail.com>
    Link: https://lore.kernel.org/linux-block/20260104165355.151864-1-islituo@gmail.com
    Signed-off-by: Christoph Böhmwalder <christoph.boehmwalder@linbit.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amd/display: Add pixel_clock to amd_pp_display_configuration [+ + +]
Author: Timur Kristóf <timur.kristof@gmail.com>
Date:   Tue Sep 9 16:17:50 2025 +0200

    drm/amd/display: Add pixel_clock to amd_pp_display_configuration
    
    commit b515dcb0dc4e85d8254f5459cfb32fce88dacbfb upstream.
    
    This commit adds the pixel_clock field to the display config
    struct so that power management (DPM) can use it.
    
    We currently don't have a proper bandwidth calculation on old
    GPUs with DCE 6-10 because dce_calcs only supports DCE 11+.
    So the power management (DPM) on these GPUs may need to make
    ad-hoc decisions for display based on the pixel clock.
    
    Also rename sym_clock to pixel_clock in dm_pp_single_disp_config
    to avoid confusion with other code where the sym_clock refers to
    the DisplayPort symbol clock.
    
    Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Rosen Penev <rosenp@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: Fix DisplayID not-found handling in parse_edid_displayid_vrr() [+ + +]
Author: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Date:   Sun Mar 15 18:30:26 2026 +0530

    drm/amd/display: Fix DisplayID not-found handling in parse_edid_displayid_vrr()
    
    [ Upstream commit 2323b019651ad81c20a0f7f817c63392b3110652 ]
    
    parse_edid_displayid_vrr() searches the EDID extension blocks for a
    DisplayID extension before parsing the dynamic video timing range.
    
    The code previously checked whether edid_ext was NULL after the search
    loop. However, edid_ext is assigned during each iteration of the loop,
    so it will never be NULL once the loop has executed. If no DisplayID
    extension is found, edid_ext ends up pointing to the last extension
    block, and the NULL check does not correctly detect the failure case.
    
    Instead, check whether the loop completed without finding a matching
    DisplayID block by testing "i == edid->extensions". This ensures the
    function exits early when no DisplayID extension is present and avoids
    parsing an unrelated EDID extension block.
    
    Also simplify the EDID validation check using "!edid ||
    !edid->extensions".
    
    Fixes the below:
    drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:13079 parse_edid_displayid_vrr() warn: variable dereferenced before check 'edid_ext' (see line 13075)
    
    Fixes: a638b837d0e6 ("drm/amd/display: Fix refresh rate range for some panel")
    Cc: Roman Li <roman.li@amd.com>
    Cc: Alex Hung <alex.hung@amd.com>
    Cc: Jerry Zuo <jerry.zuo@amd.com>
    Cc: Sun peng Li <sunpeng.li@amd.com>
    Cc: Tom Chung <chiahsuan.chung@amd.com>
    Cc: Dan Carpenter <dan.carpenter@linaro.org>
    Cc: Aurabindo Pillai <aurabindo.pillai@amd.com>
    Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
    Reviewed-by: Tom Chung <chiahsuan.chung@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 91c7e6342e98c846b259c57273436fdea4c043f2)
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amd/display: Use GFP_ATOMIC in dc_create_stream_for_sink [+ + +]
Author: Natalie Vock <natalie.vock@gmx.de>
Date:   Mon Mar 9 10:11:36 2026 -0400

    drm/amd/display: Use GFP_ATOMIC in dc_create_stream_for_sink
    
    [ Upstream commit 28dfe4317541e57fe52f9a290394cd29c348228b ]
    
    This can be called while preemption is disabled, for example by
    dcn32_internal_validate_bw which is called with the FPU active.
    
    Fixes "BUG: scheduling while atomic" messages I encounter on my Navi31
    machine.
    
    Signed-off-by: Natalie Vock <natalie.vock@gmx.de>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit b42dae2ebc5c84a68de63ec4ffdfec49362d53f1)
    Cc: stable@vger.kernel.org
    [ Context ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: Wrap dcn32_override_min_req_memclk() in DC_FP_{START, END} [+ + +]
Author: Xi Ruoyao <xry111@xry111.site>
Date:   Fri Mar 6 14:28:03 2026 +0800

    drm/amd/display: Wrap dcn32_override_min_req_memclk() in DC_FP_{START, END}
    
    commit ebe82c6e75cfc547154d0fd843b0dd6cca3d548f upstream.
    
    [Why]
    The dcn32_override_min_req_memclk function is in dcn32_fpu.c, which is
    compiled with CC_FLAGS_FPU into FP instructions.  So when we call it we
    must use DC_FP_{START,END} to save and restore the FP context, and
    prepare the FP unit on architectures like LoongArch where the FP unit
    isn't always on.
    
    Reported-by: LiarOnce <liaronce@hotmail.com>
    Fixes: ee7be8f3de1c ("drm/amd/display: Limit DCN32 8 channel or less parts to DPM1 for FPO")
    Signed-off-by: Xi Ruoyao <xry111@xry111.site>
    Reviewed-by: Alex Hung <alex.hung@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 25bb1d54ba3983c064361033a8ec15474fece37e)
    Cc: stable@vger.kernel.org
    [ dropped missing `dcn32_override_min_req_dcfclk()` call since ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amd/pm: Use pm_display_cfg in legacy DPM (v2) [+ + +]
Author: Timur Kristóf <timur.kristof@gmail.com>
Date:   Tue Sep 9 16:17:51 2025 +0200

    drm/amd/pm: Use pm_display_cfg in legacy DPM (v2)
    
    commit 9d73b107a61b73e7101d4b728ddac3d2c77db111 upstream.
    
    This commit is necessary for DC to function well with chips
    that use the legacy power management code, ie. SI and KV.
    Communicate display information from DC to the legacy PM code.
    
    Currently DC uses pm_display_cfg to communicate power management
    requirements from the display code to the DPM code.
    However, the legacy (non-DC) code path used different fields
    and therefore could not take into account anything from DC.
    
    Change the legacy display code to fill the same pm_display_cfg
    struct as DC and use the same in the legacy DPM code.
    
    To ease review and reduce churn, this commit does not yet
    delete the now unneeded code, that is done in the next commit.
    
    v2:
    Rebase.
    Fix single_display in amdgpu_dpm_pick_power_state.
    
    Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Rosen Penev <rosenp@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amd: Drop special case for yellow carp without discovery [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Tue Sep 5 14:25:57 2023 -0500

    drm/amd: Drop special case for yellow carp without discovery
    
    [ Upstream commit 3ef07651a5756e7de65615e18eacbf8822c23016 ]
    
    `amdgpu_gmc_get_vbios_allocations` has a special case for how to
    bring up yellow carp when amdgpu discovery is turned off. As this ASIC
    ships with discovery turned on, it's generally dead code and worse it
    causes `adev->mman.keep_stolen_vga_memory` to not be initialized for
    yellow carp.
    
    Remove it.
    
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Stable-dep-of: 096bb75e13cc ("drm/amdgpu: keep vga memory on MacBooks with switchable graphics")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amd: Fix hang on amdgpu unload by using pci_dev_is_disconnected() [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Thu Feb 5 10:42:54 2026 -0600

    drm/amd: Fix hang on amdgpu unload by using pci_dev_is_disconnected()
    
    [ Upstream commit f7afda7fcd169a9168695247d07ad94cf7b9798f ]
    
    The commit 6a23e7b4332c ("drm/amd: Clean up kfd node on surprise
    disconnect") introduced early KFD cleanup when drm_dev_is_unplugged()
    returns true. However, this causes hangs during normal module unload
    (rmmod amdgpu).
    
    The issue occurs because drm_dev_unplug() is called in amdgpu_pci_remove()
    for all removal scenarios, not just surprise disconnects. This was done
    intentionally in commit 39934d3ed572 ("Revert "drm/amdgpu: TA unload
    messages are not actually sent to psp when amdgpu is uninstalled"") to
    fix IGT PCI software unplug test failures. As a result,
    drm_dev_is_unplugged() returns true even during normal module unload,
    triggering the early KFD cleanup inappropriately.
    
    The correct check should distinguish between:
    - Actual surprise disconnect (eGPU unplugged): pci_dev_is_disconnected()
      returns true
    - Normal module unload (rmmod): pci_dev_is_disconnected() returns false
    
    Replace drm_dev_is_unplugged() with pci_dev_is_disconnected() to ensure
    the early cleanup only happens during true hardware disconnect events.
    
    Cc: stable@vger.kernel.org
    Reported-by: Cal Peake <cp@absolutedigital.net>
    Closes: https://lore.kernel.org/all/b0c22deb-c0fa-3343-33cf-fd9a77d7db99@absolutedigital.net/
    Fixes: 6a23e7b4332c ("drm/amd: Clean up kfd node on surprise disconnect")
    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>
    Signed-off-by: Sasha Levin <sashal@kernel.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/gmc9.0: add bounds checking for cid [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Mon Mar 16 15:51:08 2026 -0400

    drm/amdgpu/gmc9.0: add bounds checking for cid
    
    commit f39e1270277f4b06db0b2c6ec9405b6dd766fb13 upstream.
    
    The value should never exceed the array size as those
    are the only values the hardware is expected to return,
    but add checks anyway.
    
    Cc: Benjamin Cheng <benjamin.cheng@amd.com>
    Reviewed-by: Benjamin Cheng <benjamin.cheng@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit e14d468304832bcc4a082d95849bc0a41b18ddea)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu/mmhub2.0: add bounds checking for cid [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Wed Mar 4 17:22:43 2026 -0500

    drm/amdgpu/mmhub2.0: add bounds checking for cid
    
    commit 0b26edac4ac5535df1f63e6e8ab44c24fe1acad7 upstream.
    
    The value should never exceed the array size as those
    are the only values the hardware is expected to return,
    but add checks anyway.
    
    Reviewed-by: Benjamin Cheng <benjamin.cheng@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit e064cef4b53552602bb6ac90399c18f662f3cacd)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu/mmhub2.3: add bounds checking for cid [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Wed Mar 4 17:24:10 2026 -0500

    drm/amdgpu/mmhub2.3: add bounds checking for cid
    
    commit a54403a534972af5d9ba5aaa3bb6ead612500ec6 upstream.
    
    The value should never exceed the array size as those
    are the only values the hardware is expected to return,
    but add checks anyway.
    
    Reviewed-by: Benjamin Cheng <benjamin.cheng@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 89cd90375c19fb45138990b70e9f4ba4806f05c4)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu/mmhub3.0.1: add bounds checking for cid [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Wed Mar 4 17:24:35 2026 -0500

    drm/amdgpu/mmhub3.0.1: add bounds checking for cid
    
    commit 5d4e88bcfef29569a1db224ef15e28c603666c6d upstream.
    
    The value should never exceed the array size as those
    are the only values the hardware is expected to return,
    but add checks anyway.
    
    Reviewed-by: Benjamin Cheng <benjamin.cheng@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 5f76083183363c4528a4aaa593f5d38c28fe7d7b)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu/mmhub3.0.2: add bounds checking for cid [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Wed Mar 4 17:25:09 2026 -0500

    drm/amdgpu/mmhub3.0.2: add bounds checking for cid
    
    commit e5e6d67b1ce9764e67aef2d0eef9911af53ad99a upstream.
    
    The value should never exceed the array size as those
    are the only values the hardware is expected to return,
    but add checks anyway.
    
    Reviewed-by: Benjamin Cheng <benjamin.cheng@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 1441f52c7f6ae6553664aa9e3e4562f6fc2fe8ea)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu/mmhub3.0: add bounds checking for cid [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Wed Mar 4 17:25:30 2026 -0500

    drm/amdgpu/mmhub3.0: add bounds checking for cid
    
    commit cdb82ecbeccb55fae75a3c956b605f7801a30db1 upstream.
    
    The value should never exceed the array size as those
    are the only values the hardware is expected to return,
    but add checks anyway.
    
    Reviewed-by: Benjamin Cheng <benjamin.cheng@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit f14f27bbe2a3ed7af32d5f6eaf3f417139f45253)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu: Add basic validation for RAS header [+ + +]
Author: Lijo Lazar <lijo.lazar@amd.com>
Date:   Wed Mar 26 13:28:38 2025 +0530

    drm/amdgpu: Add basic validation for RAS header
    
    commit 5df0d6addb7e9b6f71f7162d1253762a5be9138e upstream.
    
    If RAS header read from EEPROM is corrupted, it could result in trying
    to allocate huge memory for reading the records. Add some validation to
    header fields.
    
    Signed-off-by: Lijo Lazar <lijo.lazar@amd.com>
    Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    [ RAS_TABLE_VER_V3 is not supported in v6.6.y. ]
    Signed-off-by: Alva Lan <alvalan9@foxmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amdgpu: apply state adjust rules to some additional HAINAN vairants [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Mon Sep 25 10:44:07 2023 -0400

    drm/amdgpu: apply state adjust rules to some additional HAINAN vairants
    
    commit 9787f7da186ee8143b7b6d914cfa0b6e7fee2648 upstream.
    
    They need a similar workaround.
    
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/1839
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 0de31d92a173d3d94f28051b0b80a6c98913aed4)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.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/amdgpu: keep vga memory on MacBooks with switchable graphics [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Mon Feb 16 10:02:32 2026 -0500

    drm/amdgpu: keep vga memory on MacBooks with switchable graphics
    
    [ Upstream commit 096bb75e13cc508d3915b7604e356bcb12b17766 ]
    
    On Intel MacBookPros with switchable graphics, when the iGPU
    is enabled, the address of VRAM gets put at 0 in the dGPU's
    virtual address space.  This is non-standard and seems to cause
    issues with the cursor if it ends up at 0.  We have the framework
    to reserve memory at 0 in the address space, so enable it here if
    the vram start address is 0.
    
    Reviewed-and-tested-by: Mario Kleiner <mario.kleiner.de@gmail.com>
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4302
    Cc: stable@vger.kernel.org
    Cc: Mario Kleiner <mario.kleiner.de@gmail.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    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:   Wed Mar 18 12:10:34 2026 -0400

    drm/bridge: ti-sn65dsi83: halve horizontal syncs for dual LVDS output
    
    [ Upstream commit d0d727746944096a6681dc6adb5f123fc5aa018d ]
    
    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>
    [ adapted variable declaration placement ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/bridge: ti-sn65dsi86: Add support for DisplayPort mode with HPD [+ + +]
Author: John Ripple <john.ripple@keysight.com>
Date:   Mon Sep 15 11:45:43 2025 -0600

    drm/bridge: ti-sn65dsi86: Add support for DisplayPort mode with HPD
    
    commit 9133bc3f0564890218cbba6cc7e81ebc0841a6f1 upstream.
    
    Add support for DisplayPort to the bridge, which entails the following:
    - Get and use an interrupt for HPD;
    - Properly clear all status bits in the interrupt handler;
    
    Signed-off-by: John Ripple <john.ripple@keysight.com>
    Reviewed-by: Douglas Anderson <dianders@chromium.org>
    Signed-off-by: Douglas Anderson <dianders@chromium.org>
    Link: https://lore.kernel.org/r/20250915174543.2564994-1-john.ripple@keysight.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/exynos: vidi: fix to avoid directly dereferencing user pointer [+ + +]
Author: Jeongjun Park <aha310510@gmail.com>
Date:   Fri Feb 27 13:59:52 2026 +0900

    drm/exynos: vidi: fix to avoid directly dereferencing user pointer
    
    [ Upstream commit d4c98c077c7fb2dfdece7d605e694b5ea2665085 ]
    
    In vidi_connection_ioctl(), vidi->edid(user pointer) is directly
    dereferenced in the kernel.
    
    This allows arbitrary kernel memory access from the user space, so instead
    of directly accessing the user pointer in the kernel, we should modify it
    to copy edid to kernel memory using copy_from_user() and use it.
    
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Jeongjun Park <aha310510@gmail.com>
    Signed-off-by: Inki Dae <inki.dae@samsung.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/exynos: vidi: use ctx->lock to protect struct vidi_context member variables related to memory alloc/free [+ + +]
Author: Jeongjun Park <aha310510@gmail.com>
Date:   Fri Feb 27 13:59:53 2026 +0900

    drm/exynos: vidi: use ctx->lock to protect struct vidi_context member variables related to memory alloc/free
    
    [ Upstream commit 52b330799e2d6f825ae2bb74662ec1b10eb954bb ]
    
    Exynos Virtual Display driver performs memory alloc/free operations
    without lock protection, which easily causes concurrency problem.
    
    For example, use-after-free can occur in race scenario like this:
    ```
            CPU0                            CPU1                            CPU2
            ----                            ----                            ----
      vidi_connection_ioctl()
        if (vidi->connection) // true
          drm_edid = drm_edid_alloc(); // alloc drm_edid
          ...
          ctx->raw_edid = drm_edid;
          ...
                                                                    drm_mode_getconnector()
                                                                      drm_helper_probe_single_connector_modes()
                                                                        vidi_get_modes()
                                                                          if (ctx->raw_edid) // true
                                                                            drm_edid_dup(ctx->raw_edid);
                                                                              if (!drm_edid) // false
                                                                              ...
                                    vidi_connection_ioctl()
                                      if (vidi->connection) // false
                                        drm_edid_free(ctx->raw_edid); // free drm_edid
                                        ...
                                                                              drm_edid_alloc(drm_edid->edid)
                                                                                kmemdup(edid); // UAF!!
                                                                                ...
    ```
    
    To prevent these vulns, at least in vidi_context, member variables related
    to memory alloc/free should be protected with ctx->lock.
    
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Jeongjun Park <aha310510@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/exynos: vidi: use priv->vidi_dev for ctx lookup in vidi_connection_ioctl() [+ + +]
Author: Jeongjun Park <aha310510@gmail.com>
Date:   Fri Feb 27 13:59:51 2026 +0900

    drm/exynos: vidi: use priv->vidi_dev for ctx lookup in vidi_connection_ioctl()
    
    [ Upstream commit d3968a0d85b211e197f2f4f06268a7031079e0d0 ]
    
    vidi_connection_ioctl() retrieves the driver_data from drm_dev->dev to
    obtain a struct vidi_context pointer. However, drm_dev->dev is the
    exynos-drm master device, and the driver_data contained therein is not
    the vidi component device, but a completely different device.
    
    This can lead to various bugs, ranging from null pointer dereferences and
    garbage value accesses to, in unlucky cases, out-of-bounds errors,
    use-after-free errors, and more.
    
    To resolve this issue, we need to store/delete the vidi device pointer in
    exynos_drm_private->vidi_dev during bind/unbind, and then read this
    exynos_drm_private->vidi_dev within ioctl() to obtain the correct
    struct vidi_context pointer.
    
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Jeongjun Park <aha310510@gmail.com>
    Signed-off-by: Inki Dae <inki.dae@samsung.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/i915/gt: Check set_default_submission() before deferencing [+ + +]
Author: Rahul Bukte <rahul.bukte@sony.com>
Date:   Tue Feb 3 10:18:39 2026 +0530

    drm/i915/gt: Check set_default_submission() before deferencing
    
    [ Upstream commit 0162ab3220bac870e43e229e6e3024d1a21c3f26 ]
    
    When the i915 driver firmware binaries are not present, the
    set_default_submission pointer is not set. This pointer is
    dereferenced during suspend anyways.
    
    Add a check to make sure it is set before dereferencing.
    
    [   23.289926] PM: suspend entry (deep)
    [   23.293558] Filesystems sync: 0.000 seconds
    [   23.298010] Freezing user space processes
    [   23.302771] Freezing user space processes completed (elapsed 0.000 seconds)
    [   23.309766] OOM killer disabled.
    [   23.313027] Freezing remaining freezable tasks
    [   23.318540] Freezing remaining freezable tasks completed (elapsed 0.001 seconds)
    [   23.342038] serial 00:05: disabled
    [   23.345719] serial 00:02: disabled
    [   23.349342] serial 00:01: disabled
    [   23.353782] sd 0:0:0:0: [sda] Synchronizing SCSI cache
    [   23.358993] sd 1:0:0:0: [sdb] Synchronizing SCSI cache
    [   23.361635] ata1.00: Entering standby power mode
    [   23.368863] ata2.00: Entering standby power mode
    [   23.445187] BUG: kernel NULL pointer dereference, address: 0000000000000000
    [   23.452194] #PF: supervisor instruction fetch in kernel mode
    [   23.457896] #PF: error_code(0x0010) - not-present page
    [   23.463065] PGD 0 P4D 0
    [   23.465640] Oops: Oops: 0010 [#1] SMP NOPTI
    [   23.469869] CPU: 8 UID: 0 PID: 211 Comm: kworker/u48:18 Tainted: G S      W           6.19.0-rc4-00020-gf0b9d8eb98df #10 PREEMPT(voluntary)
    [   23.482512] Tainted: [S]=CPU_OUT_OF_SPEC, [W]=WARN
    [   23.496511] Workqueue: async async_run_entry_fn
    [   23.501087] RIP: 0010:0x0
    [   23.503755] Code: Unable to access opcode bytes at 0xffffffffffffffd6.
    [   23.510324] RSP: 0018:ffffb4a60065fca8 EFLAGS: 00010246
    [   23.515592] RAX: 0000000000000000 RBX: ffff9f428290e000 RCX: 000000000000000f
    [   23.522765] RDX: 0000000000000000 RSI: 0000000000000282 RDI: ffff9f428290e000
    [   23.529937] RBP: ffff9f4282907070 R08: ffff9f4281130428 R09: 00000000ffffffff
    [   23.537111] R10: 0000000000000000 R11: 0000000000000001 R12: ffff9f42829070f8
    [   23.544284] R13: ffff9f4282906028 R14: ffff9f4282900000 R15: ffff9f4282906b68
    [   23.551457] FS:  0000000000000000(0000) GS:ffff9f466b2cf000(0000) knlGS:0000000000000000
    [   23.559588] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   23.565365] CR2: ffffffffffffffd6 CR3: 000000031c230001 CR4: 0000000000f70ef0
    [   23.572539] PKRU: 55555554
    [   23.575281] Call Trace:
    [   23.577770]  <TASK>
    [   23.579905]  intel_engines_reset_default_submission+0x42/0x60
    [   23.585695]  __intel_gt_unset_wedged+0x191/0x200
    [   23.590360]  intel_gt_unset_wedged+0x20/0x40
    [   23.594675]  gt_sanitize+0x15e/0x170
    [   23.598290]  i915_gem_suspend_late+0x6b/0x180
    [   23.602692]  i915_drm_suspend_late+0x35/0xf0
    [   23.607008]  ? __pfx_pci_pm_suspend_late+0x10/0x10
    [   23.611843]  dpm_run_callback+0x78/0x1c0
    [   23.615817]  device_suspend_late+0xde/0x2e0
    [   23.620037]  async_suspend_late+0x18/0x30
    [   23.624082]  async_run_entry_fn+0x25/0xa0
    [   23.628129]  process_one_work+0x15b/0x380
    [   23.632182]  worker_thread+0x2a5/0x3c0
    [   23.635973]  ? __pfx_worker_thread+0x10/0x10
    [   23.640279]  kthread+0xf6/0x1f0
    [   23.643464]  ? __pfx_kthread+0x10/0x10
    [   23.647263]  ? __pfx_kthread+0x10/0x10
    [   23.651045]  ret_from_fork+0x131/0x190
    [   23.654837]  ? __pfx_kthread+0x10/0x10
    [   23.658634]  ret_from_fork_asm+0x1a/0x30
    [   23.662597]  </TASK>
    [   23.664826] Modules linked in:
    [   23.667914] CR2: 0000000000000000
    [   23.671271] ------------[ cut here ]------------
    
    Signed-off-by: Rahul Bukte <rahul.bukte@sony.com>
    Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
    Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
    Link: https://patch.msgid.link/20260203044839.1555147-1-suraj.kandpal@intel.com
    (cherry picked from commit daa199abc3d3d1740c9e3a2c3e9216ae5b447cad)
    Fixes: ff44ad51ebf8 ("drm/i915: Move engine->submit_request selection to a vfunc")
    Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.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/logicvc: Fix device node reference leak in logicvc_drm_config_parse() [+ + +]
Author: Felix Gu <ustc.gu@gmail.com>
Date:   Fri Jan 30 00:21:19 2026 +0800

    drm/logicvc: Fix device node reference leak in logicvc_drm_config_parse()
    
    [ Upstream commit fef0e649f8b42bdffe4a916dd46e1b1e9ad2f207 ]
    
    The logicvc_drm_config_parse() function calls of_get_child_by_name() to
    find the "layers" node but fails to release the reference, leading to a
    device node reference leak.
    
    Fix this by using the __free(device_node) cleanup attribute to automatic
    release the reference when the variable goes out of scope.
    
    Fixes: efeeaefe9be5 ("drm: Add support for the LogiCVC display controller")
    Signed-off-by: Felix Gu <ustc.gu@gmail.com>
    Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
    Reviewed-by: Kory Maincent <kory.maincent@bootlin.com>
    Link: https://patch.msgid.link/20260130-logicvc_drm-v1-1-04366463750c@gmail.com
    Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/msm/dsi: Document DSC related pclk_rate and hdisplay calculations [+ + +]
Author: Dmitry Baryshkov <lumag@kernel.org>
Date:   Thu Feb 8 17:23:08 2024 +0200

    drm/msm/dsi: Document DSC related pclk_rate and hdisplay calculations
    
    [ Upstream commit 3b56d27ba1578c3d61f51de4102cf896a9a8617e ]
    
    Provide actual documentation for the pclk and hdisplay calculations in
    the case of DSC compression being used.
    
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Patchwork: https://patchwork.freedesktop.org/patch/577534/
    Link: https://lore.kernel.org/r/20240208-fd_document_dsc_pclk_rate-v4-1-56fe59d0a2e0@linaro.org
    Stable-dep-of: e4eb11b34d6c ("drm/msm/dsi: fix pclk rate calculation for bonded dsi")
    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:   Wed Mar 18 11:48:37 2026 -0400

    drm/msm: Fix dma_free_attrs() buffer size
    
    [ Upstream commit e4eb6e4dd6348dd00e19c2275e3fbaed304ca3bd ]
    
    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: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/radeon: apply state adjust rules to some additional HAINAN vairants [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Mon Sep 25 10:44:06 2023 -0400

    drm/radeon: apply state adjust rules to some additional HAINAN vairants
    
    commit 86650ee2241ff84207eaa298ab318533f3c21a38 upstream.
    
    They need a similar workaround.
    
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/1839
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 87327658c848f56eac166cb382b57b83bf06c5ac)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/sched: Fix kernel-doc warning for drm_sched_job_done() [+ + +]
Author: Yujie Liu <yujie.liu@intel.com>
Date:   Fri Feb 27 16:24:52 2026 +0800

    drm/sched: Fix kernel-doc warning for drm_sched_job_done()
    
    [ Upstream commit 61ded1083b264ff67ca8c2de822c66b6febaf9a8 ]
    
    There is a kernel-doc warning for the scheduler:
    
    Warning: drivers/gpu/drm/scheduler/sched_main.c:367 function parameter 'result' not described in 'drm_sched_job_done'
    
    Fix the warning by describing the undocumented error code.
    
    Fixes: 539f9ee4b52a ("drm/scheduler: properly forward fence errors")
    Signed-off-by: Yujie Liu <yujie.liu@intel.com>
    [phasta: Flesh out commit message]
    Signed-off-by: Philipp Stanner <phasta@kernel.org>
    Link: https://patch.msgid.link/20260227082452.1802922-1-yujie.liu@intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/solomon: Fix page start when updating rectangle in page addressing mode [+ + +]
Author: Francesco Lavra <flavra@baylibre.com>
Date:   Tue Feb 10 19:09:32 2026 +0100

    drm/solomon: Fix page start when updating rectangle in page addressing mode
    
    [ Upstream commit 36d9579fed6c9429aa172f77bd28c58696ce8e2b ]
    
    In page addressing mode, the pixel values of a dirty rectangle must be sent
    to the display controller one page at a time. The range of pages
    corresponding to a given rectangle is being incorrectly calculated as if
    the Y value of the top left coordinate of the rectangle was 0. This can
    result in rectangle updates being displayed on wrong parts of the screen.
    
    Fix the above issue by consolidating the start page calculation in a single
    place at the beginning of the update_rect function, and using the
    calculated value for all addressing modes.
    
    Fixes: b0daaa5cfaa5 ("drm/ssd130x: Support page addressing mode")
    Signed-off-by: Francesco Lavra <flavra@baylibre.com>
    Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
    Link: https://patch.msgid.link/20260210180932.736502-1-flavra@baylibre.com
    Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/ssd130x: Replace .page_height field in device info with a constant [+ + +]
Author: Javier Martinez Canillas <javierm@redhat.com>
Date:   Sat Oct 14 09:15:03 2023 +0200

    drm/ssd130x: Replace .page_height field in device info with a constant
    
    [ Upstream commit ec5dceb8180f0cb110dc7029d55d6a83d0583015 ]
    
    This deemed useful to avoid hardcoding a page height and allow to support
    other Solomon controller families, but dividing the screen in pages seems
    to be something that is specific to the SSD130x chip family.
    
    For example, SSD132x chip family divides the screen in segments (columns)
    and common outputs (rows), so the concept of screen pages does not exist
    for the SSD132x family.
    
    Let's drop this field from the device info struct and just use a constant
    SSD130X_PAGE_HEIGHT macro to define the page height. While being there,
    replace hardcoded 8 values in places where it is used as the page height.
    
    Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
    Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
    Link: https://patchwork.freedesktop.org/patch/msgid/20231014071520.1342189-2-javierm@redhat.com
    Stable-dep-of: 36d9579fed6c ("drm/solomon: Fix page start when updating rectangle in page addressing mode")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/ssd130x: Store the HW buffer in the driver-private CRTC state [+ + +]
Author: Javier Martinez Canillas <javierm@redhat.com>
Date:   Wed Sep 13 07:29:25 2023 +0200

    drm/ssd130x: Store the HW buffer in the driver-private CRTC state
    
    [ Upstream commit d51f9fbd98b6d88aef4f6431bbb575378a6c7a24 ]
    
    The commit 45b58669e532 ("drm/ssd130x: Allocate buffer in the plane's
    .atomic_check() callback") moved the allocation of the intermediate and
    HW buffers from the encoder's .atomic_enable callback, to the plane's
    .atomic_check callback.
    
    This was suggested by Maxime Ripard, because drivers aren't allowed to
    fail after the drm_atomic_helper_swap_state() function has been called.
    
    And the encoder's .atomic_enable happens after the new atomic state has
    been swapped, so allocations (that can fail) shouldn't be done there.
    
    But the HW buffer isn't really tied to the plane's state. It has a fixed
    size that only depends on the (also fixed) display resolution defined in
    the Device Tree Blob.
    
    That buffer can be considered part of the CRTC state, and for this reason
    makes more sense to do its allocation in the CRTC .atomic_check callback.
    
    The other allocated buffer (used to store a conversion from the emulated
    XR24 format to the native R1 format) is part of the plane's state, since
    it will be optional once the driver supports R1 and allows user-space to
    set that pixel format.
    
    So let's keep the allocation for it in the plane's .atomic_check callback,
    this can't be moved to the CRTC's .atomic_check because changing a format
    does not trigger a CRTC mode set.
    
    Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Closes: https://lore.kernel.org/dri-devel/CAMuHMdWv_QSatDgihr8=2SXHhvp=icNxumZcZOPwT9Q_QiogNQ@mail.gmail.com/
    Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
    Acked-by: Maxime Ripard <mripard@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230913052938.1114651-1-javierm@redhat.com
    Stable-dep-of: 36d9579fed6c ("drm/solomon: Fix page start when updating rectangle in page addressing mode")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/ssd130x: Use bool for ssd130x_deviceinfo flags [+ + +]
Author: Geert Uytterhoeven <geert@linux-m68k.org>
Date:   Thu Aug 24 17:08:41 2023 +0200

    drm/ssd130x: Use bool for ssd130x_deviceinfo flags
    
    [ Upstream commit 15d30b46573d75f5cb58cfacded8ebab9c76a2b0 ]
    
    The .need_pwm and .need_chargepump fields in struct ssd130x_deviceinfo
    are flags that can have only two possible values: 0 and 1.
    Reduce kernel size by changing their types from int to bool.
    
    Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
    Tested-by: Javier Martinez Canillas <javierm@redhat.com>
    Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/285005ff361969eff001386c5f97990f0e703838.1692888745.git.geert@linux-m68k.org
    Stable-dep-of: 36d9579fed6c ("drm/solomon: Fix page start when updating rectangle in page addressing mode")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/tegra: dsi: fix device leak on probe [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Nov 21 17:42:01 2025 +0100

    drm/tegra: dsi: fix device leak on probe
    
    [ Upstream commit bfef062695570842cf96358f2f46f4c6642c6689 ]
    
    Make sure to drop the reference taken when looking up the companion
    (ganged) device and its driver data during probe().
    
    Note that holding a reference to a device does not prevent its driver
    data from going away so there is no point in keeping the reference.
    
    Fixes: e94236cde4d5 ("drm/tegra: dsi: Add ganged mode support")
    Fixes: 221e3638feb8 ("drm/tegra: Fix reference leak in tegra_dsi_ganged_probe")
    Cc: stable@vger.kernel.org      # 3.19: 221e3638feb8
    Cc: Thierry Reding <treding@nvidia.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Thierry Reding <treding@nvidia.com>
    Link: https://patch.msgid.link/20251121164201.13188-1-johan@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/vmwgfx: Fix invalid kref_put callback in vmw_bo_dirty_release [+ + +]
Author: Brad Spengler <brad.spengler@opensrcsec.com>
Date:   Wed Jan 7 12:12:36 2026 -0500

    drm/vmwgfx: Fix invalid kref_put callback in vmw_bo_dirty_release
    
    [ Upstream commit 211ecfaaef186ee5230a77d054cdec7fbfc6724a ]
    
    The kref_put() call uses (void *)kvfree as the release callback, which
    is incorrect. kref_put() expects a function with signature
    void (*release)(struct kref *), but kvfree has signature
    void (*)(const void *). Calling through an incompatible function pointer
    is undefined behavior.
    
    The code only worked by accident because ref_count is the first member
    of vmw_bo_dirty, making the kref pointer equal to the struct pointer.
    
    Fix this by adding a proper release callback that uses container_of()
    to retrieve the containing structure before freeing.
    
    Fixes: c1962742ffff ("drm/vmwgfx: Use kref in vmw_bo_dirty")
    Signed-off-by: Brad Spengler <brad.spengler@opensrcsec.com>
    Signed-off-by: Zack Rusin <zack.rusin@broadcom.com>
    Cc: Ian Forbes <ian.forbes@broadcom.com>
    Link: https://patch.msgid.link/20260107171236.3573118-1-zack.rusin@broadcom.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
drm/vmwgfx: Return the correct value in vmw_translate_ptr functions [+ + +]
Author: Ian Forbes <ian.forbes@broadcom.com>
Date:   Tue Jan 13 11:53:57 2026 -0600

    drm/vmwgfx: Return the correct value in vmw_translate_ptr functions
    
    [ Upstream commit 5023ca80f9589295cb60735016e39fc5cc714243 ]
    
    Before the referenced fixes these functions used a lookup function that
    returned a pointer. This was changed to another lookup function that
    returned an error code with the pointer becoming an out parameter.
    
    The error path when the lookup failed was not changed to reflect this
    change and the code continued to return the PTR_ERR of the now
    uninitialized pointer. This could cause the vmw_translate_ptr functions
    to return success when they actually failed causing further uninitialized
    and OOB accesses.
    
    Reported-by: Kuzey Arda Bulut <kuzeyardabulut@gmail.com>
    Fixes: a309c7194e8a ("drm/vmwgfx: Remove rcu locks from user resources")
    Signed-off-by: Ian Forbes <ian.forbes@broadcom.com>
    Reviewed-by: Zack Rusin <zack.rusin@broadcom.com>
    Signed-off-by: Zack Rusin <zack.rusin@broadcom.com>
    Link: https://patch.msgid.link/20260113175357.129285-1-ian.forbes@broadcom.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm: Fix use-after-free on framebuffers and property blobs when calling drm_dev_unplug [+ + +]
Author: Maarten Lankhorst <dev@lankhorst.se>
Date:   Fri Mar 13 16:17:27 2026 +0100

    drm: Fix use-after-free on framebuffers and property blobs when calling drm_dev_unplug
    
    commit 6bee098b91417654703e17eb5c1822c6dfd0c01d upstream.
    
    When trying to do a rather aggressive test of igt's "xe_module_load
    --r reload" with a full desktop environment and game running I noticed
    a few OOPSes when dereferencing freed pointers, related to
    framebuffers and property blobs after the compositor exits.
    
    Solve this by guarding the freeing in drm_file with drm_dev_enter/exit,
    and immediately put the references from struct drm_file objects during
    drm_dev_unplug().
    
    Related warnings for framebuffers on the subtest:
    [  739.713076] ------------[ cut here ]------------
                   WARN_ON(!list_empty(&dev->mode_config.fb_list))
    [  739.713079] WARNING: drivers/gpu/drm/drm_mode_config.c:584 at drm_mode_config_cleanup+0x30b/0x320 [drm], CPU#12: xe_module_load/13145
    ....
    [  739.713328] Call Trace:
    [  739.713330]  <TASK>
    [  739.713335]  ? intel_pmdemand_destroy_state+0x11/0x20 [xe]
    [  739.713574]  ? intel_atomic_global_obj_cleanup+0xe4/0x1a0 [xe]
    [  739.713794]  intel_display_driver_remove_noirq+0x51/0xb0 [xe]
    [  739.714041]  xe_display_fini_early+0x33/0x50 [xe]
    [  739.714284]  devm_action_release+0xf/0x20
    [  739.714294]  devres_release_all+0xad/0xf0
    [  739.714301]  device_unbind_cleanup+0x12/0xa0
    [  739.714305]  device_release_driver_internal+0x1b7/0x210
    [  739.714311]  device_driver_detach+0x14/0x20
    [  739.714315]  unbind_store+0xa6/0xb0
    [  739.714319]  drv_attr_store+0x21/0x30
    [  739.714322]  sysfs_kf_write+0x48/0x60
    [  739.714328]  kernfs_fop_write_iter+0x16b/0x240
    [  739.714333]  vfs_write+0x266/0x520
    [  739.714341]  ksys_write+0x72/0xe0
    [  739.714345]  __x64_sys_write+0x19/0x20
    [  739.714347]  x64_sys_call+0xa15/0xa30
    [  739.714355]  do_syscall_64+0xd8/0xab0
    [  739.714361]  entry_SYSCALL_64_after_hwframe+0x4b/0x53
    
    and
    
    [  739.714459] ------------[ cut here ]------------
    [  739.714461] xe 0000:67:00.0: [drm] drm_WARN_ON(!list_empty(&fb->filp_head))
    [  739.714464] WARNING: drivers/gpu/drm/drm_framebuffer.c:833 at drm_framebuffer_free+0x6c/0x90 [drm], CPU#12: xe_module_load/13145
    [  739.714715] RIP: 0010:drm_framebuffer_free+0x7a/0x90 [drm]
    ...
    [  739.714869] Call Trace:
    [  739.714871]  <TASK>
    [  739.714876]  drm_mode_config_cleanup+0x26a/0x320 [drm]
    [  739.714998]  ? __drm_printfn_seq_file+0x20/0x20 [drm]
    [  739.715115]  ? drm_mode_config_cleanup+0x207/0x320 [drm]
    [  739.715235]  intel_display_driver_remove_noirq+0x51/0xb0 [xe]
    [  739.715576]  xe_display_fini_early+0x33/0x50 [xe]
    [  739.715821]  devm_action_release+0xf/0x20
    [  739.715828]  devres_release_all+0xad/0xf0
    [  739.715843]  device_unbind_cleanup+0x12/0xa0
    [  739.715850]  device_release_driver_internal+0x1b7/0x210
    [  739.715856]  device_driver_detach+0x14/0x20
    [  739.715860]  unbind_store+0xa6/0xb0
    [  739.715865]  drv_attr_store+0x21/0x30
    [  739.715868]  sysfs_kf_write+0x48/0x60
    [  739.715873]  kernfs_fop_write_iter+0x16b/0x240
    [  739.715878]  vfs_write+0x266/0x520
    [  739.715886]  ksys_write+0x72/0xe0
    [  739.715890]  __x64_sys_write+0x19/0x20
    [  739.715893]  x64_sys_call+0xa15/0xa30
    [  739.715900]  do_syscall_64+0xd8/0xab0
    [  739.715905]  entry_SYSCALL_64_after_hwframe+0x4b/0x53
    
    and then finally file close blows up:
    
    [  743.186530] Oops: general protection fault, probably for non-canonical address 0xdead000000000122: 0000 [#1] SMP
    [  743.186535] CPU: 3 UID: 1000 PID: 3453 Comm: kwin_wayland Tainted: G        W           7.0.0-rc1-valkyria+ #110 PREEMPT_{RT,(lazy)}
    [  743.186537] Tainted: [W]=WARN
    [  743.186538] Hardware name: Gigabyte Technology Co., Ltd. X299 AORUS Gaming 3/X299 AORUS Gaming 3-CF, BIOS F8n 12/06/2021
    [  743.186539] RIP: 0010:drm_framebuffer_cleanup+0x55/0xc0 [drm]
    [  743.186588] Code: d8 72 73 0f b6 42 05 ff c3 39 c3 72 e8 49 8d bd 50 07 00 00 31 f6 e8 3a 80 d3 e1 49 8b 44 24 10 49 8d 7c 24 08 49 8b 54 24 08 <48> 3b 38 0f 85 95 7f 02 00 48 3b 7a 08 0f 85 8b 7f 02 00 48 89 42
    [  743.186589] RSP: 0018:ffffc900085e3cf8 EFLAGS: 00010202
    [  743.186591] RAX: dead000000000122 RBX: 0000000000000001 RCX: ffffffff8217ed03
    [  743.186592] RDX: dead000000000100 RSI: 0000000000000000 RDI: ffff88814675ba08
    [  743.186593] RBP: ffffc900085e3d10 R08: 0000000000000000 R09: 0000000000000000
    [  743.186593] R10: 0000000000000000 R11: 0000000000000000 R12: ffff88814675ba00
    [  743.186594] R13: ffff88810d778000 R14: ffff888119f6dca0 R15: ffff88810c660bb0
    [  743.186595] FS:  00007ff377d21280(0000) GS:ffff888cec3f8000(0000) knlGS:0000000000000000
    [  743.186596] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  743.186596] CR2: 000055690b55e000 CR3: 0000000113586003 CR4: 00000000003706f0
    [  743.186597] Call Trace:
    [  743.186598]  <TASK>
    [  743.186603]  intel_user_framebuffer_destroy+0x12/0x90 [xe]
    [  743.186722]  drm_framebuffer_free+0x3a/0x90 [drm]
    [  743.186750]  ? trace_hardirqs_on+0x5f/0x120
    [  743.186754]  drm_mode_object_put+0x51/0x70 [drm]
    [  743.186786]  drm_fb_release+0x105/0x190 [drm]
    [  743.186812]  ? rt_mutex_slowunlock+0x3aa/0x410
    [  743.186817]  ? rt_spin_lock+0xea/0x1b0
    [  743.186819]  drm_file_free+0x1e0/0x2c0 [drm]
    [  743.186843]  drm_release_noglobal+0x91/0xf0 [drm]
    [  743.186865]  __fput+0x100/0x2e0
    [  743.186869]  fput_close_sync+0x40/0xa0
    [  743.186870]  __x64_sys_close+0x3e/0x80
    [  743.186873]  x64_sys_call+0xa07/0xa30
    [  743.186879]  do_syscall_64+0xd8/0xab0
    [  743.186881]  entry_SYSCALL_64_after_hwframe+0x4b/0x53
    [  743.186882] RIP: 0033:0x7ff37e567732
    [  743.186884] Code: 08 0f 85 a1 38 ff ff 49 89 fb 48 89 f0 48 89 d7 48 89 ce 4c 89 c2 4d 89 ca 4c 8b 44 24 08 4c 8b 4c 24 10 4c 89 5c 24 08 0f 05 <c3> 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 00 f3 0f 1e fa 55 bf 01 00
    [  743.186885] RSP: 002b:00007ffc818169a8 EFLAGS: 00000246 ORIG_RAX: 0000000000000003
    [  743.186886] RAX: ffffffffffffffda RBX: 00007ffc81816a30 RCX: 00007ff37e567732
    [  743.186887] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000012
    [  743.186888] RBP: 00007ffc818169d0 R08: 0000000000000000 R09: 0000000000000000
    [  743.186889] R10: 0000000000000000 R11: 0000000000000246 R12: 000055d60a7996e0
    [  743.186889] R13: 00007ffc81816a90 R14: 00007ffc81816a90 R15: 000055d60a782a30
    [  743.186892]  </TASK>
    [  743.186893] Modules linked in: rfcomm snd_hrtimer xt_CHECKSUM xt_MASQUERADE xt_conntrack ipt_REJECT nf_reject_ipv4 xt_tcpudp xt_addrtype nft_compat x_tables nft_chain_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 nf_tables overlay cfg80211 bnep mtd_intel_dg snd_hda_codec_intelhdmi mtd snd_hda_codec_hdmi nls_utf8 mxm_wmi intel_wmi_thunderbolt gigabyte_wmi wmi_bmof xe drm_gpuvm drm_gpusvm_helper i2c_algo_bit drm_buddy drm_ttm_helper ttm video drm_suballoc_helper gpu_sched drm_client_lib drm_exec drm_display_helper cec drm_kunit_helpers drm_kms_helper kunit x86_pkg_temp_thermal intel_powerclamp coretemp snd_hda_codec_alc882 snd_hda_codec_realtek_lib snd_hda_codec_generic snd_hda_intel snd_soc_avs snd_soc_hda_codec snd_hda_ext_core snd_hda_codec snd_hwdep snd_hda_core snd_intel_dspcfg snd_soc_core snd_compress ac97_bus snd_pcm snd_seq snd_seq_device snd_timer i2c_i801 i2c_mux snd i2c_smbus btusb btrtl btbcm btmtk btintel bluetooth ecdh_generic rfkill ecc mei_me mei ioatdma dca wmi nfsd drm i2c_dev fuse nfnetlink
    [  743.186938] ---[ end trace 0000000000000000 ]---
    
    And for property blobs:
    
    void drm_mode_config_cleanup(struct drm_device *dev)
    {
    ...
            list_for_each_entry_safe(blob, bt, &dev->mode_config.property_blob_list,
                                     head_global) {
                    drm_property_blob_put(blob);
            }
    
    Resulting in:
    
    [  371.072940] BUG: unable to handle page fault for address: 000001ffffffffff
    [  371.072944] #PF: supervisor read access in kernel mode
    [  371.072945] #PF: error_code(0x0000) - not-present page
    [  371.072947] PGD 0 P4D 0
    [  371.072950] Oops: Oops: 0000 [#1] SMP
    [  371.072953] CPU: 0 UID: 1000 PID: 3693 Comm: kwin_wayland Not tainted 7.0.0-rc1-valkyria+ #111 PREEMPT_{RT,(lazy)}
    [  371.072956] Hardware name: Gigabyte Technology Co., Ltd. X299 AORUS Gaming 3/X299 AORUS Gaming 3-CF, BIOS F8n 12/06/2021
    [  371.072957] RIP: 0010:drm_property_destroy_user_blobs+0x3b/0x90 [drm]
    [  371.073019] Code: 00 00 48 83 ec 10 48 8b 86 30 01 00 00 48 39 c3 74 59 48 89 c2 48 8d 48 c8 48 8b 00 4c 8d 60 c8 eb 04 4c 8d 60 c8 48 8b 71 40 <48> 39 16 0f 85 39 32 01 00 48 3b 50 08 0f 85 2f 32 01 00 48 89 70
    [  371.073021] RSP: 0018:ffffc90006a73de8 EFLAGS: 00010293
    [  371.073022] RAX: 000001ffffffffff RBX: ffff888118a1a930 RCX: ffff8881b92355c0
    [  371.073024] RDX: ffff8881b92355f8 RSI: 000001ffffffffff RDI: ffff888118be4000
    [  371.073025] RBP: ffffc90006a73e08 R08: ffff8881009b7300 R09: ffff888cecc5b000
    [  371.073026] R10: ffffc90006a73e90 R11: 0000000000000002 R12: 000001ffffffffc7
    [  371.073027] R13: ffff888118a1a980 R14: ffff88810b366d20 R15: ffff888118a1a970
    [  371.073028] FS:  00007f1faccbb280(0000) GS:ffff888cec2db000(0000) knlGS:0000000000000000
    [  371.073029] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  371.073030] CR2: 000001ffffffffff CR3: 000000010655c001 CR4: 00000000003706f0
    [  371.073031] Call Trace:
    [  371.073033]  <TASK>
    [  371.073036]  drm_file_free+0x1df/0x2a0 [drm]
    [  371.073077]  drm_release_noglobal+0x7a/0xe0 [drm]
    [  371.073113]  __fput+0xe2/0x2b0
    [  371.073118]  fput_close_sync+0x40/0xa0
    [  371.073119]  __x64_sys_close+0x3e/0x80
    [  371.073122]  x64_sys_call+0xa07/0xa30
    [  371.073126]  do_syscall_64+0xc0/0x840
    [  371.073130]  entry_SYSCALL_64_after_hwframe+0x4b/0x53
    [  371.073132] RIP: 0033:0x7f1fb3501732
    [  371.073133] Code: 08 0f 85 a1 38 ff ff 49 89 fb 48 89 f0 48 89 d7 48 89 ce 4c 89 c2 4d 89 ca 4c 8b 44 24 08 4c 8b 4c 24 10 4c 89 5c 24 08 0f 05 <c3> 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 00 f3 0f 1e fa 55 bf 01 00
    [  371.073135] RSP: 002b:00007ffe8e6f0278 EFLAGS: 00000246 ORIG_RAX: 0000000000000003
    [  371.073136] RAX: ffffffffffffffda RBX: 00007ffe8e6f0300 RCX: 00007f1fb3501732
    [  371.073137] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000012
    [  371.073138] RBP: 00007ffe8e6f02a0 R08: 0000000000000000 R09: 0000000000000000
    [  371.073139] R10: 0000000000000000 R11: 0000000000000246 R12: 00005585ba46eea0
    [  371.073140] R13: 00007ffe8e6f0360 R14: 00007ffe8e6f0360 R15: 00005585ba458a30
    [  371.073143]  </TASK>
    [  371.073144] Modules linked in: rfcomm snd_hrtimer xt_addrtype xt_CHECKSUM xt_MASQUERADE xt_conntrack ipt_REJECT nf_reject_ipv4 xt_tcpudp nft_compat x_tables nft_chain_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 nf_tables overlay cfg80211 bnep snd_hda_codec_intelhdmi snd_hda_codec_hdmi mtd_intel_dg mtd nls_utf8 wmi_bmof mxm_wmi gigabyte_wmi intel_wmi_thunderbolt xe drm_gpuvm drm_gpusvm_helper i2c_algo_bit drm_buddy drm_ttm_helper ttm video drm_suballoc_helper gpu_sched drm_client_lib drm_exec drm_display_helper cec drm_kunit_helpers drm_kms_helper kunit x86_pkg_temp_thermal intel_powerclamp coretemp snd_hda_codec_alc882 snd_hda_codec_realtek_lib snd_hda_codec_generic snd_hda_intel snd_soc_avs snd_soc_hda_codec snd_hda_ext_core snd_hda_codec snd_hwdep snd_hda_core snd_intel_dspcfg snd_soc_core snd_compress ac97_bus snd_pcm snd_seq snd_seq_device snd_timer i2c_i801 btusb i2c_mux i2c_smbus btrtl snd btbcm btmtk btintel bluetooth ecdh_generic rfkill ecc mei_me mei ioatdma dca wmi nfsd drm i2c_dev fuse nfnetlink
    [  371.073198] CR2: 000001ffffffffff
    [  371.073199] ---[ end trace 0000000000000000 ]---
    
    Add a guard around file close, and ensure the warnings from drm_mode_config
    do not trigger. Fix those by allowing an open reference to the file descriptor
    and cleaning up the file linked list entry in drm_mode_config_cleanup().
    
    Cc: <stable@vger.kernel.org> # v4.18+
    Fixes: bee330f3d672 ("drm: Use srcu to protect drm_device.unplugged")
    Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
    Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
    Link: https://patch.msgid.link/20260313151728.14990-4-dev@lankhorst.se
    Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
    [ adapted drm_dbg_printer(dev, DRM_UT_KMS, ...) call to older drm_debug_printer(...) API ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dst: fix races in rt6_uncached_list_del() and rt_del_uncached_list() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue Feb 24 13:49:43 2026 +0800

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

 
e1000e: clear DPG_EN after reset to avoid autonomous power-gating [+ + +]
Author: Vitaly Lifshits <vitaly.lifshits@intel.com>
Date:   Tue Jan 6 16:14:20 2026 +0200

    e1000e: clear DPG_EN after reset to avoid autonomous power-gating
    
    [ Upstream commit 0942fc6d324eb9c6b16187b2aa994c0823557f06 ]
    
    Panther Lake systems introduced an autonomous power gating feature for
    the integrated Gigabit Ethernet in shutdown state (S5) state. As part of
    it, the reset value of DPG_EN bit was changed to 1. Clear this bit after
    performing hardware reset to avoid errors such as Tx/Rx hangs, or packet
    loss/corruption.
    
    Fixes: 0c9183ce61bc ("e1000e: Add support for the next LOM generation")
    Signed-off-by: Vitaly Lifshits <vitaly.lifshits@intel.com>
    Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
    Tested-by: Avigail Dahan <avigailx.dahan@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>

 
eth: bnxt: always recalculate features after XDP clearing, fix null-deref [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Wed Feb 25 14:00:20 2026 +0800

    eth: bnxt: always recalculate features after XDP clearing, fix null-deref
    
    [ Upstream commit f0aa6a37a3dbb40b272df5fc6db93c114688adcd ]
    
    Recalculate features when XDP is detached.
    
    Before:
      # ip li set dev eth0 xdp obj xdp_dummy.bpf.o sec xdp
      # ip li set dev eth0 xdp off
      # ethtool -k eth0 | grep gro
      rx-gro-hw: off [requested on]
    
    After:
      # ip li set dev eth0 xdp obj xdp_dummy.bpf.o sec xdp
      # ip li set dev eth0 xdp off
      # ethtool -k eth0 | grep gro
      rx-gro-hw: on
    
    The fact that HW-GRO doesn't get re-enabled automatically is just
    a minor annoyance. The real issue is that the features will randomly
    come back during another reconfiguration which just happens to invoke
    netdev_update_features(). The driver doesn't handle reconfiguring
    two things at a time very robustly.
    
    Starting with commit 98ba1d931f61 ("bnxt_en: Fix RSS logic in
    __bnxt_reserve_rings()") we only reconfigure the RSS hash table
    if the "effective" number of Rx rings has changed. If HW-GRO is
    enabled "effective" number of rings is 2x what user sees.
    So if we are in the bad state, with HW-GRO re-enablement "pending"
    after XDP off, and we lower the rings by / 2 - the HW-GRO rings
    doing 2x and the ethtool -L doing / 2 may cancel each other out,
    and the:
    
      if (old_rx_rings != bp->hw_resc.resv_rx_rings &&
    
    condition in __bnxt_reserve_rings() will be false.
    The RSS map won't get updated, and we'll crash with:
    
      BUG: kernel NULL pointer dereference, address: 0000000000000168
      RIP: 0010:__bnxt_hwrm_vnic_set_rss+0x13a/0x1a0
        bnxt_hwrm_vnic_rss_cfg_p5+0x47/0x180
        __bnxt_setup_vnic_p5+0x58/0x110
        bnxt_init_nic+0xb72/0xf50
        __bnxt_open_nic+0x40d/0xab0
        bnxt_open_nic+0x2b/0x60
        ethtool_set_channels+0x18c/0x1d0
    
    As we try to access a freed ring.
    
    The issue is present since XDP support was added, really, but
    prior to commit 98ba1d931f61 ("bnxt_en: Fix RSS logic in
    __bnxt_reserve_rings()") it wasn't causing major issues.
    
    Fixes: 1054aee82321 ("bnxt_en: Use NETIF_F_GRO_HW.")
    Fixes: 98ba1d931f61 ("bnxt_en: Fix RSS logic in __bnxt_reserve_rings()")
    Reviewed-by: Michael Chan <michael.chan@broadcom.com>
    Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
    Link: https://patch.msgid.link/20250109043057.2888953-1-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ The context change is due to the commit 1f6e77cb9b32
    ("bnxt_en: Add bnxt_l2_filter hash table.") in v6.8 and the commit
    8336a974f37d ("bnxt_en: Save user configured filters in a lookup list")
    in v6.9 which are irrelevant to the logic of this patch. ]
    Signed-off-by: Rahul Sharma <black.hawk@163.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
eventpoll: Fix integer overflow in ep_loop_check_proc() [+ + +]
Author: Jann Horn <jannh@google.com>
Date:   Mon Feb 23 20:59:33 2026 +0100

    eventpoll: Fix integer overflow in ep_loop_check_proc()
    
    commit fdcfce93073d990ed4b71752e31ad1c1d6e9d58b upstream.
    
    If a recursive call to ep_loop_check_proc() hits the `result = INT_MAX`,
    an integer overflow will occur in the calling ep_loop_check_proc() at
    `result = max(result, ep_loop_check_proc(ep_tovisit, depth + 1) + 1)`,
    breaking the recursion depth check.
    
    Fix it by using a different placeholder value that can't lead to an
    overflow.
    
    Reported-by: Guenter Roeck <linux@roeck-us.net>
    Fixes: f2e467a48287 ("eventpoll: Fix semi-unbounded recursion")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jann Horn <jannh@google.com>
    Link: https://patch.msgid.link/20260223-epoll-int-overflow-v1-1-452f35132224@google.com
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ext4: always allocate blocks only from groups inode can use [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Wed Feb 25 13:15:35 2026 -0500

    ext4: always allocate blocks only from groups inode can use
    
    [ Upstream commit 4865c768b563deff1b6a6384e74a62f143427b42 ]
    
    For filesystems with more than 2^32 blocks inodes using indirect block
    based format cannot use blocks beyond the 32-bit limit.
    ext4_mb_scan_groups_linear() takes care to not select these unsupported
    groups for such inodes however other functions selecting groups for
    allocation don't. So far this is harmless because the other selection
    functions are used only with mb_optimize_scan and this is currently
    disabled for inodes with indirect blocks however in the following patch
    we want to enable mb_optimize_scan regardless of inode format.
    
    Reviewed-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Zhang Yi <yi.zhang@huawei.com>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Acked-by: Pedro Falcato <pfalcato@suse.de>
    Cc: stable@kernel.org
    Link: https://patch.msgid.link/20260114182836.14120-3-jack@suse.cz
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    [ Drop a few hunks not needed in older trees ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: convert bd_bitmap_page to bd_bitmap_folio [+ + +]
Author: Matthew Wilcox (Oracle) <willy@infradead.org>
Date:   Tue Apr 16 18:28:54 2024 +0100

    ext4: convert bd_bitmap_page to bd_bitmap_folio
    
    [ Upstream commit 99b150d84e4939735cfce245e32e3d29312c68ec ]
    
    There is no need to make this a multi-page folio, so leave all the
    infrastructure around it in pages.  But since we're locking it, playing
    with its refcount and checking whether it's uptodate, it needs to move
    to the folio API.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Link: https://lore.kernel.org/r/20240416172900.244637-2-willy@infradead.org
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: bdc56a9c46b2 ("ext4: fix e4b bitmap inconsistency reports")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: convert bd_buddy_page to bd_buddy_folio [+ + +]
Author: Matthew Wilcox (Oracle) <willy@infradead.org>
Date:   Tue Apr 16 18:28:55 2024 +0100

    ext4: convert bd_buddy_page to bd_buddy_folio
    
    [ Upstream commit 5eea586b47f05b5f5518cf8f9dd9283a01a8066d ]
    
    There is no need to make this a multi-page folio, so leave all the
    infrastructure around it in pages.  But since we're locking it, playing
    with its refcount and checking whether it's uptodate, it needs to move
    to the folio API.
    
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Link: https://lore.kernel.org/r/20240416172900.244637-3-willy@infradead.org
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: bdc56a9c46b2 ("ext4: fix e4b bitmap inconsistency reports")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: correct the comments place for EXT4_EXT_MAY_ZEROOUT [+ + +]
Author: Yang Erkun <yangerkun@huawei.com>
Date:   Wed Nov 12 16:45:38 2025 +0800

    ext4: correct the comments place for EXT4_EXT_MAY_ZEROOUT
    
    [ Upstream commit cc742fd1d184bb2a11bacf50587d2c85290622e4 ]
    
    Move the comments just before we set EXT4_EXT_MAY_ZEROOUT in
    ext4_split_convert_extents.
    
    Signed-off-by: Yang Erkun <yangerkun@huawei.com>
    Message-ID: <20251112084538.1658232-4-yangerkun@huawei.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: feaf2a80e78f ("ext4: don't set EXT4_GET_BLOCKS_CONVERT when splitting before submitting I/O")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: delete redundant calculations in ext4_mb_get_buddy_page_lock() [+ + +]
Author: Gou Hao <gouhao@uniontech.com>
Date:   Tue Oct 24 11:52:15 2023 +0800

    ext4: delete redundant calculations in ext4_mb_get_buddy_page_lock()
    
    [ Upstream commit f2fec3e99a32d7c14dbf63c824f8286ebc94b18d ]
    
    'blocks_per_page' is always 1 after 'if (blocks_per_page >= 2)',
    'pnum' and 'block' are equal in this case.
    
    Signed-off-by: Gou Hao <gouhao@uniontech.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20231024035215.29474-1-gouhao@uniontech.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: bdc56a9c46b2 ("ext4: fix e4b bitmap inconsistency reports")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: don't set EXT4_GET_BLOCKS_CONVERT when splitting before submitting I/O [+ + +]
Author: Zhang Yi <yi.zhang@huawei.com>
Date:   Sat Nov 29 18:32:35 2025 +0800

    ext4: don't set EXT4_GET_BLOCKS_CONVERT when splitting before submitting I/O
    
    [ Upstream commit feaf2a80e78f89ee8a3464126077ba8683b62791 ]
    
    When allocating blocks during within-EOF DIO and writeback with
    dioread_nolock enabled, EXT4_GET_BLOCKS_PRE_IO was set to split an
    existing large unwritten extent. However, EXT4_GET_BLOCKS_CONVERT was
    set when calling ext4_split_convert_extents(), which may potentially
    result in stale data issues.
    
    Assume we have an unwritten extent, and then DIO writes the second half.
    
       [UUUUUUUUUUUUUUUU] on-disk extent        U: unwritten extent
       [UUUUUUUUUUUUUUUU] extent status tree
                |<-   ->| ----> dio write this range
    
    First, ext4_iomap_alloc() call ext4_map_blocks() with
    EXT4_GET_BLOCKS_PRE_IO, EXT4_GET_BLOCKS_UNWRIT_EXT and
    EXT4_GET_BLOCKS_CREATE flags set. ext4_map_blocks() find this extent and
    call ext4_split_convert_extents() with EXT4_GET_BLOCKS_CONVERT and the
    above flags set.
    
    Then, ext4_split_convert_extents() calls ext4_split_extent() with
    EXT4_EXT_MAY_ZEROOUT, EXT4_EXT_MARK_UNWRIT2 and EXT4_EXT_DATA_VALID2
    flags set, and it calls ext4_split_extent_at() to split the second half
    with EXT4_EXT_DATA_VALID2, EXT4_EXT_MARK_UNWRIT1, EXT4_EXT_MAY_ZEROOUT
    and EXT4_EXT_MARK_UNWRIT2 flags set. However, ext4_split_extent_at()
    failed to insert extent since a temporary lack -ENOSPC. It zeroes out
    the first half but convert the entire on-disk extent to written since
    the EXT4_EXT_DATA_VALID2 flag set, but left the second half as unwritten
    in the extent status tree.
    
       [0000000000SSSSSS]  data                S: stale data, 0: zeroed
       [WWWWWWWWWWWWWWWW]  on-disk extent      W: written extent
       [WWWWWWWWWWUUUUUU]  extent status tree
    
    Finally, if the DIO failed to write data to the disk, the stale data in
    the second half will be exposed once the cached extent entry is gone.
    
    Fix this issue by not passing EXT4_GET_BLOCKS_CONVERT when splitting
    an unwritten extent before submitting I/O, and make
    ext4_split_convert_extents() to zero out the entire extent range
    to zero for this case, and also mark the extent in the extent status
    tree for consistency.
    
    Fixes: b8a8684502a0 ("ext4: Introduce FALLOC_FL_ZERO_RANGE flag for fallocate")
    Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Reviewed-by: Baokun Li <libaokun1@huawei.com>
    Cc: stable@kernel.org
    Message-ID: <20251129103247.686136-4-yi.zhang@huaweicloud.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: don't zero the entire extent if EXT4_EXT_DATA_PARTIAL_VALID1 [+ + +]
Author: Zhang Yi <yi.zhang@huawei.com>
Date:   Sat Nov 29 18:32:34 2025 +0800

    ext4: don't zero the entire extent if EXT4_EXT_DATA_PARTIAL_VALID1
    
    [ Upstream commit 1bf6974822d1dba86cf11b5f05498581cf3488a2 ]
    
    When allocating initialized blocks from a large unwritten extent, or
    when splitting an unwritten extent during end I/O and converting it to
    initialized, there is currently a potential issue of stale data if the
    extent needs to be split in the middle.
    
           0  A      B  N
           [UUUUUUUUUUUU]    U: unwritten extent
           [--DDDDDDDD--]    D: valid data
              |<-  ->| ----> this range needs to be initialized
    
    ext4_split_extent() first try to split this extent at B with
    EXT4_EXT_DATA_ENTIRE_VALID1 and EXT4_EXT_MAY_ZEROOUT flag set, but
    ext4_split_extent_at() failed to split this extent due to temporary lack
    of space. It zeroout B to N and mark the entire extent from 0 to N
    as written.
    
           0  A      B  N
           [WWWWWWWWWWWW]    W: written extent
           [SSDDDDDDDDZZ]    Z: zeroed, S: stale data
    
    ext4_split_extent() then try to split this extent at A with
    EXT4_EXT_DATA_VALID2 flag set. This time, it split successfully and left
    a stale written extent from 0 to A.
    
           0  A      B   N
           [WW|WWWWWWWWWW]
           [SS|DDDDDDDDZZ]
    
    Fix this by pass EXT4_EXT_DATA_PARTIAL_VALID1 to ext4_split_extent_at()
    when splitting at B, don't convert the entire extent to written and left
    it as unwritten after zeroing out B to N. The remaining work is just
    like the standard two-part split. ext4_split_extent() will pass the
    EXT4_EXT_DATA_VALID2 flag when it calls ext4_split_extent_at() for the
    second time, allowing it to properly handle the split. If the split is
    successful, it will keep extent from 0 to A as unwritten.
    
    Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Reviewed-by: Baokun Li <libaokun1@huawei.com>
    Cc: stable@kernel.org
    Message-ID: <20251129103247.686136-3-yi.zhang@huaweicloud.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: drop extent cache after doing PARTIAL_VALID1 zeroout [+ + +]
Author: Zhang Yi <yi.zhang@huawei.com>
Date:   Sat Nov 29 18:32:38 2025 +0800

    ext4: drop extent cache after doing PARTIAL_VALID1 zeroout
    
    [ Upstream commit 6d882ea3b0931b43530d44149b79fcd4ffc13030 ]
    
    When splitting an unwritten extent in the middle and converting it to
    initialized in ext4_split_extent() with the EXT4_EXT_MAY_ZEROOUT and
    EXT4_EXT_DATA_VALID2 flags set, it could leave a stale unwritten extent.
    
    Assume we have an unwritten file and buffered write in the middle of it
    without dioread_nolock enabled, it will allocate blocks as written
    extent.
    
           0  A      B  N
           [UUUUUUUUUUUU] on-disk extent      U: unwritten extent
           [UUUUUUUUUUUU] extent status tree
           [--DDDDDDDD--]                     D: valid data
              |<-  ->| ----> this range needs to be initialized
    
    ext4_split_extent() first try to split this extent at B with
    EXT4_EXT_DATA_PARTIAL_VALID1 and EXT4_EXT_MAY_ZEROOUT flag set, but
    ext4_split_extent_at() failed to split this extent due to temporary lack
    of space. It zeroout B to N and leave the entire extent as unwritten.
    
           0  A      B  N
           [UUUUUUUUUUUU] on-disk extent
           [UUUUUUUUUUUU] extent status tree
           [--DDDDDDDDZZ]                     Z: zeroed data
    
    ext4_split_extent() then try to split this extent at A with
    EXT4_EXT_DATA_VALID2 flag set. This time, it split successfully and
    leave an written extent from A to N.
    
           0  A      B  N
           [UUWWWWWWWWWW] on-disk extent      W: written extent
           [UUUUUUUUUUUU] extent status tree
           [--DDDDDDDDZZ]
    
    Finally ext4_map_create_blocks() only insert extent A to B to the extent
    status tree, and leave an stale unwritten extent in the status tree.
    
           0  A      B  N
           [UUWWWWWWWWWW] on-disk extent      W: written extent
           [UUWWWWWWWWUU] extent status tree
           [--DDDDDDDDZZ]
    
    Fix this issue by always cached extent status entry after zeroing out
    the second part.
    
    Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
    Reviewed-by: Baokun Li <libaokun1@huawei.com>
    Cc: stable@kernel.org
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Message-ID: <20251129103247.686136-7-yi.zhang@huaweicloud.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: drop extent cache when splitting extent fails [+ + +]
Author: Zhang Yi <yi.zhang@huawei.com>
Date:   Sat Nov 29 18:32:39 2025 +0800

    ext4: drop extent cache when splitting extent fails
    
    [ Upstream commit 79b592e8f1b435796cbc2722190368e3e8ffd7a1 ]
    
    When the split extent fails, we might leave some extents still being
    processed and return an error directly, which will result in stale
    extent entries remaining in the extent status tree. So drop all of the
    remaining potentially stale extents if the splitting fails.
    
    Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
    Reviewed-by: Baokun Li <libaokun1@huawei.com>
    Cc: stable@kernel.org
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Message-ID: <20251129103247.686136-8-yi.zhang@huaweicloud.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: fix dirtyclusters double decrement on fs shutdown [+ + +]
Author: Brian Foster <bfoster@redhat.com>
Date:   Wed Feb 25 08:47:44 2026 -0500

    ext4: fix dirtyclusters double decrement on fs shutdown
    
    [ Upstream commit 94a8cea54cd935c54fa2fba70354757c0fc245e3 ]
    
    fstests test generic/388 occasionally reproduces a warning in
    ext4_put_super() associated with the dirty clusters count:
    
      WARNING: CPU: 7 PID: 76064 at fs/ext4/super.c:1324 ext4_put_super+0x48c/0x590 [ext4]
    
    Tracing the failure shows that the warning fires due to an
    s_dirtyclusters_counter value of -1. IOW, this appears to be a
    spurious decrement as opposed to some sort of leak. Further tracing
    of the dirty cluster count deltas and an LLM scan of the resulting
    output identified the cause as a double decrement in the error path
    between ext4_mb_mark_diskspace_used() and the caller
    ext4_mb_new_blocks().
    
    First, note that generic/388 is a shutdown vs. fsstress test and so
    produces a random set of operations and shutdown injections. In the
    problematic case, the shutdown triggers an error return from the
    ext4_handle_dirty_metadata() call(s) made from
    ext4_mb_mark_context(). The changed value is non-zero at this point,
    so ext4_mb_mark_diskspace_used() does not exit after the error
    bubbles up from ext4_mb_mark_context(). Instead, the former
    decrements both cluster counters and returns the error up to
    ext4_mb_new_blocks(). The latter falls into the !ar->len out path
    which decrements the dirty clusters counter a second time, creating
    the inconsistency.
    
    To avoid this problem and simplify ownership of the cluster
    reservation in this codepath, lift the counter reduction to a single
    place in the caller. This makes it more clear that
    ext4_mb_new_blocks() is responsible for acquiring cluster
    reservation (via ext4_claim_free_clusters()) in the !delalloc case
    as well as releasing it, regardless of whether it ends up consumed
    or returned due to failure.
    
    Fixes: 0087d9fb3f29 ("ext4: Fix s_dirty_blocks_counter if block allocation failed with nodelalloc")
    Signed-off-by: Brian Foster <bfoster@redhat.com>
    Reviewed-by: Baokun Li <libaokun1@huawei.com>
    Link: https://patch.msgid.link/20260113171905.118284-1-bfoster@redhat.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    [ Drop mballoc-test changes ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: fix e4b bitmap inconsistency reports [+ + +]
Author: Yongjian Sun <sunyongjian1@huawei.com>
Date:   Tue Jan 6 17:08:20 2026 +0800

    ext4: fix e4b bitmap inconsistency reports
    
    [ Upstream commit bdc56a9c46b2a99c12313122b9352b619a2e719e ]
    
    A bitmap inconsistency issue was observed during stress tests under
    mixed huge-page workloads. Ext4 reported multiple e4b bitmap check
    failures like:
    
    ext4_mb_complex_scan_group:2508: group 350, 8179 free clusters as
    per group info. But got 8192 blocks
    
    Analysis and experimentation confirmed that the issue is caused by a
    race condition between page migration and bitmap modification. Although
    this timing window is extremely narrow, it is still hit in practice:
    
    folio_lock                        ext4_mb_load_buddy
    __migrate_folio
      check ref count
      folio_mc_copy                     __filemap_get_folio
                                          folio_try_get(folio)
                                      ......
                                      mb_mark_used
                                      ext4_mb_unload_buddy
      __folio_migrate_mapping
        folio_ref_freeze
    folio_unlock
    
    The root cause of this issue is that the fast path of load_buddy only
    increments the folio's reference count, which is insufficient to prevent
    concurrent folio migration. We observed that the folio migration process
    acquires the folio lock. Therefore, we can determine whether to take the
    fast path in load_buddy by checking the lock status. If the folio is
    locked, we opt for the slow path (which acquires the lock) to close this
    concurrency window.
    
    Additionally, this change addresses the following issues:
    
    When the DOUBLE_CHECK macro is enabled to inspect bitmap-related
    issues, the following error may be triggered:
    
    corruption in group 324 at byte 784(6272): f in copy != ff on
    disk/prealloc
    
    Analysis reveals that this is a false positive. There is a specific race
    window where the bitmap and the group descriptor become momentarily
    inconsistent, leading to this error report:
    
    ext4_mb_load_buddy                   ext4_mb_load_buddy
      __filemap_get_folio(create|lock)
        folio_lock
      ext4_mb_init_cache
        folio_mark_uptodate
                                         __filemap_get_folio(no lock)
                                         ......
                                         mb_mark_used
                                           mb_mark_used_double
      mb_cmp_bitmaps
                                           mb_set_bits(e4b->bd_bitmap)
      folio_unlock
    
    The original logic assumed that since mb_cmp_bitmaps is called when the
    bitmap is newly loaded from disk, the folio lock would be sufficient to
    prevent concurrent access. However, this overlooks a specific race
    condition: if another process attempts to load buddy and finds the folio
    is already in an uptodate state, it will immediately begin using it without
    holding folio lock.
    
    Signed-off-by: Yongjian Sun <sunyongjian1@huawei.com>
    Reviewed-by: Zhang Yi <yi.zhang@huawei.com>
    Reviewed-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20260106090820.836242-1-sunyongjian@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: get rid of ppath in ext4_convert_unwritten_extents_endio() [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Thu Aug 22 10:35:39 2024 +0800

    ext4: get rid of ppath in ext4_convert_unwritten_extents_endio()
    
    [ Upstream commit 8d5ad7b08f9234bc92b9567cfe52e521df5f6626 ]
    
    The use of path and ppath is now very confusing, so to make the code more
    readable, pass path between functions uniformly, and get rid of ppath.
    
    To get rid of the ppath in ext4_convert_unwritten_extents_endio(), the
    following is done here:
    
     * Free the extents path when an error is encountered.
     * Its caller needs to update ppath if it uses ppath.
    
    No functional changes.
    
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Tested-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Link: https://patch.msgid.link/20240822023545.1994557-20-libaokun@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: feaf2a80e78f ("ext4: don't set EXT4_GET_BLOCKS_CONVERT when splitting before submitting I/O")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: get rid of ppath in ext4_ext_convert_to_initialized() [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Thu Aug 22 10:35:40 2024 +0800

    ext4: get rid of ppath in ext4_ext_convert_to_initialized()
    
    [ Upstream commit 33c14b8bd8a9ef8b3dfde136b0ca779e68c2f576 ]
    
    The use of path and ppath is now very confusing, so to make the code more
    readable, pass path between functions uniformly, and get rid of ppath.
    
    To get rid of the ppath in ext4_ext_convert_to_initialized(), the following
    is done here:
    
     * Free the extents path when an error is encountered.
     * Its caller needs to update ppath if it uses ppath.
     * The 'allocated' is changed from passing a value to passing an address.
    
    No functional changes.
    
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Tested-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Link: https://patch.msgid.link/20240822023545.1994557-21-libaokun@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: feaf2a80e78f ("ext4: don't set EXT4_GET_BLOCKS_CONVERT when splitting before submitting I/O")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: get rid of ppath in ext4_ext_create_new_leaf() [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Thu Aug 22 10:35:33 2024 +0800

    ext4: get rid of ppath in ext4_ext_create_new_leaf()
    
    [ Upstream commit a000bc8678cc2bb10a5b80b4e991e77c7b4612fd ]
    
    The use of path and ppath is now very confusing, so to make the code more
    readable, pass path between functions uniformly, and get rid of ppath.
    
    To get rid of the ppath in ext4_ext_create_new_leaf(), the following is
    done here:
    
     * Free the extents path when an error is encountered.
     * Its caller needs to update ppath if it uses ppath.
    
    No functional changes.
    
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Tested-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Link: https://patch.msgid.link/20240822023545.1994557-14-libaokun@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: 22784ca541c0 ("ext4: subdivide EXT4_EXT_DATA_VALID1")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: get rid of ppath in ext4_ext_handle_unwritten_extents() [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Thu Aug 22 10:35:41 2024 +0800

    ext4: get rid of ppath in ext4_ext_handle_unwritten_extents()
    
    [ Upstream commit 2ec2e1043473b3d4a3afbe6ad7c5a5b7a6fdf480 ]
    
    The use of path and ppath is now very confusing, so to make the code more
    readable, pass path between functions uniformly, and get rid of ppath.
    
    To get rid of the ppath in ext4_ext_handle_unwritten_extents(), the
    following is done here:
    
     * Free the extents path when an error is encountered.
     * The 'allocated' is changed from passing a value to passing an address.
    
    No functional changes.
    
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Tested-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Link: https://patch.msgid.link/20240822023545.1994557-22-libaokun@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: feaf2a80e78f ("ext4: don't set EXT4_GET_BLOCKS_CONVERT when splitting before submitting I/O")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: get rid of ppath in ext4_ext_insert_extent() [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Thu Aug 22 10:35:34 2024 +0800

    ext4: get rid of ppath in ext4_ext_insert_extent()
    
    [ Upstream commit f7d1331f16a869c76a5102caebb58e840e1d509c ]
    
    The use of path and ppath is now very confusing, so to make the code more
    readable, pass path between functions uniformly, and get rid of ppath.
    
    To get rid of the ppath in ext4_ext_insert_extent(), the following is done
    here:
    
     * Free the extents path when an error is encountered.
     * Its caller needs to update ppath if it uses ppath.
     * Free path when npath is used, free npath when it is not used.
     * The got_allocated_blocks label in ext4_ext_map_blocks() does not
       update err now, so err is updated to 0 if the err returned by
       ext4_ext_search_right() is greater than 0 and is about to enter
       got_allocated_blocks.
    
    No functional changes.
    
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Tested-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Link: https://patch.msgid.link/20240822023545.1994557-15-libaokun@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: 22784ca541c0 ("ext4: subdivide EXT4_EXT_DATA_VALID1")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: get rid of ppath in ext4_find_extent() [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Thu Aug 22 10:35:31 2024 +0800

    ext4: get rid of ppath in ext4_find_extent()
    
    [ Upstream commit 0be4c0c2f17bd10ae16c852f02d51a6a7b318aca ]
    
    The use of path and ppath is now very confusing, so to make the code more
    readable, pass path between functions uniformly, and get rid of ppath.
    
    Getting rid of ppath in ext4_find_extent() requires its caller to update
    ppath. These ppaths will also be dropped later. No functional changes.
    
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Tested-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Link: https://patch.msgid.link/20240822023545.1994557-12-libaokun@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: 22784ca541c0 ("ext4: subdivide EXT4_EXT_DATA_VALID1")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: get rid of ppath in ext4_split_convert_extents() [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Thu Aug 22 10:35:38 2024 +0800

    ext4: get rid of ppath in ext4_split_convert_extents()
    
    [ Upstream commit 225057b1af381567ffa4eb813f4a28a5c38a25cf ]
    
    The use of path and ppath is now very confusing, so to make the code more
    readable, pass path between functions uniformly, and get rid of ppath.
    
    To get rid of the ppath in ext4_split_convert_extents(), the following is
    done here:
    
     * Its caller needs to update ppath if it uses ppath.
    
    No functional changes.
    
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Tested-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Link: https://patch.msgid.link/20240822023545.1994557-19-libaokun@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: feaf2a80e78f ("ext4: don't set EXT4_GET_BLOCKS_CONVERT when splitting before submitting I/O")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: get rid of ppath in ext4_split_extent() [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Thu Aug 22 10:35:37 2024 +0800

    ext4: get rid of ppath in ext4_split_extent()
    
    [ Upstream commit f74cde045617cc275c848c9692feac249ff7a3e7 ]
    
    The use of path and ppath is now very confusing, so to make the code more
    readable, pass path between functions uniformly, and get rid of ppath.
    
    To get rid of the ppath in ext4_split_extent(), the following is done here:
    
     * The 'allocated' is changed from passing a value to passing an address.
     * Its caller needs to update ppath if it uses ppath.
    
    No functional changes.
    
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Tested-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Link: https://patch.msgid.link/20240822023545.1994557-18-libaokun@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: feaf2a80e78f ("ext4: don't set EXT4_GET_BLOCKS_CONVERT when splitting before submitting I/O")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: get rid of ppath in ext4_split_extent_at() [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Thu Aug 22 10:35:35 2024 +0800

    ext4: get rid of ppath in ext4_split_extent_at()
    
    [ Upstream commit 1de82b1b60d4613753254bf3cbf622a4c02c945c ]
    
    The use of path and ppath is now very confusing, so to make the code more
    readable, pass path between functions uniformly, and get rid of ppath.
    
    To get rid of the ppath in ext4_split_extent_at(), the following is done
    here:
    
     * Free the extents path when an error is encountered.
     * Its caller needs to update ppath if it uses ppath.
     * Teach ext4_ext_show_leaf() to skip error pointer.
    
    No functional changes.
    
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Tested-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Link: https://patch.msgid.link/20240822023545.1994557-16-libaokun@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: 22784ca541c0 ("ext4: subdivide EXT4_EXT_DATA_VALID1")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: subdivide EXT4_EXT_DATA_VALID1 [+ + +]
Author: Zhang Yi <yi.zhang@huawei.com>
Date:   Sat Nov 29 18:32:33 2025 +0800

    ext4: subdivide EXT4_EXT_DATA_VALID1
    
    [ Upstream commit 22784ca541c0f01c5ebad14e8228298dc0a390ed ]
    
    When splitting an extent, if the EXT4_GET_BLOCKS_CONVERT flag is set and
    it is necessary to split the target extent in the middle,
    ext4_split_extent() first handles splitting the latter half of the
    extent and passes the EXT4_EXT_DATA_VALID1 flag. This flag implies that
    all blocks before the split point contain valid data; however, this
    assumption is incorrect.
    
    Therefore, subdivid EXT4_EXT_DATA_VALID1 into
    EXT4_EXT_DATA_ENTIRE_VALID1 and EXT4_EXT_DATA_PARTIAL_VALID1, which
    indicate that the first half of the extent is either entirely valid or
    only partially valid, respectively. These two flags cannot be set
    simultaneously.
    
    This patch does not use EXT4_EXT_DATA_PARTIAL_VALID1, it only replaces
    EXT4_EXT_DATA_VALID1 with EXT4_EXT_DATA_ENTIRE_VALID1 at the location
    where it is set, no logical changes.
    
    Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
    Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Reviewed-by: Baokun Li <libaokun1@huawei.com>
    Cc: stable@kernel.org
    Message-ID: <20251129103247.686136-2-yi.zhang@huaweicloud.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
f2fs: fix to avoid migrating empty section [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Mon Mar 9 16:32:27 2026 +0800

    f2fs: fix to avoid migrating empty section
    
    [ Upstream commit d625a2b08c089397d3a03bff13fa8645e4ec7a01 ]
    
    It reports a bug from device w/ zufs:
    
    F2FS-fs (dm-64): Inconsistent segment (173822) type [1, 0] in SSA and SIT
    F2FS-fs (dm-64): Stopped filesystem due to reason: 4
    
    Thread A                                Thread B
    - f2fs_expand_inode_data
     - f2fs_allocate_pinning_section
      - f2fs_gc_range
       - do_garbage_collect w/ segno #x
                                            - writepage
                                             - f2fs_allocate_data_block
                                              - new_curseg
                                               - allocate segno #x
    
    The root cause is: fallocate on pinning file may race w/ block allocation
    as above, result in do_garbage_collect() from fallocate() may migrate
    segment which is just allocated by a log, the log will update segment type
    in its in-memory structure, however GC will get segment type from on-disk
    SSA block, once segment type changes by log, we can detect such
    inconsistency, then shutdown filesystem.
    
    In this case, on-disk SSA shows type of segno #173822 is 1 (SUM_TYPE_NODE),
    however segno #173822 was just allocated as data type segment, so in-memory
    SIT shows type of segno #173822 is 0 (SUM_TYPE_DATA).
    
    Change as below to fix this issue:
    - check whether current section is empty before gc
    - add sanity checks on do_garbage_collect() to avoid any race case, result
    in migrating segment used by log.
    - btw, it fixes misc issue in printed logs: "SSA and SIT" -> "SIT and SSA".
    
    Fixes: 9703d69d9d15 ("f2fs: support file pinning for zoned devices")
    Cc: Daeho Jeong <daehojeong@google.com>
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    [ Use IS_CURSEC instead of is_cursec according to
    commit c1cfc87e49525 ("f2fs: introduce is_cur{seg,sec}()"). ]
    Signed-off-by: Robert Garcia <rob_garcia@163.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

f2fs: zone: fix to avoid inconsistence in between SIT and SSA [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Wed Mar 4 13:55:56 2026 +0800

    f2fs: zone: fix to avoid inconsistence in between SIT and SSA
    
    [ Upstream commit 773704c1ef96a8b70d0d186ab725f50548de82c4 ]
    
    w/ below testcase, it will cause inconsistence in between SIT and SSA.
    
    create_null_blk 512 2 1024 1024
    mkfs.f2fs -m /dev/nullb0
    mount /dev/nullb0 /mnt/f2fs/
    touch /mnt/f2fs/file
    f2fs_io pinfile set /mnt/f2fs/file
    fallocate -l 4GiB /mnt/f2fs/file
    
    F2FS-fs (nullb0): Inconsistent segment (0) type [1, 0] in SSA and SIT
    CPU: 5 UID: 0 PID: 2398 Comm: fallocate Tainted: G           O       6.13.0-rc1 #84
    Tainted: [O]=OOT_MODULE
    Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
    Call Trace:
     <TASK>
     dump_stack_lvl+0xb3/0xd0
     dump_stack+0x14/0x20
     f2fs_handle_critical_error+0x18c/0x220 [f2fs]
     f2fs_stop_checkpoint+0x38/0x50 [f2fs]
     do_garbage_collect+0x674/0x6e0 [f2fs]
     f2fs_gc_range+0x12b/0x230 [f2fs]
     f2fs_allocate_pinning_section+0x5c/0x150 [f2fs]
     f2fs_expand_inode_data+0x1cc/0x3c0 [f2fs]
     f2fs_fallocate+0x3c3/0x410 [f2fs]
     vfs_fallocate+0x15f/0x4b0
     __x64_sys_fallocate+0x4a/0x80
     x64_sys_call+0x15e8/0x1b80
     do_syscall_64+0x68/0x130
     entry_SYSCALL_64_after_hwframe+0x67/0x6f
    RIP: 0033:0x7f9dba5197ca
    F2FS-fs (nullb0): Stopped filesystem due to reason: 4
    
    The reason is f2fs_gc_range() may try to migrate block in curseg, however,
    its SSA block is not uptodate due to the last summary block data is still
    in cache of curseg.
    
    In this patch, we add a condition in f2fs_gc_range() to check whether
    section is opened or not, and skip block migration for opened section.
    
    Fixes: 9703d69d9d15 ("f2fs: support file pinning for zoned devices")
    Reviewed-by: Daeho Jeong <daehojeong@google.com>
    Cc: Daeho Jeong <daehojeong@google.com>
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    [ Minor conflict resolved. ]
    Signed-off-by: Li hongliang <1468888505@139.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
firmware: arm_scpi: Fix device_node reference leak in probe path [+ + +]
Author: Felix Gu <ustc.gu@gmail.com>
Date:   Wed Jan 21 21:08:19 2026 +0800

    firmware: arm_scpi: Fix device_node reference leak in probe path
    
    [ Upstream commit 879c001afbac3df94160334fe5117c0c83b2cf48 ]
    
    A device_node reference obtained from the device tree is not released
    on all error paths in the arm_scpi probe path. Specifically, a node
    returned by of_parse_phandle() could be leaked when the probe failed
    after the node was acquired. The probe function returns early and
    the shmem reference is not released.
    
    Use __free(device_node) scope-based cleanup to automatically release
    the reference when the variable goes out of scope.
    
    Fixes: ed7ecb883901 ("firmware: arm_scpi: Add compatibility checks for shmem node")
    Signed-off-by: Felix Gu <ustc.gu@gmail.com>
    Message-Id: <20260121-arm_scpi_2-v2-1-702d7fa84acb@gmail.com>
    Signed-off-by: Sudeep Holla <sudeep.holla@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gve: defer interrupt enabling until NAPI registration [+ + +]
Author: Ankit Garg <nktgrg@google.com>
Date:   Tue Feb 17 11:52:07 2026 -0800

    gve: defer interrupt enabling until NAPI registration
    
    [ Upstream commit 3d970eda003441f66551a91fda16478ac0711617 ]
    
    Currently, interrupts are automatically enabled immediately upon
    request. This allows interrupt to fire before the associated NAPI
    context is fully initialized and cause failures like below:
    
    [    0.946369] Call Trace:
    [    0.946369]  <IRQ>
    [    0.946369]  __napi_poll+0x2a/0x1e0
    [    0.946369]  net_rx_action+0x2f9/0x3f0
    [    0.946369]  handle_softirqs+0xd6/0x2c0
    [    0.946369]  ? handle_edge_irq+0xc1/0x1b0
    [    0.946369]  __irq_exit_rcu+0xc3/0xe0
    [    0.946369]  common_interrupt+0x81/0xa0
    [    0.946369]  </IRQ>
    [    0.946369]  <TASK>
    [    0.946369]  asm_common_interrupt+0x22/0x40
    [    0.946369] RIP: 0010:pv_native_safe_halt+0xb/0x10
    
    Use the `IRQF_NO_AUTOEN` flag when requesting interrupts to prevent auto
    enablement and explicitly enable the interrupt in NAPI initialization
    path (and disable it during NAPI teardown).
    
    This ensures that interrupt lifecycle is strictly coupled with
    readiness of NAPI context.
    
    Cc: stable@vger.kernel.org
    Fixes: 893ce44df565 ("gve: Add basic driver framework for Compute Engine Virtual NIC")
    Signed-off-by: Ankit Garg <nktgrg@google.com>
    Reviewed-by: Jordan Rhee <jordanrhee@google.com>
    Signed-off-by: Harshitha Ramamurthy <hramamurthy@google.com>
    Link: https://patch.msgid.link/20251219102945.2193617-1-hramamurthy@google.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    [ modified to re-introduce the irq member to struct gve_notify_block,
      which was introuduced in commit 9a5e0776d11f ("gve: Avoid rescheduling
      napi if on wrong cpu"). ]
    Signed-off-by: Joshua Washington <joshwash@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

gve: fix incorrect buffer cleanup in gve_tx_clean_pending_packets for QPL [+ + +]
Author: Ankit Garg <nktgrg@google.com>
Date:   Mon Mar 9 09:00:29 2026 -0400

    gve: fix incorrect buffer cleanup in gve_tx_clean_pending_packets for QPL
    
    [ Upstream commit fb868db5f4bccd7a78219313ab2917429f715cea ]
    
    In DQ-QPL mode, gve_tx_clean_pending_packets() incorrectly uses the RDA
    buffer cleanup path. It iterates num_bufs times and attempts to unmap
    entries in the dma array.
    
    This leads to two issues:
    1. The dma array shares storage with tx_qpl_buf_ids (union).
     Interpreting buffer IDs as DMA addresses results in attempting to
     unmap incorrect memory locations.
    2. num_bufs in QPL mode (counting 2K chunks) can significantly exceed
     the size of the dma array, causing out-of-bounds access warnings
    (trace below is how we noticed this issue).
    
    UBSAN: array-index-out-of-bounds in
    drivers/net/ethernet/drivers/net/ethernet/google/gve/gve_tx_dqo.c:178:5 index 18 is out of
    range for type 'dma_addr_t[18]' (aka 'unsigned long long[18]')
    Workqueue: gve gve_service_task [gve]
    Call Trace:
    <TASK>
    dump_stack_lvl+0x33/0xa0
    __ubsan_handle_out_of_bounds+0xdc/0x110
    gve_tx_stop_ring_dqo+0x182/0x200 [gve]
    gve_close+0x1be/0x450 [gve]
    gve_reset+0x99/0x120 [gve]
    gve_service_task+0x61/0x100 [gve]
    process_scheduled_works+0x1e9/0x380
    
    Fix this by properly checking for QPL mode and delegating to
    gve_free_tx_qpl_bufs() to reclaim the buffers.
    
    Cc: stable@vger.kernel.org
    Fixes: a6fb8d5a8b69 ("gve: Tx path for DQO-QPL")
    Signed-off-by: Ankit Garg <nktgrg@google.com>
    Reviewed-by: Jordan Rhee <jordanrhee@google.com>
    Reviewed-by: Harshitha Ramamurthy <hramamurthy@google.com>
    Signed-off-by: Joshua Washington <joshwash@google.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20260220215324.1631350-1-joshwash@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ netmem_dma_unmap_page_attrs() => dma_unmap_page() ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
HID: Add HID_CLAIMED_INPUT guards in raw_event callbacks missing them [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu Feb 19 15:33:54 2026 +0100

    HID: Add HID_CLAIMED_INPUT guards in raw_event callbacks missing them
    
    commit ecfa6f34492c493a9a1dc2900f3edeb01c79946b upstream.
    
    In commit 2ff5baa9b527 ("HID: appleir: Fix potential NULL dereference at
    raw event handle"), we handle the fact that raw event callbacks
    can happen even for a HID device that has not been "claimed" causing a
    crash if a broken device were attempted to be connected to the system.
    
    Fix up the remaining in-tree HID drivers that forgot to add this same
    check to resolve the same issue.
    
    Cc: Jiri Kosina <jikos@kernel.org>
    Cc: Benjamin Tissoires <bentiss@kernel.org>
    Cc: Bastien Nocera <hadess@hadess.net>
    Cc: linux-input@vger.kernel.org
    Cc: stable <stable@kernel.org>
    Assisted-by: gkh_clanker_2000
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hwmon: (aht10) Add support for dht20 [+ + +]
Author: Akhilesh Patil <akhilesh@ee.iitb.ac.in>
Date:   Sun Nov 2 15:13:20 2025 +0530

    hwmon: (aht10) Add support for dht20
    
    [ Upstream commit 3eaf1b631506e8de2cb37c278d5bc042521e82c1 ]
    
    Add support for dht20 temperature and humidity sensor from Aosong.
    Modify aht10 driver to handle different init command for dht20 sensor by
    adding init_cmd entry in the driver data. dht20 sensor is compatible with
    aht10 hwmon driver with this change.
    
    Tested on TI am62x SK board with dht20 sensor connected at i2c-2 port.
    
    Signed-off-by: Akhilesh Patil <akhilesh@ee.iitb.ac.in>
    Link: https://lore.kernel.org/r/2025112-94320-906858@bhairav-test.ee.iitb.ac.in
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Stable-dep-of: b7497b5a99f5 ("hwmon: (aht10) Fix initialization commands for AHT20")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (aht10) Fix initialization commands for AHT20 [+ + +]
Author: Hao Yu <haoyufine@gmail.com>
Date:   Mon Feb 23 01:03:31 2026 +0800

    hwmon: (aht10) Fix initialization commands for AHT20
    
    [ Upstream commit b7497b5a99f54ab8dcda5b14a308385b2fb03d8d ]
    
    According to the AHT20 datasheet (updated to V1.0 after the 2023.09
    version), the initialization command for AHT20 is 0b10111110 (0xBE).
    The previous sequence (0xE1) used in earlier versions is no longer
    compatible with newer AHT20 sensors. Update the initialization
    command to ensure the sensor is properly initialized.
    
    While at it, use binary notation for DHT20_CMD_INIT to match the notation
    used in the datasheet.
    
    Fixes: d2abcb5cc885 ("hwmon: (aht10) Add support for compatible aht20")
    Signed-off-by: Hao Yu <haoyufine@gmail.com>
    Link: https://lore.kernel.org/r/20260222170332.1616-3-haoyufine@gmail.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (it87) Check the it87_lock() return value [+ + +]
Author: Bart Van Assche <bvanassche@acm.org>
Date:   Mon Feb 23 14:00:14 2026 -0800

    hwmon: (it87) Check the it87_lock() return value
    
    [ Upstream commit 07ed4f05bbfd2bc014974dcc4297fd3aa1cb88c0 ]
    
    Return early in it87_resume() if it87_lock() fails instead of ignoring the
    return value of that function. This patch suppresses a Clang thread-safety
    warning.
    
    Cc: Frank Crawford <frank@crawford.emu.id.au>
    Cc: Guenter Roeck <linux@roeck-us.net>
    Cc: Jean Delvare <jdelvare@suse.com>
    Cc: linux-hwmon@vger.kernel.org
    Fixes: 376e1a937b30 ("hwmon: (it87) Add calls to smbus_enable/smbus_disable as required")
    Signed-off-by: Bart Van Assche <bvanassche@acm.org>
    Link: https://lore.kernel.org/r/20260223220102.2158611-15-bart.vanassche@linux.dev
    [groeck: Declare 'ret' at the beginning of it87_resume()]
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (max16065) Use READ/WRITE_ONCE to avoid compiler optimization induced race [+ + +]
Author: Gui-Dong Han <hanguidong02@gmail.com>
Date:   Tue Feb 3 20:14:43 2026 +0800

    hwmon: (max16065) Use READ/WRITE_ONCE to avoid compiler optimization induced race
    
    [ Upstream commit 007be4327e443d79c9dd9e56dc16c36f6395d208 ]
    
    Simply copying shared data to a local variable cannot prevent data
    races. The compiler is allowed to optimize away the local copy and
    re-read the shared memory, causing a Time-of-Check Time-of-Use (TOCTOU)
    issue if the data changes between the check and the usage.
    
    To enforce the use of the local variable, use READ_ONCE() when reading
    the shared data and WRITE_ONCE() when updating it. Apply these macros to
    the three identified locations (curr_sense, adc, and fault) where local
    variables are used for error validation, ensuring the value remains
    consistent.
    
    Reported-by: Ben Hutchings <ben@decadent.org.uk>
    Closes: https://lore.kernel.org/all/6fe17868327207e8b850cf9f88b7dc58b2021f73.camel@decadent.org.uk/
    Fixes: f5bae2642e3d ("hwmon: Driver for MAX16065 System Manager and compatibles")
    Fixes: b8d5acdcf525 ("hwmon: (max16065) Use local variable to avoid TOCTOU")
    Cc: stable@vger.kernel.org
    Signed-off-by: Gui-Dong Han <hanguidong02@gmail.com>
    Link: https://lore.kernel.org/r/20260203121443.5482-1-hanguidong02@gmail.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (pmbus/isl68137) Fix unchecked return value and use sysfs_emit() [+ + +]
Author: Sanman Pradhan <psanman@juniper.net>
Date:   Wed Mar 18 19:40:19 2026 +0000

    hwmon: (pmbus/isl68137) Fix unchecked return value and use sysfs_emit()
    
    commit 86259558e422b250aa6aa57163a6d759074573f5 upstream.
    
    isl68137_avs_enable_show_page() uses the return value of
    pmbus_read_byte_data() without checking for errors. If the I2C transaction
    fails, a negative error code is passed through bitwise operations,
    producing incorrect output.
    
    Add an error check to propagate the return value if it is negative.
    Additionally, modernize the callback by replacing sprintf()
    with sysfs_emit().
    
    Fixes: 038a9c3d1e424 ("hwmon: (pmbus/isl68137) Add driver for Intersil ISL68137 PWM Controller")
    Cc: stable@vger.kernel.org
    Signed-off-by: Sanman Pradhan <psanman@juniper.net>
    Link: https://lore.kernel.org/r/20260318193952.47908-2-sanman.pradhan@hpe.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

hwmon: (pmbus/mp2975) Add error check for pmbus_read_word_data() return value [+ + +]
Author: Sanman Pradhan <psanman@juniper.net>
Date:   Tue Mar 17 17:37:17 2026 +0000

    hwmon: (pmbus/mp2975) Add error check for pmbus_read_word_data() return value
    
    commit 19d4b9c8a136704d5f2544e7ac550f27918a5004 upstream.
    
    mp2973_read_word_data() XORs the return value of pmbus_read_word_data()
    with PB_STATUS_POWER_GOOD_N without first checking for errors. If the I2C
    transaction fails, a negative error code is XORed with the constant,
    producing a corrupted value that is returned as valid status data instead
    of propagating the error.
    
    Add the missing error check before modifying the return value.
    
    Fixes: acda945afb465 ("hwmon: (pmbus/mp2975) Fix PGOOD in READ_STATUS_WORD")
    Cc: stable@vger.kernel.org
    Signed-off-by: Sanman Pradhan <psanman@juniper.net>
    Link: https://lore.kernel.org/r/20260317173308.382545-3-sanman.pradhan@hpe.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    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>

 
i2c: cp2615: fix serial string NULL-deref at probe [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Mar 23 08:53:01 2026 -0400

    i2c: cp2615: fix serial string NULL-deref at probe
    
    [ Upstream commit aa79f996eb41e95aed85a1bd7f56bcd6a3842008 ]
    
    The cp2615 driver uses the USB device serial string as the i2c adapter
    name but does not make sure that the string exists.
    
    Verify that the device has a serial number before accessing it to avoid
    triggering a NULL-pointer dereference (e.g. with malicious devices).
    
    Fixes: 4a7695429ead ("i2c: cp2615: add i2c driver for Silicon Labs' CP2615 Digital Audio Bridge")
    Cc: stable@vger.kernel.org      # 5.13
    Cc: Bence Csókás <bence98@sch.bme.hu>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: Bence Csókás <bence98@sch.bme.hu>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Link: https://lore.kernel.org/r/20260309075016.25612-1-johan@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i2c: cp2615: replace deprecated strncpy with strscpy [+ + +]
Author: Justin Stitt <justinstitt@google.com>
Date:   Mon Mar 23 08:53:00 2026 -0400

    i2c: cp2615: replace deprecated strncpy with strscpy
    
    [ Upstream commit e2def33f9ee1b1a8cda4ec5cde69840b5708f068 ]
    
    `strncpy` is deprecated for use on NUL-terminated destination strings [1].
    
    We should prefer more robust and less ambiguous string interfaces.
    
    We expect name to be NUL-terminated based on its numerous uses with
    functions that expect NUL-terminated strings.
    
    For example in i2c-core-base.c +1533:
    | dev_dbg(&adap->dev, "adapter [%s] registered\n", adap->name);
    
    NUL-padding is not required as `adap` is already zero-alloacted with:
    | adap = devm_kzalloc(&usbif->dev, sizeof(struct i2c_adapter), GFP_KERNEL);
    
    With the above in mind, a suitable replacement is `strscpy` [2] due to
    the fact that it guarantees NUL-termination on the destination buffer
    without unnecessarily NUL-padding.
    
    Link: https://www.kernel.org/doc/html/latest/process/deprecated.html#strncpy-on-nul-terminated-strings [1]
    Link: https://manpages.debian.org/testing/linux-manual-4.8/strscpy.9.en.html [2]
    Link: https://github.com/KSPP/linux/issues/90
    Signed-off-by: Justin Stitt <justinstitt@google.com>
    Reviewed-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Stable-dep-of: aa79f996eb41 ("i2c: cp2615: fix serial string NULL-deref at probe")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i2c: fsi: Fix a potential leak in fsi_i2c_probe() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sun Mar 1 17:21:01 2026 +0100

    i2c: fsi: Fix a potential leak in fsi_i2c_probe()
    
    commit be627abcc0d5dbd5882873bd85fbc18aa3d189ed upstream.
    
    In the commit in Fixes:, when the code has been updated to use an explicit
    for loop, instead of for_each_available_child_of_node(), the assumption
    that a reference to a device_node structure would be released at each
    iteration has been broken.
    
    Now, an explicit of_node_put() is needed to release the reference.
    
    Fixes: 095561f476ab ("i2c: fsi: Create busses for all ports")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Cc: <stable@vger.kernel.org> # v5.3+
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Link: https://lore.kernel.org/r/fd805c39f8de51edf303856103d782138a1633c8.1772382022.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i2c: pxa: defer reset on Armada 3700 when recovery is used [+ + +]
Author: Gabor Juhos <j4g8y7@gmail.com>
Date:   Thu Feb 26 14:11:27 2026 +0100

    i2c: pxa: defer reset on Armada 3700 when recovery is used
    
    commit 78a6ee14f8b9e1c8f7c77612122444f3be8dc8cc upstream.
    
    The I2C communication is completely broken on the Armada 3700 platform
    since commit 0b01392c18b9 ("i2c: pxa: move to generic GPIO recovery").
    
    For example, on the Methode uDPU board, probing of the two onboard
    temperature sensors fails ...
    
      [    7.271713] i2c i2c-0: using pinctrl states for GPIO recovery
      [    7.277503] i2c i2c-0:  PXA I2C adapter
      [    7.282199] i2c i2c-1: using pinctrl states for GPIO recovery
      [    7.288241] i2c i2c-1:  PXA I2C adapter
      [    7.292947] sfp sfp-eth1: Host maximum power 3.0W
      [    7.299614] sfp sfp-eth0: Host maximum power 3.0W
      [    7.308178] lm75 1-0048: supply vs not found, using dummy regulator
      [   32.489631] lm75 1-0048: probe with driver lm75 failed with error -121
      [   32.496833] lm75 1-0049: supply vs not found, using dummy regulator
      [   82.890614] lm75 1-0049: probe with driver lm75 failed with error -121
    
    ... and accessing the plugged-in SFP modules also does not work:
    
      [  511.298537] sfp sfp-eth1: please wait, module slow to respond
      [  536.488530] sfp sfp-eth0: please wait, module slow to respond
      ...
      [ 1065.688536] sfp sfp-eth1: failed to read EEPROM: -EREMOTEIO
      [ 1090.888532] sfp sfp-eth0: failed to read EEPROM: -EREMOTEIO
    
    After a discussion [1], there was an attempt to fix the problem by
    reverting the offending change by commit 7b211c767121 ("Revert "i2c:
    pxa: move to generic GPIO recovery""), but that only helped to fix
    the issue in the 6.1.y stable tree. The reason behind the partial succes
    is that there was another change in commit 20cb3fce4d60 ("i2c: Set i2c
    pinctrl recovery info from it's device pinctrl") in the 6.3-rc1 cycle
    which broke things further.
    
    The cause of the problem is the same in case of both offending commits
    mentioned above. Namely, the I2C core code changes the pinctrl state to
    GPIO while running the recovery initialization code. Although the PXA
    specific initialization also does this, but the key difference is that
    it happens before the controller is getting enabled in i2c_pxa_reset(),
    whereas in the case of the generic initialization it happens after that.
    
    Change the code to reset the controller only before the first transfer
    instead of before registering the controller. This ensures that the
    controller is not enabled at the time when the generic recovery code
    performs the pinctrl state changes, thus avoids the problem described
    above.
    
    As the result this change restores the original behaviour, which in
    turn makes the I2C communication to work again as it can be seen from
    the following log:
    
      [    7.363250] i2c i2c-0: using pinctrl states for GPIO recovery
      [    7.369041] i2c i2c-0:  PXA I2C adapter
      [    7.373673] i2c i2c-1: using pinctrl states for GPIO recovery
      [    7.379742] i2c i2c-1:  PXA I2C adapter
      [    7.384506] sfp sfp-eth1: Host maximum power 3.0W
      [    7.393013] sfp sfp-eth0: Host maximum power 3.0W
      [    7.399266] lm75 1-0048: supply vs not found, using dummy regulator
      [    7.407257] hwmon hwmon0: temp1_input not attached to any thermal zone
      [    7.413863] lm75 1-0048: hwmon0: sensor 'tmp75c'
      [    7.418746] lm75 1-0049: supply vs not found, using dummy regulator
      [    7.426371] hwmon hwmon1: temp1_input not attached to any thermal zone
      [    7.432972] lm75 1-0049: hwmon1: sensor 'tmp75c'
      [    7.755092] sfp sfp-eth1: module MENTECHOPTO      POS22-LDCC-KR    rev 1.0  sn MNC208U90009     dc 200828
      [    7.764997] mvneta d0040000.ethernet eth1: unsupported SFP module: no common interface modes
      [    7.785362] sfp sfp-eth0: module Mikrotik         S-RJ01           rev 1.0  sn 61B103C55C58     dc 201022
      [    7.803426] hwmon hwmon2: temp1_input not attached to any thermal zone
    
    Link: https://lore.kernel.org/r/20230926160255.330417-1-robert.marko@sartura.hr #1
    
    Cc: stable@vger.kernel.org # 6.3+
    Fixes: 20cb3fce4d60 ("i2c: Set i2c pinctrl recovery info from it's device pinctrl")
    Signed-off-by: Gabor Juhos <j4g8y7@gmail.com>
    Tested-by: Robert Marko <robert.marko@sartura.hr>
    Reviewed-by: Linus Walleij <linusw@kernel.org>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Link: https://lore.kernel.org/r/20260226-i2c-pxa-fix-i2c-communication-v4-1-797a091dae87@gmail.com
    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: 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 registering XDP RxQ info [+ + +]
Author: Larysa Zaremba <larysa.zaremba@intel.com>
Date:   Thu Mar 5 12:12:46 2026 +0100

    i40e: fix registering XDP RxQ info
    
    [ Upstream commit 8f497dc8a61429cc004720aa8e713743355d80cf ]
    
    Current way of handling XDP RxQ info in i40e has a problem, where frag_size
    is not updated when xsk_buff_pool is detached or when MTU is changed, this
    leads to growing tail always failing for multi-buffer packets.
    
    Couple XDP RxQ info registering with buffer allocations and unregistering
    with cleaning the ring.
    
    Fixes: a045d2f2d03d ("i40e: set xdp_rxq_info::frag_size")
    Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
    Signed-off-by: Larysa Zaremba <larysa.zaremba@intel.com>
    Link: https://patch.msgid.link/20260305111253.2317394-6-larysa.zaremba@intel.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.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>

i40e: use xdp.frame_sz as XDP RxQ info frag_size [+ + +]
Author: Larysa Zaremba <larysa.zaremba@intel.com>
Date:   Thu Mar 5 12:12:47 2026 +0100

    i40e: use xdp.frame_sz as XDP RxQ info frag_size
    
    [ Upstream commit c69d22c6c46a1d792ba8af3d8d6356fdc0e6f538 ]
    
    The only user of frag_size field in XDP RxQ info is
    bpf_xdp_frags_increase_tail(). It clearly expects whole buffer size instead
    of DMA write size. Different assumptions in i40e driver configuration lead
    to negative tailroom.
    
    Set frag_size to the same value as frame_sz in shared pages mode, use new
    helper to set frag_size when AF_XDP ZC is active.
    
    Fixes: a045d2f2d03d ("i40e: set xdp_rxq_info::frag_size")
    Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
    Signed-off-by: Larysa Zaremba <larysa.zaremba@intel.com>
    Link: https://patch.msgid.link/20260305111253.2317394-7-larysa.zaremba@intel.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iavf: fix VLAN filter lost on add/delete race [+ + +]
Author: Petr Oros <poros@redhat.com>
Date:   Wed Feb 25 11:01:37 2026 +0100

    iavf: fix VLAN filter lost on add/delete race
    
    [ Upstream commit fc9c69be594756b81b54c6bc40803fa6052f35ae ]
    
    When iavf_add_vlan() finds an existing filter in IAVF_VLAN_REMOVE
    state, it transitions the filter to IAVF_VLAN_ACTIVE assuming the
    pending delete can simply be cancelled. However, there is no guarantee
    that iavf_del_vlans() has not already processed the delete AQ request
    and removed the filter from the PF. In that case the filter remains in
    the driver's list as IAVF_VLAN_ACTIVE but is no longer programmed on
    the NIC. Since iavf_add_vlans() only picks up filters in
    IAVF_VLAN_ADD state, the filter is never re-added, and spoof checking
    drops all traffic for that VLAN.
    
      CPU0                       CPU1                     Workqueue
      ----                       ----                     ---------
      iavf_del_vlan(vlan 100)
        f->state = REMOVE
        schedule AQ_DEL_VLAN
                                 iavf_add_vlan(vlan 100)
                                   f->state = ACTIVE
                                                          iavf_del_vlans()
                                                            f is ACTIVE, skip
                                                          iavf_add_vlans()
                                                            f is ACTIVE, skip
    
      Filter is ACTIVE in driver but absent from NIC.
    
    Transition to IAVF_VLAN_ADD instead and schedule
    IAVF_FLAG_AQ_ADD_VLAN_FILTER so iavf_add_vlans() re-programs the
    filter.  A duplicate add is idempotent on the PF.
    
    Fixes: 0c0da0e95105 ("iavf: refactor VLAN filter states")
    Signed-off-by: Petr Oros <poros@redhat.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>

 
IB/mthca: Add missed mthca_unmap_user_db() for mthca_create_srq() [+ + +]
Author: Jason Gunthorpe <jgg@ziepe.ca>
Date:   Mon Feb 16 11:02:48 2026 -0400

    IB/mthca: Add missed mthca_unmap_user_db() for mthca_create_srq()
    
    commit 117942ca43e2e3c3d121faae530989931b7f67e1 upstream.
    
    Fix a user triggerable leak on the system call failure path.
    
    Cc: stable@vger.kernel.org
    Fixes: ec34a922d243 ("[PATCH] IB/mthca: Add SRQ implementation")
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Link: https://patch.msgid.link/2-v1-83e918d69e73+a9-rdma_udata_rc_jgg@nvidia.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.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>

 
icmp: fix NULL pointer dereference in icmp_tag_validation() [+ + +]
Author: Weiming Shi <bestswngs@gmail.com>
Date:   Wed Mar 18 21:06:01 2026 +0800

    icmp: fix NULL pointer dereference in icmp_tag_validation()
    
    [ Upstream commit 614aefe56af8e13331e50220c936fc0689cf5675 ]
    
    icmp_tag_validation() unconditionally dereferences the result of
    rcu_dereference(inet_protos[proto]) without checking for NULL.
    The inet_protos[] array is sparse -- only about 15 of 256 protocol
    numbers have registered handlers. When ip_no_pmtu_disc is set to 3
    (hardened PMTU mode) and the kernel receives an ICMP Fragmentation
    Needed error with a quoted inner IP header containing an unregistered
    protocol number, the NULL dereference causes a kernel panic in
    softirq context.
    
     Oops: general protection fault, probably for non-canonical address 0xdffffc0000000002: 0000 [#1] SMP KASAN NOPTI
     KASAN: null-ptr-deref in range [0x0000000000000010-0x0000000000000017]
     RIP: 0010:icmp_unreach (net/ipv4/icmp.c:1085 net/ipv4/icmp.c:1143)
     Call Trace:
      <IRQ>
      icmp_rcv (net/ipv4/icmp.c:1527)
      ip_protocol_deliver_rcu (net/ipv4/ip_input.c:207)
      ip_local_deliver_finish (net/ipv4/ip_input.c:242)
      ip_local_deliver (net/ipv4/ip_input.c:262)
      ip_rcv (net/ipv4/ip_input.c:573)
      __netif_receive_skb_one_core (net/core/dev.c:6164)
      process_backlog (net/core/dev.c:6628)
      handle_softirqs (kernel/softirq.c:561)
      </IRQ>
    
    Add a NULL check before accessing icmp_strict_tag_validation. If the
    protocol has no registered handler, return false since it cannot
    perform strict tag validation.
    
    Fixes: 8ed1dc44d3e9 ("ipv4: introduce hardened ip_no_pmtu_disc mode")
    Reported-by: Xiang Mei <xmei5@asu.edu>
    Signed-off-by: Weiming Shi <bestswngs@gmail.com>
    Link: https://patch.msgid.link/20260318130558.1050247-4-bestswngs@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
igc: fix missing update of skb->tail in igc_xmit_frame() [+ + +]
Author: Kohei Enju <kohei@enjuk.jp>
Date:   Sat Feb 14 19:46:32 2026 +0000

    igc: fix missing update of skb->tail in igc_xmit_frame()
    
    [ Upstream commit 0ffba246652faf4a36aedc66059c2f94e4c83ea5 ]
    
    igc_xmit_frame() misses updating skb->tail when the packet size is
    shorter than the minimum one.
    Use skb_put_padto() in alignment with other Intel Ethernet drivers.
    
    Fixes: 0507ef8a0372 ("igc: Add transmit and receive fastpath and interrupt handlers")
    Signed-off-by: Kohei Enju <kohei@enjuk.jp>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Paul Menzel <pmenzel@molgen.mpg.de>
    Tested-by: Avigail Dahan <avigailx.dahan@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.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: 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: light: bh1780: fix PM runtime leak on error path [+ + +]
Author: Antoniu Miclaus <antoniu.miclaus@analog.com>
Date:   Thu Mar 19 15:35:58 2026 -0400

    iio: light: bh1780: fix PM runtime leak on error path
    
    [ Upstream commit dd72e6c3cdea05cad24e99710939086f7a113fb5 ]
    
    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>
    [ moved both pm_runtime_mark_last_busy() and pm_runtime_put_autosuspend() before the error check instead of just pm_runtime_put_autosuspend() ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    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>

 
indirect_call_wrapper: do not reevaluate function pointer [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Feb 27 17:26:03 2026 +0000

    indirect_call_wrapper: do not reevaluate function pointer
    
    [ Upstream commit 710f5c76580306cdb9ec51fac8fcf6a8faff7821 ]
    
    We have an increasing number of READ_ONCE(xxx->function)
    combined with INDIRECT_CALL_[1234]() helpers.
    
    Unfortunately this forces INDIRECT_CALL_[1234]() to read
    xxx->function many times, which is not what we wanted.
    
    Fix these macros so that xxx->function value is not reloaded.
    
    $ scripts/bloat-o-meter -t vmlinux.0 vmlinux
    add/remove: 0/0 grow/shrink: 1/65 up/down: 122/-1084 (-962)
    Function                                     old     new   delta
    ip_push_pending_frames                        59     181    +122
    ip6_finish_output                            687     681      -6
    __udp_enqueue_schedule_skb                  1078    1072      -6
    ioam6_output                                2319    2312      -7
    xfrm4_rcv_encap_finish2                       64      56      -8
    xfrm4_output                                 297     289      -8
    vrf_ip_local_out                             278     270      -8
    vrf_ip6_local_out                            278     270      -8
    seg6_input_finish                             64      56      -8
    rpl_output                                   700     692      -8
    ipmr_forward_finish                          124     116      -8
    ip_forward_finish                            143     135      -8
    ip6mr_forward2_finish                        100      92      -8
    ip6_forward_finish                            73      65      -8
    input_action_end_bpf                        1091    1083      -8
    dst_input                                     52      44      -8
    __xfrm6_output                               801     793      -8
    __xfrm4_output                                83      75      -8
    bpf_input                                    500     491      -9
    __tcp_check_space                            530     521      -9
    input_action_end_dt6                         291     280     -11
    vti6_tnl_xmit                               1634    1622     -12
    bpf_xmit                                    1203    1191     -12
    rpl_input                                    497     483     -14
    rawv6_send_hdrinc                           1355    1341     -14
    ndisc_send_skb                              1030    1016     -14
    ipv6_srh_rcv                                1377    1363     -14
    ip_send_unicast_reply                       1253    1239     -14
    ip_rcv_finish                                226     212     -14
    ip6_rcv_finish                               300     286     -14
    input_action_end_x_core                      205     191     -14
    input_action_end_x                           355     341     -14
    input_action_end_t                           205     191     -14
    input_action_end_dx6_finish                  127     113     -14
    input_action_end_dx4_finish                  373     359     -14
    input_action_end_dt4                         426     412     -14
    input_action_end_core                        186     172     -14
    input_action_end_b6_encap                    292     278     -14
    input_action_end_b6                          198     184     -14
    igmp6_send                                  1332    1318     -14
    ip_sublist_rcv                               864     848     -16
    ip6_sublist_rcv                             1091    1075     -16
    ipv6_rpl_srh_rcv                            1937    1920     -17
    xfrm_policy_queue_process                   1246    1228     -18
    seg6_output_core                             903     885     -18
    mld_sendpack                                 856     836     -20
    NF_HOOK                                      756     736     -20
    vti_tunnel_xmit                             1447    1426     -21
    input_action_end_dx6                         664     642     -22
    input_action_end                            1502    1480     -22
    sock_sendmsg_nosec                           134     111     -23
    ip6mr_forward2                               388     364     -24
    sock_recvmsg_nosec                           134     109     -25
    seg6_input_core                              836     810     -26
    ip_send_skb                                  172     146     -26
    ip_local_out                                 140     114     -26
    ip6_local_out                                140     114     -26
    __sock_sendmsg                               162     136     -26
    __ip_queue_xmit                             1196    1170     -26
    __ip_finish_output                           405     379     -26
    ipmr_queue_fwd_xmit                          373     346     -27
    sock_recvmsg                                 173     145     -28
    ip6_xmit                                    1635    1607     -28
    xfrm_output_resume                          1418    1389     -29
    ip_build_and_send_pkt                        625     591     -34
    dst_output                                   504     432     -72
    Total: Before=25217686, After=25216724, chg -0.00%
    
    Fixes: 283c16a2dfd3 ("indirect call wrappers: helpers to speed-up indirect calls of builtin")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
    Link: https://patch.msgid.link/20260227172603.1700433-1-edumazet@google.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.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>

 
iomap: allocate s_dio_done_wq for async reads as well [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Fri Feb 27 11:30:18 2026 +0800

    iomap: allocate s_dio_done_wq for async reads as well
    
    commit 7fd8720dff2d9c70cf5a1a13b7513af01952ec02 upstream.
    
    Since commit 222f2c7c6d14 ("iomap: always run error completions in user
    context"), read error completions are deferred to s_dio_done_wq.  This
    means the workqueue also needs to be allocated for async reads.
    
    Fixes: 222f2c7c6d14 ("iomap: always run error completions in user context")
    Reported-by: syzbot+a2b9a4ed0d61b1efb3f5@syzkaller.appspotmail.com
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Link: https://patch.msgid.link/20251124140013.902853-1-hch@lst.de
    Tested-by: syzbot+a2b9a4ed0d61b1efb3f5@syzkaller.appspotmail.com
    Reviewed-by: Dave Chinner <dchinner@redhat.com>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Chen Yu <xnguchen@sina.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iomap: reject delalloc mappings during writeback [+ + +]
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Tue Mar 17 20:46:03 2026 -0400

    iomap: reject delalloc mappings during writeback
    
    [ Upstream commit d320f160aa5ff36cdf83c645cca52b615e866e32 ]
    
    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>
    [ no ioend.c ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
iommu/vt-d: Fix intel iommu iotlb sync hardlockup and retry [+ + +]
Author: Guanghui Feng <guanghuifeng@linux.alibaba.com>
Date:   Mon Mar 16 15:16:39 2026 +0800

    iommu/vt-d: Fix intel iommu iotlb sync hardlockup and retry
    
    commit fe89277c9ceb0d6af0aa665bcf24a41d8b1b79cd upstream.
    
    During the qi_check_fault process after an IOMMU ITE event, requests at
    odd-numbered positions in the queue are set to QI_ABORT, only satisfying
    single-request submissions. However, qi_submit_sync now supports multiple
    simultaneous submissions, and can't guarantee that the wait_desc will be
    at an odd-numbered position. Therefore, if an item times out, IOMMU can't
    re-initiate the request, resulting in an infinite polling wait.
    
    This modifies the process by setting the status of all requests already
    fetched by IOMMU and recorded as QI_IN_USE status (including wait_desc
    requests) to QI_ABORT, thus enabling multiple requests to be resubmitted.
    
    Fixes: 8a1d82462540 ("iommu/vt-d: Multiple descriptors per qi_submit_sync()")
    Cc: stable@vger.kernel.org
    Signed-off-by: Guanghui Feng <guanghuifeng@linux.alibaba.com>
    Tested-by: Shuai Xue <xueshuai@linux.alibaba.com>
    Reviewed-by: Shuai Xue <xueshuai@linux.alibaba.com>
    Reviewed-by: Samiullah Khawaja <skhawaja@google.com>
    Link: https://lore.kernel.org/r/20260306101516.3885775-1-guanghuifeng@linux.alibaba.com
    Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
    Fixes: 8a1d82462540 ("iommu/vt-d: Multiple descriptors per  qi_submit_sync()")
    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ipv6: fix NULL pointer deref in ip6_rt_get_dev_rcu() [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Sun Mar 1 11:45:48 2026 -0800

    ipv6: fix NULL pointer deref in ip6_rt_get_dev_rcu()
    
    [ Upstream commit 2ffb4f5c2ccb2fa1c049dd11899aee7967deef5a ]
    
    l3mdev_master_dev_rcu() can return NULL when the slave device is being
    un-slaved from a VRF. All other callers deal with this, but we lost
    the fallback to loopback in ip6_rt_pcpu_alloc() -> ip6_rt_get_dev_rcu()
    with commit 4832c30d5458 ("net: ipv6: put host and anycast routes on
    device with address").
    
      KASAN: null-ptr-deref in range [0x0000000000000108-0x000000000000010f]
      RIP: 0010:ip6_rt_pcpu_alloc (net/ipv6/route.c:1418)
      Call Trace:
       ip6_pol_route (net/ipv6/route.c:2318)
       fib6_rule_lookup (net/ipv6/fib6_rules.c:115)
       ip6_route_output_flags (net/ipv6/route.c:2607)
       vrf_process_v6_outbound (drivers/net/vrf.c:437)
    
    I was tempted to rework the un-slaving code to clear the flag first
    and insert synchronize_rcu() before we remove the upper. But looks like
    the explicit fallback to loopback_dev is an established pattern.
    And I guess avoiding the synchronize_rcu() is nice, too.
    
    Fixes: 4832c30d5458 ("net: ipv6: put host and anycast routes on device with address")
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Link: https://patch.msgid.link/20260301194548.927324-1-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv6: use RCU in ip6_xmit() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Aug 28 19:58:18 2025 +0000

    ipv6: use RCU in ip6_xmit()
    
    commit 9085e56501d93af9f2d7bd16f7fcfacdde47b99c upstream.
    
    Use RCU in ip6_xmit() in order to use dst_dev_rcu() to prevent
    possible UAF.
    
    Fixes: 4a6ce2b6f2ec ("net: introduce a new function dst_dev_put()")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Link: https://patch.msgid.link/20250828195823.3958522-4-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Keerthana K <keerthana.kalyanasundaram@broadcom.com>
    Signed-off-by: Shivani Agarwal <shivani.agarwal@broadcom.com>

 
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/sifive-plic: Fix frozen interrupt due to affinity setting [+ + +]
Author: Nam Cao <namcao@linutronix.de>
Date:   Thu Feb 12 12:41:25 2026 +0100

    irqchip/sifive-plic: Fix frozen interrupt due to affinity setting
    
    [ Upstream commit 1072020685f4b81f6efad3b412cdae0bd62bb043 ]
    
    PLIC ignores interrupt completion message for disabled interrupt, explained
    by the specification:
    
        The PLIC signals it has completed executing an interrupt handler by
        writing the interrupt ID it received from the claim to the
        claim/complete register. The PLIC does not check whether the completion
        ID is the same as the last claim ID for that target. If the completion
        ID does not match an interrupt source that is currently enabled for
        the target, the completion is silently ignored.
    
    This caused problems in the past, because an interrupt can be disabled
    while still being handled and plic_irq_eoi() had no effect. That was fixed
    by checking if the interrupt is disabled, and if so enable it, before
    sending the completion message. That check is done with irqd_irq_disabled().
    
    However, that is not sufficient because the enable bit for the handling
    hart can be zero despite irqd_irq_disabled(d) being false. This can happen
    when affinity setting is changed while a hart is still handling the
    interrupt.
    
    This problem is easily reproducible by dumping a large file to uart (which
    generates lots of interrupts) and at the same time keep changing the uart
    interrupt's affinity setting. The uart port becomes frozen almost
    instantaneously.
    
    Fix this by checking PLIC's enable bit instead of irqd_irq_disabled().
    
    Fixes: cc9f04f9a84f ("irqchip/sifive-plic: Implement irq_set_affinity() for SMP host")
    Signed-off-by: Nam Cao <namcao@linutronix.de>
    Signed-off-by: Thomas Gleixner <tglx@kernel.org>
    Link: https://patch.msgid.link/20260212114125.3148067-1-namcao@linutronix.de
    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>

 
kbuild: Leave objtool binary around with 'make clean' [+ + +]
Author: Nathan Chancellor <nathan@kernel.org>
Date:   Mon Mar 9 14:55:35 2026 -0400

    kbuild: Leave objtool binary around with 'make clean'
    
    [ Upstream commit fdb12c8a24a453bdd6759979b6ef1e04ebd4beb4 ]
    
    The difference between 'make clean' and 'make mrproper' is documented in
    'make help' as:
    
      clean     - Remove most generated files but keep the config and
                  enough build support to build external modules
      mrproper  - Remove all generated files + config + various backup files
    
    After commit 68b4fe32d737 ("kbuild: Add objtool to top-level clean
    target"), running 'make clean' then attempting to build an external
    module with the resulting build directory fails with
    
      $ make ARCH=x86_64 O=build clean
    
      $ make -C build M=... MO=...
      ...
      /bin/sh: line 1: .../build/tools/objtool/objtool: No such file or directory
    
    as 'make clean' removes the objtool binary.
    
    Split the objtool clean target into mrproper and clean like Kbuild does
    and remove all generated artifacts with 'make clean' except for the
    objtool binary, which is removed with 'make mrproper'. To avoid a small
    race when running the objtool clean target through both objtool_mrproper
    and objtool_clean when running 'make mrproper', modify objtool's clean
    up find command to avoid using find's '-delete' command by piping the
    files into 'xargs rm -f' like the rest of Kbuild does.
    
    Cc: stable@vger.kernel.org
    Fixes: 68b4fe32d737 ("kbuild: Add objtool to top-level clean target")
    Reported-by: Michal Suchanek <msuchanek@suse.de>
    Closes: https://lore.kernel.org/20260225112633.6123-1-msuchanek@suse.de/
    Reported-by: Rainer Fiebig <jrf@mailbox.org>
    Closes: https://lore.kernel.org/62d12399-76e5-3d40-126a-7490b4795b17@mailbox.org/
    Acked-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Nicolas Schier <nsc@kernel.org>
    Tested-by: Nicolas Schier <nsc@kernel.org>
    Link: https://patch.msgid.link/20260227-avoid-objtool-binary-removal-clean-v1-1-122f3e55eae9@kernel.org
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    [ Context ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    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 goto [+ + +]
Author: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Date:   Thu Mar 19 09:52:11 2026 -0400

    kprobes: Remove unneeded goto
    
    [ Upstream commit 5e5b8b49335971b68b54afeb0e7ded004945af07 ]
    
    Remove unneeded gotos. Since the labels referred by these gotos have
    only one reference for each, we can replace those gotos with the
    referred code.
    
    Link: https://lore.kernel.org/all/173371211203.480397.13988907319659165160.stgit@devnote2/
    
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Stable-dep-of: 5ef268cb7a0a ("kprobes: Remove unneeded warnings from __arm_kprobe_ftrace()")
    Signed-off-by: Sasha Levin <sashal@kernel.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:   Thu Mar 19 09:52:12 2026 -0400

    kprobes: Remove unneeded warnings from __arm_kprobe_ftrace()
    
    [ Upstream commit 5ef268cb7a0aac55521fd9881f1939fa94a8988e ]
    
    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: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ksmbd: call ksmbd_vfs_kern_path_end_removing() on some error paths [+ + +]
Author: Fedor Pchelkin <pchelkin@ispras.ru>
Date:   Tue Feb 24 21:20:17 2026 -0500

    ksmbd: call ksmbd_vfs_kern_path_end_removing() on some error paths
    
    [ Upstream commit a09dc10d1353f0e92c21eae2a79af1c2b1ddcde8 ]
    
    There are two places where ksmbd_vfs_kern_path_end_removing() needs to be
    called in order to balance what the corresponding successful call to
    ksmbd_vfs_kern_path_start_removing() has done, i.e. drop inode locks and
    put the taken references.  Otherwise there might be potential deadlocks
    and unbalanced locks which are caught like:
    
    BUG: workqueue leaked lock or atomic: kworker/5:21/0x00000000/7596
         last function: handle_ksmbd_work
    2 locks held by kworker/5:21/7596:
     #0: ffff8881051ae448 (sb_writers#3){.+.+}-{0:0}, at: ksmbd_vfs_kern_path_locked+0x142/0x660
     #1: ffff888130e966c0 (&type->i_mutex_dir_key#3/1){+.+.}-{4:4}, at: ksmbd_vfs_kern_path_locked+0x17d/0x660
    CPU: 5 PID: 7596 Comm: kworker/5:21 Not tainted 6.1.162-00456-gc29b353f383b #138
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.17.0-debian-1.17.0-1 04/01/2014
    Workqueue: ksmbd-io handle_ksmbd_work
    Call Trace:
     <TASK>
     dump_stack_lvl+0x44/0x5b
     process_one_work.cold+0x57/0x5c
     worker_thread+0x82/0x600
     kthread+0x153/0x190
     ret_from_fork+0x22/0x30
     </TASK>
    
    Found by Linux Verification Center (linuxtesting.org).
    
    Fixes: d5fc1400a34b ("smb/server: avoid deadlock when linking with ReplaceIfExists")
    Cc: stable@vger.kernel.org
    Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    [ ksmbd_vfs_kern_path_end_removing() call -> ksmbd_vfs_kern_path_unlock() ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ksmbd: Compare MACs in constant time [+ + +]
Author: Eric Biggers <ebiggers@kernel.org>
Date:   Tue Mar 10 12:52:53 2026 -0700

    ksmbd: Compare MACs in constant time
    
    commit c5794709bc9105935dbedef8b9cf9c06f2b559fa upstream.
    
    To prevent timing attacks, MAC comparisons need to be constant-time.
    Replace the memcmp() with the correct function, crypto_memneq().
    
    Fixes: e2f34481b24d ("cifsd: add server-side procedures for SMB3")
    Cc: stable@vger.kernel.org
    Signed-off-by: Eric Biggers <ebiggers@kernel.org>
    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: Don't log keys in SMB3 signing and encryption key generation [+ + +]
Author: Thorsten Blum <thorsten.blum@linux.dev>
Date:   Wed Mar 18 10:41:50 2026 -0400

    ksmbd: Don't log keys in SMB3 signing and encryption key generation
    
    [ Upstream commit 441336115df26b966575de56daf7107ed474faed ]
    
    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>
    [ Context ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    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 durable v2 replay of active file handles [+ + +]
Author: Hyunwoo Kim <imv4bel@gmail.com>
Date:   Thu Mar 12 17:15:51 2026 +0900

    ksmbd: fix use-after-free in durable v2 replay of active file handles
    
    [ Upstream commit b425e4d0eb321a1116ddbf39636333181675d8f4 ]
    
    parse_durable_handle_context() unconditionally assigns dh_info->fp->conn
    to the current connection when handling a DURABLE_REQ_V2 context with
    SMB2_FLAGS_REPLAY_OPERATION. ksmbd_lookup_fd_cguid() does not filter by
    fp->conn, so it returns file handles that are already actively connected.
    The unconditional overwrite replaces fp->conn, and when the overwriting
    connection is subsequently freed, __ksmbd_close_fd() dereferences the
    stale fp->conn via spin_lock(&fp->conn->llist_lock), causing a
    use-after-free.
    
    KASAN report:
    
    [    7.349357] ==================================================================
    [    7.349607] BUG: KASAN: slab-use-after-free in _raw_spin_lock+0x75/0xe0
    [    7.349811] Write of size 4 at addr ffff8881056ac18c by task kworker/1:2/108
    [    7.350010]
    [    7.350064] CPU: 1 UID: 0 PID: 108 Comm: kworker/1:2 Not tainted 7.0.0-rc3+ #58 PREEMPTLAZY
    [    7.350068] Hardware name: QEMU Ubuntu 24.04 PC v2 (i440FX + PIIX, arch_caps fix, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    [    7.350070] Workqueue: ksmbd-io handle_ksmbd_work
    [    7.350083] Call Trace:
    [    7.350087]  <TASK>
    [    7.350087]  dump_stack_lvl+0x64/0x80
    [    7.350094]  print_report+0xce/0x660
    [    7.350100]  ? __pfx__raw_spin_lock_irqsave+0x10/0x10
    [    7.350101]  ? __pfx___mod_timer+0x10/0x10
    [    7.350106]  ? _raw_spin_lock+0x75/0xe0
    [    7.350108]  kasan_report+0xce/0x100
    [    7.350109]  ? _raw_spin_lock+0x75/0xe0
    [    7.350114]  kasan_check_range+0x105/0x1b0
    [    7.350116]  _raw_spin_lock+0x75/0xe0
    [    7.350118]  ? __pfx__raw_spin_lock+0x10/0x10
    [    7.350119]  ? __call_rcu_common.constprop.0+0x25e/0x780
    [    7.350125]  ? close_id_del_oplock+0x2cc/0x4e0
    [    7.350128]  __ksmbd_close_fd+0x27f/0xaf0
    [    7.350131]  ksmbd_close_fd+0x135/0x1b0
    [    7.350133]  smb2_close+0xb19/0x15b0
    [    7.350142]  ? __pfx_smb2_close+0x10/0x10
    [    7.350143]  ? xas_load+0x18/0x270
    [    7.350146]  ? _raw_spin_lock+0x84/0xe0
    [    7.350148]  ? __pfx__raw_spin_lock+0x10/0x10
    [    7.350150]  ? _raw_spin_unlock+0xe/0x30
    [    7.350151]  ? ksmbd_smb2_check_message+0xeb2/0x24c0
    [    7.350153]  ? ksmbd_tree_conn_lookup+0xcd/0xf0
    [    7.350154]  handle_ksmbd_work+0x40f/0x1080
    [    7.350156]  process_one_work+0x5fa/0xef0
    [    7.350162]  ? assign_work+0x122/0x3e0
    [    7.350163]  worker_thread+0x54b/0xf70
    [    7.350165]  ? __pfx_worker_thread+0x10/0x10
    [    7.350166]  kthread+0x346/0x470
    [    7.350170]  ? recalc_sigpending+0x19b/0x230
    [    7.350176]  ? __pfx_kthread+0x10/0x10
    [    7.350178]  ret_from_fork+0x4fb/0x6c0
    [    7.350183]  ? __pfx_ret_from_fork+0x10/0x10
    [    7.350185]  ? __switch_to+0x36c/0xbe0
    [    7.350188]  ? __pfx_kthread+0x10/0x10
    [    7.350190]  ret_from_fork_asm+0x1a/0x30
    [    7.350197]  </TASK>
    [    7.350197]
    [    7.355160] Allocated by task 123:
    [    7.355261]  kasan_save_stack+0x33/0x60
    [    7.355373]  kasan_save_track+0x14/0x30
    [    7.355484]  __kasan_kmalloc+0x8f/0xa0
    [    7.355593]  ksmbd_conn_alloc+0x44/0x6d0
    [    7.355711]  ksmbd_kthread_fn+0x243/0xd70
    [    7.355839]  kthread+0x346/0x470
    [    7.355942]  ret_from_fork+0x4fb/0x6c0
    [    7.356051]  ret_from_fork_asm+0x1a/0x30
    [    7.356164]
    [    7.356214] Freed by task 134:
    [    7.356305]  kasan_save_stack+0x33/0x60
    [    7.356416]  kasan_save_track+0x14/0x30
    [    7.356527]  kasan_save_free_info+0x3b/0x60
    [    7.356646]  __kasan_slab_free+0x43/0x70
    [    7.356761]  kfree+0x1ca/0x430
    [    7.356862]  ksmbd_tcp_disconnect+0x59/0xe0
    [    7.356993]  ksmbd_conn_handler_loop+0x77e/0xd40
    [    7.357138]  kthread+0x346/0x470
    [    7.357240]  ret_from_fork+0x4fb/0x6c0
    [    7.357350]  ret_from_fork_asm+0x1a/0x30
    [    7.357463]
    [    7.357513] The buggy address belongs to the object at ffff8881056ac000
    [    7.357513]  which belongs to the cache kmalloc-1k of size 1024
    [    7.357857] The buggy address is located 396 bytes inside of
    [    7.357857]  freed 1024-byte region [ffff8881056ac000, ffff8881056ac400)
    
    Fix by removing the unconditional fp->conn assignment and rejecting the
    replay when fp->conn is non-NULL. This is consistent with
    ksmbd_lookup_durable_fd(), which also rejects file handles with a
    non-NULL fp->conn. For disconnected file handles (fp->conn == NULL),
    ksmbd_reopen_durable_fd() handles setting fp->conn.
    
    Fixes: c8efcc786146 ("ksmbd: add support for durable handles v1/v2")
    Signed-off-by: Hyunwoo Kim <imv4bel@gmail.com>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.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>

ksmbd: fix use-after-free of share_conf in compound request [+ + +]
Author: Hyunwoo Kim <imv4bel@gmail.com>
Date:   Thu Mar 12 17:17:02 2026 +0900

    ksmbd: fix use-after-free of share_conf in compound request
    
    [ Upstream commit c33615f995aee80657b9fdfbc4ee7f49c2bd733d ]
    
    smb2_get_ksmbd_tcon() reuses work->tcon in compound requests without
    validating tcon->t_state. ksmbd_tree_conn_lookup() checks t_state ==
    TREE_CONNECTED on the initial lookup path, but the compound reuse path
    bypasses this check entirely.
    
    If a prior command in the compound (SMB2_TREE_DISCONNECT) sets t_state
    to TREE_DISCONNECTED and frees share_conf via ksmbd_share_config_put(),
    subsequent commands dereference the freed share_conf through
    work->tcon->share_conf.
    
    KASAN report:
    
    [    4.144653] ==================================================================
    [    4.145059] BUG: KASAN: slab-use-after-free in smb2_write+0xc74/0xe70
    [    4.145415] Read of size 4 at addr ffff88810430c194 by task kworker/1:1/44
    [    4.145772]
    [    4.145867] CPU: 1 UID: 0 PID: 44 Comm: kworker/1:1 Not tainted 7.0.0-rc3+ #60 PREEMPTLAZY
    [    4.145871] Hardware name: QEMU Ubuntu 24.04 PC v2 (i440FX + PIIX, arch_caps fix, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    [    4.145875] Workqueue: ksmbd-io handle_ksmbd_work
    [    4.145888] Call Trace:
    [    4.145892]  <TASK>
    [    4.145894]  dump_stack_lvl+0x64/0x80
    [    4.145910]  print_report+0xce/0x660
    [    4.145919]  ? __pfx__raw_spin_lock_irqsave+0x10/0x10
    [    4.145928]  ? smb2_write+0xc74/0xe70
    [    4.145931]  kasan_report+0xce/0x100
    [    4.145934]  ? smb2_write+0xc74/0xe70
    [    4.145937]  smb2_write+0xc74/0xe70
    [    4.145939]  ? __pfx_smb2_write+0x10/0x10
    [    4.145942]  ? _raw_spin_unlock+0xe/0x30
    [    4.145945]  ? ksmbd_smb2_check_message+0xeb2/0x24c0
    [    4.145948]  ? smb2_tree_disconnect+0x31c/0x480
    [    4.145951]  handle_ksmbd_work+0x40f/0x1080
    [    4.145953]  process_one_work+0x5fa/0xef0
    [    4.145962]  ? assign_work+0x122/0x3e0
    [    4.145964]  worker_thread+0x54b/0xf70
    [    4.145967]  ? __pfx_worker_thread+0x10/0x10
    [    4.145970]  kthread+0x346/0x470
    [    4.145976]  ? recalc_sigpending+0x19b/0x230
    [    4.145980]  ? __pfx_kthread+0x10/0x10
    [    4.145984]  ret_from_fork+0x4fb/0x6c0
    [    4.145992]  ? __pfx_ret_from_fork+0x10/0x10
    [    4.145995]  ? __switch_to+0x36c/0xbe0
    [    4.145999]  ? __pfx_kthread+0x10/0x10
    [    4.146003]  ret_from_fork_asm+0x1a/0x30
    [    4.146013]  </TASK>
    [    4.146014]
    [    4.149858] Allocated by task 44:
    [    4.149953]  kasan_save_stack+0x33/0x60
    [    4.150061]  kasan_save_track+0x14/0x30
    [    4.150169]  __kasan_kmalloc+0x8f/0xa0
    [    4.150274]  ksmbd_share_config_get+0x1dd/0xdd0
    [    4.150401]  ksmbd_tree_conn_connect+0x7e/0x600
    [    4.150529]  smb2_tree_connect+0x2e6/0x1000
    [    4.150645]  handle_ksmbd_work+0x40f/0x1080
    [    4.150761]  process_one_work+0x5fa/0xef0
    [    4.150873]  worker_thread+0x54b/0xf70
    [    4.150978]  kthread+0x346/0x470
    [    4.151071]  ret_from_fork+0x4fb/0x6c0
    [    4.151176]  ret_from_fork_asm+0x1a/0x30
    [    4.151286]
    [    4.151332] Freed by task 44:
    [    4.151418]  kasan_save_stack+0x33/0x60
    [    4.151526]  kasan_save_track+0x14/0x30
    [    4.151634]  kasan_save_free_info+0x3b/0x60
    [    4.151751]  __kasan_slab_free+0x43/0x70
    [    4.151861]  kfree+0x1ca/0x430
    [    4.151952]  __ksmbd_tree_conn_disconnect+0xc8/0x190
    [    4.152088]  smb2_tree_disconnect+0x1cd/0x480
    [    4.152211]  handle_ksmbd_work+0x40f/0x1080
    [    4.152326]  process_one_work+0x5fa/0xef0
    [    4.152438]  worker_thread+0x54b/0xf70
    [    4.152545]  kthread+0x346/0x470
    [    4.152638]  ret_from_fork+0x4fb/0x6c0
    [    4.152743]  ret_from_fork_asm+0x1a/0x30
    [    4.152853]
    [    4.152900] The buggy address belongs to the object at ffff88810430c180
    [    4.152900]  which belongs to the cache kmalloc-96 of size 96
    [    4.153226] The buggy address is located 20 bytes inside of
    [    4.153226]  freed 96-byte region [ffff88810430c180, ffff88810430c1e0)
    [    4.153549]
    [    4.153596] The buggy address belongs to the physical page:
    [    4.153750] page: refcount:0 mapcount:0 mapping:0000000000000000 index:0xffff88810430ce80 pfn:0x10430c
    [    4.154000] flags: 0x100000000000200(workingset|node=0|zone=2)
    [    4.154160] page_type: f5(slab)
    [    4.154251] raw: 0100000000000200 ffff888100041280 ffff888100040110 ffff888100040110
    [    4.154461] raw: ffff88810430ce80 0000000800200009 00000000f5000000 0000000000000000
    [    4.154668] page dumped because: kasan: bad access detected
    [    4.154820]
    [    4.154866] Memory state around the buggy address:
    [    4.155002]  ffff88810430c080: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [    4.155196]  ffff88810430c100: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [    4.155391] >ffff88810430c180: fa fb fb fb fb fb fb fb fb fb fb fb fc fc fc fc
    [    4.155587]                          ^
    [    4.155693]  ffff88810430c200: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [    4.155891]  ffff88810430c280: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [    4.156087] ==================================================================
    
    Add the same t_state validation to the compound reuse path, consistent
    with ksmbd_tree_conn_lookup().
    
    Fixes: 5005bcb42191 ("ksmbd: validate session id and tree id in the compound request")
    Signed-off-by: Hyunwoo Kim <imv4bel@gmail.com>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ksmbd: unset conn->binding on failed binding request [+ + +]
Author: Namjae Jeon <linkinjeon@kernel.org>
Date:   Fri Mar 13 10:00:58 2026 +0900

    ksmbd: unset conn->binding on failed binding request
    
    commit 282343cf8a4a5a3603b1cb0e17a7083e4a593b03 upstream.
    
    When a multichannel SMB2_SESSION_SETUP request with
    SMB2_SESSION_REQ_FLAG_BINDING fails ksmbd sets conn->binding = true
    but never clears it on the error path. This leaves the connection in
    a binding state where all subsequent ksmbd_session_lookup_all() calls
    fall back to the global sessions table. This fix it by clearing
    conn->binding = false in the error path.
    
    Cc: stable@vger.kernel.org
    Reported-by: Hyunwoo Kim <imv4bel@gmail.com>
    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>

 
kunit: tool: copy caller args in run_kernel to prevent mutation [+ + +]
Author: Shuvam Pandey <shuvampandey1@gmail.com>
Date:   Thu Feb 26 21:14:10 2026 +0545

    kunit: tool: copy caller args in run_kernel to prevent mutation
    
    [ Upstream commit 40804c4974b8df2adab72f6475d343eaff72b7f6 ]
    
    run_kernel() appended KUnit flags directly to the caller-provided args
    list. When exec_tests() calls run_kernel() repeatedly (e.g. with
    --run_isolated), each call mutated the same list, causing later runs
    to inherit stale filter_glob values and duplicate kunit.enable flags.
    
    Fix this by copying args at the start of run_kernel(). Add a regression
    test that calls run_kernel() twice with the same list and verifies the
    original remains unchanged.
    
    Fixes: ff9e09a3762f ("kunit: tool: support running each suite/test separately")
    Signed-off-by: Shuvam Pandey <shuvampandey1@gmail.com>
    Reviewed-by: David Gow <david@davidgow.net>
    Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
KVM: SVM: Add a helper to look up the max physical ID for AVIC [+ + +]
Author: Naveen N Rao <naveen@kernel.org>
Date:   Mon Mar 16 15:36:42 2026 -0400

    KVM: SVM: Add a helper to look up the max physical ID for AVIC
    
    [ Upstream commit f2f6e67a56dc88fea7e9b10c4e79bb01d97386b7 ]
    
    To help with a future change, add a helper to look up the maximum
    physical ID depending on the vCPU AVIC mode. No functional change
    intended.
    
    Suggested-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Naveen N Rao (AMD) <naveen@kernel.org>
    Link: https://lore.kernel.org/r/0ab9bf5e20a3463a4aa3a5ea9bbbac66beedf1d1.1757009416.git.naveen@kernel.org
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Stable-dep-of: 87d0f901a9bd ("KVM: SVM: Set/clear CR8 write interception when AVIC is (de)activated")
    Signed-off-by: Sasha Levin <sashal@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: Limit AVIC physical max index based on configured max_vcpu_ids [+ + +]
Author: Naveen N Rao <naveen@kernel.org>
Date:   Mon Mar 16 15:36:41 2026 -0400

    KVM: SVM: Limit AVIC physical max index based on configured max_vcpu_ids
    
    [ Upstream commit 574ef752d4aea04134bc121294d717f4422c2755 ]
    
    KVM allows VMMs to specify the maximum possible APIC ID for a virtual
    machine through KVM_CAP_MAX_VCPU_ID capability so as to limit data
    structures related to APIC/x2APIC. Utilize the same to set the AVIC
    physical max index in the VMCB, similar to VMX. This helps hardware
    limit the number of entries to be scanned in the physical APIC ID table
    speeding up IPI broadcasts for virtual machines with smaller number of
    vCPUs.
    
    Unlike VMX, SVM AVIC requires a single page to be allocated for the
    Physical APIC ID table and the Logical APIC ID table, so retain the
    existing approach of allocating those during VM init.
    
    Signed-off-by: Naveen N Rao (AMD) <naveen@kernel.org>
    Link: https://lore.kernel.org/r/adb07ccdb3394cd79cb372ba6bcc69a4e4d4ef54.1757009416.git.naveen@kernel.org
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Stable-dep-of: 87d0f901a9bd ("KVM: SVM: Set/clear CR8 write interception when AVIC is (de)activated")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    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:   Mon Mar 16 15:36:43 2026 -0400

    KVM: SVM: Set/clear CR8 write interception when AVIC is (de)activated
    
    [ Upstream commit 87d0f901a9bd8ae6be57249c737f20ac0cace93d ]
    
    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: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: x86: Fix KVM_GET_MSRS stack info leak [+ + +]
Author: Mathias Krause <minipli@grsecurity.net>
Date:   Sat Feb 3 13:45:20 2024 +0100

    KVM: x86: Fix KVM_GET_MSRS stack info leak
    
    [ Upstream commit 3376ca3f1a2075eaa23c5576c47d04d7e8a4adda ]
    
    Commit 6abe9c1386e5 ("KVM: X86: Move ignore_msrs handling upper the
    stack") changed the 'ignore_msrs' handling, including sanitizing return
    values to the caller. This was fine until commit 12bc2132b15e ("KVM:
    X86: Do the same ignore_msrs check for feature msrs") which allowed
    non-existing feature MSRs to be ignored, i.e. to not generate an error
    on the ioctl() level. It even tried to preserve the sanitization of the
    return value. However, the logic is flawed, as '*data' will be
    overwritten again with the uninitialized stack value of msr.data.
    
    Fix this by simplifying the logic and always initializing msr.data,
    vanishing the need for an additional error exit path.
    
    Fixes: 12bc2132b15e ("KVM: X86: Do the same ignore_msrs check for feature msrs")
    Signed-off-by: Mathias Krause <minipli@grsecurity.net>
    Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
    Link: https://lore.kernel.org/r/20240203124522.592778-2-minipli@grsecurity.net
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Stable-dep-of: 5bb9ac186512 ("KVM: x86: Return "unsupported" instead of "invalid" on access to unsupported PV MSR")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

KVM: x86: Ignore -EBUSY when checking nested events from vcpu_block() [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Thu Jan 8 19:06:57 2026 -0800

    KVM: x86: Ignore -EBUSY when checking nested events from vcpu_block()
    
    [ Upstream commit ead63640d4e72e6f6d464f4e31f7fecb79af8869 ]
    
    Ignore -EBUSY when checking nested events after exiting a blocking state
    while L2 is active, as exiting to userspace will generate a spurious
    userspace exit, usually with KVM_EXIT_UNKNOWN, and likely lead to the VM's
    demise.  Continuing with the wakeup isn't perfect either, as *something*
    has gone sideways if a vCPU is awakened in L2 with an injected event (or
    worse, a nested run pending), but continuing on gives the VM a decent
    chance of surviving without any major side effects.
    
    As explained in the Fixes commits, it _should_ be impossible for a vCPU to
    be put into a blocking state with an already-injected event (exception,
    IRQ, or NMI).  Unfortunately, userspace can stuff MP_STATE and/or injected
    events, and thus put the vCPU into what should be an impossible state.
    
    Don't bother trying to preserve the WARN, e.g. with an anti-syzkaller
    Kconfig, as WARNs can (hopefully) be added in paths where _KVM_ would be
    violating x86 architecture, e.g. by WARNing if KVM attempts to inject an
    exception or interrupt while the vCPU isn't running.
    
    Cc: Alessandro Ratti <alessandro@0x65c.net>
    Cc: stable@vger.kernel.org
    Fixes: 26844fee6ade ("KVM: x86: never write to memory from kvm_vcpu_check_block()")
    Fixes: 45405155d876 ("KVM: x86: WARN if a vCPU gets a valid wakeup that KVM can't yet inject")
    Link: https://syzkaller.appspot.com/text?tag=ReproC&x=10d4261a580000
    Reported-by: syzbot+1522459a74d26b0ac33a@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/all/671bc7a7.050a0220.455e8.022a.GAE@google.com
    Link: https://patch.msgid.link/20260109030657.994759-1-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

KVM: x86: Rename KVM_MSR_RET_INVALID to KVM_MSR_RET_UNSUPPORTED [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Fri Aug 2 11:19:28 2024 -0700

    KVM: x86: Rename KVM_MSR_RET_INVALID to KVM_MSR_RET_UNSUPPORTED
    
    [ Upstream commit aaecae7b6a2b19a874a7df0d474f44f3a5b5a74e ]
    
    Rename the "INVALID" internal MSR error return code to "UNSUPPORTED" to
    try and make it more clear that access was denied because the MSR itself
    is unsupported/unknown.  "INVALID" is too ambiguous, as it could just as
    easily mean the value for WRMSR as invalid.
    
    Avoid UNKNOWN and UNIMPLEMENTED, as the error code is used for MSRs that
    _are_ actually implemented by KVM, e.g. if the MSR is unsupported because
    an associated feature flag is not present in guest CPUID.
    
    Opportunistically beef up the comments for the internal MSR error codes.
    
    Link: https://lore.kernel.org/r/20240802181935.292540-4-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Stable-dep-of: 5bb9ac186512 ("KVM: x86: Return "unsupported" instead of "invalid" on access to unsupported PV MSR")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

KVM: x86: Return "unsupported" instead of "invalid" on access to unsupported PV MSR [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Tue Dec 30 12:59:48 2025 -0800

    KVM: x86: Return "unsupported" instead of "invalid" on access to unsupported PV MSR
    
    [ Upstream commit 5bb9ac1865123356337a389af935d3913ee917ed ]
    
    Return KVM_MSR_RET_UNSUPPORTED instead of '1' (which for all intents and
    purposes means "invalid") when rejecting accesses to KVM PV MSRs to adhere
    to KVM's ABI of allowing host reads and writes of '0' to MSRs that are
    advertised to userspace via KVM_GET_MSR_INDEX_LIST, even if the vCPU model
    doesn't support the MSR.
    
    E.g. running a QEMU VM with
    
      -cpu host,-kvmclock,kvm-pv-enforce-cpuid
    
    yields:
    
      qemu: error: failed to set MSR 0x12 to 0x0
      qemu: target/i386/kvm/kvm.c:3301: kvm_buf_set_msrs:
            Assertion `ret == cpu->kvm_msr_buf->nmsrs' failed.
    
    Fixes: 66570e966dd9 ("kvm: x86: only provide PV features if enabled in guest's CPUID")
    Cc: stable@vger.kernel.org
    Reviewed-by: Jim Mattson <jmattson@google.com>
    Link: https://patch.msgid.link/20251230205948.4094097-1-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

KVM: x86: WARN if a vCPU gets a valid wakeup that KVM can't yet inject [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Fri Jun 7 10:26:09 2024 -0700

    KVM: x86: WARN if a vCPU gets a valid wakeup that KVM can't yet inject
    
    [ Upstream commit 45405155d876c326da89162b8173b8cc9ab7ed75 ]
    
    WARN if a blocking vCPU is awakened by a valid wake event that KVM can't
    inject, e.g. because KVM needs to complete a nested VM-enter, or needs to
    re-inject an exception.  For the nested VM-Enter case, KVM is supposed to
    clear "nested_run_pending" if L1 puts L2 into HLT, i.e. entering HLT
    "completes" the nested VM-Enter.  And for already-injected exceptions, it
    should be impossible for the vCPU to be in a blocking state if a VM-Exit
    occurred while an exception was being vectored.
    
    Link: https://lore.kernel.org/r/20240607172609.3205077-7-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Stable-dep-of: ead63640d4e7 ("KVM: x86: Ignore -EBUSY when checking nested events from vcpu_block()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
l2tp: do not use sock_hold() in pppol2tp_session_get_sock() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue Aug 26 13:44:35 2025 +0000

    l2tp: do not use sock_hold() in pppol2tp_session_get_sock()
    
    commit 9b8c88f875c04d4cb9111bd5dd9291c7e9691bf5 upstream.
    
    pppol2tp_session_get_sock() is using RCU, it must be ready
    for sk_refcnt being zero.
    
    Commit ee40fb2e1eb5 ("l2tp: protect sock pointer of
    struct pppol2tp_session with RCU") was correct because it
    had a call_rcu(..., pppol2tp_put_sk) which was later removed in blamed commit.
    
    pppol2tp_recv() can use pppol2tp_session_get_sock() as well.
    
    Fixes: c5cbaef992d6 ("l2tp: refactor ppp socket/session relationship")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: James Chapman <jchapman@katalix.com>
    Reviewed-by: Guillaume Nault <gnault@redhat.com>
    Link: https://patch.msgid.link/20250826134435.1683435-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Qingfang Deng <dqfext@gmail.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: check xbc_init_node() return in override path [+ + +]
Author: Josh Law <objecting@objecting.org>
Date:   Thu Mar 19 08:43:05 2026 +0900

    lib/bootconfig: check xbc_init_node() return in override path
    
    [ Upstream commit bb288d7d869e86d382f35a0e26242c5ccb05ca82 ]
    
    The ':=' override path in xbc_parse_kv() calls xbc_init_node() to
    re-initialize an existing value node but does not check the return
    value. If xbc_init_node() fails (data offset out of range), parsing
    silently continues with stale node data.
    
    Add the missing error check to match the xbc_add_node() call path
    which already checks for failure.
    
    In practice, a bootconfig using ':=' to override a value near the
    32KB data limit could silently retain the old value, meaning a
    security-relevant boot parameter override (e.g., a trace filter or
    debug setting) would not take effect as intended.
    
    Link: https://lore.kernel.org/all/20260318155847.78065-2-objecting@objecting.org/
    
    Fixes: e5efaeb8a8f5 ("bootconfig: Support mixing a value and subkeys under a key")
    Signed-off-by: Josh Law <objecting@objecting.org>
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.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.6.130 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Wed Mar 25 11:06:10 2026 +0100

    Linux 6.6.130
    
    Link: https://lore.kernel.org/r/20260323134533.749096647@linuxfoundation.org
    Tested-by: Brett A C Sheffield <bacs@librecast.net>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Slade Watkins <sr@sladewatkins.com>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Barry K. Nathan <barryn@pobox.com>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
LoongArch: Give more information if kmem access failed [+ + +]
Author: Tiezhu Yang <yangtiezhu@loongson.cn>
Date:   Mon Mar 16 10:36:01 2026 +0800

    LoongArch: Give more information if kmem access failed
    
    commit a47f0754bdd01f971c9715acdbdd3a07515c8f83 upstream.
    
    If memory access such as copy_{from, to}_kernel_nofault() failed, its
    users do not know what happened, so it is very useful to print the
    exception code for such cases. Furthermore, it is better to print the
    caller function to know where is the entry.
    
    Here are the low level call chains:
    
      copy_from_kernel_nofault()
        copy_from_kernel_nofault_loop()
          __get_kernel_nofault()
    
      copy_to_kernel_nofault()
        copy_to_kernel_nofault_loop()
          __put_kernel_nofault()
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mailbox: Allow controller specific mapping using fwnode [+ + +]
Author: Anup Patel <apatel@ventanamicro.com>
Date:   Mon Aug 18 09:39:01 2025 +0530

    mailbox: Allow controller specific mapping using fwnode
    
    [ Upstream commit ba879dfc0574878f3e08f217b2b4fdf845c426c0 ]
    
    Introduce optional fw_node() callback which allows a mailbox controller
    driver to provide controller specific mapping using fwnode.
    
    The Linux OF framework already implements fwnode operations for the
    Linux DD framework so the fw_xlate() callback works fine with device
    tree as well.
    
    Acked-by: Jassi Brar <jassisinghbrar@gmail.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Anup Patel <apatel@ventanamicro.com>
    Link: https://lore.kernel.org/r/20250818040920.272664-6-apatel@ventanamicro.com
    Signed-off-by: Paul Walmsley <pjw@kernel.org>
    Stable-dep-of: fcd7f96c7836 ("mailbox: Prevent out-of-bounds access in fw_mbox_index_xlate()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mailbox: don't protect of_parse_phandle_with_args with con_mutex [+ + +]
Author: Tudor Ambarus <tudor.ambarus@linaro.org>
Date:   Mon Feb 24 08:27:14 2025 +0000

    mailbox: don't protect of_parse_phandle_with_args with con_mutex
    
    [ Upstream commit 8c71c61fc613657d785a3377b4b34484bd978374 ]
    
    There are no concurrency problems if multiple consumers parse the
    phandle, don't gratuiously protect the parsing with the mutex used
    for the controllers list.
    
    Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org>
    Signed-off-by: Jassi Brar <jassisinghbrar@gmail.com>
    Stable-dep-of: fcd7f96c7836 ("mailbox: Prevent out-of-bounds access in fw_mbox_index_xlate()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mailbox: Prevent out-of-bounds access in fw_mbox_index_xlate() [+ + +]
Author: Joonwon Kang <joonwonkang@google.com>
Date:   Wed Nov 26 06:22:50 2025 +0000

    mailbox: Prevent out-of-bounds access in fw_mbox_index_xlate()
    
    [ Upstream commit fcd7f96c783626c07ee3ed75fa3739a8a2052310 ]
    
    Although it is guided that `#mbox-cells` must be at least 1, there are
    many instances of `#mbox-cells = <0>;` in the device tree. If that is
    the case and the corresponding mailbox controller does not provide
    `fw_xlate` and of_xlate` function pointers, `fw_mbox_index_xlate()` will
    be used by default and out-of-bounds accesses could occur due to lack of
    bounds check in that function.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Joonwon Kang <joonwonkang@google.com>
    Signed-off-by: Jassi Brar <jassisinghbrar@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mailbox: remove unused header files [+ + +]
Author: Tudor Ambarus <tudor.ambarus@linaro.org>
Date:   Mon Feb 24 08:27:17 2025 +0000

    mailbox: remove unused header files
    
    [ Upstream commit 4de14ec76b5e67d824896f774b3a23d86a2ebc87 ]
    
    There's nothing used from these header files, remove their inclusion.
    
    Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org>
    Signed-off-by: Jassi Brar <jassisinghbrar@gmail.com>
    Stable-dep-of: fcd7f96c7836 ("mailbox: Prevent out-of-bounds access in fw_mbox_index_xlate()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mailbox: sort headers alphabetically [+ + +]
Author: Tudor Ambarus <tudor.ambarus@linaro.org>
Date:   Mon Feb 24 08:27:15 2025 +0000

    mailbox: sort headers alphabetically
    
    [ Upstream commit db824c1119fc16556a84cb7a771ca6553b3c3a45 ]
    
    Sorting headers alphabetically helps locating duplicates,
    and makes it easier to figure out where to insert new headers.
    
    Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org>
    Signed-off-by: Jassi Brar <jassisinghbrar@gmail.com>
    Stable-dep-of: fcd7f96c7836 ("mailbox: Prevent out-of-bounds access in fw_mbox_index_xlate()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mailbox: Use dev_err when there is error [+ + +]
Author: Peng Fan <peng.fan@nxp.com>
Date:   Fri Apr 11 21:14:09 2025 +0800

    mailbox: Use dev_err when there is error
    
    [ Upstream commit 8da4988b6e645f3eaa590ea16f433583364fd09c ]
    
    Use dev_err to show the error log instead of using dev_dbg.
    
    Signed-off-by: Peng Fan <peng.fan@nxp.com>
    Signed-off-by: Jassi Brar <jassisinghbrar@gmail.com>
    Stable-dep-of: fcd7f96c7836 ("mailbox: Prevent out-of-bounds access in fw_mbox_index_xlate()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mailbox: Use guard/scoped_guard for con_mutex [+ + +]
Author: Peng Fan <peng.fan@nxp.com>
Date:   Fri Apr 11 21:14:13 2025 +0800

    mailbox: Use guard/scoped_guard for con_mutex
    
    [ Upstream commit 16da9a653c5bf5d97fb296420899fe9735aa9c3c ]
    
    Use guard and scoped_guard for con_mutex to simplify code.
    
    Signed-off-by: Peng Fan <peng.fan@nxp.com>
    Signed-off-by: Jassi Brar <jassisinghbrar@gmail.com>
    Stable-dep-of: fcd7f96c7836 ("mailbox: Prevent out-of-bounds access in fw_mbox_index_xlate()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mailbox: Use of_property_match_string() instead of open-coding [+ + +]
Author: Rob Herring (Arm) <robh@kernel.org>
Date:   Wed Jul 31 14:16:08 2024 -0600

    mailbox: Use of_property_match_string() instead of open-coding
    
    [ Upstream commit 263dbd3cc88da7ea7413494eea66418b4f1b2e6d ]
    
    Use of_property_match_string() instead of open-coding the search. With
    this, of_get_property() can be removed as there is no need to check for
    "mbox-names" presence first.
    
    This is part of a larger effort to remove callers of of_get_property()
    and similar functions. of_get_property() leaks the DT property data
    pointer which is a problem for dynamically allocated nodes which may
    be freed.
    
    Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
    Signed-off-by: Jassi Brar <jassisinghbrar@gmail.com>
    Stable-dep-of: fcd7f96c7836 ("mailbox: Prevent out-of-bounds access in fw_mbox_index_xlate()")
    Signed-off-by: Sasha Levin <sashal@kernel.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-core: fix wrong reinitialization of ringbuffer on reopen [+ + +]
Author: Jens Axboe <axboe@kernel.dk>
Date:   Tue Feb 24 11:51:16 2026 -0700

    media: dvb-core: fix wrong reinitialization of ringbuffer on reopen
    
    commit bfbc0b5b32a8f28ce284add619bf226716a59bc0 upstream.
    
    dvb_dvr_open() calls dvb_ringbuffer_init() when a new reader opens the
    DVR device.  dvb_ringbuffer_init() calls init_waitqueue_head(), which
    reinitializes the waitqueue list head to empty.
    
    Since dmxdev->dvr_buffer.queue is a shared waitqueue (all opens of the
    same DVR device share it), this orphans any existing waitqueue entries
    from io_uring poll or epoll, leaving them with stale prev/next pointers
    while the list head is reset to {self, self}.
    
    The waitqueue and spinlock in dvr_buffer are already properly
    initialized once in dvb_dmxdev_init().  The open path only needs to
    reset the buffer data pointer, size, and read/write positions.
    
    Replace the dvb_ringbuffer_init() call in dvb_dvr_open() with direct
    assignment of data/size and a call to dvb_ringbuffer_reset(), which
    properly resets pread, pwrite, and error with correct memory ordering
    without touching the waitqueue or spinlock.
    
    Cc: stable@vger.kernel.org
    Fixes: 34731df288a5f ("V4L/DVB (3501): Dmxdev: use dvb_ringbuffer")
    Reported-by: syzbot+ab12f0c08dd7ab8d057c@syzkaller.appspotmail.com
    Tested-by: syzbot+ab12f0c08dd7ab8d057c@syzkaller.appspotmail.com
    Link: https://lore.kernel.org/all/698a26d3.050a0220.3b3015.007d.GAE@google.com/
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.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>

media: tegra-video: Fix memory leak in __tegra_channel_try_format() [+ + +]
Author: Zilin Guan <zilin@seu.edu.cn>
Date:   Fri Nov 14 09:12:57 2025 +0000

    media: tegra-video: Fix memory leak in __tegra_channel_try_format()
    
    [ Upstream commit 43e5302d22334f1183dec3e0d5d8007eefe2817c ]
    
    The state object allocated by __v4l2_subdev_state_alloc() must be freed
    with __v4l2_subdev_state_free() when it is no longer needed.
    
    In __tegra_channel_try_format(), two error paths return directly after
    v4l2_subdev_call() fails, without freeing the allocated 'sd_state'
    object. This violates the requirement and causes a memory leak.
    
    Fix this by introducing a cleanup label and using goto statements in the
    error paths to ensure that __v4l2_subdev_state_free() is always called
    before the function returns.
    
    Fixes: 56f64b82356b7 ("media: tegra-video: Use zero crop settings if subdev has no get_selection")
    Fixes: 1ebaeb09830f3 ("media: tegra-video: Add support for external sensor capture")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
    Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: tegra-video: Use accessors for pad config 'try_*' fields [+ + +]
Author: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Date:   Mon Oct 23 23:40:09 2023 +0200

    media: tegra-video: Use accessors for pad config 'try_*' fields
    
    [ Upstream commit 0623979d8352efe18f83c4fad95a2e61df17b3e7 ]
    
    The 'try_*' fields of the v4l2_subdev_pad_config structure are meant to
    be accessed through helper functions. Replace direct access with usage
    of the v4l2_subdev_get_pad_format(), v4l2_subdev_get_pad_crop() and
    v4l2_subdev_get_pad_compose() helpers.
    
    Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
    Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
    Stable-dep-of: 43e5302d2233 ("media: tegra-video: Fix memory leak in __tegra_channel_try_format()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
memory: mtk-smi: Convert to platform remove callback returning void [+ + +]
Author: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Date:   Sun Dec 17 15:29:33 2023 +0100

    memory: mtk-smi: Convert to platform remove callback returning void
    
    [ Upstream commit 08c1aeaa45ce0fd18912e92c6705586c8aa5240f ]
    
    The .remove() callback for a platform driver returns an int which makes
    many driver authors wrongly assume it's possible to do error handling by
    returning an error code. However the value returned is ignored (apart
    from emitting a warning) and this typically results in resource leaks.
    
    To improve here there is a quest to make the remove callback return
    void. In the first step of this quest all drivers are converted to
    .remove_new(), which already returns void. Eventually after all drivers
    are converted, .remove_new() will be renamed to .remove().
    
    Trivially convert this driver from always returning zero in the remove
    callback to the void returning variant.
    
    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Link: https://lore.kernel.org/r/5c35a33cfdc359842e034ddd2e9358f10e91fa1f.1702822744.git.u.kleine-koenig@pengutronix.de
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Stable-dep-of: 6cfa038bddd7 ("memory: mtk-smi: fix device leaks on common probe")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

memory: mtk-smi: fix device leak on larb probe [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Nov 21 17:46:23 2025 +0100

    memory: mtk-smi: fix device leak on larb probe
    
    [ Upstream commit 9dae65913b32d05dbc8ff4b8a6bf04a0e49a8eb6 ]
    
    Make sure to drop the reference taken when looking up the SMI device
    during larb probe on late probe failure (e.g. probe deferral) and on
    driver unbind.
    
    Fixes: cc8bbe1a8312 ("memory: mediatek: Add SMI driver")
    Fixes: 038ae37c510f ("memory: mtk-smi: add missing put_device() call in mtk_smi_device_link_common")
    Cc: stable@vger.kernel.org      # 4.6: 038ae37c510f
    Cc: stable@vger.kernel.org      # 4.6
    Cc: Yong Wu <yong.wu@mediatek.com>
    Cc: Miaoqian Lin <linmq006@gmail.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20251121164624.13685-3-johan@kernel.org
    Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

memory: mtk-smi: fix device leaks on common probe [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Nov 21 17:46:22 2025 +0100

    memory: mtk-smi: fix device leaks on common probe
    
    [ Upstream commit 6cfa038bddd710f544076ea2ef7792fc82fbedd6 ]
    
    Make sure to drop the reference taken when looking up the SMI device
    during common probe on late probe failure (e.g. probe deferral) and on
    driver unbind.
    
    Fixes: 47404757702e ("memory: mtk-smi: Add device link for smi-sub-common")
    Fixes: 038ae37c510f ("memory: mtk-smi: add missing put_device() call in mtk_smi_device_link_common")
    Cc: stable@vger.kernel.org      # 5.16: 038ae37c510f
    Cc: stable@vger.kernel.org      # 5.16
    Cc: Yong Wu <yong.wu@mediatek.com>
    Cc: Miaoqian Lin <linmq006@gmail.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20251121164624.13685-2-johan@kernel.org
    Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mfd: omap-usb-host: Convert to platform remove callback returning void [+ + +]
Author: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Date:   Thu Nov 23 17:56:38 2023 +0100

    mfd: omap-usb-host: Convert to platform remove callback returning void
    
    [ Upstream commit 418d1e74f8597e0b2d5d0d6e1be8f1f47e68f0a4 ]
    
    The .remove() callback for a platform driver returns an int which makes
    many driver authors wrongly assume it's possible to do error handling by
    returning an error code. However the value returned is ignored (apart
    from emitting a warning) and this typically results in resource leaks.
    
    To improve here there is a quest to make the remove callback return
    void. In the first step of this quest all drivers are converted to
    .remove_new(), which already returns void. Eventually after all drivers
    are converted, .remove_new() will be renamed to .remove().
    
    Trivially convert this driver from always returning zero in the remove
    callback to the void returning variant.
    
    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Link: https://lore.kernel.org/r/20231123165627.492259-11-u.kleine-koenig@pengutronix.de
    Signed-off-by: Lee Jones <lee@kernel.org>
    Stable-dep-of: 24804ba508a3 ("mfd: omap-usb-host: Fix OF populate on driver rebind")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mfd: omap-usb-host: Fix OF populate on driver rebind [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Dec 19 12:07:14 2025 +0100

    mfd: omap-usb-host: Fix OF populate on driver rebind
    
    [ Upstream commit 24804ba508a3e240501c521685a1c4eb9f574f8e ]
    
    Since commit c6e126de43e7 ("of: Keep track of populated platform
    devices") child devices will not be created by of_platform_populate()
    if the devices had previously been deregistered individually so that the
    OF_POPULATED flag is still set in the corresponding OF nodes.
    
    Switch to using of_platform_depopulate() instead of open coding so that
    the child devices are created if the driver is rebound.
    
    Fixes: c6e126de43e7 ("of: Keep track of populated platform devices")
    Cc: stable@vger.kernel.org      # 3.16
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: Andreas Kemnade <andreas@kemnade.info>
    Link: https://patch.msgid.link/20251219110714.23919-1-johan@kernel.org
    Signed-off-by: Lee Jones <lee@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mfd: qcom-pm8xxx: Convert to platform remove callback returning void [+ + +]
Author: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Date:   Thu Nov 23 17:56:41 2023 +0100

    mfd: qcom-pm8xxx: Convert to platform remove callback returning void
    
    [ Upstream commit 19ea1d3953017518d85db35b69b5aea9bc64d630 ]
    
    The .remove() callback for a platform driver returns an int which makes
    many driver authors wrongly assume it's possible to do error handling by
    returning an error code. However the value returned is ignored (apart
    from emitting a warning) and this typically results in resource leaks.
    
    To improve here there is a quest to make the remove callback return
    void. In the first step of this quest all drivers are converted to
    .remove_new(), which already returns void. Eventually after all drivers
    are converted, .remove_new() will be renamed to .remove().
    
    Trivially convert this driver from always returning zero in the remove
    callback to the void returning variant.
    
    Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Link: https://lore.kernel.org/r/20231123165627.492259-14-u.kleine-koenig@pengutronix.de
    Signed-off-by: Lee Jones <lee@kernel.org>
    Stable-dep-of: 27a8acea47a9 ("mfd: qcom-pm8xxx: Fix OF populate on driver rebind")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mfd: qcom-pm8xxx: Fix OF populate on driver rebind [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Dec 19 12:09:47 2025 +0100

    mfd: qcom-pm8xxx: Fix OF populate on driver rebind
    
    [ Upstream commit 27a8acea47a93fea6ad0e2df4c20a9b51490e4d9 ]
    
    Since commit c6e126de43e7 ("of: Keep track of populated platform
    devices") child devices will not be created by of_platform_populate()
    if the devices had previously been deregistered individually so that the
    OF_POPULATED flag is still set in the corresponding OF nodes.
    
    Switch to using of_platform_depopulate() instead of open coding so that
    the child devices are created if the driver is rebound.
    
    Fixes: c6e126de43e7 ("of: Keep track of populated platform devices")
    Cc: stable@vger.kernel.org      # 3.16
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
    Link: https://patch.msgid.link/20251219110947.24101-1-johan@kernel.org
    Signed-off-by: Lee Jones <lee@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.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:   Tue Mar 17 10:30:32 2026 -0400

    mm/kfence: fix KASAN hardware tag faults during late enablement
    
    [ Upstream commit d155aab90fffa00f93cea1f107aef0a3d548b2ff ]
    
    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>
    [ dropped page_alloc.c hunk adding __GFP_SKIP_KASAN ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/mempolicy: fix wrong mmap_read_unlock() in migrate_to_node() [+ + +]
Author: David Hildenbrand (Arm) <david@kernel.org>
Date:   Tue Mar 3 11:12:45 2026 +0100

    mm/mempolicy: fix wrong mmap_read_unlock() in migrate_to_node()
    
    The backport of commit 091c1dd2d4df ("mm/mempolicy: fix migrate_to_node()
    assuming there is at least one VMA in a MM") contains an error:
    migrate_to_node() does not lock the mmap_lock itself, that is handled by
    the caller instead.
    
    So let's drop the wrong mmap_read_unlock(). Fortunately, this path is
    very hard to hit in practice.
    
    Fixes: a13b2b9b0b0b ("mm/mempolicy: fix migrate_to_node() assuming there is at least one VMA in a MM")
    Reported-by: Li Ying <liying3@sungrowpower.com>
    Closes: https://lore.kernel.org/r/aaZgUNxAyKC2IwuG@casper.infradead.org
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: <stable@vger.kernel.org>
    Reviewed-by: Gregory Price <gourry@gourry.net>
    Reviewed-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
    Signed-off-by: David Hildenbrand (Arm) <david@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>

 
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: 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-pci-gli: fix GL9750 DMA write corruption [+ + +]
Author: Matthew Schwartz <matthew.schwartz@linux.dev>
Date:   Mon Mar 2 13:07:17 2026 -0800

    mmc: sdhci-pci-gli: fix GL9750 DMA write corruption
    
    commit 2b76e0cc7803e5ab561c875edaba7f6bbd87fbb0 upstream.
    
    The GL9750 SD host controller has intermittent data corruption during
    DMA write operations. The GM_BURST register's R_OSRC_Lmt field
    (bits 17:16), which limits outstanding DMA read requests from system
    memory, is not being cleared during initialization. The Windows driver
    sets R_OSRC_Lmt to zero, limiting requests to the smallest unit.
    
    Clear R_OSRC_Lmt to match the Windows driver behavior. This eliminates
    write corruption verified with f3write/f3read tests while maintaining
    DMA performance.
    
    Cc: stable@vger.kernel.org
    Fixes: e51df6ce668a ("mmc: host: sdhci-pci: Add Genesys Logic GL975x support")
    Closes: https://lore.kernel.org/linux-mmc/33d12807-5c72-41ce-8679-57aa11831fad@linux.dev/
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: Matthew Schwartz <matthew.schwartz@linux.dev>
    Reviewed-by: Ben Chuang <ben.chuang@genesyslogic.com.tw>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: sdhci: fix timing selection for 1-bit bus width [+ + +]
Author: Luke Wang <ziniu.wang_1@nxp.com>
Date:   Wed Mar 11 17:50:06 2026 +0800

    mmc: sdhci: fix timing selection for 1-bit bus width
    
    commit 5e3486e64094c28a526543f1e8aa0d5964b7f02d upstream.
    
    When 1-bit bus width is used with HS200/HS400 capabilities set,
    mmc_select_hs200() returns 0 without actually switching. This
    causes mmc_select_timing() to skip mmc_select_hs(), leaving eMMC
    in legacy mode (26MHz) instead of High Speed SDR (52MHz).
    
    Per JEDEC eMMC spec section 5.3.2, 1-bit mode supports High Speed
    SDR. Drop incompatible HS200/HS400/UHS/DDR caps early so timing
    selection falls through to mmc_select_hs() correctly.
    
    Fixes: f2119df6b764 ("mmc: sd: add support for signal voltage switch procedure")
    Signed-off-by: Luke Wang <ziniu.wang_1@nxp.com>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mpls: add missing unregister_netdevice_notifier to mpls_init [+ + +]
Author: Sabrina Dubroca <sd@queasysnail.net>
Date:   Wed Mar 11 23:35:09 2026 +0100

    mpls: add missing unregister_netdevice_notifier to mpls_init
    
    [ Upstream commit 99600f79b28c83c68bae199a3d8e95049a758308 ]
    
    If mpls_init() fails after registering mpls_dev_notifier, it never
    gets removed. Add the missing unregister_netdevice_notifier() call to
    the error handling path.
    
    Fixes: 5be2062e3080 ("mpls: Handle error of rtnl_register_module().")
    Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
    Link: https://patch.msgid.link/7c55363c4f743d19e2306204a134407c90a69bbb.1773228081.git.sd@queasysnail.net
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mptcp: pm: avoid sending RM_ADDR over same subflow [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Mon Mar 9 11:18:43 2026 -0400

    mptcp: pm: avoid sending RM_ADDR over same subflow
    
    [ Upstream commit fb8d0bccb221080630efcd9660c9f9349e53cc9e ]
    
    RM_ADDR are sent over an active subflow, the first one in the subflows
    list. There is then a high chance the initial subflow is picked. With
    the in-kernel PM, when an endpoint is removed, a RM_ADDR is sent, then
    linked subflows are closed. This is done for each active MPTCP
    connection.
    
    MPTCP endpoints are likely removed because the attached network is no
    longer available or usable. In this case, it is better to avoid sending
    this RM_ADDR over the subflow that is going to be removed, but prefer
    sending it over another active and non stale subflow, if any.
    
    This modification avoids situations where the other end is not notified
    when a subflow is no longer usable: typically when the endpoint linked
    to the initial subflow is removed, especially on the server side.
    
    Fixes: 8dd5efb1f91b ("mptcp: send ack for rm_addr")
    Cc: stable@vger.kernel.org
    Reported-by: Frank Lorenz <lorenz-frank@web.de>
    Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/612
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260303-net-mptcp-misc-fixes-7-0-rc2-v1-2-4b5462b6f016@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ adapted to _nl-prefixed function names in pm_netlink.c and omitted stale subflow fallback ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: pm: in-kernel: always mark signal+subflow endp as used [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Mon Mar 9 11:59:43 2026 -0400

    mptcp: pm: in-kernel: always mark signal+subflow endp as used
    
    [ Upstream commit 579a752464a64cb5f9139102f0e6b90a1f595ceb ]
    
    Syzkaller managed to find a combination of actions that was generating
    this warning:
    
      msk->pm.local_addr_used == 0
      WARNING: net/mptcp/pm_kernel.c:1071 at __mark_subflow_endp_available net/mptcp/pm_kernel.c:1071 [inline], CPU#1: syz.2.17/961
      WARNING: net/mptcp/pm_kernel.c:1071 at mptcp_nl_remove_subflow_and_signal_addr net/mptcp/pm_kernel.c:1103 [inline], CPU#1: syz.2.17/961
      WARNING: net/mptcp/pm_kernel.c:1071 at mptcp_pm_nl_del_addr_doit+0x81d/0x8f0 net/mptcp/pm_kernel.c:1210, CPU#1: syz.2.17/961
      Modules linked in:
      CPU: 1 UID: 0 PID: 961 Comm: syz.2.17 Not tainted 6.19.0-08368-gfafda3b4b06b #22 PREEMPT(full)
      Hardware name: QEMU Ubuntu 25.10 PC v2 (i440FX + PIIX, + 10.1 machine, 1996), BIOS 1.17.0-debian-1.17.0-1build1 04/01/2014
      RIP: 0010:__mark_subflow_endp_available net/mptcp/pm_kernel.c:1071 [inline]
      RIP: 0010:mptcp_nl_remove_subflow_and_signal_addr net/mptcp/pm_kernel.c:1103 [inline]
      RIP: 0010:mptcp_pm_nl_del_addr_doit+0x81d/0x8f0 net/mptcp/pm_kernel.c:1210
      Code: 89 c5 e8 46 30 6f fe e9 21 fd ff ff 49 83 ed 80 e8 38 30 6f fe 4c 89 ef be 03 00 00 00 e8 db 49 df fe eb ac e8 24 30 6f fe 90 <0f> 0b 90 e9 1d ff ff ff e8 16 30 6f fe eb 05 e8 0f 30 6f fe e8 9a
      RSP: 0018:ffffc90001663880 EFLAGS: 00010293
      RAX: ffffffff82de1a6c RBX: 0000000000000000 RCX: ffff88800722b500
      RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
      RBP: ffff8880158b22d0 R08: 0000000000010425 R09: ffffffffffffffff
      R10: ffffffff82de18ba R11: 0000000000000000 R12: ffff88800641a640
      R13: ffff8880158b1880 R14: ffff88801ec3c900 R15: ffff88800641a650
      FS:  00005555722c3500(0000) GS:ffff8880f909d000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00007f66346e0f60 CR3: 000000001607c000 CR4: 0000000000350ef0
      Call Trace:
       <TASK>
       genl_family_rcv_msg_doit+0x117/0x180 net/netlink/genetlink.c:1115
       genl_family_rcv_msg net/netlink/genetlink.c:1195 [inline]
       genl_rcv_msg+0x3a8/0x3f0 net/netlink/genetlink.c:1210
       netlink_rcv_skb+0x16d/0x240 net/netlink/af_netlink.c:2550
       genl_rcv+0x28/0x40 net/netlink/genetlink.c:1219
       netlink_unicast_kernel net/netlink/af_netlink.c:1318 [inline]
       netlink_unicast+0x3e9/0x4c0 net/netlink/af_netlink.c:1344
       netlink_sendmsg+0x4aa/0x5b0 net/netlink/af_netlink.c:1894
       sock_sendmsg_nosec net/socket.c:727 [inline]
       __sock_sendmsg+0xc9/0xf0 net/socket.c:742
       ____sys_sendmsg+0x272/0x3b0 net/socket.c:2592
       ___sys_sendmsg+0x2de/0x320 net/socket.c:2646
       __sys_sendmsg net/socket.c:2678 [inline]
       __do_sys_sendmsg net/socket.c:2683 [inline]
       __se_sys_sendmsg net/socket.c:2681 [inline]
       __x64_sys_sendmsg+0x110/0x1a0 net/socket.c:2681
       do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
       do_syscall_64+0x143/0x440 arch/x86/entry/syscall_64.c:94
       entry_SYSCALL_64_after_hwframe+0x77/0x7f
      RIP: 0033:0x7f66346f826d
      Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 e8 ff ff ff f7 d8 64 89 01 48
      RSP: 002b:00007ffc83d8bdc8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
      RAX: ffffffffffffffda RBX: 00007f6634985fa0 RCX: 00007f66346f826d
      RDX: 00000000040000b0 RSI: 0000200000000740 RDI: 0000000000000007
      RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
      R10: 0000000000000000 R11: 0000000000000246 R12: 00007f6634985fa8
      R13: 00007f6634985fac R14: 0000000000000000 R15: 0000000000001770
       </TASK>
    
    The actions that caused that seem to be:
    
     - Set the MPTCP subflows limit to 0
     - Create an MPTCP endpoint with both the 'signal' and 'subflow' flags
     - Create a new MPTCP connection from a different address: an ADD_ADDR
       linked to the MPTCP endpoint will be sent ('signal' flag), but no
       subflows is initiated ('subflow' flag)
     - Remove the MPTCP endpoint
    
    In this case, msk->pm.local_addr_used has been kept to 0 -- because no
    subflows have been created -- but the corresponding bit in
    msk->pm.id_avail_bitmap has been cleared when the ADD_ADDR has been
    sent. This later causes a splat when removing the MPTCP endpoint because
    msk->pm.local_addr_used has been kept to 0.
    
    Now, if an endpoint has both the signal and subflow flags, but it is not
    possible to create subflows because of the limits or the c-flag case,
    then the local endpoint counter is still incremented: the endpoint is
    used at the end. This avoids issues later when removing the endpoint and
    calling __mark_subflow_endp_available(), which expects
    msk->pm.local_addr_used to have been previously incremented if the
    endpoint was marked as used according to msk->pm.id_avail_bitmap.
    
    Note that signal_and_subflow variable is reset to false when the limits
    and the c-flag case allows subflows creation. Also, local_addr_used is
    only incremented for non ID0 subflows.
    
    Fixes: 85df533a787b ("mptcp: pm: do not ignore 'subflow' if 'signal' flag is also set")
    Cc: stable@vger.kernel.org
    Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/613
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260303-net-mptcp-misc-fixes-7-0-rc2-v1-4-4b5462b6f016@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ pm_kernel.c => pm_netlink.c ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: pm: in-kernel: always set ID as avail when rm endp [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Fri Mar 6 18:49:08 2026 +0100

    mptcp: pm: in-kernel: always set ID as avail when rm endp
    
    commit d191101dee25567c2af3b28565f45346c33d65f5 upstream.
    
    Syzkaller managed to find a combination of actions that was generating
    this warning:
    
      WARNING: net/mptcp/pm_kernel.c:1074 at __mark_subflow_endp_available net/mptcp/pm_kernel.c:1074 [inline], CPU#1: syz.7.48/2535
      WARNING: net/mptcp/pm_kernel.c:1074 at mptcp_pm_nl_fullmesh net/mptcp/pm_kernel.c:1446 [inline], CPU#1: syz.7.48/2535
      WARNING: net/mptcp/pm_kernel.c:1074 at mptcp_pm_nl_set_flags_all net/mptcp/pm_kernel.c:1474 [inline], CPU#1: syz.7.48/2535
      WARNING: net/mptcp/pm_kernel.c:1074 at mptcp_pm_nl_set_flags+0x5de/0x640 net/mptcp/pm_kernel.c:1538, CPU#1: syz.7.48/2535
      Modules linked in:
      CPU: 1 UID: 0 PID: 2535 Comm: syz.7.48 Not tainted 6.18.0-03987-gea5f5e676cf5 #17 PREEMPT(voluntary)
      Hardware name: QEMU Ubuntu 25.10 PC (i440FX + PIIX, 1996), BIOS 1.17.0-debian-1.17.0-1 04/01/2014
      RIP: 0010:__mark_subflow_endp_available net/mptcp/pm_kernel.c:1074 [inline]
      RIP: 0010:mptcp_pm_nl_fullmesh net/mptcp/pm_kernel.c:1446 [inline]
      RIP: 0010:mptcp_pm_nl_set_flags_all net/mptcp/pm_kernel.c:1474 [inline]
      RIP: 0010:mptcp_pm_nl_set_flags+0x5de/0x640 net/mptcp/pm_kernel.c:1538
      Code: 89 c7 e8 c5 8c 73 fe e9 f7 fd ff ff 49 83 ef 80 e8 b7 8c 73 fe 4c 89 ff be 03 00 00 00 e8 4a 29 e3 fe eb ac e8 a3 8c 73 fe 90 <0f> 0b 90 e9 3d ff ff ff e8 95 8c 73 fe b8 a1 ff ff ff eb 1a e8 89
      RSP: 0018:ffffc9001535b820 EFLAGS: 00010287
      netdevsim0: tun_chr_ioctl cmd 1074025677
      RAX: ffffffff82da294d RBX: 0000000000000001 RCX: 0000000000080000
      RDX: ffffc900096d0000 RSI: 00000000000006d6 RDI: 00000000000006d7
      netdevsim0: linktype set to 823
      RBP: ffff88802cdb2240 R08: 00000000000104ae R09: ffffffffffffffff
      R10: ffffffff82da27d4 R11: 0000000000000000 R12: 0000000000000000
      R13: ffff88801246d8c0 R14: ffffc9001535b8b8 R15: ffff88802cdb1800
      FS:  00007fc6ac5a76c0(0000) GS:ffff8880f90c8000(0000) knlGS:0000000000000000
      netlink: 'syz.3.50': attribute type 5 has an invalid length.
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      netlink: 1232 bytes leftover after parsing attributes in process `syz.3.50'.
      CR2: 0000200000010000 CR3: 0000000025b1a000 CR4: 0000000000350ef0
      Call Trace:
       <TASK>
       mptcp_pm_set_flags net/mptcp/pm_netlink.c:277 [inline]
       mptcp_pm_nl_set_flags_doit+0x1d7/0x210 net/mptcp/pm_netlink.c:282
       genl_family_rcv_msg_doit+0x117/0x180 net/netlink/genetlink.c:1115
       genl_family_rcv_msg net/netlink/genetlink.c:1195 [inline]
       genl_rcv_msg+0x3a8/0x3f0 net/netlink/genetlink.c:1210
       netlink_rcv_skb+0x16d/0x240 net/netlink/af_netlink.c:2550
       genl_rcv+0x28/0x40 net/netlink/genetlink.c:1219
       netlink_unicast_kernel net/netlink/af_netlink.c:1318 [inline]
       netlink_unicast+0x3e9/0x4c0 net/netlink/af_netlink.c:1344
       netlink_sendmsg+0x4ab/0x5b0 net/netlink/af_netlink.c:1894
       sock_sendmsg_nosec net/socket.c:718 [inline]
       __sock_sendmsg+0xc9/0xf0 net/socket.c:733
       ____sys_sendmsg+0x272/0x3b0 net/socket.c:2608
       ___sys_sendmsg+0x2de/0x320 net/socket.c:2662
       __sys_sendmsg net/socket.c:2694 [inline]
       __do_sys_sendmsg net/socket.c:2699 [inline]
       __se_sys_sendmsg net/socket.c:2697 [inline]
       __x64_sys_sendmsg+0x110/0x1a0 net/socket.c:2697
       do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
       do_syscall_64+0xed/0x360 arch/x86/entry/syscall_64.c:94
       entry_SYSCALL_64_after_hwframe+0x77/0x7f
      RIP: 0033:0x7fc6adb66f6d
      Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 e8 ff ff ff f7 d8 64 89 01 48
      RSP: 002b:00007fc6ac5a6ff8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
      RAX: ffffffffffffffda RBX: 00007fc6addf5fa0 RCX: 00007fc6adb66f6d
      RDX: 0000000000048084 RSI: 00002000000002c0 RDI: 000000000000000e
      RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
      R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
      netlink: 'syz.5.51': attribute type 2 has an invalid length.
      R13: 00007fff25e91fe0 R14: 00007fc6ac5a7ce4 R15: 00007fff25e920d7
       </TASK>
    
    The actions that caused that seem to be:
    
     - Create an MPTCP endpoint for address A without any flags
     - Create a new MPTCP connection from address A
     - Remove the MPTCP endpoint: the corresponding subflows will be removed
     - Recreate the endpoint with the same ID, but with the subflow flag
     - Change the same endpoint to add the fullmesh flag
    
    In this case, msk->pm.local_addr_used has been kept to 0 as expected,
    but the corresponding bit in msk->pm.id_avail_bitmap was still unset
    after having removed the endpoint, causing the splat later on.
    
    When removing an endpoint, the corresponding endpoint ID was only marked
    as available for "signal" types with an announced address, plus all
    "subflow" types, but not the other types like an endpoint corresponding
    to the initial subflow. In these cases, re-creating an endpoint with the
    same ID didn't signal/create anything. Here, adding the fullmesh flag
    was creating the splat when calling __mark_subflow_endp_available() from
    mptcp_pm_nl_fullmesh(), because msk->pm.local_addr_used was set to 0
    while the ID was marked as used.
    
    To fix this issue, the corresponding bit in msk->pm.id_avail_bitmap can
    always be set as available when removing an MPTCP in-kernel endpoint. In
    other words, moving the call to __set_bit() to do it in all cases,
    except for "subflow" types where this bit is handled in a dedicated
    helper.
    
    Note: instead of adding a new spin_(un)lock_bh that would be taken in
    all cases, do all the actions requiring the spin lock under the same
    block.
    
    This modification potentially fixes another issue reported by syzbot,
    see [1]. But without a reproducer or more details about what exactly
    happened before, it is hard to confirm.
    
    Fixes: e255683c06df ("mptcp: pm: re-using ID of unused removed ADD_ADDR")
    Cc: stable@vger.kernel.org
    Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/606
    Reported-by: syzbot+f56f7d56e2c6e11a01b6@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/68fcfc4a.050a0220.346f24.02fb.GAE@google.com [1]
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260205-net-mptcp-misc-fixes-6-19-rc8-v2-1-c2720ce75c34@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ Conflict in pm_netlink.c, because commit 8617e85e04bd ("mptcp: pm:
      split in-kernel PM specific code") is not in this version, and move
      code from pm_netlink.c to pm_kernel.c. Also, commit 636113918508
      ("mptcp: pm: remove '_nl' from mptcp_pm_nl_rm_addr_received") renamed
      mptcp_pm_nl_rm_subflow_received() to mptcp_pm_rm_subflow(). Apart from
      that, the same patch can be applied in pm_netlink.c. ]
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mtd: Avoid boot crash in RedBoot partition table parser [+ + +]
Author: Finn Thain <fthain@linux-m68k.org>
Date:   Mon Feb 16 18:01:30 2026 +1100

    mtd: Avoid boot crash in RedBoot partition table parser
    
    commit 8e2f8020270af7777d49c2e7132260983e4fc566 upstream.
    
    Given CONFIG_FORTIFY_SOURCE=y and a recent compiler,
    commit 439a1bcac648 ("fortify: Use __builtin_dynamic_object_size() when
    available") produces the warning below and an oops.
    
        Searching for RedBoot partition table in 50000000.flash at offset 0x7e0000
        ------------[ cut here ]------------
        WARNING: lib/string_helpers.c:1035 at 0xc029e04c, CPU#0: swapper/0/1
        memcmp: detected buffer overflow: 15 byte read of buffer size 14
        Modules linked in:
        CPU: 0 UID: 0 PID: 1 Comm: swapper/0 Not tainted 6.19.0 #1 NONE
    
    As Kees said, "'names' is pointing to the final 'namelen' many bytes
    of the allocation ... 'namelen' could be basically any length at all.
    This fortify warning looks legit to me -- this code used to be reading
    beyond the end of the allocation."
    
    Since the size of the dynamic allocation is calculated with strlen()
    we can use strcmp() instead of memcmp() and remain within bounds.
    
    Cc: Kees Cook <kees@kernel.org>
    Cc: stable@vger.kernel.org
    Cc: linux-hardening@vger.kernel.org
    Link: https://lore.kernel.org/all/202602151911.AD092DFFCD@keescook/
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Suggested-by: Kees Cook <kees@kernel.org>
    Signed-off-by: Finn Thain <fthain@linux-m68k.org>
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mtd: rawnand: brcmnand: skip DMA during panic write [+ + +]
Author: Kamal Dasu <kamal.dasu@broadcom.com>
Date:   Thu Mar 5 15:21:57 2026 -0500

    mtd: rawnand: brcmnand: skip DMA during panic write
    
    [ Upstream commit da9ba4dcc01e7cf52b7676f0ee9607b8358c2171 ]
    
    When oops_panic_write is set, the driver disables interrupts and
    switches to PIO polling mode but still falls through into the DMA
    path. DMA cannot be used reliably in panic context, so make the
    DMA path an else branch to ensure only PIO is used during panic
    writes.
    
    Fixes: c1ac2dc34b51 ("mtd: rawnand: brcmnand: When oops in progress use pio and interrupt polling")
    Signed-off-by: Kamal Dasu <kamal.dasu@broadcom.com>
    Reviewed-by: William Zhang <william.zhang@broadcom.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mtd: rawnand: cadence: Fix error check for dma_alloc_coherent() in cadence_nand_init() [+ + +]
Author: Chen Ni <nichen@iscas.ac.cn>
Date:   Mon Feb 9 15:56:18 2026 +0800

    mtd: rawnand: cadence: Fix error check for dma_alloc_coherent() in cadence_nand_init()
    
    commit 0410e1a4c545c769c59c6eda897ad5d574d0c865 upstream.
    
    Fix wrong variable used for error checking after dma_alloc_coherent()
    call. The function checks cdns_ctrl->dma_cdma_desc instead of
    cdns_ctrl->cdma_desc, which could lead to incorrect error handling.
    
    Fixes: ec4ba01e894d ("mtd: rawnand: Add new Cadence NAND driver to MTD subsystem")
    Cc: stable@vger.kernel.org
    Signed-off-by: Chen Ni <nichen@iscas.ac.cn>
    Reviewed-by: Alok Tiwari <alok.a.tiwari@oracle.com>
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mtd: rawnand: pl353: make sure optimal timings are applied [+ + +]
Author: Olivier Sobrie <olivier@sobrie.be>
Date:   Tue Mar 17 18:18:07 2026 +0100

    mtd: rawnand: pl353: make sure optimal timings are applied
    
    commit b9465b04de4b90228de03db9a1e0d56b00814366 upstream.
    
    Timings of the nand are adjusted by pl35x_nfc_setup_interface() but
    actually applied by the pl35x_nand_select_target() function.
    If there is only one nand chip, the pl35x_nand_select_target() will only
    apply the timings once since the test at its beginning will always be true
    after the first call to this function. As a result, the hardware will
    keep using the default timings set at boot to detect the nand chip, not
    the optimal ones.
    
    With this patch, we program directly the new timings when
    pl35x_nfc_setup_interface() is called.
    
    Fixes: 08d8c62164a3 ("mtd: rawnand: pl353: Add support for the ARM PL353 SMC NAND controller")
    Signed-off-by: Olivier Sobrie <olivier@sobrie.be>
    Cc: stable@vger.kernel.org
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mtd: rawnand: serialize lock/unlock against other NAND operations [+ + +]
Author: Kamal Dasu <kamal.dasu@broadcom.com>
Date:   Thu Mar 5 14:49:06 2026 -0500

    mtd: rawnand: serialize lock/unlock against other NAND operations
    
    [ Upstream commit bab2bc6e850a697a23b9e5f0e21bb8c187615e95 ]
    
    nand_lock() and nand_unlock() call into chip->ops.lock_area/unlock_area
    without holding the NAND device lock. On controllers that implement
    SET_FEATURES via multiple low-level PIO commands, these can race with
    concurrent UBI/UBIFS background erase/write operations that hold the
    device lock, resulting in cmd_pending conflicts on the NAND controller.
    
    Add nand_get_device()/nand_release_device() around the lock/unlock
    operations to serialize them against all other NAND controller access.
    
    Fixes: 92270086b7e5 ("mtd: rawnand: Add support for manufacturer specific lock/unlock operation")
    Signed-off-by: Kamal Dasu <kamal.dasu@broadcom.com>
    Reviewed-by: William Zhang <william.zhang@broadcom.com>
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    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: IFC updates for disabled host PF [+ + +]
Author: Daniel Jurgens <danielj@nvidia.com>
Date:   Wed Jul 9 15:41:07 2025 +0300

    net/mlx5: IFC updates for disabled host PF
    
    [ Upstream commit cd1746cb6555a2238c4aae9f9d60b637a61bf177 ]
    
    The port 2 host PF can be disabled, this bit reflects that setting.
    
    Signed-off-by: Daniel Jurgens <danielj@nvidia.com>
    Reviewed-by: William Tu <witu@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/1752064867-16874-3-git-send-email-tariqt@nvidia.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Stable-dep-of: aed763abf0e9 ("net/mlx5: Fix deadlock between devlink lock and esw->wq")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5: qos: Restrict RTNL area to avoid a lock cycle [+ + +]
Author: Cosmin Ratiu <cratiu@nvidia.com>
Date:   Mon Mar 16 11:46:01 2026 +0200

    net/mlx5: qos: Restrict RTNL area to avoid a lock cycle
    
    [ Upstream commit b7e3a5d9c0d66b7fb44f63aef3bd734821afa0c8 ]
    
    A lock dependency cycle exists where:
    1. mlx5_ib_roce_init -> mlx5_core_uplink_netdev_event_replay ->
    mlx5_blocking_notifier_call_chain (takes notifier_rwsem) ->
    mlx5e_mdev_notifier_event -> mlx5_netdev_notifier_register ->
    register_netdevice_notifier_dev_net (takes rtnl)
    => notifier_rwsem -> rtnl
    
    2. mlx5e_probe -> _mlx5e_probe ->
    mlx5_core_uplink_netdev_set (takes uplink_netdev_lock) ->
    mlx5_blocking_notifier_call_chain (takes notifier_rwsem)
    => uplink_netdev_lock -> notifier_rwsem
    
    3: devlink_nl_rate_set_doit -> devlink_nl_rate_set ->
    mlx5_esw_devlink_rate_leaf_tx_max_set -> esw_qos_devlink_rate_to_mbps ->
    mlx5_esw_qos_max_link_speed_get (takes rtnl) ->
    mlx5_esw_qos_lag_link_speed_get_locked ->
    mlx5_uplink_netdev_get (takes uplink_netdev_lock)
    => rtnl -> uplink_netdev_lock
    => BOOM! (lock cycle)
    
    Fix that by restricting the rtnl-protected section to just the necessary
    part, the call to netdev_master_upper_dev_get and speed querying, so
    that the last lock dependency is avoided and the cycle doesn't close.
    This is safe because mlx5_uplink_netdev_get uses netdev_hold to keep the
    uplink netdev alive while its master device is queried.
    
    Use this opportunity to rename the ambiguously-named "hold_rtnl_lock"
    argument to "take_rtnl" and remove the "_locked" suffix from
    mlx5_esw_qos_lag_link_speed_get_locked.
    
    Fixes: 6b4be64fd9fe ("net/mlx5e: Harden uplink netdev access against device unbind")
    Signed-off-by: Cosmin Ratiu <cratiu@nvidia.com>
    Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/20260316094603.6999-2-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5: Query to see if host PF is disabled [+ + +]
Author: Daniel Jurgens <danielj@nvidia.com>
Date:   Wed Aug 13 22:19:55 2025 +0300

    net/mlx5: Query to see if host PF is disabled
    
    [ Upstream commit 9e84de72aef9bcf0e751a0bff3ac91b0cf52366f ]
    
    The host PF can be disabled, query firmware to check if the host PF of
    this function exists.
    
    Signed-off-by: Daniel Jurgens <danielj@nvidia.com>
    Reviewed-by: William Tu <witu@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/1755112796-467444-2-git-send-email-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: aed763abf0e9 ("net/mlx5: Fix deadlock between devlink lock and esw->wq")
    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: Fix race condition during IPSec ESN update [+ + +]
Author: Jianbo Liu <jianbol@nvidia.com>
Date:   Mon Mar 16 11:46:03 2026 +0200

    net/mlx5e: Fix race condition during IPSec ESN update
    
    [ Upstream commit beb6e2e5976a128b0cccf10d158124422210c5ef ]
    
    In IPSec full offload mode, the device reports an ESN (Extended
    Sequence Number) wrap event to the driver. The driver validates this
    event by querying the IPSec ASO and checking that the esn_event_arm
    field is 0x0, which indicates an event has occurred. After handling
    the event, the driver must re-arm the context by setting esn_event_arm
    back to 0x1.
    
    A race condition exists in this handling path. After validating the
    event, the driver calls mlx5_accel_esp_modify_xfrm() to update the
    kernel's xfrm state. This function temporarily releases and
    re-acquires the xfrm state lock.
    
    So, need to acknowledge the event first by setting esn_event_arm to
    0x1. This prevents the driver from reprocessing the same ESN update if
    the hardware sends events for other reason. Since the next ESN update
    only occurs after nearly 2^31 packets are received, there's no risk of
    missing an update, as it will happen long after this handling has
    finished.
    
    Processing the event twice causes the ESN high-order bits (esn_msb) to
    be incremented incorrectly. The driver then programs the hardware with
    this invalid ESN state, which leads to anti-replay failures and a
    complete halt of IPSec traffic.
    
    Fix this by re-arming the ESN event immediately after it is validated,
    before calling mlx5_accel_esp_modify_xfrm(). This ensures that any
    spurious, duplicate events are correctly ignored, closing the race
    window.
    
    Fixes: fef06678931f ("net/mlx5e: Fix ESN update kernel panic")
    Signed-off-by: Jianbo Liu <jianbol@nvidia.com>
    Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/20260316094603.6999-4-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5e: Prevent concurrent access to IPSec ASO context [+ + +]
Author: Jianbo Liu <jianbol@nvidia.com>
Date:   Mon Mar 16 11:46:02 2026 +0200

    net/mlx5e: Prevent concurrent access to IPSec ASO context
    
    [ Upstream commit 99b36850d881e2d65912b2520a1c80d0fcc9429a ]
    
    The query or updating IPSec offload object is through Access ASO WQE.
    The driver uses a single mlx5e_ipsec_aso struct for each PF, which
    contains a shared DMA-mapped context for all ASO operations.
    
    A race condition exists because the ASO spinlock is released before
    the hardware has finished processing WQE. If a second operation is
    initiated immediately after, it overwrites the shared context in the
    DMA area.
    
    When the first operation's completion is processed later, it reads
    this corrupted context, leading to unexpected behavior and incorrect
    results.
    
    This commit fixes the race by introducing a private context within
    each IPSec offload object. The shared ASO context is now copied to
    this private context while the ASO spinlock is held. Subsequent
    processing uses this saved, per-object context, ensuring its integrity
    is maintained.
    
    Fixes: 1ed78fc03307 ("net/mlx5e: Update IPsec soft and hard limits")
    Signed-off-by: Jianbo Liu <jianbol@nvidia.com>
    Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/20260316094603.6999-3-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/rds: Fix circular locking dependency in rds_tcp_tune [+ + +]
Author: Allison Henderson <achender@kernel.org>
Date:   Fri Feb 27 13:23:36 2026 -0700

    net/rds: Fix circular locking dependency in rds_tcp_tune
    
    [ Upstream commit 6a877ececd6daa002a9a0002cd0fbca6592a9244 ]
    
    syzbot reported a circular locking dependency in rds_tcp_tune() where
    sk_net_refcnt_upgrade() is called while holding the socket lock:
    
    ======================================================
    WARNING: possible circular locking dependency detected
    ======================================================
    kworker/u10:8/15040 is trying to acquire lock:
    ffffffff8e9aaf80 (fs_reclaim){+.+.}-{0:0},
    at: __kmalloc_cache_noprof+0x4b/0x6f0
    
    but task is already holding lock:
    ffff88805a3c1ce0 (k-sk_lock-AF_INET6){+.+.}-{0:0},
    at: rds_tcp_tune+0xd7/0x930
    
    The issue occurs because sk_net_refcnt_upgrade() performs memory
    allocation (via get_net_track() -> ref_tracker_alloc()) while the
    socket lock is held, creating a circular dependency with fs_reclaim.
    
    Fix this by moving sk_net_refcnt_upgrade() outside the socket lock
    critical section. This is safe because the fields modified by the
    sk_net_refcnt_upgrade() call (sk_net_refcnt, ns_tracker) are not
    accessed by any concurrent code path at this point.
    
    v2:
      - Corrected fixes tag
      - check patch line wrap nits
      - ai commentary nits
    
    Reported-by: syzbot+2e2cf5331207053b8106@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=2e2cf5331207053b8106
    Fixes: 3a58f13a881e ("net: rds: acquire refcount on TCP sockets")
    Signed-off-by: Allison Henderson <achender@kernel.org>
    Link: https://patch.msgid.link/20260227202336.167757-1-achender@kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/rose: fix NULL pointer dereference in rose_transmit_link on reconnect [+ + +]
Author: Jiayuan Chen <jiayuan.chen@shopee.com>
Date:   Wed Mar 11 15:06:02 2026 +0800

    net/rose: fix NULL pointer dereference in rose_transmit_link on reconnect
    
    [ Upstream commit e1f0a18c9564cdb16523c802e2c6fe5874e3d944 ]
    
    syzkaller reported a bug [1], and the reproducer is available at [2].
    
    ROSE sockets use four sk->sk_state values: TCP_CLOSE, TCP_LISTEN,
    TCP_SYN_SENT, and TCP_ESTABLISHED. rose_connect() already rejects
    calls for TCP_ESTABLISHED (-EISCONN) and TCP_CLOSE with SS_CONNECTING
    (-ECONNREFUSED), but lacks a check for TCP_SYN_SENT.
    
    When rose_connect() is called a second time while the first connection
    attempt is still in progress (TCP_SYN_SENT), it overwrites
    rose->neighbour via rose_get_neigh(). If that returns NULL, the socket
    is left with rose->state == ROSE_STATE_1 but rose->neighbour == NULL.
    When the socket is subsequently closed, rose_release() sees
    ROSE_STATE_1 and calls rose_write_internal() ->
    rose_transmit_link(skb, NULL), causing a NULL pointer dereference.
    
    Per connect(2), a second connect() while a connection is already in
    progress should return -EALREADY. Add this missing check for
    TCP_SYN_SENT to complete the state validation in rose_connect().
    
    [1] https://syzkaller.appspot.com/bug?extid=d00f90e0af54102fb271
    [2] https://gist.github.com/mrpre/9e6779e0d13e2c66779b1653fef80516
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: syzbot+d00f90e0af54102fb271@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/all/69694d6f.050a0220.58bed.0027.GAE@google.com/T/
    Suggested-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Jiayuan Chen <jiayuan.chen@shopee.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20260311070611.76913-1-jiayuan.chen@linux.dev
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/sched: act_gate: snapshot parameters with RCU on replace [+ + +]
Author: Paul Moses <p@1g4.org>
Date:   Thu Mar 12 13:41:16 2026 -0400

    net/sched: act_gate: snapshot parameters with RCU on replace
    
    [ Upstream commit 62413a9c3cb183afb9bb6e94dd68caf4e4145f4c ]
    
    The gate action can be replaced while the hrtimer callback or dump path is
    walking the schedule list.
    
    Convert the parameters to an RCU-protected snapshot and swap updates under
    tcf_lock, freeing the previous snapshot via call_rcu(). When REPLACE omits
    the entry list, preserve the existing schedule so the effective state is
    unchanged.
    
    Fixes: a51c328df310 ("net: qos: introduce a gate control flow action")
    Cc: stable@vger.kernel.org
    Signed-off-by: Paul Moses <p@1g4.org>
    Tested-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Reviewed-by: Victor Nogueira <victor@mojatatu.com>
    Link: https://patch.msgid.link/20260223150512.2251594-2-p@1g4.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ hrtimer_setup() => hrtimer_init() + keep is_tcf_gate() ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net/sched: act_ife: Fix metalist update behavior [+ + +]
Author: Jamal Hadi Salim <jhs@mojatatu.com>
Date:   Wed Mar 4 09:06:02 2026 -0500

    net/sched: act_ife: Fix metalist update behavior
    
    [ Upstream commit e2cedd400c3ec0302ffca2490e8751772906ac23 ]
    
    Whenever an ife action replace changes the metalist, instead of
    replacing the old data on the metalist, the current ife code is appending
    the new metadata. Aside from being innapropriate behavior, this may lead
    to an unbounded addition of metadata to the metalist which might cause an
    out of bounds error when running the encode op:
    
    [  138.423369][    C1] ==================================================================
    [  138.424317][    C1] BUG: KASAN: slab-out-of-bounds in ife_tlv_meta_encode (net/ife/ife.c:168)
    [  138.424906][    C1] Write of size 4 at addr ffff8880077f4ffe by task ife_out_out_bou/255
    [  138.425778][    C1] CPU: 1 UID: 0 PID: 255 Comm: ife_out_out_bou Not tainted 7.0.0-rc1-00169-gfbdfa8da05b6 #624 PREEMPT(full)
    [  138.425795][    C1] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
    [  138.425800][    C1] Call Trace:
    [  138.425804][    C1]  <IRQ>
    [  138.425808][    C1]  dump_stack_lvl (lib/dump_stack.c:122)
    [  138.425828][    C1]  print_report (mm/kasan/report.c:379 mm/kasan/report.c:482)
    [  138.425839][    C1]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [  138.425844][    C1]  ? __virt_addr_valid (./arch/x86/include/asm/preempt.h:95 (discriminator 1) ./include/linux/rcupdate.h:975 (discriminator 1) ./include/linux/mmzone.h:2207 (discriminator 1) arch/x86/mm/physaddr.c:54 (discriminator 1))
    [  138.425853][    C1]  ? ife_tlv_meta_encode (net/ife/ife.c:168)
    [  138.425859][    C1]  kasan_report (mm/kasan/report.c:221 mm/kasan/report.c:597)
    [  138.425868][    C1]  ? ife_tlv_meta_encode (net/ife/ife.c:168)
    [  138.425878][    C1]  kasan_check_range (mm/kasan/generic.c:186 (discriminator 1) mm/kasan/generic.c:200 (discriminator 1))
    [  138.425884][    C1]  __asan_memset (mm/kasan/shadow.c:84 (discriminator 2))
    [  138.425889][    C1]  ife_tlv_meta_encode (net/ife/ife.c:168)
    [  138.425893][    C1]  ? ife_tlv_meta_encode (net/ife/ife.c:171)
    [  138.425898][    C1]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [  138.425903][    C1]  ife_encode_meta_u16 (net/sched/act_ife.c:57)
    [  138.425910][    C1]  ? __pfx_do_raw_spin_lock (kernel/locking/spinlock_debug.c:114)
    [  138.425916][    C1]  ? __asan_memcpy (mm/kasan/shadow.c:105 (discriminator 3))
    [  138.425921][    C1]  ? __pfx_ife_encode_meta_u16 (net/sched/act_ife.c:45)
    [  138.425927][    C1]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [  138.425931][    C1]  tcf_ife_act (net/sched/act_ife.c:847 net/sched/act_ife.c:879)
    
    To solve this issue, fix the replace behavior by adding the metalist to
    the ife rcu data structure.
    
    Fixes: aa9fd9a325d51 ("sched: act: ife: update parameters via rcu handling")
    Reported-by: Ruitong Liu <cnitlrt@gmail.com>
    Tested-by: Ruitong Liu <cnitlrt@gmail.com>
    Co-developed-by: Victor Nogueira <victor@mojatatu.com>
    Signed-off-by: Victor Nogueira <victor@mojatatu.com>
    Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Link: https://patch.msgid.link/20260304140603.76500-1-jhs@mojatatu.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/sched: ets: fix divide by zero in the offload path [+ + +]
Author: Davide Caratti <dcaratti@redhat.com>
Date:   Tue Feb 24 21:28:32 2026 +0100

    net/sched: ets: fix divide by zero in the offload path
    
    commit e35626f610f3d2b7953ccddf6a77453da22b3a9e upstream.
    
    Offloading ETS requires computing each class' WRR weight: this is done by
    averaging over the sums of quanta as 'q_sum' and 'q_psum'. Using unsigned
    int, the same integer size as the individual DRR quanta, can overflow and
    even cause division by zero, like it happened in the following splat:
    
     Oops: divide error: 0000 [#1] SMP PTI
     CPU: 13 UID: 0 PID: 487 Comm: tc Tainted: G            E       6.19.0-virtme #45 PREEMPT(full)
     Tainted: [E]=UNSIGNED_MODULE
     Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
     RIP: 0010:ets_offload_change+0x11f/0x290 [sch_ets]
     Code: e4 45 31 ff eb 03 41 89 c7 41 89 cb 89 ce 83 f9 0f 0f 87 b7 00 00 00 45 8b 08 31 c0 45 01 cc 45 85 c9 74 09 41 6b c4 64 31 d2 <41> f7 f2 89 c2 44 29 fa 45 89 df 41 83 fb 0f 0f 87 c7 00 00 00 44
     RSP: 0018:ffffd0a180d77588 EFLAGS: 00010246
     RAX: 00000000ffffff38 RBX: ffff8d3d482ca000 RCX: 0000000000000000
     RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffffd0a180d77660
     RBP: ffffd0a180d77690 R08: ffff8d3d482ca2d8 R09: 00000000fffffffe
     R10: 0000000000000000 R11: 0000000000000000 R12: 00000000fffffffe
     R13: ffff8d3d472f2000 R14: 0000000000000003 R15: 0000000000000000
     FS:  00007f440b6c2740(0000) GS:ffff8d3dc9803000(0000) knlGS:0000000000000000
     CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: 000000003cdd2000 CR3: 0000000007b58002 CR4: 0000000000172ef0
     Call Trace:
      <TASK>
      ets_qdisc_change+0x870/0xf40 [sch_ets]
      qdisc_create+0x12b/0x540
      tc_modify_qdisc+0x6d7/0xbd0
      rtnetlink_rcv_msg+0x168/0x6b0
      netlink_rcv_skb+0x5c/0x110
      netlink_unicast+0x1d6/0x2b0
      netlink_sendmsg+0x22e/0x470
      ____sys_sendmsg+0x38a/0x3c0
      ___sys_sendmsg+0x99/0xe0
      __sys_sendmsg+0x8a/0xf0
      do_syscall_64+0x111/0xf80
      entry_SYSCALL_64_after_hwframe+0x77/0x7f
     RIP: 0033:0x7f440b81c77e
     Code: 4d 89 d8 e8 d4 bc 00 00 4c 8b 5d f8 41 8b 93 08 03 00 00 59 5e 48 83 f8 fc 74 11 c9 c3 0f 1f 80 00 00 00 00 48 8b 45 10 0f 05 <c9> c3 83 e2 39 83 fa 08 75 e7 e8 13 ff ff ff 0f 1f 00 f3 0f 1e fa
     RSP: 002b:00007fff951e4c10 EFLAGS: 00000202 ORIG_RAX: 000000000000002e
     RAX: ffffffffffffffda RBX: 0000000000481820 RCX: 00007f440b81c77e
     RDX: 0000000000000000 RSI: 00007fff951e4cd0 RDI: 0000000000000003
     RBP: 00007fff951e4c20 R08: 0000000000000000 R09: 0000000000000000
     R10: 0000000000000000 R11: 0000000000000202 R12: 00007fff951f4fa8
     R13: 00000000699ddede R14: 00007f440bb01000 R15: 0000000000486980
      </TASK>
     Modules linked in: sch_ets(E) netdevsim(E)
     ---[ end trace 0000000000000000 ]---
     RIP: 0010:ets_offload_change+0x11f/0x290 [sch_ets]
     Code: e4 45 31 ff eb 03 41 89 c7 41 89 cb 89 ce 83 f9 0f 0f 87 b7 00 00 00 45 8b 08 31 c0 45 01 cc 45 85 c9 74 09 41 6b c4 64 31 d2 <41> f7 f2 89 c2 44 29 fa 45 89 df 41 83 fb 0f 0f 87 c7 00 00 00 44
     RSP: 0018:ffffd0a180d77588 EFLAGS: 00010246
     RAX: 00000000ffffff38 RBX: ffff8d3d482ca000 RCX: 0000000000000000
     RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffffd0a180d77660
     RBP: ffffd0a180d77690 R08: ffff8d3d482ca2d8 R09: 00000000fffffffe
     R10: 0000000000000000 R11: 0000000000000000 R12: 00000000fffffffe
     R13: ffff8d3d472f2000 R14: 0000000000000003 R15: 0000000000000000
     FS:  00007f440b6c2740(0000) GS:ffff8d3dc9803000(0000) knlGS:0000000000000000
     CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: 000000003cdd2000 CR3: 0000000007b58002 CR4: 0000000000172ef0
     Kernel panic - not syncing: Fatal exception
     Kernel Offset: 0x30000000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
     ---[ end Kernel panic - not syncing: Fatal exception ]---
    
    Fix this using 64-bit integers for 'q_sum' and 'q_psum'.
    
    Cc: stable@vger.kernel.org
    Fixes: d35eb52bd2ac ("net: sch_ets: Make the ETS qdisc offloadable")
    Signed-off-by: Davide Caratti <dcaratti@redhat.com>
    Reviewed-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Reviewed-by: Petr Machata <petrm@nvidia.com>
    Link: https://patch.msgid.link/28504887df314588c7255e9911769c36f751edee.1771964872.git.dcaratti@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net/sched: Only allow act_ct to bind to clsact/ingress qdiscs and shared blocks [+ + +]
Author: Victor Nogueira <victor@mojatatu.com>
Date:   Wed Feb 25 10:43:48 2026 -0300

    net/sched: Only allow act_ct to bind to clsact/ingress qdiscs and shared blocks
    
    commit 11cb63b0d1a0685e0831ae3c77223e002ef18189 upstream.
    
    As Paolo said earlier [1]:
    
    "Since the blamed commit below, classify can return TC_ACT_CONSUMED while
    the current skb being held by the defragmentation engine. As reported by
    GangMin Kim, if such packet is that may cause a UaF when the defrag engine
    later on tries to tuch again such packet."
    
    act_ct was never meant to be used in the egress path, however some users
    are attaching it to egress today [2]. Attempting to reach a middle
    ground, we noticed that, while most qdiscs are not handling
    TC_ACT_CONSUMED, clsact/ingress qdiscs are. With that in mind, we
    address the issue by only allowing act_ct to bind to clsact/ingress
    qdiscs and shared blocks. That way it's still possible to attach act_ct to
    egress (albeit only with clsact).
    
    [1] https://lore.kernel.org/netdev/674b8cbfc385c6f37fb29a1de08d8fe5c2b0fbee.1771321118.git.pabeni@redhat.com/
    [2] https://lore.kernel.org/netdev/cc6bfb4a-4a2b-42d8-b9ce-7ef6644fb22b@ovn.org/
    
    Reported-by: GangMin Kim <km.kim1503@gmail.com>
    Fixes: 3f14b377d01d ("net/sched: act_ct: fix skb leak and crash on ooo frags")
    CC: stable@vger.kernel.org
    Signed-off-by: Victor Nogueira <victor@mojatatu.com>
    Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Link: https://patch.msgid.link/20260225134349.1287037-1-victor@mojatatu.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net/sched: teql: Fix double-free in teql_master_xmit [+ + +]
Author: Jamal Hadi Salim <jhs@mojatatu.com>
Date:   Sun Mar 15 11:54:22 2026 -0400

    net/sched: teql: Fix double-free in teql_master_xmit
    
    [ Upstream commit 66360460cab63c248ca5b1070a01c0c29133b960 ]
    
    Whenever a TEQL devices has a lockless Qdisc as root, qdisc_reset should
    be called using the seq_lock to avoid racing with the datapath. Failure
    to do so may cause crashes like the following:
    
    [  238.028993][  T318] BUG: KASAN: double-free in skb_release_data (net/core/skbuff.c:1139)
    [  238.029328][  T318] Free of addr ffff88810c67ec00 by task poc_teql_uaf_ke/318
    [  238.029749][  T318]
    [  238.029900][  T318] CPU: 3 UID: 0 PID: 318 Comm: poc_teql_ke Not tainted 7.0.0-rc3-00149-ge5b31d988a41 #704 PREEMPT(full)
    [  238.029906][  T318] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
    [  238.029910][  T318] Call Trace:
    [  238.029913][  T318]  <TASK>
    [  238.029916][  T318]  dump_stack_lvl (lib/dump_stack.c:122)
    [  238.029928][  T318]  print_report (mm/kasan/report.c:379 mm/kasan/report.c:482)
    [  238.029940][  T318]  ? skb_release_data (net/core/skbuff.c:1139)
    [  238.029944][  T318]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    ...
    [  238.029957][  T318]  ? skb_release_data (net/core/skbuff.c:1139)
    [  238.029969][  T318]  kasan_report_invalid_free (mm/kasan/report.c:221 mm/kasan/report.c:563)
    [  238.029979][  T318]  ? skb_release_data (net/core/skbuff.c:1139)
    [  238.029989][  T318]  check_slab_allocation (mm/kasan/common.c:231)
    [  238.029995][  T318]  kmem_cache_free (mm/slub.c:2637 (discriminator 1) mm/slub.c:6168 (discriminator 1) mm/slub.c:6298 (discriminator 1))
    [  238.030004][  T318]  skb_release_data (net/core/skbuff.c:1139)
    ...
    [  238.030025][  T318]  sk_skb_reason_drop (net/core/skbuff.c:1256)
    [  238.030032][  T318]  pfifo_fast_reset (./include/linux/ptr_ring.h:171 ./include/linux/ptr_ring.h:309 ./include/linux/skb_array.h:98 net/sched/sch_generic.c:827)
    [  238.030039][  T318]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    ...
    [  238.030054][  T318]  qdisc_reset (net/sched/sch_generic.c:1034)
    [  238.030062][  T318]  teql_destroy (./include/linux/spinlock.h:395 net/sched/sch_teql.c:157)
    [  238.030071][  T318]  __qdisc_destroy (./include/net/pkt_sched.h:328 net/sched/sch_generic.c:1077)
    [  238.030077][  T318]  qdisc_graft (net/sched/sch_api.c:1062 net/sched/sch_api.c:1053 net/sched/sch_api.c:1159)
    [  238.030089][  T318]  ? __pfx_qdisc_graft (net/sched/sch_api.c:1091)
    [  238.030095][  T318]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [  238.030102][  T318]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [  238.030106][  T318]  ? srso_alias_return_thunk (arch/x86/lib/retpoline.S:221)
    [  238.030114][  T318]  tc_get_qdisc (net/sched/sch_api.c:1529 net/sched/sch_api.c:1556)
    ...
    [  238.072958][  T318] Allocated by task 303 on cpu 5 at 238.026275s:
    [  238.073392][  T318]  kasan_save_stack (mm/kasan/common.c:58)
    [  238.073884][  T318]  kasan_save_track (mm/kasan/common.c:64 (discriminator 5) mm/kasan/common.c:79 (discriminator 5))
    [  238.074230][  T318]  __kasan_slab_alloc (mm/kasan/common.c:369)
    [  238.074578][  T318]  kmem_cache_alloc_node_noprof (./include/linux/kasan.h:253 mm/slub.c:4542 mm/slub.c:4869 mm/slub.c:4921)
    [  238.076091][  T318]  kmalloc_reserve (net/core/skbuff.c:616 (discriminator 107))
    [  238.076450][  T318]  __alloc_skb (net/core/skbuff.c:713)
    [  238.076834][  T318]  alloc_skb_with_frags (./include/linux/skbuff.h:1383 net/core/skbuff.c:6763)
    [  238.077178][  T318]  sock_alloc_send_pskb (net/core/sock.c:2997)
    [  238.077520][  T318]  packet_sendmsg (net/packet/af_packet.c:2926 net/packet/af_packet.c:3019 net/packet/af_packet.c:3108)
    [  238.081469][  T318]
    [  238.081870][  T318] Freed by task 299 on cpu 1 at 238.028496s:
    [  238.082761][  T318]  kasan_save_stack (mm/kasan/common.c:58)
    [  238.083481][  T318]  kasan_save_track (mm/kasan/common.c:64 (discriminator 5) mm/kasan/common.c:79 (discriminator 5))
    [  238.085348][  T318]  kasan_save_free_info (mm/kasan/generic.c:587 (discriminator 1))
    [  238.085900][  T318]  __kasan_slab_free (mm/kasan/common.c:287)
    [  238.086439][  T318]  kmem_cache_free (mm/slub.c:6168 (discriminator 3) mm/slub.c:6298 (discriminator 3))
    [  238.087007][  T318]  skb_release_data (net/core/skbuff.c:1139)
    [  238.087491][  T318]  consume_skb (net/core/skbuff.c:1451)
    [  238.087757][  T318]  teql_master_xmit (net/sched/sch_teql.c:358)
    [  238.088116][  T318]  dev_hard_start_xmit (./include/linux/netdevice.h:5324 ./include/linux/netdevice.h:5333 net/core/dev.c:3871 net/core/dev.c:3887)
    [  238.088468][  T318]  sch_direct_xmit (net/sched/sch_generic.c:347)
    [  238.088820][  T318]  __qdisc_run (net/sched/sch_generic.c:420 (discriminator 1))
    [  238.089166][  T318]  __dev_queue_xmit (./include/net/sch_generic.h:229 ./include/net/pkt_sched.h:121 ./include/net/pkt_sched.h:117 net/core/dev.c:4196 net/core/dev.c:4802)
    
    Workflow to reproduce:
    1. Initialize a TEQL topology (dummy0 and ifb0 as slaves, teql0 up).
    2. Start multiple sender workers continuously transmitting packets
       through teql0 to drive teql_master_xmit().
    3. In parallel, repeatedly delete and re-add the root qdisc on
       dummy0 and ifb0 via RTNETLINK, forcing frequent teardown and reset activity
       (teql_destroy() / qdisc_reset()).
    4. After running both workloads concurrently for several iterations,
       KASAN reports slab-use-after-free or double-free in the skb free path.
    
    Fix this by moving dev_reset_queue to sch_generic.h and calling it, instead
    of qdisc_reset, in teql_destroy since it handles both the lock and lockless
    cases correctly for root qdiscs.
    
    Fixes: 96009c7d500e ("sched: replace __QDISC_STATE_RUNNING bit with a spin lock")
    Reported-by: Xianrui Dong <keenanat2000@gmail.com>
    Tested-by: Xianrui Dong <keenanat2000@gmail.com>
    Co-developed-by: Victor Nogueira <victor@mojatatu.com>
    Signed-off-by: Victor Nogueira <victor@mojatatu.com>
    Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Link: https://patch.msgid.link/20260315155422.147256-1-jhs@mojatatu.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/smc: fix NULL dereference and UAF in smc_tcp_syn_recv_sock() [+ + +]
Author: Jiayuan Chen <jiayuan.chen@shopee.com>
Date:   Thu Mar 12 17:29:07 2026 +0800

    net/smc: fix NULL dereference and UAF in smc_tcp_syn_recv_sock()
    
    [ Upstream commit 6d5e4538364b9ceb1ac2941a4deb86650afb3538 ]
    
    Syzkaller reported a panic in smc_tcp_syn_recv_sock() [1].
    
    smc_tcp_syn_recv_sock() is called in the TCP receive path
    (softirq) via icsk_af_ops->syn_recv_sock on the clcsock (TCP
    listening socket). It reads sk_user_data to get the smc_sock
    pointer. However, when the SMC listen socket is being closed
    concurrently, smc_close_active() sets clcsock->sk_user_data
    to NULL under sk_callback_lock, and then the smc_sock itself
    can be freed via sock_put() in smc_release().
    
    This leads to two issues:
    
    1) NULL pointer dereference: sk_user_data is NULL when
       accessed.
    2) Use-after-free: sk_user_data is read as non-NULL, but the
       smc_sock is freed before its fields (e.g., queued_smc_hs,
       ori_af_ops) are accessed.
    
    The race window looks like this (the syzkaller crash [1]
    triggers via the SYN cookie path: tcp_get_cookie_sock() ->
    smc_tcp_syn_recv_sock(), but the normal tcp_check_req() path
    has the same race):
    
      CPU A (softirq)              CPU B (process ctx)
    
      tcp_v4_rcv()
        TCP_NEW_SYN_RECV:
        sk = req->rsk_listener
        sock_hold(sk)
        /* No lock on listener */
                                   smc_close_active():
                                     write_lock_bh(cb_lock)
                                     sk_user_data = NULL
                                     write_unlock_bh(cb_lock)
                                     ...
                                     smc_clcsock_release()
                                     sock_put(smc->sk) x2
                                       -> smc_sock freed!
        tcp_check_req()
          smc_tcp_syn_recv_sock():
            smc = user_data(sk)
              -> NULL or dangling
            smc->queued_smc_hs
              -> crash!
    
    Note that the clcsock and smc_sock are two independent objects
    with separate refcounts. TCP stack holds a reference on the
    clcsock, which keeps it alive, but this does NOT prevent the
    smc_sock from being freed.
    
    Fix this by using RCU and refcount_inc_not_zero() to safely
    access smc_sock. Since smc_tcp_syn_recv_sock() is called in
    the TCP three-way handshake path, taking read_lock_bh on
    sk_callback_lock is too heavy and would not survive a SYN
    flood attack. Using rcu_read_lock() is much more lightweight.
    
    - Set SOCK_RCU_FREE on the SMC listen socket so that
      smc_sock freeing is deferred until after the RCU grace
      period. This guarantees the memory is still valid when
      accessed inside rcu_read_lock().
    - Use rcu_read_lock() to protect reading sk_user_data.
    - Use refcount_inc_not_zero(&smc->sk.sk_refcnt) to pin the
      smc_sock. If the refcount has already reached zero (close
      path completed), it returns false and we bail out safely.
    
    Note: smc_hs_congested() has a similar lockless read of
    sk_user_data without rcu_read_lock(), but it only checks for
    NULL and accesses the global smc_hs_wq, never dereferencing
    any smc_sock field, so it is not affected.
    
    Reproducer was verified with mdelay injection and smc_run,
    the issue no longer occurs with this patch applied.
    
    [1] https://syzkaller.appspot.com/bug?extid=827ae2bfb3a3529333e9
    
    Fixes: 8270d9c21041 ("net/smc: Limit backlog connections")
    Reported-by: syzbot+827ae2bfb3a3529333e9@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/all/67eaf9b8.050a0220.3c3d88.004a.GAE@google.com/T/
    Suggested-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Jiayuan Chen <jiayuan.chen@shopee.com>
    Link: https://patch.msgid.link/20260312092909.48325-1-jiayuan.chen@linux.dev
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/tcp-md5: Fix MAC comparison to be constant-time [+ + +]
Author: Eric Biggers <ebiggers@kernel.org>
Date:   Tue Mar 10 13:17:01 2026 -0700

    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 support for segmenting TCP fraglist GSO packets [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Mon Mar 2 14:55:13 2026 +0800

    net: add support for segmenting TCP fraglist GSO packets
    
    [ Upstream commit bee88cd5bd83d40b8aec4d6cb729378f707f6197 ]
    
    Preparation for adding TCP fraglist GRO support. It expects packets to be
    combined in a similar way as UDP fraglist GSO packets.
    For IPv4 packets, NAT is handled in the same way as UDP fraglist GSO.
    
    Acked-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Li hongliang <1468888505@139.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: arcnet: com20020-pci: fix support for 2.5Mbit cards [+ + +]
Author: Ethan Nelson-Moore <enelsonmoore@gmail.com>
Date:   Thu Feb 12 20:55:09 2026 -0800

    net: arcnet: com20020-pci: fix support for 2.5Mbit cards
    
    [ Upstream commit c7d9be66b71af490446127c6ffcb66d6bb71b8b9 ]
    
    Commit 8c14f9c70327 ("ARCNET: add com20020 PCI IDs with metadata")
    converted the com20020-pci driver to use a card info structure instead
    of a single flag mask in driver_data. However, it failed to take into
    account that in the original code, driver_data of 0 indicates a card
    with no special flags, not a card that should not have any card info
    structure. This introduced a null pointer dereference when cards with
    no flags were probed.
    
    Commit bd6f1fd5d33d ("net: arcnet: com20020: Fix null-ptr-deref in
    com20020pci_probe()") then papered over this issue by rejecting cards
    with no driver_data instead of resolving the problem at its source.
    
    Fix the original issue by introducing a new card info structure for
    2.5Mbit cards that does not set any flags and using it if no
    driver_data is present.
    
    Fixes: 8c14f9c70327 ("ARCNET: add com20020 PCI IDs with metadata")
    Fixes: bd6f1fd5d33d ("net: arcnet: com20020: Fix null-ptr-deref in com20020pci_probe()")
    Cc: stable@vger.kernel.org
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Ethan Nelson-Moore <enelsonmoore@gmail.com>
    Link: https://patch.msgid.link/20260213045510.32368-1-enelsonmoore@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: bcmgenet: increase WoL poll timeout [+ + +]
Author: Justin Chen <justin.chen@broadcom.com>
Date:   Thu Mar 12 12:18:52 2026 -0700

    net: bcmgenet: increase WoL poll timeout
    
    [ Upstream commit 6cfc3bc02b977f2fba5f7268e6504d1931a774f7 ]
    
    Some systems require more than 5ms to get into WoL mode. Increase the
    timeout value to 50ms.
    
    Fixes: c51de7f3976b ("net: bcmgenet: add Wake-on-LAN support code")
    Signed-off-by: Justin Chen <justin.chen@broadcom.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://patch.msgid.link/20260312191852.3904571-1-justin.chen@broadcom.com
    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: bonding: fix NULL deref in bond_debug_rlb_hash_show [+ + +]
Author: Xiang Mei <xmei5@asu.edu>
Date:   Mon Mar 16 17:50:34 2026 -0700

    net: bonding: fix NULL deref in bond_debug_rlb_hash_show
    
    [ Upstream commit 605b52497bf89b3b154674deb135da98f916e390 ]
    
    rlb_clear_slave intentionally keeps RLB hash-table entries on
    the rx_hashtbl_used_head list with slave set to NULL when no
    replacement slave is available. However, bond_debug_rlb_hash_show
    visites client_info->slave without checking if it's NULL.
    
    Other used-list iterators in bond_alb.c already handle this NULL-slave
    state safely:
    
    - rlb_update_client returns early on !client_info->slave
    - rlb_req_update_slave_clients, rlb_clear_slave, and rlb_rebalance
    compare slave values before visiting
    - lb_req_update_subnet_clients continues if slave is NULL
    
    The following NULL deref crash can be trigger in
    bond_debug_rlb_hash_show:
    
    [    1.289791] BUG: kernel NULL pointer dereference, address: 0000000000000000
    [    1.292058] RIP: 0010:bond_debug_rlb_hash_show (drivers/net/bonding/bond_debugfs.c:41)
    [    1.293101] RSP: 0018:ffffc900004a7d00 EFLAGS: 00010286
    [    1.293333] RAX: 0000000000000000 RBX: ffff888102b48200 RCX: ffff888102b48204
    [    1.293631] RDX: ffff888102b48200 RSI: ffffffff839daad5 RDI: ffff888102815078
    [    1.293924] RBP: ffff888102815078 R08: ffff888102b4820e R09: 0000000000000000
    [    1.294267] R10: 0000000000000000 R11: 0000000000000000 R12: ffff888100f929c0
    [    1.294564] R13: ffff888100f92a00 R14: 0000000000000001 R15: ffffc900004a7ed8
    [    1.294864] FS:  0000000001395380(0000) GS:ffff888196e75000(0000) knlGS:0000000000000000
    [    1.295239] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [    1.295480] CR2: 0000000000000000 CR3: 0000000102adc004 CR4: 0000000000772ef0
    [    1.295897] Call Trace:
    [    1.296134]  seq_read_iter (fs/seq_file.c:231)
    [    1.296341]  seq_read (fs/seq_file.c:164)
    [    1.296493]  full_proxy_read (fs/debugfs/file.c:378 (discriminator 1))
    [    1.296658]  vfs_read (fs/read_write.c:572)
    [    1.296981]  ksys_read (fs/read_write.c:717)
    [    1.297132]  do_syscall_64 (arch/x86/entry/syscall_64.c:63 (discriminator 1) arch/x86/entry/syscall_64.c:94 (discriminator 1))
    [    1.297325]  entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
    
    Add a NULL check and print "(none)" for entries with no assigned slave.
    
    Fixes: caafa84251b88 ("bonding: add the debugfs interface to see RLB hash table")
    Reported-by: Weiming Shi <bestswngs@gmail.com>
    Signed-off-by: Xiang Mei <xmei5@asu.edu>
    Link: https://patch.msgid.link/20260317005034.1888794-1-xmei5@asu.edu
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: bridge: fix nd_tbl NULL dereference when IPv6 is disabled [+ + +]
Author: Fernando Fernandez Mancera <fmancera@suse.de>
Date:   Wed Mar 4 13:03:56 2026 +0100

    net: bridge: fix nd_tbl NULL dereference when IPv6 is disabled
    
    [ Upstream commit e5e890630533bdc15b26a34bb8e7ef539bdf1322 ]
    
    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. Then, if neigh_suppress is enabled and an ICMPv6
    Neighbor Discovery packet reaches the bridge, br_do_suppress_nd() will
    dereference ipv6_stub->nd_tbl which is NULL, passing it to
    neigh_lookup(). This causes a kernel NULL pointer dereference.
    
     BUG: kernel NULL pointer dereference, address: 0000000000000268
     Oops: 0000 [#1] PREEMPT SMP NOPTI
     [...]
     RIP: 0010:neigh_lookup+0x16/0xe0
     [...]
     Call Trace:
      <IRQ>
      ? neigh_lookup+0x16/0xe0
      br_do_suppress_nd+0x160/0x290 [bridge]
      br_handle_frame_finish+0x500/0x620 [bridge]
      br_handle_frame+0x353/0x440 [bridge]
      __netif_receive_skb_core.constprop.0+0x298/0x1110
      __netif_receive_skb_one_core+0x3d/0xa0
      process_backlog+0xa0/0x140
      __napi_poll+0x2c/0x170
      net_rx_action+0x2c4/0x3a0
      handle_softirqs+0xd0/0x270
      do_softirq+0x3f/0x60
    
    Fix this by replacing IS_ENABLED(IPV6) call with ipv6_mod_enabled() in
    the callers. This is in essence disabling NS/NA suppression when IPv6 is
    disabled.
    
    Fixes: ed842faeb2bd ("bridge: suppress nd pkts on BR_NEIGH_SUPPRESS ports")
    Reported-by: Guruprasad C P <gurucp2005@gmail.com>
    Closes: https://lore.kernel.org/netdev/CAHXs0ORzd62QOG-Fttqa2Cx_A_VFp=utE2H2VTX5nqfgs7LDxQ@mail.gmail.com/
    Signed-off-by: Fernando Fernandez Mancera <fmancera@suse.de>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
    Link: https://patch.msgid.link/20260304120357.9778-1-fmancera@suse.de
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: bcm_sf2: fix missing clk_disable_unprepare() in error paths [+ + +]
Author: Anas Iqbal <mohd.abd.6602@gmail.com>
Date:   Wed Mar 18 08:42:12 2026 +0000

    net: dsa: bcm_sf2: fix missing clk_disable_unprepare() in error paths
    
    [ Upstream commit b48731849609cbd8c53785a48976850b443153fd ]
    
    Smatch reports:
    drivers/net/dsa/bcm_sf2.c:997 bcm_sf2_sw_resume() warn:
    'priv->clk' from clk_prepare_enable() not released on lines: 983,990.
    
    The clock enabled by clk_prepare_enable() in bcm_sf2_sw_resume()
    is not released if bcm_sf2_sw_rst() or bcm_sf2_cfp_resume() fails.
    
    Add the missing clk_disable_unprepare() calls in the error paths
    to properly release the clock resource.
    
    Fixes: e9ec5c3bd238 ("net: dsa: bcm_sf2: request and handle clocks")
    Reviewed-by: Jonas Gorski <jonas.gorski@gmail.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Anas Iqbal <mohd.abd.6602@gmail.com>
    Link: https://patch.msgid.link/20260318084212.1287-1-mohd.abd.6602@gmail.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: properly keep track of conduit reference [+ + +]
Author: Vladimir Oltean <vladimir.oltean@nxp.com>
Date:   Mon Dec 15 17:02:35 2025 +0200

    net: dsa: properly keep track of conduit reference
    
    commit 06e219f6a706c367c93051f408ac61417643d2f9 upstream.
    
    Problem description
    -------------------
    
    DSA has a mumbo-jumbo of reference handling of the conduit net device
    and its kobject which, sadly, is just wrong and doesn't make sense.
    
    There are two distinct problems.
    
    1. The OF path, which uses of_find_net_device_by_node(), never releases
       the elevated refcount on the conduit's kobject. Nominally, the OF and
       non-OF paths should result in objects having identical reference
       counts taken, and it is already suspicious that
       dsa_dev_to_net_device() has a put_device() call which is missing in
       dsa_port_parse_of(), but we can actually even verify that an issue
       exists. With CONFIG_DEBUG_KOBJECT_RELEASE=y, if we run this command
       "before" and "after" applying this patch:
    
    (unbind the conduit driver for net device eno2)
    echo 0000:00:00.2 > /sys/bus/pci/drivers/fsl_enetc/unbind
    
    we see these lines in the output diff which appear only with the patch
    applied:
    
    kobject: 'eno2' (ffff002009a3a6b8): kobject_release, parent 0000000000000000 (delayed 1000)
    kobject: '109' (ffff0020099d59a0): kobject_release, parent 0000000000000000 (delayed 1000)
    
    2. After we find the conduit interface one way (OF) or another (non-OF),
       it can get unregistered at any time, and DSA remains with a long-lived,
       but in this case stale, cpu_dp->conduit pointer. Holding the net
       device's underlying kobject isn't actually of much help, it just
       prevents it from being freed (but we never need that kobject
       directly). What helps us to prevent the net device from being
       unregistered is the parallel netdev reference mechanism (dev_hold()
       and dev_put()).
    
    Actually we actually use that netdev tracker mechanism implicitly on
    user ports since commit 2f1e8ea726e9 ("net: dsa: link interfaces with
    the DSA master to get rid of lockdep warnings"), via netdev_upper_dev_link().
    But time still passes at DSA switch probe time between the initial
    of_find_net_device_by_node() code and the user port creation time, time
    during which the conduit could unregister itself and DSA wouldn't know
    about it.
    
    So we have to run of_find_net_device_by_node() under rtnl_lock() to
    prevent that from happening, and release the lock only with the netdev
    tracker having acquired the reference.
    
    Do we need to keep the reference until dsa_unregister_switch() /
    dsa_switch_shutdown()?
    1: Maybe yes. A switch device will still be registered even if all user
       ports failed to probe, see commit 86f8b1c01a0a ("net: dsa: Do not
       make user port errors fatal"), and the cpu_dp->conduit pointers
       remain valid.  I haven't audited all call paths to see whether they
       will actually use the conduit in lack of any user port, but if they
       do, it seems safer to not rely on user ports for that reference.
    2. Definitely yes. We support changing the conduit which a user port is
       associated to, and we can get into a situation where we've moved all
       user ports away from a conduit, thus no longer hold any reference to
       it via the net device tracker. But we shouldn't let it go nonetheless
       - see the next change in relation to dsa_tree_find_first_conduit()
       and LAG conduits which disappear.
       We have to be prepared to return to the physical conduit, so the CPU
       port must explicitly keep another reference to it. This is also to
       say: the user ports and their CPU ports may not always keep a
       reference to the same conduit net device, and both are needed.
    
    As for the conduit's kobject for the /sys/class/net/ entry, we don't
    care about it, we can release it as soon as we hold the net device
    object itself.
    
    History and blame attribution
    -----------------------------
    
    The code has been refactored so many times, it is very difficult to
    follow and properly attribute a blame, but I'll try to make a short
    history which I hope to be correct.
    
    We have two distinct probing paths:
    - one for OF, introduced in 2016 in commit 83c0afaec7b7 ("net: dsa: Add
      new binding implementation")
    - one for non-OF, introduced in 2017 in commit 71e0bbde0d88 ("net: dsa:
      Add support for platform data")
    
    These are both complete rewrites of the original probing paths (which
    used struct dsa_switch_driver and other weird stuff, instead of regular
    devices on their respective buses for register access, like MDIO, SPI,
    I2C etc):
    - one for OF, introduced in 2013 in commit 5e95329b701c ("dsa: add
      device tree bindings to register DSA switches")
    - one for non-OF, introduced in 2008 in commit 91da11f870f0 ("net:
      Distributed Switch Architecture protocol support")
    
    except for tiny bits and pieces like dsa_dev_to_net_device() which were
    seemingly carried over since the original commit, and used to this day.
    
    The point is that the original probing paths received a fix in 2015 in
    the form of commit 679fb46c5785 ("net: dsa: Add missing master netdev
    dev_put() calls"), but the fix never made it into the "new" (dsa2)
    probing paths that can still be traced to today, and the fixed probing
    path was later deleted in 2019 in commit 93e86b3bc842 ("net: dsa: Remove
    legacy probing support").
    
    That is to say, the new probing paths were never quite correct in this
    area.
    
    The existence of the legacy probing support which was deleted in 2019
    explains why dsa_dev_to_net_device() returns a conduit with elevated
    refcount (because it was supposed to be released during
    dsa_remove_dst()). After the removal of the legacy code, the only user
    of dsa_dev_to_net_device() calls dev_put(conduit) immediately after this
    function returns. This pattern makes no sense today, and can only be
    interpreted historically to understand why dev_hold() was there in the
    first place.
    
    Change details
    --------------
    
    Today we have a better netdev tracking infrastructure which we should
    use. Logically netdev_hold() belongs in common code
    (dsa_port_parse_cpu(), where dp->conduit is assigned), but there is a
    tradeoff to be made with the rtnl_lock() section which would become a
    bit too long if we did that - dsa_port_parse_cpu() also calls
    request_module(). So we duplicate a bit of logic in order for the
    callers of dsa_port_parse_cpu() to be the ones responsible of holding
    the conduit reference and releasing it on error. This shortens the
    rtnl_lock() section significantly.
    
    In the dsa_switch_probe() error path, dsa_switch_release_ports() will be
    called in a number of situations, one being where dsa_port_parse_cpu()
    maybe didn't get the chance to run at all (a different port failed
    earlier, etc). So we have to test for the conduit being NULL prior to
    calling netdev_put().
    
    There have still been so many transformations to the code since the
    blamed commits (rename master -> conduit, commit 0650bf52b31f ("net:
    dsa: be compatible with masters which unregister on shutdown")), that it
    only makes sense to fix the code using the best methods available today
    and see how it can be backported to stable later. I suspect the fix
    cannot even be backported to kernels which lack dsa_switch_shutdown(),
    and I suspect this is also maybe why the long-lived conduit reference
    didn't make it into the new DSA probing paths at the time (problems
    during shutdown).
    
    Because dsa_dev_to_net_device() has a single call site and has to be
    changed anyway, the logic was just absorbed into the non-OF
    dsa_port_parse().
    
    Tested on the ocelot/felix switch and on dsa_loop, both on the NXP
    LS1028A with CONFIG_DEBUG_KOBJECT_RELEASE=y.
    
    Reported-by: Ma Ke <make24@iscas.ac.cn>
    Closes: https://lore.kernel.org/netdev/20251214131204.4684-1-make24@iscas.ac.cn/
    Fixes: 83c0afaec7b7 ("net: dsa: Add new binding implementation")
    Fixes: 71e0bbde0d88 ("net: dsa: Add support for platform data")
    Reviewed-by: Jonas Gorski <jonas.gorski@gmail.com>
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Link: https://patch.msgid.link/20251215150236.3931670-1-vladimir.oltean@nxp.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    [ backport: "conduit" -> "master" in code, kept original commit message ]
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: dsa: realtek: rtl8365mb: fix rtl8365mb_phy_ocp_write return value [+ + +]
Author: Mieczyslaw Nalewaj <namiltd@yahoo.com>
Date:   Sun Mar 1 18:13:14 2026 -0300

    net: dsa: realtek: rtl8365mb: fix rtl8365mb_phy_ocp_write return value
    
    [ Upstream commit 7cbe98f7bef965241a5908d50d557008cf998aee ]
    
    Function rtl8365mb_phy_ocp_write() always returns 0, even when an error
    occurs during register access. This patch fixes the return value to
    propagate the actual error code from regmap operations.
    
    Link: https://lore.kernel.org/netdev/a2dfde3c-d46f-434b-9d16-1e251e449068@yahoo.com/
    Fixes: 2796728460b8 ("net: dsa: realtek: rtl8365mb: serialize indirect PHY register access")
    Signed-off-by: Mieczyslaw Nalewaj <namiltd@yahoo.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Luiz Angelo Daros de Luca <luizluca@gmail.com>
    Reviewed-by: Linus Walleij <linusw@kernel.org>
    Link: https://patch.msgid.link/20260301-realtek_namiltd_fix1-v1-1-43a6bb707f9c@gmail.com
    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: 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: mtk_eth_soc: Reset prog ptr to old_prog in case of error in mtk_xdp_setup() [+ + +]
Author: Lorenzo Bianconi <lorenzo@kernel.org>
Date:   Tue Mar 3 18:56:39 2026 +0100

    net: ethernet: mtk_eth_soc: Reset prog ptr to old_prog in case of error in mtk_xdp_setup()
    
    [ Upstream commit 0abc73c8a40fd64ac1739c90bb4f42c418d27a5e ]
    
    Reset eBPF program pointer to old_prog and do not decrease its ref-count
    if mtk_open routine in mtk_xdp_setup() fails.
    
    Fixes: 7c26c20da5d42 ("net: ethernet: mtk_eth_soc: add basic XDP support")
    Suggested-by: Paolo Valerio <pvalerio@redhat.com>
    Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
    Link: https://patch.msgid.link/20260303-mtk-xdp-prog-ptr-fix-v2-1-97b6dbbe240f@kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ethernet: ti: am65-cpsw-nuss/cpsw-ale: Fix multicast entry handling in ALE table [+ + +]
Author: Chintan Vankar <c-vankar@ti.com>
Date:   Tue Feb 24 23:43:59 2026 +0530

    net: ethernet: ti: am65-cpsw-nuss/cpsw-ale: Fix multicast entry handling in ALE table
    
    [ Upstream commit be11a537224d72b906db6b98510619770298c8a4 ]
    
    In the current implementation, flushing multicast entries in MAC mode
    incorrectly deletes entries for all ports instead of only the target port,
    disrupting multicast traffic on other ports. The cause is adding multicast
    entries by setting only host port bit, and not setting the MAC port bits.
    
    Fix this by setting the MAC port's bit in the port mask while adding the
    multicast entry. Also fix the flush logic to preserve the host port bit
    during removal of MAC port and free ALE entries when mask contains only
    host port.
    
    Fixes: 5c50a856d550 ("drivers: net: ethernet: cpsw: add multicast address to ALE table")
    Signed-off-by: Chintan Vankar <c-vankar@ti.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20260224181359.2055322-1-c-vankar@ti.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: fix segmentation of forwarding fraglist GRO [+ + +]
Author: Jibin Zhang <jibin.zhang@mediatek.com>
Date:   Mon Mar 2 14:55:28 2026 +0800

    net: fix segmentation of forwarding fraglist GRO
    
    [ Upstream commit 426ca15c7f6cb6562a081341ca88893a50c59fa2 ]
    
    This patch enhances GSO segment handling by properly checking
    the SKB_GSO_DODGY flag for frag_list GSO packets, addressing
    low throughput issues observed when a station accesses IPv4
    servers via hotspots with an IPv6-only upstream interface.
    
    Specifically, it fixes a bug in GSO segmentation when forwarding
    GRO packets containing a frag_list. The function skb_segment_list
    cannot correctly process GRO skbs that have been converted by XLAT,
    since XLAT only translates the header of the head skb. Consequently,
    skbs in the frag_list may remain untranslated, resulting in protocol
    inconsistencies and reduced throughput.
    
    To address this, the patch explicitly sets the SKB_GSO_DODGY flag
    for GSO packets in XLAT's IPv4/IPv6 protocol translation helpers
    (bpf_skb_proto_4_to_6 and bpf_skb_proto_6_to_4). This marks GSO
    packets as potentially modified after protocol translation. As a
    result, GSO segmentation will avoid using skb_segment_list and
    instead falls back to skb_segment for packets with the SKB_GSO_DODGY
    flag. This ensures that only safe and fully translated frag_list
    packets are processed by skb_segment_list, resolving protocol
    inconsistencies and improving throughput when forwarding GRO packets
    converted by XLAT.
    
    Signed-off-by: Jibin Zhang <jibin.zhang@mediatek.com>
    Fixes: 9fd1ff5d2ac7 ("udp: Support UDP fraglist GRO/GSO.")
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260126152114.1211-1-jibin.zhang@mediatek.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Li hongliang <1468888505@139.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: gso: fix tcp fraglist segmentation after pull from frag_list [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Mon Mar 2 14:55:22 2026 +0800

    net: gso: fix tcp fraglist segmentation after pull from frag_list
    
    [ Upstream commit 17bd3bd82f9f79f3feba15476c2b2c95a9b11ff8 ]
    
    Detect tcp gso fraglist skbs with corrupted geometry (see below) and
    pass these to skb_segment instead of skb_segment_list, as the first
    can segment them correctly.
    
    Valid SKB_GSO_FRAGLIST skbs
    - consist of two or more segments
    - the head_skb holds the protocol headers plus first gso_size
    - one or more frag_list skbs hold exactly one segment
    - all but the last must be gso_size
    
    Optional datapath hooks such as NAT and BPF (bpf_skb_pull_data) can
    modify these skbs, breaking these invariants.
    
    In extreme cases they pull all data into skb linear. For TCP, this
    causes a NULL ptr deref in __tcpv4_gso_segment_list_csum at
    tcp_hdr(seg->next).
    
    Detect invalid geometry due to pull, by checking head_skb size.
    Don't just drop, as this may blackhole a destination. Convert to be
    able to pass to regular skb_segment.
    
    Approach and description based on a patch by Willem de Bruijn.
    
    Link: https://lore.kernel.org/netdev/20240428142913.18666-1-shiming.cheng@mediatek.com/
    Link: https://lore.kernel.org/netdev/20240922150450.3873767-1-willemdebruijn.kernel@gmail.com/
    Fixes: bee88cd5bd83 ("net: add support for segmenting TCP fraglist GSO packets")
    Cc: stable@vger.kernel.org
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Link: https://patch.msgid.link/20240926085315.51524-1-nbd@nbd.name
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Li hongliang <1468888505@139.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: ipv6: fix panic when IPv4 route references loopback IPv6 nexthop [+ + +]
Author: Jiayuan Chen <jiayuan.chen@shopee.com>
Date:   Wed Mar 4 19:38:13 2026 +0800

    net: ipv6: fix panic when IPv4 route references loopback IPv6 nexthop
    
    [ Upstream commit 21ec92774d1536f71bdc90b0e3d052eff99cf093 ]
    
    When a standalone IPv6 nexthop object is created with a loopback device
    (e.g., "ip -6 nexthop add id 100 dev lo"), fib6_nh_init() misclassifies
    it as a reject route. This is because nexthop objects have no destination
    prefix (fc_dst=::), causing fib6_is_reject() to match any loopback
    nexthop. The reject path skips fib_nh_common_init(), leaving
    nhc_pcpu_rth_output unallocated. If an IPv4 route later references this
    nexthop, __mkroute_output() dereferences NULL nhc_pcpu_rth_output and
    panics.
    
    Simplify the check in fib6_nh_init() to only match explicit reject
    routes (RTF_REJECT) instead of using fib6_is_reject(). The loopback
    promotion heuristic in fib6_is_reject() is handled separately by
    ip6_route_info_create_nh(). After this change, the three cases behave
    as follows:
    
    1. Explicit reject route ("ip -6 route add unreachable 2001:db8::/64"):
       RTF_REJECT is set, enters reject path, skips fib_nh_common_init().
       No behavior change.
    
    2. Implicit loopback reject route ("ip -6 route add 2001:db8::/32 dev lo"):
       RTF_REJECT is not set, takes normal path, fib_nh_common_init() is
       called. ip6_route_info_create_nh() still promotes it to reject
       afterward. nhc_pcpu_rth_output is allocated but unused, which is
       harmless.
    
    3. Standalone nexthop object ("ip -6 nexthop add id 100 dev lo"):
       RTF_REJECT is not set, takes normal path, fib_nh_common_init() is
       called. nhc_pcpu_rth_output is properly allocated, fixing the crash
       when IPv4 routes reference this nexthop.
    
    Suggested-by: Ido Schimmel <idosch@nvidia.com>
    Fixes: 493ced1ac47c ("ipv4: Allow routes to use nexthop objects")
    Reported-by: syzbot+334190e097a98a1b81bb@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/all/698f8482.a70a0220.2c38d7.00ca.GAE@google.com/T/
    Signed-off-by: Jiayuan Chen <jiayuan.chen@shopee.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Link: https://patch.msgid.link/20260304113817.294966-2-jiayuan.chen@linux.dev
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: macb: fix uninitialized rx_fs_lock [+ + +]
Author: Fedor Pchelkin <pchelkin@ispras.ru>
Date:   Mon Mar 16 13:38:25 2026 +0300

    net: macb: fix uninitialized rx_fs_lock
    
    [ Upstream commit 34b11cc56e4369bc08b1f4c4a04222d75ed596ce ]
    
    If hardware doesn't support RX Flow Filters, rx_fs_lock spinlock is not
    initialized leading to the following assertion splat triggerable via
    set_rxnfc callback.
    
    INFO: trying to register non-static key.
    The code is fine but needs lockdep annotation, or maybe
    you didn't initialize this object before use?
    turning off the locking correctness validator.
    CPU: 1 PID: 949 Comm: syz.0.6 Not tainted 6.1.164+ #113
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.16.1-0-g3208b098f51a-prebuilt.qemu.org 04/01/2014
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:88 [inline]
     dump_stack_lvl+0x8d/0xba lib/dump_stack.c:106
     assign_lock_key kernel/locking/lockdep.c:974 [inline]
     register_lock_class+0x141b/0x17f0 kernel/locking/lockdep.c:1287
     __lock_acquire+0x74f/0x6c40 kernel/locking/lockdep.c:4928
     lock_acquire kernel/locking/lockdep.c:5662 [inline]
     lock_acquire+0x190/0x4b0 kernel/locking/lockdep.c:5627
     __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
     _raw_spin_lock_irqsave+0x33/0x50 kernel/locking/spinlock.c:162
     gem_del_flow_filter drivers/net/ethernet/cadence/macb_main.c:3562 [inline]
     gem_set_rxnfc+0x533/0xac0 drivers/net/ethernet/cadence/macb_main.c:3667
     ethtool_set_rxnfc+0x18c/0x280 net/ethtool/ioctl.c:961
     __dev_ethtool net/ethtool/ioctl.c:2956 [inline]
     dev_ethtool+0x229c/0x6290 net/ethtool/ioctl.c:3095
     dev_ioctl+0x637/0x1070 net/core/dev_ioctl.c:510
     sock_do_ioctl+0x20d/0x2c0 net/socket.c:1215
     sock_ioctl+0x577/0x6d0 net/socket.c:1320
     vfs_ioctl fs/ioctl.c:51 [inline]
     __do_sys_ioctl fs/ioctl.c:870 [inline]
     __se_sys_ioctl fs/ioctl.c:856 [inline]
     __x64_sys_ioctl+0x18c/0x210 fs/ioctl.c:856
     do_syscall_x64 arch/x86/entry/common.c:46 [inline]
     do_syscall_64+0x35/0x80 arch/x86/entry/common.c:76
     entry_SYSCALL_64_after_hwframe+0x6e/0xd8
    
    A more straightforward solution would be to always initialize rx_fs_lock,
    just like rx_fs_list.  However, in this case the driver set_rxnfc callback
    would return with a rather confusing error code, e.g. -EINVAL.  So deny
    set_rxnfc attempts directly if the RX filtering feature is not supported
    by hardware.
    
    Fixes: ae8223de3df5 ("net: macb: Added support for RX filtering")
    Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru>
    Link: https://patch.msgid.link/20260316103826.74506-2-pchelkin@ispras.ru
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: macb: fix use-after-free access to PTP clock [+ + +]
Author: Fedor Pchelkin <pchelkin@ispras.ru>
Date:   Mon Mar 16 13:38:24 2026 +0300

    net: macb: fix use-after-free access to PTP clock
    
    commit 8da13e6d63c1a97f7302d342c89c4a56a55c7015 upstream.
    
    PTP clock is registered on every opening of the interface and destroyed on
    every closing.  However it may be accessed via get_ts_info ethtool call
    which is possible while the interface is just present in the kernel.
    
    BUG: KASAN: use-after-free in ptp_clock_index+0x47/0x50 drivers/ptp/ptp_clock.c:426
    Read of size 4 at addr ffff8880194345cc by task syz.0.6/948
    
    CPU: 1 PID: 948 Comm: syz.0.6 Not tainted 6.1.164+ #109
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.16.1-0-g3208b098f51a-prebuilt.qemu.org 04/01/2014
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:88 [inline]
     dump_stack_lvl+0x8d/0xba lib/dump_stack.c:106
     print_address_description mm/kasan/report.c:316 [inline]
     print_report+0x17f/0x496 mm/kasan/report.c:420
     kasan_report+0xd9/0x180 mm/kasan/report.c:524
     ptp_clock_index+0x47/0x50 drivers/ptp/ptp_clock.c:426
     gem_get_ts_info+0x138/0x1e0 drivers/net/ethernet/cadence/macb_main.c:3349
     macb_get_ts_info+0x68/0xb0 drivers/net/ethernet/cadence/macb_main.c:3371
     __ethtool_get_ts_info+0x17c/0x260 net/ethtool/common.c:558
     ethtool_get_ts_info net/ethtool/ioctl.c:2367 [inline]
     __dev_ethtool net/ethtool/ioctl.c:3017 [inline]
     dev_ethtool+0x2b05/0x6290 net/ethtool/ioctl.c:3095
     dev_ioctl+0x637/0x1070 net/core/dev_ioctl.c:510
     sock_do_ioctl+0x20d/0x2c0 net/socket.c:1215
     sock_ioctl+0x577/0x6d0 net/socket.c:1320
     vfs_ioctl fs/ioctl.c:51 [inline]
     __do_sys_ioctl fs/ioctl.c:870 [inline]
     __se_sys_ioctl fs/ioctl.c:856 [inline]
     __x64_sys_ioctl+0x18c/0x210 fs/ioctl.c:856
     do_syscall_x64 arch/x86/entry/common.c:46 [inline]
     do_syscall_64+0x35/0x80 arch/x86/entry/common.c:76
     entry_SYSCALL_64_after_hwframe+0x6e/0xd8
     </TASK>
    
    Allocated by task 457:
     kmalloc include/linux/slab.h:563 [inline]
     kzalloc include/linux/slab.h:699 [inline]
     ptp_clock_register+0x144/0x10e0 drivers/ptp/ptp_clock.c:235
     gem_ptp_init+0x46f/0x930 drivers/net/ethernet/cadence/macb_ptp.c:375
     macb_open+0x901/0xd10 drivers/net/ethernet/cadence/macb_main.c:2920
     __dev_open+0x2ce/0x500 net/core/dev.c:1501
     __dev_change_flags+0x56a/0x740 net/core/dev.c:8651
     dev_change_flags+0x92/0x170 net/core/dev.c:8722
     do_setlink+0xaf8/0x3a80 net/core/rtnetlink.c:2833
     __rtnl_newlink+0xbf4/0x1940 net/core/rtnetlink.c:3608
     rtnl_newlink+0x63/0xa0 net/core/rtnetlink.c:3655
     rtnetlink_rcv_msg+0x3c6/0xed0 net/core/rtnetlink.c:6150
     netlink_rcv_skb+0x15d/0x430 net/netlink/af_netlink.c:2511
     netlink_unicast_kernel net/netlink/af_netlink.c:1318 [inline]
     netlink_unicast+0x6d7/0xa30 net/netlink/af_netlink.c:1344
     netlink_sendmsg+0x97e/0xeb0 net/netlink/af_netlink.c:1872
     sock_sendmsg_nosec net/socket.c:718 [inline]
     __sock_sendmsg+0x14b/0x180 net/socket.c:730
     __sys_sendto+0x320/0x3b0 net/socket.c:2152
     __do_sys_sendto net/socket.c:2164 [inline]
     __se_sys_sendto net/socket.c:2160 [inline]
     __x64_sys_sendto+0xdc/0x1b0 net/socket.c:2160
     do_syscall_x64 arch/x86/entry/common.c:46 [inline]
     do_syscall_64+0x35/0x80 arch/x86/entry/common.c:76
     entry_SYSCALL_64_after_hwframe+0x6e/0xd8
    
    Freed by task 938:
     kasan_slab_free include/linux/kasan.h:177 [inline]
     slab_free_hook mm/slub.c:1729 [inline]
     slab_free_freelist_hook mm/slub.c:1755 [inline]
     slab_free mm/slub.c:3687 [inline]
     __kmem_cache_free+0xbc/0x320 mm/slub.c:3700
     device_release+0xa0/0x240 drivers/base/core.c:2507
     kobject_cleanup lib/kobject.c:681 [inline]
     kobject_release lib/kobject.c:712 [inline]
     kref_put include/linux/kref.h:65 [inline]
     kobject_put+0x1cd/0x350 lib/kobject.c:729
     put_device+0x1b/0x30 drivers/base/core.c:3805
     ptp_clock_unregister+0x171/0x270 drivers/ptp/ptp_clock.c:391
     gem_ptp_remove+0x4e/0x1f0 drivers/net/ethernet/cadence/macb_ptp.c:404
     macb_close+0x1c8/0x270 drivers/net/ethernet/cadence/macb_main.c:2966
     __dev_close_many+0x1b9/0x310 net/core/dev.c:1585
     __dev_close net/core/dev.c:1597 [inline]
     __dev_change_flags+0x2bb/0x740 net/core/dev.c:8649
     dev_change_flags+0x92/0x170 net/core/dev.c:8722
     dev_ifsioc+0x151/0xe00 net/core/dev_ioctl.c:326
     dev_ioctl+0x33e/0x1070 net/core/dev_ioctl.c:572
     sock_do_ioctl+0x20d/0x2c0 net/socket.c:1215
     sock_ioctl+0x577/0x6d0 net/socket.c:1320
     vfs_ioctl fs/ioctl.c:51 [inline]
     __do_sys_ioctl fs/ioctl.c:870 [inline]
     __se_sys_ioctl fs/ioctl.c:856 [inline]
     __x64_sys_ioctl+0x18c/0x210 fs/ioctl.c:856
     do_syscall_x64 arch/x86/entry/common.c:46 [inline]
     do_syscall_64+0x35/0x80 arch/x86/entry/common.c:76
     entry_SYSCALL_64_after_hwframe+0x6e/0xd8
    
    Set the PTP clock pointer to NULL after unregistering.
    
    Fixes: c2594d804d5c ("macb: Common code to enable ptp support for MACB/GEM")
    Cc: stable@vger.kernel.org
    Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru>
    Link: https://patch.msgid.link/20260316103826.74506-1-pchelkin@ispras.ru
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: macb: Introduce gem_init_rx_ring() [+ + +]
Author: Kevin Hao <haokexin@gmail.com>
Date:   Fri Mar 20 10:57:45 2026 -0400

    net: macb: Introduce gem_init_rx_ring()
    
    [ Upstream commit 1a7124ecd655bcaf1845197fe416aa25cff4c3ea ]
    
    Extract the initialization code for the GEM RX ring into a new function.
    This change will be utilized in a subsequent patch. No functional changes
    are introduced.
    
    Signed-off-by: Kevin Hao <haokexin@gmail.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20260312-macb-versal-v1-1-467647173fa4@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 718d0766ce4c ("net: macb: Reinitialize tx/rx queue pointer registers and rx ring during resume")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: macb: queue tie-off or disable during WOL suspend [+ + +]
Author: Vineeth Karumanchi <vineeth.karumanchi@amd.com>
Date:   Fri Mar 20 10:57:44 2026 -0400

    net: macb: queue tie-off or disable during WOL suspend
    
    [ Upstream commit 759cc793ebfc2d1a02f357ae97e5dcdcd63f758f ]
    
    When GEM is used as a wake device, it is not mandatory for the RX DMA
    to be active. The RX engine in IP only needs to receive and identify
    a wake packet through an interrupt. The wake packet is of no further
    significance; hence, it is not required to be copied into memory.
    By disabling RX DMA during suspend, we can avoid unnecessary DMA
    processing of any incoming traffic.
    
    During suspend, perform either of the below operations:
    
    - tie-off/dummy descriptor: Disable unused queues by connecting
      them to a looped descriptor chain without free slots.
    
    - queue disable: The newer IP version allows disabling individual queues.
    
    Co-developed-by: Harini Katakam <harini.katakam@amd.com>
    Signed-off-by: Harini Katakam <harini.katakam@amd.com>
    Signed-off-by: Vineeth Karumanchi <vineeth.karumanchi@amd.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Reviewed-by: Claudiu Beznea <claudiu.beznea@tuxon.dev>
    Tested-by: Claudiu Beznea <claudiu.beznea@tuxon.dev> # on SAMA7G5
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Stable-dep-of: 718d0766ce4c ("net: macb: Reinitialize tx/rx queue pointer registers and rx ring during resume")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: macb: Reinitialize tx/rx queue pointer registers and rx ring during resume [+ + +]
Author: Kevin Hao <haokexin@gmail.com>
Date:   Fri Mar 20 10:57:46 2026 -0400

    net: macb: Reinitialize tx/rx queue pointer registers and rx ring during resume
    
    [ Upstream commit 718d0766ce4c7634ce62fa78b526ea7263487edd ]
    
    On certain platforms, such as AMD Versal boards, the tx/rx queue pointer
    registers are cleared after suspend, and the rx queue pointer register
    is also disabled during suspend if WOL is enabled. Previously, we assumed
    that these registers would be restored by macb_mac_link_up(). However,
    in commit bf9cf80cab81, macb_init_buffers() was moved from
    macb_mac_link_up() to macb_open(). Therefore, we should call
    macb_init_buffers() to reinitialize the tx/rx queue pointer registers
    during resume.
    
    Due to the reset of these two registers, we also need to adjust the
    tx/rx rings accordingly. The tx ring will be handled by
    gem_shuffle_tx_rings() in macb_mac_link_up(), so we only need to
    initialize the rx ring here.
    
    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>
    Tested-by: Quanyang Wang <quanyang.wang@windriver.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20260312-macb-versal-v1-2-467647173fa4@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    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:   Wed Mar 18 12:47:17 2026 -0400

    net: macb: Shuffle the tx ring before enabling tx
    
    [ Upstream commit 881a0263d502e1a93ebc13a78254e9ad19520232 ]
    
    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>
    [ #include context ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: mana: fix use-after-free in mana_hwc_destroy_channel() by reordering teardown [+ + +]
Author: Dipayaan Roy <dipayanroy@linux.microsoft.com>
Date:   Wed Mar 11 12:22:04 2026 -0700

    net: mana: fix use-after-free in mana_hwc_destroy_channel() by reordering teardown
    
    [ Upstream commit fa103fc8f56954a60699a29215cb713448a39e87 ]
    
    A potential race condition exists in mana_hwc_destroy_channel() where
    hwc->caller_ctx is freed before the HWC's Completion Queue (CQ) and
    Event Queue (EQ) are destroyed. This allows an in-flight CQ interrupt
    handler to dereference freed memory, leading to a use-after-free or
    NULL pointer dereference in mana_hwc_handle_resp().
    
    mana_smc_teardown_hwc() signals the hardware to stop but does not
    synchronize against IRQ handlers already executing on other CPUs. The
    IRQ synchronization only happens in mana_hwc_destroy_cq() via
    mana_gd_destroy_eq() -> mana_gd_deregister_irq(). Since this runs
    after kfree(hwc->caller_ctx), a concurrent mana_hwc_rx_event_handler()
    can dereference freed caller_ctx (and rxq->msg_buf) in
    mana_hwc_handle_resp().
    
    Fix this by reordering teardown to reverse-of-creation order: destroy
    the TX/RX work queues and CQ/EQ before freeing hwc->caller_ctx. This
    ensures all in-flight interrupt handlers complete before the memory they
    access is freed.
    
    Fixes: ca9c54d2d6a5 ("net: mana: Add a driver for Microsoft Azure Network Adapter (MANA)")
    Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
    Signed-off-by: Dipayaan Roy <dipayanroy@linux.microsoft.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/abHA3AjNtqa1nx9k@linuxonhyperv3.guj3yctzbm1etfxqx2vob5hsef.xx.internal.cloudapp.net
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.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: mvpp2: guard flow control update with global_tx_fc in buffer switching [+ + +]
Author: Muhammad Hammad Ijaz <mhijaz@amazon.com>
Date:   Mon Mar 16 12:31:01 2026 -0700

    net: mvpp2: guard flow control update with global_tx_fc in buffer switching
    
    [ Upstream commit 8a63baadf08453f66eb582fdb6dd234f72024723 ]
    
    mvpp2_bm_switch_buffers() unconditionally calls
    mvpp2_bm_pool_update_priv_fc() when switching between per-cpu and
    shared buffer pool modes. This function programs CM3 flow control
    registers via mvpp2_cm3_read()/mvpp2_cm3_write(), which dereference
    priv->cm3_base without any NULL check.
    
    When the CM3 SRAM resource is not present in the device tree (the
    third reg entry added by commit 60523583b07c ("dts: marvell: add CM3
    SRAM memory to cp11x ethernet device tree")), priv->cm3_base remains
    NULL and priv->global_tx_fc is false. Any operation that triggers
    mvpp2_bm_switch_buffers(), for example an MTU change that crosses
    the jumbo frame threshold, will crash:
    
      Unable to handle kernel NULL pointer dereference at
      virtual address 0000000000000000
      Mem abort info:
        ESR = 0x0000000096000006
        EC = 0x25: DABT (current EL), IL = 32 bits
      pc : readl+0x0/0x18
      lr : mvpp2_cm3_read.isra.0+0x14/0x20
      Call trace:
       readl+0x0/0x18
       mvpp2_bm_pool_update_fc+0x40/0x12c
       mvpp2_bm_pool_update_priv_fc+0x94/0xd8
       mvpp2_bm_switch_buffers.isra.0+0x80/0x1c0
       mvpp2_change_mtu+0x140/0x380
       __dev_set_mtu+0x1c/0x38
       dev_set_mtu_ext+0x78/0x118
       dev_set_mtu+0x48/0xa8
       dev_ifsioc+0x21c/0x43c
       dev_ioctl+0x2d8/0x42c
       sock_ioctl+0x314/0x378
    
    Every other flow control call site in the driver already guards
    hardware access with either priv->global_tx_fc or port->tx_fc.
    mvpp2_bm_switch_buffers() is the only place that omits this check.
    
    Add the missing priv->global_tx_fc guard to both the disable and
    re-enable calls in mvpp2_bm_switch_buffers(), consistent with the
    rest of the driver.
    
    Fixes: 3a616b92a9d1 ("net: mvpp2: Add TX flow control support for jumbo frames")
    Signed-off-by: Muhammad Hammad Ijaz <mhijaz@amazon.com>
    Reviewed-by: Gunnar Kudrjavets <gunnarku@amazon.com>
    Link: https://patch.msgid.link/20260316193157.65748-1-mhijaz@amazon.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.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: nfc: nci: Fix zero-length proprietary notifications [+ + +]
Author: Ian Ray <ian.ray@gehealthcare.com>
Date:   Mon Mar 2 18:32:37 2026 +0200

    net: nfc: nci: Fix zero-length proprietary notifications
    
    [ Upstream commit f7d92f11bd33a6eb49c7c812255ef4ab13681f0f ]
    
    NCI NFC controllers may have proprietary OIDs with zero-length payload.
    One example is: drivers/nfc/nxp-nci/core.c, NXP_NCI_RF_TXLDO_ERROR_NTF.
    
    Allow a zero length payload in proprietary notifications *only*.
    
    Before:
    
    -- >8 --
    kernel: nci: nci_recv_frame: len 3
    -- >8 --
    
    After:
    
    -- >8 --
    kernel: nci: nci_recv_frame: len 3
    kernel: nci: nci_ntf_packet: NCI RX: MT=ntf, PBF=0, GID=0x1, OID=0x23, plen=0
    kernel: nci: nci_ntf_packet: unknown ntf opcode 0x123
    kernel: nfc nfc0: NFC: RF transmitter couldn't start. Bad power and/or configuration?
    -- >8 --
    
    After fixing the hardware:
    
    -- >8 --
    kernel: nci: nci_recv_frame: len 27
    kernel: nci: nci_ntf_packet: NCI RX: MT=ntf, PBF=0, GID=0x1, OID=0x5, plen=24
    kernel: nci: nci_rf_intf_activated_ntf_packet: rf_discovery_id 1
    -- >8 --
    
    Fixes: d24b03535e5e ("nfc: nci: Fix uninit-value in nci_dev_up and nci_ntf_packet")
    Signed-off-by: Ian Ray <ian.ray@gehealthcare.com>
    Link: https://patch.msgid.link/20260302163238.140576-1-ian.ray@gehealthcare.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: phy: register phy led_triggers during probe to avoid AB-BA deadlock [+ + +]
Author: Andrew Lunn <andrew@lunn.ch>
Date:   Mon Mar 9 09:27:08 2026 -0400

    net: phy: register phy led_triggers during probe to avoid AB-BA deadlock
    
    [ Upstream commit c8dbdc6e380e7e96a51706db3e4b7870d8a9402d ]
    
    There is an AB-BA deadlock when both LEDS_TRIGGER_NETDEV and
    LED_TRIGGER_PHY are enabled:
    
    [ 1362.049207] [<8054e4b8>] led_trigger_register+0x5c/0x1fc             <-- Trying to get lock "triggers_list_lock" via down_write(&triggers_list_lock);
    [ 1362.054536] [<80662830>] phy_led_triggers_register+0xd0/0x234
    [ 1362.060329] [<8065e200>] phy_attach_direct+0x33c/0x40c
    [ 1362.065489] [<80651fc4>] phylink_fwnode_phy_connect+0x15c/0x23c
    [ 1362.071480] [<8066ee18>] mtk_open+0x7c/0xba0
    [ 1362.075849] [<806d714c>] __dev_open+0x280/0x2b0
    [ 1362.080384] [<806d7668>] __dev_change_flags+0x244/0x24c
    [ 1362.085598] [<806d7698>] dev_change_flags+0x28/0x78
    [ 1362.090528] [<807150e4>] dev_ioctl+0x4c0/0x654                       <-- Hold lock "rtnl_mutex" by calling rtnl_lock();
    [ 1362.094985] [<80694360>] sock_ioctl+0x2f4/0x4e0
    [ 1362.099567] [<802e9c4c>] sys_ioctl+0x32c/0xd8c
    [ 1362.104022] [<80014504>] syscall_common+0x34/0x58
    
    Here LED_TRIGGER_PHY is registering LED triggers during phy_attach
    while holding RTNL and then taking triggers_list_lock.
    
    [ 1362.191101] [<806c2640>] register_netdevice_notifier+0x60/0x168      <-- Trying to get lock "rtnl_mutex" via rtnl_lock();
    [ 1362.197073] [<805504ac>] netdev_trig_activate+0x194/0x1e4
    [ 1362.202490] [<8054e28c>] led_trigger_set+0x1d4/0x360                 <-- Hold lock "triggers_list_lock" by down_read(&triggers_list_lock);
    [ 1362.207511] [<8054eb38>] led_trigger_write+0xd8/0x14c
    [ 1362.212566] [<80381d98>] sysfs_kf_bin_write+0x80/0xbc
    [ 1362.217688] [<8037fcd8>] kernfs_fop_write_iter+0x17c/0x28c
    [ 1362.223174] [<802cbd70>] vfs_write+0x21c/0x3c4
    [ 1362.227712] [<802cc0c4>] ksys_write+0x78/0x12c
    [ 1362.232164] [<80014504>] syscall_common+0x34/0x58
    
    Here LEDS_TRIGGER_NETDEV is being enabled on an LED. It first takes
    triggers_list_lock and then RTNL. A classical AB-BA deadlock.
    
    phy_led_triggers_registers() does not require the RTNL, it does not
    make any calls into the network stack which require protection. There
    is also no requirement the PHY has been attached to a MAC, the
    triggers only make use of phydev state. This allows the call to
    phy_led_triggers_registers() to be placed elsewhere. PHY probe() and
    release() don't hold RTNL, so solving the AB-BA deadlock.
    
    Reported-by: Shiji Yang <yangshiji66@outlook.com>
    Closes: https://lore.kernel.org/all/OS7PR01MB13602B128BA1AD3FA38B6D1FFBC69A@OS7PR01MB13602.jpnprd01.prod.outlook.com/
    Fixes: 06f502f57d0d ("leds: trigger: Introduce a NETDEV trigger")
    Cc: stable@vger.kernel.org
    Signed-off-by: Andrew Lunn <andrew@lunn.ch>
    Tested-by: Shiji Yang <yangshiji66@outlook.com>
    Link: https://patch.msgid.link/20260222152601.1978655-1-andrew@lunn.ch
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    [ adapted condition to preserve existing `!phy_driver_is_genphy_10g(phydev)` guard ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: sched: avoid qdisc_reset_all_tx_gt() vs dequeue race for lockless qdiscs [+ + +]
Author: Koichiro Den <den@valinux.co.jp>
Date:   Sat Feb 28 23:53:07 2026 +0900

    net: sched: avoid qdisc_reset_all_tx_gt() vs dequeue race for lockless qdiscs
    
    [ Upstream commit 7f083faf59d14c04e01ec05a7507f036c965acf8 ]
    
    When shrinking the number of real tx queues,
    netif_set_real_num_tx_queues() calls qdisc_reset_all_tx_gt() to flush
    qdiscs for queues which will no longer be used.
    
    qdisc_reset_all_tx_gt() currently serializes qdisc_reset() with
    qdisc_lock(). However, for lockless qdiscs, the dequeue path is
    serialized by qdisc_run_begin/end() using qdisc->seqlock instead, so
    qdisc_reset() can run concurrently with __qdisc_run() and free skbs
    while they are still being dequeued, leading to UAF.
    
    This can easily be reproduced on e.g. virtio-net by imposing heavy
    traffic while frequently changing the number of queue pairs:
    
      iperf3 -ub0 -c $peer -t 0 &
      while :; do
        ethtool -L eth0 combined 1
        ethtool -L eth0 combined 2
      done
    
    With KASAN enabled, this leads to reports like:
    
      BUG: KASAN: slab-use-after-free in __qdisc_run+0x133f/0x1760
      ...
      Call Trace:
       <TASK>
       ...
       __qdisc_run+0x133f/0x1760
       __dev_queue_xmit+0x248f/0x3550
       ip_finish_output2+0xa42/0x2110
       ip_output+0x1a7/0x410
       ip_send_skb+0x2e6/0x480
       udp_send_skb+0xb0a/0x1590
       udp_sendmsg+0x13c9/0x1fc0
       ...
       </TASK>
    
      Allocated by task 1270 on cpu 5 at 44.558414s:
       ...
       alloc_skb_with_frags+0x84/0x7c0
       sock_alloc_send_pskb+0x69a/0x830
       __ip_append_data+0x1b86/0x48c0
       ip_make_skb+0x1e8/0x2b0
       udp_sendmsg+0x13a6/0x1fc0
       ...
    
      Freed by task 1306 on cpu 3 at 44.558445s:
       ...
       kmem_cache_free+0x117/0x5e0
       pfifo_fast_reset+0x14d/0x580
       qdisc_reset+0x9e/0x5f0
       netif_set_real_num_tx_queues+0x303/0x840
       virtnet_set_channels+0x1bf/0x260 [virtio_net]
       ethnl_set_channels+0x684/0xae0
       ethnl_default_set_doit+0x31a/0x890
       ...
    
    Serialize qdisc_reset_all_tx_gt() against the lockless dequeue path by
    taking qdisc->seqlock for TCQ_F_NOLOCK qdiscs, matching the
    serialization model already used by dev_reset_queue().
    
    Additionally clear QDISC_STATE_NON_EMPTY after reset so the qdisc state
    reflects an empty queue, avoiding needless re-scheduling.
    
    Fixes: 6b3ba9146fe6 ("net: sched: allow qdiscs to handle locking")
    Signed-off-by: Koichiro Den <den@valinux.co.jp>
    Link: https://patch.msgid.link/20260228145307.3955532-1-den@valinux.co.jp
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: sfp: add quirk for Potron SFP+ XGSPON ONU Stick [+ + +]
Author: Chris Morgan <macromorgan@hotmail.com>
Date:   Tue Jun 17 13:03:24 2025 -0500

    net: sfp: add quirk for Potron SFP+ XGSPON ONU Stick
    
    [ Upstream commit dfec1c14aecee6813f9bafc7b560cc3a31d24079 ]
    
    Add quirk for Potron SFP+ XGSPON ONU Stick (YV SFP+ONT-XGSPON).
    
    This device uses pins 2 and 7 for UART communication, so disable
    TX_FAULT and LOS. Additionally as it is an embedded system in an
    SFP+ form factor provide it enough time to fully boot before we
    attempt to use it.
    
    https://www.potrontec.com/index/index/list/cat_id/2.html#11-83
    https://pon.wiki/xgs-pon/ont/potron-technology/x-onu-sfpp/
    
    Signed-off-by: Chris Morgan <macromorgan@hotmail.com>
    Link: https://patch.msgid.link/20250617180324.229487-1-macroalpha82@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 87d126852158 ("net: sfp: improve Huawei MA5671a fixup")
    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: sfp: improve Nokia GPON sfp fixup [+ + +]
Author: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Date:   Tue Oct 3 14:34:29 2023 +0100

    net: sfp: improve Nokia GPON sfp fixup
    
    [ Upstream commit 5ffe330e40bdfad9c49a615c54d2d89343b2f08a ]
    
    Improve the Nokia GPON fixup - we need to ignore not only the hardware
    LOS signal, but also the software implementation as well. Do this by
    using the new state_ignore_mask to indicate that we should ignore not
    only the hardware RX_LOS signal, and also clear the LOS bits in the
    option field.
    
    Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Tested-by: Christian Marangi <ansuelsmth@gmail.com>
    Link: https://lore.kernel.org/r/E1qnfXh-008UDe-F9@rmk-PC.armlinux.org.uk
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 87d126852158 ("net: sfp: improve Huawei MA5671a fixup")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: sfp: re-implement ignoring the hardware TX_FAULT signal [+ + +]
Author: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Date:   Tue Oct 3 14:34:24 2023 +0100

    net: sfp: re-implement ignoring the hardware TX_FAULT signal
    
    [ Upstream commit e184e8609f8c1cd9fef703f667245b6ebd89c2ed ]
    
    Re-implement how we ignore the hardware TX_FAULT signal. Rather than
    having a separate boolean for this, use a bitmask of the hardware
    signals that we wish to ignore. This gives more flexibility in the
    future to ignore other signals such as RX_LOS.
    
    Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Tested-by: Christian Marangi <ansuelsmth@gmail.com>
    Link: https://lore.kernel.org/r/E1qnfXc-008UDY-91@rmk-PC.armlinux.org.uk
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 87d126852158 ("net: sfp: improve Huawei MA5671a fixup")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: stmmac: dwmac-loongson: Set clk_csr_i to 100-150MHz [+ + +]
Author: Huacai Chen <chenhuacai@kernel.org>
Date:   Wed Feb 18 20:12:42 2026 +0800

    net: stmmac: dwmac-loongson: Set clk_csr_i to 100-150MHz
    
    commit e1aa5ef892fb4fa9014a25e87b64b97347919d37 upstream.
    
    Current clk_csr_i setting of Loongson STMMAC (including LS7A1000/2000
    and LS2K1000/2000/3000) are copy & paste from other drivers. In fact,
    Loongson STMMAC use 125MHz clocks and need 62 freq division to within
    2.5MHz, meeting most PHY MDC requirement. So fix by setting clk_csr_i
    to 100-150MHz, otherwise some PHYs may link fail.
    
    Cc: stable@vger.kernel.org
    Fixes: 30bba69d7db40e7 ("stmmac: pci: Add dwmac support for Loongson")
    Signed-off-by: Hongliang Wang <wanghongliang@loongson.cn>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: stmmac: Fix error handling in VLAN add and delete paths [+ + +]
Author: Ovidiu Panait <ovidiu.panait.rb@renesas.com>
Date:   Tue Mar 3 14:58:25 2026 +0000

    net: stmmac: Fix error handling in VLAN add and delete paths
    
    [ Upstream commit 35dfedce442c4060cfe5b98368bc9643fb995716 ]
    
    stmmac_vlan_rx_add_vid() updates active_vlans and the VLAN hash
    register before writing the HW filter entry. If the filter write
    fails, it leaves a stale VID in active_vlans and the hash register.
    
    stmmac_vlan_rx_kill_vid() has the reverse problem: it clears
    active_vlans before removing the HW filter. On failure, the VID is
    gone from active_vlans but still present in the HW filter table.
    
    To fix this, reorder the operations to update the hash table first,
    then attempt the HW filter operation. If the HW filter fails, roll
    back both the active_vlans bitmap and the hash table by calling
    stmmac_vlan_update() again.
    
    Fixes: ed64639bc1e0 ("net: stmmac: Add support for VLAN Rx filtering")
    Signed-off-by: Ovidiu Panait <ovidiu.panait.rb@renesas.com>
    Link: https://patch.msgid.link/20260303145828.7845-2-ovidiu.panait.rb@renesas.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: stmmac: remove support for lpi_intr_o [+ + +]
Author: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Date:   Fri Mar 6 15:06:56 2026 +0000

    net: stmmac: remove support for lpi_intr_o
    
    commit 14eb64db8ff07b58a35b98375f446d9e20765674 upstream.
    
    The dwmac databook for v3.74a states that lpi_intr_o is a sideband
    signal which should be used to ungate the application clock, and this
    signal is synchronous to the receive clock. The receive clock can run
    at 2.5, 25 or 125MHz depending on the media speed, and can stop under
    the control of the link partner. This means that the time it takes to
    clear is dependent on the negotiated media speed, and thus can be 8,
    40, or 400ns after reading the LPI control and status register.
    
    It has been observed with some aggressive link partners, this clock
    can stop while lpi_intr_o is still asserted, meaning that the signal
    remains asserted for an indefinite period that the local system has
    no direct control over.
    
    The LPI interrupts will still be signalled through the main interrupt
    path in any case, and this path is not dependent on the receive clock.
    
    This, since we do not gate the application clock, and the chances of
    adding clock gating in the future are slim due to the clocks being
    ill-defined, lpi_intr_o serves no useful purpose. Remove the code which
    requests the interrupt, and all associated code.
    
    Reported-by: Ovidiu Panait <ovidiu.panait.rb@renesas.com>
    Tested-by: Ovidiu Panait <ovidiu.panait.rb@renesas.com> # Renesas RZ/V2H board
    Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Link: https://patch.msgid.link/E1vnJbt-00000007YYN-28nm@rmk-PC.armlinux.org.uk
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Ovidiu Panait <ovidiu.panait.rb@renesas.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: tcp: accept old ack during closing [+ + +]
Author: Menglong Dong <menglong8.dong@gmail.com>
Date:   Fri Jan 26 12:05:19 2024 +0800

    net: tcp: accept old ack during closing
    
    commit 795a7dfbc3d95e4c7c09569f319f026f8c7f5a9c upstream.
    
    For now, the packet with an old ack is not accepted if we are in
    FIN_WAIT1 state, which can cause retransmission. Taking the following
    case as an example:
    
        Client                               Server
          |                                    |
      FIN_WAIT1(Send FIN, seq=10)          FIN_WAIT1(Send FIN, seq=20, ack=10)
          |                                    |
          |                                Send ACK(seq=21, ack=11)
       Recv ACK(seq=21, ack=11)
          |
       Recv FIN(seq=20, ack=10)
    
    In the case above, simultaneous close is happening, and the FIN and ACK
    packet that send from the server is out of order. Then, the FIN will be
    dropped by the client, as it has an old ack. Then, the server has to
    retransmit the FIN, which can cause delay if the server has set the
    SO_LINGER on the socket.
    
    Old ack is accepted in the ESTABLISHED and TIME_WAIT state, and I think
    it should be better to keep the same logic.
    
    In this commit, we accept old ack in FIN_WAIT1/FIN_WAIT2/CLOSING/LAST_ACK
    states. Maybe we should limit it to FIN_WAIT1 for now?
    
    Signed-off-by: Menglong Dong <menglong8.dong@gmail.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20240126040519.1846345-1-menglong8.dong@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: usb: aqc111: Do not perform PM inside suspend callback [+ + +]
Author: Nikola Z. Ivanov <zlatistiv@gmail.com>
Date:   Fri Mar 13 16:16:43 2026 +0200

    net: usb: aqc111: Do not perform PM inside suspend callback
    
    [ Upstream commit 069c8f5aebe4d5224cf62acc7d4b3486091c658a ]
    
    syzbot reports "task hung in rpm_resume"
    
    This is caused by aqc111_suspend calling
    the PM variant of its write_cmd routine.
    
    The simplified call trace looks like this:
    
    rpm_suspend()
      usb_suspend_both() - here udev->dev.power.runtime_status == RPM_SUSPENDING
        aqc111_suspend() - called for the usb device interface
          aqc111_write32_cmd()
            usb_autopm_get_interface()
              pm_runtime_resume_and_get()
                rpm_resume() - here we call rpm_resume() on our parent
                  rpm_resume() - Here we wait for a status change that will never happen.
    
    At this point we block another task which holds
    rtnl_lock and locks up the whole networking stack.
    
    Fix this by replacing the write_cmd calls with their _nopm variants
    
    Reported-by: syzbot+48dc1e8dfc92faf1124c@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=48dc1e8dfc92faf1124c
    Fixes: e58ba4544c77 ("net: usb: aqc111: Add support for wake on LAN by MAGIC packet")
    Signed-off-by: Nikola Z. Ivanov <zlatistiv@gmail.com>
    Link: https://patch.msgid.link/20260313141643.1181386-1-zlatistiv@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: usb: cdc_ncm: add ndpoffset to NDP16 nframes bounds check [+ + +]
Author: Tobi Gaertner <tob.gaertner@me.com>
Date:   Fri Mar 13 22:46:39 2026 -0700

    net: usb: cdc_ncm: add ndpoffset to NDP16 nframes bounds check
    
    [ Upstream commit 2aa8a4fa8d5b7d0e1ebcec100e1a4d80a1f4b21a ]
    
    cdc_ncm_rx_verify_ndp16() validates that the NDP header and its DPE
    entries fit within the skb. The first check correctly accounts for
    ndpoffset:
    
      if ((ndpoffset + sizeof(struct usb_cdc_ncm_ndp16)) > skb_in->len)
    
    but the second check omits it:
    
      if ((sizeof(struct usb_cdc_ncm_ndp16) +
           ret * (sizeof(struct usb_cdc_ncm_dpe16))) > skb_in->len)
    
    This validates the DPE array size against the total skb length as if
    the NDP were at offset 0, rather than at ndpoffset. When the NDP is
    placed near the end of the NTB (large wNdpIndex), the DPE entries can
    extend past the skb data buffer even though the check passes.
    cdc_ncm_rx_fixup() then reads out-of-bounds memory when iterating
    the DPE array.
    
    Add ndpoffset to the nframes bounds check and use struct_size_t() to
    express the NDP-plus-DPE-array size more clearly.
    
    Fixes: ff06ab13a4cc ("net: cdc_ncm: splitting rx_fixup for code reuse")
    Signed-off-by: Tobi Gaertner <tob.gaertner@me.com>
    Link: https://patch.msgid.link/20260314054640.2895026-2-tob.gaertner@me.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: usb: cdc_ncm: add ndpoffset to NDP32 nframes bounds check [+ + +]
Author: Tobi Gaertner <tob.gaertner@me.com>
Date:   Fri Mar 13 22:46:40 2026 -0700

    net: usb: cdc_ncm: add ndpoffset to NDP32 nframes bounds check
    
    [ Upstream commit 77914255155e68a20aa41175edeecf8121dac391 ]
    
    The same bounds-check bug fixed for NDP16 in the previous patch also
    exists in cdc_ncm_rx_verify_ndp32(). The DPE array size is validated
    against the total skb length without accounting for ndpoffset, allowing
    out-of-bounds reads when the NDP32 is placed near the end of the NTB.
    
    Add ndpoffset to the nframes bounds check and use struct_size_t() to
    express the NDP-plus-DPE-array size more clearly.
    
    Compile-tested only.
    
    Fixes: 0fa81b304a79 ("cdc_ncm: Implement the 32-bit version of NCM Transfer Block")
    Signed-off-by: Tobi Gaertner <tob.gaertner@me.com>
    Link: https://patch.msgid.link/20260314054640.2895026-3-tob.gaertner@me.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: usb: kalmia: validate USB endpoints [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon Feb 23 13:59:26 2026 +0100

    net: usb: kalmia: validate USB endpoints
    
    commit c58b6c29a4c9b8125e8ad3bca0637e00b71e2693 upstream.
    
    The kalmia driver should validate that the device it is probing has the
    proper number and types of USB endpoints it is expecting before it binds
    to it.  If a malicious device were to not have the same urbs the driver
    will crash later on when it blindly accesses these endpoints.
    
    Cc: stable <stable@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Fixes: d40261236e8e ("net/usb: Add Samsung Kalmia driver for Samsung GT-B3730")
    Link: https://patch.msgid.link/2026022326-shack-headstone-ef6f@gregkh
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: usb: kaweth: validate USB endpoints [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon Feb 23 14:00:06 2026 +0100

    net: usb: kaweth: validate USB endpoints
    
    commit 4b063c002ca759d1b299988ee23f564c9609c875 upstream.
    
    The kaweth driver should validate that the device it is probing has the
    proper number and types of USB endpoints it is expecting before it binds
    to it.  If a malicious device were to not have the same urbs the driver
    will crash later on when it blindly accesses these endpoints.
    
    Cc: stable <stable@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Link: https://patch.msgid.link/2026022305-substance-virtual-c728@gregkh
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.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: 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>

net: usb: pegasus: validate USB endpoints [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon Feb 23 13:58:48 2026 +0100

    net: usb: pegasus: validate USB endpoints
    
    commit 11de1d3ae5565ed22ef1f89d73d8f2d00322c699 upstream.
    
    The pegasus driver should validate that the device it is probing has the
    proper number and types of USB endpoints it is expecting before it binds
    to it.  If a malicious device were to not have the same urbs the driver
    will crash later on when it blindly accesses these endpoints.
    
    Cc: Petko Manolov <petkan@nucleusys.com>
    Cc: stable <stable@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Link: https://patch.msgid.link/2026022347-legibly-attest-cc5c@gregkh
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: vxlan: fix nd_tbl NULL dereference when IPv6 is disabled [+ + +]
Author: Fernando Fernandez Mancera <fmancera@suse.de>
Date:   Wed Mar 4 13:03:57 2026 +0100

    net: vxlan: fix nd_tbl NULL dereference when IPv6 is disabled
    
    [ Upstream commit 168ff39e4758897d2eee4756977d036d52884c7e ]
    
    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 an IPv6 packet is injected into the interface,
    route_shortcircuit() is called and a NULL pointer dereference happens on
    neigh_lookup().
    
     BUG: kernel NULL pointer dereference, address: 0000000000000380
     Oops: Oops: 0000 [#1] SMP NOPTI
     [...]
     RIP: 0010:neigh_lookup+0x20/0x270
     [...]
     Call Trace:
      <TASK>
      vxlan_xmit+0x638/0x1ef0 [vxlan]
      dev_hard_start_xmit+0x9e/0x2e0
      __dev_queue_xmit+0xbee/0x14e0
      packet_sendmsg+0x116f/0x1930
      __sys_sendto+0x1f5/0x200
      __x64_sys_sendto+0x24/0x30
      do_syscall_64+0x12f/0x1590
      entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Fix this by adding an early check on route_shortcircuit() when protocol
    is ETH_P_IPV6. Note that ipv6_mod_enabled() cannot be used here because
    VXLAN can be built-in even when IPv6 is built as a module.
    
    Fixes: e15a00aafa4b ("vxlan: add ipv6 route short circuit support")
    Signed-off-by: Fernando Fernandez Mancera <fmancera@suse.de>
    Link: https://patch.msgid.link/20260304120357.9778-2-fmancera@suse.de
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netfilter: bpf: defer hook memory release until rcu readers are done [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Tue Mar 17 12:23:08 2026 +0100

    netfilter: bpf: defer hook memory release until rcu readers are done
    
    [ Upstream commit 24f90fa3994b992d1a09003a3db2599330a5232a ]
    
    Yiming Qian reports UaF when concurrent process is dumping hooks via
    nfnetlink_hooks:
    
    BUG: KASAN: slab-use-after-free in nfnl_hook_dump_one.isra.0+0xe71/0x10f0
    Read of size 8 at addr ffff888003edbf88 by task poc/79
    Call Trace:
     <TASK>
     nfnl_hook_dump_one.isra.0+0xe71/0x10f0
     netlink_dump+0x554/0x12b0
     nfnl_hook_get+0x176/0x230
     [..]
    
    Defer release until after concurrent readers have completed.
    
    Reported-by: Yiming Qian <yimingqian591@gmail.com>
    Fixes: 84601d6ee68a ("bpf: add bpf_link support for BPF_NETFILTER programs")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: ctnetlink: fix use-after-free in ctnetlink_dump_exp_ct() [+ + +]
Author: Hyunwoo Kim <imv4bel@gmail.com>
Date:   Sun Mar 8 02:21:37 2026 +0900

    netfilter: ctnetlink: fix use-after-free in ctnetlink_dump_exp_ct()
    
    [ Upstream commit 5cb81eeda909dbb2def209dd10636b51549a3f8a ]
    
    ctnetlink_dump_exp_ct() stores a conntrack pointer in cb->data for the
    netlink dump callback ctnetlink_exp_ct_dump_table(), but drops the
    conntrack reference immediately after netlink_dump_start().  When the
    dump spans multiple rounds, the second recvmsg() triggers the dump
    callback which dereferences the now-freed conntrack via nfct_help(ct),
    leading to a use-after-free on ct->ext.
    
    The bug is that the netlink_dump_control has no .start or .done
    callbacks to manage the conntrack reference across dump rounds.  Other
    dump functions in the same file (e.g. ctnetlink_get_conntrack) properly
    use .start/.done callbacks for this purpose.
    
    Fix this by adding .start and .done callbacks that hold and release the
    conntrack reference for the duration of the dump, and move the
    nfct_help() call after the cb->args[0] early-return check in the dump
    callback to avoid dereferencing ct->ext unnecessarily.
    
     BUG: KASAN: slab-use-after-free in ctnetlink_exp_ct_dump_table+0x4f/0x2e0
     Read of size 8 at addr ffff88810597ebf0 by task ctnetlink_poc/133
    
     CPU: 1 UID: 0 PID: 133 Comm: ctnetlink_poc Not tainted 7.0.0-rc2+ #3 PREEMPTLAZY
     Call Trace:
      <TASK>
      ctnetlink_exp_ct_dump_table+0x4f/0x2e0
      netlink_dump+0x333/0x880
      netlink_recvmsg+0x3e2/0x4b0
      ? aa_sk_perm+0x184/0x450
      sock_recvmsg+0xde/0xf0
    
     Allocated by task 133:
      kmem_cache_alloc_noprof+0x134/0x440
      __nf_conntrack_alloc+0xa8/0x2b0
      ctnetlink_create_conntrack+0xa1/0x900
      ctnetlink_new_conntrack+0x3cf/0x7d0
      nfnetlink_rcv_msg+0x48e/0x510
      netlink_rcv_skb+0xc9/0x1f0
      nfnetlink_rcv+0xdb/0x220
      netlink_unicast+0x3ec/0x590
      netlink_sendmsg+0x397/0x690
      __sys_sendmsg+0xf4/0x180
    
     Freed by task 0:
      slab_free_after_rcu_debug+0xad/0x1e0
      rcu_core+0x5c3/0x9c0
    
    Fixes: e844a928431f ("netfilter: ctnetlink: allow to dump expectation per master conntrack")
    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: ctnetlink: remove refcounting in expectation dumpers [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Fri Aug 1 17:25:09 2025 +0200

    netfilter: ctnetlink: remove refcounting in expectation dumpers
    
    [ Upstream commit 1492e3dcb2be3aa46d1963da96aa9593e4e4db5a ]
    
    Same pattern as previous patch: do not keep the expectation object
    alive via refcount, only store a cookie value and then use that
    as the skip hint for dump resumption.
    
    AFAICS this has the same issue as the one resolved in the conntrack
    dumper, when we do
      if (!refcount_inc_not_zero(&exp->use))
    
    to increment the refcount, there is a chance that exp == last, which
    causes a double-increment of the refcount and subsequent memory leak.
    
    Fixes: cf6994c2b981 ("[NETFILTER]: nf_conntrack_netlink: sync expectation dumping with conntrack table dumping")
    Fixes: e844a928431f ("netfilter: ctnetlink: allow to dump expectation per master conntrack")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Stable-dep-of: 5cb81eeda909 ("netfilter: ctnetlink: fix use-after-free in ctnetlink_dump_exp_ct()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_conntrack_h323: check for zero length in DecodeQ931() [+ + +]
Author: Jenny Guanni Qu <qguanni@gmail.com>
Date:   Thu Mar 12 14:49:50 2026 +0000

    netfilter: nf_conntrack_h323: check for zero length in DecodeQ931()
    
    [ Upstream commit f173d0f4c0f689173f8cdac79991043a4a89bf66 ]
    
    In DecodeQ931(), the UserUserIE code path reads a 16-bit length from
    the packet, then decrements it by 1 to skip the protocol discriminator
    byte before passing it to DecodeH323_UserInformation(). If the encoded
    length is 0, the decrement wraps to -1, which is then passed as a
    large value to the decoder, leading to an out-of-bounds read.
    
    Add a check to ensure len is positive after the decrement.
    
    Fixes: 5e35941d9901 ("[NETFILTER]: Add H.323 conntrack/NAT helper")
    Reported-by: Klaudia Kloc <klaudia@vidocsecurity.com>
    Reported-by: Dawid Moczadło <dawid@vidocsecurity.com>
    Tested-by: Jenny Guanni Qu <qguanni@gmail.com>
    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: nf_conntrack_h323: fix OOB read in decode_int() CONS case [+ + +]
Author: Jenny Guanni Qu <qguanni@gmail.com>
Date:   Thu Mar 12 02:29:32 2026 +0000

    netfilter: nf_conntrack_h323: fix OOB read in decode_int() CONS case
    
    [ Upstream commit 1e3a3593162c96e8a8de48b1e14f60c3b57fca8a ]
    
    In decode_int(), the CONS case calls get_bits(bs, 2) to read a length
    value, then calls get_uint(bs, len) without checking that len bytes
    remain in the buffer. The existing boundary check only validates the
    2 bits for get_bits(), not the subsequent 1-4 bytes that get_uint()
    reads. This allows a malformed H.323/RAS packet to cause a 1-4 byte
    slab-out-of-bounds read.
    
    Add a boundary check for len bytes after get_bits() and before
    get_uint().
    
    Fixes: 5e35941d9901 ("[NETFILTER]: Add H.323 conntrack/NAT helper")
    Reported-by: Klaudia Kloc <klaudia@vidocsecurity.com>
    Reported-by: Dawid Moczadło <dawid@vidocsecurity.com>
    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: nf_conntrack_sip: fix Content-Length u32 truncation in sip_help_tcp() [+ + +]
Author: Lukas Johannes Möller <research@johannes-moeller.dev>
Date:   Tue Mar 10 21:49:01 2026 +0000

    netfilter: nf_conntrack_sip: fix Content-Length u32 truncation in sip_help_tcp()
    
    [ Upstream commit fbce58e719a17aa215c724473fd5baaa4a8dc57c ]
    
    sip_help_tcp() parses the SIP Content-Length header with
    simple_strtoul(), which returns unsigned long, but stores the result in
    unsigned int clen.  On 64-bit systems, values exceeding UINT_MAX are
    silently truncated before computing the SIP message boundary.
    
    For example, Content-Length 4294967328 (2^32 + 32) is truncated to 32,
    causing the parser to miscalculate where the current message ends.  The
    loop then treats trailing data in the TCP segment as a second SIP
    message and processes it through the SDP parser.
    
    Fix this by changing clen to unsigned long to match the return type of
    simple_strtoul(), and reject Content-Length values that exceed the
    remaining TCP payload length.
    
    Fixes: f5b321bd37fb ("netfilter: nf_conntrack_sip: add TCP support")
    Signed-off-by: Lukas Johannes Möller <research@johannes-moeller.dev>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: release flowtable after rcu grace period on error [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Tue Mar 17 20:00:26 2026 +0100

    netfilter: nf_tables: release flowtable after rcu grace period on error
    
    [ Upstream commit d73f4b53aaaea4c95f245e491aa5eeb8a21874ce ]
    
    Call synchronize_rcu() after unregistering the hooks from error path,
    since a hook that already refers to this flowtable can be already
    registered, exposing this flowtable to packet path and nfnetlink_hook
    control plane.
    
    This error path is rare, it should only happen by reaching the maximum
    number hooks or by failing to set up to hardware offload, just call
    synchronize_rcu().
    
    There is a check for already used device hooks by different flowtable
    that could result in EEXIST at this late stage. The hook parser can be
    updated to perform this check earlier to this error path really becomes
    rarely exercised.
    
    Uncovered by KASAN reported as use-after-free from nfnetlink_hook path
    when dumping hooks.
    
    Fixes: 3b49e2e94e6e ("netfilter: nf_tables: add flow table netlink frontend")
    Reported-by: Yiming Qian <yimingqian591@gmail.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    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_ct: add seqadj extension for natted connections [+ + +]
Author: Andrii Melnychenko <a.melnychenko@vyos.io>
Date:   Fri Oct 24 18:22:16 2025 +0200

    netfilter: nft_ct: add seqadj extension for natted connections
    
    [ Upstream commit 90918e3b6404c2a37837b8f11692471b4c512de2 ]
    
    Sequence adjustment may be required for FTP traffic with PASV/EPSV modes.
    due to need to re-write packet payload (IP, port) on the ftp control
    connection. This can require changes to the TCP length and expected
    seq / ack_seq.
    
    The easiest way to reproduce this issue is with PASV mode.
    Example ruleset:
    table inet ftp_nat {
            ct helper ftp_helper {
                    type "ftp" protocol tcp
                    l3proto inet
            }
    
            chain prerouting {
                    type filter hook prerouting priority 0; policy accept;
                    tcp dport 21 ct state new ct helper set "ftp_helper"
            }
    }
    table ip nat {
            chain prerouting {
                    type nat hook prerouting priority -100; policy accept;
                    tcp dport 21 dnat ip prefix to ip daddr map {
                            192.168.100.1 : 192.168.13.2/32 }
            }
    
            chain postrouting {
                    type nat hook postrouting priority 100 ; policy accept;
                    tcp sport 21 snat ip prefix to ip saddr map {
                            192.168.13.2 : 192.168.100.1/32 }
            }
    }
    
    Note that the ftp helper gets assigned *after* the dnat setup.
    
    The inverse (nat after helper assign) is handled by an existing
    check in nf_nat_setup_info() and will not show the problem.
    
    Topoloy:
    
     +-------------------+     +----------------------------------+
     | FTP: 192.168.13.2 | <-> | NAT: 192.168.13.3, 192.168.100.1 |
     +-------------------+     +----------------------------------+
                                          |
                             +-----------------------+
                             | Client: 192.168.100.2 |
                             +-----------------------+
    
    ftp nat changes do not work as expected in this case:
    Connected to 192.168.100.1.
    [..]
    ftp> epsv
    EPSV/EPRT on IPv4 off.
    ftp> ls
    227 Entering passive mode (192,168,100,1,209,129).
    421 Service not available, remote server has closed connection.
    
    Kernel logs:
    Missing nfct_seqadj_ext_add() setup call
    WARNING: CPU: 1 PID: 0 at net/netfilter/nf_conntrack_seqadj.c:41
    [..]
     __nf_nat_mangle_tcp_packet+0x100/0x160 [nf_nat]
     nf_nat_ftp+0x142/0x280 [nf_nat_ftp]
     help+0x4d1/0x880 [nf_conntrack_ftp]
     nf_confirm+0x122/0x2e0 [nf_conntrack]
     nf_hook_slow+0x3c/0xb0
     ..
    
    Fix this by adding the required extension when a conntrack helper is assigned
    to a connection that has a nat binding.
    
    Fixes: 1a64edf54f55 ("netfilter: nft_ct: add helper set support")
    Signed-off-by: Andrii Melnychenko <a.melnychenko@vyos.io>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Stable-dep-of: 36eae0956f65 ("netfilter: nft_ct: drop pending enqueued packets on removal")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nft_ct: drop pending enqueued packets on removal [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Mar 12 13:48:47 2026 +0100

    netfilter: nft_ct: drop pending enqueued packets on removal
    
    [ Upstream commit 36eae0956f659e48d5366d9b083d9417f3263ddc ]
    
    Packets sitting in nfqueue might hold a reference to:
    
    - templates that specify the conntrack zone, because a percpu area is
      used and module removal is possible.
    - conntrack timeout policies and helper, where object removal leave
      a stale reference.
    
    Since these objects can just go away, drop enqueued packets to avoid
    stale reference to them.
    
    If there is a need for finer grain removal, this logic can be revisited
    to make selective packet drop upon dependencies.
    
    Fixes: 7e0b2b57f01d ("netfilter: nft_ct: add ct timeout support")
    Reported-by: Yiming Qian <yimingqian591@gmail.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    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: nft_set_pipapo: split gc into unlink and reclaim phase [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Tue Mar 3 16:31:32 2026 +0100

    netfilter: nft_set_pipapo: split gc into unlink and reclaim phase
    
    commit 9df95785d3d8302f7c066050117b04cd3c2048c2 upstream.
    
    Yiming Qian reports Use-after-free in the pipapo set type:
      Under a large number of expired elements, commit-time GC can run for a very
      long time in a non-preemptible context, triggering soft lockup warnings and
      RCU stall reports (local denial of service).
    
    We must split GC in an unlink and a reclaim phase.
    
    We cannot queue elements for freeing until pointers have been swapped.
    Expired elements are still exposed to both the packet path and userspace
    dumpers via the live copy of the data structure.
    
    call_rcu() does not protect us: dump operations or element lookups starting
    after call_rcu has fired can still observe the free'd element, unless the
    commit phase has made enough progress to swap the clone and live pointers
    before any new reader has picked up the old version.
    
    This a similar approach as done recently for the rbtree backend in commit
    35f83a75529a ("netfilter: nft_set_rbtree: don't gc elements on insert").
    
    Fixes: 3c4287f62044 ("nf_tables: Add set type for arbitrary concatenation of ranges")
    Reported-by: Yiming Qian <yimingqian591@gmail.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.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_CT: drop pending enqueued packets on template removal [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Mar 12 13:48:48 2026 +0100

    netfilter: xt_CT: drop pending enqueued packets on template removal
    
    [ Upstream commit f62a218a946b19bb59abdd5361da85fa4606b96b ]
    
    Templates refer to objects that can go away while packets are sitting in
    nfqueue refer to:
    
    - helper, this can be an issue on module removal.
    - timeout policy, nfnetlink_cttimeout might remove it.
    
    The use of templates with zone and event cache filter are safe, since
    this just copies values.
    
    Flush these enqueued packets in case the template rule gets removed.
    
    Fixes: 24de58f46516 ("netfilter: xt_CT: allow to attach timeout policy + glue code")
    Reported-by: Yiming Qian <yimingqian591@gmail.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    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>

netfilter: xt_time: use unsigned int for monthday bit shift [+ + +]
Author: Jenny Guanni Qu <qguanni@gmail.com>
Date:   Thu Mar 12 14:59:49 2026 +0000

    netfilter: xt_time: use unsigned int for monthday bit shift
    
    [ Upstream commit 00050ec08cecfda447e1209b388086d76addda3a ]
    
    The monthday field can be up to 31, and shifting a signed integer 1
    by 31 positions (1 << 31) is undefined behavior in C, as the result
    overflows a 32-bit signed int. Use 1U to ensure well-defined behavior
    for all valid monthday values.
    
    Change the weekday shift to 1U as well for consistency.
    
    Fixes: ee4411a1b1e0 ("[NETFILTER]: x_tables: add xt_time match")
    Reported-by: Klaudia Kloc <klaudia@vidocsecurity.com>
    Reported-by: Dawid Moczadło <dawid@vidocsecurity.com>
    Tested-by: Jenny Guanni Qu <qguanni@gmail.com>
    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>

 
nfc: nci: clear NCI_DATA_EXCHANGE before calling completion callback [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Tue Mar 3 08:23:44 2026 -0800

    nfc: nci: clear NCI_DATA_EXCHANGE before calling completion callback
    
    [ Upstream commit 0efdc02f4f6d52f8ca5d5889560f325a836ce0a8 ]
    
    Move clear_bit(NCI_DATA_EXCHANGE) before invoking the data exchange
    callback in nci_data_exchange_complete().
    
    The callback (e.g. rawsock_data_exchange_complete) may immediately
    schedule another data exchange via schedule_work(tx_work).  On a
    multi-CPU system, tx_work can run and reach nci_transceive() before
    the current nci_data_exchange_complete() clears the flag, causing
    test_and_set_bit(NCI_DATA_EXCHANGE) to return -EBUSY and the new
    transfer to fail.
    
    This causes intermittent flakes in nci/nci_dev in NIPA:
    
      # #  RUN           NCI.NCI1_0.t4t_tag_read ...
      # # t4t_tag_read: Test terminated by timeout
      # #          FAIL  NCI.NCI1_0.t4t_tag_read
      # not ok 3 NCI.NCI1_0.t4t_tag_read
    
    Fixes: 38f04c6b1b68 ("NFC: protect nci_data_exchange transactions")
    Reviewed-by: Joe Damato <joe@dama.to>
    Link: https://patch.msgid.link/20260303162346.2071888-5-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nfc: nci: free skb on nci_transceive early error paths [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Tue Mar 3 08:23:41 2026 -0800

    nfc: nci: free skb on nci_transceive early error paths
    
    [ Upstream commit 7bd4b0c4779f978a6528c9b7937d2ca18e936e2c ]
    
    nci_transceive() takes ownership of the skb passed by the caller,
    but the -EPROTO, -EINVAL, and -EBUSY error paths return without
    freeing it.
    
    Due to issues clearing NCI_DATA_EXCHANGE fixed by subsequent changes
    the nci/nci_dev selftest hits the error path occasionally in NIPA,
    and kmemleak detects leaks:
    
    unreferenced object 0xff11000015ce6a40 (size 640):
      comm "nci_dev", pid 3954, jiffies 4295441246
      hex dump (first 32 bytes):
        6b 6b 6b 6b 00 a4 00 0c 02 e1 03 6b 6b 6b 6b 6b  kkkk.......kkkkk
        6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b  kkkkkkkkkkkkkkkk
      backtrace (crc 7c40cc2a):
        kmem_cache_alloc_node_noprof+0x492/0x630
        __alloc_skb+0x11e/0x5f0
        alloc_skb_with_frags+0xc6/0x8f0
        sock_alloc_send_pskb+0x326/0x3f0
        nfc_alloc_send_skb+0x94/0x1d0
        rawsock_sendmsg+0x162/0x4c0
        do_syscall_64+0x117/0xfc0
    
    Fixes: 6a2968aaf50c ("NFC: basic NCI protocol implementation")
    Reviewed-by: Joe Damato <joe@dama.to>
    Link: https://patch.msgid.link/20260303162346.2071888-2-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
NFC: nxp-nci: allow GPIOs to sleep [+ + +]
Author: Ian Ray <ian.ray@gehealthcare.com>
Date:   Tue Mar 17 10:53:36 2026 +0200

    NFC: nxp-nci: allow GPIOs to sleep
    
    commit 55dc632ab2ac2889b15995a9eef56c753d48ebc7 upstream.
    
    Allow the firmware and enable GPIOs to sleep.
    
    This fixes a `WARN_ON' and allows the driver to operate GPIOs which are
    connected to I2C GPIO expanders.
    
    -- >8 --
    kernel: WARNING: CPU: 3 PID: 2636 at drivers/gpio/gpiolib.c:3880 gpiod_set_value+0x88/0x98
    -- >8 --
    
    Fixes: 43201767b44c ("NFC: nxp-nci: Convert to use GPIO descriptor")
    Cc: stable@vger.kernel.org
    Signed-off-by: Ian Ray <ian.ray@gehealthcare.com>
    Link: https://patch.msgid.link/20260317085337.146545-1-ian.ray@gehealthcare.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nfc: pn533: properly drop the usb interface reference on disconnect [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon Feb 23 12:28:30 2026 +0100

    nfc: pn533: properly drop the usb interface reference on disconnect
    
    commit 12133a483dfa832241fbbf09321109a0ea8a520e upstream.
    
    When the device is disconnected from the driver, there is a "dangling"
    reference count on the usb interface that was grabbed in the probe
    callback.  Fix this up by properly dropping the reference after we are
    done with it.
    
    Cc: stable <stable@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Fixes: c46ee38620a2 ("NFC: pn533: add NXP pn533 nfc device driver")
    Link: https://patch.msgid.link/2026022329-flashing-ought-7573@gregkh
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

nfc: rawsock: cancel tx_work before socket teardown [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Tue Mar 3 08:23:45 2026 -0800

    nfc: rawsock: cancel tx_work before socket teardown
    
    [ Upstream commit d793458c45df2aed498d7f74145eab7ee22d25aa ]
    
    In rawsock_release(), cancel any pending tx_work and purge the write
    queue before orphaning the socket.  rawsock_tx_work runs on the system
    workqueue and calls nfc_data_exchange which dereferences the NCI
    device.  Without synchronization, tx_work can race with socket and
    device teardown when a process is killed (e.g. by SIGKILL), leading
    to use-after-free or leaked references.
    
    Set SEND_SHUTDOWN first so that if tx_work is already running it will
    see the flag and skip transmitting, then use cancel_work_sync to wait
    for any in-progress execution to finish, and finally purge any
    remaining queued skbs.
    
    Fixes: 23b7869c0fd0 ("NFC: add the NFC socket raw protocol")
    Reviewed-by: Joe Damato <joe@dama.to>
    Link: https://patch.msgid.link/20260303162346.2071888-6-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfnetlink_osf: validate individual option lengths in fingerprints [+ + +]
Author: Weiming Shi <bestswngs@gmail.com>
Date:   Thu Mar 19 15:32:44 2026 +0800

    nfnetlink_osf: validate individual option lengths in fingerprints
    
    [ Upstream commit dbdfaae9609629a9569362e3b8f33d0a20fd783c ]
    
    nfnl_osf_add_callback() validates opt_num bounds and string
    NUL-termination but does not check individual option length fields.
    A zero-length option causes nf_osf_match_one() to enter the option
    matching loop even when foptsize sums to zero, which matches packets
    with no TCP options where ctx->optp is NULL:
    
     Oops: general protection fault
     KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
     RIP: 0010:nf_osf_match_one (net/netfilter/nfnetlink_osf.c:98)
     Call Trace:
      nf_osf_match (net/netfilter/nfnetlink_osf.c:227)
      xt_osf_match_packet (net/netfilter/xt_osf.c:32)
      ipt_do_table (net/ipv4/netfilter/ip_tables.c:293)
      nf_hook_slow (net/netfilter/core.c:623)
      ip_local_deliver (net/ipv4/ip_input.c:262)
      ip_rcv (net/ipv4/ip_input.c:573)
    
    Additionally, an MSS option (kind=2) with length < 4 causes
    out-of-bounds reads when nf_osf_match_one() unconditionally accesses
    optp[2] and optp[3] for MSS value extraction.  While RFC 9293
    section 3.2 specifies that the MSS option is always exactly 4
    bytes (Kind=2, Length=4), the check uses "< 4" rather than
    "!= 4" because lengths greater than 4 do not cause memory
    safety issues -- the buffer is guaranteed to be at least
    foptsize bytes by the ctx->optsize == foptsize check.
    
    Reject fingerprints where any option has zero length, or where an MSS
    option has length less than 4, at add time rather than trusting these
    values in the packet matching hot path.
    
    Fixes: 11eeef41d5f6 ("netfilter: passive OS fingerprint xtables match")
    Reported-by: Xiang Mei <xmei5@asu.edu>
    Signed-off-by: Weiming Shi <bestswngs@gmail.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
NFS: Fix a deadlock involving nfs_release_folio() [+ + +]
Author: Trond Myklebust <trond.myklebust@hammerspace.com>
Date:   Tue Feb 24 15:02:37 2026 +0800

    NFS: Fix a deadlock involving nfs_release_folio()
    
    [ Upstream commit cce0be6eb4971456b703aaeafd571650d314bcca ]
    
    Wang Zhaolong reports a deadlock involving NFSv4.1 state recovery
    waiting on kthreadd, which is attempting to reclaim memory by calling
    nfs_release_folio(). The latter cannot make progress due to state
    recovery being needed.
    
    It seems that the only safe thing to do here is to kick off a writeback
    of the folio, without waiting for completion, or else kicking off an
    asynchronous commit.
    
    Reported-by: Wang Zhaolong <wangzhaolong@huaweicloud.com>
    Fixes: 96780ca55e3c ("NFS: fix up nfs_release_folio() to try to release the page")
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    [ Minor conflict resolved. ]
    Signed-off-by: Li hongliang <1468888505@139.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nfs: pass explicit offset/count to trace events [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Tue Feb 24 15:00:58 2026 +0800

    nfs: pass explicit offset/count to trace events
    
    [ Upstream commit fada32ed6dbc748f447c8d050a961b75d946055a ]
    
    nfs_folio_length is unsafe to use without having the folio locked and a
    check for a NULL ->f_mapping that protects against truncations and can
    lead to kernel crashes.  E.g. when running xfstests generic/065 with
    all nfs trace points enabled.
    
    Follow the model of the XFS trace points and pass in an explіcit offset
    and length.  This has the additional benefit that these values can
    be more accurate as some of the users touch partial folio ranges.
    
    Fixes: eb5654b3b89d ("NFS: Enable tracing of nfs_invalidate_folio() and nfs_launder_folio()")
    Reported-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
    [ Minor conflict resolved. ]
    Signed-off-by: Li hongliang <1468888505@139.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nfsd: fix heap overflow in NFSv4.0 LOCK replay cache [+ + +]
Author: Jeff Layton <jlayton@kernel.org>
Date:   Fri Mar 20 07:21:17 2026 -0400

    nfsd: fix heap overflow in NFSv4.0 LOCK replay cache
    
    [ Upstream commit 5133b61aaf437e5f25b1b396b14242a6bb0508e2 ]
    
    The NFSv4.0 replay cache uses a fixed 112-byte inline buffer
    (rp_ibuf[NFSD4_REPLAY_ISIZE]) to store encoded operation responses.
    This size was calculated based on OPEN responses and does not account
    for LOCK denied responses, which include the conflicting lock owner as
    a variable-length field up to 1024 bytes (NFS4_OPAQUE_LIMIT).
    
    When a LOCK operation is denied due to a conflict with an existing lock
    that has a large owner, nfsd4_encode_operation() copies the full encoded
    response into the undersized replay buffer via read_bytes_from_xdr_buf()
    with no bounds check. This results in a slab-out-of-bounds write of up
    to 944 bytes past the end of the buffer, corrupting adjacent heap memory.
    
    This can be triggered remotely by an unauthenticated attacker with two
    cooperating NFSv4.0 clients: one sets a lock with a large owner string,
    then the other requests a conflicting lock to provoke the denial.
    
    We could fix this by increasing NFSD4_REPLAY_ISIZE to allow for a full
    opaque, but that would increase the size of every stateowner, when most
    lockowners are not that large.
    
    Instead, fix this by checking the encoded response length against
    NFSD4_REPLAY_ISIZE before copying into the replay buffer. If the
    response is too large, set rp_buflen to 0 to skip caching the replay
    payload. The status is still cached, and the client already received the
    correct response on the original request.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable@kernel.org
    Reported-by: Nicholas Carlini <npc@anthropic.com>
    Tested-by: Nicholas Carlini <npc@anthropic.com>
    Signed-off-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    [ replaced `op_status_offset + XDR_UNIT` with existing `post_err_offset` variable ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
NFSD: Hold net reference for the lifetime of /proc/fs/nfs/exports fd [+ + +]
Author: Chuck Lever <chuck.lever@oracle.com>
Date:   Thu Feb 19 16:50:17 2026 -0500

    NFSD: Hold net reference for the lifetime of /proc/fs/nfs/exports fd
    
    commit e7fcf179b82d3a3730fd8615da01b087cc654d0b upstream.
    
    The /proc/fs/nfs/exports proc entry is created at module init
    and persists for the module's lifetime. exports_proc_open()
    captures the caller's current network namespace and stores
    its svc_export_cache in seq->private, but takes no reference
    on the namespace. If the namespace is subsequently torn down
    (e.g. container destruction after the opener does setns() to a
    different namespace), nfsd_net_exit() calls nfsd_export_shutdown()
    which frees the cache. Subsequent reads on the still-open fd
    dereference the freed cache_detail, walking a freed hash table.
    
    Hold a reference on the struct net for the lifetime of the open
    file descriptor. This prevents nfsd_net_exit() from running --
    and thus prevents nfsd_export_shutdown() from freeing the cache
    -- while any exports fd is open. cache_detail already stores
    its net pointer (cd->net, set by cache_create_net()), so
    exports_release() can retrieve it without additional per-file
    storage.
    
    Reported-by: Misbah Anjum N <misanjum@linux.ibm.com>
    Closes: https://lore.kernel.org/linux-nfs/dcd371d3a95815a84ba7de52cef447b8@linux.ibm.com/
    Fixes: 96d851c4d28d ("nfsd: use proper net while reading "exports" file")
    Cc: stable@vger.kernel.org
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Reviewed-by: NeilBrown <neil@brown.name>
    Tested-by: Olga Kornievskaia <okorniev@redhat.com>
    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>

 
nvdimm/bus: Fix potential use after free in asynchronous initialization [+ + +]
Author: Ira Weiny <ira.weiny@intel.com>
Date:   Fri Mar 6 12:33:05 2026 -0600

    nvdimm/bus: Fix potential use after free in asynchronous initialization
    
    commit a8aec14230322ed8f1e8042b6d656c1631d41163 upstream.
    
    Dingisoul with KASAN reports a use after free if device_add() fails in
    nd_async_device_register().
    
    Commit b6eae0f61db2 ("libnvdimm: Hold reference on parent while
    scheduling async init") correctly added a reference on the parent device
    to be held until asynchronous initialization was complete.  However, if
    device_add() results in an allocation failure the ref count of the
    device drops to 0 prior to the parent pointer being accessed.  Thus
    resulting in use after free.
    
    The bug bot AI correctly identified the fix.  Save a reference to the
    parent pointer to be used to drop the parent reference regardless of the
    outcome of device_add().
    
    Reported-by: Dingisoul <dingiso.kernel@gmail.com>
    Closes: http://lore.kernel.org/8855544b-be9e-4153-aa55-0bc328b13733@gmail.com
    Fixes: b6eae0f61db2 ("libnvdimm: Hold reference on parent while scheduling async init")
    Cc: stable@vger.kernel.org
    Reviewed-by: Dave Jiang <dave.jiang@intel.com>
    Link: https://patch.msgid.link/20260306-fix-uaf-async-init-v1-1-a28fd7526723@intel.com
    Signed-off-by: Ira Weiny <ira.weiny@intel.com>
    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>

 
nvme: fix memory allocation in nvme_pr_read_keys() [+ + +]
Author: Sungwoo Kim <iam@sung-woo.kim>
Date:   Fri Feb 27 19:19:28 2026 -0500

    nvme: fix memory allocation in nvme_pr_read_keys()
    
    [ Upstream commit c3320153769f05fd7fe9d840cb555dd3080ae424 ]
    
    nvme_pr_read_keys() takes num_keys from userspace and uses it to
    calculate the allocation size for rse via struct_size(). The upper
    limit is PR_KEYS_MAX (64K).
    
    A malicious or buggy userspace can pass a large num_keys value that
    results in a 4MB allocation attempt at most, causing a warning in
    the page allocator when the order exceeds MAX_PAGE_ORDER.
    
    To fix this, use kvzalloc() instead of kzalloc().
    
    This bug has the same reasoning and fix with the patch below:
    https://lore.kernel.org/linux-block/20251212013510.3576091-1-kartikey406@gmail.com/
    
    Warning log:
    WARNING: mm/page_alloc.c:5216 at __alloc_frozen_pages_noprof+0x5aa/0x2300 mm/page_alloc.c:5216, CPU#1: syz-executor117/272
    Modules linked in:
    CPU: 1 UID: 0 PID: 272 Comm: syz-executor117 Not tainted 6.19.0 #1 PREEMPT(voluntary)
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014
    RIP: 0010:__alloc_frozen_pages_noprof+0x5aa/0x2300 mm/page_alloc.c:5216
    Code: ff 83 bd a8 fe ff ff 0a 0f 86 69 fb ff ff 0f b6 1d f9 f9 c4 04 80 fb 01 0f 87 3b 76 30 ff 83 e3 01 75 09 c6 05 e4 f9 c4 04 01 <0f> 0b 48 c7 85 70 fe ff ff 00 00 00 00 e9 8f fd ff ff 31 c0 e9 0d
    RSP: 0018:ffffc90000fcf450 EFLAGS: 00010246
    RAX: 0000000000000000 RBX: 0000000000000000 RCX: 1ffff920001f9ea0
    RDX: 0000000000000000 RSI: 000000000000000b RDI: 0000000000040dc0
    RBP: ffffc90000fcf648 R08: ffff88800b6c3380 R09: 0000000000000001
    R10: ffffc90000fcf840 R11: ffff88807ffad280 R12: 0000000000000000
    R13: 0000000000040dc0 R14: 0000000000000001 R15: ffffc90000fcf620
    FS:  0000555565db33c0(0000) GS:ffff8880be26c000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 000000002000000c CR3: 0000000003b72000 CR4: 00000000000006f0
    Call Trace:
     <TASK>
     alloc_pages_mpol+0x236/0x4d0 mm/mempolicy.c:2486
     alloc_frozen_pages_noprof+0x149/0x180 mm/mempolicy.c:2557
     ___kmalloc_large_node+0x10c/0x140 mm/slub.c:5598
     __kmalloc_large_node_noprof+0x25/0xc0 mm/slub.c:5629
     __do_kmalloc_node mm/slub.c:5645 [inline]
     __kmalloc_noprof+0x483/0x6f0 mm/slub.c:5669
     kmalloc_noprof include/linux/slab.h:961 [inline]
     kzalloc_noprof include/linux/slab.h:1094 [inline]
     nvme_pr_read_keys+0x8f/0x4c0 drivers/nvme/host/pr.c:245
     blkdev_pr_read_keys block/ioctl.c:456 [inline]
     blkdev_common_ioctl+0x1b71/0x29b0 block/ioctl.c:730
     blkdev_ioctl+0x299/0x700 block/ioctl.c:786
     vfs_ioctl fs/ioctl.c:51 [inline]
     __do_sys_ioctl fs/ioctl.c:597 [inline]
     __se_sys_ioctl fs/ioctl.c:583 [inline]
     __x64_sys_ioctl+0x1bf/0x220 fs/ioctl.c:583
     x64_sys_call+0x1280/0x21b0 mnt/fuzznvme_1/fuzznvme/linux-build/v6.19/./arch/x86/include/generated/asm/syscalls_64.h:17
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0x71/0x330 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    RIP: 0033:0x7fb893d3108d
    Code: 28 c3 e8 46 1e 00 00 66 0f 1f 44 00 00 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007ffff61f2f38 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
    RAX: ffffffffffffffda RBX: 00007ffff61f3138 RCX: 00007fb893d3108d
    RDX: 0000000020000040 RSI: 00000000c01070ce RDI: 0000000000000003
    RBP: 0000000000000001 R08: 0000000000000000 R09: 00007ffff61f3138
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000001
    R13: 00007ffff61f3128 R14: 00007fb893dae530 R15: 0000000000000001
     </TASK>
    
    Fixes: 5fd96a4e15de (nvme: Add pr_ops read_keys support)
    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>
    Reviewed-by: Hannes Reinecke <hare@suse.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: reject invalid pr_read_keys() num_keys values [+ + +]
Author: Stefan Hajnoczi <stefanha@redhat.com>
Date:   Mon Dec 1 16:43:27 2025 -0500

    nvme: reject invalid pr_read_keys() num_keys values
    
    [ Upstream commit 38ec8469f39e0e96e7dd9b76f05e0f8eb78be681 ]
    
    The pr_read_keys() interface has a u32 num_keys parameter. The NVMe
    Reservation Report command has a u32 maximum length. Reject num_keys
    values that are too large to fit.
    
    This will become important when pr_read_keys() is exposed to untrusted
    userspace via an <linux/pr.h> ioctl.
    
    Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
    Reviewed-by: Hannes Reinecke <hare@suse.de>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Stable-dep-of: c3320153769f ("nvme: fix memory allocation in nvme_pr_read_keys()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
octeon_ep: avoid compiler and IQ/OQ reordering [+ + +]
Author: Vimlesh Kumar <vimleshk@marvell.com>
Date:   Fri Feb 27 09:13:58 2026 +0000

    octeon_ep: avoid compiler and IQ/OQ reordering
    
    [ Upstream commit 43b3160cb639079a15daeb5f080120afbfbfc918 ]
    
    Utilize READ_ONCE and WRITE_ONCE APIs for IO queue Tx/Rx
    variable access to prevent compiler optimization and reordering.
    Additionally, ensure IO queue OUT/IN_CNT registers are flushed
    by performing a read-back after writing.
    
    The compiler could reorder reads/writes to pkts_pending, last_pkt_count,
    etc., causing stale values to be used when calculating packets to process
    or register updates to send to hardware. The Octeon hardware requires a
    read-back after writing to OUT_CNT/IN_CNT registers to ensure the write
    has been flushed through any posted write buffers before the interrupt
    resend bit is set. Without this, we have observed cases where the hardware
    didn't properly update its internal state.
    
    wmb/rmb only provides ordering guarantees but doesn't prevent the compiler
    from performing optimizations like caching in registers, load tearing etc.
    
    Fixes: 37d79d0596062 ("octeon_ep: add Tx/Rx processing and interrupt support")
    Signed-off-by: Sathesh Edara <sedara@marvell.com>
    Signed-off-by: Shinas Rasheed <srasheed@marvell.com>
    Signed-off-by: Vimlesh Kumar <vimleshk@marvell.com>
    Link: https://patch.msgid.link/20260227091402.1773833-3-vimleshk@marvell.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

octeon_ep: Relocate counter updates before NAPI [+ + +]
Author: Vimlesh Kumar <vimleshk@marvell.com>
Date:   Fri Feb 27 09:13:57 2026 +0000

    octeon_ep: Relocate counter updates before NAPI
    
    [ Upstream commit 18c04a808c436d629d5812ce883e3822a5f5a47f ]
    
    Relocate IQ/OQ IN/OUT_CNTS updates to occur before NAPI completion,
    and replace napi_complete with napi_complete_done.
    
    Moving the IQ/OQ counter updates before napi_complete_done ensures
    1. Counter registers are updated before re-enabling interrupts.
    2. Prevents a race where new packets arrive but counters aren't properly
       synchronized.
    napi_complete_done (vs napi_complete) allows for better
    interrupt coalescing.
    
    Fixes: 37d79d0596062 ("octeon_ep: add Tx/Rx processing and interrupt support")
    Signed-off-by: Sathesh Edara <sedara@marvell.com>
    Signed-off-by: Shinas Rasheed <srasheed@marvell.com>
    Signed-off-by: Vimlesh Kumar <vimleshk@marvell.com>
    Link: https://patch.msgid.link/20260227091402.1773833-2-vimleshk@marvell.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
octeontx2-af: devlink health: use retained error fmsg API [+ + +]
Author: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Date:   Wed Oct 18 22:26:42 2023 +0200

    octeontx2-af: devlink health: use retained error fmsg API
    
    [ Upstream commit d8cf03fca3411de8a493dae5e9fcf815a4f0977e ]
    
    Drop unneeded error checking.
    
    devlink_fmsg_*() family of functions is now retaining errors,
    so there is no need to check for them after each call.
    
    Reviewed-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
    Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    Signed-off-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 87f7dff3ec75 ("octeontx2-af: devlink: fix NIX RAS reporter to use RAS interrupt status")
    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>

 
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: Flush correct cache in cacheflush() syscall [+ + +]
Author: Helge Deller <deller@gmx.de>
Date:   Mon Mar 9 15:16:37 2026 +0100

    parisc: Flush correct cache in cacheflush() syscall
    
    commit 2c98a8fbd6aa647414c6248dacf254ebe91c79ad upstream.
    
    The assembly flush instructions were swapped for I- and D-cache flags:
    
    SYSCALL_DEFINE3(cacheflush, ...)
    {
            if (cache & DCACHE) {
                            "fic ...\n"
            }
            if (cache & ICACHE && error == 0) {
                            "fdc ...\n"
            }
    
    Fix it by using fdc for DCACHE, and fic for ICACHE flushing.
    
    Reported-by: Felix Lechner <felix.lechner@lease-up.com>
    Fixes: c6d96328fecd ("parisc: Add cacheflush() syscall")
    Cc: <stable@vger.kernel.org> # v6.5+
    Signed-off-by: Helge Deller <deller@gmx.de>
    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>

 
PCI: Correct PCI_CAP_EXP_ENDPOINT_SIZEOF_V2 value [+ + +]
Author: Bjorn Helgaas <bhelgaas@google.com>
Date:   Fri Feb 27 06:10:08 2026 -0600

    PCI: Correct PCI_CAP_EXP_ENDPOINT_SIZEOF_V2 value
    
    [ Upstream commit 39195990e4c093c9eecf88f29811c6de29265214 ]
    
    fb82437fdd8c ("PCI: Change capability register offsets to hex") incorrectly
    converted the PCI_CAP_EXP_ENDPOINT_SIZEOF_V2 value from decimal 52 to hex
    0x32:
    
      -#define PCI_CAP_EXP_ENDPOINT_SIZEOF_V2 52      /* v2 endpoints with link end here */
      +#define PCI_CAP_EXP_ENDPOINT_SIZEOF_V2 0x32    /* end of v2 EPs w/ link */
    
    This broke PCI capabilities in a VMM because subsequent ones weren't
    DWORD-aligned.
    
    Change PCI_CAP_EXP_ENDPOINT_SIZEOF_V2 to the correct value of 0x34.
    
    fb82437fdd8c was from Baruch Siach <baruch@tkos.co.il>, but this was not
    Baruch's fault; it's a mistake I made when applying the patch.
    
    Fixes: fb82437fdd8c ("PCI: Change capability register offsets to hex")
    Reported-by: David Woodhouse <dwmw2@infradead.org>
    Closes: https://lore.kernel.org/all/3ae392a0158e9d9ab09a1d42150429dd8ca42791.camel@infradead.org
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: Update BAR # and window messages [+ + +]
Author: Puranjay Mohan <puranjay@kernel.org>
Date:   Sat Nov 6 16:56:05 2021 +0530

    PCI: Update BAR # and window messages
    
    [ Upstream commit 65f8e0beac5a495b8f3b387add1f9f4470678cb5 ]
    
    The PCI log messages print the register offsets at some places and BAR
    numbers at other places. There is no uniformity in this logging mechanism.
    It would be better to print names than register offsets.
    
    Add a helper function that aids in printing more meaningful information
    about the BAR numbers like "VF BAR", "ROM", "bridge window", etc.  This
    function can be called while printing PCI log messages.
    
    [bhelgaas: fold in Lukas' static array suggestion from
    https: //lore.kernel.org/all/20211106115831.GA7452@wunner.de/]
    Link: https://lore.kernel.org/r/20211106112606.192563-2-puranjay12@gmail.com
    Signed-off-by: Puranjay Mohan <puranjay12@gmail.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Stable-dep-of: 11721c45a826 ("PCI: Use resource_set_range() that correctly sets ->end")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: Use resource names in PCI log messages [+ + +]
Author: Puranjay Mohan <puranjay@kernel.org>
Date:   Sat Nov 6 16:56:06 2021 +0530

    PCI: Use resource names in PCI log messages
    
    [ Upstream commit dc4e6f21c3f844ebc1c52b6920b8ec5dfc73f4e8 ]
    
    Use the pci_resource_name() to get the name of the resource and use it
    while printing log messages.
    
    [bhelgaas: rename to match struct resource * names, also use names in other
    BAR messages]
    Link: https://lore.kernel.org/r/20211106112606.192563-3-puranjay12@gmail.com
    Signed-off-by: Puranjay Mohan <puranjay12@gmail.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Stable-dep-of: 11721c45a826 ("PCI: Use resource_set_range() that correctly sets ->end")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: Use resource_set_range() that correctly sets ->end [+ + +]
Author: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Date:   Mon Dec 8 16:56:54 2025 +0200

    PCI: Use resource_set_range() that correctly sets ->end
    
    [ Upstream commit 11721c45a8266a9d0c9684153d20e37159465f96 ]
    
    __pci_read_base() sets resource start and end addresses when resource
    is larger than 4G but pci_bus_addr_t or resource_size_t are not capable
    of representing 64-bit PCI addresses. This creates a problematic
    resource that has non-zero flags but the start and end addresses do not
    yield to resource size of 0 but 1.
    
    Replace custom resource addresses setup with resource_set_range()
    that correctly sets end address as -1 which results in resource_size()
    returning 0.
    
    For consistency, also use resource_set_range() in the other branch that
    does size based resource setup.
    
    Fixes: 23b13bc76f35 ("PCI: Fail safely if we can't handle BARs larger than 4GB")
    Link: https://lore.kernel.org/all/20251207215359.28895-1-ansuelsmth@gmail.com/T/#m990492684913c5a158ff0e5fc90697d8ad95351b
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
    Cc: stable@vger.kernel.org
    Cc: Christian Marangi <ansuelsmth@gmail.com>
    Link: https://patch.msgid.link/20251208145654.5294-1-ilpo.jarvinen@linux.intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf: Fix __perf_event_overflow() vs perf_remove_from_context() race [+ + +]
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Tue Feb 24 13:29:09 2026 +0100

    perf: Fix __perf_event_overflow() vs perf_remove_from_context() race
    
    [ Upstream commit c9bc1753b3cc41d0e01fbca7f035258b5f4db0ae ]
    
    Make sure that __perf_event_overflow() runs with IRQs disabled for all
    possible callchains. Specifically the software events can end up running
    it with only preemption disabled.
    
    This opens up a race vs perf_event_exit_event() and friends that will go
    and free various things the overflow path expects to be present, like
    the BPF program.
    
    Fixes: 592903cdcbf6 ("perf_counter: add an event_list")
    Reported-by: Simond Hu <cmdhh1767@gmail.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Tested-by: Simond Hu <cmdhh1767@gmail.com>
    Link: https://patch.msgid.link/20260224122909.GV1395416@noisy.programming.kicks-ass.net
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pinctrl: cirrus: cs42l43: Fix double-put in cs42l43_pin_probe() [+ + +]
Author: Felix Gu <ustc.gu@gmail.com>
Date:   Mon Feb 23 17:39:07 2026 +0800

    pinctrl: cirrus: cs42l43: Fix double-put in cs42l43_pin_probe()
    
    [ Upstream commit fd5bed798f45eb3a178ad527b43ab92705faaf8a ]
    
    devm_add_action_or_reset() already invokes the action on failure,
    so the explicit put causes a double-put.
    
    Fixes: 9b07cdf86a0b ("pinctrl: cirrus: Fix fwnode leak in cs42l43_pin_probe()")
    Signed-off-by: Felix Gu <ustc.gu@gmail.com>
    Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
    Signed-off-by: Linus Walleij <linusw@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: equilibrium: fix warning trace on load [+ + +]
Author: Florian Eckert <fe@dev.tdt.de>
Date:   Thu Feb 5 13:55:46 2026 +0100

    pinctrl: equilibrium: fix warning trace on load
    
    [ Upstream commit 3e00b1b332e54ba50cca6691f628b9c06574024f ]
    
    The callback functions 'eqbr_irq_mask()' and 'eqbr_irq_ack()' are also
    called in the callback function 'eqbr_irq_mask_ack()'. This is done to
    avoid source code duplication. The problem, is that in the function
    'eqbr_irq_mask()' also calles the gpiolib function 'gpiochip_disable_irq()'
    
    This generates the following warning trace in the log for every gpio on
    load.
    
    [    6.088111] ------------[ cut here ]------------
    [    6.092440] WARNING: CPU: 3 PID: 1 at drivers/gpio/gpiolib.c:3810 gpiochip_disable_irq+0x39/0x50
    [    6.097847] Modules linked in:
    [    6.097847] CPU: 3 UID: 0 PID: 1 Comm: swapper/0 Tainted: G        W          6.12.59+ #0
    [    6.097847] Tainted: [W]=WARN
    [    6.097847] RIP: 0010:gpiochip_disable_irq+0x39/0x50
    [    6.097847] Code: 39 c6 48 19 c0 21 c6 48 c1 e6 05 48 03 b2 38 03 00 00 48 81 fe 00 f0 ff ff 77 11 48 8b 46 08 f6 c4 02 74 06 f0 80 66 09 fb c3 <0f> 0b 90 0f 1f 40 00 c3 66 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40
    [    6.097847] RSP: 0000:ffffc9000000b830 EFLAGS: 00010046
    [    6.097847] RAX: 0000000000000045 RBX: ffff888001be02a0 RCX: 0000000000000008
    [    6.097847] RDX: ffff888001be9000 RSI: ffff888001b2dd00 RDI: ffff888001be02a0
    [    6.097847] RBP: ffffc9000000b860 R08: 0000000000000000 R09: 0000000000000000
    [    6.097847] R10: 0000000000000001 R11: ffff888001b2a154 R12: ffff888001be0514
    [    6.097847] R13: ffff888001be02a0 R14: 0000000000000008 R15: 0000000000000000
    [    6.097847] FS:  0000000000000000(0000) GS:ffff888041d80000(0000) knlGS:0000000000000000
    [    6.097847] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [    6.097847] CR2: 0000000000000000 CR3: 0000000003030000 CR4: 00000000001026b0
    [    6.097847] Call Trace:
    [    6.097847]  <TASK>
    [    6.097847]  ? eqbr_irq_mask+0x63/0x70
    [    6.097847]  ? no_action+0x10/0x10
    [    6.097847]  eqbr_irq_mask_ack+0x11/0x60
    
    In an other driver (drivers/pinctrl/starfive/pinctrl-starfive-jh7100.c) the
    interrupt is not disabled here.
    
    To fix this, do not call the 'eqbr_irq_mask()' and 'eqbr_irq_ack()'
    function. Implement instead this directly without disabling the interrupts.
    
    Fixes: 52066a53bd11 ("pinctrl: equilibrium: Convert to immutable irq_chip")
    Signed-off-by: Florian Eckert <fe@dev.tdt.de>
    Signed-off-by: Linus Walleij <linusw@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: equilibrium: rename irq_chip function callbacks [+ + +]
Author: Florian Eckert <fe@dev.tdt.de>
Date:   Thu Feb 5 13:55:45 2026 +0100

    pinctrl: equilibrium: rename irq_chip function callbacks
    
    [ Upstream commit 1f96b84835eafb3e6f366dc3a66c0e69504cec9d ]
    
    Renaming of the irq_chip callback functions to improve clarity.
    
    Signed-off-by: Florian Eckert <fe@dev.tdt.de>
    Signed-off-by: Linus Walleij <linusw@kernel.org>
    Stable-dep-of: 3e00b1b332e5 ("pinctrl: equilibrium: fix warning trace on load")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
platform/x86/amd/pmc: Add support for Van Gogh SoC [+ + +]
Author: Antheas Kapenekakis <lkml@antheas.dev>
Date:   Tue Mar 3 14:31:51 2026 +0800

    platform/x86/amd/pmc: Add support for Van Gogh SoC
    
    [ Upstream commit db4a3f0fbedb0398f77b9047e8b8bb2b49f355bb ]
    
    The ROG Xbox Ally (non-X) SoC features a similar architecture to the
    Steam Deck. While the Steam Deck supports S3 (s2idle causes a crash),
    this support was dropped by the Xbox Ally which only S0ix suspend.
    
    Since the handler is missing here, this causes the device to not suspend
    and the AMD GPU driver to crash while trying to resume afterwards due to
    a power hang.
    
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4659
    Signed-off-by: Antheas Kapenekakis <lkml@antheas.dev>
    Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org>
    Acked-by: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
    Link: https://patch.msgid.link/20251024152152.3981721-2-lkml@antheas.dev
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    [ Adjust context ]
    Signed-off-by: Alva Lan <alvalan9@foxmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
platform/x86: dell-wmi-sysman: Don't hex dump plaintext password data [+ + +]
Author: Thorsten Blum <thorsten.blum@linux.dev>
Date:   Tue Mar 3 12:30:51 2026 +0100

    platform/x86: dell-wmi-sysman: Don't hex dump plaintext password data
    
    commit d1a196e0a6dcddd03748468a0e9e3100790fc85c upstream.
    
    set_new_password() hex dumps the entire buffer, which contains plaintext
    password data, including current and new passwords. Remove the hex dump
    to avoid leaking credentials.
    
    Fixes: e8a60aa7404b ("platform/x86: Introduce support for Systems Management Driver over WMI for Dell Systems")
    Cc: stable@vger.kernel.org
    Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
    Link: https://patch.msgid.link/20260303113050.58127-2-thorsten.blum@linux.dev
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

platform/x86: dell-wmi: Add audio/mic mute key codes [+ + +]
Author: Kurt Borja <kuurtb@gmail.com>
Date:   Sat Feb 7 12:16:34 2026 -0500

    platform/x86: dell-wmi: Add audio/mic mute key codes
    
    commit 26a7601471f62b95d56a81c3a8ccb551b5a6630f upstream.
    
    Add audio/mic mute key codes found in Alienware m18 r1 AMD.
    
    Cc: stable@vger.kernel.org
    Tested-by: Olexa Bilaniuk <obilaniu@gmail.com>
    Suggested-by: Olexa Bilaniuk <obilaniu@gmail.com>
    Signed-off-by: Kurt Borja <kuurtb@gmail.com>
    Acked-by: Pali Rohár <pali@kernel.org>
    Link: https://patch.msgid.link/20260207-mute-keys-v2-1-c55e5471c9c1@gmail.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

platform/x86: hp-bioscfg: Support allocations of larger data [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Mon Mar 9 07:38:27 2026 -0400

    platform/x86: hp-bioscfg: Support allocations of larger data
    
    [ Upstream commit 916727cfdb72cd01fef3fa6746e648f8cb70e713 ]
    
    Some systems have much larger amounts of enumeration attributes
    than have been previously encountered. This can lead to page allocation
    failures when using kcalloc().  Switch over to using kvcalloc() to
    allow larger allocations.
    
    Fixes: 6b2770bfd6f92 ("platform/x86: hp-bioscfg: enum-attributes")
    Cc: stable@vger.kernel.org
    Reported-by: Paul Kerry <p.kerry@sheffield.ac.uk>
    Tested-by: Paul Kerry <p.kerry@sheffield.ac.uk>
    Closes: https://bugs.debian.org/1127612
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Link: https://patch.msgid.link/20260225210646.59381-1-mario.limonciello@amd.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    [ kcalloc() => kvcalloc() ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

platform/x86: thinkpad_acpi: Fix errors reading battery thresholds [+ + +]
Author: Jonathan Teh <jonathan.teh@outlook.com>
Date:   Mon Feb 16 01:01:29 2026 +0000

    platform/x86: thinkpad_acpi: Fix errors reading battery thresholds
    
    [ Upstream commit 53e977b1d50c46f2c4ec3865cd13a822f58ad3cd ]
    
    Check whether the battery supports the relevant charge threshold before
    reading the value to silence these errors:
    
    thinkpad_acpi: acpi_evalf(BCTG, dd, ...) failed: AE_NOT_FOUND
    ACPI: \_SB_.PCI0.LPC_.EC__.HKEY: BCTG: evaluate failed
    thinkpad_acpi: acpi_evalf(BCSG, dd, ...) failed: AE_NOT_FOUND
    ACPI: \_SB_.PCI0.LPC_.EC__.HKEY: BCSG: evaluate failed
    
    when reading the charge thresholds via sysfs on platforms that do not
    support them such as the ThinkPad T400.
    
    Fixes: 2801b9683f74 ("thinkpad_acpi: Add support for battery thresholds")
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=202619
    Signed-off-by: Jonathan Teh <jonathan.teh@outlook.com>
    Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
    Link: https://patch.msgid.link/MI0P293MB01967B206E1CA6F337EBFB12926CA@MI0P293MB0196.ITAP293.PROD.OUTLOOK.COM
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
PM: runtime: Fix a race condition related to device removal [+ + +]
Author: Bart Van Assche <bvanassche@acm.org>
Date:   Thu Mar 12 11:27:20 2026 -0700

    PM: runtime: Fix a race condition related to device removal
    
    [ Upstream commit 29ab768277617452d88c0607c9299cdc63b6e9ff ]
    
    The following code in pm_runtime_work() may dereference the dev->parent
    pointer after the parent device has been freed:
    
            /* Maybe the parent is now able to suspend. */
            if (parent && !parent->power.ignore_children) {
                    spin_unlock(&dev->power.lock);
    
                    spin_lock(&parent->power.lock);
                    rpm_idle(parent, RPM_ASYNC);
                    spin_unlock(&parent->power.lock);
    
                    spin_lock(&dev->power.lock);
            }
    
    Fix this by inserting a flush_work() call in pm_runtime_remove().
    
    Without this patch blktest block/001 triggers the following complaint
    sporadically:
    
    BUG: KASAN: slab-use-after-free in lock_acquire+0x70/0x160
    Read of size 1 at addr ffff88812bef7198 by task kworker/u553:1/3081
    Workqueue: pm pm_runtime_work
    Call Trace:
     <TASK>
     dump_stack_lvl+0x61/0x80
     print_address_description.constprop.0+0x8b/0x310
     print_report+0xfd/0x1d7
     kasan_report+0xd8/0x1d0
     __kasan_check_byte+0x42/0x60
     lock_acquire.part.0+0x38/0x230
     lock_acquire+0x70/0x160
     _raw_spin_lock+0x36/0x50
     rpm_suspend+0xc6a/0xfe0
     rpm_idle+0x578/0x770
     pm_runtime_work+0xee/0x120
     process_one_work+0xde3/0x1410
     worker_thread+0x5eb/0xfe0
     kthread+0x37b/0x480
     ret_from_fork+0x6cb/0x920
     ret_from_fork_asm+0x11/0x20
     </TASK>
    
    Allocated by task 4314:
     kasan_save_stack+0x2a/0x50
     kasan_save_track+0x18/0x40
     kasan_save_alloc_info+0x3d/0x50
     __kasan_kmalloc+0xa0/0xb0
     __kmalloc_noprof+0x311/0x990
     scsi_alloc_target+0x122/0xb60 [scsi_mod]
     __scsi_scan_target+0x101/0x460 [scsi_mod]
     scsi_scan_channel+0x179/0x1c0 [scsi_mod]
     scsi_scan_host_selected+0x259/0x2d0 [scsi_mod]
     store_scan+0x2d2/0x390 [scsi_mod]
     dev_attr_store+0x43/0x80
     sysfs_kf_write+0xde/0x140
     kernfs_fop_write_iter+0x3ef/0x670
     vfs_write+0x506/0x1470
     ksys_write+0xfd/0x230
     __x64_sys_write+0x76/0xc0
     x64_sys_call+0x213/0x1810
     do_syscall_64+0xee/0xfc0
     entry_SYSCALL_64_after_hwframe+0x4b/0x53
    
    Freed by task 4314:
     kasan_save_stack+0x2a/0x50
     kasan_save_track+0x18/0x40
     kasan_save_free_info+0x3f/0x50
     __kasan_slab_free+0x67/0x80
     kfree+0x225/0x6c0
     scsi_target_dev_release+0x3d/0x60 [scsi_mod]
     device_release+0xa3/0x220
     kobject_cleanup+0x105/0x3a0
     kobject_put+0x72/0xd0
     put_device+0x17/0x20
     scsi_device_dev_release+0xacf/0x12c0 [scsi_mod]
     device_release+0xa3/0x220
     kobject_cleanup+0x105/0x3a0
     kobject_put+0x72/0xd0
     put_device+0x17/0x20
     scsi_device_put+0x7f/0xc0 [scsi_mod]
     sdev_store_delete+0xa5/0x120 [scsi_mod]
     dev_attr_store+0x43/0x80
     sysfs_kf_write+0xde/0x140
     kernfs_fop_write_iter+0x3ef/0x670
     vfs_write+0x506/0x1470
     ksys_write+0xfd/0x230
     __x64_sys_write+0x76/0xc0
     x64_sys_call+0x213/0x1810
    
    Reported-by: Ming Lei <ming.lei@redhat.com>
    Closes: https://lore.kernel.org/all/ZxdNvLNI8QaOfD2d@fedora/
    Reported-by: syzbot+6c905ab800f20cf4086c@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/all/68c13942.050a0220.2ff435.000b.GAE@google.com/
    Fixes: 5e928f77a09a ("PM: Introduce core framework for run-time PM of I/O devices (rev. 17)")
    Signed-off-by: Bart Van Assche <bvanassche@acm.org>
    Link: https://patch.msgid.link/20260312182720.2776083-1-bvanassche@acm.org
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.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: bcm: bcm2835-power: Increase ASB control timeout [+ + +]
Author: Maíra Canal <mcanal@igalia.com>
Date:   Tue Mar 17 19:41:49 2026 -0300

    pmdomain: bcm: bcm2835-power: Increase ASB control timeout
    
    commit b826d2c0b0ecb844c84431ba6b502e744f5d919a upstream.
    
    The bcm2835_asb_control() function uses a tight polling loop to wait
    for the ASB bridge to acknowledge a request. During intensive workloads,
    this handshake intermittently fails for V3D's master ASB on BCM2711,
    resulting in "Failed to disable ASB master for v3d" errors during
    runtime PM suspend. As a consequence, the failed power-off leaves V3D in
    a broken state, leading to bus faults or system hangs on later accesses.
    
    As the timeout is insufficient in some scenarios, increase the polling
    timeout from 1us to 5us, which is still negligible in the context of a
    power domain transition. Also, replace the open-coded ktime_get_ns()/
    cpu_relax() polling loop with readl_poll_timeout_atomic().
    
    Cc: stable@vger.kernel.org
    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: Stefan Wahren <wahrenst@gmx.net>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
pNFS: Fix a deadlock when returning a delegation during open() [+ + +]
Author: Trond Myklebust <trond.myklebust@hammerspace.com>
Date:   Tue Feb 24 15:22:02 2026 +0800

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

 
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>

 
rcu/nocb: Fix possible invalid rdp's->nocb_cb_kthread pointer access [+ + +]
Author: Zqiang <qiang.zhang1211@gmail.com>
Date:   Wed Mar 4 10:57:24 2026 +0800

    rcu/nocb: Fix possible invalid rdp's->nocb_cb_kthread pointer access
    
    [ Upstream commit 1bba3900ca18bdae28d1b9fa10f16a8f8cb2ada1 ]
    
    In the preparation stage of CPU online, if the corresponding
    the rdp's->nocb_cb_kthread does not exist, will be created,
    there is a situation where the rdp's rcuop kthreads creation fails,
    and then de-offload this CPU's rdp, does not assign this CPU's
    rdp->nocb_cb_kthread pointer, but this rdp's->nocb_gp_rdp and
    rdp's->rdp_gp->nocb_gp_kthread is still valid.
    
    This will cause the subsequent re-offload operation of this offline
    CPU, which will pass the conditional check and the kthread_unpark()
    will access invalid rdp's->nocb_cb_kthread pointer.
    
    This commit therefore use rdp's->nocb_gp_kthread instead of
    rdp_gp's->nocb_gp_kthread for safety check.
    
    Signed-off-by: Zqiang <qiang.zhang1211@gmail.com>
    Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
    Signed-off-by: Neeraj Upadhyay (AMD) <neeraj.upadhyay@kernel.org>
    [ Minor conflict resolved. ]
    Signed-off-by: Jianqiang kang <jianqkang@sina.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
RDMA/irdma: Fix kernel stack leak in irdma_create_user_ah() [+ + +]
Author: Jason Gunthorpe <jgg@ziepe.ca>
Date:   Mon Feb 16 11:02:49 2026 -0400

    RDMA/irdma: Fix kernel stack leak in irdma_create_user_ah()
    
    commit 74586c6da9ea222a61c98394f2fc0a604748438c upstream.
    
    struct irdma_create_ah_resp {  // 8 bytes, no padding
        __u32 ah_id;               // offset 0 - SET (uresp.ah_id = ah->sc_ah.ah_info.ah_idx)
        __u8  rsvd[4];             // offset 4 - NEVER SET <- LEAK
    };
    
    rsvd[4]: 4 bytes of stack memory leaked unconditionally. Only ah_id is assigned before ib_respond_udata().
    
    The reserved members of the structure were not zeroed.
    
    Cc: stable@vger.kernel.org
    Fixes: b48c24c2d710 ("RDMA/irdma: Implement device supported verb APIs")
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Link: https://patch.msgid.link/3-v1-83e918d69e73+a9-rdma_udata_rc_jgg@nvidia.com
    Signed-off-by: Leon Romanovsky <leon@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: Make IRQ optional [+ + +]
Author: Frieder Schrempf <frieder.schrempf@kontron.de>
Date:   Mon Jul 8 10:40:34 2024 +0200

    regulator: pca9450: Make IRQ optional
    
    [ Upstream commit 83808c54064eef620ad8645dfdcaffe125551532 ]
    
    The IRQ line might not be connected on some boards. Allow the driver
    to be probed without it.
    
    Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de>
    Link: https://patch.msgid.link/20240708084107.38986-5-frieder@fris.de
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: 5d0efaf47ee9 ("regulator: pca9450: Correct interrupt type")
    Signed-off-by: Sasha Levin <sashal@kernel.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: 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>

 
resource: Add resource set range and size helpers [+ + +]
Author: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Date:   Fri Jun 14 13:06:03 2024 +0300

    resource: Add resource set range and size helpers
    
    [ Upstream commit 9fb6fef0fb49124291837af1da5028f79d53f98e ]
    
    Setting the end address for a resource with a given size lacks a helper and
    is therefore coded manually unlike the getter side which has a helper for
    resource size calculation. Also, almost all callsites that calculate the
    end address for a resource also set the start address right before it like
    this:
    
      res->start = start_addr;
      res->end = res->start + size - 1;
    
    Add resource_set_range(res, start_addr, size) that sets the start address
    and calculates the end address to simplify this often repeated fragment.
    
    Also add resource_set_size() for the cases where setting the start address
    of the resource is not necessary but mention in its kerneldoc that
    resource_set_range() is preferred when setting both addresses.
    
    Link: https://lore.kernel.org/r/20240614100606.15830-2-ilpo.jarvinen@linux.intel.com
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Stable-dep-of: 11721c45a826 ("PCI: Use resource_set_range() that correctly sets ->end")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Revert "arm64: dts: qcom: sdm845-oneplus: Mark l14a regulator as boot-on" [+ + +]
Author: Sasha Levin <sashal@kernel.org>
Date:   Sun Mar 15 03:16:50 2026 -0400

    Revert "arm64: dts: qcom: sdm845-oneplus: Mark l14a regulator as boot-on"
    
    This reverts commit dc62cf0814fa62177bb4ba944c72d9f122568cdc.
    
    The backport applied regulator-boot-on to vreg_l12a_1p8 (ldo12) instead
    of vreg_l14a_1p88 (ldo14) due to identical surrounding context lines.
    
    Reported-by: Marco Mattiolo <marco.mattiolo@hotmail.it>
    Signed-off-by: Sasha Levin <sashal@kernel.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>

 
riscv: Sanitize syscall table indexing under speculation [+ + +]
Author: Lukas Gerlach <lukas.gerlach@cispa.de>
Date:   Sat Feb 28 14:27:27 2026 +0800

    riscv: Sanitize syscall table indexing under speculation
    
    [ Upstream commit 25fd7ee7bf58ac3ec7be3c9f82ceff153451946c ]
    
    The syscall number is a user-controlled value used to index into the
    syscall table. Use array_index_nospec() to clamp this value after the
    bounds check to prevent speculative out-of-bounds access and subsequent
    data leakage via cache side channels.
    
    Signed-off-by: Lukas Gerlach <lukas.gerlach@cispa.de>
    Link: https://patch.msgid.link/20251218191332.35849-3-lukas.gerlach@cispa.de
    Signed-off-by: Paul Walmsley <pjw@kernel.org>
    [ Added linux/nospec.h for array_index_nospec() to make sure compile without error ]
    Signed-off-by: Leon Chen <leonchen.oss@139.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rseq: Clarify rseq registration rseq_size bound check comment [+ + +]
Author: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Date:   Fri Feb 20 15:06:40 2026 -0500

    rseq: Clarify rseq registration rseq_size bound check comment
    
    [ Upstream commit 26d43a90be81fc90e26688a51d3ec83188602731 ]
    
    The rseq registration validates that the rseq_size argument is greater
    or equal to 32 (the original rseq size), but the comment associated with
    this check does not clearly state this.
    
    Clarify the comment to that effect.
    
    Fixes: ee3e3ac05c26 ("rseq: Introduce extensible rseq ABI")
    Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://patch.msgid.link/20260220200642.1317826-2-mathieu.desnoyers@efficios.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rust: kunit: fix warning when !CONFIG_PRINTK [+ + +]
Author: Alexandre Courbot <acourbot@nvidia.com>
Date:   Tue Feb 24 19:37:56 2026 +0900

    rust: kunit: fix warning when !CONFIG_PRINTK
    
    [ Upstream commit 7dd34dfc8dfa92a7244242098110388367996ac3 ]
    
    If `CONFIG_PRINTK` is not set, then the following warnings are issued
    during build:
    
      warning: unused variable: `args`
        --> ../rust/kernel/kunit.rs:16:12
        |
      16 | pub fn err(args: fmt::Arguments<'_>) {
        |            ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
        |
        = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
    
      warning: unused variable: `args`
        --> ../rust/kernel/kunit.rs:32:13
        |
      32 | pub fn info(args: fmt::Arguments<'_>) {
        |             ^^^^ help: if this is intentional, prefix it with an underscore: `_args`
    
    Fix this by adding a no-op assignment using `args` when `CONFIG_PRINTK`
    is not set.
    
    Fixes: a66d733da801 ("rust: support running Rust documentation tests as KUnit ones")
    Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
    Reviewed-by: Alice Ryhl <aliceryhl@google.com>
    Reviewed-by: David Gow <david@davidgow.net>
    Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rxrpc: Fix data-race warning and potential load/store tearing [+ + +]
Author: David Howells <dhowells@redhat.com>
Date:   Fri Feb 27 08:54:46 2026 +0800

    rxrpc: Fix data-race warning and potential load/store tearing
    
    [ Upstream commit 5d5fe8bcd331f1e34e0943ec7c18432edfcf0e8b ]
    
    Fix the following:
    
            BUG: KCSAN: data-race in rxrpc_peer_keepalive_worker / rxrpc_send_data_packet
    
    which is reporting an issue with the reads and writes to ->last_tx_at in:
    
            conn->peer->last_tx_at = ktime_get_seconds();
    
    and:
    
            keepalive_at = peer->last_tx_at + RXRPC_KEEPALIVE_TIME;
    
    The lockless accesses to these to values aren't actually a problem as the
    read only needs an approximate time of last transmission for the purposes
    of deciding whether or not the transmission of a keepalive packet is
    warranted yet.
    
    Also, as ->last_tx_at is a 64-bit value, tearing can occur on a 32-bit
    arch.
    
    Fix both of these by switching to an unsigned int for ->last_tx_at and only
    storing the LSW of the time64_t.  It can then be reconstructed at need
    provided no more than 68 years has elapsed since the last transmission.
    
    Fixes: ace45bec6d77 ("rxrpc: Fix firewall route keepalive")
    Reported-by: syzbot+6182afad5045e6703b3d@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/r/695e7cfb.050a0220.1c677c.036b.GAE@google.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
    cc: stable@kernel.org
    Link: https://patch.msgid.link/1107124.1768903985@warthog.procyon.org.uk
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ The context change is due to the commit f3a123b25429
    ("rxrpc: Allow the app to store private data on peer structs"),
    the commit 372d12d191cb
    ("rxrpc: Add a reason indicator to the tx_data tracepoint"),
    the commit 153f90a066dd
    ("rxrpc: Use ktimes for call timeout tracking and set the timer lazily")
    and the commit 9d1d2b59341f
    ("rxrpc: rxgk: Implement the yfs-rxgk security class (GSSAPI))
    which are irrelevant to the logic of this patch. ]
    Signed-off-by: Rahul Sharma <black.hawk@163.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rxrpc: Fix recvmsg() unconditional requeue [+ + +]
Author: David Howells <dhowells@redhat.com>
Date:   Thu Feb 26 10:41:02 2026 +0800

    rxrpc: Fix recvmsg() unconditional requeue
    
    [ Upstream commit 2c28769a51deb6022d7fbd499987e237a01dd63a ]
    
    If rxrpc_recvmsg() fails because MSG_DONTWAIT was specified but the call at
    the front of the recvmsg queue already has its mutex locked, it requeues
    the call - whether or not the call is already queued.  The call may be on
    the queue because MSG_PEEK was also passed and so the call was not dequeued
    or because the I/O thread requeued it.
    
    The unconditional requeue may then corrupt the recvmsg queue, leading to
    things like UAFs or refcount underruns.
    
    Fix this by only requeuing the call if it isn't already on the queue - and
    moving it to the front if it is already queued.  If we don't queue it, we
    have to put the ref we obtained by dequeuing it.
    
    Also, MSG_PEEK doesn't dequeue the call so shouldn't call
    rxrpc_notify_socket() for the call if we didn't use up all the data on the
    queue, so fix that also.
    
    Fixes: 540b1c48c37a ("rxrpc: Fix deadlock between call creation and sendmsg/recvmsg")
    Reported-by: Faith <faith@zellic.io>
    Reported-by: Pumpkin Chang <pumpkin@devco.re>
    Signed-off-by: David Howells <dhowells@redhat.com>
    Acked-by: Marc Dionne <marc.dionne@auristor.com>
    cc: Nir Ohfeld <niro@wiz.io>
    cc: Willy Tarreau <w@1wt.eu>
    cc: Simon Horman <horms@kernel.org>
    cc: linux-afs@lists.infradead.org
    cc: stable@kernel.org
    Link: https://patch.msgid.link/95163.1768428203@warthog.procyon.org.uk
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [Use spin_unlock instead of spin_unlock_irq to maintain context consistency.]
    Signed-off-by: Robert Garcia <rob_garcia@163.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.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/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/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>
    [ preserved zc->online as the fourth argument to cca_get_info() ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sched/fair: Fix pelt clock sync when entering idle [+ + +]
Author: Vincent Guittot <vincent.guittot@linaro.org>
Date:   Wed Mar 4 12:25:52 2026 -0800

    sched/fair: Fix pelt clock sync when entering idle
    
    [ Upstream commit 98c88dc8a1ace642d9021b103b28cba7b51e3abc ]
    
    Samuel and Alex reported regressions of the util_avg of RT rq with
    commit 17e3e88ed0b6 ("sched/fair: Fix pelt lost idle time detection").
    It happens that fair is updating and syncing the pelt clock with task one
    when pick_next_task_fair() fails to pick a task but before the prev
    scheduling class got a chance to update its pelt signals.
    
    Move update_idle_rq_clock_pelt() in set_next_task_idle() which is called
    after prev class has been called.
    
    Fixes: 17e3e88ed0b6 ("sched/fair: Fix pelt lost idle time detection")
    Reported-by: Samuel Wu <wusamuel@google.com>
    Closes: https://lore.kernel.org/all/CAG2KctpO6VKS6GN4QWDji0t92_gNBJ7HjjXrE+6H+RwRXt=iLg@mail.gmail.com/
    Reported-by: Alex Hoh <Alex.Hoh@mediatek.com>
    Closes: https://lore.kernel.org/all/8cf19bf0e0054dcfed70e9935029201694f1bb5a.camel@mediatek.com/
    Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Tested-by: Samuel Wu <wusamuel@google.com>
    Tested-by: Alex Hoh <Alex.Hoh@mediatek.com>
    Link: https://patch.msgid.link/20260121163317.505635-1-vincent.guittot@linaro.org
    (cherry picked from commit 98c88dc8a1ace642d9021b103b28cba7b51e3abc)
    [ wusamuel: Did not include line 'exec_start = rq_clock_task()', which
    is not present in 6.6.y but found in mainline ]
    Signed-off-by: Samuel Wu <wusamuel@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sched: idle: Consolidate the handling of two special cases [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Fri Mar 13 13:25:41 2026 +0100

    sched: idle: Consolidate the handling of two special cases
    
    [ Upstream commit f4c31b07b136839e0fb3026f8a5b6543e3b14d2f ]
    
    There are two special cases in the idle loop that are handled
    inconsistently even though they are analogous.
    
    The first one is when a cpuidle driver is absent and the default CPU
    idle time power management implemented by the architecture code is used.
    In that case, the scheduler tick is stopped every time before invoking
    default_idle_call().
    
    The second one is when a cpuidle driver is present, but there is only
    one idle state in its table.  In that case, the scheduler tick is never
    stopped at all.
    
    Since each of these approaches has its drawbacks, reconcile them with
    the help of one simple heuristic.  Namely, stop the tick if the CPU has
    been woken up by it in the previous iteration of the idle loop, or let
    it tick otherwise.
    
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Reviewed-by: Christian Loehle <christian.loehle@arm.com>
    Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
    Reviewed-by: Qais Yousef <qyousef@layalina.io>
    Reviewed-by: Aboorva Devarajan <aboorvad@linux.ibm.com>
    Fixes: ed98c3491998 ("sched: idle: Do not stop the tick before cpuidle_idle_call()")
    [ rjw: Added Fixes tag, changelog edits ]
    Link: https://patch.msgid.link/4741364.LvFx2qVVIh@rafael.j.wysocki
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    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>

 
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: core: Fix refcount leak for tagset_refcnt [+ + +]
Author: Junxiao Bi <junxiao.bi@oracle.com>
Date:   Mon Feb 23 15:27:28 2026 -0800

    scsi: core: Fix refcount leak for tagset_refcnt
    
    commit 1ac22c8eae81366101597d48360718dff9b9d980 upstream.
    
    This leak will cause a hang when tearing down the SCSI host. For example,
    iscsid hangs with the following call trace:
    
    [130120.652718] scsi_alloc_sdev: Allocation failure during SCSI scanning, some SCSI devices might not be configured
    
    PID: 2528     TASK: ffff9d0408974e00  CPU: 3    COMMAND: "iscsid"
     #0 [ffffb5b9c134b9e0] __schedule at ffffffff860657d4
     #1 [ffffb5b9c134ba28] schedule at ffffffff86065c6f
     #2 [ffffb5b9c134ba40] schedule_timeout at ffffffff86069fb0
     #3 [ffffb5b9c134bab0] __wait_for_common at ffffffff8606674f
     #4 [ffffb5b9c134bb10] scsi_remove_host at ffffffff85bfe84b
     #5 [ffffb5b9c134bb30] iscsi_sw_tcp_session_destroy at ffffffffc03031c4 [iscsi_tcp]
     #6 [ffffb5b9c134bb48] iscsi_if_recv_msg at ffffffffc0292692 [scsi_transport_iscsi]
     #7 [ffffb5b9c134bb98] iscsi_if_rx at ffffffffc02929c2 [scsi_transport_iscsi]
     #8 [ffffb5b9c134bbf0] netlink_unicast at ffffffff85e551d6
     #9 [ffffb5b9c134bc38] netlink_sendmsg at ffffffff85e554ef
    
    Fixes: 8fe4ce5836e9 ("scsi: core: Fix a use-after-free")
    Cc: stable@vger.kernel.org
    Signed-off-by: Junxiao Bi <junxiao.bi@oracle.com>
    Reviewed-by: Mike Christie <michael.christie@oracle.com>
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Link: https://patch.msgid.link/20260223232728.93350-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: Add time interval between two H2D FIS following soft reset spec [+ + +]
Author: Xingui Yang <yangxingui@huawei.com>
Date:   Tue Oct 8 10:18:19 2024 +0800

    scsi: hisi_sas: Add time interval between two H2D FIS following soft reset spec
    
    [ Upstream commit 3c62791322e42d1afd65acfdb5b3a371bde21ede ]
    
    Spec says at least 5us between two H2D FIS when do soft reset, but be
    generous and sleep for about 1ms.
    
    Signed-off-by: Xingui Yang <yangxingui@huawei.com>
    Link: https://lore.kernel.org/r/20241008021822.2617339-11-liyihang9@huawei.com
    Reviewed-by: Yihang Li <liyihang9@huawei.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Stable-dep-of: 8ddc0c269165 ("scsi: hisi_sas: Fix NULL pointer exception during user_scan()")
    Signed-off-by: Sasha Levin <sashal@kernel.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: hisi_sas: Use macro instead of magic number [+ + +]
Author: Yihang Li <liyihang9@huawei.com>
Date:   Mon Apr 14 16:08:42 2025 +0800

    scsi: hisi_sas: Use macro instead of magic number
    
    [ Upstream commit 4ca7fe99fc8485fcd04b367f37dc7a48f1355419 ]
    
    The hisi_sas driver has a large number of magic numbers which makes for
    unfriendly code reading. Use macro definitions instead.
    
    Signed-off-by: Yihang Li <liyihang9@huawei.com>
    Link: https://lore.kernel.org/r/20250414080845.1220997-2-liyihang9@huawei.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Stable-dep-of: 8ddc0c269165 ("scsi: hisi_sas: Fix NULL pointer exception during user_scan()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: lpfc: Properly set WC for DPP mapping [+ + +]
Author: Mathias Krause <minipli@grsecurity.net>
Date:   Thu Feb 12 11:23:27 2026 -0800

    scsi: lpfc: Properly set WC for DPP mapping
    
    [ Upstream commit bffda93a51b40afd67c11bf558dc5aae83ca0943 ]
    
    Using set_memory_wc() to enable write-combining for the DPP portion of
    the MMIO mapping is wrong as set_memory_*() is meant to operate on RAM
    only, not MMIO mappings. In fact, as used currently triggers a BUG_ON()
    with enabled CONFIG_DEBUG_VIRTUAL.
    
    Simply map the DPP region separately and in addition to the already
    existing mappings, avoiding any possible negative side effects for
    these.
    
    Fixes: 1351e69fc6db ("scsi: lpfc: Add push-to-adapter support to sli4")
    Signed-off-by: Mathias Krause <minipli@grsecurity.net>
    Signed-off-by: Justin Tee <justin.tee@broadcom.com>
    Reviewed-by: Mathias Krause <minipli@grsecurity.net>
    Link: https://patch.msgid.link/20260212192327.141104-1-justintee8345@gmail.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: pm8001: Fix use-after-free in pm8001_queue_command() [+ + +]
Author: Salomon Dushimirimana <salomondush@google.com>
Date:   Fri Feb 13 19:28:06 2026 +0000

    scsi: pm8001: Fix use-after-free in pm8001_queue_command()
    
    [ Upstream commit 38353c26db28efd984f51d426eac2396d299cca7 ]
    
    Commit e29c47fe8946 ("scsi: pm8001: Simplify pm8001_task_exec()") refactors
    pm8001_queue_command(), however it introduces a potential cause of a double
    free scenario when it changes the function to return -ENODEV in case of phy
    down/device gone state.
    
    In this path, pm8001_queue_command() updates task status and calls
    task_done to indicate to upper layer that the task has been handled.
    However, this also frees the underlying SAS task. A -ENODEV is then
    returned to the caller. When libsas sas_ata_qc_issue() receives this error
    value, it assumes the task wasn't handled/queued by LLDD and proceeds to
    clean up and free the task again, resulting in a double free.
    
    Since pm8001_queue_command() handles the SAS task in this case, it should
    return 0 to the caller indicating that the task has been handled.
    
    Fixes: e29c47fe8946 ("scsi: pm8001: Simplify pm8001_task_exec()")
    Signed-off-by: Salomon Dushimirimana <salomondush@google.com>
    Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
    Link: https://patch.msgid.link/20260213192806.439432-1-salomondush@google.com
    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: target: Fix recursive locking in __configfs_open_file() [+ + +]
Author: Prithvi Tambewagh <activprithvi@gmail.com>
Date:   Mon Feb 16 11:50:02 2026 +0530

    scsi: target: Fix recursive locking in __configfs_open_file()
    
    commit 14d4ac19d1895397532eec407433c5d74d9da53b upstream.
    
    In flush_write_buffer, &p->frag_sem is acquired and then the loaded store
    function is called, which, here, is target_core_item_dbroot_store().  This
    function called filp_open(), following which these functions were called
    (in reverse order), according to the call trace:
    
      down_read
      __configfs_open_file
      do_dentry_open
      vfs_open
      do_open
      path_openat
      do_filp_open
      file_open_name
      filp_open
      target_core_item_dbroot_store
      flush_write_buffer
      configfs_write_iter
    
    target_core_item_dbroot_store() tries to validate the new file path by
    trying to open the file path provided to it; however, in this case, the bug
    report shows:
    
    db_root: not a directory: /sys/kernel/config/target/dbroot
    
    indicating that the same configfs file was tried to be opened, on which it
    is currently working on. Thus, it is trying to acquire frag_sem semaphore
    of the same file of which it already holds the semaphore obtained in
    flush_write_buffer(), leading to acquiring the semaphore in a nested manner
    and a possibility of recursive locking.
    
    Fix this by modifying target_core_item_dbroot_store() to use kern_path()
    instead of filp_open() to avoid opening the file using filesystem-specific
    function __configfs_open_file(), and further modifying it to make this fix
    compatible.
    
    Reported-by: syzbot+f6e8174215573a84b797@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=f6e8174215573a84b797
    Tested-by: syzbot+f6e8174215573a84b797@syzkaller.appspotmail.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Prithvi Tambewagh <activprithvi@gmail.com>
    Reviewed-by: Dmitry Bogdanov <d.bogdanov@yadro.com>
    Link: https://patch.msgid.link/20260216062002.61937-1-activprithvi@gmail.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.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: Move link recovery for hibern8 exit failure to wl_resume [+ + +]
Author: Peter Wang <peter.wang@mediatek.com>
Date:   Mon Feb 23 18:37:57 2026 +0800

    scsi: ufs: core: Move link recovery for hibern8 exit failure to wl_resume
    
    [ Upstream commit 62c015373e1cdb1cdca824bd2dbce2dac0819467 ]
    
    Move the link recovery trigger from ufshcd_uic_pwr_ctrl() to
    __ufshcd_wl_resume(). Ensure link recovery is only attempted when hibern8
    exit fails during resume, not during hibern8 enter in suspend. Improve
    error handling and prevent unnecessary link recovery attempts.
    
    Fixes: 35dabf4503b9 ("scsi: ufs: core: Use link recovery when h8 exit fails during runtime resume")
    Signed-off-by: Peter Wang <peter.wang@mediatek.com>
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Link: https://patch.msgid.link/20260223103906.2533654-1-peter.wang@mediatek.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftest/arm64: Fix sve2p1_sigill() to hwcap test [+ + +]
Author: Yifan Wu <wuyifan50@huawei.com>
Date:   Thu Mar 5 09:36:37 2026 +0800

    selftest/arm64: Fix sve2p1_sigill() to hwcap test
    
    [ Upstream commit d87c828daa7ead9763416f75cc416496969cf1dc ]
    
    The FEAT_SVE2p1 is indicated by ID_AA64ZFR0_EL1.SVEver. However,
    the BFADD requires the FEAT_SVE_B16B16, which is indicated by
    ID_AA64ZFR0_EL1.B16B16. This could cause the test to incorrectly
    fail on a CPU that supports FEAT_SVE2.1 but not FEAT_SVE_B16B16.
    
    LD1Q Gather load quadwords which is decoded from SVE encodings and
    implied by FEAT_SVE2p1.
    
    Fixes: c5195b027d29 ("kselftest/arm64: Add SVE 2.1 to hwcap test")
    Signed-off-by: Yifan Wu <wuyifan50@huawei.com>
    Reviewed-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Will Deacon <will@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests: mptcp: add a check for 'add_addr_accepted' [+ + +]
Author: Gang Yan <yangang@kylinos.cn>
Date:   Mon Mar 9 12:28:42 2026 -0400

    selftests: mptcp: add a check for 'add_addr_accepted'
    
    [ Upstream commit 0eee0fdf9b7b0baf698f9b426384aa9714d76a51 ]
    
    The previous patch fixed an issue with the 'add_addr_accepted' counter.
    This was not spot by the test suite.
    
    Check this counter and 'add_addr_signal' in MPTCP Join 'delete re-add
    signal' test. This should help spotting similar regressions later on.
    These counters are crucial for ensuring the MPTCP path manager correctly
    handles the subflow creation via 'ADD_ADDR'.
    
    Signed-off-by: Gang Yan <yangang@kylinos.cn>
    Reviewed-by: Geliang Tang <geliang@kernel.org>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20251118-net-mptcp-misc-fixes-6-18-rc6-v1-11-806d3781c95f@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 560edd99b5f5 ("selftests: mptcp: join: check RM_ADDR not sent over same subflow")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

selftests: mptcp: join: check removing signal+subflow endp [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Tue Mar 3 11:56:06 2026 +0100

    selftests: mptcp: join: check removing signal+subflow endp
    
    commit 1777f349ff41b62dfe27454b69c27b0bc99ffca5 upstream.
    
    This validates the previous commit: endpoints with both the signal and
    subflow flags should always be marked as used even if it was not
    possible to create new subflows due to the MPTCP PM limits.
    
    For this test, an extra endpoint is created with both the signal and the
    subflow flags, and limits are set not to create extra subflows. In this
    case, an ADD_ADDR is sent, but no subflows are created. Still, the local
    endpoint is marked as used, and no warning is fired when removing the
    endpoint, after having sent a RM_ADDR.
    
    The 'Fixes' tag here below is the same as the one from the previous
    commit: this patch here is not fixing anything wrong in the selftests,
    but it validates the previous fix for an issue introduced by this commit
    ID.
    
    Fixes: 85df533a787b ("mptcp: pm: do not ignore 'subflow' if 'signal' flag is also set")
    Cc: stable@vger.kernel.org
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260303-net-mptcp-misc-fixes-7-0-rc2-v1-5-4b5462b6f016@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

selftests: mptcp: join: check RM_ADDR not sent over same subflow [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Mon Mar 9 12:28:43 2026 -0400

    selftests: mptcp: join: check RM_ADDR not sent over same subflow
    
    [ Upstream commit 560edd99b5f58b2d4bbe3c8e51e1eed68d887b0e ]
    
    This validates the previous commit: RM_ADDR were sent over the first
    found active subflow which could be the same as the one being removed.
    It is more likely to loose this notification.
    
    For this check, RM_ADDR are explicitly dropped when trying to send them
    over the initial subflow, when removing the endpoint attached to it. If
    it is dropped, the test will complain because some RM_ADDR have not been
    received.
    
    Note that only the RM_ADDR are dropped, to allow the linked subflow to
    be quickly and cleanly closed. To only drop those RM_ADDR, a cBPF byte
    code is used. If the IPTables commands fail, that's OK, the tests will
    continue to pass, but not validate this part. This can be ignored:
    another subtest fully depends on such command, and will be marked as
    skipped.
    
    The 'Fixes' tag here below is the same as the one from the previous
    commit: this patch here is not fixing anything wrong in the selftests,
    but it validates the previous fix for an issue introduced by this commit
    ID.
    
    Fixes: 8dd5efb1f91b ("mptcp: send ack for rm_addr")
    Cc: stable@vger.kernel.org
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260303-net-mptcp-misc-fixes-7-0-rc2-v1-3-4b5462b6f016@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

selftests: mptcp: more stable simult_flows tests [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Tue Mar 3 11:56:02 2026 +0100

    selftests: mptcp: more stable simult_flows tests
    
    commit 8c09412e584d9bcc0e71d758ec1008d1c8d1a326 upstream.
    
    By default, the netem qdisc can keep up to 1000 packets under its belly
    to deal with the configured rate and delay. The simult flows test-case
    simulates very low speed links, to avoid problems due to slow CPUs and
    the TCP stack tend to transmit at a slightly higher rate than the
    (virtual) link constraints.
    
    All the above causes a relatively large amount of packets being enqueued
    in the netem qdiscs - the longer the transfer, the longer the queue -
    producing increasingly high TCP RTT samples and consequently increasingly
    larger receive buffer size due to DRS.
    
    When the receive buffer size becomes considerably larger than the needed
    size, the tests results can flake, i.e. because minimal inaccuracy in the
    pacing rate can lead to a single subflow usage towards the end of the
    connection for a considerable amount of data.
    
    Address the issue explicitly setting netem limits suitable for the
    configured link speeds and unflake all the affected tests.
    
    Fixes: 1a418cb8e888 ("mptcp: simult flow self-tests")
    Cc: stable@vger.kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260303-net-mptcp-misc-fixes-7-0-rc2-v1-1-4b5462b6f016@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
serial: 8250: Add late synchronize_irq() to shutdown to handle DW UART BUSY [+ + +]
Author: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Date:   Tue Feb 3 19:10:48 2026 +0200

    serial: 8250: Add late synchronize_irq() to shutdown to handle DW UART BUSY
    
    commit e0a368ae79531ff92105a2692f10d83052055856 upstream.
    
    When DW UART is !uart_16550_compatible, it can indicate BUSY at any
    point (when under constant Rx pressure) unless a complex sequence of
    steps is performed. Any LCR write can run a foul with the condition
    that prevents writing LCR while the UART is BUSY, which triggers
    BUSY_DETECT interrupt that seems unmaskable using IER bits.
    
    Normal flow is that dw8250_handle_irq() handles BUSY_DETECT condition
    by reading USR register. This BUSY feature, however, breaks the
    assumptions made in serial8250_do_shutdown(), which runs
    synchronize_irq() after clearing IER and assumes no interrupts can
    occur after that point but then proceeds to update LCR, which on DW
    UART can trigger an interrupt.
    
    If serial8250_do_shutdown() releases the interrupt handler before the
    handler has run and processed the BUSY_DETECT condition by read the USR
    register, the IRQ is not deasserted resulting in interrupt storm that
    triggers "irq x: nobody cared" warning leading to disabling the IRQ.
    
    Add late synchronize_irq() into serial8250_do_shutdown() to ensure
    BUSY_DETECT from DW UART is handled before port's interrupt handler is
    released. Alternative would be to add DW UART specific shutdown
    function but it would mostly duplicate the generic code and the extra
    synchronize_irq() seems pretty harmless in serial8250_do_shutdown().
    
    Fixes: 7d4008ebb1c9 ("tty: add a DesignWare 8250 driver")
    Cc: stable <stable@kernel.org>
    Reported-by: Bandal, Shankar <shankar.bandal@intel.com>
    Tested-by: Bandal, Shankar <shankar.bandal@intel.com>
    Tested-by: Murthy, Shanth <shanth.murthy@intel.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Link: https://patch.msgid.link/20260203171049.4353-7-ilpo.jarvinen@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

serial: 8250: Fix TX deadlock when using DMA [+ + +]
Author: Raul E Rangel <rrangel@chromium.org>
Date:   Mon Feb 9 13:58:18 2026 -0700

    serial: 8250: Fix TX deadlock when using DMA
    
    commit a424a34b8faddf97b5af41689087e7a230f79ba7 upstream.
    
    `dmaengine_terminate_async` does not guarantee that the
    `__dma_tx_complete` callback will run. The callback is currently the
    only place where `dma->tx_running` gets cleared. If the transaction is
    canceled and the callback never runs, then `dma->tx_running` will never
    get cleared and we will never schedule new TX DMA transactions again.
    
    This change makes it so we clear `dma->tx_running` after we terminate
    the DMA transaction. This is "safe" because `serial8250_tx_dma_flush`
    is holding the UART port lock. The first thing the callback does is also
    grab the UART port lock, so access to `dma->tx_running` is serialized.
    
    Fixes: 9e512eaaf8f4 ("serial: 8250: Fix fifo underflow on flush")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Raul E Rangel <rrangel@google.com>
    Link: https://patch.msgid.link/20260209135815.1.I16366ecb0f62f3c96fe3dd5763fcf6f3c2b4d8cd@changeid
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

serial: 8250_pci: add support for the AX99100 [+ + +]
Author: Martin Roukala (né Peres) <martin.roukala@mupuf.org>
Date:   Mon Mar 9 15:53:10 2026 +0200

    serial: 8250_pci: add support for the AX99100
    
    commit 9c0072bc33d349c83d223e64be30794e11938a6b upstream.
    
    This is found in popular brands such as StarTech.com or Delock, and has
    been a source of frustration to quite a few people, if I can trust
    Amazon comments complaining about Linux support via the official
    out-of-the-tree driver.
    
    Signed-off-by: Martin Roukala (né Peres) <martin.roukala@mupuf.org>
    Cc: stable <stable@kernel.org>
    Link: https://patch.msgid.link/20260309-8250_pci_ax99100-v1-1-3328bdfd8e94@mupuf.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>

serial: uartlite: fix PM runtime usage count underflow on probe [+ + +]
Author: Maciej Andrzejewski ICEYE <maciej.andrzejewski@m-works.net>
Date:   Thu Mar 5 13:37:51 2026 +0100

    serial: uartlite: fix PM runtime usage count underflow on probe
    
    commit d54801cd509515f674a5aac1d3ea1401d2a05863 upstream.
    
    ulite_probe() calls pm_runtime_put_autosuspend() at the end of probe
    without holding a corresponding PM runtime reference for non-console
    ports.
    
    During ulite_assign(), uart_add_one_port() triggers uart_configure_port()
    which calls ulite_pm() via uart_change_pm(). For non-console ports, the
    UART core performs a balanced get/put cycle:
    
      uart_change_pm(ON)  -> ulite_pm() -> pm_runtime_get_sync()        +1
      uart_change_pm(OFF) -> ulite_pm() -> pm_runtime_put_autosuspend() -1
    
    This leaves no spare reference for the pm_runtime_put_autosuspend() at
    the end of probe. The PM runtime core prevents the count from actually
    going below zero, and instead triggers a
    "Runtime PM usage count underflow!" warning.
    
    For console ports the bug is masked: the UART core skips the
    uart_change_pm(OFF) call, so the UART core's unbalanced get happens to
    pair with probe's trailing put.
    
    Add pm_runtime_get_noresume() before pm_runtime_enable() to take an
    explicit probe-owned reference that the trailing
    pm_runtime_put_autosuspend() can release. This ensures a correct usage
    count regardless of whether the port is a console.
    
    Fixes: 5bbe10a6942d ("tty: serial: uartlite: Add runtime pm support")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Maciej Andrzejewski ICEYE <maciej.andrzejewski@m-works.net>
    Link: https://patch.msgid.link/20260305123746.4152800-1-maciej.andrzejewski@m-works.net
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
smb/client: fix buffer size for smb311_posix_qinfo in smb2_compound_op() [+ + +]
Author: ZhangGuoDong <zhangguodong@kylinos.cn>
Date:   Tue Mar 3 15:13:11 2026 +0000

    smb/client: fix buffer size for smb311_posix_qinfo in smb2_compound_op()
    
    [ Upstream commit 12c43a062acb0ac137fc2a4a106d4d084b8c5416 ]
    
    Use `sizeof(struct smb311_posix_qinfo)` instead of sizeof its pointer,
    so the allocated buffer matches the actual struct size.
    
    Fixes: 6a5f6592a0b6 ("SMB311: Add support for query info using posix extensions (level 100)")
    Reported-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
    Signed-off-by: ZhangGuoDong <zhangguodong@kylinos.cn>
    Reviewed-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

smb/client: fix buffer size for smb311_posix_qinfo in SMB311_posix_query_info() [+ + +]
Author: ZhangGuoDong <zhangguodong@kylinos.cn>
Date:   Tue Mar 3 15:13:12 2026 +0000

    smb/client: fix buffer size for smb311_posix_qinfo in SMB311_posix_query_info()
    
    [ Upstream commit 9621b996e4db1dbc2b3dc5d5910b7d6179397320 ]
    
    SMB311_posix_query_info() is currently unused, but it may still be used in
    some stable versions, so these changes are submitted as a separate patch.
    
    Use `sizeof(struct smb311_posix_qinfo)` instead of sizeof its pointer,
    so the allocated buffer matches the actual struct size.
    
    Fixes: b1bc1874b885 ("smb311: Add support for SMB311 query info (non-compounded)")
    Reported-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
    Signed-off-by: ZhangGuoDong <zhangguodong@kylinos.cn>
    Reviewed-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.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: Compare MACs in constant time [+ + +]
Author: Eric Biggers <ebiggers@kernel.org>
Date:   Tue Mar 10 12:50:58 2026 -0700

    smb: client: Compare MACs in constant time
    
    commit 26bc83b88bbbf054f0980a4a42047a8d1e210e4c upstream.
    
    To prevent timing attacks, MAC comparisons need to be constant-time.
    Replace the memcmp() with the correct function, crypto_memneq().
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable@vger.kernel.org
    Acked-by: Paulo Alcantara (Red Hat) <pc@manguebit.org>
    Signed-off-by: Eric Biggers <ebiggers@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

smb: client: Don't log plaintext credentials in cifs_set_cifscreds [+ + +]
Author: Thorsten Blum <thorsten.blum@linux.dev>
Date:   Thu Feb 26 22:28:45 2026 +0100

    smb: client: Don't log plaintext credentials in cifs_set_cifscreds
    
    commit 2f37dc436d4e61ff7ae0b0353cf91b8c10396e4d upstream.
    
    When debug logging is enabled, cifs_set_cifscreds() logs the key
    payload and exposes the plaintext username and password. Remove the
    debug log to avoid exposing credentials.
    
    Fixes: 8a8798a5ff90 ("cifs: fetch credentials out of keyring for non-krb5 auth multiuser mounts")
    Cc: stable@vger.kernel.org
    Acked-by: Paulo Alcantara (Red Hat) <pc@manguebit.org>
    Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.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 broken multichannel with krb5+signing [+ + +]
Author: Paulo Alcantara <pc@manguebit.org>
Date:   Wed Feb 25 21:34:55 2026 -0300

    smb: client: fix broken multichannel with krb5+signing
    
    commit d9d1e319b39ea685ede59319002d567c159d23c3 upstream.
    
    When mounting a share with 'multichannel,max_channels=n,sec=krb5i',
    the client was duplicating signing key for all secondary channels,
    thus making the server fail all commands sent from secondary channels
    due to bad signatures.
    
    Every channel has its own signing key, so when establishing a new
    channel with krb5 auth, make sure to use the new session key as the
    derived key to generate channel's signing key in SMB2_auth_kerberos().
    
    Repro:
    
    $ mount.cifs //srv/share /mnt -o multichannel,max_channels=4,sec=krb5i
    $ sleep 5
    $ umount /mnt
    $ dmesg
      ...
      CIFS: VFS: sign fail cmd 0x5 message id 0x2
      CIFS: VFS: \\srv SMB signature verification returned error = -13
      CIFS: VFS: sign fail cmd 0x5 message id 0x2
      CIFS: VFS: \\srv SMB signature verification returned error = -13
      CIFS: VFS: sign fail cmd 0x4 message id 0x2
      CIFS: VFS: \\srv SMB signature verification returned error = -13
    
    Reported-by: Xiaoli Feng <xifeng@redhat.com>
    Reviewed-by: Enzo Matsumiya <ematsumiya@suse.de>
    Signed-off-by: Paulo Alcantara (Red Hat) <pc@manguebit.org>
    Cc: David Howells <dhowells@redhat.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 cifs_pick_channel when channels are equally loaded [+ + +]
Author: Henrique Carvalho <henrique.carvalho@suse.com>
Date:   Sat Feb 21 01:59:44 2026 -0300

    smb: client: fix cifs_pick_channel when channels are equally loaded
    
    commit 663c28469d3274d6456f206a6671c91493d85ff1 upstream.
    
    cifs_pick_channel uses (start % chan_count) when channels are equally
    loaded, but that can return a channel that failed the eligibility
    checks.
    
    Drop the fallback and return the scan-selected channel instead. If none
    is eligible, keep the existing behavior of using the primary channel.
    
    Signed-off-by: Henrique Carvalho <henrique.carvalho@suse.com>
    Acked-by: Paulo Alcantara (Red Hat) <pc@manguebit.org>
    Acked-by: Meetakshi Setiya <msetiya@microsoft.com>
    Reviewed-by: Shyam Prasad N <sprasad@microsoft.com>
    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: client: fix krb5 mount with username option [+ + +]
Author: Paulo Alcantara <pc@manguebit.org>
Date:   Fri Mar 13 00:03:38 2026 -0300

    smb: client: fix krb5 mount with username option
    
    commit 12b4c5d98cd7ca46d5035a57bcd995df614c14e1 upstream.
    
    Customer reported that some of their krb5 mounts were failing against
    a single server as the client was trying to mount the shares with
    wrong credentials.  It turned out the client was reusing SMB session
    from first mount to try mounting the other shares, even though a
    different username= option had been specified to the other mounts.
    
    By using username mount option along with sec=krb5 to search for
    principals from keytab is supported by cifs.upcall(8) since
    cifs-utils-4.8.  So fix this by matching username mount option in
    match_session() even with Kerberos.
    
    For example, the second mount below should fail with -ENOKEY as there
    is no 'foobar' principal in keytab (/etc/krb5.keytab).  The client
    ends up reusing SMB session from first mount to perform the second
    one, which is wrong.
    
    ```
    $ ktutil
    ktutil:  add_entry -password -p testuser -k 1 -e aes256-cts
    Password for testuser@ZELDA.TEST:
    ktutil:  write_kt /etc/krb5.keytab
    ktutil:  quit
    $ klist -ke
    Keytab name: FILE:/etc/krb5.keytab
    KVNO Principal
     ---- ----------------------------------------------------------------
       1 testuser@ZELDA.TEST (aes256-cts-hmac-sha1-96)
    $ mount.cifs //w22-root2/scratch /mnt/1 -o sec=krb5,username=testuser
    $ mount.cifs //w22-root2/scratch /mnt/2 -o sec=krb5,username=foobar
    $ mount -t cifs | grep -Po 'username=\K\w+'
    testuser
    testuser
    ```
    
    Reported-by: Oscar Santos <ossantos@redhat.com>
    Signed-off-by: Paulo Alcantara (Red Hat) <pc@manguebit.org>
    Cc: David Howells <dhowells@redhat.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: 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>

 
soc: fsl: qbman: fix race condition in qman_destroy_fq [+ + +]
Author: Richard Genoud <richard.genoud@bootlin.com>
Date:   Tue Dec 23 08:25:49 2025 +0100

    soc: fsl: qbman: fix race condition in qman_destroy_fq
    
    [ Upstream commit 014077044e874e270ec480515edbc1cadb976cf2 ]
    
    When QMAN_FQ_FLAG_DYNAMIC_FQID is set, there's a race condition between
    fq_table[fq->idx] state and freeing/allocating from the pool and
    WARN_ON(fq_table[fq->idx]) in qman_create_fq() gets triggered.
    
    Indeed, we can have:
             Thread A                             Thread B
        qman_destroy_fq()                    qman_create_fq()
          qman_release_fqid()
            qman_shutdown_fq()
            gen_pool_free()
               -- At this point, the fqid is available again --
                                               qman_alloc_fqid()
               -- so, we can get the just-freed fqid in thread B --
                                               fq->fqid = fqid;
                                               fq->idx = fqid * 2;
                                               WARN_ON(fq_table[fq->idx]);
                                               fq_table[fq->idx] = fq;
         fq_table[fq->idx] = NULL;
    
    And adding some logs between qman_release_fqid() and
    fq_table[fq->idx] = NULL makes the WARN_ON() trigger a lot more.
    
    To prevent that, ensure that fq_table[fq->idx] is set to NULL before
    gen_pool_free() is called by using smp_wmb().
    
    Fixes: c535e923bb97 ("soc/fsl: Introduce DPAA 1.x QMan device driver")
    Signed-off-by: Richard Genoud <richard.genoud@bootlin.com>
    Tested-by: CHAMPSEIX Thomas <thomas.champseix@alstomgroup.com>
    Link: https://lore.kernel.org/r/20251223072549.397625-1-richard.genoud@bootlin.com
    Signed-off-by: Christophe Leroy (CS GROUP) <chleroy@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
spi: fix statistics allocation [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Thu Mar 12 16:18:14 2026 +0100

    spi: fix statistics allocation
    
    commit dee0774bbb2abb172e9069ce5ffef579b12b3ae9 upstream.
    
    The controller per-cpu statistics is not allocated until after the
    controller has been registered with driver core, which leaves a window
    where accessing the sysfs attributes can trigger a NULL-pointer
    dereference.
    
    Fix this by moving the statistics allocation to controller allocation
    while tying its lifetime to that of the controller (rather than using
    implicit devres).
    
    Fixes: 6598b91b5ac3 ("spi: spi.c: Convert statistics to per-cpu u64_stats_t")
    Cc: stable@vger.kernel.org      # 6.0
    Cc: David Jander <david@protonic.nl>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20260312151817.32100-3-johan@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

spi: fix use-after-free on controller registration failure [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Thu Mar 12 16:18:13 2026 +0100

    spi: fix use-after-free on controller registration failure
    
    commit 8634e05b08ead636e926022f4a98416e13440df9 upstream.
    
    Make sure to deregister from driver core also in the unlikely event that
    per-cpu statistics allocation fails during controller registration to
    avoid use-after-free (of driver resources) and unclocked register
    accesses.
    
    Fixes: 6598b91b5ac3 ("spi: spi.c: Convert statistics to per-cpu u64_stats_t")
    Cc: stable@vger.kernel.org      # 6.0
    Cc: David Jander <david@protonic.nl>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20260312151817.32100-2-johan@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Squashfs: check metadata block offset is within range [+ + +]
Author: Phillip Lougher <phillip@squashfs.org.uk>
Date:   Tue Feb 17 05:09:55 2026 +0000

    Squashfs: check metadata block offset is within range
    
    commit fdb24a820a5832ec4532273282cbd4f22c291a0d upstream.
    
    Syzkaller reports a "general protection fault in squashfs_copy_data"
    
    This is ultimately caused by a corrupted index look-up table, which
    produces a negative metadata block offset.
    
    This is subsequently passed to squashfs_copy_data (via
    squashfs_read_metadata) where the negative offset causes an out of bounds
    access.
    
    The fix is to check that the offset is within range in
    squashfs_read_metadata.  This will trap this and other cases.
    
    Link: https://lkml.kernel.org/r/20260217050955.138351-1-phillip@squashfs.org.uk
    Fixes: f400e12656ab ("Squashfs: cache operations")
    Reported-by: syzbot+a9747fe1c35a5b115d3f@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/all/699234e2.a70a0220.2c38d7.00e2.GAE@google.com/
    Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
    Cc: Christian Brauner <brauner@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>

 
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>

 
sunrpc: fix cache_request leak in cache_release [+ + +]
Author: Jeff Layton <jlayton@kernel.org>
Date:   Mon Feb 23 12:09:58 2026 -0500

    sunrpc: fix cache_request leak in cache_release
    
    commit 17ad31b3a43b72aec3a3d83605891e1397d0d065 upstream.
    
    When a reader's file descriptor is closed while in the middle of reading
    a cache_request (rp->offset != 0), cache_release() decrements the
    request's readers count but never checks whether it should free the
    request.
    
    In cache_read(), when readers drops to 0 and CACHE_PENDING is clear, the
    cache_request is removed from the queue and freed along with its buffer
    and cache_head reference. cache_release() lacks this cleanup.
    
    The only other path that frees requests with readers == 0 is
    cache_dequeue(), but it runs only when CACHE_PENDING transitions from
    set to clear. If that transition already happened while readers was
    still non-zero, cache_dequeue() will have skipped the request, and no
    subsequent call will clean it up.
    
    Add the same cleanup logic from cache_read() to cache_release(): after
    decrementing readers, check if it reached 0 with CACHE_PENDING clear,
    and if so, dequeue and free the cache_request.
    
    Reported-by: NeilBrown <neilb@ownmail.net>
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable@kernel.org
    Signed-off-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.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>

 
tools/bootconfig: fix fd leak in load_xbc_file() on fstat failure [+ + +]
Author: Josh Law <objecting@objecting.org>
Date:   Thu Mar 19 08:43:06 2026 +0900

    tools/bootconfig: fix fd leak in load_xbc_file() on fstat failure
    
    [ Upstream commit 3b2c2ab4ceb82af484310c3087541eab00ea288b ]
    
    If fstat() fails after open() succeeds, the function returns without
    closing the file descriptor. Also preserve errno across close(), since
    close() may overwrite it before the error is returned.
    
    Link: https://lore.kernel.org/all/20260318155847.78065-3-objecting@objecting.org/
    
    Fixes: 950313ebf79c ("tools: bootconfig: Add bootconfig command")
    Signed-off-by: Josh Law <objecting@objecting.org>
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tracing: Add NULL pointer check to trigger_data_free() [+ + +]
Author: Guenter Roeck <linux@roeck-us.net>
Date:   Thu Mar 5 11:33:39 2026 -0800

    tracing: Add NULL pointer check to trigger_data_free()
    
    [ Upstream commit 457965c13f0837a289c9164b842d0860133f6274 ]
    
    If trigger_data_alloc() fails and returns NULL, event_hist_trigger_parse()
    jumps to the out_free error path. While kfree() safely handles a NULL
    pointer, trigger_data_free() does not. This causes a NULL pointer
    dereference in trigger_data_free() when evaluating
    data->cmd_ops->set_filter.
    
    Fix the problem by adding a NULL pointer check to trigger_data_free().
    
    The problem was found by an experimental code review agent based on
    gemini-3.1-pro while reviewing backports into v6.18.y.
    
    Cc: Miaoqian Lin <linmq006@gmail.com>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Steven Rostedt (Google) <rostedt@goodmis.org>
    Link: https://patch.msgid.link/20260305193339.2810953-1-linux@roeck-us.net
    Fixes: 0550069cc25f ("tracing: Properly process error handling in event_hist_trigger_parse()")
    Assisted-by: Gemini:gemini-3.1-pro
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tracing: Add recursion protection in kernel stack trace recording [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Sat Feb 28 14:55:00 2026 +0800

    tracing: Add recursion protection in kernel stack trace recording
    
    [ Upstream commit 5f1ef0dfcb5b7f4a91a9b0e0ba533efd9f7e2cdb ]
    
    A bug was reported about an infinite recursion caused by tracing the rcu
    events with the kernel stack trace trigger enabled. The stack trace code
    called back into RCU which then called the stack trace again.
    
    Expand the ftrace recursion protection to add a set of bits to protect
    events from recursion. Each bit represents the context that the event is
    in (normal, softirq, interrupt and NMI).
    
    Have the stack trace code use the interrupt context to protect against
    recursion.
    
    Note, the bug showed an issue in both the RCU code as well as the tracing
    stacktrace code. This only handles the tracing stack trace side of the
    bug. The RCU fix will be handled separately.
    
    Link: https://lore.kernel.org/all/20260102122807.7025fc87@gandalf.local.home/
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Joel Fernandes <joel@joelfernandes.org>
    Cc: "Paul E. McKenney" <paulmck@kernel.org>
    Cc: Boqun Feng <boqun.feng@gmail.com>
    Link: https://patch.msgid.link/20260105203141.515cd49f@gandalf.local.home
    Reported-by: Yao Kai <yaokai34@huawei.com>
    Tested-by: Yao Kai <yaokai34@huawei.com>
    Fixes: 5f5fa7ea89dc ("rcu: Don't use negative nesting depth in __rcu_read_unlock()")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Leon Chen <leonchen.oss@139.com>
    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>

 
udp_tunnel: fix NULL deref caused by udp_sock_create6 when CONFIG_IPV6=n [+ + +]
Author: Xiang Mei <xmei5@asu.edu>
Date:   Mon Mar 16 18:02:41 2026 -0700

    udp_tunnel: fix NULL deref caused by udp_sock_create6 when CONFIG_IPV6=n
    
    [ Upstream commit b3a6df291fecf5f8a308953b65ca72b7fc9e015d ]
    
    When CONFIG_IPV6 is disabled, the udp_sock_create6() function returns 0
    (success) without actually creating a socket. Callers such as
    fou_create() then proceed to dereference the uninitialized socket
    pointer, resulting in a NULL pointer dereference.
    
    The captured NULL deref crash:
      BUG: kernel NULL pointer dereference, address: 0000000000000018
      RIP: 0010:fou_nl_add_doit (net/ipv4/fou_core.c:590 net/ipv4/fou_core.c:764)
      [...]
      Call Trace:
        <TASK>
        genl_family_rcv_msg_doit.constprop.0 (net/netlink/genetlink.c:1114)
        genl_rcv_msg (net/netlink/genetlink.c:1194 net/netlink/genetlink.c:1209)
        [...]
        netlink_rcv_skb (net/netlink/af_netlink.c:2550)
        genl_rcv (net/netlink/genetlink.c:1219)
        netlink_unicast (net/netlink/af_netlink.c:1319 net/netlink/af_netlink.c:1344)
        netlink_sendmsg (net/netlink/af_netlink.c:1894)
        __sock_sendmsg (net/socket.c:727 (discriminator 1) net/socket.c:742 (discriminator 1))
        __sys_sendto (./include/linux/file.h:62 (discriminator 1) ./include/linux/file.h:83 (discriminator 1) net/socket.c:2183 (discriminator 1))
        __x64_sys_sendto (net/socket.c:2213 (discriminator 1) net/socket.c:2209 (discriminator 1) net/socket.c:2209 (discriminator 1))
        do_syscall_64 (arch/x86/entry/syscall_64.c:63 (discriminator 1) arch/x86/entry/syscall_64.c:94 (discriminator 1))
        entry_SYSCALL_64_after_hwframe (net/arch/x86/entry/entry_64.S:130)
    
    This patch makes udp_sock_create6 return -EPFNOSUPPORT instead, so
    callers correctly take their error paths. There is only one caller of
    the vulnerable function and only privileged users can trigger it.
    
    Fixes: fd384412e199b ("udp_tunnel: Seperate ipv6 functions into its own file.")
    Reported-by: Weiming Shi <bestswngs@gmail.com>
    Signed-off-by: Xiang Mei <xmei5@asu.edu>
    Link: https://patch.msgid.link/20260317010241.1893893-1-xmei5@asu.edu
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.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: cdns3: call cdns_power_is_lost() only once in cdns_resume() [+ + +]
Author: Théo Lebrun <theo.lebrun@bootlin.com>
Date:   Wed Feb 5 18:36:49 2025 +0100

    usb: cdns3: call cdns_power_is_lost() only once in cdns_resume()
    
    [ Upstream commit 17c6526b333cfd89a4c888a6f7c876c8c326e5ae ]
    
    cdns_power_is_lost() does a register read.
    Call it only once rather than twice.
    
    Signed-off-by: Théo Lebrun <theo.lebrun@bootlin.com>
    Link: https://lore.kernel.org/r/20250205-s2r-cdns-v7-4-13658a271c3c@bootlin.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: 87e4b043b98a ("usb: cdns3: fix role switching during resume")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: cdns3: fix role switching during resume [+ + +]
Author: Thomas Richard (TI) <thomas.richard@bootlin.com>
Date:   Fri Jan 30 11:05:45 2026 +0100

    usb: cdns3: fix role switching during resume
    
    [ Upstream commit 87e4b043b98a1d269be0b812f383881abee0ca45 ]
    
    If the role change while we are suspended, the cdns3 driver switches to the
    new mode during resume. However, switching to host mode in this context
    causes a NULL pointer dereference.
    
    The host role's start() operation registers a xhci-hcd device, but its
    probe is deferred while we are in the resume path. The host role's resume()
    operation assumes the xhci-hcd device is already probed, which is not the
    case, leading to the dereference. Since the start() operation of the new
    role is already called, the resume operation can be skipped.
    
    So skip the resume operation for the new role if a role switch occurs
    during resume. Once the resume sequence is complete, the xhci-hcd device
    can be probed in case of host mode.
    
    Unable to handle kernel NULL pointer dereference at virtual address 0000000000000208
    Mem abort info:
    ...
    Data abort info:
    ...
    [0000000000000208] pgd=0000000000000000, p4d=0000000000000000
    Internal error: Oops: 0000000096000004 [#1]  SMP
    Modules linked in:
    CPU: 0 UID: 0 PID: 146 Comm: sh Not tainted
    6.19.0-rc7-00013-g6e64f4aabfae-dirty #135 PREEMPT
    Hardware name: Texas Instruments J7200 EVM (DT)
    pstate: 20000005 (nzCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    pc : usb_hcd_is_primary_hcd+0x0/0x1c
    lr : cdns_host_resume+0x24/0x5c
    ...
    Call trace:
     usb_hcd_is_primary_hcd+0x0/0x1c (P)
     cdns_resume+0x6c/0xbc
     cdns3_controller_resume.isra.0+0xe8/0x17c
     cdns3_plat_resume+0x18/0x24
     platform_pm_resume+0x2c/0x68
     dpm_run_callback+0x90/0x248
     device_resume+0x100/0x24c
     dpm_resume+0x190/0x2ec
     dpm_resume_end+0x18/0x34
     suspend_devices_and_enter+0x2b0/0xa44
     pm_suspend+0x16c/0x5fc
     state_store+0x80/0xec
     kobj_attr_store+0x18/0x2c
     sysfs_kf_write+0x7c/0x94
     kernfs_fop_write_iter+0x130/0x1dc
     vfs_write+0x240/0x370
     ksys_write+0x70/0x108
     __arm64_sys_write+0x1c/0x28
     invoke_syscall+0x48/0x10c
     el0_svc_common.constprop.0+0x40/0xe0
     do_el0_svc+0x1c/0x28
     el0_svc+0x34/0x108
     el0t_64_sync_handler+0xa0/0xe4
     el0t_64_sync+0x198/0x19c
    Code: 52800003 f9407ca5 d63f00a0 17ffffe4 (f9410401)
    ---[ end trace 0000000000000000 ]---
    
    Cc: stable <stable@kernel.org>
    Fixes: 2cf2581cd229 ("usb: cdns3: add power lost support for system resume")
    Signed-off-by: Thomas Richard (TI) <thomas.richard@bootlin.com>
    Acked-by: Peter Chen <peter.chen@kernel.org>
    Link: https://patch.msgid.link/20260130-usb-cdns3-fix-role-switching-during-resume-v1-1-44c456852b52@bootlin.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: cdns3: remove redundant if branch [+ + +]
Author: Hongyu Xie <xiehongyu1@kylinos.cn>
Date:   Tue Dec 31 09:36:41 2024 +0800

    usb: cdns3: remove redundant if branch
    
    [ Upstream commit dedab674428f8a99468a4864c067128ba9ea83a6 ]
    
    cdns->role_sw->dev->driver_data gets set in routines showing below,
    cdns_init
      sw_desc.driver_data = cdns;
      cdns->role_sw = usb_role_switch_register(dev, &sw_desc);
        dev_set_drvdata(&sw->dev, desc->driver_data);
    
    In cdns_resume,
    cdns->role = cdns_role_get(cdns->role_sw); //line redundant
      struct cdns *cdns = usb_role_switch_get_drvdata(sw);
        dev_get_drvdata(&sw->dev)
          return dev->driver_data
    return cdns->role;
    
    "line redundant" equals to,
            cdns->role = cdns->role;
    
    So fix this if branch.
    
    Signed-off-by: Hongyu Xie <xiehongyu1@kylinos.cn>
    Acked-by: Peter Chen <peter.chen@kernel.org>
    Link: https://lore.kernel.org/r/20241231013641.23908-1-xiehongyu1@kylinos.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: 87e4b043b98a ("usb: cdns3: fix role switching during resume")
    Signed-off-by: Sasha Levin <sashal@kernel.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_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_tcm: Fix NULL pointer dereferences in nexus handling [+ + +]
Author: Jiasheng Jiang <jiashengjiangcool@gmail.com>
Date:   Mon Mar 16 16:17:19 2026 -0400

    usb: gadget: f_tcm: Fix NULL pointer dereferences in nexus handling
    
    [ Upstream commit b9fde507355342a2d64225d582dc8b98ff5ecb19 ]
    
    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>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    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: 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: serial: f81232: fix incomplete serial port generation [+ + +]
Author: Ji-Ze Hong (Peter Hong) <peter_hong@fintek.com.tw>
Date:   Fri Dec 12 15:08:31 2025 +0800

    USB: serial: f81232: fix incomplete serial port generation
    
    commit cd644b805da8a253198718741bf363c4c58862ff upstream.
    
    The Fintek F81532A/534A/535/536 family relies on the
    F81534A_CTRL_CMD_ENABLE_PORT (116h) register during initialization to
    both determine serial port status and control port creation. If the
    driver experiences fast load/unload cycles, the device state may becomes
    unstable, resulting in the incomplete generation of serial ports.
    
    Performing a dummy read operation on the register prior to the initial
    write command resolves the issue. This clears the device's stale internal
    state. Subsequent write operations will correctly generate all serial
    ports.
    
    This patch also removes the retry loop in f81534a_ctrl_set_register()
    because the stale state has been fixed.
    
    Tested on: HygonDM1SLT(Hygon C86 3250 8-core Processor)
    
    Signed-off-by: Ji-Ze Hong (Peter Hong) <peter_hong@fintek.com.tw>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: typec: ucsi: Move unregister out of atomic section [+ + +]
Author: Bjorn Andersson <quic_bjorande@quicinc.com>
Date:   Wed Feb 25 13:10:08 2026 +0800

    usb: typec: ucsi: Move unregister out of atomic section
    
    [ Upstream commit 11bb2ffb679399f99041540cf662409905179e3a ]
    
    Commit '9329933699b3 ("soc: qcom: pmic_glink: Make client-lock
    non-sleeping")' moved the pmic_glink client list under a spinlock, as it
    is accessed by the rpmsg/glink callback, which in turn is invoked from
    IRQ context.
    
    This means that ucsi_unregister() is now called from atomic context,
    which isn't feasible as it's expecting a sleepable context. An effort is
    under way to get GLINK to invoke its callbacks in a sleepable context,
    but until then lets schedule the unregistration.
    
    A side effect of this is that ucsi_unregister() can now happen
    after the remote processor, and thereby the communication link with it, is
    gone. pmic_glink_send() is amended with a check to avoid the resulting NULL
    pointer dereference.
    This does however result in the user being informed about this error by
    the following entry in the kernel log:
    
      ucsi_glink.pmic_glink_ucsi pmic_glink.ucsi.0: failed to send UCSI write request: -5
    
    Fixes: 9329933699b3 ("soc: qcom: pmic_glink: Make client-lock non-sleeping")
    Cc: stable@vger.kernel.org
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Tested-by: Amit Pundir <amit.pundir@linaro.org>
    Reviewed-by: Johan Hovold <johan+linaro@kernel.org>
    Tested-by: Johan Hovold <johan+linaro@kernel.org>
    Signed-off-by: Bjorn Andersson <quic_bjorande@quicinc.com>
    Link: https://lore.kernel.org/r/20240820-pmic-glink-v6-11-races-v3-2-eec53c750a04@quicinc.com
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    [ The context change is due to the commit 584e8df58942
    ("usb: typec: ucsi: extract common code for command handling")
    in v6.11 which is irrelevant to the logic of this patch. ]
    Signed-off-by: Rahul Sharma <black.hawk@163.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: cfg80211: cancel pmsr_free_wk in cfg80211_pmsr_wdev_down [+ + +]
Author: Peddolla Harshavardhan Reddy <peddolla.reddy@oss.qualcomm.com>
Date:   Thu Mar 5 21:36:59 2026 +0530

    wifi: cfg80211: cancel pmsr_free_wk in cfg80211_pmsr_wdev_down
    
    [ Upstream commit 6dccbc9f3e1d38565dff7730d2b7d1e8b16c9b09 ]
    
    When the nl80211 socket that originated a PMSR request is
    closed, cfg80211_release_pmsr() sets the request's nl_portid
    to zero and schedules pmsr_free_wk to process the abort
    asynchronously. If the interface is concurrently torn down
    before that work runs, cfg80211_pmsr_wdev_down() calls
    cfg80211_pmsr_process_abort() directly. However, the already-
    scheduled pmsr_free_wk work item remains pending and may run
    after the interface has been removed from the driver. This
    could cause the driver's abort_pmsr callback to operate on a
    torn-down interface, leading to undefined behavior and
    potential crashes.
    
    Cancel pmsr_free_wk synchronously in cfg80211_pmsr_wdev_down()
    before calling cfg80211_pmsr_process_abort(). This ensures any
    pending or in-progress work is drained before interface teardown
    proceeds, preventing the work from invoking the driver abort
    callback after the interface is gone.
    
    Fixes: 9bb7e0f24e7e ("cfg80211: add peer measurement with FTM initiator API")
    Signed-off-by: Peddolla Harshavardhan Reddy <peddolla.reddy@oss.qualcomm.com>
    Link: https://patch.msgid.link/20260305160712.1263829-3-peddolla.reddy@oss.qualcomm.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: cfg80211: cancel rfkill_block work in wiphy_unregister() [+ + +]
Author: Daniil Dulov <d.dulov@aladdin.ru>
Date:   Wed Feb 11 11:20:24 2026 +0300

    wifi: cfg80211: cancel rfkill_block work in wiphy_unregister()
    
    commit 767d23ade706d5fa51c36168e92a9c5533c351a1 upstream.
    
    There is a use-after-free error in cfg80211_shutdown_all_interfaces found
    by syzkaller:
    
    BUG: KASAN: use-after-free in cfg80211_shutdown_all_interfaces+0x213/0x220
    Read of size 8 at addr ffff888112a78d98 by task kworker/0:5/5326
    CPU: 0 UID: 0 PID: 5326 Comm: kworker/0:5 Not tainted 6.19.0-rc2 #2 PREEMPT(voluntary)
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
    Workqueue: events cfg80211_rfkill_block_work
    Call Trace:
     <TASK>
     dump_stack_lvl+0x116/0x1f0
     print_report+0xcd/0x630
     kasan_report+0xe0/0x110
     cfg80211_shutdown_all_interfaces+0x213/0x220
     cfg80211_rfkill_block_work+0x1e/0x30
     process_one_work+0x9cf/0x1b70
     worker_thread+0x6c8/0xf10
     kthread+0x3c5/0x780
     ret_from_fork+0x56d/0x700
     ret_from_fork_asm+0x1a/0x30
     </TASK>
    
    The problem arises due to the rfkill_block work is not cancelled when wiphy
    is being unregistered. In order to fix the issue cancel the corresponding
    work in wiphy_unregister().
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Fixes: 1f87f7d3a3b4 ("cfg80211: add rfkill support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Daniil Dulov <d.dulov@aladdin.ru>
    Link: https://patch.msgid.link/20260211082024.1967588-1-d.dulov@aladdin.ru
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: cw1200: Fix locking in error paths [+ + +]
Author: Bart Van Assche <bvanassche@acm.org>
Date:   Mon Feb 23 14:00:24 2026 -0800

    wifi: cw1200: Fix locking in error paths
    
    [ Upstream commit d98c24617a831e92e7224a07dcaed2dd0b02af96 ]
    
    cw1200_wow_suspend() must only return with priv->conf_mutex locked if it
    returns zero. This mutex must be unlocked if an error is returned. Add
    mutex_unlock() calls to the error paths from which that call is missing.
    This has been detected by the Clang thread-safety analyzer.
    
    Fixes: a910e4a94f69 ("cw1200: add driver for the ST-E CW1100 & CW1200 WLAN chipsets")
    Signed-off-by: Bart Van Assche <bvanassche@acm.org>
    Link: https://patch.msgid.link/20260223220102.2158611-25-bart.vanassche@linux.dev
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: libertas: fix use-after-free in lbs_free_adapter() [+ + +]
Author: Daniel Hodges <git@danielhodges.dev>
Date:   Mon Mar 9 07:09:31 2026 -0400

    wifi: libertas: fix use-after-free in lbs_free_adapter()
    
    [ Upstream commit 03cc8f90d0537fcd4985c3319b4fafbf2e3fb1f0 ]
    
    The lbs_free_adapter() function uses timer_delete() (non-synchronous)
    for both command_timer and tx_lockup_timer before the structure is
    freed. This is incorrect because timer_delete() does not wait for
    any running timer callback to complete.
    
    If a timer callback is executing when lbs_free_adapter() is called,
    the callback will access freed memory since lbs_cfg_free() frees the
    containing structure immediately after lbs_free_adapter() returns.
    
    Both timer callbacks (lbs_cmd_timeout_handler and lbs_tx_lockup_handler)
    access priv->driver_lock, priv->cur_cmd, priv->dev, and other fields,
    which would all be use-after-free violations.
    
    Use timer_delete_sync() instead to ensure any running timer callback
    has completed before returning.
    
    This bug was introduced in commit 8f641d93c38a ("libertas: detect TX
    lockups and reset hardware") where del_timer() was used instead of
    del_timer_sync() in the cleanup path. The command_timer has had the
    same issue since the driver was first written.
    
    Fixes: 8f641d93c38a ("libertas: detect TX lockups and reset hardware")
    Fixes: 954ee164f4f4 ("[PATCH] libertas: reorganize and simplify init sequence")
    Cc: stable@vger.kernel.org
    Signed-off-by: Daniel Hodges <git@danielhodges.dev>
    Link: https://patch.msgid.link/20260206195356.15647-1-git@danielhodges.dev
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    [ del_timer() => timer_delete_sync() ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: mac80211: bounds-check link_id in ieee80211_ml_reconfiguration [+ + +]
Author: Ariel Silver <arielsilver77@gmail.com>
Date:   Fri Feb 20 10:11:29 2026 +0000

    wifi: mac80211: bounds-check link_id in ieee80211_ml_reconfiguration
    
    commit 162d331d833dc73a3e905a24c44dd33732af1fc5 upstream.
    
    link_id is taken from the ML Reconfiguration element (control & 0x000f),
    so it can be 0..15. link_removal_timeout[] has IEEE80211_MLD_MAX_NUM_LINKS
    (15) elements, so index 15 is out-of-bounds. Skip subelements with
    link_id >= IEEE80211_MLD_MAX_NUM_LINKS to avoid a stack out-of-bounds
    write.
    
    Fixes: 8eb8dd2ffbbb ("wifi: mac80211: Support link removal using Reconfiguration ML element")
    Reported-by: Ariel Silver <arielsilver77@gmail.com>
    Signed-off-by: Ariel Silver <arielsilver77@gmail.com>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260220101129.1202657-1-Ariel.Silver@cybereason.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: mac80211: fix NULL deref in mesh_matches_local() [+ + +]
Author: Xiang Mei <xmei5@asu.edu>
Date:   Tue Mar 17 20:42:44 2026 -0700

    wifi: mac80211: fix NULL deref in mesh_matches_local()
    
    [ Upstream commit c73bb9a2d33bf81f6eecaa0f474b6c6dbe9855bd ]
    
    mesh_matches_local() unconditionally dereferences ie->mesh_config to
    compare mesh configuration parameters. When called from
    mesh_rx_csa_frame(), the parsed action-frame elements may not contain a
    Mesh Configuration IE, leaving ie->mesh_config NULL and triggering a
    kernel NULL pointer dereference.
    
    The other two callers are already safe:
      - ieee80211_mesh_rx_bcn_presp() checks !elems->mesh_config before
        calling mesh_matches_local()
      - mesh_plink_get_event() is only reached through
        mesh_process_plink_frame(), which checks !elems->mesh_config, too
    
    mesh_rx_csa_frame() is the only caller that passes raw parsed elements
    to mesh_matches_local() without guarding mesh_config. An adjacent
    attacker can exploit this by sending a crafted CSA action frame that
    includes a valid Mesh ID IE but omits the Mesh Configuration IE,
    crashing the kernel.
    
    The captured crash log:
    
    Oops: general protection fault, probably for non-canonical address ...
    KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
    Workqueue: events_unbound cfg80211_wiphy_work
    [...]
    Call Trace:
     <TASK>
     ? __pfx_mesh_matches_local (net/mac80211/mesh.c:65)
     ieee80211_mesh_rx_queued_mgmt (net/mac80211/mesh.c:1686)
     [...]
     ieee80211_iface_work (net/mac80211/iface.c:1754 net/mac80211/iface.c:1802)
     [...]
     cfg80211_wiphy_work (net/wireless/core.c:426)
     process_one_work (net/kernel/workqueue.c:3280)
     ? assign_work (net/kernel/workqueue.c:1219)
     worker_thread (net/kernel/workqueue.c:3352)
     ? __pfx_worker_thread (net/kernel/workqueue.c:3385)
     kthread (net/kernel/kthread.c:436)
     [...]
     ret_from_fork_asm (net/arch/x86/entry/entry_64.S:255)
     </TASK>
    
    This patch adds a NULL check for ie->mesh_config at the top of
    mesh_matches_local() to return false early when the Mesh Configuration
    IE is absent.
    
    Fixes: 2e3c8736820b ("mac80211: support functions for mesh")
    Reported-by: Weiming Shi <bestswngs@gmail.com>
    Signed-off-by: Xiang Mei <xmei5@asu.edu>
    Link: https://patch.msgid.link/20260318034244.2595020-1-xmei5@asu.edu
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mac80211: fix NULL pointer dereference in mesh_rx_csa_frame() [+ + +]
Author: Vahagn Vardanian <vahagn@redrays.io>
Date:   Mon Feb 23 00:00:00 2026 +0000

    wifi: mac80211: fix NULL pointer dereference in mesh_rx_csa_frame()
    
    commit 017c1792525064a723971f0216e6ef86a8c7af11 upstream.
    
    In mesh_rx_csa_frame(), elems->mesh_chansw_params_ie is dereferenced
    at lines 1638 and 1642 without a prior NULL check:
    
        ifmsh->chsw_ttl = elems->mesh_chansw_params_ie->mesh_ttl;
        ...
        pre_value = le16_to_cpu(elems->mesh_chansw_params_ie->mesh_pre_value);
    
    The mesh_matches_local() check above only validates the Mesh ID,
    Mesh Configuration, and Supported Rates IEs.  It does not verify the
    presence of the Mesh Channel Switch Parameters IE (element ID 118).
    When a received CSA action frame omits that IE, ieee802_11_parse_elems()
    leaves elems->mesh_chansw_params_ie as NULL, and the unconditional
    dereference causes a kernel NULL pointer dereference.
    
    A remote mesh peer with an established peer link (PLINK_ESTAB) can
    trigger this by sending a crafted SPECTRUM_MGMT/CHL_SWITCH action frame
    that includes a matching Mesh ID and Mesh Configuration IE but omits the
    Mesh Channel Switch Parameters IE.  No authentication beyond the default
    open mesh peering is required.
    
    Crash confirmed on kernel 6.17.0-5-generic via mac80211_hwsim:
    
      BUG: kernel NULL pointer dereference, address: 0000000000000000
      Oops: Oops: 0000 [#1] SMP NOPTI
      RIP: 0010:ieee80211_mesh_rx_queued_mgmt+0x143/0x2a0 [mac80211]
      CR2: 0000000000000000
    
    Fix by adding a NULL check for mesh_chansw_params_ie after
    mesh_matches_local() returns, consistent with how other optional IEs
    are guarded throughout the mesh code.
    
    The bug has been present since v3.13 (released 2014-01-19).
    
    Fixes: 8f2535b92d68 ("mac80211: process the CSA frame for mesh accordingly")
    Cc: stable@vger.kernel.org
    Signed-off-by: Vahagn Vardanian <vahagn@redrays.io>
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: mac80211: Fix static_branch_dec() underflow for aql_disable. [+ + +]
Author: Kuniyuki Iwashima <kuniyu@google.com>
Date:   Fri Mar 6 07:24:02 2026 +0000

    wifi: mac80211: Fix static_branch_dec() underflow for aql_disable.
    
    [ Upstream commit b94ae8e0d5fe1bdbbfdc3854ff6ce98f6876a828 ]
    
    syzbot reported static_branch_dec() underflow in aql_enable_write(). [0]
    
    The problem is that aql_enable_write() does not serialise concurrent
    write()s to the debugfs.
    
    aql_enable_write() checks static_key_false(&aql_disable.key) and
    later calls static_branch_inc() or static_branch_dec(), but the
    state may change between the two calls.
    
    aql_disable does not need to track inc/dec.
    
    Let's use static_branch_enable() and static_branch_disable().
    
    [0]:
    val == 0
    WARNING: kernel/jump_label.c:311 at __static_key_slow_dec_cpuslocked.part.0+0x107/0x120 kernel/jump_label.c:311, CPU#0: syz.1.3155/20288
    Modules linked in:
    CPU: 0 UID: 0 PID: 20288 Comm: syz.1.3155 Tainted: G     U       L      syzkaller #0 PREEMPT(full)
    Tainted: [U]=USER, [L]=SOFTLOCKUP
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/24/2026
    RIP: 0010:__static_key_slow_dec_cpuslocked.part.0+0x107/0x120 kernel/jump_label.c:311
    Code: f2 c9 ff 5b 5d c3 cc cc cc cc e8 54 f2 c9 ff 48 89 df e8 ac f9 ff ff eb ad e8 45 f2 c9 ff 90 0f 0b 90 eb a2 e8 3a f2 c9 ff 90 <0f> 0b 90 eb 97 48 89 df e8 5c 4b 33 00 e9 36 ff ff ff 0f 1f 80 00
    RSP: 0018:ffffc9000b9f7c10 EFLAGS: 00010293
    RAX: 0000000000000000 RBX: ffffffff9b3e5d40 RCX: ffffffff823c57b4
    RDX: ffff8880285a0000 RSI: ffffffff823c5846 RDI: ffff8880285a0000
    RBP: 0000000000000000 R08: 0000000000000005 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000000 R12: 000000000000000a
    R13: 1ffff9200173ef88 R14: 0000000000000001 R15: ffffc9000b9f7e98
    FS:  00007f530dd726c0(0000) GS:ffff8881245e3000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000200000001140 CR3: 000000007cc4a000 CR4: 00000000003526f0
    Call Trace:
     <TASK>
     __static_key_slow_dec_cpuslocked kernel/jump_label.c:297 [inline]
     __static_key_slow_dec kernel/jump_label.c:321 [inline]
     static_key_slow_dec+0x7c/0xc0 kernel/jump_label.c:336
     aql_enable_write+0x2b2/0x310 net/mac80211/debugfs.c:343
     short_proxy_write+0x133/0x1a0 fs/debugfs/file.c:383
     vfs_write+0x2aa/0x1070 fs/read_write.c:684
     ksys_pwrite64 fs/read_write.c:793 [inline]
     __do_sys_pwrite64 fs/read_write.c:801 [inline]
     __se_sys_pwrite64 fs/read_write.c:798 [inline]
     __x64_sys_pwrite64+0x1eb/0x250 fs/read_write.c:798
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xc9/0xf80 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7f530cf9aeb9
    Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 e8 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007f530dd72028 EFLAGS: 00000246 ORIG_RAX: 0000000000000012
    RAX: ffffffffffffffda RBX: 00007f530d215fa0 RCX: 00007f530cf9aeb9
    RDX: 0000000000000003 RSI: 0000000000000000 RDI: 0000000000000010
    RBP: 00007f530d008c1f R08: 0000000000000000 R09: 0000000000000000
    R10: 4200000000000005 R11: 0000000000000246 R12: 0000000000000000
    R13: 00007f530d216038 R14: 00007f530d215fa0 R15: 00007ffde89fb978
     </TASK>
    
    Fixes: e908435e402a ("mac80211: introduce aql_enable node in debugfs")
    Reported-by: syzbot+feb9ce36a95341bb47a4@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/all/69a8979e.a70a0220.b118c.0025.GAE@google.com/
    Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
    Link: https://patch.msgid.link/20260306072405.3649474-1-kuniyu@google.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.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>

wifi: mt76: Fix possible oob access in mt76_connac2_mac_write_txwi_80211() [+ + +]
Author: Lorenzo Bianconi <lorenzo@kernel.org>
Date:   Thu Feb 26 20:11:16 2026 +0100

    wifi: mt76: Fix possible oob access in mt76_connac2_mac_write_txwi_80211()
    
    [ Upstream commit 4e10a730d1b511ff49723371ed6d694dd1b2c785 ]
    
    Check frame length before accessing the mgmt fields in
    mt76_connac2_mac_write_txwi_80211 in order to avoid a possible oob
    access.
    
    Fixes: 577dbc6c656d ("mt76: mt7915: enable offloading of sequence number assignment")
    Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
    Link: https://patch.msgid.link/20260226-mt76-addba-req-oob-access-v1-3-b0f6d1ad4850@kernel.org
    [fix check to also cover mgmt->u.action.u.addba_req.capab,
    correct Fixes tag]
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mt76: mt7996: Fix possible oob access in mt7996_mac_write_txwi_80211() [+ + +]
Author: Lorenzo Bianconi <lorenzo@kernel.org>
Date:   Thu Feb 26 20:11:14 2026 +0100

    wifi: mt76: mt7996: Fix possible oob access in mt7996_mac_write_txwi_80211()
    
    [ Upstream commit 60862846308627e9e15546bb647a00de44deb27b ]
    
    Check frame length before accessing the mgmt fields in
    mt7996_mac_write_txwi_80211 in order to avoid a possible oob access.
    
    Fixes: 98686cd21624c ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")
    Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
    Link: https://patch.msgid.link/20260226-mt76-addba-req-oob-access-v1-1-b0f6d1ad4850@kernel.org
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: radiotap: reject radiotap with unknown bits [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Tue Feb 17 13:05:26 2026 +0100

    wifi: radiotap: reject radiotap with unknown bits
    
    commit c854758abe0b8d86f9c43dc060ff56a0ee5b31e0 upstream.
    
    The radiotap parser is currently only used with the radiotap
    namespace (not with vendor namespaces), but if the undefined
    field 18 is used, the alignment/size is unknown as well. In
    this case, iterator->_next_ns_data isn't initialized (it's
    only set for skipping vendor namespaces), and syzbot points
    out that we later compare against this uninitialized value.
    
    Fix this by moving the rejection of unknown radiotap fields
    down to after the in-namespace lookup, so it will really use
    iterator->_next_ns_data only for vendor namespaces, even in
    case undefined fields are present.
    
    Cc: stable@vger.kernel.org
    Fixes: 33e5a2f776e3 ("wireless: update radiotap parser")
    Reported-by: syzbot+b09c1af8764c0097bb19@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/r/69944a91.a70a0220.2c38d7.00fc.GAE@google.com
    Link: https://patch.msgid.link/20260217120526.162647-2-johannes@sipsolutions.net
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: wlcore: Fix a locking bug [+ + +]
Author: Bart Van Assche <bvanassche@acm.org>
Date:   Mon Feb 23 14:00:25 2026 -0800

    wifi: wlcore: Fix a locking bug
    
    [ Upstream commit 72c6df8f284b3a49812ce2ac136727ace70acc7c ]
    
    Make sure that wl->mutex is locked before it is unlocked. This has been
    detected by the Clang thread-safety analyzer.
    
    Fixes: 45aa7f071b06 ("wlcore: Use generic runtime pm calls for wowlan elp configuration")
    Signed-off-by: Bart Van Assche <bvanassche@acm.org>
    Link: https://patch.msgid.link/20260223220102.2158611-26-bart.vanassche@linux.dev
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: wlcore: Return -ENOMEM instead of -EAGAIN if there is not enough headroom [+ + +]
Author: Guenter Roeck <linux@roeck-us.net>
Date:   Tue Mar 17 23:46:36 2026 -0700

    wifi: wlcore: Return -ENOMEM instead of -EAGAIN if there is not enough headroom
    
    [ Upstream commit deb353d9bb009638b7762cae2d0b6e8fdbb41a69 ]
    
    Since upstream commit e75665dd0968 ("wifi: wlcore: ensure skb headroom
    before skb_push"), wl1271_tx_allocate() and with it
    wl1271_prepare_tx_frame() returns -EAGAIN if pskb_expand_head() fails.
    However, in wlcore_tx_work_locked(), a return value of -EAGAIN from
    wl1271_prepare_tx_frame() is interpreted as the aggregation buffer being
    full. This causes the code to flush the buffer, put the skb back at the
    head of the queue, and immediately retry the same skb in a tight while
    loop.
    
    Because wlcore_tx_work_locked() holds wl->mutex, and the retry happens
    immediately with GFP_ATOMIC, this will result in an infinite loop and a
    CPU soft lockup. Return -ENOMEM instead so the packet is dropped and
    the loop terminates.
    
    The problem was found by an experimental code review agent based on
    gemini-3.1-pro while reviewing backports into v6.18.y.
    
    Assisted-by: Gemini:gemini-3.1-pro
    Fixes: e75665dd0968 ("wifi: wlcore: ensure skb headroom before skb_push")
    Cc: Peter Astrand <astrand@lysator.liu.se>
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Link: https://patch.msgid.link/20260318064636.3065925-1-linux@roeck-us.net
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    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>

 
x86/efi: defer freeing of boot services memory [+ + +]
Author: Mike Rapoport (Microsoft) <rppt@kernel.org>
Date:   Wed Feb 25 08:55:55 2026 +0200

    x86/efi: defer freeing of boot services memory
    
    commit a4b0bf6a40f3c107c67a24fbc614510ef5719980 upstream.
    
    efi_free_boot_services() frees memory occupied by EFI_BOOT_SERVICES_CODE
    and EFI_BOOT_SERVICES_DATA using memblock_free_late().
    
    There are two issue with that: memblock_free_late() should be used for
    memory allocated with memblock_alloc() while the memory reserved with
    memblock_reserve() should be freed with free_reserved_area().
    
    More acutely, with CONFIG_DEFERRED_STRUCT_PAGE_INIT=y
    efi_free_boot_services() is called before deferred initialization of the
    memory map is complete.
    
    Benjamin Herrenschmidt reports that this causes a leak of ~140MB of
    RAM on EC2 t3a.nano instances which only have 512MB or RAM.
    
    If the freed memory resides in the areas that memory map for them is
    still uninitialized, they won't be actually freed because
    memblock_free_late() calls memblock_free_pages() and the latter skips
    uninitialized pages.
    
    Using free_reserved_area() at this point is also problematic because
    __free_page() accesses the buddy of the freed page and that again might
    end up in uninitialized part of the memory map.
    
    Delaying the entire efi_free_boot_services() could be problematic
    because in addition to freeing boot services memory it updates
    efi.memmap without any synchronization and that's undesirable late in
    boot when there is concurrency.
    
    More robust approach is to only defer freeing of the EFI boot services
    memory.
    
    Split efi_free_boot_services() in two. First efi_unmap_boot_services()
    collects ranges that should be freed into an array then
    efi_free_boot_services() later frees them after deferred init is complete.
    
    Link: https://lore.kernel.org/all/ec2aaef14783869b3be6e3c253b2dcbf67dbc12a.camel@kernel.crashing.org
    Fixes: 916f676f8dc0 ("x86, efi: Retain boot service code until after switching to virtual mode")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
    Reviewed-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/platform/uv: Handle deconfigured sockets [+ + +]
Author: Kyle Meyer <kyle.meyer@hpe.com>
Date:   Fri Mar 20 12:19:20 2026 -0500

    x86/platform/uv: Handle deconfigured sockets
    
    commit 1f6aa5bbf1d0f81a8a2aafc16136e7dd9a609ff3 upstream.
    
    When a socket is deconfigured, it's mapped to SOCK_EMPTY (0xffff). This causes
    a panic while allocating UV hub info structures.
    
    Fix this by using NUMA_NO_NODE, allowing UV hub info structures to be
    allocated on valid nodes.
    
    Fixes: 8a50c5851927 ("x86/platform/uv: UV support for sub-NUMA clustering")
    Signed-off-by: Kyle Meyer <kyle.meyer@hpe.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: Steve Wahl <steve.wahl@hpe.com>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/ab2BmGL0ehVkkjKk@hpe.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/sev: Allow IBPB-on-Entry feature for SNP guests [+ + +]
Author: Kim Phillips <kim.phillips@amd.com>
Date:   Mon Mar 9 08:48:15 2026 -0400

    x86/sev: Allow IBPB-on-Entry feature for SNP guests
    
    [ Upstream commit 9073428bb204d921ae15326bb7d4558d9d269aab ]
    
    The SEV-SNP IBPB-on-Entry feature does not require a guest-side
    implementation. It was added in Zen5 h/w, after the first SNP Zen
    implementation, and thus was not accounted for when the initial set of SNP
    features were added to the kernel.
    
    In its abundant precaution, commit
    
      8c29f0165405 ("x86/sev: Add SEV-SNP guest feature negotiation support")
    
    included SEV_STATUS' IBPB-on-Entry bit as a reserved bit, thereby masking
    guests from using the feature.
    
    Allow guests to make use of IBPB-on-Entry when supported by the hypervisor, as
    the bit is now architecturally defined and safe to expose.
    
    Fixes: 8c29f0165405 ("x86/sev: Add SEV-SNP guest feature negotiation support")
    Signed-off-by: Kim Phillips <kim.phillips@amd.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: Nikunj A Dadhania <nikunj@amd.com>
    Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com>
    Cc: stable@kernel.org
    Link: https://patch.msgid.link/20260203222405.4065706-2-kim.phillips@amd.com
    [ No SECURE_AVIC ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

x86/sev: Check for MWAITX and MONITORX opcodes in the #VC handler [+ + +]
Author: Tom Lendacky <thomas.lendacky@amd.com>
Date:   Thu Feb 26 14:41:12 2026 +0800

    x86/sev: Check for MWAITX and MONITORX opcodes in the #VC handler
    
    [ Upstream commit e70316d17f6ab49a6038ffd115397fd68f8c7be8 ]
    
    The MWAITX and MONITORX instructions generate the same #VC error code as
    the MWAIT and MONITOR instructions, respectively. Update the #VC handler
    opcode checking to also support the MWAITX and MONITORX opcodes.
    
    Fixes: e3ef461af35a ("x86/sev: Harden #VC instruction emulation somewhat")
    Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Link: https://lore.kernel.org/r/453d5a7cfb4b9fe818b6fb67f93ae25468bc9e23.1713793161.git.thomas.lendacky@amd.com
    Signed-off-by: Wenshan Lan <jetlan9@163.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

x86/sev: Harden #VC instruction emulation somewhat [+ + +]
Author: Borislav Petkov (AMD) <bp@alien8.de>
Date:   Thu Feb 26 14:41:11 2026 +0800

    x86/sev: Harden #VC instruction emulation somewhat
    
    [ Upstream commit e3ef461af35a8c74f2f4ce6616491ddb355a208f ]
    
    Compare the opcode bytes at rIP for each #VC exit reason to verify the
    instruction which raised the #VC exception is actually the right one.
    
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Acked-by: Tom Lendacky <thomas.lendacky@amd.com>
    Link: https://lore.kernel.org/r/20240105101407.11694-1-bp@alien8.de
    Signed-off-by: Wenshan Lan <jetlan9@163.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/uprobes: Fix XOL allocation failure for 32-bit tasks [+ + +]
Author: Oleg Nesterov <oleg@redhat.com>
Date:   Mon Mar 2 16:29:27 2026 +0100

    x86/uprobes: Fix XOL allocation failure for 32-bit tasks
    
    [ Upstream commit d55c571e4333fac71826e8db3b9753fadfbead6a ]
    
    This script
    
            #!/usr/bin/bash
    
            echo 0 > /proc/sys/kernel/randomize_va_space
    
            echo 'void main(void) {}' > TEST.c
    
            # -fcf-protection to ensure that the 1st endbr32 insn can't be emulated
            gcc -m32 -fcf-protection=branch TEST.c -o test
    
            bpftrace -e 'uprobe:./test:main {}' -c ./test
    
    "hangs", the probed ./test task enters an endless loop.
    
    The problem is that with randomize_va_space == 0
    get_unmapped_area(TASK_SIZE - PAGE_SIZE) called by xol_add_vma() can not
    just return the "addr == TASK_SIZE - PAGE_SIZE" hint, this addr is used
    by the stack vma.
    
    arch_get_unmapped_area_topdown() doesn't take TIF_ADDR32 into account and
    in_32bit_syscall() is false, this leads to info.high_limit > TASK_SIZE.
    vm_unmapped_area() happily returns the high address > TASK_SIZE and then
    get_unmapped_area() returns -ENOMEM after the "if (addr > TASK_SIZE - len)"
    check.
    
    handle_swbp() doesn't report this failure (probably it should) and silently
    restarts the probed insn. Endless loop.
    
    I think that the right fix should change the x86 get_unmapped_area() paths
    to rely on TIF_ADDR32 rather than in_32bit_syscall(). Note also that if
    CONFIG_X86_X32_ABI=y, in_x32_syscall() falsely returns true in this case
    because ->orig_ax = -1.
    
    But we need a simple fix for -stable, so this patch just sets TS_COMPAT if
    the probed task is 32-bit to make in_ia32_syscall() true.
    
    Fixes: 1b028f784e8c ("x86/mm: Introduce mmap_compat_base() for 32-bit mmap()")
    Reported-by: Paulo Andrade <pandrade@redhat.com>
    Signed-off-by: Oleg Nesterov <oleg@redhat.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lore.kernel.org/all/aV5uldEvV7pb4RA8@redhat.com/
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/aWO7Fdxn39piQnxu@redhat.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xdp: produce a warning when calculated tailroom is negative [+ + +]
Author: Larysa Zaremba <larysa.zaremba@intel.com>
Date:   Thu Mar 5 12:12:50 2026 +0100

    xdp: produce a warning when calculated tailroom is negative
    
    [ Upstream commit 8821e857759be9db3cde337ad328b71fe5c8a55f ]
    
    Many ethernet drivers report xdp Rx queue frag size as being the same as
    DMA write size. However, the only user of this field, namely
    bpf_xdp_frags_increase_tail(), clearly expects a truesize.
    
    Such difference leads to unspecific memory corruption issues under certain
    circumstances, e.g. in ixgbevf maximum DMA write size is 3 KB, so when
    running xskxceiver's XDP_ADJUST_TAIL_GROW_MULTI_BUFF, 6K packet fully uses
    all DMA-writable space in 2 buffers. This would be fine, if only
    rxq->frag_size was properly set to 4K, but value of 3K results in a
    negative tailroom, because there is a non-zero page offset.
    
    We are supposed to return -EINVAL and be done with it in such case, but due
    to tailroom being stored as an unsigned int, it is reported to be somewhere
    near UINT_MAX, resulting in a tail being grown, even if the requested
    offset is too much (it is around 2K in the abovementioned test). This later
    leads to all kinds of unspecific calltraces.
    
    [ 7340.337579] xskxceiver[1440]: segfault at 1da718 ip 00007f4161aeac9d sp 00007f41615a6a00 error 6
    [ 7340.338040] xskxceiver[1441]: segfault at 7f410000000b ip 00000000004042b5 sp 00007f415bffecf0 error 4
    [ 7340.338179]  in libc.so.6[61c9d,7f4161aaf000+160000]
    [ 7340.339230]  in xskxceiver[42b5,400000+69000]
    [ 7340.340300]  likely on CPU 6 (core 0, socket 6)
    [ 7340.340302] Code: ff ff 01 e9 f4 fe ff ff 0f 1f 44 00 00 4c 39 f0 74 73 31 c0 ba 01 00 00 00 f0 0f b1 17 0f 85 ba 00 00 00 49 8b 87 88 00 00 00 <4c> 89 70 08 eb cc 0f 1f 44 00 00 48 8d bd f0 fe ff ff 89 85 ec fe
    [ 7340.340888]  likely on CPU 3 (core 0, socket 3)
    [ 7340.345088] Code: 00 00 00 ba 00 00 00 00 be 00 00 00 00 89 c7 e8 31 ca ff ff 89 45 ec 8b 45 ec 85 c0 78 07 b8 00 00 00 00 eb 46 e8 0b c8 ff ff <8b> 00 83 f8 69 74 24 e8 ff c7 ff ff 8b 00 83 f8 0b 74 18 e8 f3 c7
    [ 7340.404334] Oops: general protection fault, probably for non-canonical address 0x6d255010bdffc: 0000 [#1] SMP NOPTI
    [ 7340.405972] CPU: 7 UID: 0 PID: 1439 Comm: xskxceiver Not tainted 6.19.0-rc1+ #21 PREEMPT(lazy)
    [ 7340.408006] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.17.0-5.fc42 04/01/2014
    [ 7340.409716] RIP: 0010:lookup_swap_cgroup_id+0x44/0x80
    [ 7340.410455] Code: 83 f8 1c 73 39 48 ba ff ff ff ff ff ff ff 03 48 8b 04 c5 20 55 fa bd 48 21 d1 48 89 ca 83 e1 01 48 d1 ea c1 e1 04 48 8d 04 90 <8b> 00 48 83 c4 10 d3 e8 c3 cc cc cc cc 31 c0 e9 98 b7 dd 00 48 89
    [ 7340.412787] RSP: 0018:ffffcc5c04f7f6d0 EFLAGS: 00010202
    [ 7340.413494] RAX: 0006d255010bdffc RBX: ffff891f477895a8 RCX: 0000000000000010
    [ 7340.414431] RDX: 0001c17e3fffffff RSI: 00fa070000000000 RDI: 000382fc7fffffff
    [ 7340.415354] RBP: 00fa070000000000 R08: ffffcc5c04f7f8f8 R09: ffffcc5c04f7f7d0
    [ 7340.416283] R10: ffff891f4c1a7000 R11: ffffcc5c04f7f9c8 R12: ffffcc5c04f7f7d0
    [ 7340.417218] R13: 03ffffffffffffff R14: 00fa06fffffffe00 R15: ffff891f47789500
    [ 7340.418229] FS:  0000000000000000(0000) GS:ffff891ffdfaa000(0000) knlGS:0000000000000000
    [ 7340.419489] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [ 7340.420286] CR2: 00007f415bfffd58 CR3: 0000000103f03002 CR4: 0000000000772ef0
    [ 7340.421237] PKRU: 55555554
    [ 7340.421623] Call Trace:
    [ 7340.421987]  <TASK>
    [ 7340.422309]  ? softleaf_from_pte+0x77/0xa0
    [ 7340.422855]  swap_pte_batch+0xa7/0x290
    [ 7340.423363]  zap_nonpresent_ptes.constprop.0.isra.0+0xd1/0x270
    [ 7340.424102]  zap_pte_range+0x281/0x580
    [ 7340.424607]  zap_pmd_range.isra.0+0xc9/0x240
    [ 7340.425177]  unmap_page_range+0x24d/0x420
    [ 7340.425714]  unmap_vmas+0xa1/0x180
    [ 7340.426185]  exit_mmap+0xe1/0x3b0
    [ 7340.426644]  __mmput+0x41/0x150
    [ 7340.427098]  exit_mm+0xb1/0x110
    [ 7340.427539]  do_exit+0x1b2/0x460
    [ 7340.427992]  do_group_exit+0x2d/0xc0
    [ 7340.428477]  get_signal+0x79d/0x7e0
    [ 7340.428957]  arch_do_signal_or_restart+0x34/0x100
    [ 7340.429571]  exit_to_user_mode_loop+0x8e/0x4c0
    [ 7340.430159]  do_syscall_64+0x188/0x6b0
    [ 7340.430672]  ? __do_sys_clone3+0xd9/0x120
    [ 7340.431212]  ? switch_fpu_return+0x4e/0xd0
    [ 7340.431761]  ? arch_exit_to_user_mode_prepare.isra.0+0xa1/0xc0
    [ 7340.432498]  ? do_syscall_64+0xbb/0x6b0
    [ 7340.433015]  ? __handle_mm_fault+0x445/0x690
    [ 7340.433582]  ? count_memcg_events+0xd6/0x210
    [ 7340.434151]  ? handle_mm_fault+0x212/0x340
    [ 7340.434697]  ? do_user_addr_fault+0x2b4/0x7b0
    [ 7340.435271]  ? clear_bhb_loop+0x30/0x80
    [ 7340.435788]  ? clear_bhb_loop+0x30/0x80
    [ 7340.436299]  ? clear_bhb_loop+0x30/0x80
    [ 7340.436812]  ? clear_bhb_loop+0x30/0x80
    [ 7340.437323]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
    [ 7340.437973] RIP: 0033:0x7f4161b14169
    [ 7340.438468] Code: Unable to access opcode bytes at 0x7f4161b1413f.
    [ 7340.439242] RSP: 002b:00007ffc6ebfa770 EFLAGS: 00000246 ORIG_RAX: 00000000000000ca
    [ 7340.440173] RAX: fffffffffffffe00 RBX: 00000000000005a1 RCX: 00007f4161b14169
    [ 7340.441061] RDX: 00000000000005a1 RSI: 0000000000000109 RDI: 00007f415bfff990
    [ 7340.441943] RBP: 00007ffc6ebfa7a0 R08: 0000000000000000 R09: 00000000ffffffff
    [ 7340.442824] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    [ 7340.443707] R13: 0000000000000000 R14: 00007f415bfff990 R15: 00007f415bfff6c0
    [ 7340.444586]  </TASK>
    [ 7340.444922] Modules linked in: rfkill intel_rapl_msr intel_rapl_common intel_uncore_frequency_common skx_edac_common nfit libnvdimm kvm_intel vfat fat kvm snd_pcm irqbypass rapl iTCO_wdt snd_timer intel_pmc_bxt iTCO_vendor_support snd ixgbevf virtio_net soundcore i2c_i801 pcspkr libeth_xdp net_failover i2c_smbus lpc_ich failover libeth virtio_balloon joydev 9p fuse loop zram lz4hc_compress lz4_compress 9pnet_virtio 9pnet netfs ghash_clmulni_intel serio_raw qemu_fw_cfg
    [ 7340.449650] ---[ end trace 0000000000000000 ]---
    
    The issue can be fixed in all in-tree drivers, but we cannot just trust OOT
    drivers to not do this. Therefore, make tailroom a signed int and produce a
    warning when it is negative to prevent such mistakes in the future.
    
    Fixes: bf25146a5595 ("bpf: add frags support to the bpf_xdp_adjust_tail() API")
    Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
    Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Acked-by: Martin KaFai Lau <martin.lau@kernel.org>
    Signed-off-by: Larysa Zaremba <larysa.zaremba@intel.com>
    Link: https://patch.msgid.link/20260305111253.2317394-10-larysa.zaremba@intel.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xdp: use modulo operation to calculate XDP frag tailroom [+ + +]
Author: Larysa Zaremba <larysa.zaremba@intel.com>
Date:   Thu Mar 5 12:12:42 2026 +0100

    xdp: use modulo operation to calculate XDP frag tailroom
    
    [ Upstream commit 88b6b7f7b216108a09887b074395fa7b751880b1 ]
    
    The current formula for calculating XDP tailroom in mbuf packets works only
    if each frag has its own page (if rxq->frag_size is PAGE_SIZE), this
    defeats the purpose of the parameter overall and without any indication
    leads to negative calculated tailroom on at least half of frags, if shared
    pages are used.
    
    There are not many drivers that set rxq->frag_size. Among them:
    * i40e and enetc always split page uniformly between frags, use shared
      pages
    * ice uses page_pool frags via libeth, those are power-of-2 and uniformly
      distributed across page
    * idpf has variable frag_size with XDP on, so current API is not applicable
    * mlx5, mtk and mvneta use PAGE_SIZE or 0 as frag_size for page_pool
    
    As for AF_XDP ZC, only ice, i40e and idpf declare frag_size for it. Modulo
    operation yields good results for aligned chunks, they are all power-of-2,
    between 2K and PAGE_SIZE. Formula without modulo fails when chunk_size is
    2K. Buffers in unaligned mode are not distributed uniformly, so modulo
    operation would not work.
    
    To accommodate unaligned buffers, we could define frag_size as
    data + tailroom, and hence do not subtract offset when calculating
    tailroom, but this would necessitate more changes in the drivers.
    
    Define rxq->frag_size as an even portion of a page that fully belongs to a
    single frag. When calculating tailroom, locate the data start within such
    portion by performing a modulo operation on page offset.
    
    Fixes: bf25146a5595 ("bpf: add frags support to the bpf_xdp_adjust_tail() API")
    Acked-by: Jakub Kicinski <kuba@kernel.org>
    Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
    Signed-off-by: Larysa Zaremba <larysa.zaremba@intel.com>
    Link: https://patch.msgid.link/20260305111253.2317394-2-larysa.zaremba@intel.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
xen/acpi-processor: fix _CST detection using undersized evaluation buffer [+ + +]
Author: David Thomson <dt@linux-mail.net>
Date:   Tue Feb 24 09:37:11 2026 +0000

    xen/acpi-processor: fix _CST detection using undersized evaluation buffer
    
    [ Upstream commit 8b57227d59a86fc06d4f09de08f98133680f2cae ]
    
    read_acpi_id() attempts to evaluate _CST using a stack buffer of
    sizeof(union acpi_object) (48 bytes), but _CST returns a nested Package
    of sub-Packages (one per C-state, each containing a register descriptor,
    type, latency, and power) requiring hundreds of bytes. The evaluation
    always fails with AE_BUFFER_OVERFLOW.
    
    On modern systems using FFH/MWAIT entry (where pblk is zero), this
    causes the function to return before setting the acpi_id_cst_present
    bit. In check_acpi_ids(), flags.power is then zero for all Phase 2 CPUs
    (physical CPUs beyond dom0's vCPU count), so push_cxx_to_hypervisor() is
    never called for them.
    
    On a system with dom0_max_vcpus=2 and 8 physical CPUs, only PCPUs 0-1
    receive C-state data. PCPUs 2-7 are stuck in C0/C1 idle, unable to
    enter C2/C3. This costs measurable wall power (4W observed on an Intel
    Core Ultra 7 265K with Xen 4.20).
    
    The function never uses the _CST return value -- it only needs to know
    whether _CST exists. Replace the broken acpi_evaluate_object() call with
    acpi_has_method(), which correctly detects _CST presence using
    acpi_get_handle() without any buffer allocation. This brings C-state
    detection to parity with the P-state path, which already works correctly
    for Phase 2 CPUs.
    
    Fixes: 59a568029181 ("xen/acpi-processor: C and P-state driver that uploads said data to hypervisor.")
    Signed-off-by: David Thomson <dt@linux-mail.net>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Message-ID: <20260224093707.19679-1-dt@linux-mail.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
xen/privcmd: add boot control for restricted usage in domU [+ + +]
Author: Juergen Gross <jgross@suse.com>
Date:   Tue Oct 14 13:28:15 2025 +0200

    xen/privcmd: add boot control for restricted usage in domU
    
    commit 1613462be621ad5103ec338a7b0ca0746ec4e5f1 upstream.
    
    When running in an unprivileged domU under Xen, the privcmd driver
    is restricted to allow only hypercalls against a target domain, for
    which the current domU is acting as a device model.
    
    Add a boot parameter "unrestricted" to allow all hypercalls (the
    hypervisor will still refuse destructive hypercalls affecting other
    guests).
    
    Make this new parameter effective only in case the domU wasn't started
    using secure boot, as otherwise hypercalls targeting the domU itself
    might result in violating the secure boot functionality.
    
    This is achieved by adding another lockdown reason, which can be
    tested to not being set when applying the "unrestricted" option.
    
    This is part of XSA-482
    
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xen/privcmd: restrict usage in unprivileged domU [+ + +]
Author: Juergen Gross <jgross@suse.com>
Date:   Thu Oct 9 16:54:58 2025 +0200

    xen/privcmd: restrict usage in unprivileged domU
    
    commit 453b8fb68f3641fea970db88b7d9a153ed2a37e8 upstream.
    
    The Xen privcmd driver allows to issue arbitrary hypercalls from
    user space processes. This is normally no problem, as access is
    usually limited to root and the hypervisor will deny any hypercalls
    affecting other domains.
    
    In case the guest is booted using secure boot, however, the privcmd
    driver would be enabling a root user process to modify e.g. kernel
    memory contents, thus breaking the secure boot feature.
    
    The only known case where an unprivileged domU is really needing to
    use the privcmd driver is the case when it is acting as the device
    model for another guest. In this case all hypercalls issued via the
    privcmd driver will target that other guest.
    
    Fortunately the privcmd driver can already be locked down to allow
    only hypercalls targeting a specific domain, but this mode can be
    activated from user land only today.
    
    The target domain can be obtained from Xenstore, so when not running
    in dom0 restrict the privcmd driver to that target domain from the
    beginning, resolving the potential problem of breaking secure boot.
    
    This is XSA-482
    
    Reported-by: Teddy Astie <teddy.astie@vates.tech>
    Fixes: 1c5de1939c20 ("xen: add privcmd driver")
    Signed-off-by: Juergen Gross <jgross@suse.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 19 06:50:05 2026 -0400

    xfs: ensure dquot item is deleted from AIL only after log shutdown
    
    [ Upstream commit 186ac39b8a7d3ec7ce9c5dd45e5c2730177f375c ]
    
    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>
    [ adapted error path to preserve existing out_unlock label between xfs_trans_ail_delete and xfs_dqfunlock ]
    Signed-off-by: Sasha Levin <sashal@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:   Thu Mar 19 06:49:47 2026 -0400

    xfs: fix integer overflow in bmap intent sort comparator
    
    [ Upstream commit 362c490980867930a098b99f421268fbd7ca05fd ]
    
    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>
    [ replaced `bi_entry()` macro with `container_of()` and inlined `cmp_int()` as a manual three-way comparison expression ]
    Signed-off-by: Sasha Levin <sashal@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>

 
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>

 
xsk: Fix fragment node deletion to prevent buffer leak [+ + +]
Author: Nikhil P. Rao <nikhil.rao@amd.com>
Date:   Wed Feb 25 00:00:26 2026 +0000

    xsk: Fix fragment node deletion to prevent buffer leak
    
    [ Upstream commit 60abb0ac11dccd6b98fd9182bc5f85b621688861 ]
    
    After commit b692bf9a7543 ("xsk: Get rid of xdp_buff_xsk::xskb_list_node"),
    the list_node field is reused for both the xskb pool list and the buffer
    free list, this causes a buffer leak as described below.
    
    xp_free() checks if a buffer is already on the free list using
    list_empty(&xskb->list_node). When list_del() is used to remove a node
    from the xskb pool list, it doesn't reinitialize the node pointers.
    This means list_empty() will return false even after the node has been
    removed, causing xp_free() to incorrectly skip adding the buffer to the
    free list.
    
    Fix this by using list_del_init() instead of list_del() in all fragment
    handling paths, this ensures the list node is reinitialized after removal,
    allowing the list_empty() to work correctly.
    
    Fixes: b692bf9a7543 ("xsk: Get rid of xdp_buff_xsk::xskb_list_node")
    Acked-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
    Signed-off-by: Nikhil P. Rao <nikhil.rao@amd.com>
    Link: https://patch.msgid.link/20260225000456.107806-2-nikhil.rao@amd.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: f7387d6579d6 ("xsk: Fix zero-copy AF_XDP fragment drop")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xsk: Fix zero-copy AF_XDP fragment drop [+ + +]
Author: Nikhil P. Rao <nikhil.rao@amd.com>
Date:   Wed Feb 25 00:00:27 2026 +0000

    xsk: Fix zero-copy AF_XDP fragment drop
    
    [ Upstream commit f7387d6579d65efd490a864254101cb665f2e7a7 ]
    
    AF_XDP should ensure that only a complete packet is sent to application.
    In the zero-copy case, if the Rx queue gets full as fragments are being
    enqueued, the remaining fragments are dropped.
    
    For the multi-buffer case, add a check to ensure that the Rx queue has
    enough space for all fragments of a packet before starting to enqueue
    them.
    
    Fixes: 24ea50127ecf ("xsk: support mbuf on ZC RX")
    Signed-off-by: Nikhil P. Rao <nikhil.rao@amd.com>
    Link: https://patch.msgid.link/20260225000456.107806-3-nikhil.rao@amd.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xsk: Get rid of xdp_buff_xsk::xskb_list_node [+ + +]
Author: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Date:   Mon Oct 7 14:24:53 2024 +0200

    xsk: Get rid of xdp_buff_xsk::xskb_list_node
    
    [ Upstream commit b692bf9a7543af7ad11a59d182a3757578f0ba53 ]
    
    Let's bring xdp_buff_xsk back to occupying 2 cachelines by removing
    xskb_list_node - for the purpose of gathering the xskb frags
    free_list_node can be used, head of the list (xsk_buff_pool::xskb_list)
    stays as-is, just reuse the node ptr.
    
    It is safe to do as a single xdp_buff_xsk can never reside in two
    pool's lists simultaneously.
    
    Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Magnus Karlsson <magnus.karlsson@intel.com>
    Link: https://lore.kernel.org/bpf/20241007122458.282590-2-maciej.fijalkowski@intel.com
    Stable-dep-of: f7387d6579d6 ("xsk: Fix zero-copy AF_XDP fragment drop")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xsk: introduce helper to determine rxq->frag_size [+ + +]
Author: Larysa Zaremba <larysa.zaremba@intel.com>
Date:   Thu Mar 5 12:12:43 2026 +0100

    xsk: introduce helper to determine rxq->frag_size
    
    [ Upstream commit 16394d80539937d348dd3b9ea32415c54e67a81b ]
    
    rxq->frag_size is basically a step between consecutive strictly aligned
    frames. In ZC mode, chunk size fits exactly, but if chunks are unaligned,
    there is no safe way to determine accessible space to grow tailroom.
    
    Report frag_size to be zero, if chunks are unaligned, chunk_size otherwise.
    
    Fixes: 24ea50127ecf ("xsk: support mbuf on ZC RX")
    Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
    Signed-off-by: Larysa Zaremba <larysa.zaremba@intel.com>
    Link: https://patch.msgid.link/20260305111253.2317394-3-larysa.zaremba@intel.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xsk: s/free_list_node/list_node/ [+ + +]
Author: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Date:   Mon Oct 7 14:24:54 2024 +0200

    xsk: s/free_list_node/list_node/
    
    [ Upstream commit 30ec2c1baaead43903ad63ff8e3083949059083c ]
    
    Now that free_list_node's purpose is two-folded, make it just a
    'list_node'.
    
    Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Magnus Karlsson <magnus.karlsson@intel.com>
    Link: https://lore.kernel.org/bpf/20241007122458.282590-3-maciej.fijalkowski@intel.com
    Stable-dep-of: f7387d6579d6 ("xsk: Fix zero-copy AF_XDP fragment drop")
    Signed-off-by: Sasha Levin <sashal@kernel.org>