Changelog in Linux kernel 6.1.160

 
ACPI: CPPC: Fix missing PCC check for guaranteed_perf [+ + +]
Author: Pengjie Zhang <[email protected]>
Date:   Wed Dec 10 21:22:27 2025 +0800

    ACPI: CPPC: Fix missing PCC check for guaranteed_perf
    
    commit 6ea3a44cef28add2d93b1ef119d84886cb1e3c9b upstream.
    
    The current implementation overlooks the 'guaranteed_perf'
    register in this check.
    
    If the Guaranteed Performance register is located in the PCC
    subspace, the function currently attempts to read it without
    acquiring the lock and without sending the CMD_READ doorbell
    to the firmware. This can result in reading stale data.
    
    Fixes: 29523f095397 ("ACPI / CPPC: Add support for guaranteed performance")
    Signed-off-by: Pengjie Zhang <[email protected]>
    Cc: 4.20+ <[email protected]> # 4.20+
    [ rjw: Subject and changelog edits ]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ACPI: processor_core: fix map_x2apic_id for amd-pstate on am4 [+ + +]
Author: René Rebe <[email protected]>
Date:   Wed Nov 26 16:55:13 2025 +0100

    ACPI: processor_core: fix map_x2apic_id for amd-pstate on am4
    
    [ Upstream commit 17e7972979e147cc51d4a165e6b6b0f93273ca68 ]
    
    On all AMD AM4 systems I have seen, e.g ASUS X470-i, Pro WS X570 Ace
    and equivalent Gigabyte, amd-pstate does not initialize when the
    x2apic is enabled in the BIOS. Kernel debug messages include:
    
    [    0.315438] acpi LNXCPU:00: Failed to get CPU physical ID.
    [    0.354756] ACPI CPPC: No CPC descriptor for CPU:0
    [    0.714951] amd_pstate: the _CPC object is not present in SBIOS or ACPI disabled
    
    I tracked this down to map_x2apic_id() checking device_declaration
    passed in via the type argument of acpi_get_phys_id() via
    map_madt_entry() while map_lapic_id() does not.
    
    It appears these BIOSes use Processor statements for declaring the CPUs
    in the ACPI namespace instead of processor device objects (which should
    have been used). CPU declarations via Processor statements were
    deprecated in ACPI 6.0 that was released 10 years ago. They should not
    be used any more in any contemporary platform firmware.
    
    I tried to contact Asus support multiple times, but never received a
    reply nor did any BIOS update ever change this.
    
    Fix amd-pstate w/ x2apic on am4 by allowing map_x2apic_id() to work with
    CPUs declared via Processor statements for IDs less than 255, which is
    consistent with ACPI 5.0 that still allowed Processor statements to be
    used for declaring CPUs.
    
    Fixes: 7237d3de78ff ("x86, ACPI: add support for x2apic ACPI extensions")
    Signed-off-by: René Rebe <[email protected]>
    [ rjw: Changelog edits ]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ACPI: property: Fix fwnode refcount leak in acpi_fwnode_graph_parse_endpoint() [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Tue Nov 11 15:50:00 2025 +0800

    ACPI: property: Fix fwnode refcount leak in acpi_fwnode_graph_parse_endpoint()
    
    [ Upstream commit 593ee49222a0d751062fd9a5e4a963ade4ec028a ]
    
    acpi_fwnode_graph_parse_endpoint() calls fwnode_get_parent() to obtain the
    parent fwnode but returns without calling fwnode_handle_put() on it. This
    potentially leads to a fwnode refcount leak and prevents the parent node
    from being released properly.
    
    Call fwnode_handle_put() on the parent fwnode before returning to prevent
    the leak from occurring.
    
    Fixes: 3b27d00e7b6d ("device property: Move fwnode graph ops to firmware specific locations")
    Signed-off-by: Haotian Zhang <[email protected]>
    Reviewed-by: Sakari Ailus <[email protected]>
    [ rjw: Changelog edits ]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ACPI: property: Use ACPI functions in acpi_graph_get_next_endpoint() only [+ + +]
Author: Sakari Ailus <[email protected]>
Date:   Wed Oct 1 13:43:19 2025 +0300

    ACPI: property: Use ACPI functions in acpi_graph_get_next_endpoint() only
    
    [ Upstream commit 5d010473cdeaabf6a2d3a9e2aed2186c1b73c213 ]
    
    Calling fwnode_get_next_child_node() in ACPI implementation of the fwnode
    property API is somewhat problematic as the latter is used in the
    impelementation of the former. Instead of using
    fwnode_get_next_child_node() in acpi_graph_get_next_endpoint(), call
    acpi_get_next_subnode() directly instead.
    
    Signed-off-by: Sakari Ailus <[email protected]>
    Reviewed-by: Laurent Pinchart <[email protected]>
    Reviewed-by: Jonathan Cameron <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ACPICA: Avoid walking the Namespace if start_node is NULL [+ + +]
Author: Cryolitia PukNgae <[email protected]>
Date:   Tue Nov 25 16:14:38 2025 +0800

    ACPICA: Avoid walking the Namespace if start_node is NULL
    
    [ Upstream commit 9d6c58dae8f6590c746ac5d0012ffe14a77539f0 ]
    
    Although commit 0c9992315e73 ("ACPICA: Avoid walking the ACPI Namespace
    if it is not there") fixed the situation when both start_node and
    acpi_gbl_root_node are NULL, the Linux kernel mainline now still crashed
    on Honor Magicbook 14 Pro [1].
    
    That happens due to the access to the member of parent_node in
    acpi_ns_get_next_node().  The NULL pointer dereference will always
    happen, no matter whether or not the start_node is equal to
    ACPI_ROOT_OBJECT, so move the check of start_node being NULL
    out of the if block.
    
    Unfortunately, all the attempts to contact Honor have failed, they
    refused to provide any technical support for Linux.
    
    The bad DSDT table's dump could be found on GitHub [2].
    
    DMI: HONOR FMB-P/FMB-P-PCB, BIOS 1.13 05/08/2025
    
    Link: https://github.com/acpica/acpica/commit/1c1b57b9eba4554cb132ee658dd942c0210ed20d
    Link: https://gist.github.com/Cryolitia/a860ffc97437dcd2cd988371d5b73ed7 [1]
    Link: https://github.com/denis-bb/honor-fmb-p-dsdt [2]
    Signed-off-by: Cryolitia PukNgae <[email protected]>
    Reviewed-by: WangYuli <[email protected]>
    [ rjw: Subject adjustment, changelog edits ]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ALSA: dice: fix buffer overflow in detect_stream_formats() [+ + +]
Author: Junrui Luo <[email protected]>
Date:   Fri Nov 28 12:06:31 2025 +0800

    ALSA: dice: fix buffer overflow in detect_stream_formats()
    
    commit 324f3e03e8a85931ce0880654e3c3eb38b0f0bba upstream.
    
    The function detect_stream_formats() reads the stream_count value directly
    from a FireWire device without validating it. This can lead to
    out-of-bounds writes when a malicious device provides a stream_count value
    greater than MAX_STREAMS.
    
    Fix by applying the same validation to both TX and RX stream counts in
    detect_stream_formats().
    
    Reported-by: Yuhao Jiang <[email protected]>
    Reported-by: Junrui Luo <[email protected]>
    Fixes: 58579c056c1c ("ALSA: dice: use extended protocol to detect available stream formats")
    Cc: [email protected]
    Reviewed-by: Takashi Sakamoto <[email protected]>
    Signed-off-by: Junrui Luo <[email protected]>
    Link: https://patch.msgid.link/SYBPR01MB7881B043FC68B4C0DA40B73DAFDCA@SYBPR01MB7881.ausprd01.prod.outlook.com
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: firewire-motu: add bounds check in put_user loop for DSP events [+ + +]
Author: Junrui Luo <[email protected]>
Date:   Tue Dec 9 13:16:41 2025 +0800

    ALSA: firewire-motu: add bounds check in put_user loop for DSP events
    
    [ Upstream commit 298e753880b6ea99ac30df34959a7a03b0878eed ]
    
    In the DSP event handling code, a put_user() loop copies event data.
    When the user buffer size is not aligned to 4 bytes, it could overwrite
    beyond the buffer boundary.
    
    Fix by adding a bounds check before put_user().
    
    Suggested-by: Takashi Iwai <[email protected]>
    Fixes: 634ec0b2906e ("ALSA: firewire-motu: notify event for parameter change in register DSP model")
    Signed-off-by: Junrui Luo <[email protected]>
    Link: https://patch.msgid.link/SYBPR01MB788112C72AF8A1C8C448B4B8AFA3A@SYBPR01MB7881.ausprd01.prod.outlook.com
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: firewire-motu: fix buffer overflow in hwdep read for DSP events [+ + +]
Author: Junrui Luo <[email protected]>
Date:   Wed Dec 3 12:27:03 2025 +0800

    ALSA: firewire-motu: fix buffer overflow in hwdep read for DSP events
    
    [ Upstream commit 210d77cca3d0494ed30a5c628b20c1d95fa04fb1 ]
    
    The DSP event handling code in hwdep_read() could write more bytes to
    the user buffer than requested, when a user provides a buffer smaller
    than the event header size (8 bytes).
    
    Fix by using min_t() to clamp the copy size, This ensures we never copy
    more than the user requested.
    
    Reported-by: Yuhao Jiang <[email protected]>
    Reported-by: Junrui Luo <[email protected]>
    Fixes: 634ec0b2906e ("ALSA: firewire-motu: notify event for parameter change in register DSP model")
    Signed-off-by: Junrui Luo <[email protected]>
    Link: https://patch.msgid.link/SYBPR01MB78810656377E79E58350D951AFD9A@SYBPR01MB7881.ausprd01.prod.outlook.com
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda: cs35l41: Fix NULL pointer dereference in cs35l41_hda_read_acpi() [+ + +]
Author: Denis Arefev <[email protected]>
Date:   Tue Dec 16 06:46:35 2025 -0500

    ALSA: hda: cs35l41: Fix NULL pointer dereference in cs35l41_hda_read_acpi()
    
    [ Upstream commit c34b04cc6178f33c08331568c7fd25c5b9a39f66 ]
    
    The acpi_get_first_physical_node() function can return NULL, in which
    case the get_device() function also returns NULL, but this value is
    then dereferenced without checking,so add a check to prevent a crash.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 7b2f3eb492da ("ALSA: hda: cs35l41: Add support for CS35L41 in HDA systems")
    Cc: [email protected]
    Signed-off-by: Denis Arefev <[email protected]>
    Reviewed-by: Richard Fitzgerald <[email protected]>
    Signed-off-by: Takashi Iwai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [ NULL check right after acpi_dev_put(adev) cleanup call ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: pcmcia: Fix resource leak in snd_pdacf_probe error path [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Mon Dec 15 17:04:33 2025 +0800

    ALSA: pcmcia: Fix resource leak in snd_pdacf_probe error path
    
    [ Upstream commit 5032347c04ba7ff9ba878f262e075d745c06a2a8 ]
    
    When pdacf_config() fails, snd_pdacf_probe() returns the error code
    directly without freeing the sound card resources allocated by
    snd_card_new(), which leads to a memory leak.
    
    Add proper error handling to free the sound card and clear the card
    list entry when pdacf_config() fails.
    
    Fixes: 15b99ac17295 ("[PATCH] pcmcia: add return value to _config() functions")
    Suggested-by: Takashi Iwai <[email protected]>
    Signed-off-by: Haotian Zhang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: uapi: Fix typo in asound.h comment [+ + +]
Author: Andres J Rosa <[email protected]>
Date:   Wed Dec 3 10:25:01 2025 -0600

    ALSA: uapi: Fix typo in asound.h comment
    
    [ Upstream commit 9a97857db0c5655b8932f86b5d18bb959079b0ee ]
    
    Fix 'level-shit' to 'level-shift' in struct snd_cea_861_aud_if comment.
    
    Fixes: 7ba1c40b536e ("ALSA: Add definitions for CEA-861 Audio InfoFrames")
    Signed-off-by: Andres J Rosa <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: usb-audio: Add native DSD quirks for PureAudio DAC series [+ + +]
Author: Lushih Hsieh <[email protected]>
Date:   Fri Nov 14 13:20:53 2025 +0800

    ALSA: usb-audio: Add native DSD quirks for PureAudio DAC series
    
    [ Upstream commit 21a9ab5b90b3716a631d559e62818029b4e7f5b7 ]
    
    The PureAudio APA DAC and Lotus DAC5 series are USB Audio
    2.0 Class devices that support native Direct Stream Digital (DSD)
    playback via specific vendor protocols.
    
    Without these quirks, the devices may only function in standard
    PCM mode, or fail to correctly report their DSD format capabilities
    to the ALSA framework, preventing native DSD playback under Linux.
    
    This commit adds new quirk entries for the mentioned DAC models
    based on their respective Vendor/Product IDs (VID:PID), for example:
    0x16d0:0x0ab1 (APA DAC), 0x16d0:0xeca1 (DAC5 series), etc.
    
    The quirk ensures correct DSD format handling by setting the required
    SNDRV_PCM_FMTBIT_DSD_U32_BE format bit and defining the DSD-specific
    Audio Class 2.0 (AC2.0) endpoint configurations. This allows the ALSA
    DSD API to correctly address the device for high-bitrate DSD streams,
    bypassing the need for DoP (DSD over PCM).
    
    Test on APA DAC and Lotus DAC5 SE under Arch Linux.
    
    Tested-by: Lushih Hsieh <[email protected]>
    Signed-off-by: Lushih Hsieh <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: usb-mixer: us16x08: validate meter packet indices [+ + +]
Author: Shipei Qu <[email protected]>
Date:   Wed Dec 17 10:46:30 2025 +0800

    ALSA: usb-mixer: us16x08: validate meter packet indices
    
    [ Upstream commit 5526c1c6ba1d0913c7dfcbbd6fe1744ea7c55f1e ]
    
    get_meter_levels_from_urb() parses the 64-byte meter packets sent by
    the device and fills the per-channel arrays meter_level[],
    comp_level[] and master_level[] in struct snd_us16x08_meter_store.
    
    Currently the function derives the channel index directly from the
    meter packet (MUB2(meter_urb, s) - 1) and uses it to index those
    arrays without validating the range. If the packet contains a
    negative or out-of-range channel number, the driver may write past
    the end of these arrays.
    
    Introduce a local channel variable and validate it before updating the
    arrays. We reject negative indices, limit meter_level[] and
    comp_level[] to SND_US16X08_MAX_CHANNELS, and guard master_level[]
    updates with ARRAY_SIZE(master_level).
    
    Fixes: d2bb390a2081 ("ALSA: usb-audio: Tascam US-16x08 DSP mixer quirk")
    Reported-by: DARKNAVY (@DarkNavyOrg) <[email protected]>
    Closes: https://lore.kernel.org/[email protected]
    Signed-off-by: Shipei Qu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: vxpocket: Fix resource leak in vxpocket_probe error path [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Mon Dec 15 12:26:52 2025 +0800

    ALSA: vxpocket: Fix resource leak in vxpocket_probe error path
    
    [ Upstream commit 2a03b40deacbd293ac9aed0f9b11197dad54fe5f ]
    
    When vxpocket_config() fails, vxpocket_probe() returns the error code
    directly without freeing the sound card resources allocated by
    snd_card_new(), which leads to a memory leak.
    
    Add proper error handling to free the sound card and clear the
    allocation bit when vxpocket_config() fails.
    
    Fixes: 15b99ac17295 ("[PATCH] pcmcia: add return value to _config() functions")
    Signed-off-by: Haotian Zhang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: wavefront: Clear substream pointers on close [+ + +]
Author: Junrui Luo <[email protected]>
Date:   Tue Dec 16 06:24:47 2025 -0500

    ALSA: wavefront: Clear substream pointers on close
    
    [ Upstream commit e11c5c13ce0ab2325d38fe63500be1dd88b81e38 ]
    
    Clear substream pointers in close functions to avoid leaving dangling
    pointers, helping to improve code safety and
    prevents potential issues.
    
    Reported-by: Yuhao Jiang <[email protected]>
    Reported-by: Junrui Luo <[email protected]>
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Signed-off-by: Junrui Luo <[email protected]>
    Link: https://patch.msgid.link/SYBPR01MB7881DF762CAB45EE42F6D812AFC2A@SYBPR01MB7881.ausprd01.prod.outlook.com
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: wavefront: Fix integer overflow in sample size validation [+ + +]
Author: Junrui Luo <[email protected]>
Date:   Tue Dec 16 05:59:24 2025 -0500

    ALSA: wavefront: Fix integer overflow in sample size validation
    
    [ Upstream commit 0c4a13ba88594fd4a27292853e736c6b4349823d ]
    
    The wavefront_send_sample() function has an integer overflow issue
    when validating sample size. The header->size field is u32 but gets
    cast to int for comparison with dev->freemem
    
    Fix by using unsigned comparison to avoid integer overflow.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Signed-off-by: Junrui Luo <[email protected]>
    Link: https://patch.msgid.link/SYBPR01MB7881B47789D1B060CE8BF4C3AFC2A@SYBPR01MB7881.ausprd01.prod.outlook.com
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: wavefront: Use guard() for spin locks [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Tue Dec 16 06:24:46 2025 -0500

    ALSA: wavefront: Use guard() for spin locks
    
    [ Upstream commit 4b97f8e614ba46a50bd181d40b5a1424411a211a ]
    
    Clean up the code using guard() for spin locks.
    
    Merely code refactoring, and no behavior change.
    
    Signed-off-by: Takashi Iwai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Stable-dep-of: e11c5c13ce0a ("ALSA: wavefront: Clear substream pointers on close")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: wavefront: Use standard print API [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Tue Dec 16 05:59:23 2025 -0500

    ALSA: wavefront: Use standard print API
    
    [ Upstream commit 8b4ac5429938dd5f1fbf2eea0687f08cbcccb6be ]
    
    Use the standard print API with dev_*() instead of the old house-baked
    one.  It gives better information and allows dynamically control of
    debug prints.
    
    Reviewed-by: Jaroslav Kysela <[email protected]>
    Signed-off-by: Takashi Iwai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Stable-dep-of: 0c4a13ba8859 ("ALSA: wavefront: Fix integer overflow in sample size validation")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
amba: tegra-ahb: Fix device leak on SMMU enable [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Thu Sep 25 17:00:07 2025 +0200

    amba: tegra-ahb: Fix device leak on SMMU enable
    
    commit 500e1368e46928f4b2259612dcabb6999afae2a6 upstream.
    
    Make sure to drop the reference taken to the AHB platform device when
    looking up its driver data while enabling the SMMU.
    
    Note that holding a reference to a device does not prevent its driver
    data from going away.
    
    Fixes: 89c788bab1f0 ("ARM: tegra: Add SMMU enabler in AHB")
    Cc: [email protected]      # 3.5
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Thierry Reding <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
arm64: dts: imx8mm-venice-gw72xx: remove unused sdhc1 pinctrl [+ + +]
Author: Tim Harvey <[email protected]>
Date:   Thu Sep 18 08:44:49 2025 -0700

    arm64: dts: imx8mm-venice-gw72xx: remove unused sdhc1 pinctrl
    
    [ Upstream commit d949b8d12d6e8fa119bca10d3157cd42e810f6f7 ]
    
    The SDHC1 interface is not used on the imx8mm-venice-gw72xx. Remove the
    unused pinctrl_usdhc1 iomux node.
    
    Fixes: 6f30b27c5ef5 ("arm64: dts: imx8mm: Add Gateworks i.MX 8M Mini Development Kits")
    Signed-off-by: Tim Harvey <[email protected]>
    Reviewed-by: Peng Fan <[email protected]>
    Signed-off-by: Shawn Guo <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: ti: k3-j721e-sk: Fix pinmux for pin Y1 used by power regulator [+ + +]
Author: Siddharth Vadapalli <[email protected]>
Date:   Mon Jan 5 11:48:43 2026 -0500

    arm64: dts: ti: k3-j721e-sk: Fix pinmux for pin Y1 used by power regulator
    
    [ Upstream commit 51f89c488f2ecc020f82bfedd77482584ce8027a ]
    
    The SoC pin Y1 is incorrectly defined in the WKUP Pinmux device-tree node
    (pinctrl@4301c000) leading to the following silent failure:
    
        pinctrl-single 4301c000.pinctrl: mux offset out of range: 0x1dc (0x178)
    
    According to the datasheet for the J721E SoC [0], the pin Y1 belongs to the
    MAIN Pinmux device-tree node (pinctrl@11c000). This is confirmed by the
    address of the pinmux register for it on page 142 of the datasheet which is
    0x00011C1DC.
    
    Hence fix it.
    
    [0]: https://www.ti.com/lit/ds/symlink/tda4vm.pdf
    
    Fixes: 97b67cc102dc ("arm64: dts: ti: k3-j721e-sk: Add DT nodes for power regulators")
    Cc: [email protected]
    Signed-off-by: Siddharth Vadapalli <[email protected]>
    Reviewed-by: Yemike Abhilash Chandra <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vignesh Raghavendra <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ARM: 9464/1: fix input-only operand modification in load_unaligned_zeropad() [+ + +]
Author: Liyuan Pang <[email protected]>
Date:   Tue Dec 9 03:19:45 2025 +0100

    ARM: 9464/1: fix input-only operand modification in load_unaligned_zeropad()
    
    [ Upstream commit edb924a7211c9aa7a4a415e03caee4d875e46b8e ]
    
    In the inline assembly inside load_unaligned_zeropad(), the "addr" is
    constrained as input-only operand. The compiler assumes that on exit
    from the asm statement these operands contain the same values as they
    had before executing the statement, but when kernel page fault happened, the assembly fixup code "bic %2 %2, #0x3" modify the value of "addr", which may lead to an unexpected behavior.
    
    Use a temporary variable "tmp" to handle it, instead of modifying the
    input-only operand, just like what arm64's load_unaligned_zeropad()
    does.
    
    Fixes: b9a50f74905a ("ARM: 7450/1: dcache: select DCACHE_WORD_ACCESS for little-endian ARMv6+ CPUs")
    Co-developed-by: Xie Yuanbin <[email protected]>
    Signed-off-by: Xie Yuanbin <[email protected]>
    Signed-off-by: Liyuan Pang <[email protected]>
    Signed-off-by: Russell King (Oracle) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ARM: dts: microchip: sama5d2: fix spi flexcom fifo size to 32 [+ + +]
Author: Nicolas Ferre <[email protected]>
Date:   Wed Dec 31 16:07:37 2025 -0500

    ARM: dts: microchip: sama5d2: fix spi flexcom fifo size to 32
    
    [ Upstream commit 7d5864dc5d5ea6a35983dd05295fb17f2f2f44ce ]
    
    Unlike standalone spi peripherals, on sama5d2, the flexcom spi have fifo
    size of 32 data. Fix flexcom/spi nodes where this property is wrong.
    
    Fixes: 6b9a3584c7ed ("ARM: dts: at91: sama5d2: Add missing flexcom definitions")
    Cc: [email protected] # 5.8+
    Signed-off-by: Nicolas Ferre <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Claudiu Beznea <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ARM: dts: microchip: sama7g5: fix uart fifo size to 32 [+ + +]
Author: Nicolas Ferre <[email protected]>
Date:   Wed Dec 31 17:31:46 2025 -0500

    ARM: dts: microchip: sama7g5: fix uart fifo size to 32
    
    [ Upstream commit 5654889a94b0de5ad6ceae3793e7f5e0b61b50b6 ]
    
    On some flexcom nodes related to uart, the fifo sizes were wrong: fix
    them to 32 data.
    
    Fixes: 7540629e2fc7 ("ARM: dts: at91: add sama7g5 SoC DT and sama7g5-ek")
    Cc: [email protected] # 5.15+
    Signed-off-by: Nicolas Ferre <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Claudiu Beznea <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ASoC: ak4458: Disable regulator when error happens [+ + +]
Author: Shengjiu Wang <[email protected]>
Date:   Wed Dec 3 18:05:28 2025 +0800

    ASoC: ak4458: Disable regulator when error happens
    
    [ Upstream commit ae585fabb9713a43e358cf606451386757225c95 ]
    
    Disable regulator in runtime resume when error happens to balance
    the reference count of regulator.
    
    Fixes: 7e3096e8f823 ("ASoC: ak4458: Add regulator support")
    Signed-off-by: Shengjiu Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: ak5558: Disable regulator when error happens [+ + +]
Author: Shengjiu Wang <[email protected]>
Date:   Wed Dec 3 18:05:29 2025 +0800

    ASoC: ak5558: Disable regulator when error happens
    
    [ Upstream commit 1f8f726a2a29c28f65b30880335a1610c5e63594 ]
    
    Disable regulator in runtime resume when error happens to balance
    the reference count of regulator.
    
    Fixes: 2ff6d5a108c6 ("ASoC: ak5558: Add regulator support")
    Signed-off-by: Shengjiu Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: bcm: bcm63xx-pcm-whistler: Check return value of of_dma_configure() [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Tue Dec 2 18:16:42 2025 +0800

    ASoC: bcm: bcm63xx-pcm-whistler: Check return value of of_dma_configure()
    
    [ Upstream commit 0ebbd45c33d0049ebf5a22c1434567f0c420b333 ]
    
    bcm63xx_soc_pcm_new() does not check the return value of
    of_dma_configure(), which may fail with -EPROBE_DEFER or
    other errors, allowing PCM setup to continue with incomplete
    DMA configuration.
    
    Add error checking for of_dma_configure() and return on failure.
    
    Fixes: 88eb404ccc3e ("ASoC: brcm: Add DSL/PON SoC audio driver")
    Signed-off-by: Haotian Zhang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: fsl_xcvr: Add Counter registers [+ + +]
Author: Shengjiu Wang <[email protected]>
Date:   Fri Oct 28 15:03:47 2022 +0800

    ASoC: fsl_xcvr: Add Counter registers
    
    [ Upstream commit 107d170dc46e14cfa575d1b995107ef2f2e51dfe ]
    
    These counter registers are part of register list,
    add them to complete the register map
    
    - DMAC counter control registers
    - Data path Timestamp counter register
    - Data path bit counter register
    - Data path bit count timestamp register
    - Data path bit read timestamp register
    
    Signed-off-by: Shengjiu Wang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Stable-dep-of: 73b97d46dde6 ("ASoC: fsl_xcvr: clear the channel status control memory")
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: fsl_xcvr: Add support for i.MX93 platform [+ + +]
Author: Chancel Liu <[email protected]>
Date:   Wed Jan 4 10:39:52 2023 +0800

    ASoC: fsl_xcvr: Add support for i.MX93 platform
    
    [ Upstream commit e240b9329a300af7b7c1eba2ce0abbf19e6c540b ]
    
    Add compatible string and specific soc data to support XCVR on i.MX93
    platform. XCVR IP on i.MX93 is cut to SPDIF only by removing external
    PHY.
    
    Signed-off-by: Chancel Liu <[email protected]>
    Acked-by: Shengjiu Wang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Stable-dep-of: 73b97d46dde6 ("ASoC: fsl_xcvr: clear the channel status control memory")
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: fsl_xcvr: clear the channel status control memory [+ + +]
Author: Shengjiu Wang <[email protected]>
Date:   Wed Nov 26 14:45:09 2025 +0800

    ASoC: fsl_xcvr: clear the channel status control memory
    
    [ Upstream commit 73b97d46dde64fa184d47865d4a532d818c3a007 ]
    
    memset_io() writes memory byte by byte with __raw_writeb() on the arm
    platform if the size is word. but XCVR data RAM memory can't be accessed
    with byte address, so with memset_io() the channel status control memory
    is not really cleared, use writel_relaxed() instead.
    
    Fixes: 28564486866f ("ASoC: fsl_xcvr: Add XCVR ASoC CPU DAI driver")
    Signed-off-by: Shengjiu Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: fsl_xcvr: get channel status data when PHY is not exists [+ + +]
Author: Shengjiu Wang <[email protected]>
Date:   Thu Jul 10 11:04:04 2025 +0800

    ASoC: fsl_xcvr: get channel status data when PHY is not exists
    
    commit ca592e20659e0304ebd8f4dabb273da4f9385848 upstream.
    
    There is no PHY for the XCVR module on i.MX93, the channel status needs
    to be obtained from FSL_XCVR_RX_CS_DATA_* registers. And channel status
    acknowledge (CSA) bit should be set once channel status is processed.
    
    Fixes: e240b9329a30 ("ASoC: fsl_xcvr: Add support for i.MX93 platform")
    Signed-off-by: Shengjiu Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: Intel: catpt: Fix error path in hw_params() [+ + +]
Author: Cezary Rojewski <[email protected]>
Date:   Wed Nov 26 10:55:20 2025 +0100

    ASoC: Intel: catpt: Fix error path in hw_params()
    
    [ Upstream commit 86a5b621be658fc8fe594ca6db317d64de30cce1 ]
    
    Do not leave any resources hanging on the DSP side if
    applying user settings fails.
    
    Fixes: 768a3a3b327d ("ASoC: Intel: catpt: Optimize applying user settings")
    Signed-off-by: Cezary Rojewski <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: qcom: q6adm: the the copp device only during last instance [+ + +]
Author: Srinivas Kandagatla <[email protected]>
Date:   Thu Oct 23 11:24:26 2025 +0100

    ASoC: qcom: q6adm: the the copp device only during last instance
    
    commit 74cc4f3ea4e99262ba0d619c6a4ee33e2cd47f65 upstream.
    
    A matching Common object post processing instance is normally resused
    across multiple streams. However currently we close this on DSP
    even though there is a refcount on this copp object, this can result in
    below error.
    
    q6routing ab00000.remoteproc:glink-edge:apr:service@8:routing: Found Matching Copp 0x0
    qcom-q6adm aprsvc:service:4:8: cmd = 0x10325 return error = 0x2
    q6routing ab00000.remoteproc:glink-edge:apr:service@8:routing: DSP returned error[2]
    q6routing ab00000.remoteproc:glink-edge:apr:service@8:routing: Found Matching Copp 0x0
    qcom-q6adm aprsvc:service:4:8: cmd = 0x10325 return error = 0x2
    q6routing ab00000.remoteproc:glink-edge:apr:service@8:routing: DSP returned error[2]
    qcom-q6adm aprsvc:service:4:8: cmd = 0x10327 return error = 0x2
    qcom-q6adm aprsvc:service:4:8: DSP returned error[2]
    qcom-q6adm aprsvc:service:4:8: Failed to close copp -22
    qcom-q6adm aprsvc:service:4:8: cmd = 0x10327 return error = 0x2
    qcom-q6adm aprsvc:service:4:8: DSP returned error[2]
    qcom-q6adm aprsvc:service:4:8: Failed to close copp -22
    
    Fix this by addressing moving the adm_close to copp_kref destructor
    callback.
    
    Fixes: 7b20b2be51e1 ("ASoC: qdsp6: q6adm: Add q6adm driver")
    Cc: [email protected]
    Reported-by: Martino Facchin <[email protected]>
    Signed-off-by: Srinivas Kandagatla <[email protected]>
    Tested-by: Alexey Klimov <[email protected]> # RB5, RB3
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: qcom: q6apm-dai: set flags to reflect correct operation of appl_ptr [+ + +]
Author: Srinivas Kandagatla <[email protected]>
Date:   Thu Oct 23 11:24:25 2025 +0100

    ASoC: qcom: q6apm-dai: set flags to reflect correct operation of appl_ptr
    
    commit 950a4e5788fc7dc6e8e93614a7d4d0449c39fb8d upstream.
    
    Driver does not expect the appl_ptr to move backward and requires
    explict sync. Make sure that the userspace does not do appl_ptr rewinds
    by specifying the correct flags in pcm_info.
    
    Without this patch, the result could be a forever loop as current logic assumes
    that appl_ptr can only move forward.
    
    Fixes: 3d4a4411aa8b ("ASoC: q6apm-dai: schedule all available frames to avoid dsp under-runs")
    Cc: [email protected]
    Signed-off-by: Srinivas Kandagatla <[email protected]>
    Tested-by: Alexey Klimov <[email protected]> # RB5, RB3
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: qcom: q6asm-dai: perform correct state check before closing [+ + +]
Author: Srinivas Kandagatla <[email protected]>
Date:   Thu Oct 23 11:24:28 2025 +0100

    ASoC: qcom: q6asm-dai: perform correct state check before closing
    
    commit bfbb12dfa144d45575bcfe139a71360b3ce80237 upstream.
    
    Do not stop a q6asm stream if its not started, this can result in
    unnecessary dsp command which will timeout anyway something like below:
    
    q6asm-dai ab00000.remoteproc:glink-edge:apr:service@7:dais: CMD 10bcd timeout
    
    Fix this by correctly checking the state.
    
    Fixes: 2a9e92d371db ("ASoC: qdsp6: q6asm: Add q6asm dai driver")
    Cc: [email protected]
    Signed-off-by: Srinivas Kandagatla <[email protected]>
    Tested-by: Alexey Klimov <[email protected]> # RB5, RB3
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: qcom: qdsp6: q6asm-dai: set 10 ms period and buffer alignment. [+ + +]
Author: Srinivas Kandagatla <[email protected]>
Date:   Thu Oct 23 11:24:27 2025 +0100

    ASoC: qcom: qdsp6: q6asm-dai: set 10 ms period and buffer alignment.
    
    commit 81c53b52de21b8d5a3de55ebd06b6bf188bf7efd upstream.
    
    DSP expects the periods to be aligned to fragment sizes, currently
    setting up to hw constriants on periods bytes is not going to work
    correctly as we can endup with periods sizes aligned to 32 bytes however
    not aligned to fragment size.
    
    Update the constriants to use fragment size, and also set at step of
    10ms for period size to accommodate DSP requirements of 10ms latency.
    
    Fixes: 2a9e92d371db ("ASoC: qdsp6: q6asm: Add q6asm dai driver")
    Cc: [email protected]
    Signed-off-by: Srinivas Kandagatla <[email protected]>
    Tested-by: Alexey Klimov <[email protected]> # RB5, RB3
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: stm32: sai: fix clk prepare imbalance on probe failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Jan 5 09:06:13 2026 -0500

    ASoC: stm32: sai: fix clk prepare imbalance on probe failure
    
    [ Upstream commit 312ec2f0d9d1a5656f76d770bbf1d967e9289aa7 ]
    
    Make sure to unprepare the parent clock also on probe failures (e.g.
    probe deferral).
    
    Fixes: a14bf98c045b ("ASoC: stm32: sai: fix possible circular locking")
    Cc: [email protected]      # 5.5
    Cc: Olivier Moysan <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: olivier moysan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: stm32: sai: fix device leak on probe [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Nov 24 11:49:05 2025 +0100

    ASoC: stm32: sai: fix device leak on probe
    
    commit e26ff429eaf10c4ef1bc3dabd9bf27eb54b7e1f4 upstream.
    
    Make sure to drop the reference taken when looking up the sync provider
    device and its driver data during DAI probe on probe failures and on
    unbind.
    
    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: 7dd0d835582f ("ASoC: stm32: sai: simplify sync modes management")
    Fixes: 1c3816a19487 ("ASoC: stm32: sai: add missing put_device()")
    Cc: [email protected]      # 4.16: 1c3816a19487
    Cc: olivier moysan <[email protected]>
    Cc: Wen Yang <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: olivier moysan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: stm32: sai: fix OF node leak on probe [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Jan 5 09:51:35 2026 -0500

    ASoC: stm32: sai: fix OF node leak on probe
    
    [ Upstream commit 23261f0de09427367e99f39f588e31e2856a690e ]
    
    The reference taken to the sync provider OF node when probing the
    platform device is currently only dropped if the set_sync() callback
    fails during DAI probe.
    
    Make sure to drop the reference on platform probe failures (e.g. probe
    deferral) and on driver unbind.
    
    This also avoids a potential use-after-free in case the DAI is ever
    reprobed without first rebinding the platform driver.
    
    Fixes: 5914d285f6b7 ("ASoC: stm32: sai: Add synchronization support")
    Fixes: d4180b4c02e7 ("ASoC: stm32: sai: fix set_sync service")
    Cc: Olivier Moysan <[email protected]>
    Cc: [email protected]      # 4.16: d4180b4c02e7
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: olivier moysan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: stm32: sai: Use the devm_clk_get_optional() helper [+ + +]
Author: Christophe JAILLET <[email protected]>
Date:   Mon Jan 5 09:06:12 2026 -0500

    ASoC: stm32: sai: Use the devm_clk_get_optional() helper
    
    [ Upstream commit 374628fb668e50b42fe81f2a63af616182415bcd ]
    
    Use devm_clk_get_optional() instead of hand writing it.
    This saves some LoC and improves the semantic.
    
    Signed-off-by: Christophe JAILLET <[email protected]>
    Link: https://lore.kernel.org/r/f7987f18dadf77bfa09969fd4c82d5a0f4e4e3b7.1684594838.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Mark Brown <[email protected]>
    Stable-dep-of: 312ec2f0d9d1 ("ASoC: stm32: sai: fix clk prepare imbalance on probe failure")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: stm: stm32_sai_sub: Convert to platform remove callback returning void [+ + +]
Author: Uwe Kleine-König <[email protected]>
Date:   Mon Jan 5 09:51:31 2026 -0500

    ASoC: stm: stm32_sai_sub: Convert to platform remove callback returning void
    
    [ Upstream commit a3bd37e2e2bce4fb1757a940fa985d556662ba80 ]
    
    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 (mostly) ignored
    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.
    
    Trivially convert this driver from always returning zero in the remove
    callback to the void returning variant.
    
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Acked-by: Takashi Iwai <[email protected]>
    Acked-by: Nicolas Ferre <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Stable-dep-of: 23261f0de094 ("ASoC: stm32: sai: fix OF node leak on probe")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
backlight: led-bl: Add devlink to supplier LEDs [+ + +]
Author: Luca Ceresoli <[email protected]>
Date:   Mon May 19 22:19:11 2025 +0200

    backlight: led-bl: Add devlink to supplier LEDs
    
    [ Upstream commit 9341d6698f4cfdfc374fb6944158d111ebe16a9d ]
    
    LED Backlight is a consumer of one or multiple LED class devices, but
    devlink is currently unable to create correct supplier-producer links when
    the supplier is a class device. It creates instead a link where the
    supplier is the parent of the expected device.
    
    One consequence is that removal order is not correctly enforced.
    
    Issues happen for example with the following sections in a device tree
    overlay:
    
        // An LED driver chip
        pca9632@62 {
            compatible = "nxp,pca9632";
            reg = <0x62>;
    
            // ...
    
            addon_led_pwm: led-pwm@3 {
                reg = <3>;
                label = "addon:led:pwm";
            };
        };
    
        backlight-addon {
            compatible = "led-backlight";
            leds = <&addon_led_pwm>;
            brightness-levels = <255>;
            default-brightness-level = <255>;
        };
    
    In this example, the devlink should be created between the backlight-addon
    (consumer) and the pca9632@62 (supplier). Instead it is created between the
    backlight-addon (consumer) and the parent of the pca9632@62, which is
    typically the I2C bus adapter.
    
    On removal of the above overlay, the LED driver can be removed before the
    backlight device, resulting in:
    
        Unable to handle kernel NULL pointer dereference at virtual address 0000000000000010
        ...
        Call trace:
         led_put+0xe0/0x140
         devm_led_release+0x6c/0x98
    
    Another way to reproduce the bug without any device tree overlays is
    unbinding the LED class device (pca9632@62) before unbinding the consumer
    (backlight-addon):
    
      echo 11-0062 >/sys/bus/i2c/drivers/leds-pca963x/unbind
      echo ...backlight-dock >/sys/bus/platform/drivers/led-backlight/unbind
    
    Fix by adding a devlink between the consuming led-backlight device and the
    supplying LED device, as other drivers and subsystems do as well.
    
    Fixes: ae232e45acf9 ("backlight: add led-backlight driver")
    Signed-off-by: Luca Ceresoli <[email protected]>
    Reviewed-by: Daniel Thompson (RISCstar) <[email protected]>
    Reviewed-by: Herve Codina <[email protected]>
    Tested-by: Alexander Sverdlin <[email protected]>
    Link: https://patch.msgid.link/20250519-led-backlight-add-devlink-to-supplier-class-device-v6-1-845224aeb2ce@bootlin.com
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

backlight: led_bl: Take led_access lock when required [+ + +]
Author: Mans Rullgard <[email protected]>
Date:   Mon Jun 19 17:02:49 2023 +0100

    backlight: led_bl: Take led_access lock when required
    
    [ Upstream commit a33677b9211b6c328ad359b072043af94f7c9592 ]
    
    The led_access lock must be held when calling led_sysfs_enable() and
    led_sysfs_disable().  This fixes warnings such as this:
    
    [    2.432495] ------------[ cut here ]------------
    [    2.437316] WARNING: CPU: 0 PID: 22 at drivers/leds/led-core.c:349 led_sysfs_disable+0x54/0x58
    [    2.446105] Modules linked in:
    [    2.449218] CPU: 0 PID: 22 Comm: kworker/u2:1 Not tainted 6.3.8+ #1
    [    2.456268] Hardware name: Generic AM3517 (Flattened Device Tree)
    [    2.462402] Workqueue: events_unbound deferred_probe_work_func
    [    2.468353]  unwind_backtrace from show_stack+0x10/0x14
    [    2.473632]  show_stack from dump_stack_lvl+0x24/0x2c
    [    2.478759]  dump_stack_lvl from __warn+0x9c/0xc4
    [    2.483551]  __warn from warn_slowpath_fmt+0x64/0xc0
    [    2.488586]  warn_slowpath_fmt from led_sysfs_disable+0x54/0x58
    [    2.494567]  led_sysfs_disable from led_bl_probe+0x20c/0x3b0
    [    2.500305]  led_bl_probe from platform_probe+0x5c/0xb8
    [    2.505615]  platform_probe from really_probe+0xc8/0x2a0
    [    2.510986]  really_probe from __driver_probe_device+0x88/0x19c
    [    2.516967]  __driver_probe_device from driver_probe_device+0x30/0xcc
    [    2.523498]  driver_probe_device from __device_attach_driver+0x94/0xc4
    [    2.530090]  __device_attach_driver from bus_for_each_drv+0x80/0xcc
    [    2.536437]  bus_for_each_drv from __device_attach+0xf8/0x19c
    [    2.542236]  __device_attach from bus_probe_device+0x8c/0x90
    [    2.547973]  bus_probe_device from deferred_probe_work_func+0x80/0xb0
    [    2.554504]  deferred_probe_work_func from process_one_work+0x228/0x4c0
    [    2.561187]  process_one_work from worker_thread+0x1fc/0x4d0
    [    2.566925]  worker_thread from kthread+0xb4/0xd0
    [    2.571685]  kthread from ret_from_fork+0x14/0x2c
    [    2.576446] Exception stack(0xd0079fb0 to 0xd0079ff8)
    [    2.581573] 9fa0:                                     00000000 00000000 00000000 00000000
    [    2.589813] 9fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    [    2.598052] 9fe0: 00000000 00000000 00000000 00000000 00000013 00000000
    [    2.604888] ---[ end trace 0000000000000000 ]---
    
    Signed-off-by: Mans Rullgard <[email protected]>
    Reviewed-by: Daniel Thompson <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Stable-dep-of: 9341d6698f4c ("backlight: led-bl: Add devlink to supplier LEDs")
    Signed-off-by: Sasha Levin <[email protected]>

backlight: lp855x: Fix lp855x.h kernel-doc warnings [+ + +]
Author: Randy Dunlap <[email protected]>
Date:   Mon Nov 10 22:09:16 2025 -0800

    backlight: lp855x: Fix lp855x.h kernel-doc warnings
    
    [ Upstream commit 2d45db63260c6ae3cf007361e04a1c41bd265084 ]
    
    Add a missing struct short description and a missing leading " *" to
    lp855x.h to avoid kernel-doc warnings:
    
    Warning: include/linux/platform_data/lp855x.h:126 missing initial short
     description on line:
     * struct lp855x_platform_data
    Warning: include/linux/platform_data/lp855x.h:131 bad line:
       Only valid when mode is PWM_BASED.
    
    Fixes: 7be865ab8634 ("backlight: new backlight driver for LP855x devices")
    Signed-off-by: Randy Dunlap <[email protected]>
    Reviewed-by: Daniel Thompson (RISCstar) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bfs: Reconstruct file type when loading from disk [+ + +]
Author: Tetsuo Handa <[email protected]>
Date:   Thu Oct 23 22:25:49 2025 +0900

    bfs: Reconstruct file type when loading from disk
    
    [ Upstream commit 34ab4c75588c07cca12884f2bf6b0347c7a13872 ]
    
    syzbot is reporting that S_IFMT bits of inode->i_mode can become bogus when
    the S_IFMT bits of the 32bits "mode" field loaded from disk are corrupted
    or when the 32bits "attributes" field loaded from disk are corrupted.
    
    A documentation says that BFS uses only lower 9 bits of the "mode" field.
    But I can't find an explicit explanation that the unused upper 23 bits
    (especially, the S_IFMT bits) are initialized with 0.
    
    Therefore, ignore the S_IFMT bits of the "mode" field loaded from disk.
    Also, verify that the value of the "attributes" field loaded from disk is
    either BFS_VREG or BFS_VDIR (because BFS supports only regular files and
    the root directory).
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=895c23f6917da440ed0d
    Signed-off-by: Tetsuo Handa <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Tigran Aivazian <[email protected]>
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
blk-mq: Abort suspend when wakeup events are pending [+ + +]
Author: Cong Zhang <[email protected]>
Date:   Wed Dec 3 11:34:21 2025 +0800

    blk-mq: Abort suspend when wakeup events are pending
    
    [ Upstream commit c196bf43d706592d8801a7513603765080e495fb ]
    
    During system suspend, wakeup capable IRQs for block device can be
    delayed, which can cause blk_mq_hctx_notify_offline() to hang
    indefinitely while waiting for pending request to complete.
    Skip the request waiting loop and abort suspend when wakeup events are
    pending to prevent the deadlock.
    
    Fixes: bf0beec0607d ("blk-mq: drain I/O when all CPUs in a hctx are offline")
    Signed-off-by: Cong Zhang <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

blk-mq: add helper for checking if one CPU is mapped to specified hctx [+ + +]
Author: Ming Lei <[email protected]>
Date:   Fri May 17 10:05:14 2024 +0800

    blk-mq: add helper for checking if one CPU is mapped to specified hctx
    
    commit 7b815817aa58d2e2101feb2fcf64c60cae0b2695 upstream.
    
    Commit a46c27026da1 ("blk-mq: don't schedule block kworker on isolated CPUs")
    rules out isolated CPUs from hctx->cpumask, and hctx->cpumask should only be
    used for scheduling kworker.
    
    Add helper blk_mq_cpu_mapped_to_hctx() and apply it into cpuhp handlers.
    
    This patch avoids to forget clearing INACTIVE of hctx state in case that one
    isolated CPU becomes online, and fixes hang issue when allocating request
    from this hctx's tags.
    
    Cc: Raju Cheerla <[email protected]>
    Fixes: a46c27026da1 ("blk-mq: don't schedule block kworker on isolated CPUs")
    Signed-off-by: Ming Lei <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Raju Cheerla <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

blk-mq: don't schedule block kworker on isolated CPUs [+ + +]
Author: Ming Lei <[email protected]>
Date:   Fri Mar 22 10:12:44 2024 +0800

    blk-mq: don't schedule block kworker on isolated CPUs
    
    [ Upstream commit a46c27026da10a126dd870f7b65380010bd20db5 ]
    
    Kernel parameter of `isolcpus=` or 'nohz_full=' are used to isolate CPUs
    for specific task, and it isn't expected to let block IO disturb these CPUs.
    blk-mq kworker shouldn't be scheduled on isolated CPUs. Also if isolated
    CPUs is run for blk-mq kworker, long block IO latency can be caused.
    
    Kernel workqueue only respects CPU isolation for WQ_UNBOUND, for bound
    WQ, the responsibility is on user because CPU is specified as WQ API
    parameter, such as mod_delayed_work_on(cpu), queue_delayed_work_on(cpu)
    and queue_work_on(cpu).
    
    So not run blk-mq kworker on isolated CPUs by removing isolated CPUs
    from hctx->cpumask. Meantime use queue map to check if all CPUs in this
    hw queue are offline instead of hctx->cpumask, this way can avoid any
    cost in fast IO code path, and is safe since hctx->cpumask are only
    used in the two cases.
    
    Cc: Tim Chen <[email protected]>
    Cc: Juri Lelli <[email protected]>
    Cc: Andrew Theurer <[email protected]>
    Cc: Joe Mario <[email protected]>
    Cc: Sebastian Jug <[email protected]>
    Cc: Frederic Weisbecker <[email protected]>
    Cc: Bart Van Assche <[email protected]>
    Cc: Tejun Heo <[email protected]>
    Tesed-by: Joe Mario <[email protected]>
    Signed-off-by: Ming Lei <[email protected]>
    Reviewed-by: Ewan D. Milne <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Stable-dep-of: 10845a105bbc ("blk-mq: skip CPU offline notify on unmapped hctx")
    Signed-off-by: Sasha Levin <[email protected]>

blk-mq: setup queue ->tag_set before initializing hctx [+ + +]
Author: Ming Lei <[email protected]>
Date:   Mon Oct 14 08:51:15 2024 +0800

    blk-mq: setup queue ->tag_set before initializing hctx
    
    commit c25c0c9035bb8b28c844dfddeda7b8bdbcfcae95 upstream.
    
    Commit 7b815817aa58 ("blk-mq: add helper for checking if one CPU is mapped to specified hctx")
    needs to check queue mapping via tag set in hctx's cpuhp handler.
    
    However, q->tag_set may not be setup yet when the cpuhp handler is
    enabled, then kernel oops is triggered.
    
    Fix the issue by setup queue tag_set before initializing hctx.
    
    Cc: [email protected]
    Reported-and-tested-by: Rick Koch <[email protected]>
    Closes: https://lore.kernel.org/linux-block/CANa58eeNDozLaBHKPLxSAhEy__FPfJT_F71W=sEQw49UCrC9PQ@mail.gmail.com
    Fixes: 7b815817aa58 ("blk-mq: add helper for checking if one CPU is mapped to specified hctx")
    Signed-off-by: Ming Lei <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Reviewed-by: John Garry <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

blk-mq: skip CPU offline notify on unmapped hctx [+ + +]
Author: Cong Zhang <[email protected]>
Date:   Tue Dec 30 17:17:05 2025 +0800

    blk-mq: skip CPU offline notify on unmapped hctx
    
    [ Upstream commit 10845a105bbcb030647a729f1716c2309da71d33 ]
    
    If an hctx has no software ctx mapped, blk_mq_map_swqueue() never
    allocates tags and leaves hctx->tags NULL. The CPU hotplug offline
    notifier can still run for that hctx, return early since hctx cannot
    hold any requests.
    
    Signed-off-by: Cong Zhang <[email protected]>
    Fixes: bf0beec0607d ("blk-mq: drain I/O when all CPUs in a hctx are offline")
    Reviewed-by: Ming Lei <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
block: fix comment for op_is_zone_mgmt() to include RESET_ALL [+ + +]
Author: shechenglong <[email protected]>
Date:   Wed Dec 3 23:17:49 2025 +0800

    block: fix comment for op_is_zone_mgmt() to include RESET_ALL
    
    [ Upstream commit 8a32282175c964eb15638e8dfe199fc13c060f67 ]
    
    REQ_OP_ZONE_RESET_ALL is a zone management request, and op_is_zone_mgmt()
    has returned true for it.
    
    Update the comment to remove the misleading exception note so
    the documentation matches the implementation.
    
    Fixes: 12a1c9353c47 ("block: fix op_is_zone_mgmt() to handle REQ_OP_ZONE_RESET_ALL")
    Signed-off-by: shechenglong <[email protected]>
    Reviewed-by: Damien Le Moal <[email protected]>
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

block: rate-limit capacity change info log [+ + +]
Author: Li Chen <[email protected]>
Date:   Mon Nov 17 13:34:07 2025 +0800

    block: rate-limit capacity change info log
    
    commit 3179a5f7f86bcc3acd5d6fb2a29f891ef5615852 upstream.
    
    loop devices under heavy stress-ng loop streessor can trigger many
    capacity change events in a short time. Each event prints an info
    message from set_capacity_and_notify(), flooding the console and
    contributing to soft lockups on slow consoles.
    
    Switch the printk in set_capacity_and_notify() to
    pr_info_ratelimited() so frequent capacity changes do not spam
    the log while still reporting occasional changes.
    
    Cc: [email protected]
    Signed-off-by: Li Chen <[email protected]>
    Reviewed-by: Chaitanya Kulkarni <[email protected]>
    Reviewed-by: Bart Van Assche <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

block: rnbd-clt: Fix leaked ID in init_dev() [+ + +]
Author: Thomas Fourier <[email protected]>
Date:   Wed Dec 17 10:36:48 2025 +0100

    block: rnbd-clt: Fix leaked ID in init_dev()
    
    [ Upstream commit c9b5645fd8ca10f310e41b07540f98e6a9720f40 ]
    
    If kstrdup() fails in init_dev(), then the newly allocated ID is lost.
    
    Fixes: 64e8a6ece1a5 ("block/rnbd-clt: Dynamically alloc buffer for pathname & blk_symlink_name")
    Signed-off-by: Thomas Fourier <[email protected]>
    Acked-by: Jack Wang <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

block: rnbd-clt: Fix signedness bug in init_dev() [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Sat Dec 20 11:46:10 2025 +0300

    block: rnbd-clt: Fix signedness bug in init_dev()
    
    [ Upstream commit 1ddb815fdfd45613c32e9bd1f7137428f298e541 ]
    
    The "dev->clt_device_id" variable is set using ida_alloc_max() which
    returns an int and in particular it returns negative error codes.
    Change the type from u32 to int to fix the error checking.
    
    Fixes: c9b5645fd8ca ("block: rnbd-clt: Fix leaked ID in init_dev()")
    Signed-off-by: Dan Carpenter <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Bluetooth: btusb: Add new VID/PID 13d3/3533 for RTL8821CE [+ + +]
Author: Gongwei Li <[email protected]>
Date:   Wed Nov 19 15:33:38 2025 +0800

    Bluetooth: btusb: Add new VID/PID 13d3/3533 for RTL8821CE
    
    [ Upstream commit 525459da4bd62a81142fea3f3d52188ceb4d8907 ]
    
    Add VID 13d3 & PID 3533 for Realtek RTL8821CE USB Bluetooth chip.
    
    The information in /sys/kernel/debug/usb/devices about the Bluetooth
    device is listed as the below.
    
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=12   MxCh= 0
    D:  Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=13d3 ProdID=3533 Rev= 1.10
    S:  Manufacturer=Realtek
    S:  Product=Bluetooth Radio
    S:  SerialNumber=00e04c000001
    C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=1ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
    E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
    E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
    I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
    I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
    I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
    I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
    
    Signed-off-by: Gongwei Li <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: btusb: revert use of devm_kzalloc in btusb [+ + +]
Author: Raphael Pinsonneault-Thibeault <[email protected]>
Date:   Wed Dec 10 11:02:28 2025 -0500

    Bluetooth: btusb: revert use of devm_kzalloc in btusb
    
    [ Upstream commit 252714f1e8bdd542025b16321c790458014d6880 ]
    
    This reverts commit 98921dbd00c4e ("Bluetooth: Use devm_kzalloc in
    btusb.c file").
    
    In btusb_probe(), we use devm_kzalloc() to allocate the btusb data. This
    ties the lifetime of all the btusb data to the binding of a driver to
    one interface, INTF. In a driver that binds to other interfaces, ISOC
    and DIAG, this is an accident waiting to happen.
    
    The issue is revealed in btusb_disconnect(), where calling
    usb_driver_release_interface(&btusb_driver, data->intf) will have devm
    free the data that is also being used by the other interfaces of the
    driver that may not be released yet.
    
    To fix this, revert the use of devm and go back to freeing memory
    explicitly.
    
    Fixes: 98921dbd00c4e ("Bluetooth: Use devm_kzalloc in btusb.c file")
    Signed-off-by: Raphael Pinsonneault-Thibeault <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf, arm64: Do not audit capability check in do_jit() [+ + +]
Author: Ondrej Mosnacek <[email protected]>
Date:   Thu Dec 4 13:59:16 2025 +0100

    bpf, arm64: Do not audit capability check in do_jit()
    
    [ Upstream commit 189e5deb944a6f9c7992355d60bffd8ec2e54a9c ]
    
    Analogically to the x86 commit 881a9c9cb785 ("bpf: Do not audit
    capability check in do_jit()"), change the capable() call to
    ns_capable_noaudit() in order to avoid spurious SELinux denials in audit
    log.
    
    The commit log from that commit applies here as well:
    """
    The failure of this check only results in a security mitigation being
    applied, slightly affecting performance of the compiled BPF program. It
    doesn't result in a failed syscall, an thus auditing a failed LSM
    permission check for it is unwanted. For example with SELinux, it causes
    a denial to be reported for confined processes running as root, which
    tends to be flagged as a problem to be fixed in the policy. Yet
    dontauditing or allowing CAP_SYS_ADMIN to the domain may not be
    desirable, as it would allow/silence also other checks - either going
    against the principle of least privilege or making debugging potentially
    harder.
    
    Fix it by changing it from capable() to ns_capable_noaudit(), which
    instructs the LSMs to not audit the resulting denials.
    """
    
    Fixes: f300769ead03 ("arm64: bpf: Only mitigate cBPF programs loaded by unprivileged users")
    Signed-off-by: Ondrej Mosnacek <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf: Check skb->transport_header is set in bpf_skb_check_mtu [+ + +]
Author: Martin KaFai Lau <[email protected]>
Date:   Wed Nov 12 15:23:30 2025 -0800

    bpf: Check skb->transport_header is set in bpf_skb_check_mtu
    
    [ Upstream commit d946f3c98328171fa50ddb908593cf833587f725 ]
    
    The bpf_skb_check_mtu helper needs to use skb->transport_header when
    the BPF_MTU_CHK_SEGS flag is used:
    
            bpf_skb_check_mtu(skb, ifindex, &mtu_len, 0, BPF_MTU_CHK_SEGS)
    
    The transport_header is not always set. There is a WARN_ON_ONCE
    report when CONFIG_DEBUG_NET is enabled + skb->gso_size is set +
    bpf_prog_test_run is used:
    
    WARNING: CPU: 1 PID: 2216 at ./include/linux/skbuff.h:3071
     skb_gso_validate_network_len
     bpf_skb_check_mtu
     bpf_prog_3920e25740a41171_tc_chk_segs_flag # A test in the next patch
     bpf_test_run
     bpf_prog_test_run_skb
    
    For a normal ingress skb (not test_run), skb_reset_transport_header
    is performed but there is plan to avoid setting it as described in
    commit 2170a1f09148 ("net: no longer reset transport_header in __netif_receive_skb_core()").
    
    This patch fixes the bpf helper by checking
    skb_transport_header_was_set(). The check is done just before
    skb->transport_header is used, to avoid breaking the existing bpf prog.
    The WARN_ON_ONCE is limited to bpf_prog_test_run, so targeting bpf-next.
    
    Fixes: 34b2021cc616 ("bpf: Add BPF-helper for MTU checking")
    Cc: Jesper Dangaard Brouer <[email protected]>
    Reported-by: Kaiyan Mei <[email protected]>
    Reported-by: Yinhao Hu <[email protected]>
    Signed-off-by: Martin KaFai Lau <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Fix invalid prog->stats access when update_effective_progs fails [+ + +]
Author: Pu Lehui <[email protected]>
Date:   Sat Nov 15 10:23:43 2025 +0000

    bpf: Fix invalid prog->stats access when update_effective_progs fails
    
    [ Upstream commit 7dc211c1159d991db609bdf4b0fb9033c04adcbc ]
    
    Syzkaller triggers an invalid memory access issue following fault
    injection in update_effective_progs. The issue can be described as
    follows:
    
    __cgroup_bpf_detach
      update_effective_progs
        compute_effective_progs
          bpf_prog_array_alloc <-- fault inject
      purge_effective_progs
        /* change to dummy_bpf_prog */
        array->items[index] = &dummy_bpf_prog.prog
    
    ---softirq start---
    __do_softirq
      ...
        __cgroup_bpf_run_filter_skb
          __bpf_prog_run_save_cb
            bpf_prog_run
              stats = this_cpu_ptr(prog->stats)
              /* invalid memory access */
              flags = u64_stats_update_begin_irqsave(&stats->syncp)
    ---softirq end---
    
      static_branch_dec(&cgroup_bpf_enabled_key[atype])
    
    The reason is that fault injection caused update_effective_progs to fail
    and then changed the original prog into dummy_bpf_prog.prog in
    purge_effective_progs. Then a softirq came, and accessing the members of
    dummy_bpf_prog.prog in the softirq triggers invalid mem access.
    
    To fix it, skip updating stats when stats is NULL.
    
    Fixes: 492ecee892c2 ("bpf: enable program stats")
    Signed-off-by: Pu Lehui <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Improve program stats run-time calculation [+ + +]
Author: Jose Fernandez <[email protected]>
Date:   Mon Apr 1 21:40:10 2024 -0600

    bpf: Improve program stats run-time calculation
    
    [ Upstream commit ce09cbdd988887662546a1175bcfdfc6c8fdd150 ]
    
    This patch improves the run-time calculation for program stats by
    capturing the duration as soon as possible after the program returns.
    
    Previously, the duration included u64_stats_t operations. While the
    instrumentation overhead is part of the total time spent when stats are
    enabled, distinguishing between the program's native execution time and
    the time spent due to instrumentation is crucial for accurate
    performance analysis.
    
    By making this change, the patch facilitates more precise optimization
    of BPF programs, enabling users to understand their performance in
    environments without stats enabled.
    
    I used a virtualized environment to measure the run-time over one minute
    for a basic raw_tracepoint/sys_enter program, which just increments a
    local counter. Although the virtualization introduced some performance
    degradation that could affect the results, I observed approximately a
    16% decrease in average run-time reported by stats with this change
    (310 -> 260 nsec).
    
    Signed-off-by: Jose Fernandez <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Acked-by: Daniel Borkmann <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Stable-dep-of: 7dc211c1159d ("bpf: Fix invalid prog->stats access when update_effective_progs fails")
    Signed-off-by: Sasha Levin <[email protected]>

 
broadcom: b44: prevent uninitialized value usage [+ + +]
Author: Alexey Simakov <[email protected]>
Date:   Fri Dec 5 18:58:16 2025 +0300

    broadcom: b44: prevent uninitialized value usage
    
    [ Upstream commit 50b3db3e11864cb4e18ff099cfb38e11e7f87a68 ]
    
    On execution path with raised B44_FLAG_EXTERNAL_PHY, b44_readphy()
    leaves bmcr value uninitialized and it is used later in the code.
    
    Add check of this flag at the beginning of the b44_nway_reset() and
    exit early of the function with restarting autonegotiation if an
    external PHY is used.
    
    Fixes: 753f492093da ("[B44]: port to native ssb support")
    Reviewed-by: Jonas Gorski <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Signed-off-by: Alexey Simakov <[email protected]>
    Reviewed-by: Michael Chan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
btrfs: do not skip logging new dentries when logging a new name [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Wed Dec 3 17:02:00 2025 +0000

    btrfs: do not skip logging new dentries when logging a new name
    
    [ Upstream commit 5630f7557de61264ccb4f031d4734a1a97eaed16 ]
    
    When we are logging a directory and the log context indicates that we
    are logging a new name for some other file (that is or was inside that
    directory), we skip logging the inodes for new dentries in the directory.
    
    This is ok most of the time, but if after the rename or link operation
    that triggered the logging of that directory, we have an explicit fsync
    of that directory without the directory inode being evicted and reloaded,
    we end up never logging the inodes for the new dentries that we found
    during the new name logging, as the next directory fsync will only process
    dentries that were added after the last time we logged the directory (we
    are doing an incremental directory logging).
    
    So make sure we always log new dentries for a directory even if we are
    in a context of logging a new name.
    
    We started skipping logging inodes for new dentries as of commit
    c48792c6ee7a ("btrfs: do not log new dentries when logging that a new name
    exists") and it was fine back then, because when logging a directory we
    always iterated over all the directory entries (for leaves changed in the
    current transaction) so a subsequent fsync would always log anything that
    was previously skipped while logging a directory when logging a new name
    (with btrfs_log_new_name()). But later support for incrementally logging
    a directory was added in commit dc2872247ec0 ("btrfs: keep track of the
    last logged keys when logging a directory"), to avoid checking all dir
    items every time we log a directory, so the check to skip dentry logging
    added in the first commit should have been removed when the incremental
    support for logging a directory was added.
    
    A test case for fstests will follow soon.
    
    Reported-by: Vyacheslav Kovalevsky <[email protected]>
    Link: https://lore.kernel.org/linux-btrfs/[email protected]/
    Fixes: dc2872247ec0 ("btrfs: keep track of the last logged keys when logging a directory")
    Reviewed-by: Boris Burkov <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

btrfs: don't log conflicting inode if it's a dir moved in the current transaction [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Wed Dec 31 11:11:55 2025 -0500

    btrfs: don't log conflicting inode if it's a dir moved in the current transaction
    
    [ Upstream commit 266273eaf4d99475f1ae57f687b3e42bc71ec6f0 ]
    
    We can't log a conflicting inode if it's a directory and it was moved
    from one parent directory to another parent directory in the current
    transaction, as this can result an attempt to have a directory with
    two hard links during log replay, one for the old parent directory and
    another for the new parent directory.
    
    The following scenario triggers that issue:
    
    1) We have directories "dir1" and "dir2" created in a past transaction.
       Directory "dir1" has inode A as its parent directory;
    
    2) We move "dir1" to some other directory;
    
    3) We create a file with the name "dir1" in directory inode A;
    
    4) We fsync the new file. This results in logging the inode of the new file
       and the inode for the directory "dir1" that was previously moved in the
       current transaction. So the log tree has the INODE_REF item for the
       new location of "dir1";
    
    5) We move the new file to some other directory. This results in updating
       the log tree to included the new INODE_REF for the new location of the
       file and removes the INODE_REF for the old location. This happens
       during the rename when we call btrfs_log_new_name();
    
    6) We fsync the file, and that persists the log tree changes done in the
       previous step (btrfs_log_new_name() only updates the log tree in
       memory);
    
    7) We have a power failure;
    
    8) Next time the fs is mounted, log replay happens and when processing
       the inode for directory "dir1" we find a new INODE_REF and add that
       link, but we don't remove the old link of the inode since we have
       not logged the old parent directory of the directory inode "dir1".
    
    As a result after log replay finishes when we trigger writeback of the
    subvolume tree's extent buffers, the tree check will detect that we have
    a directory a hard link count of 2 and we get a mount failure.
    The errors and stack traces reported in dmesg/syslog are like this:
    
       [ 3845.729764] BTRFS info (device dm-0): start tree-log replay
       [ 3845.730304] page: refcount:3 mapcount:0 mapping:000000005c8a3027 index:0x1d00 pfn:0x11510c
       [ 3845.731236] memcg:ffff9264c02f4e00
       [ 3845.731751] aops:btree_aops [btrfs] ino:1
       [ 3845.732300] flags: 0x17fffc00000400a(uptodate|private|writeback|node=0|zone=2|lastcpupid=0x1ffff)
       [ 3845.733346] raw: 017fffc00000400a 0000000000000000 dead000000000122 ffff9264d978aea8
       [ 3845.734265] raw: 0000000000001d00 ffff92650e6d4738 00000003ffffffff ffff9264c02f4e00
       [ 3845.735305] page dumped because: eb page dump
       [ 3845.735981] BTRFS critical (device dm-0): corrupt leaf: root=5 block=30408704 slot=6 ino=257, invalid nlink: has 2 expect no more than 1 for dir
       [ 3845.737786] BTRFS info (device dm-0): leaf 30408704 gen 10 total ptrs 17 free space 14881 owner 5
       [ 3845.737789] BTRFS info (device dm-0): refs 4 lock_owner 0 current 30701
       [ 3845.737792]       item 0 key (256 INODE_ITEM 0) itemoff 16123 itemsize 160
       [ 3845.737794]               inode generation 3 transid 9 size 16 nbytes 16384
       [ 3845.737795]               block group 0 mode 40755 links 1 uid 0 gid 0
       [ 3845.737797]               rdev 0 sequence 2 flags 0x0
       [ 3845.737798]               atime 1764259517.0
       [ 3845.737800]               ctime 1764259517.572889464
       [ 3845.737801]               mtime 1764259517.572889464
       [ 3845.737802]               otime 1764259517.0
       [ 3845.737803]       item 1 key (256 INODE_REF 256) itemoff 16111 itemsize 12
       [ 3845.737805]               index 0 name_len 2
       [ 3845.737807]       item 2 key (256 DIR_ITEM 2363071922) itemoff 16077 itemsize 34
       [ 3845.737808]               location key (257 1 0) type 2
       [ 3845.737810]               transid 9 data_len 0 name_len 4
       [ 3845.737811]       item 3 key (256 DIR_ITEM 2676584006) itemoff 16043 itemsize 34
       [ 3845.737813]               location key (258 1 0) type 2
       [ 3845.737814]               transid 9 data_len 0 name_len 4
       [ 3845.737815]       item 4 key (256 DIR_INDEX 2) itemoff 16009 itemsize 34
       [ 3845.737816]               location key (257 1 0) type 2
       [ 3845.737818]               transid 9 data_len 0 name_len 4
       [ 3845.737819]       item 5 key (256 DIR_INDEX 3) itemoff 15975 itemsize 34
       [ 3845.737820]               location key (258 1 0) type 2
       [ 3845.737821]               transid 9 data_len 0 name_len 4
       [ 3845.737822]       item 6 key (257 INODE_ITEM 0) itemoff 15815 itemsize 160
       [ 3845.737824]               inode generation 9 transid 10 size 6 nbytes 0
       [ 3845.737825]               block group 0 mode 40755 links 2 uid 0 gid 0
       [ 3845.737826]               rdev 0 sequence 1 flags 0x0
       [ 3845.737827]               atime 1764259517.572889464
       [ 3845.737828]               ctime 1764259517.572889464
       [ 3845.737830]               mtime 1764259517.572889464
       [ 3845.737831]               otime 1764259517.572889464
       [ 3845.737832]       item 7 key (257 INODE_REF 256) itemoff 15801 itemsize 14
       [ 3845.737833]               index 2 name_len 4
       [ 3845.737834]       item 8 key (257 INODE_REF 258) itemoff 15787 itemsize 14
       [ 3845.737836]               index 2 name_len 4
       [ 3845.737837]       item 9 key (257 DIR_ITEM 2507850652) itemoff 15754 itemsize 33
       [ 3845.737838]               location key (259 1 0) type 1
       [ 3845.737839]               transid 10 data_len 0 name_len 3
       [ 3845.737840]       item 10 key (257 DIR_INDEX 2) itemoff 15721 itemsize 33
       [ 3845.737842]               location key (259 1 0) type 1
       [ 3845.737843]               transid 10 data_len 0 name_len 3
       [ 3845.737844]       item 11 key (258 INODE_ITEM 0) itemoff 15561 itemsize 160
       [ 3845.737846]               inode generation 9 transid 10 size 8 nbytes 0
       [ 3845.737847]               block group 0 mode 40755 links 1 uid 0 gid 0
       [ 3845.737848]               rdev 0 sequence 1 flags 0x0
       [ 3845.737849]               atime 1764259517.572889464
       [ 3845.737850]               ctime 1764259517.572889464
       [ 3845.737851]               mtime 1764259517.572889464
       [ 3845.737852]               otime 1764259517.572889464
       [ 3845.737853]       item 12 key (258 INODE_REF 256) itemoff 15547 itemsize 14
       [ 3845.737855]               index 3 name_len 4
       [ 3845.737856]       item 13 key (258 DIR_ITEM 1843588421) itemoff 15513 itemsize 34
       [ 3845.737857]               location key (257 1 0) type 2
       [ 3845.737858]               transid 10 data_len 0 name_len 4
       [ 3845.737860]       item 14 key (258 DIR_INDEX 2) itemoff 15479 itemsize 34
       [ 3845.737861]               location key (257 1 0) type 2
       [ 3845.737862]               transid 10 data_len 0 name_len 4
       [ 3845.737863]       item 15 key (259 INODE_ITEM 0) itemoff 15319 itemsize 160
       [ 3845.737865]               inode generation 10 transid 10 size 0 nbytes 0
       [ 3845.737866]               block group 0 mode 100600 links 1 uid 0 gid 0
       [ 3845.737867]               rdev 0 sequence 2 flags 0x0
       [ 3845.737868]               atime 1764259517.580874966
       [ 3845.737869]               ctime 1764259517.586121869
       [ 3845.737870]               mtime 1764259517.580874966
       [ 3845.737872]               otime 1764259517.580874966
       [ 3845.737873]       item 16 key (259 INODE_REF 257) itemoff 15306 itemsize 13
       [ 3845.737874]               index 2 name_len 3
       [ 3845.737875] BTRFS error (device dm-0): block=30408704 write time tree block corruption detected
       [ 3845.739448] ------------[ cut here ]------------
       [ 3845.740092] WARNING: CPU: 5 PID: 30701 at fs/btrfs/disk-io.c:335 btree_csum_one_bio+0x25a/0x270 [btrfs]
       [ 3845.741439] Modules linked in: btrfs dm_flakey crc32c_cryptoapi (...)
       [ 3845.750626] CPU: 5 UID: 0 PID: 30701 Comm: mount Tainted: G        W           6.18.0-rc6-btrfs-next-218+ #1 PREEMPT(full)
       [ 3845.752414] Tainted: [W]=WARN
       [ 3845.752828] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.2-0-gea1b7a073390-prebuilt.qemu.org 04/01/2014
       [ 3845.754499] RIP: 0010:btree_csum_one_bio+0x25a/0x270 [btrfs]
       [ 3845.755460] Code: 31 f6 48 89 (...)
       [ 3845.758685] RSP: 0018:ffffa8d9c5677678 EFLAGS: 00010246
       [ 3845.759450] RAX: 0000000000000000 RBX: ffff92650e6d4738 RCX: 0000000000000000
       [ 3845.760309] RDX: 0000000000000000 RSI: ffffffff9aab45b9 RDI: ffff9264c4748000
       [ 3845.761239] RBP: ffff9264d4324000 R08: 0000000000000000 R09: ffffa8d9c5677468
       [ 3845.762607] R10: ffff926bdc1fffa8 R11: 0000000000000003 R12: ffffa8d9c5677680
       [ 3845.764099] R13: 0000000000004000 R14: ffff9264dd624000 R15: ffff9264d978aba8
       [ 3845.765094] FS:  00007f751fa5a840(0000) GS:ffff926c42a82000(0000) knlGS:0000000000000000
       [ 3845.766226] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
       [ 3845.766970] CR2: 0000558df1815380 CR3: 000000010ed88003 CR4: 0000000000370ef0
       [ 3845.768009] Call Trace:
       [ 3845.768392]  <TASK>
       [ 3845.768714]  btrfs_submit_bbio+0x6ee/0x7f0 [btrfs]
       [ 3845.769640]  ? write_one_eb+0x28e/0x340 [btrfs]
       [ 3845.770588]  btree_write_cache_pages+0x2f0/0x550 [btrfs]
       [ 3845.771286]  ? alloc_extent_state+0x19/0x100 [btrfs]
       [ 3845.771967]  ? merge_next_state+0x1a/0x90 [btrfs]
       [ 3845.772586]  ? set_extent_bit+0x233/0x8b0 [btrfs]
       [ 3845.773198]  ? xas_load+0x9/0xc0
       [ 3845.773589]  ? xas_find+0x14d/0x1a0
       [ 3845.773969]  do_writepages+0xc6/0x160
       [ 3845.774367]  filemap_fdatawrite_wbc+0x48/0x60
       [ 3845.775003]  __filemap_fdatawrite_range+0x5b/0x80
       [ 3845.775902]  btrfs_write_marked_extents+0x61/0x170 [btrfs]
       [ 3845.776707]  btrfs_write_and_wait_transaction+0x4e/0xc0 [btrfs]
       [ 3845.777379]  ? _raw_spin_unlock_irqrestore+0x23/0x40
       [ 3845.777923]  btrfs_commit_transaction+0x5ea/0xd20 [btrfs]
       [ 3845.778551]  ? _raw_spin_unlock+0x15/0x30
       [ 3845.778986]  ? release_extent_buffer+0x34/0x160 [btrfs]
       [ 3845.779659]  btrfs_recover_log_trees+0x7a3/0x7c0 [btrfs]
       [ 3845.780416]  ? __pfx_replay_one_buffer+0x10/0x10 [btrfs]
       [ 3845.781499]  open_ctree+0x10bb/0x15f0 [btrfs]
       [ 3845.782194]  btrfs_get_tree.cold+0xb/0x16c [btrfs]
       [ 3845.782764]  ? fscontext_read+0x15c/0x180
       [ 3845.783202]  ? rw_verify_area+0x50/0x180
       [ 3845.783667]  vfs_get_tree+0x25/0xd0
       [ 3845.784047]  vfs_cmd_create+0x59/0xe0
       [ 3845.784458]  __do_sys_fsconfig+0x4f6/0x6b0
       [ 3845.784914]  do_syscall_64+0x50/0x1220
       [ 3845.785340]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
       [ 3845.785980] RIP: 0033:0x7f751fc7f4aa
       [ 3845.786759] Code: 73 01 c3 48 (...)
       [ 3845.789951] RSP: 002b:00007ffcdba45dc8 EFLAGS: 00000246 ORIG_RAX: 00000000000001af
       [ 3845.791402] RAX: ffffffffffffffda RBX: 000055ccc8291c20 RCX: 00007f751fc7f4aa
       [ 3845.792688] RDX: 0000000000000000 RSI: 0000000000000006 RDI: 0000000000000003
       [ 3845.794308] RBP: 000055ccc8292120 R08: 0000000000000000 R09: 0000000000000000
       [ 3845.795829] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
       [ 3845.797183] R13: 00007f751fe11580 R14: 00007f751fe1326c R15: 00007f751fdf8a23
       [ 3845.798633]  </TASK>
       [ 3845.799067] ---[ end trace 0000000000000000 ]---
       [ 3845.800215] BTRFS: error (device dm-0) in btrfs_commit_transaction:2553: errno=-5 IO failure (Error while writing out transaction)
       [ 3845.801860] BTRFS warning (device dm-0 state E): Skipping commit of aborted transaction.
       [ 3845.802815] BTRFS error (device dm-0 state EA): Transaction aborted (error -5)
       [ 3845.803728] BTRFS: error (device dm-0 state EA) in cleanup_transaction:2036: errno=-5 IO failure
       [ 3845.805374] BTRFS: error (device dm-0 state EA) in btrfs_replay_log:2083: errno=-5 IO failure (Failed to recover log tree)
       [ 3845.807919] BTRFS error (device dm-0 state EA): open_ctree failed: -5
    
    Fix this by never logging a conflicting inode that is a directory and was
    moved in the current transaction (its last_unlink_trans equals the current
    transaction) and instead fallback to a transaction commit.
    
    A test case for fstests will follow soon.
    
    Reported-by: Vyacheslav Kovalevsky <[email protected]>
    Link: https://lore.kernel.org/linux-btrfs/[email protected]/
    CC: [email protected] # 6.1+
    Signed-off-by: Filipe Manana <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    [ wrapped inode parameter with BTRFS_I() ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: don't rewrite ret from inode_permission [+ + +]
Author: Josef Bacik <[email protected]>
Date:   Mon Dec 29 17:03:37 2025 -0500

    btrfs: don't rewrite ret from inode_permission
    
    [ Upstream commit 0185c2292c600993199bc6b1f342ad47a9e8c678 ]
    
    In our user safe ino resolve ioctl we'll just turn any ret into -EACCES
    from inode_permission().  This is redundant, and could potentially be
    wrong if we had an ENOMEM in the security layer or some such other
    error, so simply return the actual return value.
    
    Note: The patch was taken from v5 of fscrypt patchset
    (https://lore.kernel.org/linux-btrfs/[email protected]/)
    which was handled over time by various people: Omar Sandoval, Sweet Tea
    Dorminy, Josef Bacik.
    
    Fixes: 23d0b79dfaed ("btrfs: Add unprivileged version of ino_lookup ioctl")
    CC: [email protected] # 5.4+
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Signed-off-by: Josef Bacik <[email protected]>
    Signed-off-by: Daniel Vacek <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    [ add note ]
    Signed-off-by: David Sterba <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: fix memory leak of fs_devices in degraded seed device path [+ + +]
Author: Deepanshu Kartikey <[email protected]>
Date:   Wed Dec 10 18:58:07 2025 +0530

    btrfs: fix memory leak of fs_devices in degraded seed device path
    
    [ Upstream commit b57f2ddd28737db6ff0e9da8467f0ab9d707e997 ]
    
    In open_seed_devices(), when find_fsid() fails and we're in DEGRADED
    mode, a new fs_devices is allocated via alloc_fs_devices() but is never
    added to the seed_list before returning. This contrasts with the normal
    path where fs_devices is properly added via list_add().
    
    If any error occurs later in read_one_dev() or btrfs_read_chunk_tree(),
    the cleanup code iterates seed_list to free seed devices, but this
    orphaned fs_devices is never found and never freed, causing a memory
    leak. Any devices allocated via add_missing_dev() and attached to this
    fs_devices are also leaked.
    
    Fix this by adding the newly allocated fs_devices to seed_list in the
    degraded path, consistent with the normal path.
    
    Fixes: 5f37583569442 ("Btrfs: move the missing device to its own fs device list")
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=eadd98df8bceb15d7fed
    Tested-by: [email protected]
    Reviewed-by: Qu Wenruo <[email protected]>
    Signed-off-by: Deepanshu Kartikey <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

btrfs: scrub: always update btrfs_scrub_progress::last_physical [+ + +]
Author: Qu Wenruo <[email protected]>
Date:   Mon Nov 3 12:51:09 2025 +1030

    btrfs: scrub: always update btrfs_scrub_progress::last_physical
    
    [ Upstream commit 54df8b80cc63aa0f22c4590cad11542731ed43ff ]
    
    [BUG]
    When a scrub failed immediately without any byte scrubbed, the returned
    btrfs_scrub_progress::last_physical will always be 0, even if there is a
    non-zero @start passed into btrfs_scrub_dev() for resume cases.
    
    This will reset the progress and make later scrub resume start from the
    beginning.
    
    [CAUSE]
    The function btrfs_scrub_dev() accepts a @progress parameter to copy its
    updated progress to the caller, there are cases where we either don't
    touch progress::last_physical at all or copy 0 into last_physical:
    
    - last_physical not updated at all
      If some error happened before scrubbing any super block or chunk, we
      will not copy the progress, leaving the @last_physical untouched.
    
      E.g. failed to allocate @sctx, scrubbing a missing device or even
      there is already a running scrub and so on.
    
      All those cases won't touch @progress at all, resulting the
      last_physical untouched and will be left as 0 for most cases.
    
    - Error out before scrubbing any bytes
      In those case we allocated @sctx, and sctx->stat.last_physical is all
      zero (initialized by kvzalloc()).
      Unfortunately some critical errors happened during
      scrub_enumerate_chunks() or scrub_supers() before any stripe is really
      scrubbed.
    
      In that case although we will copy sctx->stat back to @progress, since
      no byte is really scrubbed, last_physical will be overwritten to 0.
    
    [FIX]
    Make sure the parameter @progress always has its @last_physical member
    updated to @start parameter inside btrfs_scrub_dev().
    
    At the very beginning of the function, set @progress->last_physical to
    @start, so that even if we error out without doing progress copying,
    last_physical is still at @start.
    
    Then after we got @sctx allocated, set sctx->stat.last_physical to
    @start, this will make sure even if we didn't get any byte scrubbed, at
    the progress copying stage the @last_physical is not left as zero.
    
    This should resolve the resume progress reset problem.
    
    Signed-off-by: Qu Wenruo <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
caif: fix integer underflow in cffrml_receive() [+ + +]
Author: Junrui Luo <[email protected]>
Date:   Thu Dec 4 21:30:47 2025 +0800

    caif: fix integer underflow in cffrml_receive()
    
    [ Upstream commit 8a11ff0948b5ad09b71896b7ccc850625f9878d1 ]
    
    The cffrml_receive() function extracts a length field from the packet
    header and, when FCS is disabled, subtracts 2 from this length without
    validating that len >= 2.
    
    If an attacker sends a malicious packet with a length field of 0 or 1
    to an interface with FCS disabled, the subtraction causes an integer
    underflow.
    
    This can lead to memory exhaustion and kernel instability, potential
    information disclosure if padding contains uninitialized kernel memory.
    
    Fix this by validating that len >= 2 before performing the subtraction.
    
    Reported-by: Yuhao Jiang <[email protected]>
    Reported-by: Junrui Luo <[email protected]>
    Fixes: b482cd2053e3 ("net-caif: add CAIF core protocol stack")
    Signed-off-by: Junrui Luo <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/SYBPR01MB7881511122BAFEA8212A1608AFA6A@SYBPR01MB7881.ausprd01.prod.outlook.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
can: gs_usb: gs_can_open(): fix error handling [+ + +]
Author: Marc Kleine-Budde <[email protected]>
Date:   Tue Dec 23 12:33:44 2025 -0500

    can: gs_usb: gs_can_open(): fix error handling
    
    [ Upstream commit 3e54d3b4a8437b6783d4145c86962a2aa51022f3 ]
    
    Commit 2603be9e8167 ("can: gs_usb: gs_can_open(): improve error handling")
    added missing error handling to the gs_can_open() function.
    
    The driver uses 2 USB anchors to track the allocated URBs: the TX URBs in
    struct gs_can::tx_submitted for each netdev and the RX URBs in struct
    gs_usb::rx_submitted for the USB device. gs_can_open() allocates the RX
    URBs, while TX URBs are allocated during gs_can_start_xmit().
    
    The cleanup in gs_can_open() kills all anchored dev->tx_submitted
    URBs (which is not necessary since the netdev is not yet registered), but
    misses the parent->rx_submitted URBs.
    
    Fix the problem by killing the rx_submitted instead of the tx_submitted.
    
    Fixes: 2603be9e8167 ("can: gs_usb: gs_can_open(): improve error handling")
    Cc: [email protected]
    Link: https://patch.msgid.link/20251210-gs_usb-fix-error-handling-v1-1-d6a5a03f10bb@pengutronix.de
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    [ adapted error handling for simpler code structure without timestamp stop functionality ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cfg80211: support RNR for EMA AP [+ + +]
Author: Aloka Dixit <[email protected]>
Date:   Thu Mar 23 04:38:00 2023 -0700

    cfg80211: support RNR for EMA AP
    
    [ Upstream commit dbbb27e183b1568d5a907ace1cd144b0709ea52a ]
    
    As per IEEE Std 802.11ax-2021, 11.1.3.8.3 Discovery of a nontransmitted
    BSSID profile, an EMA AP that transmits a Beacon frame carrying a partial
    list of nontransmitted BSSID profiles should include in the frame
    a Reduced Neighbor Report element carrying information for at least the
    nontransmitted BSSIDs that are not present in the Multiple BSSID element
    carried in that frame.
    Add new nested attribute NL80211_ATTR_EMA_RNR_ELEMS to support the above.
    Number of RNR elements must be more than or equal to the number of
    MBSSID elements. This attribute can be used only when EMA is enabled.
    Userspace is responsible for splitting the RNR into multiple elements such
    that each element excludes the non-transmitting profiles already included
    in the MBSSID element (%NL80211_ATTR_MBSSID_ELEMS) at the same index.
    Each EMA beacon will be generated by adding MBSSID and RNR elements
    at the same index. If the userspace provides more RNR elements than the
    number of MBSSID elements then these will be added in every EMA beacon.
    
    Signed-off-by: Aloka Dixit <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    [Johannes: validate elements]
    Signed-off-by: Johannes Berg <[email protected]>
    Stable-dep-of: a519be2f5d95 ("wifi: mac80211: do not use old MBSSID elements")
    Signed-off-by: Sasha Levin <[email protected]>

cfg80211: Update Transition Disable policy during port authorization [+ + +]
Author: Vinayak Yadawad <[email protected]>
Date:   Wed Sep 7 18:14:48 2022 +0530

    cfg80211: Update Transition Disable policy during port authorization
    
    [ Upstream commit 0ff57171d6d225558c81a69439d5323e35b40549 ]
    
    In case of 4way handshake offload, transition disable policy
    updated by the AP during EAPOL 3/4 is not updated to the upper layer.
    This results in mismatch between transition disable policy
    between the upper layer and the driver. This patch addresses this
    issue by updating transition disable policy as part of port
    authorization indication.
    
    Signed-off-by: Vinayak Yadawad <[email protected]>
    Signed-off-by: Johannes Berg <[email protected]>
    Stable-dep-of: a519be2f5d95 ("wifi: mac80211: do not use old MBSSID elements")
    Signed-off-by: Sasha Levin <[email protected]>

 
char: applicom: fix NULL pointer dereference in ac_ioctl [+ + +]
Author: Tianchu Chen <[email protected]>
Date:   Fri Nov 28 15:53:23 2025 +0800

    char: applicom: fix NULL pointer dereference in ac_ioctl
    
    commit 82d12088c297fa1cef670e1718b3d24f414c23f7 upstream.
    
    Discovered by Atuin - Automated Vulnerability Discovery Engine.
    
    In ac_ioctl, the validation of IndexCard and the check for a valid
    RamIO pointer are skipped when cmd is 6. However, the function
    unconditionally executes readb(apbs[IndexCard].RamIO + VERS) at the
    end.
    
    If cmd is 6, IndexCard may reference a board that does not exist
    (where RamIO is NULL), leading to a NULL pointer dereference.
    
    Fix this by skipping the readb access when cmd is 6, as this
    command is a global information query and does not target a specific
    board context.
    
    Signed-off-by: Tianchu Chen <[email protected]>
    Acked-by: Arnd Bergmann <[email protected]>
    Cc: stable <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
clk: mvebu: cp110 add CLK_IGNORE_UNUSED to pcie_x10, pcie_x11 & pcie_x4 [+ + +]
Author: Josua Mayer <[email protected]>
Date:   Thu Oct 30 16:16:26 2025 +0100

    clk: mvebu: cp110 add CLK_IGNORE_UNUSED to pcie_x10, pcie_x11 & pcie_x4
    
    [ Upstream commit f0e6bc0c3ef4b4afb299bd6912586cafd5d864e9 ]
    
    CP110 based platforms rely on the bootloader for pci port
    initialization.
    TF-A actively prevents non-uboot re-configuration of pci lanes, and many
    boards do not have software control over the pci card reset.
    
    If a pci port had link at boot-time and the clock is stopped at a later
    point, the link fails and can not be recovered.
    
    PCI controller driver probe - and by extension ownership of a driver for
    the pci clocks - may be delayed especially on large modular kernels,
    causing the clock core to start disabling unused clocks.
    
    Add the CLK_IGNORE_UNUSED flag to the three pci port's clocks to ensure
    they are not stopped before the pci controller driver has taken
    ownership and tested for an existing link.
    
    This fixes failed pci link detection when controller driver probes late,
    e.g. with arm64 defconfig and CONFIG_PHY_MVEBU_CP110_COMPHY=m.
    
    Closes: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Josua Mayer <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Signed-off-by: Gregory CLEMENT <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

clk: renesas: cpg-mssr: Add missing 1ms delay into reset toggle callback [+ + +]
Author: Marek Vasut <[email protected]>
Date:   Thu Sep 18 05:04:43 2025 +0200

    clk: renesas: cpg-mssr: Add missing 1ms delay into reset toggle callback
    
    [ Upstream commit 62abfd7bedc2b3d86d4209a4146f9d2b5ae21fab ]
    
    R-Car V4H Reference Manual R19UH0186EJ0130 Rev.1.30 Apr. 21, 2025 page
    583 Figure 9.3.1(a) Software Reset flow (A) as well as flow (B) / (C)
    indicate after reset has been asserted by writing a matching reset bit
    into register SRCR, it is mandatory to wait 1ms.
    
    This 1ms delay is documented on R-Car V4H and V4M, it is currently
    unclear whether S4 is affected as well.  This patch does apply the extra
    delay on R-Car S4 as well.
    
    Fix the reset driver to respect the additional delay when toggling
    resets.  Drivers which use separate reset_control_(de)assert() must
    assure matching delay in their driver code.
    
    Fixes: 0ab55cf18341 ("clk: renesas: cpg-mssr: Add support for R-Car V4H")
    Signed-off-by: Marek Vasut <[email protected]>
    Reviewed-by: Geert Uytterhoeven <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Geert Uytterhoeven <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

clk: renesas: r9a06g032: Fix memory leak in error path [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Thu Oct 30 14:16:03 2025 +0800

    clk: renesas: r9a06g032: Fix memory leak in error path
    
    [ Upstream commit f8def051bbcf8677f64701e9699bf6d11e2780cd ]
    
    The current code uses of_iomap() to map registers but never calls
    iounmap() on any error path after the mapping. This causes a memory
    leak when probe fails after successful ioremap, for example when
    of_clk_add_provider() or r9a06g032_add_clk_domain() fails.
    
    Replace of_iomap() with devm_of_iomap() to automatically unmap the
    region on probe failure. Update the error check accordingly to use
    IS_ERR() and PTR_ERR() since devm_of_iomap() returns ERR_PTR on error.
    
    Fixes: 4c3d88526eba ("clk: renesas: Renesas R9A06G032 clock driver")
    Signed-off-by: Haotian Zhang <[email protected]>
    Reviewed-by: Geert Uytterhoeven <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Geert Uytterhoeven <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
comedi: c6xdigio: Fix invalid PNP driver unregistration [+ + +]
Author: Ian Abbott <[email protected]>
Date:   Thu Oct 23 13:31:41 2025 +0100

    comedi: c6xdigio: Fix invalid PNP driver unregistration
    
    commit 72262330f7b3ad2130e800cecf02adcce3c32c77 upstream.
    
    The Comedi low-level driver "c6xdigio" seems to be for a parallel port
    connected device.  When the Comedi core calls the driver's Comedi
    "attach" handler `c6xdigio_attach()` to configure a Comedi to use this
    driver, it tries to enable the parallel port PNP resources by
    registering a PNP driver with `pnp_register_driver()`, but ignores the
    return value.  (The `struct pnp_driver` it uses has only the `name` and
    `id_table` members filled in.)  The driver's Comedi "detach" handler
    `c6xdigio_detach()` unconditionally unregisters the PNP driver with
    `pnp_unregister_driver()`.
    
    It is possible for `c6xdigio_attach()` to return an error before it
    calls `pnp_register_driver()` and it is possible for the call to
    `pnp_register_driver()` to return an error (that is ignored).  In both
    cases, the driver should not be calling `pnp_unregister_driver()` as it
    does in `c6xdigio_detach()`.  (Note that `c6xdigio_detach()` will be
    called by the Comedi core if `c6xdigio_attach()` returns an error, or if
    the Comedi core decides to detach the Comedi device from the driver for
    some other reason.)
    
    The unconditional call to `pnp_unregister_driver()` without a previous
    successful call to `pnp_register_driver()` will cause
    `driver_unregister()` to issue a warning "Unexpected driver
    unregister!".  This was detected by Syzbot [1].
    
    Also, the PNP driver registration and unregistration should be done at
    module init and exit time, respectively, not when attaching or detaching
    Comedi devices to the driver.  (There might be more than one Comedi
    device being attached to the driver, although that is unlikely.)
    
    Change the driver to do the PNP driver registration at module init time,
    and the unregistration at module exit time.  Since `c6xdigio_detach()`
    now only calls `comedi_legacy_detach()`, remove the function and change
    the Comedi driver "detach" handler to `comedi_legacy_detach`.
    
    -------------------------------------------
    [1] Syzbot sample crash report:
    Unexpected driver unregister!
    WARNING: CPU: 0 PID: 5970 at drivers/base/driver.c:273 driver_unregister drivers/base/driver.c:273 [inline]
    WARNING: CPU: 0 PID: 5970 at drivers/base/driver.c:273 driver_unregister+0x90/0xb0 drivers/base/driver.c:270
    Modules linked in:
    CPU: 0 UID: 0 PID: 5970 Comm: syz.0.17 Not tainted syzkaller #0 PREEMPT(full)
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/02/2025
    RIP: 0010:driver_unregister drivers/base/driver.c:273 [inline]
    RIP: 0010:driver_unregister+0x90/0xb0 drivers/base/driver.c:270
    Code: 48 89 ef e8 c2 e6 82 fc 48 89 df e8 3a 93 ff ff 5b 5d e9 c3 6d d9 fb e8 be 6d d9 fb 90 48 c7 c7 e0 f8 1f 8c e8 51 a2 97 fb 90 <0f> 0b 90 90 5b 5d e9 a5 6d d9 fb e8 e0 f4 41 fc eb 94 e8 d9 f4 41
    RSP: 0018:ffffc9000373f9a0 EFLAGS: 00010282
    RAX: 0000000000000000 RBX: ffffffff8ff24720 RCX: ffffffff817b6ee8
    RDX: ffff88807c932480 RSI: ffffffff817b6ef5 RDI: 0000000000000001
    RBP: 0000000000000000 R08: 0000000000000001 R09: 0000000000000000
    R10: 0000000000000001 R11: 0000000000000001 R12: ffffffff8ff24660
    R13: dffffc0000000000 R14: 0000000000000000 R15: ffff88814cca0000
    FS:  000055556dab1500(0000) GS:ffff8881249d9000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 000055f77f285cd0 CR3: 000000007d871000 CR4: 00000000003526f0
    Call Trace:
     <TASK>
     comedi_device_detach_locked+0x12f/0xa50 drivers/comedi/drivers.c:207
     comedi_device_detach+0x67/0xb0 drivers/comedi/drivers.c:215
     comedi_device_attach+0x43d/0x900 drivers/comedi/drivers.c:1011
     do_devconfig_ioctl+0x1b1/0x710 drivers/comedi/comedi_fops.c:872
     comedi_unlocked_ioctl+0x165d/0x2f00 drivers/comedi/comedi_fops.c:2178
     vfs_ioctl fs/ioctl.c:51 [inline]
     __do_sys_ioctl fs/ioctl.c:597 [inline]
     __se_sys_ioctl fs/ioctl.c:583 [inline]
     __x64_sys_ioctl+0x18e/0x210 fs/ioctl.c:583
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xcd/0xfa0 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7fc05798eec9
    Code: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 a8 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007ffcf8184238 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
    RAX: ffffffffffffffda RBX: 00007fc057be5fa0 RCX: 00007fc05798eec9
    RDX: 0000200000000080 RSI: 0000000040946400 RDI: 0000000000000003
    RBP: 00007fc057a11f91 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    R13: 00007fc057be5fa0 R14: 00007fc057be5fa0 R15: 0000000000000003
     </TASK>
    -------------------------------------------
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=6616bba359cec7a1def1
    Fixes: 2c89e159cd2f ("Staging: comedi: add c6xdigio driver")
    Cc: stable <[email protected]>
    Signed-off-by: Ian Abbott <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

comedi: check device's attached status in compat ioctls [+ + +]
Author: Nikita Zhandarovich <[email protected]>
Date:   Thu Oct 23 16:22:32 2025 +0300

    comedi: check device's attached status in compat ioctls
    
    commit 0de7d9cd07a2671fa6089173bccc0b2afe6b93ee upstream.
    
    Syzbot identified an issue [1] that crashes kernel, seemingly due to
    unexistent callback dev->get_valid_routes(). By all means, this should
    not occur as said callback must always be set to
    get_zero_valid_routes() in __comedi_device_postconfig().
    
    As the crash seems to appear exclusively in i386 kernels, at least,
    judging from [1] reports, the blame lies with compat versions
    of standard IOCTL handlers. Several of them are modified and
    do not use comedi_unlocked_ioctl(). While functionality of these
    ioctls essentially copy their original versions, they do not
    have required sanity check for device's attached status. This,
    in turn, leads to a possibility of calling select IOCTLs on a
    device that has not been properly setup, even via COMEDI_DEVCONFIG.
    
    Doing so on unconfigured devices means that several crucial steps
    are missed, for instance, specifying dev->get_valid_routes()
    callback.
    
    Fix this somewhat crudely by ensuring device's attached status before
    performing any ioctls, improving logic consistency between modern
    and compat functions.
    
    [1] Syzbot report:
    BUG: kernel NULL pointer dereference, address: 0000000000000000
    ...
    CR2: ffffffffffffffd6 CR3: 000000006c717000 CR4: 0000000000352ef0
    Call Trace:
     <TASK>
     get_valid_routes drivers/comedi/comedi_fops.c:1322 [inline]
     parse_insn+0x78c/0x1970 drivers/comedi/comedi_fops.c:1401
     do_insnlist_ioctl+0x272/0x700 drivers/comedi/comedi_fops.c:1594
     compat_insnlist drivers/comedi/comedi_fops.c:3208 [inline]
     comedi_compat_ioctl+0x810/0x990 drivers/comedi/comedi_fops.c:3273
     __do_compat_sys_ioctl fs/ioctl.c:695 [inline]
     __se_compat_sys_ioctl fs/ioctl.c:638 [inline]
     __ia32_compat_sys_ioctl+0x242/0x370 fs/ioctl.c:638
     do_syscall_32_irqs_on arch/x86/entry/syscall_32.c:83 [inline]
    ...
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=ab8008c24e84adee93ff
    Fixes: 3fbfd2223a27 ("comedi: get rid of compat_alloc_user_space() mess in COMEDI_CHANINFO compat")
    Cc: stable <[email protected]>
    Reviewed-by: Ian Abbott <[email protected]>
    Signed-off-by: Nikita Zhandarovich <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

comedi: multiq3: sanitize config options in multiq3_attach() [+ + +]
Author: Nikita Zhandarovich <[email protected]>
Date:   Thu Oct 23 16:22:04 2025 +0300

    comedi: multiq3: sanitize config options in multiq3_attach()
    
    commit f24c6e3a39fa355dabfb684c9ca82db579534e72 upstream.
    
    Syzbot identified an issue [1] in multiq3_attach() that induces a
    task timeout due to open() or COMEDI_DEVCONFIG ioctl operations,
    specifically, in the case of multiq3 driver.
    
    This problem arose when syzkaller managed to craft weird configuration
    options used to specify the number of channels in encoder subdevice.
    If a particularly great number is passed to s->n_chan in
    multiq3_attach() via it->options[2], then multiple calls to
    multiq3_encoder_reset() at the end of driver-specific attach() method
    will be running for minutes, thus blocking tasks and affected devices
    as well.
    
    While this issue is most likely not too dangerous for real-life
    devices, it still makes sense to sanitize configuration inputs. Enable
    a sensible limit on the number of encoder chips (4 chips max, each
    with 2 channels) to stop this behaviour from manifesting.
    
    [1] Syzbot crash:
    INFO: task syz.2.19:6067 blocked for more than 143 seconds.
    ...
    Call Trace:
     <TASK>
     context_switch kernel/sched/core.c:5254 [inline]
     __schedule+0x17c4/0x4d60 kernel/sched/core.c:6862
     __schedule_loop kernel/sched/core.c:6944 [inline]
     schedule+0x165/0x360 kernel/sched/core.c:6959
     schedule_preempt_disabled+0x13/0x30 kernel/sched/core.c:7016
     __mutex_lock_common kernel/locking/mutex.c:676 [inline]
     __mutex_lock+0x7e6/0x1350 kernel/locking/mutex.c:760
     comedi_open+0xc0/0x590 drivers/comedi/comedi_fops.c:2868
     chrdev_open+0x4cc/0x5e0 fs/char_dev.c:414
     do_dentry_open+0x953/0x13f0 fs/open.c:965
     vfs_open+0x3b/0x340 fs/open.c:1097
    ...
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=7811bb68a317954a0347
    Fixes: 77e01cdbad51 ("Staging: comedi: add multiq3 driver")
    Cc: stable <[email protected]>
    Signed-off-by: Nikita Zhandarovich <[email protected]>
    Reviewed-by: Ian Abbott <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

comedi: pcl818: fix null-ptr-deref in pcl818_ai_cancel() [+ + +]
Author: Nikita Zhandarovich <[email protected]>
Date:   Thu Oct 23 17:14:56 2025 +0300

    comedi: pcl818: fix null-ptr-deref in pcl818_ai_cancel()
    
    commit a51f025b5038abd3d22eed2ede4cd46793d89565 upstream.
    
    Syzbot identified an issue [1] in pcl818_ai_cancel(), which stems from
    the fact that in case of early device detach via pcl818_detach(),
    subdevice dev->read_subdev may not have initialized its pointer to
    &struct comedi_async as intended. Thus, any such dereferencing of
    &s->async->cmd will lead to general protection fault and kernel crash.
    
    Mitigate this problem by removing a call to pcl818_ai_cancel() from
    pcl818_detach() altogether. This way, if the subdevice setups its
    support for async commands, everything async-related will be
    handled via subdevice's own ->cancel() function in
    comedi_device_detach_locked() even before pcl818_detach(). If no
    support for asynchronous commands is provided, there is no need
    to cancel anything either.
    
    [1] Syzbot crash:
    Oops: general protection fault, probably for non-canonical address 0xdffffc0000000005: 0000 [#1] SMP KASAN PTI
    KASAN: null-ptr-deref in range [0x0000000000000028-0x000000000000002f]
    CPU: 1 UID: 0 PID: 6050 Comm: syz.0.18 Not tainted syzkaller #0 PREEMPT(full)
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 08/18/2025
    RIP: 0010:pcl818_ai_cancel+0x69/0x3f0 drivers/comedi/drivers/pcl818.c:762
    ...
    Call Trace:
     <TASK>
     pcl818_detach+0x66/0xd0 drivers/comedi/drivers/pcl818.c:1115
     comedi_device_detach_locked+0x178/0x750 drivers/comedi/drivers.c:207
     do_devconfig_ioctl drivers/comedi/comedi_fops.c:848 [inline]
     comedi_unlocked_ioctl+0xcde/0x1020 drivers/comedi/comedi_fops.c:2178
     vfs_ioctl fs/ioctl.c:51 [inline]
     __do_sys_ioctl fs/ioctl.c:597 [inline]
    ...
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=fce5d9d5bd067d6fbe9b
    Fixes: 00aba6e7b565 ("staging: comedi: pcl818: remove 'neverending_ai' from private data")
    Cc: stable <[email protected]>
    Signed-off-by: Nikita Zhandarovich <[email protected]>
    Reviewed-by: Ian Abbott <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
compiler_types.h: add "auto" as a macro for "__auto_type" [+ + +]
Author: H. Peter Anvin <[email protected]>
Date:   Fri Jul 18 11:35:00 2025 -0700

    compiler_types.h: add "auto" as a macro for "__auto_type"
    
    commit 2fb6915fa22dc5524d704afba58a13305dd9f533 upstream.
    
    "auto" was defined as a keyword back in the K&R days, but as a storage
    type specifier.  No one ever used it, since it was and is the default
    storage type for local variables.
    
    C++11 recycled the keyword to allow a type to be declared based on the
    type of an initializer.  This was finally adopted into standard C in
    C23.
    
    gcc and clang provide the "__auto_type" alias keyword as an extension
    for pre-C23, however, there is no reason to pollute the bulk of the
    source base with this temporary keyword; instead define "auto" as a
    macro unless the compiler is running in C23+ mode.
    
    This macro is added in <linux/compiler_types.h> because that header is
    included in some of the tools headers, wheres <linux/compiler.h> is
    not as it has a bunch of very kernel-specific things in it.
    
    [ Cc: stable to reduce potential backporting burden. ]
    
    Signed-off-by: H. Peter Anvin (Intel) <[email protected]>
    Acked-by: Miguel Ojeda <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
coresight: etm4x: Add context synchronization before enabling trace [+ + +]
Author: Leo Yan <[email protected]>
Date:   Tue Nov 11 18:58:39 2025 +0000

    coresight: etm4x: Add context synchronization before enabling trace
    
    [ Upstream commit 64eb04ae545294e105ad91714dc3167a0b660731 ]
    
    According to the software usage PKLXF in Arm ARM (ARM DDI 0487 L.a), a
    Context synchronization event is required before enabling the trace
    unit.
    
    An ISB is added to meet this requirement, particularly for guarding the
    operations in the flow:
    
      etm4x_allow_trace()
       `> kvm_tracing_set_el1_configuration()
            `> write_sysreg_s(trfcr_while_in_guest, SYS_TRFCR_EL12)
    
    Improved the barrier comments to provide more accurate information.
    
    Fixes: 1ab3bb9df5e3 ("coresight: etm4x: Add necessary synchronization for sysreg access")
    Reviewed-by: Mike Leach <[email protected]>
    Reviewed-by: Yeoreun Yun <[email protected]>
    Tested-by: James Clark <[email protected]>
    Signed-off-by: Leo Yan <[email protected]>
    Signed-off-by: Suzuki K Poulose <[email protected]>
    Link: https://lore.kernel.org/r/20251111-arm_coresight_power_management_fix-v6-5-f55553b6c8b3@arm.com
    Signed-off-by: Sasha Levin <[email protected]>

coresight: etm4x: Correct polling IDLE bit [+ + +]
Author: Leo Yan <[email protected]>
Date:   Tue Nov 11 18:58:38 2025 +0000

    coresight: etm4x: Correct polling IDLE bit
    
    [ Upstream commit 4dc4e22f9536341255f5de6047977a80ff47eaef ]
    
    Since commit 4ff6039ffb79 ("coresight-etm4x: add isb() before reading
    the TRCSTATR"), the code has incorrectly been polling the PMSTABLE bit
    instead of the IDLE bit.
    
    This commit corrects the typo.
    
    Fixes: 4ff6039ffb79 ("coresight-etm4x: add isb() before reading the TRCSTATR")
    Reviewed-by: Yeoreum Yun <[email protected]>
    Reviewed-by: Mike Leach <[email protected]>
    Tested-by: James Clark <[email protected]>
    Signed-off-by: Leo Yan <[email protected]>
    Signed-off-by: Suzuki K Poulose <[email protected]>
    Link: https://lore.kernel.org/r/20251111-arm_coresight_power_management_fix-v6-4-f55553b6c8b3@arm.com
    Signed-off-by: Sasha Levin <[email protected]>

coresight: etm4x: Extract the trace unit controlling [+ + +]
Author: Leo Yan <[email protected]>
Date:   Tue Apr 1 19:07:02 2025 +0100

    coresight: etm4x: Extract the trace unit controlling
    
    [ Upstream commit 40f682ae5086366d51e29e66eb8a344501245d0d ]
    
    The trace unit is controlled in the ETM hardware enabling and disabling.
    The sequential changes for support AUX pause and resume will reuse the
    same operations.
    
    Extract the operations in the etm4_{enable|disable}_trace_unit()
    functions.  A minor improvement in etm4_enable_trace_unit() is for
    returning the timeout error to callers.
    
    Signed-off-by: Leo Yan <[email protected]>
    Reviewed-by: Mike Leach <[email protected]>
    Reviewed-by: James Clark <[email protected]>
    Signed-off-by: Suzuki K Poulose <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: 64eb04ae5452 ("coresight: etm4x: Add context synchronization before enabling trace")
    Signed-off-by: Sasha Levin <[email protected]>

 
cpufreq: nforce2: fix reference count leak in nforce2 [+ + +]
Author: Miaoqian Lin <[email protected]>
Date:   Mon Oct 27 23:04:45 2025 +0800

    cpufreq: nforce2: fix reference count leak in nforce2
    
    commit 9600156bb99852c216a2128cdf9f114eb67c350f upstream.
    
    There are two reference count leaks in this driver:
    
    1. In nforce2_fsb_read(): pci_get_subsys() increases the reference count
       of the PCI device, but pci_dev_put() is never called to release it,
       thus leaking the reference.
    
    2. In nforce2_detect_chipset(): pci_get_subsys() gets a reference to the
       nforce2_dev which is stored in a global variable, but the reference
       is never released when the module is unloaded.
    
    Fix both by:
    - Adding pci_dev_put(nforce2_sub5) in nforce2_fsb_read() after reading
      the configuration.
    - Adding pci_dev_put(nforce2_dev) in nforce2_exit() to release the
      global device reference.
    
    Found via static analysis.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Signed-off-by: Miaoqian Lin <[email protected]>
    Signed-off-by: Viresh Kumar <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

cpufreq: s5pv210: fix refcount leak [+ + +]
Author: Shuhao Fu <[email protected]>
Date:   Mon Oct 6 03:31:17 2025 +0800

    cpufreq: s5pv210: fix refcount leak
    
    [ Upstream commit 2de5cb96060a1664880d65b120e59485a73588a8 ]
    
    In function `s5pv210_cpu_init`, a possible refcount inconsistency has
    been identified, causing a resource leak.
    
    Why it is a bug:
    1. For every clk_get, there should be a matching clk_put on every
    successive error handling path.
    2. After calling `clk_get(dmc1_clk)`, variable `dmc1_clk` will not be
    freed even if any error happens.
    
    How it is fixed: For every failed path, an extra goto label is added to
    ensure `dmc1_clk` will be freed regardlessly.
    
    Signed-off-by: Shuhao Fu <[email protected]>
    Signed-off-by: Viresh Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
cpuset: Treat cpusets in attaching as populated [+ + +]
Author: Chen Ridong <[email protected]>
Date:   Fri Nov 14 02:08:47 2025 +0000

    cpuset: Treat cpusets in attaching as populated
    
    [ Upstream commit b1bcaed1e39a9e0dfbe324a15d2ca4253deda316 ]
    
    Currently, the check for whether a partition is populated does not
    account for tasks in the cpuset of attaching. This is a corner case
    that can leave a task stuck in a partition with no effective CPUs.
    
    The race condition occurs as follows:
    
    cpu0                            cpu1
                                    //cpuset A  with cpu N
    migrate task p to A
    cpuset_can_attach
    // with effective cpus
    // check ok
    
    // cpuset_mutex is not held     // clear cpuset.cpus.exclusive
                                    // making effective cpus empty
                                    update_exclusive_cpumask
                                    // tasks_nocpu_error check ok
                                    // empty effective cpus, partition valid
    cpuset_attach
    ...
    // task p stays in A, with non-effective cpus.
    
    To fix this issue, this patch introduces cs_is_populated, which considers
    tasks in the attaching cpuset. This new helper is used in validate_change
    and partition_is_populated.
    
    Fixes: e2d59900d936 ("cgroup/cpuset: Allow no-task partition to have empty cpuset.cpus.effective")
    Signed-off-by: Chen Ridong <[email protected]>
    Reviewed-by: Waiman Long <[email protected]>
    Signed-off-by: Tejun Heo <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
crypto: af_alg - zero initialize memory allocated via sock_kmalloc [+ + +]
Author: Shivani Agarwal <[email protected]>
Date:   Wed Dec 31 13:35:24 2025 -0500

    crypto: af_alg - zero initialize memory allocated via sock_kmalloc
    
    [ Upstream commit 6f6e309328d53a10c0fe1f77dec2db73373179b6 ]
    
    Several crypto user API contexts and requests allocated with
    sock_kmalloc() were left uninitialized, relying on callers to
    set fields explicitly. This resulted in the use of uninitialized
    data in certain error paths or when new fields are added in the
    future.
    
    The ACVP patches also contain two user-space interface files:
    algif_kpp.c and algif_akcipher.c. These too rely on proper
    initialization of their context structures.
    
    A particular issue has been observed with the newly added
    'inflight' variable introduced in af_alg_ctx by commit:
    
      67b164a871af ("crypto: af_alg - Disallow multiple in-flight AIO requests")
    
    Because the context is not memset to zero after allocation,
    the inflight variable has contained garbage values. As a result,
    af_alg_alloc_areq() has incorrectly returned -EBUSY randomly when
    the garbage value was interpreted as true:
    
      https://github.com/gregkh/linux/blame/master/crypto/af_alg.c#L1209
    
    The check directly tests ctx->inflight without explicitly
    comparing against true/false. Since inflight is only ever set to
    true or false later, an uninitialized value has triggered
    -EBUSY failures. Zero-initializing memory allocated with
    sock_kmalloc() ensures inflight and other fields start in a known
    state, removing random issues caused by uninitialized data.
    
    Fixes: fe869cdb89c9 ("crypto: algif_hash - User-space interface for hash operations")
    Fixes: 5afdfd22e6ba ("crypto: algif_rng - add random number generator support")
    Fixes: 2d97591ef43d ("crypto: af_alg - consolidation of duplicate code")
    Fixes: 67b164a871af ("crypto: af_alg - Disallow multiple in-flight AIO requests")
    Cc: [email protected]
    Signed-off-by: Shivani Agarwal <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: asymmetric_keys - prevent overflow in asymmetric_key_generate_id [+ + +]
Author: Thorsten Blum <[email protected]>
Date:   Mon Oct 13 13:40:10 2025 +0200

    crypto: asymmetric_keys - prevent overflow in asymmetric_key_generate_id
    
    [ Upstream commit df0845cf447ae1556c3440b8b155de0926cbaa56 ]
    
    Use check_add_overflow() to guard against potential integer overflows
    when adding the binary blob lengths and the size of an asymmetric_key_id
    structure and return ERR_PTR(-EOVERFLOW) accordingly. This prevents a
    possible buffer overflow when copying data from potentially malicious
    X.509 certificate fields that can be arbitrarily large, such as ASN.1
    INTEGER serial numbers, issuer names, etc.
    
    Fixes: 7901c1a8effb ("KEYS: Implement binary asymmetric key ID handling")
    Signed-off-by: Thorsten Blum <[email protected]>
    Reviewed-by: Lukas Wunner <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: ccree - Correctly handle return of sg_nents_for_len [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Mon Nov 10 15:20:41 2025 +0800

    crypto: ccree - Correctly handle return of sg_nents_for_len
    
    [ Upstream commit 8700ce07c5c6bf27afa7b59a8d9cf58d783a7d5c ]
    
    Fix error handling in cc_map_hash_request_update where sg_nents_for_len
    return value was assigned to u32, converting negative errors to large
    positive values before passing to sg_copy_to_buffer.
    
    Check sg_nents_for_len return value and propagate errors before
    assigning to areq_ctx->in_nents.
    
    Fixes: b7ec8530687a ("crypto: ccree - use std api when possible")
    Signed-off-by: Haotian Zhang <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: hisilicon/qm - restore original qos values [+ + +]
Author: nieweiqiang <[email protected]>
Date:   Sat Oct 18 19:27:39 2025 +0800

    crypto: hisilicon/qm - restore original qos values
    
    [ Upstream commit e7066160f5b4187ad9869b712fa7a35d3d5be6b9 ]
    
    When the new qos valus setting fails, restore to
    the original qos values.
    
    Fixes: 72b010dc33b9 ("crypto: hisilicon/qm - supports writing QoS int the host")
    Signed-off-by: nieweiqiang <[email protected]>
    Signed-off-by: Chenghai Huang <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: seqiv - Do not use req->iv after crypto_aead_encrypt [+ + +]
Author: Herbert Xu <[email protected]>
Date:   Wed Dec 17 14:15:41 2025 +0800

    crypto: seqiv - Do not use req->iv after crypto_aead_encrypt
    
    [ Upstream commit 50fdb78b7c0bcc550910ef69c0984e751cac72fa ]
    
    As soon as crypto_aead_encrypt is called, the underlying request
    may be freed by an asynchronous completion.  Thus dereferencing
    req->iv after it returns is invalid.
    
    Instead of checking req->iv against info, create a new variable
    unaligned_info and use it for that purpose instead.
    
    Fixes: 0a270321dbf9 ("[CRYPTO] seqiv: Add Sequence Number IV Generator")
    Reported-by: Xiumei Mu <[email protected]>
    Reported-by: Xin Long <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dm log-writes: Add missing set_freezable() for freezable kthread [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Mon Dec 1 15:41:03 2025 +0800

    dm log-writes: Add missing set_freezable() for freezable kthread
    
    [ Upstream commit ab08f9c8b363297cafaf45475b08f78bf19b88ef ]
    
    The log_writes_kthread() calls try_to_freeze() but lacks set_freezable(),
    rendering the freeze attempt ineffective since kernel threads are
    non-freezable by default. This prevents proper thread suspension during
    system suspend/hibernate.
    
    Add set_freezable() to explicitly mark the thread as freezable.
    
    Fixes: 0e9cebe72459 ("dm: add log writes target")
    Signed-off-by: Haotian Zhang <[email protected]>
    Reviewed-by: Benjamin Marzinski <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dm-bufio: align write boundary on physical block size [+ + +]
Author: Mikulas Patocka <[email protected]>
Date:   Mon Oct 20 14:48:13 2025 +0200

    dm-bufio: align write boundary on physical block size
    
    commit d0ac06ae53be0cdb61f5fe6b62d25d3317c51657 upstream.
    
    There may be devices with physical block size larger than 4k.
    
    If dm-bufio sends I/O that is not aligned on physical block size,
    performance is degraded.
    
    The 4k minimum alignment limit is there because some SSDs report logical
    and physical block size 512 despite having 4k internally - so dm-bufio
    shouldn't send I/Os not aligned on 4k boundary, because they perform
    badly (the SSD does read-modify-write for them).
    
    Signed-off-by: Mikulas Patocka <[email protected]>
    Reported-by: Uladzislau Rezki (Sony) <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dm-ebs: Mark full buffer dirty even on partial write [+ + +]
Author: Uladzislau Rezki (Sony) <[email protected]>
Date:   Mon Nov 17 11:59:45 2025 +0100

    dm-ebs: Mark full buffer dirty even on partial write
    
    commit 7fa3e7d114abc9cc71cc35d768e116641074ddb4 upstream.
    
    When performing a read-modify-write(RMW) operation, any modification
    to a buffered block must cause the entire buffer to be marked dirty.
    
    Marking only a subrange as dirty is incorrect because the underlying
    device block size(ubs) defines the minimum read/write granularity. A
    lower device can perform I/O only on regions which are fully aligned
    and sized to ubs.
    
    This change ensures that write-back operations always occur in full
    ubs-sized chunks, matching the intended emulation semantics of the
    EBS target.
    
    As for user space visible impact, submitting sub-ubs and misaligned
    I/O for devices which are tuned to ubs sizes only, will reject such
    requests, therefore it can lead to losing data. Example:
    
    1) Create a 8K nvme device in qemu by adding
    
    -device nvme,drive=drv0,serial=foo,logical_block_size=8192,physical_block_size=8192
    
    2) Setup dm-ebs to emulate 512B to 8K mapping
    
    urezki@pc638:~/bin$ cat dmsetup.sh
    
    lower=/dev/nvme0n1
    len=$(blockdev --getsz "$lower")
    
    echo "0 $len ebs $lower 0 1 16" | dmsetup create nvme-8k
    urezki@pc638:~/bin$
    
    offset 0, ebs=1 and ubs=16(in sectors).
    
    3) Create an ext4 filesystem(default 4K block size)
    
    urezki@pc638:~/bin$ sudo mkfs.ext4 -F /dev/dm-0
    mke2fs 1.47.0 (5-Feb-2023)
    Discarding device blocks: done
    Creating filesystem with 2072576 4k blocks and 518144 inodes
    Filesystem UUID: bd0b6ca6-0506-4e31-86da-8d22c9d50b63
    Superblock backups stored on blocks:
            32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
    
    Allocating group tables: done
    Writing inode tables: done
    Creating journal (16384 blocks): done
    Writing superblocks and filesystem accounting information: mkfs.ext4: Input/output error while writing out and closing file system
    urezki@pc638:~/bin$ dmesg
    
    <snip>
    [ 1618.875449] buffer_io_error: 1028 callbacks suppressed
    [ 1618.875456] Buffer I/O error on dev dm-0, logical block 0, lost async page write
    [ 1618.875527] Buffer I/O error on dev dm-0, logical block 1, lost async page write
    [ 1618.875602] Buffer I/O error on dev dm-0, logical block 2, lost async page write
    [ 1618.875620] Buffer I/O error on dev dm-0, logical block 3, lost async page write
    [ 1618.875639] Buffer I/O error on dev dm-0, logical block 4, lost async page write
    [ 1618.894316] Buffer I/O error on dev dm-0, logical block 5, lost async page write
    [ 1618.894358] Buffer I/O error on dev dm-0, logical block 6, lost async page write
    [ 1618.894380] Buffer I/O error on dev dm-0, logical block 7, lost async page write
    [ 1618.894405] Buffer I/O error on dev dm-0, logical block 8, lost async page write
    [ 1618.894427] Buffer I/O error on dev dm-0, logical block 9, lost async page write
    <snip>
    
    Many I/O errors because the lower 8K device rejects sub-ubs/misaligned
    requests.
    
    with a patch:
    
    urezki@pc638:~/bin$ sudo mkfs.ext4 -F /dev/dm-0
    mke2fs 1.47.0 (5-Feb-2023)
    Discarding device blocks: done
    Creating filesystem with 2072576 4k blocks and 518144 inodes
    Filesystem UUID: 9b54f44f-ef55-4bd4-9e40-c8b775a616ac
    Superblock backups stored on blocks:
            32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
    
    Allocating group tables: done
    Writing inode tables: done
    Creating journal (16384 blocks): done
    Writing superblocks and filesystem accounting information: done
    
    urezki@pc638:~/bin$ sudo mount /dev/dm-0 /mnt/
    urezki@pc638:~/bin$ ls -al /mnt/
    total 24
    drwxr-xr-x  3 root root  4096 Oct 17 15:13 .
    drwxr-xr-x 19 root root  4096 Jul 10 19:42 ..
    drwx------  2 root root 16384 Oct 17 15:13 lost+found
    urezki@pc638:~/bin$
    
    After this change: mkfs completes; mount succeeds.
    
    Signed-off-by: Uladzislau Rezki (Sony) <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dm-raid: fix possible NULL dereference with undefined raid type [+ + +]
Author: Alexey Simakov <[email protected]>
Date:   Tue Dec 2 20:18:38 2025 +0300

    dm-raid: fix possible NULL dereference with undefined raid type
    
    [ Upstream commit 2f6cfd6d7cb165a7af8877b838a9f6aab4159324 ]
    
    rs->raid_type is assigned from get_raid_type_by_ll(), which may return
    NULL. This NULL value could be dereferenced later in the condition
    'if (!(rs_is_raid10(rs) && rt_is_raid0(rs->raid_type)))'.
    
    Add a fail-fast check to return early with an error if raid_type is NULL,
    similar to other uses of this function.
    
    Found by Linux Verification Center (linuxtesting.org) with Svace.
    
    Fixes: 33e53f06850f ("dm raid: introduce extended superblock and new raid types to support takeover/reshaping")
    Signed-off-by: Alexey Simakov <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dma/pool: eliminate alloc_pages warning in atomic_pool_expand [+ + +]
Author: Dave Kleikamp <[email protected]>
Date:   Tue Dec 2 09:28:10 2025 -0600

    dma/pool: eliminate alloc_pages warning in atomic_pool_expand
    
    [ Upstream commit 463d439becb81383f3a5a5d840800131f265a09c ]
    
    atomic_pool_expand iteratively tries the allocation while decrementing
    the page order. There is no need to issue a warning if an attempted
    allocation fails.
    
    Signed-off-by: Dave Kleikamp <[email protected]>
    Reviewed-by: Robin Murphy <[email protected]>
    Fixes: d7e673ec2c8e ("dma-pool: Only allocate from CMA when in same memory zone")
    [mszyprow: fixed typo]
    Signed-off-by: Marek Szyprowski <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
dmaengine: idxd: Remove improper idxd_free [+ + +]
Author: Yi Sun <[email protected]>
Date:   Tue Dec 16 03:13:13 2025 +0000

    dmaengine: idxd: Remove improper idxd_free
    
    [ Upstream commit f41c538881eec4dcf5961a242097d447f848cda6 ]
    
    The call to idxd_free() introduces a duplicate put_device() leading to a
    reference count underflow:
    refcount_t: underflow; use-after-free.
    WARNING: CPU: 15 PID: 4428 at lib/refcount.c:28 refcount_warn_saturate+0xbe/0x110
    ...
    Call Trace:
     <TASK>
      idxd_remove+0xe4/0x120 [idxd]
      pci_device_remove+0x3f/0xb0
      device_release_driver_internal+0x197/0x200
      driver_detach+0x48/0x90
      bus_remove_driver+0x74/0xf0
      pci_unregister_driver+0x2e/0xb0
      idxd_exit_module+0x34/0x7a0 [idxd]
      __do_sys_delete_module.constprop.0+0x183/0x280
      do_syscall_64+0x54/0xd70
      entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    The idxd_unregister_devices() which is invoked at the very beginning of
    idxd_remove(), already takes care of the necessary put_device() through the
    following call path:
    idxd_unregister_devices() -> device_unregister() -> put_device()
    
    In addition, when CONFIG_DEBUG_KOBJECT_RELEASE is enabled, put_device() may
    trigger asynchronous cleanup via schedule_delayed_work(). If idxd_free() is
    called immediately after, it can result in a use-after-free.
    
    Remove the improper idxd_free() to avoid both the refcount underflow and
    potential memory corruption during module unload.
    
    Fixes: d5449ff1b04d ("dmaengine: idxd: Add missing idxd cleanup to fix memory leak in remove call")
    Signed-off-by: Yi Sun <[email protected]>
    Tested-by: Shuai Xue <[email protected]>
    Reviewed-by: Dave Jiang <[email protected]>
    Acked-by: Vinicius Costa Gomes <[email protected]>
    
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    [ Slightly adjust the context. ]
    Signed-off-by: Bin Lan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Documentation: process: Also mention Sasha Levin as stable tree maintainer [+ + +]
Author: Bagas Sanjaya <[email protected]>
Date:   Wed Oct 22 10:43:35 2025 +0700

    Documentation: process: Also mention Sasha Levin as stable tree maintainer
    
    commit ba2457109d5b47a90fe565b39524f7225fc23e60 upstream.
    
    Sasha has also maintaining stable branch in conjunction with Greg
    since cb5d21946d2a2f ("MAINTAINERS: Add Sasha as a stable branch
    maintainer"). Mention him in 2.Process.rst.
    
    Cc: [email protected]
    Signed-off-by: Bagas Sanjaya <[email protected]>
    Reviewed-by: Randy Dunlap <[email protected]>
    Acked-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Jonathan Corbet <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amd/display: Fix logical vs bitwise bug in get_embedded_panel_info_v2_1() [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Fri Oct 31 16:02:25 2025 +0300

    drm/amd/display: Fix logical vs bitwise bug in get_embedded_panel_info_v2_1()
    
    [ Upstream commit 1a79482699b4d1e43948d14f0c7193dc1dcad858 ]
    
    The .H_SYNC_POLARITY and .V_SYNC_POLARITY variables are 1 bit bitfields
    of a u32.  The ATOM_HSYNC_POLARITY define is 0x2 and the
    ATOM_VSYNC_POLARITY is 0x4.  When we do a bitwise negate of 0, 2, or 4
    then the last bit is always 1 so this code always sets .H_SYNC_POLARITY
    and .V_SYNC_POLARITY to true.
    
    This code is instead intended to check if the ATOM_HSYNC_POLARITY or
    ATOM_VSYNC_POLARITY flags are set and reverse the result.  In other
    words, it's supposed to be a logical negate instead of a bitwise negate.
    
    Fixes: ae79c310b1a6 ("drm/amd/display: Add DCE12 bios parser support")
    Signed-off-by: Dan Carpenter <[email protected]>
    Reviewed-by: Alex Hung <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/amd/display: Use GFP_ATOMIC in dc_create_plane_state() [+ + +]
Author: Alex Deucher <[email protected]>
Date:   Tue Nov 11 11:17:22 2025 -0500

    drm/amd/display: Use GFP_ATOMIC in dc_create_plane_state()
    
    commit 3c41114dcdabb7b25f5bc33273c6db9c7af7f4a7 upstream.
    
    This can get called from an atomic context.
    
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4470
    Reviewed-by: Harry Wentland <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 8acdad9344cc7b4e7bc01f0dfea80093eb3768db)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdgpu: add missing lock to amdgpu_ttm_access_memory_sdma [+ + +]
Author: Pierre-Eric Pelloux-Prayer <[email protected]>
Date:   Wed Jan 7 06:54:26 2026 -0500

    drm/amdgpu: add missing lock to amdgpu_ttm_access_memory_sdma
    
    [ Upstream commit 4fa944255be521b1bbd9780383f77206303a3a5c ]
    
    Users of ttm entities need to hold the gtt_window_lock before using them
    to guarantee proper ordering of jobs.
    
    Cc: [email protected]
    Fixes: cb5cc4f573e1 ("drm/amdgpu: improve debug VRAM access performance using sdma")
    Signed-off-by: Pierre-Eric Pelloux-Prayer <[email protected]>
    Reviewed-by: Christian König <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amdgpu: cleanup scheduler job initialization v2 [+ + +]
Author: Christian König <[email protected]>
Date:   Wed Jan 7 06:54:25 2026 -0500

    drm/amdgpu: cleanup scheduler job initialization v2
    
    [ Upstream commit f7d66fb2ea43a3016e78a700a2ca6c77a74579f9 ]
    
    Init the DRM scheduler base class while allocating the job.
    
    This makes the whole handling much more cleaner.
    
    v2: fix coding style
    
    Signed-off-by: Christian König <[email protected]>
    Reviewed-by: Luben Tuikov <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Stable-dep-of: 4fa944255be5 ("drm/amdgpu: add missing lock to amdgpu_ttm_access_memory_sdma")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/gma500: Remove unused helper psb_fbdev_fb_setcolreg() [+ + +]
Author: Thomas Zimmermann <[email protected]>
Date:   Wed Jan 7 10:48:24 2026 -0500

    drm/gma500: Remove unused helper psb_fbdev_fb_setcolreg()
    
    [ Upstream commit be729f9de6c64240645dc80a24162ac4d3fe00a8 ]
    
    Remove psb_fbdev_fb_setcolreg(), which hasn't been called in almost
    a decade.
    
    Gma500 commit 4d8d096e9ae8 ("gma500: introduce the framebuffer support
    code") added the helper psb_fbdev_fb_setcolreg() for setting the fbdev
    palette via fbdev's fb_setcolreg callback. Later
    commit 3da6c2f3b730 ("drm/gma500: use DRM_FB_HELPER_DEFAULT_OPS for
    fb_ops") set several default helpers for fbdev emulation, including
    fb_setcmap.
    
    The fbdev subsystem always prefers fb_setcmap over fb_setcolreg. [1]
    Hence, the gma500 code is no longer in use and gma500 has been using
    drm_fb_helper_setcmap() for several years without issues.
    
    Fixes: 3da6c2f3b730 ("drm/gma500: use DRM_FB_HELPER_DEFAULT_OPS for fb_ops")
    Cc: Patrik Jakobsson <[email protected]>
    Cc: Stefan Christ <[email protected]>
    Cc: Daniel Vetter <[email protected]>
    Cc: [email protected]
    Cc: <[email protected]> # v4.10+
    Link: https://elixir.bootlin.com/linux/v6.16.9/source/drivers/video/fbdev/core/fbcmap.c#L246 # [1]
    Signed-off-by: Thomas Zimmermann <[email protected]>
    Acked-by: Patrik Jakobsson <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    [ adapted patch from fbdev.c to framebuffer.c where the function was named psbfb_setcolreg() instead of psb_fbdev_fb_setcolreg() ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/i915/gem: Zero-initialize the eb.vma array in i915_gem_do_execbuffer [+ + +]
Author: Krzysztof Niemiec <[email protected]>
Date:   Tue Dec 16 19:09:01 2025 +0100

    drm/i915/gem: Zero-initialize the eb.vma array in i915_gem_do_execbuffer
    
    commit 4fe2bd195435e71c117983d87f278112c5ab364c upstream.
    
    Initialize the eb.vma array with values of 0 when the eb structure is
    first set up. In particular, this sets the eb->vma[i].vma pointers to
    NULL, simplifying cleanup and getting rid of the bug described below.
    
    During the execution of eb_lookup_vmas(), the eb->vma array is
    successively filled up with struct eb_vma objects. This process includes
    calling eb_add_vma(), which might fail; however, even in the event of
    failure, eb->vma[i].vma is set for the currently processed buffer.
    
    If eb_add_vma() fails, eb_lookup_vmas() returns with an error, which
    prompts a call to eb_release_vmas() to clean up the mess. Since
    eb_lookup_vmas() might fail during processing any (possibly not first)
    buffer, eb_release_vmas() checks whether a buffer's vma is NULL to know
    at what point did the lookup function fail.
    
    In eb_lookup_vmas(), eb->vma[i].vma is set to NULL if either the helper
    function eb_lookup_vma() or eb_validate_vma() fails. eb->vma[i+1].vma is
    set to NULL in case i915_gem_object_userptr_submit_init() fails; the
    current one needs to be cleaned up by eb_release_vmas() at this point,
    so the next one is set. If eb_add_vma() fails, neither the current nor
    the next vma is set to NULL, which is a source of a NULL deref bug
    described in the issue linked in the Closes tag.
    
    When entering eb_lookup_vmas(), the vma pointers are set to the slab
    poison value, instead of NULL. This doesn't matter for the actual
    lookup, since it gets overwritten anyway, however the eb_release_vmas()
    function only recognizes NULL as the stopping value, hence the pointers
    are being set to NULL as they go in case of intermediate failure. This
    patch changes the approach to filling them all with NULL at the start
    instead, rather than handling that manually during failure.
    
    Reported-by: Gangmin Kim <[email protected]>
    Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15062
    Fixes: 544460c33821 ("drm/i915: Multi-BB execbuf")
    Cc: [email protected] # 5.16.x
    Signed-off-by: Krzysztof Niemiec <[email protected]>
    Reviewed-by: Janusz Krzysztofik <[email protected]>
    Reviewed-by: Krzysztof Karas <[email protected]>
    Reviewed-by: Andi Shyti <[email protected]>
    Signed-off-by: Andi Shyti <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    (cherry picked from commit 08889b706d4f0b8d2352b7ca29c2d8df4d0787cd)
    Signed-off-by: Jani Nikula <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/mediatek: Fix CCORR mtk_ctm_s31_32_to_s1_n function issue [+ + +]
Author: Jay Liu <[email protected]>
Date:   Sun Sep 21 13:53:05 2025 +0800

    drm/mediatek: Fix CCORR mtk_ctm_s31_32_to_s1_n function issue
    
    [ Upstream commit 20ac36b71c53b8c36c6903b5ca87c75226700a97 ]
    
    if matrixbit is 11,
    The range of color matrix is from 0 to (BIT(12) - 1).
    Values from 0 to (BIT(11) - 1) represent positive numbers,
    values from BIT(11) to (BIT(12) - 1) represent negative numbers.
    For example, -1 need converted to 8191.
    so convert S31.32 to HW Q2.11 format by drm_color_ctm_s31_32_to_qm_n,
    and set int_bits to 2.
    
    Fixes: 738ed4156fba ("drm/mediatek: Add matrix_bits private data for ccorr")
    Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
    Signed-off-by: Jay Liu <[email protected]>
    Link: https://patchwork.kernel.org/project/dri-devel/patch/[email protected]/
    Signed-off-by: Chun-Kuang Hu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/mediatek: Fix device node reference leak in mtk_dp_dt_parse() [+ + +]
Author: Miaoqian Lin <[email protected]>
Date:   Wed Oct 29 15:23:06 2025 +0800

    drm/mediatek: Fix device node reference leak in mtk_dp_dt_parse()
    
    commit a846505a193d7492ad3531e33cacfca31e4bcdd1 upstream.
    
    The function mtk_dp_dt_parse() calls of_graph_get_endpoint_by_regs()
    to get the endpoint device node, but fails to call of_node_put() to release
    the reference when the function returns. This results in a device node
    reference leak.
    
    Fix this by adding the missing of_node_put() call before returning from
    the function.
    
    Found via static analysis and code review.
    
    Fixes: f70ac097a2cf ("drm/mediatek: Add MT8195 Embedded DisplayPort driver")
    Cc: [email protected]
    Signed-off-by: Miaoqian Lin <[email protected]>
    Reviewed-by: Markus Schneider-Pargmann <[email protected]>
    Reviewed-by: CK Hu <[email protected]>
    Link: https://patchwork.kernel.org/project/dri-devel/patch/[email protected]/
    Signed-off-by: Chun-Kuang Hu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/mgag200: Fix big-endian support [+ + +]
Author: René Rebe <[email protected]>
Date:   Mon Dec 8 14:18:27 2025 +0100

    drm/mgag200: Fix big-endian support
    
    commit 6cb31fba137d45e682ce455b8ea364f44d5d4f98 upstream.
    
    Unlike the original, deleted Matrox mga driver, the new mgag200 driver
    has the XRGB frame-buffer byte swapped on big-endian "RISC"
    systems. Fix by enabling byte swapping "PowerPC" OPMODE for any
    __BIG_ENDIAN config.
    
    Fixes: 414c45310625 ("mgag200: initial g200se driver (v2)")
    Signed-off-by: René Rebe <[email protected]>
    Cc: [email protected]
    Reviewed-by: Thomas Zimmermann <[email protected]>
    Signed-off-by: Thomas Zimmermann <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/msm/a6xx: Fix out of bound IO access in a6xx_get_gmu_registers [+ + +]
Author: Akhil P Oommen <[email protected]>
Date:   Tue Nov 18 14:20:28 2025 +0530

    drm/msm/a6xx: Fix out of bound IO access in a6xx_get_gmu_registers
    
    commit 779b68a5bf2764c8ed3aa800e41ba0d5d007e1e7 upstream.
    
    REG_A6XX_GMU_AO_AHB_FENCE_CTRL register falls under GMU's register
    range. So, use gmu_write() routines to write to this register.
    
    Fixes: 1707add81551 ("drm/msm/a6xx: Add a6xx gpu state")
    Cc: [email protected]
    Signed-off-by: Akhil P Oommen <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/688993/
    Message-ID: <[email protected]>
    Signed-off-by: Rob Clark <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/nouveau/dispnv50: Don't call drm_atomic_get_crtc_state() in prepare_fb [+ + +]
Author: Lyude Paul <[email protected]>
Date:   Thu Dec 11 14:02:54 2025 -0500

    drm/nouveau/dispnv50: Don't call drm_atomic_get_crtc_state() in prepare_fb
    
    commit 560271e10b2c86e95ea35afa9e79822e4847f07a upstream.
    
    Since we recently started warning about uses of this function after the
    atomic check phase completes, we've started getting warnings about this in
    nouveau. It appears a misplaced drm_atomic_get_crtc_state() call has been
    hiding in our .prepare_fb callback for a while.
    
    So, fix this by adding a new nv50_head_atom_get_new() function and use that
    in our .prepare_fb callback instead.
    
    Signed-off-by: Lyude Paul <[email protected]>
    Reviewed-by: Dave Airlie <[email protected]>
    Fixes: 1590700d94ac ("drm/nouveau/kms/nv50-: split each resource type into their own source files")
    Cc: <[email protected]> # v4.18+
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/panel: visionox-rm69299: Don't clear all mode flags [+ + +]
Author: Guido Günther <[email protected]>
Date:   Wed Sep 10 18:39:57 2025 +0200

    drm/panel: visionox-rm69299: Don't clear all mode flags
    
    [ Upstream commit 39144b611e9cd4f5814f4098c891b545dd70c536 ]
    
    Don't clear all mode flags. We only want to maek sure we use HS mode
    during unprepare.
    
    Fixes: c7f66d32dd431 ("drm/panel: add support for rm69299 visionox panel")
    Reviewed-by: Neil Armstrong <[email protected]>
    Signed-off-by: Guido Günther <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Signed-off-by: Neil Armstrong <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/ttm: Avoid NULL pointer deref for evicted BOs [+ + +]
Author: Simon Richter <[email protected]>
Date:   Tue Oct 14 01:11:33 2025 +0900

    drm/ttm: Avoid NULL pointer deref for evicted BOs
    
    commit 491adc6a0f9903c32b05f284df1148de39e8e644 upstream.
    
    It is possible for a BO to exist that is not currently associated with a
    resource, e.g. because it has been evicted.
    
    When devcoredump tries to read the contents of all BOs for dumping, we need
    to expect this as well -- in this case, ENODATA is recorded instead of the
    buffer contents.
    
    Fixes: 7d08df5d0bd3 ("drm/ttm: Add ttm_bo_access")
    Fixes: 09ac4fcb3f25 ("drm/ttm: Implement vm_operations_struct.access v2")
    Cc: stable <[email protected]>
    Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/6271
    Signed-off-by: Simon Richter <[email protected]>
    Reviewed-by: Matthew Brost <[email protected]>
    Reviewed-by: Shuicheng Lin <[email protected]>
    Reviewed-by: Christian König <[email protected]>
    Signed-off-by: Matthew Brost <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/vgem-fence: Fix potential deadlock on release [+ + +]
Author: Janusz Krzysztofik <[email protected]>
Date:   Fri Sep 26 17:26:27 2025 +0200

    drm/vgem-fence: Fix potential deadlock on release
    
    [ Upstream commit 78b4d6463e9e69e5103f98b367f8984ad12cdc6f ]
    
    A timer that expires a vgem fence automatically in 10 seconds is now
    released with timer_delete_sync() from fence->ops.release() called on last
    dma_fence_put().  In some scenarios, it can run in IRQ context, which is
    not safe unless TIMER_IRQSAFE is used.  One potentially risky scenario was
    demonstrated in Intel DRM CI trybot, BAT run on machine bat-adlp-6, while
    working on new IGT subtests syncobj_timeline@stress-* as user space
    replacements of some problematic test cases of a dma-fence-chain selftest
    [1].
    
    [117.004338] ================================
    [117.004340] WARNING: inconsistent lock state
    [117.004342] 6.17.0-rc7-CI_DRM_17270-g7644974e648c+ #1 Tainted: G S   U
    [117.004346] --------------------------------
    [117.004347] inconsistent {HARDIRQ-ON-W} -> {IN-HARDIRQ-W} usage.
    [117.004349] swapper/0/0 [HC1[1]:SC1[1]:HE0:SE0] takes:
    [117.004352] ffff888138f86aa8 ((&fence->timer)){?.-.}-{0:0}, at: __timer_delete_sync+0x4b/0x190
    [117.004361] {HARDIRQ-ON-W} state was registered at:
    [117.004363]   lock_acquire+0xc4/0x2e0
    [117.004366]   call_timer_fn+0x80/0x2a0
    [117.004368]   __run_timers+0x231/0x310
    [117.004370]   run_timer_softirq+0x76/0xe0
    [117.004372]   handle_softirqs+0xd4/0x4d0
    [117.004375]   __irq_exit_rcu+0x13f/0x160
    [117.004377]   irq_exit_rcu+0xe/0x20
    [117.004379]   sysvec_apic_timer_interrupt+0xa0/0xc0
    [117.004382]   asm_sysvec_apic_timer_interrupt+0x1b/0x20
    [117.004385]   cpuidle_enter_state+0x12b/0x8a0
    [117.004388]   cpuidle_enter+0x2e/0x50
    [117.004393]   call_cpuidle+0x22/0x60
    [117.004395]   do_idle+0x1fd/0x260
    [117.004398]   cpu_startup_entry+0x29/0x30
    [117.004401]   start_secondary+0x12d/0x160
    [117.004404]   common_startup_64+0x13e/0x141
    [117.004407] irq event stamp: 2282669
    [117.004409] hardirqs last  enabled at (2282668): [<ffffffff8289db71>] _raw_spin_unlock_irqrestore+0x51/0x80
    [117.004414] hardirqs last disabled at (2282669): [<ffffffff82882021>] sysvec_irq_work+0x11/0xc0
    [117.004419] softirqs last  enabled at (2254702): [<ffffffff8289fd00>] __do_softirq+0x10/0x18
    [117.004423] softirqs last disabled at (2254725): [<ffffffff813d4ddf>] __irq_exit_rcu+0x13f/0x160
    [117.004426]
    other info that might help us debug this:
    [117.004429]  Possible unsafe locking scenario:
    [117.004432]        CPU0
    [117.004433]        ----
    [117.004434]   lock((&fence->timer));
    [117.004436]   <Interrupt>
    [117.004438]     lock((&fence->timer));
    [117.004440]
     *** DEADLOCK ***
    [117.004443] 1 lock held by swapper/0/0:
    [117.004445]  #0: ffffc90000003d50 ((&fence->timer)){?.-.}-{0:0}, at: call_timer_fn+0x7a/0x2a0
    [117.004450]
    stack backtrace:
    [117.004453] CPU: 0 UID: 0 PID: 0 Comm: swapper/0 Tainted: G S   U              6.17.0-rc7-CI_DRM_17270-g7644974e648c+ #1 PREEMPT(voluntary)
    [117.004455] Tainted: [S]=CPU_OUT_OF_SPEC, [U]=USER
    [117.004455] Hardware name: Intel Corporation Alder Lake Client Platform/AlderLake-P DDR4 RVP, BIOS RPLPFWI1.R00.4035.A00.2301200723 01/20/2023
    [117.004456] Call Trace:
    [117.004456]  <IRQ>
    [117.004457]  dump_stack_lvl+0x91/0xf0
    [117.004460]  dump_stack+0x10/0x20
    [117.004461]  print_usage_bug.part.0+0x260/0x360
    [117.004463]  mark_lock+0x76e/0x9c0
    [117.004465]  ? register_lock_class+0x48/0x4a0
    [117.004467]  __lock_acquire+0xbc3/0x2860
    [117.004469]  lock_acquire+0xc4/0x2e0
    [117.004470]  ? __timer_delete_sync+0x4b/0x190
    [117.004472]  ? __timer_delete_sync+0x4b/0x190
    [117.004473]  __timer_delete_sync+0x68/0x190
    [117.004474]  ? __timer_delete_sync+0x4b/0x190
    [117.004475]  timer_delete_sync+0x10/0x20
    [117.004476]  vgem_fence_release+0x19/0x30 [vgem]
    [117.004478]  dma_fence_release+0xc1/0x3b0
    [117.004480]  ? dma_fence_release+0xa1/0x3b0
    [117.004481]  dma_fence_chain_release+0xe7/0x130
    [117.004483]  dma_fence_release+0xc1/0x3b0
    [117.004484]  ? _raw_spin_unlock_irqrestore+0x27/0x80
    [117.004485]  dma_fence_chain_irq_work+0x59/0x80
    [117.004487]  irq_work_single+0x75/0xa0
    [117.004490]  irq_work_run_list+0x33/0x60
    [117.004491]  irq_work_run+0x18/0x40
    [117.004493]  __sysvec_irq_work+0x35/0x170
    [117.004494]  sysvec_irq_work+0x47/0xc0
    [117.004496]  asm_sysvec_irq_work+0x1b/0x20
    [117.004497] RIP: 0010:_raw_spin_unlock_irqrestore+0x57/0x80
    [117.004499] Code: 00 75 1c 65 ff 0d d9 34 68 01 74 20 5b 41 5c 5d 31 c0 31 d2 31 c9 31 f6 31 ff c3 cc cc cc cc e8 7f 9d d3 fe fb 0f 1f 44 00 00 <eb> d7 0f 1f 44 00 00 5b 41 5c 5d 31 c0 31 d2 31 c9 31 f6 31 ff c3
    [117.004499] RSP: 0018:ffffc90000003cf0 EFLAGS: 00000246
    [117.004500] RAX: 0000000000000000 RBX: ffff888155e94c40 RCX: 0000000000000000
    [117.004501] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
    [117.004502] RBP: ffffc90000003d00 R08: 0000000000000000 R09: 0000000000000000
    [117.004502] R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000246
    [117.004502] R13: 0000000000000001 R14: 0000000000000246 R15: ffff888155e94c80
    [117.004506]  dma_fence_signal+0x49/0xb0
    [117.004507]  ? __pfx_vgem_fence_timeout+0x10/0x10 [vgem]
    [117.004508]  vgem_fence_timeout+0x12/0x20 [vgem]
    [117.004509]  call_timer_fn+0xa1/0x2a0
    [117.004512]  ? __pfx_vgem_fence_timeout+0x10/0x10 [vgem]
    [117.004513]  __run_timers+0x231/0x310
    [117.004514]  ? tmigr_handle_remote+0x2ac/0x560
    [117.004517]  timer_expire_remote+0x46/0x70
    [117.004518]  tmigr_handle_remote+0x433/0x560
    [117.004520]  ? __run_timers+0x239/0x310
    [117.004521]  ? run_timer_softirq+0x21/0xe0
    [117.004522]  ? lock_release+0xce/0x2a0
    [117.004524]  run_timer_softirq+0xcf/0xe0
    [117.004525]  handle_softirqs+0xd4/0x4d0
    [117.004526]  __irq_exit_rcu+0x13f/0x160
    [117.004527]  irq_exit_rcu+0xe/0x20
    [117.004528]  sysvec_apic_timer_interrupt+0xa0/0xc0
    [117.004529]  </IRQ>
    [117.004529]  <TASK>
    [117.004529]  asm_sysvec_apic_timer_interrupt+0x1b/0x20
    [117.004530] RIP: 0010:cpuidle_enter_state+0x12b/0x8a0
    [117.004532] Code: 48 0f a3 05 97 ce 0e 01 0f 82 2e 03 00 00 31 ff e8 8a 41 bd fe 80 7d d0 00 0f 85 11 03 00 00 e8 8b 06 d5 fe fb 0f 1f 44 00 00 <45> 85 f6 0f 88 67 02 00 00 4d 63 ee 49 83 fd 0a 0f 83 34 06 00 00
    [117.004532] RSP: 0018:ffffffff83403d88 EFLAGS: 00000246
    [117.004533] RAX: 0000000000000000 RBX: ffff88888f046440 RCX: 0000000000000000
    [117.004533] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
    [117.004534] RBP: ffffffff83403dd8 R08: 0000000000000000 R09: 0000000000000000
    [117.004534] R10: 0000000000000000 R11: 0000000000000000 R12: ffffffff837cbe80
    [117.004534] R13: 0000000000000004 R14: 0000000000000004 R15: 0000001ad1df466b
    [117.004537]  ? cpuidle_enter_state+0x125/0x8a0
    [117.004538]  ? sched_clock_noinstr+0x9/0x10
    [117.004540]  cpuidle_enter+0x2e/0x50
    [117.004542]  call_cpuidle+0x22/0x60
    [117.004542]  do_idle+0x1fd/0x260
    [117.004544]  cpu_startup_entry+0x29/0x30
    [117.004546]  rest_init+0x104/0x200
    [117.004548]  start_kernel+0x93d/0xbd0
    [117.004550]  ? load_ucode_intel_bsp+0x2a/0x90
    [117.004551]  ? sme_unmap_bootdata+0x14/0x80
    [117.004554]  x86_64_start_reservations+0x18/0x30
    [117.004555]  x86_64_start_kernel+0xfd/0x150
    [117.004556]  ? soft_restart_cpu+0x14/0x14
    [117.004558]  common_startup_64+0x13e/0x141
    [117.004560]  </TASK>
    [117.004565] ------------[ cut here ]------------
    [117.004692] WARNING: CPU: 0 PID: 0 at kernel/time/timer.c:1610 __timer_delete_sync+0x126/0x190
    [117.004697] Modules linked in: vgem snd_hda_codec_intelhdmi snd_hda_codec_hdmi i915 prime_numbers ttm drm_buddy drm_display_helper cec rc_core i2c_algo_bit hid_sensor_custom hid_sensor_hub hid_generic intel_ishtp_hid hid intel_uncore_frequency intel_uncore_frequency_common x86_pkg_temp_thermal intel_powerclamp cmdlinepart ee1004 r8153_ecm spi_nor coretemp cdc_ether mei_pxp mei_hdcp usbnet mtd intel_rapl_msr wmi_bmof kvm_intel snd_hda_intel snd_intel_dspcfg processor_thermal_device_pci kvm snd_hda_codec processor_thermal_device irqbypass processor_thermal_wt_hint polyval_clmulni platform_temperature_control snd_hda_core ghash_clmulni_intel processor_thermal_rfim spi_pxa2xx_platform snd_hwdep aesni_intel processor_thermal_rapl dw_dmac snd_pcm dw_dmac_core intel_rapl_common r8152 rapl mii intel_cstate spi_pxa2xx_core i2c_i801 processor_thermal_wt_req snd_timer i2c_mux mei_me intel_ish_ipc processor_thermal_power_floor e1000e snd i2c_smbus spi_intel_pci processor_thermal_mbox mei soundcore intel_ishtp thunderbolt idma64
    [117.004733]  spi_intel int340x_thermal_zone igen6_edac binfmt_misc intel_skl_int3472_tps68470 intel_pmc_core tps68470_regulator video clk_tps68470 pmt_telemetry pmt_discovery nls_iso8859_1 pmt_class intel_pmc_ssram_telemetry intel_skl_int3472_discrete int3400_thermal intel_hid intel_skl_int3472_common acpi_thermal_rel intel_vsec wmi pinctrl_tigerlake acpi_tad sparse_keymap acpi_pad dm_multipath msr nvme_fabrics fuse efi_pstore nfnetlink autofs4
    [117.004782] CPU: 0 UID: 0 PID: 0 Comm: swapper/0 Tainted: G S   U              6.17.0-rc7-CI_DRM_17270-g7644974e648c+ #1 PREEMPT(voluntary)
    [117.004787] Tainted: [S]=CPU_OUT_OF_SPEC, [U]=USER
    [117.004789] Hardware name: Intel Corporation Alder Lake Client Platform/AlderLake-P DDR4 RVP, BIOS RPLPFWI1.R00.4035.A00.2301200723 01/20/2023
    [117.004793] RIP: 0010:__timer_delete_sync+0x126/0x190
    [117.004795] Code: 31 c0 45 31 c9 c3 cc cc cc cc 48 8b 75 d0 45 84 f6 74 63 49 c7 45 18 00 00 00 00 48 89 c7 e8 51 46 39 01 f3 90 e9 66 ff ff ff <0f> 0b e9 5f ff ff ff e8 ee e4 0c 00 49 8d 5d 28 45 31 c9 31 c9 4c
    [117.004801] RSP: 0018:ffffc90000003a40 EFLAGS: 00010046
    [117.004804] RAX: ffffffff815093fb RBX: ffff888138f86aa8 RCX: 0000000000000000
    [117.004807] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
    [117.004809] RBP: ffffc90000003a70 R08: 0000000000000000 R09: 0000000000000000
    [117.004812] R10: 0000000000000000 R11: 0000000000000000 R12: ffffffff815093fb
    [117.004814] R13: ffff888138f86a80 R14: 0000000000000000 R15: 0000000000000000
    [117.004817] FS:  0000000000000000(0000) GS:ffff88890b0f7000(0000) knlGS:0000000000000000
    [117.004820] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [117.004823] CR2: 00005db8131eb7f0 CR3: 0000000003448000 CR4: 0000000000f52ef0
    [117.004826] PKRU: 55555554
    [117.004827] Call Trace:
    [117.004829]  <IRQ>
    [117.004831]  timer_delete_sync+0x10/0x20
    [117.004833]  vgem_fence_release+0x19/0x30 [vgem]
    [117.004836]  dma_fence_release+0xc1/0x3b0
    [117.004838]  ? dma_fence_release+0xa1/0x3b0
    [117.004841]  dma_fence_chain_release+0xe7/0x130
    [117.004844]  dma_fence_release+0xc1/0x3b0
    [117.004847]  ? _raw_spin_unlock_irqrestore+0x27/0x80
    [117.004850]  dma_fence_chain_irq_work+0x59/0x80
    [117.004853]  irq_work_single+0x75/0xa0
    [117.004857]  irq_work_run_list+0x33/0x60
    [117.004860]  irq_work_run+0x18/0x40
    [117.004863]  __sysvec_irq_work+0x35/0x170
    [117.004865]  sysvec_irq_work+0x47/0xc0
    [117.004868]  asm_sysvec_irq_work+0x1b/0x20
    [117.004871] RIP: 0010:_raw_spin_unlock_irqrestore+0x57/0x80
    [117.004874] Code: 00 75 1c 65 ff 0d d9 34 68 01 74 20 5b 41 5c 5d 31 c0 31 d2 31 c9 31 f6 31 ff c3 cc cc cc cc e8 7f 9d d3 fe fb 0f 1f 44 00 00 <eb> d7 0f 1f 44 00 00 5b 41 5c 5d 31 c0 31 d2 31 c9 31 f6 31 ff c3
    [117.004879] RSP: 0018:ffffc90000003cf0 EFLAGS: 00000246
    [117.004882] RAX: 0000000000000000 RBX: ffff888155e94c40 RCX: 0000000000000000
    [117.004884] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
    [117.004887] RBP: ffffc90000003d00 R08: 0000000000000000 R09: 0000000000000000
    [117.004890] R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000246
    [117.004892] R13: 0000000000000001 R14: 0000000000000246 R15: ffff888155e94c80
    [117.004897]  dma_fence_signal+0x49/0xb0
    [117.004899]  ? __pfx_vgem_fence_timeout+0x10/0x10 [vgem]
    [117.004902]  vgem_fence_timeout+0x12/0x20 [vgem]
    [117.004904]  call_timer_fn+0xa1/0x2a0
    [117.004908]  ? __pfx_vgem_fence_timeout+0x10/0x10 [vgem]
    [117.004910]  __run_timers+0x231/0x310
    [117.004913]  ? tmigr_handle_remote+0x2ac/0x560
    [117.004917]  timer_expire_remote+0x46/0x70
    [117.004919]  tmigr_handle_remote+0x433/0x560
    [117.004923]  ? __run_timers+0x239/0x310
    [117.004925]  ? run_timer_softirq+0x21/0xe0
    [117.004928]  ? lock_release+0xce/0x2a0
    [117.004931]  run_timer_softirq+0xcf/0xe0
    [117.004933]  handle_softirqs+0xd4/0x4d0
    [117.004936]  __irq_exit_rcu+0x13f/0x160
    [117.004938]  irq_exit_rcu+0xe/0x20
    [117.004940]  sysvec_apic_timer_interrupt+0xa0/0xc0
    [117.004943]  </IRQ>
    [117.004944]  <TASK>
    [117.004946]  asm_sysvec_apic_timer_interrupt+0x1b/0x20
    [117.004949] RIP: 0010:cpuidle_enter_state+0x12b/0x8a0
    [117.004953] Code: 48 0f a3 05 97 ce 0e 01 0f 82 2e 03 00 00 31 ff e8 8a 41 bd fe 80 7d d0 00 0f 85 11 03 00 00 e8 8b 06 d5 fe fb 0f 1f 44 00 00 <45> 85 f6 0f 88 67 02 00 00 4d 63 ee 49 83 fd 0a 0f 83 34 06 00 00
    [117.004961] RSP: 0018:ffffffff83403d88 EFLAGS: 00000246
    [117.004963] RAX: 0000000000000000 RBX: ffff88888f046440 RCX: 0000000000000000
    [117.004966] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
    [117.004968] RBP: ffffffff83403dd8 R08: 0000000000000000 R09: 0000000000000000
    [117.004971] R10: 0000000000000000 R11: 0000000000000000 R12: ffffffff837cbe80
    [117.004974] R13: 0000000000000004 R14: 0000000000000004 R15: 0000001ad1df466b
    [117.004978]  ? cpuidle_enter_state+0x125/0x8a0
    [117.004981]  ? sched_clock_noinstr+0x9/0x10
    [117.004985]  cpuidle_enter+0x2e/0x50
    [117.004989]  call_cpuidle+0x22/0x60
    [117.004991]  do_idle+0x1fd/0x260
    [117.005001]  cpu_startup_entry+0x29/0x30
    [117.005004]  rest_init+0x104/0x200
    [117.005008]  start_kernel+0x93d/0xbd0
    [117.005011]  ? load_ucode_intel_bsp+0x2a/0x90
    [117.005014]  ? sme_unmap_bootdata+0x14/0x80
    [117.005017]  x86_64_start_reservations+0x18/0x30
    [117.005020]  x86_64_start_kernel+0xfd/0x150
    [117.005023]  ? soft_restart_cpu+0x14/0x14
    [117.005026]  common_startup_64+0x13e/0x141
    [117.005030]  </TASK>
    [117.005032] irq event stamp: 2282669
    [117.005034] hardirqs last  enabled at (2282668): [<ffffffff8289db71>] _raw_spin_unlock_irqrestore+0x51/0x80
    [117.005038] hardirqs last disabled at (2282669): [<ffffffff82882021>] sysvec_irq_work+0x11/0xc0
    [117.005043] softirqs last  enabled at (2254702): [<ffffffff8289fd00>] __do_softirq+0x10/0x18
    [117.005047] softirqs last disabled at (2254725): [<ffffffff813d4ddf>] __irq_exit_rcu+0x13f/0x160
    [117.005051] ---[ end trace 0000000000000000 ]---
    
    Make the timer IRQ safe.
    
    [1] https://patchwork.freedesktop.org/series/154987/#rev2
    
    Fixes: 4077798484459 ("drm/vgem: Attach sw fences to exported vGEM dma-buf (ioctl)")
    Signed-off-by: Janusz Krzysztofik <[email protected]>
    Reviewed-by: Christian König <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Maarten Lankhorst <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/vmwgfx: Fix a null-ptr access in the cursor snooper [+ + +]
Author: Zack Rusin <[email protected]>
Date:   Wed Dec 24 00:36:52 2025 -0800

    drm/vmwgfx: Fix a null-ptr access in the cursor snooper
    
    [ Upstream commit 5ac2c0279053a2c5265d46903432fb26ae2d0da2 ]
    
    Check that the resource which is converted to a surface exists before
    trying to use the cursor snooper on it.
    
    vmw_cmd_res_check allows explicit invalid (SVGA3D_INVALID_ID) identifiers
    because some svga commands accept SVGA3D_INVALID_ID to mean "no surface",
    unfortunately functions that accept the actual surfaces as objects might
    (and in case of the cursor snooper, do not) be able to handle null
    objects. Make sure that we validate not only the identifier (via the
    vmw_cmd_res_check) but also check that the actual resource exists before
    trying to do something with it.
    
    Fixes unchecked null-ptr reference in the snooping code.
    
    Signed-off-by: Zack Rusin <[email protected]>
    Fixes: c0951b797e7d ("drm/vmwgfx: Refactor resource management")
    Reported-by: Kuzey Arda Bulut <[email protected]>
    Cc: Broadcom internal kernel review list <[email protected]>
    Cc: [email protected]
    Reviewed-by: Ian Forbes <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    [Shivani: Modified to apply on v5.10.y-v6.1.y]
    Signed-off-by: Shivani Agarwal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/vmwgfx: Use kref in vmw_bo_dirty [+ + +]
Author: Ian Forbes <[email protected]>
Date:   Thu Oct 30 14:36:40 2025 -0500

    drm/vmwgfx: Use kref in vmw_bo_dirty
    
    [ Upstream commit c1962742ffff7e245f935903a4658eb6f94f6058 ]
    
    Rather than using an ad hoc reference count use kref which is atomic
    and has underflow warnings.
    
    Signed-off-by: Ian Forbes <[email protected]>
    Signed-off-by: Zack Rusin <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
dt-bindings: PCI: amlogic: Fix the register name of the DBI region [+ + +]
Author: Manivannan Sadhasivam <[email protected]>
Date:   Sat Nov 1 09:59:40 2025 +0530

    dt-bindings: PCI: amlogic: Fix the register name of the DBI region
    
    [ Upstream commit 4813dea9e272ba0a57c50b8d51d440dd8e3ccdd7 ]
    
    Binding incorrectly specifies the 'DBI' region as 'ELBI'. DBI is a must
    have region for DWC controllers as it has the Root Port and controller
    specific registers, while ELBI has optional registers.
    
    Hence, fix the binding. Though this is an ABI break, this change is needed
    to accurately describe the PCI memory map.
    
    Fixes: 7cd210391101 ("dt-bindings: PCI: meson: add DT bindings for Amlogic Meson PCIe controller")
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

dt-bindings: PCI: convert amlogic,meson-pcie.txt to dt-schema [+ + +]
Author: Neil Armstrong <[email protected]>
Date:   Wed Mar 8 14:27:33 2023 +0100

    dt-bindings: PCI: convert amlogic,meson-pcie.txt to dt-schema
    
    [ Upstream commit b80b848bdf56bd402b7a91aea5b77cec93dfe4c2 ]
    
    Convert the Amlogic Meson AXG DWC PCIe SoC controller bindings to
    dt-schema.
    
    Link: https://lore.kernel.org/r/20221117-b4-amlogic-bindings-convert-v4-5-34e623dbf789@linaro.org
    Signed-off-by: Neil Armstrong <[email protected]>
    Signed-off-by: Lorenzo Pieralisi <[email protected]>
    Reviewed-by: Krzysztof Kozlowski <[email protected]>
    Stable-dep-of: 4813dea9e272 ("dt-bindings: PCI: amlogic: Fix the register name of the DBI region")
    Signed-off-by: Sasha Levin <[email protected]>

 
e1000: fix OOB in e1000_tbi_should_accept() [+ + +]
Author: Guangshuo Li <[email protected]>
Date:   Mon Dec 1 11:40:58 2025 +0800

    e1000: fix OOB in e1000_tbi_should_accept()
    
    commit 9c72a5182ed92904d01057f208c390a303f00a0f upstream.
    
    In e1000_tbi_should_accept() we read the last byte of the frame via
    'data[length - 1]' to evaluate the TBI workaround. If the descriptor-
    reported length is zero or larger than the actual RX buffer size, this
    read goes out of bounds and can hit unrelated slab objects. The issue
    is observed from the NAPI receive path (e1000_clean_rx_irq):
    
    ==================================================================
    BUG: KASAN: slab-out-of-bounds in e1000_tbi_should_accept+0x610/0x790
    Read of size 1 at addr ffff888014114e54 by task sshd/363
    
    CPU: 0 PID: 363 Comm: sshd Not tainted 5.18.0-rc1 #1
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.12.0-59-gc9ba5276e321-prebuilt.qemu.org 04/01/2014
    Call Trace:
     <IRQ>
     dump_stack_lvl+0x5a/0x74
     print_address_description+0x7b/0x440
     print_report+0x101/0x200
     kasan_report+0xc1/0xf0
     e1000_tbi_should_accept+0x610/0x790
     e1000_clean_rx_irq+0xa8c/0x1110
     e1000_clean+0xde2/0x3c10
     __napi_poll+0x98/0x380
     net_rx_action+0x491/0xa20
     __do_softirq+0x2c9/0x61d
     do_softirq+0xd1/0x120
     </IRQ>
     <TASK>
     __local_bh_enable_ip+0xfe/0x130
     ip_finish_output2+0x7d5/0xb00
     __ip_queue_xmit+0xe24/0x1ab0
     __tcp_transmit_skb+0x1bcb/0x3340
     tcp_write_xmit+0x175d/0x6bd0
     __tcp_push_pending_frames+0x7b/0x280
     tcp_sendmsg_locked+0x2e4f/0x32d0
     tcp_sendmsg+0x24/0x40
     sock_write_iter+0x322/0x430
     vfs_write+0x56c/0xa60
     ksys_write+0xd1/0x190
     do_syscall_64+0x43/0x90
     entry_SYSCALL_64_after_hwframe+0x44/0xae
    RIP: 0033:0x7f511b476b10
    Code: 73 01 c3 48 8b 0d 88 d3 2b 00 f7 d8 64 89 01 48 83 c8 ff c3 66 0f 1f 44 00 00 83 3d f9 2b 2c 00 00 75 10 b8 01 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 31 c3 48 83 ec 08 e8 8e 9b 01 00 48 89 04 24
    RSP: 002b:00007ffc9211d4e8 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
    RAX: ffffffffffffffda RBX: 0000000000004024 RCX: 00007f511b476b10
    RDX: 0000000000004024 RSI: 0000559a9385962c RDI: 0000000000000003
    RBP: 0000559a9383a400 R08: fffffffffffffff0 R09: 0000000000004f00
    R10: 0000000000000070 R11: 0000000000000246 R12: 0000000000000000
    R13: 00007ffc9211d57f R14: 0000559a9347bde7 R15: 0000000000000003
     </TASK>
    Allocated by task 1:
     __kasan_krealloc+0x131/0x1c0
     krealloc+0x90/0xc0
     add_sysfs_param+0xcb/0x8a0
     kernel_add_sysfs_param+0x81/0xd4
     param_sysfs_builtin+0x138/0x1a6
     param_sysfs_init+0x57/0x5b
     do_one_initcall+0x104/0x250
     do_initcall_level+0x102/0x132
     do_initcalls+0x46/0x74
     kernel_init_freeable+0x28f/0x393
     kernel_init+0x14/0x1a0
     ret_from_fork+0x22/0x30
    The buggy address belongs to the object at ffff888014114000
     which belongs to the cache kmalloc-2k of size 2048
    The buggy address is located 1620 bytes to the right of
     2048-byte region [ffff888014114000, ffff888014114800]
    The buggy address belongs to the physical page:
    page:ffffea0000504400 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x14110
    head:ffffea0000504400 order:3 compound_mapcount:0 compound_pincount:0
    flags: 0x100000000010200(slab|head|node=0|zone=1)
    raw: 0100000000010200 0000000000000000 dead000000000001 ffff888013442000
    raw: 0000000000000000 0000000000080008 00000001ffffffff 0000000000000000
    page dumped because: kasan: bad access detected
    ==================================================================
    
    This happens because the TBI check unconditionally dereferences the last
    byte without validating the reported length first:
    
            u8 last_byte = *(data + length - 1);
    
    Fix by rejecting the frame early if the length is zero, or if it exceeds
    adapter->rx_buffer_len. This preserves the TBI workaround semantics for
    valid frames and prevents touching memory beyond the RX buffer.
    
    Fixes: 2037110c96d5 ("e1000: move tbi workaround code into helper function")
    Cc: [email protected]
    Signed-off-by: Guangshuo Li <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Reviewed-by: Aleksandr Loktionov <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
efi/cper: Add a new helper function to print bitmasks [+ + +]
Author: Mauro Carvalho Chehab <[email protected]>
Date:   Thu Aug 14 09:52:54 2025 -0700

    efi/cper: Add a new helper function to print bitmasks
    
    [ Upstream commit a976d790f49499ccaa0f991788ad8ebf92e7fd5c ]
    
    Add a helper function to print a string with names associated
    to each bit field.
    
    A typical example is:
    
            const char * const bits[] = {
                    "bit 3 name",
                    "bit 4 name",
                    "bit 5 name",
            };
            char str[120];
            unsigned int bitmask = BIT(3) | BIT(5);
    
            #define MASK  GENMASK(5,3)
    
            cper_bits_to_str(str, sizeof(str), FIELD_GET(MASK, bitmask),
                             bits, ARRAY_SIZE(bits));
    
    The above code fills string "str" with "bit 3 name|bit 5 name".
    
    Reviewed-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    Acked-by: Borislav Petkov (AMD) <[email protected]>
    Signed-off-by: Ard Biesheuvel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

efi/cper: Adjust infopfx size to accept an extra space [+ + +]
Author: Mauro Carvalho Chehab <[email protected]>
Date:   Thu Aug 14 09:52:53 2025 -0700

    efi/cper: Adjust infopfx size to accept an extra space
    
    [ Upstream commit 8ad2c72e21efb3dc76c5b14089fa7984cdd87898 ]
    
    Compiling with W=1 with werror enabled produces an error:
    
    drivers/firmware/efi/cper-arm.c: In function ‘cper_print_proc_arm’:
    drivers/firmware/efi/cper-arm.c:298:64: error: ‘snprintf’ output may be truncated before the last format character [-Werror=format-truncation=]
      298 |                         snprintf(infopfx, sizeof(infopfx), "%s ", newpfx);
          |                                                                ^
    drivers/firmware/efi/cper-arm.c:298:25: note: ‘snprintf’ output between 2 and 65 bytes into a destination of size 64
      298 |                         snprintf(infopfx, sizeof(infopfx), "%s ", newpfx);
          |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    As the logic there adds an space at the end of infopx buffer.
    Add an extra space to avoid such warning.
    
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    Reviewed-by: Jonathan Cameron <[email protected]>
    Acked-by: Borislav Petkov (AMD) <[email protected]>
    Signed-off-by: Ard Biesheuvel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

efi/cper: align ARM CPER type with UEFI 2.9A/2.10 specs [+ + +]
Author: Mauro Carvalho Chehab <[email protected]>
Date:   Thu Aug 14 09:52:55 2025 -0700

    efi/cper: align ARM CPER type with UEFI 2.9A/2.10 specs
    
    [ Upstream commit 96b010536ee020e716d28d9b359a4bcd18800aeb ]
    
    Up to UEFI spec 2.9, the type byte of CPER struct for ARM processor
    was defined simply as:
    
    Type at byte offset 4:
    
            - Cache error
            - TLB Error
            - Bus Error
            - Micro-architectural Error
            All other values are reserved
    
    Yet, there was no information about how this would be encoded.
    
    Spec 2.9A errata corrected it by defining:
    
            - Bit 1 - Cache Error
            - Bit 2 - TLB Error
            - Bit 3 - Bus Error
            - Bit 4 - Micro-architectural Error
            All other values are reserved
    
    That actually aligns with the values already defined on older
    versions at N.2.4.1. Generic Processor Error Section.
    
    Spec 2.10 also preserve the same encoding as 2.9A.
    
    Adjust CPER and GHES handling code for both generic and ARM
    processors to properly handle UEFI 2.9A and 2.10 encoding.
    
    Link: https://uefi.org/specs/UEFI/2.10/Apx_N_Common_Platform_Error_Record.html#arm-processor-error-information
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    Reviewed-by: Jonathan Cameron <[email protected]>
    Acked-by: Borislav Petkov (AMD) <[email protected]>
    Signed-off-by: Ard Biesheuvel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
efi/libstub: Fix page table access in 5-level to 4-level paging transition [+ + +]
Author: Usama Arif <[email protected]>
Date:   Mon Nov 3 14:09:23 2025 +0000

    efi/libstub: Fix page table access in 5-level to 4-level paging transition
    
    [ Upstream commit 84361123413efc84b06f3441c6c827b95d902732 ]
    
    When transitioning from 5-level to 4-level paging, the existing code
    incorrectly accesses page table entries by directly dereferencing CR3 and
    applying PAGE_MASK. This approach has several issues:
    
    - __native_read_cr3() returns the raw CR3 register value, which on x86_64
      includes not just the physical address but also flags Bits above the
      physical address width of the system (i.e. above __PHYSICAL_MASK_SHIFT) are
      also not masked.
    
    - The pgd value is masked by PAGE_SIZE which doesn't take into account the
      higher bits such as _PAGE_BIT_NOPTISHADOW.
    
    Replace this with proper accessor functions:
    
    - native_read_cr3_pa(): Uses CR3_ADDR_MASK to additionally mask metadata out
      of CR3 (like SME or LAM bits). All remaining bits are real address bits or
      reserved and must be 0.
    
    - mask pgd value with PTE_PFN_MASK instead of PAGE_MASK, accounting for flags
      above bit 51 (_PAGE_BIT_NOPTISHADOW in particular). Bits below 51, but above
      the max physical address are reserved and must be 0.
    
    Fixes: cb1c9e02b0c1 ("x86/efistub: Perform 4/5 level paging switch from the stub")
    Reported-by: Michael van der Westhuizen <[email protected]>
    Reported-by: Tobias Fleig <[email protected]>
    Co-developed-by: Kiryl Shutsemau <[email protected]>
    Signed-off-by: Kiryl Shutsemau <[email protected]>
    Signed-off-by: Usama Arif <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Reviewed-by: Ard Biesheuvel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
ethtool: Avoid overflowing userspace buffer on stats query [+ + +]
Author: Gal Pressman <[email protected]>
Date:   Mon Dec 8 14:19:01 2025 +0200

    ethtool: Avoid overflowing userspace buffer on stats query
    
    [ Upstream commit 7b07be1ff1cb6c49869910518650e8d0abc7d25f ]
    
    The ethtool -S command operates across three ioctl calls:
    ETHTOOL_GSSET_INFO for the size, ETHTOOL_GSTRINGS for the names, and
    ETHTOOL_GSTATS for the values.
    
    If the number of stats changes between these calls (e.g., due to device
    reconfiguration), userspace's buffer allocation will be incorrect,
    potentially leading to buffer overflow.
    
    Drivers are generally expected to maintain stable stat counts, but some
    drivers (e.g., mlx5, bnx2x, bna, ksz884x) use dynamic counters, making
    this scenario possible.
    
    Some drivers try to handle this internally:
    - bnad_get_ethtool_stats() returns early in case stats.n_stats is not
      equal to the driver's stats count.
    - micrel/ksz884x also makes sure not to write anything beyond
      stats.n_stats and overflow the buffer.
    
    However, both use stats.n_stats which is already assigned with the value
    returned from get_sset_count(), hence won't solve the issue described
    here.
    
    Change ethtool_get_strings(), ethtool_get_stats(),
    ethtool_get_phy_stats() to not return anything in case of a mismatch
    between userspace's size and get_sset_size(), to prevent buffer
    overflow.
    The returned n_stats value will be equal to zero, to reflect that
    nothing has been returned.
    
    This could result in one of two cases when using upstream ethtool,
    depending on when the size change is detected:
    1. When detected in ethtool_get_strings():
        # ethtool -S eth2
        no stats available
    
    2. When detected in get stats, all stats will be reported as zero.
    
    Both cases are presumably transient, and a subsequent ethtool call
    should succeed.
    
    Other than the overflow avoidance, these two cases are very evident (no
    output/cleared stats), which is arguably better than presenting
    incorrect/shifted stats.
    I also considered returning an error instead of a "silent" response, but
    that seems more destructive towards userspace apps.
    
    Notes:
    - This patch does not claim to fix the inherent race, it only makes sure
      that we do not overflow the userspace buffer, and makes for a more
      predictable behavior.
    
    - RTNL lock is held during each ioctl, the race window exists between
      the separate ioctl calls when the lock is released.
    
    - Userspace ethtool always fills stats.n_stats, but it is likely that
      these stats ioctls are implemented in other userspace applications
      which might not fill it. The added code checks that it's not zero,
      to prevent any regressions.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reviewed-by: Dragos Tatulea <[email protected]>
    Reviewed-by: Tariq Toukan <[email protected]>
    Signed-off-by: Gal Pressman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
exfat: fix remount failure in different process environments [+ + +]
Author: Yuezhang Mo <[email protected]>
Date:   Fri Nov 28 17:51:10 2025 +0800

    exfat: fix remount failure in different process environments
    
    [ Upstream commit 51fc7b4ce10ccab8ea5e4876bcdc42cf5202a0ef ]
    
    The kernel test robot reported that the exFAT remount operation
    failed. The reason for the failure was that the process's umask
    is different between mount and remount, causing fs_fmask and
    fs_dmask are changed.
    
    Potentially, both gid and uid may also be changed. Therefore, when
    initializing fs_context for remount, inherit these mount options
    from the options used during mount.
    
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-lkp/[email protected]
    Signed-off-by: Yuezhang Mo <[email protected]>
    Signed-off-by: Namjae Jeon <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Linux: Expand the type of nfs_fattr->valid [+ + +]
Author: Trond Myklebust <[email protected]>
Date:   Thu May 29 06:45:45 2025 -0400

    Expand the type of nfs_fattr->valid
    
    [ Upstream commit ce60ab3964782df9ba34f0a64c0bc766dd508bde ]
    
    We need to be able to track more than 32 attributes per inode.
    
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Lance Shelton <[email protected]>
    Signed-off-by: Benjamin Coddington <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Link: https://lore.kernel.org/r/1e3405fca54efd0be7c91c1da77917b94f5dfcc4.1748515333.git.bcodding@redhat.com
    Signed-off-by: Trond Myklebust <[email protected]>
    Stable-dep-of: 2b092175f5e3 ("NFS: Fix inheritance of the block sizes when automounting")
    Signed-off-by: Sasha Levin <[email protected]>

 
ext4: add i_data_sem protection in ext4_destroy_inline_data_nolock() [+ + +]
Author: Alexey Nepomnyashih <[email protected]>
Date:   Tue Nov 4 09:33:25 2025 +0000

    ext4: add i_data_sem protection in ext4_destroy_inline_data_nolock()
    
    commit 0cd8feea8777f8d9b9a862b89c688b049a5c8475 upstream.
    
    Fix a race between inline data destruction and block mapping.
    
    The function ext4_destroy_inline_data_nolock() changes the inode data
    layout by clearing EXT4_INODE_INLINE_DATA and setting EXT4_INODE_EXTENTS.
    At the same time, another thread may execute ext4_map_blocks(), which
    tests EXT4_INODE_EXTENTS to decide whether to call ext4_ext_map_blocks()
    or ext4_ind_map_blocks().
    
    Without i_data_sem protection, ext4_ind_map_blocks() may receive inode
    with EXT4_INODE_EXTENTS flag and triggering assert.
    
    kernel BUG at fs/ext4/indirect.c:546!
    EXT4-fs (loop2): unmounting filesystem.
    invalid opcode: 0000 [#1] PREEMPT SMP KASAN NOPTI
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014
    RIP: 0010:ext4_ind_map_blocks.cold+0x2b/0x5a fs/ext4/indirect.c:546
    
    Call Trace:
     <TASK>
     ext4_map_blocks+0xb9b/0x16f0 fs/ext4/inode.c:681
     _ext4_get_block+0x242/0x590 fs/ext4/inode.c:822
     ext4_block_write_begin+0x48b/0x12c0 fs/ext4/inode.c:1124
     ext4_write_begin+0x598/0xef0 fs/ext4/inode.c:1255
     ext4_da_write_begin+0x21e/0x9c0 fs/ext4/inode.c:3000
     generic_perform_write+0x259/0x5d0 mm/filemap.c:3846
     ext4_buffered_write_iter+0x15b/0x470 fs/ext4/file.c:285
     ext4_file_write_iter+0x8e0/0x17f0 fs/ext4/file.c:679
     call_write_iter include/linux/fs.h:2271 [inline]
     do_iter_readv_writev+0x212/0x3c0 fs/read_write.c:735
     do_iter_write+0x186/0x710 fs/read_write.c:861
     vfs_iter_write+0x70/0xa0 fs/read_write.c:902
     iter_file_splice_write+0x73b/0xc90 fs/splice.c:685
     do_splice_from fs/splice.c:763 [inline]
     direct_splice_actor+0x10f/0x170 fs/splice.c:950
     splice_direct_to_actor+0x33a/0xa10 fs/splice.c:896
     do_splice_direct+0x1a9/0x280 fs/splice.c:1002
     do_sendfile+0xb13/0x12c0 fs/read_write.c:1255
     __do_sys_sendfile64 fs/read_write.c:1323 [inline]
     __se_sys_sendfile64 fs/read_write.c:1309 [inline]
     __x64_sys_sendfile64+0x1cf/0x210 fs/read_write.c:1309
     do_syscall_x64 arch/x86/entry/common.c:51 [inline]
     do_syscall_64+0x35/0x80 arch/x86/entry/common.c:81
     entry_SYSCALL_64_after_hwframe+0x6e/0xd8
    
    Fixes: c755e251357a ("ext4: fix deadlock between inline_data and ext4_expand_extra_isize_ea()")
    Cc: [email protected] # v4.11+
    Signed-off-by: Alexey Nepomnyashih <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: align max orphan file size with e2fsprogs limit [+ + +]
Author: Baokun Li <[email protected]>
Date:   Thu Nov 20 21:42:33 2025 +0800

    ext4: align max orphan file size with e2fsprogs limit
    
    commit 7c11c56eb32eae96893eebafdbe3decadefe88ad upstream.
    
    Kernel commit 0a6ce20c1564 ("ext4: verify orphan file size is not too big")
    limits the maximum supported orphan file size to 8 << 20.
    
    However, in e2fsprogs, the orphan file size is set to 32–512 filesystem
    blocks when creating a filesystem.
    
    With 64k block size, formatting an ext4 fs >32G gives an orphan file bigger
    than the kernel allows, so mount prints an error and fails:
    
        EXT4-fs (vdb): orphan file too big: 8650752
        EXT4-fs (vdb): mount failed
    
    To prevent this issue and allow previously created 64KB filesystems to
    mount, we updates the maximum allowed orphan file size in the kernel to
    512 filesystem blocks.
    
    Fixes: 0a6ce20c1564 ("ext4: verify orphan file size is not too big")
    Signed-off-by: Baokun Li <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Theodore Ts'o <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: clear i_state_flags when alloc inode [+ + +]
Author: Haibo Chen <[email protected]>
Date:   Tue Nov 4 16:12:24 2025 +0800

    ext4: clear i_state_flags when alloc inode
    
    commit 4091c8206cfd2e3bb529ef260887296b90d9b6a2 upstream.
    
    i_state_flags used on 32-bit archs, need to clear this flag when
    alloc inode.
    Find this issue when umount ext4, sometimes track the inode as orphan
    accidently, cause ext4 mesg dump.
    
    Fixes: acf943e9768e ("ext4: fix checks for orphan inodes")
    Signed-off-by: Haibo Chen <[email protected]>
    Reviewed-by: Baokun Li <[email protected]>
    Reviewed-by: Zhang Yi <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Theodore Ts'o <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: correct the checking of quota files before moving extents [+ + +]
Author: Zhang Yi <[email protected]>
Date:   Mon Oct 13 09:51:17 2025 +0800

    ext4: correct the checking of quota files before moving extents
    
    [ Upstream commit a2e5a3cea4b18f6e2575acc444a5e8cce1fc8260 ]
    
    The move extent operation should return -EOPNOTSUPP if any of the inodes
    is a quota inode, rather than requiring both to be quota inodes.
    
    Fixes: 02749a4c2082 ("ext4: add ext4_is_quota_file()")
    Signed-off-by: Zhang Yi <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ext4: factor out ext4_hash_info_init() [+ + +]
Author: Jason Yan <[email protected]>
Date:   Thu Jan 8 12:04:08 2026 -0300

    ext4: factor out ext4_hash_info_init()
    
    commit db9345d9e6f075e1ec26afadf744078ead935fec upstream.
    
    Factor out ext4_hash_info_init() to simplify __ext4_fill_super(). No
    functional change.
    
    Signed-off-by: Jason Yan <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Stable-dep-of: a2187431c395 ("ext4: fix error message when rejecting the default hash")
    Signed-off-by: Thadeu Lima de Souza Cascardo <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: filesystems without casefold feature cannot be mounted with siphash [+ + +]
Author: Lizhi Xu <[email protected]>
Date:   Thu Jan 8 12:04:07 2026 -0300

    ext4: filesystems without casefold feature cannot be mounted with siphash
    
    commit 985b67cd86392310d9e9326de941c22fc9340eec upstream.
    
    When mounting the ext4 filesystem, if the default hash version is set to
    DX_HASH_SIPHASH but the casefold feature is not set, exit the mounting.
    
    Reported-by: [email protected]
    Signed-off-by: Lizhi Xu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    [cascardo: small conflict fixup]
    Signed-off-by: Thadeu Lima de Souza Cascardo <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: fix error message when rejecting the default hash [+ + +]
Author: Gabriel Krisman Bertazi <[email protected]>
Date:   Thu Jan 8 12:04:09 2026 -0300

    ext4: fix error message when rejecting the default hash
    
    commit a2187431c395cdfbf144e3536f25468c64fc7cfa upstream.
    
    Commit 985b67cd8639 ("ext4: filesystems without casefold feature cannot
    be mounted with siphash") properly rejects volumes where
    s_def_hash_version is set to DX_HASH_SIPHASH, but the check and the
    error message should not look into casefold setup - a filesystem should
    never have DX_HASH_SIPHASH as the default hash.  Fix it and, since we
    are there, move the check to ext4_hash_info_init.
    
    Fixes:985b67cd8639 ("ext4: filesystems without casefold feature cannot
    be mounted with siphash")
    
    Signed-off-by: Gabriel Krisman Bertazi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Thadeu Lima de Souza Cascardo <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: fix incorrect group number assertion in mb_check_buddy [+ + +]
Author: Yongjian Sun <[email protected]>
Date:   Thu Nov 6 14:06:13 2025 +0800

    ext4: fix incorrect group number assertion in mb_check_buddy
    
    commit 3f7a79d05c692c7cfec70bf104b1b3c3d0ce6247 upstream.
    
    When the MB_CHECK_ASSERT macro is enabled, an assertion failure can
    occur in __mb_check_buddy when checking preallocated blocks (pa) in
    a block group:
    
    Assertion failure in mb_free_blocks() : "groupnr == e4b->bd_group"
    
    This happens when a pa at the very end of a block group (e.g.,
    pa_pstart=32765, pa_len=3 in a group of 32768 blocks) becomes
    exhausted - its pa_pstart is advanced by pa_len to 32768, which
    lies in the next block group. If this exhausted pa (with pa_len == 0)
    is still in the bb_prealloc_list during the buddy check, the assertion
    incorrectly flags it as belonging to the wrong group. A possible
    sequence is as follows:
    
    ext4_mb_new_blocks
      ext4_mb_release_context
        pa->pa_pstart += EXT4_C2B(sbi, ac->ac_b_ex.fe_len)
        pa->pa_len -= ac->ac_b_ex.fe_len
    
                             __mb_check_buddy
                               for each pa in group
                                 ext4_get_group_no_and_offset
                                 MB_CHECK_ASSERT(groupnr == e4b->bd_group)
    
    To fix this, we modify the check to skip block group validation for
    exhausted preallocations (where pa_len == 0). Such entries are in a
    transitional state and will be removed from the list soon, so they
    should not trigger an assertion. This change prevents the false
    positive while maintaining the integrity of the checks for active
    allocations.
    
    Fixes: c9de560ded61f ("ext4: Add multi block allocator for ext4")
    Signed-off-by: Yongjian Sun <[email protected]>
    Reviewed-by: Baokun Li <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Theodore Ts'o <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: fix string copying in parse_apply_sb_mount_options() [+ + +]
Author: Fedor Pchelkin <[email protected]>
Date:   Mon Dec 29 20:00:59 2025 -0500

    ext4: fix string copying in parse_apply_sb_mount_options()
    
    [ Upstream commit ee5a977b4e771cc181f39d504426dbd31ed701cc ]
    
    strscpy_pad() can't be used to copy a non-NUL-term string into a NUL-term
    string of possibly bigger size.  Commit 0efc5990bca5 ("string.h: Introduce
    memtostr() and memtostr_pad()") provides additional information in that
    regard.  So if this happens, the following warning is observed:
    
    strnlen: detected buffer overflow: 65 byte read of buffer size 64
    WARNING: CPU: 0 PID: 28655 at lib/string_helpers.c:1032 __fortify_report+0x96/0xc0 lib/string_helpers.c:1032
    Modules linked in:
    CPU: 0 UID: 0 PID: 28655 Comm: syz-executor.3 Not tainted 6.12.54-syzkaller-00144-g5f0270f1ba00 #0
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    RIP: 0010:__fortify_report+0x96/0xc0 lib/string_helpers.c:1032
    Call Trace:
     <TASK>
     __fortify_panic+0x1f/0x30 lib/string_helpers.c:1039
     strnlen include/linux/fortify-string.h:235 [inline]
     sized_strscpy include/linux/fortify-string.h:309 [inline]
     parse_apply_sb_mount_options fs/ext4/super.c:2504 [inline]
     __ext4_fill_super fs/ext4/super.c:5261 [inline]
     ext4_fill_super+0x3c35/0xad00 fs/ext4/super.c:5706
     get_tree_bdev_flags+0x387/0x620 fs/super.c:1636
     vfs_get_tree+0x93/0x380 fs/super.c:1814
     do_new_mount fs/namespace.c:3553 [inline]
     path_mount+0x6ae/0x1f70 fs/namespace.c:3880
     do_mount fs/namespace.c:3893 [inline]
     __do_sys_mount fs/namespace.c:4103 [inline]
     __se_sys_mount fs/namespace.c:4080 [inline]
     __x64_sys_mount+0x280/0x300 fs/namespace.c:4080
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0x64/0x140 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Since userspace is expected to provide s_mount_opts field to be at most 63
    characters long with the ending byte being NUL-term, use a 64-byte buffer
    which matches the size of s_mount_opts, so that strscpy_pad() does its job
    properly.  Return with error if the user still managed to provide a
    non-NUL-term string here.
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Fixes: 8ecb790ea8c3 ("ext4: avoid potential buffer over-read in parse_apply_sb_mount_options()")
    Cc: [email protected]
    Signed-off-by: Fedor Pchelkin <[email protected]>
    Reviewed-by: Baokun Li <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Theodore Ts'o <[email protected]>
    [ adapted 2-argument strscpy_pad() call to 3-argument form with explicit sizeof() ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: improve integrity checking in __mb_check_buddy by enhancing order-0 validation [+ + +]
Author: Yongjian Sun <[email protected]>
Date:   Thu Nov 6 14:06:14 2025 +0800

    ext4: improve integrity checking in __mb_check_buddy by enhancing order-0 validation
    
    [ Upstream commit d9ee3ff810f1cc0e253c9f2b17b668b973cb0e06 ]
    
    When the MB_CHECK_ASSERT macro is enabled, we found that the
    current validation logic in __mb_check_buddy has a gap in
    detecting certain invalid buddy states, particularly related
    to order-0 (bitmap) bits.
    
    The original logic consists of three steps:
    1. Validates higher-order buddies: if a higher-order bit is
    set, at most one of the two corresponding lower-order bits
    may be free; if a higher-order bit is clear, both lower-order
    bits must be allocated (and their bitmap bits must be 0).
    2. For any set bit in order-0, ensures all corresponding
    higher-order bits are not free.
    3. Verifies that all preallocated blocks (pa) in the group
    have pa_pstart within bounds and their bitmap bits marked as
    allocated.
    
    However, this approach fails to properly validate cases where
    order-0 bits are incorrectly cleared (0), allowing some invalid
    configurations to pass:
    
                   corrupt            integral
    
    order 3           1                  1
    order 2       1       1          1       1
    order 1     1   1   1   1      1   1   1   1
    order 0    0 0 1 1 1 1 1 1    1 1 1 1 1 1 1 1
    
    Here we get two adjacent free blocks at order-0 with inconsistent
    higher-order state, and the right one shows the correct scenario.
    
    The root cause is insufficient validation of order-0 zero bits.
    To fix this and improve completeness without significant performance
    cost, we refine the logic:
    
    1. Maintain the top-down higher-order validation, but we no longer
    check the cases where the higher-order bit is 0, as this case will
    be covered in step 2.
    2. Enhance order-0 checking by examining pairs of bits:
       - If either bit in a pair is set (1), all corresponding
         higher-order bits must not be free.
       - If both bits are clear (0), then exactly one of the
         corresponding higher-order bits must be free
    3. Keep the preallocation (pa) validation unchanged.
    
    This change closes the validation gap, ensuring illegal buddy states
    involving order-0 are correctly detected, while removing redundant
    checks and maintaining efficiency.
    
    Fixes: c9de560ded61f ("ext4: Add multi block allocator for ext4")
    Suggested-by: Jan Kara <[email protected]>
    Signed-off-by: Yongjian Sun <[email protected]>
    Reviewed-by: Baokun Li <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ext4: refresh inline data size before write operations [+ + +]
Author: Deepanshu Kartikey <[email protected]>
Date:   Mon Oct 20 11:39:36 2025 +0530

    ext4: refresh inline data size before write operations
    
    commit 892e1cf17555735e9d021ab036c36bc7b58b0e3b upstream.
    
    The cached ei->i_inline_size can become stale between the initial size
    check and when ext4_update_inline_data()/ext4_create_inline_data() use
    it. Although ext4_get_max_inline_size() reads the correct value at the
    time of the check, concurrent xattr operations can modify i_inline_size
    before ext4_write_lock_xattr() is acquired.
    
    This causes ext4_update_inline_data() and ext4_create_inline_data() to
    work with stale capacity values, leading to a BUG_ON() crash in
    ext4_write_inline_data():
    
      kernel BUG at fs/ext4/inline.c:1331!
      BUG_ON(pos + len > EXT4_I(inode)->i_inline_size);
    
    The race window:
    1. ext4_get_max_inline_size() reads i_inline_size = 60 (correct)
    2. Size check passes for 50-byte write
    3. [Another thread adds xattr, i_inline_size changes to 40]
    4. ext4_write_lock_xattr() acquires lock
    5. ext4_update_inline_data() uses stale i_inline_size = 60
    6. Attempts to write 50 bytes but only 40 bytes actually available
    7. BUG_ON() triggers
    
    Fix this by recalculating i_inline_size via ext4_find_inline_data_nolock()
    immediately after acquiring xattr_sem. This ensures ext4_update_inline_data()
    and ext4_create_inline_data() work with current values that are protected
    from concurrent modifications.
    
    This is similar to commit a54c4613dac1 ("ext4: fix race writing to an
    inline_data file while its xattrs are changing") which fixed i_inline_off
    staleness. This patch addresses the related i_inline_size staleness issue.
    
    Reported-by: [email protected]
    Link: https://syzkaller.appspot.com/bug?extid=f3185be57d7e8dda32b8
    Cc: [email protected]
    Signed-off-by: Deepanshu Kartikey <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: remove unused return value of __mb_check_buddy [+ + +]
Author: Kemeng Shi <[email protected]>
Date:   Fri Jan 5 17:20:54 2024 +0800

    ext4: remove unused return value of __mb_check_buddy
    
    [ Upstream commit 133de5a0d8f8e32b34feaa8beae7a189482f1856 ]
    
    Remove unused return value of __mb_check_buddy.
    
    Signed-off-by: Kemeng Shi <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Stable-dep-of: d9ee3ff810f1 ("ext4: improve integrity checking in __mb_check_buddy by enhancing order-0 validation")
    Signed-off-by: Sasha Levin <[email protected]>

ext4: xattr: fix null pointer deref in ext4_raw_inode() [+ + +]
Author: Karina Yankevich <[email protected]>
Date:   Wed Oct 22 12:32:53 2025 +0300

    ext4: xattr: fix null pointer deref in ext4_raw_inode()
    
    commit b97cb7d6a051aa6ebd57906df0e26e9e36c26d14 upstream.
    
    If ext4_get_inode_loc() fails (e.g. if it returns -EFSCORRUPTED),
    iloc.bh will remain set to NULL. Since ext4_xattr_inode_dec_ref_all()
    lacks error checking, this will lead to a null pointer dereference
    in ext4_raw_inode(), called right after ext4_get_inode_loc().
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: c8e008b60492 ("ext4: ignore xattrs past end")
    Cc: [email protected]
    Signed-off-by: Karina Yankevich <[email protected]>
    Reviewed-by: Sergey Shtylyov <[email protected]>
    Reviewed-by: Baokun Li <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
f2fs: drop inode from the donation list when the last file is closed [+ + +]
Author: Jaegeuk Kim <[email protected]>
Date:   Tue Dec 30 12:19:57 2025 -0500

    f2fs: drop inode from the donation list when the last file is closed
    
    [ Upstream commit 078cad8212ce4f4ebbafcc0936475b8215e1ca2a ]
    
    Let's drop the inode from the donation list when there is no other
    open file.
    
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Stable-dep-of: 10b591e7fb7c ("f2fs: fix to avoid updating compression context during writeback")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: fix return value of f2fs_recover_fsync_data() [+ + +]
Author: Chao Yu <[email protected]>
Date:   Wed Nov 5 14:50:22 2025 +0800

    f2fs: fix return value of f2fs_recover_fsync_data()
    
    commit 01fba45deaddcce0d0b01c411435d1acf6feab7b upstream.
    
    With below scripts, it will trigger panic in f2fs:
    
    mkfs.f2fs -f /dev/vdd
    mount /dev/vdd /mnt/f2fs
    touch /mnt/f2fs/foo
    sync
    echo 111 >> /mnt/f2fs/foo
    f2fs_io fsync /mnt/f2fs/foo
    f2fs_io shutdown 2 /mnt/f2fs
    umount /mnt/f2fs
    mount -o ro,norecovery /dev/vdd /mnt/f2fs
    or
    mount -o ro,disable_roll_forward /dev/vdd /mnt/f2fs
    
    F2FS-fs (vdd): f2fs_recover_fsync_data: recovery fsync data, check_only: 0
    F2FS-fs (vdd): Mounted with checkpoint version = 7f5c361f
    F2FS-fs (vdd): Stopped filesystem due to reason: 0
    F2FS-fs (vdd): f2fs_recover_fsync_data: recovery fsync data, check_only: 1
    Filesystem f2fs get_tree() didn't set fc->root, returned 1
    ------------[ cut here ]------------
    kernel BUG at fs/super.c:1761!
    Oops: invalid opcode: 0000 [#1] SMP PTI
    CPU: 3 UID: 0 PID: 722 Comm: mount Not tainted 6.18.0-rc2+ #721 PREEMPT(voluntary)
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    RIP: 0010:vfs_get_tree.cold+0x18/0x1a
    Call Trace:
     <TASK>
     fc_mount+0x13/0xa0
     path_mount+0x34e/0xc50
     __x64_sys_mount+0x121/0x150
     do_syscall_64+0x84/0x800
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    RIP: 0033:0x7fa6cc126cfe
    
    The root cause is we missed to handle error number returned from
    f2fs_recover_fsync_data() when mounting image w/ ro,norecovery or
    ro,disable_roll_forward mount option, result in returning a positive
    error number to vfs_get_tree(), fix it.
    
    Cc: [email protected]
    Fixes: 6781eabba1bd ("f2fs: give -EINVAL for norecovery and rw mount")
    Signed-off-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: fix to avoid updating compression context during writeback [+ + +]
Author: Chao Yu <[email protected]>
Date:   Tue Dec 30 12:19:58 2025 -0500

    f2fs: fix to avoid updating compression context during writeback
    
    [ Upstream commit 10b591e7fb7cdc8c1e53e9c000dc0ef7069aaa76 ]
    
    Bai, Shuangpeng <[email protected]> reported a bug as below:
    
    Oops: divide error: 0000 [#1] SMP KASAN PTI
    CPU: 0 UID: 0 PID: 11441 Comm: syz.0.46 Not tainted 6.17.0 #1 PREEMPT(full)
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
    RIP: 0010:f2fs_all_cluster_page_ready+0x106/0x550 fs/f2fs/compress.c:857
    Call Trace:
     <TASK>
     f2fs_write_cache_pages fs/f2fs/data.c:3078 [inline]
     __f2fs_write_data_pages fs/f2fs/data.c:3290 [inline]
     f2fs_write_data_pages+0x1c19/0x3600 fs/f2fs/data.c:3317
     do_writepages+0x38e/0x640 mm/page-writeback.c:2634
     filemap_fdatawrite_wbc mm/filemap.c:386 [inline]
     __filemap_fdatawrite_range mm/filemap.c:419 [inline]
     file_write_and_wait_range+0x2ba/0x3e0 mm/filemap.c:794
     f2fs_do_sync_file+0x6e6/0x1b00 fs/f2fs/file.c:294
     generic_write_sync include/linux/fs.h:3043 [inline]
     f2fs_file_write_iter+0x76e/0x2700 fs/f2fs/file.c:5259
     new_sync_write fs/read_write.c:593 [inline]
     vfs_write+0x7e9/0xe00 fs/read_write.c:686
     ksys_write+0x19d/0x2d0 fs/read_write.c:738
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xf7/0x470 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    The bug was triggered w/ below race condition:
    
    fsync                           setattr                 ioctl
    - f2fs_do_sync_file
     - file_write_and_wait_range
      - f2fs_write_cache_pages
      : inode is non-compressed
      : cc.cluster_size =
        F2FS_I(inode)->i_cluster_size = 0
       - tag_pages_for_writeback
                                    - f2fs_setattr
                                     - truncate_setsize
                                     - f2fs_truncate
                                                            - f2fs_fileattr_set
                                                             - f2fs_setflags_common
                                                              - set_compress_context
                                                              : F2FS_I(inode)->i_cluster_size = 4
                                                              : set_inode_flag(inode, FI_COMPRESSED_FILE)
       - f2fs_compressed_file
       : return true
       - f2fs_all_cluster_page_ready
       : "pgidx % cc->cluster_size" trigger dividing 0 issue
    
    Let's change as below to fix this issue:
    - introduce a new atomic type variable .writeback in structure f2fs_inode_info
    to track the number of threads which calling f2fs_write_cache_pages().
    - use .i_sem lock to protect .writeback update.
    - check .writeback before update compression context in f2fs_setflags_common()
    to avoid race w/ ->writepages.
    
    Fixes: 4c8ff7095bef ("f2fs: support data compression")
    Cc: [email protected]
    Reported-by: Bai, Shuangpeng <[email protected]>
    Tested-by: Bai, Shuangpeng <[email protected]>
    Closes: https://lore.kernel.org/lkml/[email protected]
    Signed-off-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: fix to avoid updating zero-sized extent in extent cache [+ + +]
Author: Chao Yu <[email protected]>
Date:   Tue Dec 30 12:06:23 2025 -0500

    f2fs: fix to avoid updating zero-sized extent in extent cache
    
    [ Upstream commit 7c37c79510329cd951a4dedf3f7bf7e2b18dccec ]
    
    As syzbot reported:
    
    F2FS-fs (loop0): __update_extent_tree_range: extent len is zero, type: 0, extent [0, 0, 0], age [0, 0]
    ------------[ cut here ]------------
    kernel BUG at fs/f2fs/extent_cache.c:678!
    Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTI
    CPU: 0 UID: 0 PID: 5336 Comm: syz.0.0 Not tainted syzkaller #0 PREEMPT(full)
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014
    RIP: 0010:__update_extent_tree_range+0x13bc/0x1500 fs/f2fs/extent_cache.c:678
    Call Trace:
     <TASK>
     f2fs_update_read_extent_cache_range+0x192/0x3e0 fs/f2fs/extent_cache.c:1085
     f2fs_do_zero_range fs/f2fs/file.c:1657 [inline]
     f2fs_zero_range+0x10c1/0x1580 fs/f2fs/file.c:1737
     f2fs_fallocate+0x583/0x990 fs/f2fs/file.c:2030
     vfs_fallocate+0x669/0x7e0 fs/open.c:342
     ioctl_preallocate fs/ioctl.c:289 [inline]
     file_ioctl+0x611/0x780 fs/ioctl.c:-1
     do_vfs_ioctl+0xb33/0x1430 fs/ioctl.c:576
     __do_sys_ioctl fs/ioctl.c:595 [inline]
     __se_sys_ioctl+0x82/0x170 fs/ioctl.c:583
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xfa/0x3b0 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7f07bc58eec9
    
    In error path of f2fs_zero_range(), it may add a zero-sized extent
    into extent cache, it should be avoided.
    
    Fixes: 6e9619499f53 ("f2fs: support in batch fzero in dnode page")
    Cc: [email protected]
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/linux-f2fs-devel/[email protected]
    Signed-off-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    [ adapted patch to only guard f2fs_update_read_extent_cache_range() ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: fix to detect recoverable inode during dryrun of find_fsync_dnodes() [+ + +]
Author: Chao Yu <[email protected]>
Date:   Tue Dec 30 14:54:31 2025 -0500

    f2fs: fix to detect recoverable inode during dryrun of find_fsync_dnodes()
    
    [ Upstream commit 68d05693f8c031257a0822464366e1c2a239a512 ]
    
    mkfs.f2fs -f /dev/vdd
    mount /dev/vdd /mnt/f2fs
    touch /mnt/f2fs/foo
    sync            # avoid CP_UMOUNT_FLAG in last f2fs_checkpoint.ckpt_flags
    touch /mnt/f2fs/bar
    f2fs_io fsync /mnt/f2fs/bar
    f2fs_io shutdown 2 /mnt/f2fs
    umount /mnt/f2fs
    blockdev --setro /dev/vdd
    mount /dev/vdd /mnt/f2fs
    mount: /mnt/f2fs: WARNING: source write-protected, mounted read-only.
    
    For the case if we create and fsync a new inode before sudden power-cut,
    without norecovery or disable_roll_forward mount option, the following
    mount will succeed w/o recovering last fsynced inode.
    
    The problem here is that we only check inode_list list after
    find_fsync_dnodes() in f2fs_recover_fsync_data() to find out whether
    there is recoverable data in the iamge, but there is a missed case, if
    last fsynced inode is not existing in last checkpoint, then, we will
    fail to get its inode due to nat of inode node is not existing in last
    checkpoint, so the inode won't be linked in inode_list.
    
    Let's detect such case in dyrun mode to fix this issue.
    
    After this change, mount will fail as expected below:
    mount: /mnt/f2fs: cannot mount /dev/vdd read-only.
           dmesg(1) may have more information after failed mount system call.
    demsg:
    F2FS-fs (vdd): Need to recover fsync data, but write access unavailable, please try mount w/ disable_roll_forward or norecovery
    
    Cc: [email protected]
    Fixes: 6781eabba1bd ("f2fs: give -EINVAL for norecovery and rw mount")
    Signed-off-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    [ folio => page ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: fix to propagate error from f2fs_enable_checkpoint() [+ + +]
Author: Chao Yu <[email protected]>
Date:   Tue Dec 30 12:26:06 2025 -0500

    f2fs: fix to propagate error from f2fs_enable_checkpoint()
    
    [ Upstream commit be112e7449a6e1b54aa9feac618825d154b3a5c7 ]
    
    In order to let userspace detect such error rather than suffering
    silent failure.
    
    Fixes: 4354994f097d ("f2fs: checkpoint disabling")
    Cc: [email protected]
    Signed-off-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    [ Adjust context, no rollback ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: invalidate dentry cache on failed whiteout creation [+ + +]
Author: Deepanshu Kartikey <[email protected]>
Date:   Mon Oct 27 18:36:34 2025 +0530

    f2fs: invalidate dentry cache on failed whiteout creation
    
    commit d33f89b34aa313f50f9a512d58dd288999f246b0 upstream.
    
    F2FS can mount filesystems with corrupted directory depth values that
    get runtime-clamped to MAX_DIR_HASH_DEPTH. When RENAME_WHITEOUT
    operations are performed on such directories, f2fs_rename performs
    directory modifications (updating target entry and deleting source
    entry) before attempting to add the whiteout entry via f2fs_add_link.
    
    If f2fs_add_link fails due to the corrupted directory structure, the
    function returns an error to VFS, but the partial directory
    modifications have already been committed to disk. VFS assumes the
    entire rename operation failed and does not update the dentry cache,
    leaving stale mappings.
    
    In the error path, VFS does not call d_move() to update the dentry
    cache. This results in new_dentry still pointing to the old inode
    (new_inode) which has already had its i_nlink decremented to zero.
    The stale cache causes subsequent operations to incorrectly reference
    the freed inode.
    
    This causes subsequent operations to use cached dentry information that
    no longer matches the on-disk state. When a second rename targets the
    same entry, VFS attempts to decrement i_nlink on the stale inode, which
    may already have i_nlink=0, triggering a WARNING in drop_nlink().
    
    Example sequence:
    1. First rename (RENAME_WHITEOUT): file2 → file1
       - f2fs updates file1 entry on disk (points to inode 8)
       - f2fs deletes file2 entry on disk
       - f2fs_add_link(whiteout) fails (corrupted directory)
       - Returns error to VFS
       - VFS does not call d_move() due to error
       - VFS cache still has: file1 → inode 7 (stale!)
       - inode 7 has i_nlink=0 (already decremented)
    
    2. Second rename: file3 → file1
       - VFS uses stale cache: file1 → inode 7
       - Tries to drop_nlink on inode 7 (i_nlink already 0)
       - WARNING in drop_nlink()
    
    Fix this by explicitly invalidating old_dentry and new_dentry when
    f2fs_add_link fails during whiteout creation. This forces VFS to
    refresh from disk on subsequent operations, ensuring cache consistency
    even when the rename partially succeeds.
    
    Reproducer:
    1. Mount F2FS image with corrupted i_current_depth
    2. renameat2(file2, file1, RENAME_WHITEOUT)
    3. renameat2(file3, file1, 0)
    4. System triggers WARNING in drop_nlink()
    
    Fixes: 7e01e7ad746b ("f2fs: support RENAME_WHITEOUT")
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=632cf32276a9a564188d
    Suggested-by: Chao Yu <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]/ [v1]
    Cc: [email protected]
    Signed-off-by: Deepanshu Kartikey <[email protected]>
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: keep POSIX_FADV_NOREUSE ranges [+ + +]
Author: Jaegeuk Kim <[email protected]>
Date:   Tue Dec 30 12:19:56 2025 -0500

    f2fs: keep POSIX_FADV_NOREUSE ranges
    
    [ Upstream commit ef0c333cad8d1940f132a7ce15f15920216a3bd5 ]
    
    This patch records POSIX_FADV_NOREUSE ranges for users to reclaim the caches
    instantly off from LRU.
    
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Stable-dep-of: 10b591e7fb7c ("f2fs: fix to avoid updating compression context during writeback")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: remove unused GC_FAILURE_PIN [+ + +]
Author: Chao Yu <[email protected]>
Date:   Tue Dec 30 12:19:55 2025 -0500

    f2fs: remove unused GC_FAILURE_PIN
    
    [ Upstream commit 968c4f72b23c0c8f1e94e942eab89b8c5a3022e7 ]
    
    After commit 3db1de0e582c ("f2fs: change the current atomic write way"),
    we removed all GC_FAILURE_ATOMIC usage, let's change i_gc_failures[]
    array to i_pin_failure for cleanup.
    
    Meanwhile, let's define i_current_depth and i_gc_failures as union
    variable due to they won't be valid at the same time.
    
    Signed-off-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Stable-dep-of: 10b591e7fb7c ("f2fs: fix to avoid updating compression context during writeback")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: use global inline_xattr_slab instead of per-sb slab cache [+ + +]
Author: Chao Yu <[email protected]>
Date:   Tue Dec 30 13:54:13 2025 -0500

    f2fs: use global inline_xattr_slab instead of per-sb slab cache
    
    [ Upstream commit 1f27ef42bb0b7c0740c5616ec577ec188b8a1d05 ]
    
    As Hong Yun reported in mailing list:
    
    loop7: detected capacity change from 0 to 131072
    ------------[ cut here ]------------
    kmem_cache of name 'f2fs_xattr_entry-7:7' already exists
    WARNING: CPU: 0 PID: 24426 at mm/slab_common.c:110 kmem_cache_sanity_check mm/slab_common.c:109 [inline]
    WARNING: CPU: 0 PID: 24426 at mm/slab_common.c:110 __kmem_cache_create_args+0xa6/0x320 mm/slab_common.c:307
    CPU: 0 UID: 0 PID: 24426 Comm: syz.7.1370 Not tainted 6.17.0-rc4 #1 PREEMPT(full)
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1ubuntu1.1 04/01/2014
    RIP: 0010:kmem_cache_sanity_check mm/slab_common.c:109 [inline]
    RIP: 0010:__kmem_cache_create_args+0xa6/0x320 mm/slab_common.c:307
    Call Trace:
     __kmem_cache_create include/linux/slab.h:353 [inline]
     f2fs_kmem_cache_create fs/f2fs/f2fs.h:2943 [inline]
     f2fs_init_xattr_caches+0xa5/0xe0 fs/f2fs/xattr.c:843
     f2fs_fill_super+0x1645/0x2620 fs/f2fs/super.c:4918
     get_tree_bdev_flags+0x1fb/0x260 fs/super.c:1692
     vfs_get_tree+0x43/0x140 fs/super.c:1815
     do_new_mount+0x201/0x550 fs/namespace.c:3808
     do_mount fs/namespace.c:4136 [inline]
     __do_sys_mount fs/namespace.c:4347 [inline]
     __se_sys_mount+0x298/0x2f0 fs/namespace.c:4324
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0x8e/0x3a0 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    The bug can be reproduced w/ below scripts:
    - mount /dev/vdb /mnt1
    - mount /dev/vdc /mnt2
    - umount /mnt1
    - mounnt /dev/vdb /mnt1
    
    The reason is if we created two slab caches, named f2fs_xattr_entry-7:3
    and f2fs_xattr_entry-7:7, and they have the same slab size. Actually,
    slab system will only create one slab cache core structure which has
    slab name of "f2fs_xattr_entry-7:3", and two slab caches share the same
    structure and cache address.
    
    So, if we destroy f2fs_xattr_entry-7:3 cache w/ cache address, it will
    decrease reference count of slab cache, rather than release slab cache
    entirely, since there is one more user has referenced the cache.
    
    Then, if we try to create slab cache w/ name "f2fs_xattr_entry-7:3" again,
    slab system will find that there is existed cache which has the same name
    and trigger the warning.
    
    Let's changes to use global inline_xattr_slab instead of per-sb slab cache
    for fixing.
    
    Fixes: a999150f4fe3 ("f2fs: use kmem_cache pool during inline xattr lookups")
    Cc: [email protected]
    Reported-by: Hong Yun <[email protected]>
    Tested-by: Hong Yun <[email protected]>
    Signed-off-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    [ folio => page , context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fbdev: gbefb: fix to use physical address instead of dma address [+ + +]
Author: Rene Rebe <[email protected]>
Date:   Fri Nov 14 16:00:42 2025 +0100

    fbdev: gbefb: fix to use physical address instead of dma address
    
    commit e3f44742bbb10537fe53d83d20dea2a7c167674d upstream.
    
    While debuggigng why X would not start on mips64 Sgi/O2 I found the
    phys adress being off. Turns out the gbefb passed the internal
    dma_addr as phys. May be broken pre git history. Fix by converting
    dma_to_phys.
    
    Signed-off-by: René Rebe <[email protected]>
    Cc: <[email protected]> # v4.0+
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

fbdev: pxafb: Fix multiple clamped values in pxafb_adjust_timing [+ + +]
Author: Thorsten Blum <[email protected]>
Date:   Tue Dec 2 19:15:32 2025 +0100

    fbdev: pxafb: Fix multiple clamped values in pxafb_adjust_timing
    
    commit 0155e868cbc111846cc2809c1546ea53810a56ae upstream.
    
    The variables were never clamped because the return value of clamp_val()
    was not used. Fix this by assigning the clamped values, and use clamp()
    instead of clamp_val().
    
    Cc: [email protected]
    Fixes: 3f16ff608a75 ("[ARM] pxafb: cleanup of the timing checking code")
    Signed-off-by: Thorsten Blum <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

fbdev: ssd1307fb: fix potential page leak in ssd1307fb_probe() [+ + +]
Author: Abdun Nihaal <[email protected]>
Date:   Wed Dec 3 09:25:44 2025 +0530

    fbdev: ssd1307fb: fix potential page leak in ssd1307fb_probe()
    
    [ Upstream commit 164312662ae9764b83b84d97afb25c42eb2be473 ]
    
    The page allocated for vmem using __get_free_pages() is not freed on the
    error paths after it. Fix that by adding a corresponding __free_pages()
    call to the error path.
    
    Fixes: facd94bc458a ("fbdev: ssd1307fb: Allocate page aligned video memory.")
    Signed-off-by: Abdun Nihaal <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

fbdev: tcx.c fix mem_map to correct smem_start offset [+ + +]
Author: René Rebe <[email protected]>
Date:   Thu Nov 20 14:24:00 2025 +0100

    fbdev: tcx.c fix mem_map to correct smem_start offset
    
    commit 35fa2b4bf96415b88d7edaa5cf8af5185d9ce76e upstream.
    
    403ae52ac047 ("sparc: fix drivers/video/tcx.c warning") changed the
    physbase initializing breaking the user-space mmap, e.g. for Xorg
    entirely.
    
    Fix fbdev mmap table so the sbus mmap helper work correctly, and
    not try to map vastly (physbase) offset memory.
    
    Fixes: 403ae52ac047 ("sparc: fix drivers/video/tcx.c warning")
    Cc: <[email protected]>
    Signed-off-by: René Rebe <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
firewire: nosy: Fix dma_free_coherent() size [+ + +]
Author: Thomas Fourier <[email protected]>
Date:   Tue Dec 16 17:54:18 2025 +0100

    firewire: nosy: Fix dma_free_coherent() size
    
    [ Upstream commit c48c0fd0e19684b6ecdb4108a429e3a4e73f5e21 ]
    
    It looks like the buffer allocated and mapped in add_card() is done
    with size RCV_BUFFER_SIZE which is 16 KB and 4KB.
    
    Fixes: 286468210d83 ("firewire: new driver: nosy - IEEE 1394 traffic sniffer")
    Co-developed-by: Thomas Fourier <[email protected]>
    Signed-off-by: Thomas Fourier <[email protected]>
    Co-developed-by: Christophe JAILLET <[email protected]>
    Signed-off-by: Christophe JAILLET <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Takashi Sakamoto <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
firmware: arm_scmi: Fix unused notifier-block in unregister [+ + +]
Author: Amitai Gottlieb <[email protected]>
Date:   Tue Dec 16 13:50:09 2025 +0200

    firmware: arm_scmi: Fix unused notifier-block in unregister
    
    In scmi_devm_notifier_unregister(), the notifier-block argument was ignored
    and never passed to devres_release(). As a result, the function always
    returned -ENOENT and failed to unregister the notifier.
    
    Drivers that depend on this helper for teardown could therefore hit
    unexpected failures, including kernel panics.
    
    Commit 264a2c520628 ("firmware: arm_scmi: Simplify scmi_devm_notifier_unregister")
    removed the faulty code path during refactoring and hence this fix is not
    required upstream.
    
    Cc: <[email protected]> # 5.15.x, 6.1.x, and 6.6.x
    Fixes: 5ad3d1cf7d34 ("firmware: arm_scmi: Introduce new devres notification ops")
    Reviewed-by: Dan Carpenter <[email protected]>
    Reviewed-by: Cristian Marussi <[email protected]>
    Signed-off-by: Amitai Gottlieb <[email protected]>
    Reviewed-by: Sudeep Holla <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

firmware: imx: scu-irq: fix OF node leak in [+ + +]
Author: Peng Fan <[email protected]>
Date:   Fri Oct 17 09:56:24 2025 +0800

    firmware: imx: scu-irq: fix OF node leak in
    
    [ Upstream commit ee67247843a2b62d1473cfa4df300e69b5190ccf ]
    
    imx_scu_enable_general_irq_channel() calls of_parse_phandle_with_args(),
    but does not release the OF node reference. Add a of_node_put() call
    to release the reference.
    
    Fixes: 851826c7566e ("firmware: imx: enable imx scu general irq function")
    Reviewed-by: Frank Li <[email protected]>
    Signed-off-by: Peng Fan <[email protected]>
    Signed-off-by: Shawn Guo <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

firmware: imx: scu-irq: Init workqueue before request mbox channel [+ + +]
Author: Peng Fan <[email protected]>
Date:   Fri Oct 17 09:56:26 2025 +0800

    firmware: imx: scu-irq: Init workqueue before request mbox channel
    
    [ Upstream commit 81fb53feb66a3aefbf6fcab73bb8d06f5b0c54ad ]
    
    With mailbox channel requested, there is possibility that interrupts may
    come in, so need to make sure the workqueue is initialized before
    the queue is scheduled by mailbox rx callback.
    
    Reviewed-by: Frank Li <[email protected]>
    Signed-off-by: Peng Fan <[email protected]>
    Signed-off-by: Shawn Guo <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

firmware: stratix10-svc: Add mutex in stratix10 memory management [+ + +]
Author: Mahesh Rao <[email protected]>
Date:   Mon Oct 27 22:54:40 2025 +0800

    firmware: stratix10-svc: Add mutex in stratix10 memory management
    
    commit 85f96cbbbc67b59652b2c1ec394b8ddc0ddf1b0b upstream.
    
    Add mutex lock to stratix10_svc_allocate_memory and
    stratix10_svc_free_memory for thread safety. This prevents race
    conditions and ensures proper synchronization during memory operations.
    This is required for parallel communication with the Stratix10 service
    channel.
    
    Fixes: 7ca5ce896524f ("firmware: add Intel Stratix10 service layer driver")
    Cc: [email protected]
    Signed-off-by: Mahesh Rao <[email protected]>
    Reviewed-by: Matthew Gerlach <[email protected]>
    Signed-off-by: Dinh Nguyen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

firmware: stratix10-svc: fix make htmldocs warning for stratix10_svc [+ + +]
Author: Dinh Nguyen <[email protected]>
Date:   Fri Nov 14 12:58:13 2025 -0600

    firmware: stratix10-svc: fix make htmldocs warning for stratix10_svc
    
    [ Upstream commit 377441d53a2df61b105e823b335010cd4f1a6e56 ]
    
    Fix this warning that was generated from "make htmldocs":
    
    WARNING: drivers/firmware/stratix10-svc.c:58 struct member 'intel_svc_fcs'
    not described in 'stratix10_svc'
    
    Fixes: e6281c26674e ("firmware: stratix10-svc: Add support for FCS")
    Reported-by: Stephen Rothwell <[email protected]>
    Closes: https://lore.kernel.org/linux-next/[email protected]/
    Signed-off-by: Dinh Nguyen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
fjes: Add missing iounmap in fjes_hw_init() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Thu Dec 11 15:37:56 2025 +0800

    fjes: Add missing iounmap in fjes_hw_init()
    
    commit 15ef641a0c6728d25a400df73922e80ab2cf029c upstream.
    
    In error paths, add fjes_hw_iounmap() to release the
    resource acquired by fjes_hw_iomap(). Add a goto label
    to do so.
    
    Fixes: 8cdc3f6c5d22 ("fjes: Hardware initialization routine")
    Cc: [email protected]
    Signed-off-by: Haoxiang Li <[email protected]>
    Signed-off-by: Simon Horman <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
floppy: fix for PAGE_SIZE != 4KB [+ + +]
Author: Rene Rebe <[email protected]>
Date:   Fri Nov 14 14:41:27 2025 +0100

    floppy: fix for PAGE_SIZE != 4KB
    
    commit 82d20481024cbae2ea87fe8b86d12961bfda7169 upstream.
    
    For years I wondered why the floppy driver does not just work on
    sparc64, e.g:
    
    root@SUNW_375_0066:# disktype /dev/fd0
    disktype: Can't open /dev/fd0: No such device or address
    
    [  525.341906] disktype: attempt to access beyond end of device
    fd0: rw=0, sector=0, nr_sectors = 16 limit=8
    [  525.341991] floppy: error 10 while reading block 0
    
    Turns out floppy.c __floppy_read_block_0 tries to read one page for
    the first test read to determine the disk size and thus fails if that
    is greater than 4k. Adjust minimum MAX_DISK_SIZE to PAGE_SIZE to fix
    floppy on sparc64 and likely all other PAGE_SIZE != 4KB configs.
    
    Cc: [email protected]
    Signed-off-by: René Rebe <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fs/nls: Fix inconsistency between utf8_to_utf32() and utf32_to_utf8() [+ + +]
Author: Armin Wolf <[email protected]>
Date:   Sat Nov 29 12:15:35 2025 +0100

    fs/nls: Fix inconsistency between utf8_to_utf32() and utf32_to_utf8()
    
    [ Upstream commit c36f9d7b2869a003a2f7d6ff2c6bac9e62fd7d68 ]
    
    After commit 25524b619029 ("fs/nls: Fix utf16 to utf8 conversion"),
    the return values of utf8_to_utf32() and utf32_to_utf8() are
    inconsistent when encountering an error: utf8_to_utf32() returns -1,
    while utf32_to_utf8() returns errno codes. Fix this inconsistency
    by modifying utf8_to_utf32() to return errno codes as well.
    
    Fixes: 25524b619029 ("fs/nls: Fix utf16 to utf8 conversion")
    Suggested-by: Andy Shevchenko <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Signed-off-by: Armin Wolf <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

fs/nls: Fix utf16 to utf8 conversion [+ + +]
Author: Armin Wolf <[email protected]>
Date:   Tue Nov 11 14:11:22 2025 +0100

    fs/nls: Fix utf16 to utf8 conversion
    
    [ Upstream commit 25524b6190295577e4918c689644451365e6466d ]
    
    Currently the function responsible for converting between utf16 and
    utf8 strings will ignore any characters that cannot be converted. This
    however also includes multi-byte characters that do not fit into the
    provided string buffer.
    
    This can cause problems if such a multi-byte character is followed by
    a single-byte character. In such a case the multi-byte character might
    be ignored when the provided string buffer is too small, but the
    single-byte character might fit and is thus still copied into the
    resulting string.
    
    Fix this by stop filling the provided string buffer once a character
    does not fit. In order to be able to do this extend utf32_to_utf8()
    to return useful errno codes instead of -1.
    
    Fixes: 74675a58507e ("NLS: update handling of Unicode")
    Signed-off-by: Armin Wolf <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
fs/ntfs3: fix mount failure for sparse runs in run_unpack() [+ + +]
Author: Konstantin Komarov <[email protected]>
Date:   Thu Sep 18 13:35:24 2025 +0300

    fs/ntfs3: fix mount failure for sparse runs in run_unpack()
    
    commit 801f614ba263cb37624982b27b4c82f3c3c597a9 upstream.
    
    Some NTFS volumes failed to mount because sparse data runs were not
    handled correctly during runlist unpacking. The code performed arithmetic
    on the special SPARSE_LCN64 marker, leading to invalid LCN values and
    mount errors.
    
    Add an explicit check for the case described above, marking the run as
    sparse without applying arithmetic.
    
    Fixes: 736fc7bf5f68 ("fs: ntfs3: Fix integer overflow in run_unpack()")
    Cc: [email protected]
    Signed-off-by: Konstantin Komarov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

fs/ntfs3: out1 also needs to put mi [+ + +]
Author: Edward Adam Davis <[email protected]>
Date:   Tue Nov 11 19:13:56 2025 +0800

    fs/ntfs3: out1 also needs to put mi
    
    [ Upstream commit 4d78d1173a653acdaf7500a32b8dc530ca4ad075 ]
    
    After ntfs_look_free_mft() executes successfully, all subsequent code
    that fails to execute must put mi.
    
    Fixes: 4342306f0f0d ("fs/ntfs3: Add file operations and implementation")
    Signed-off-by: Edward Adam Davis <[email protected]>
    Signed-off-by: Konstantin Komarov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

fs/ntfs3: Prevent memory leaks in add sub record [+ + +]
Author: Edward Adam Davis <[email protected]>
Date:   Tue Nov 11 19:05:42 2025 +0800

    fs/ntfs3: Prevent memory leaks in add sub record
    
    [ Upstream commit ccc4e86d1c24260c18ae94541198c3711c140da6 ]
    
    If a rb node with the same ino already exists in the rb tree, the newly
    alloced mft_inode in ni_add_subrecord() will not have its memory cleaned
    up, which leads to the memory leak issue reported by syzbot.
    
    The best option to avoid this issue is to put the newly alloced mft node
    when a rb node with the same ino already exists in the rb tree and return
    the rb node found in the rb tree to the parent layer.
    
    syzbot reported:
    BUG: memory leak
    unreferenced object 0xffff888110bef280 (size 128):
      backtrace (crc 126a088f):
        ni_add_subrecord+0x31/0x180 fs/ntfs3/frecord.c:317
        ntfs_look_free_mft+0xf0/0x790 fs/ntfs3/fsntfs.c:715
    
    BUG: memory leak
    unreferenced object 0xffff888109093400 (size 1024):
      backtrace (crc 7197c55e):
        mi_init+0x2b/0x50 fs/ntfs3/record.c:105
        mi_format_new+0x40/0x220 fs/ntfs3/record.c:422
    
    Fixes: 4342306f0f0d ("fs/ntfs3: Add file operations and implementation")
    Reported-by: [email protected]
    Signed-off-by: Edward Adam Davis <[email protected]>
    Signed-off-by: Konstantin Komarov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

fs/ntfs3: Support timestamps prior to epoch [+ + +]
Author: Konstantin Komarov <[email protected]>
Date:   Mon Sep 1 11:48:48 2025 +0300

    fs/ntfs3: Support timestamps prior to epoch
    
    [ Upstream commit 5180138604323895b5c291eca6aa7c20be494ade ]
    
    Before it used an unsigned 64-bit type, which prevented proper handling
    of timestamps earlier than 1970-01-01. Switch to a signed 64-bit type to
    support pre-epoch timestamps. The issue was caught by xfstests.
    
    Signed-off-by: Konstantin Komarov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
fs_context: drop the unused lsm_flags member [+ + +]
Author: Ondrej Mosnacek <[email protected]>
Date:   Thu Mar 16 14:07:51 2023 +0100

    fs_context: drop the unused lsm_flags member
    
    [ Upstream commit 4e04143c869c5b6d499fbd5083caa860d5c942c3 ]
    
    This isn't ever used by VFS now, and it couldn't even work. Any FS that
    uses the SECURITY_LSM_NATIVE_LABELS flag needs to also process the
    value returned back from the LSM, so it needs to do its
    security_sb_set_mnt_opts() call on its own anyway.
    
    Signed-off-by: Ondrej Mosnacek <[email protected]>
    Signed-off-by: Christian Brauner (Microsoft) <[email protected]>
    Stable-dep-of: 8675c69816e4 ("NFS: Automounted filesystems should inherit ro,noexec,nodev,sync flags")
    Signed-off-by: Sasha Levin <[email protected]>

 
fscache: delete fscache_cookie_lru_timer when fscache exits to avoid UAF [+ + +]
Author: Baokun Li <[email protected]>
Date:   Thu Dec 4 14:57:33 2025 +0800

    fscache: delete fscache_cookie_lru_timer when fscache exits to avoid UAF
    
    commit 72a6e22c604c95ddb3b10b5d3bb85b6ff4dbc34f upstream.
    
    The fscache_cookie_lru_timer is initialized when the fscache module
    is inserted, but is not deleted when the fscache module is removed.
    If timer_reduce() is called before removing the fscache module,
    the fscache_cookie_lru_timer will be added to the timer list of
    the current cpu. Afterwards, a use-after-free will be triggered
    in the softIRQ after removing the fscache module, as follows:
    
    ==================================================================
    BUG: unable to handle page fault for address: fffffbfff803c9e9
     PF: supervisor read access in kernel mode
     PF: error_code(0x0000) - not-present page
    PGD 21ffea067 P4D 21ffea067 PUD 21ffe6067 PMD 110a7c067 PTE 0
    Oops: Oops: 0000 [#1] PREEMPT SMP KASAN PTI
    CPU: 1 UID: 0 PID: 0 Comm: swapper/1 Tainted: G W 6.11.0-rc3 #855
    Tainted: [W]=WARN
    RIP: 0010:__run_timer_base.part.0+0x254/0x8a0
    Call Trace:
     <IRQ>
     tmigr_handle_remote_up+0x627/0x810
     __walk_groups.isra.0+0x47/0x140
     tmigr_handle_remote+0x1fa/0x2f0
     handle_softirqs+0x180/0x590
     irq_exit_rcu+0x84/0xb0
     sysvec_apic_timer_interrupt+0x6e/0x90
     </IRQ>
     <TASK>
     asm_sysvec_apic_timer_interrupt+0x1a/0x20
    RIP: 0010:default_idle+0xf/0x20
     default_idle_call+0x38/0x60
     do_idle+0x2b5/0x300
     cpu_startup_entry+0x54/0x60
     start_secondary+0x20d/0x280
     common_startup_64+0x13e/0x148
     </TASK>
    Modules linked in: [last unloaded: netfs]
    ==================================================================
    
    Therefore delete fscache_cookie_lru_timer when removing the fscahe module.
    
    Fixes: 12bb21a29c19 ("fscache: Implement cookie user counting and resource pinning")
    Cc: [email protected]
    Signed-off-by: Baokun Li <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Acked-by: David Howells <[email protected]>
    Signed-off-by: Christian Brauner <[email protected]>
    [ Changed the file path due to missing commit:47757ea83a54 ("netfs,
    fscache: Move fs/fscache/* into fs/netfs/") ]
    Signed-off-by: Chen Yu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fsnotify: do not generate ACCESS/MODIFY events on child for special files [+ + +]
Author: Amir Goldstein <[email protected]>
Date:   Sun Dec 7 11:44:55 2025 +0100

    fsnotify: do not generate ACCESS/MODIFY events on child for special files
    
    commit 635bc4def026a24e071436f4f356ea08c0eed6ff upstream.
    
    inotify/fanotify do not allow users with no read access to a file to
    subscribe to events (e.g. IN_ACCESS/IN_MODIFY), but they do allow the
    same user to subscribe for watching events on children when the user
    has access to the parent directory (e.g. /dev).
    
    Users with no read access to a file but with read access to its parent
    directory can still stat the file and see if it was accessed/modified
    via atime/mtime change.
    
    The same is not true for special files (e.g. /dev/null). Users will not
    generally observe atime/mtime changes when other users read/write to
    special files, only when someone sets atime/mtime via utimensat().
    
    Align fsnotify events with this stat behavior and do not generate
    ACCESS/MODIFY events to parent watchers on read/write of special files.
    The events are still generated to parent watchers on utimensat(). This
    closes some side-channels that could be possibly used for information
    exfiltration [1].
    
    [1] https://snee.la/pdf/pubs/file-notification-attacks.pdf
    
    Reported-by: Sudheendra Raghav Neela <[email protected]>
    CC: [email protected]
    Signed-off-by: Amir Goldstein <[email protected]>
    Signed-off-by: Jan Kara <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ftrace: bpf: Fix IPMODIFY + DIRECT in modify_ftrace_direct() [+ + +]
Author: Song Liu <[email protected]>
Date:   Mon Oct 27 10:50:22 2025 -0700

    ftrace: bpf: Fix IPMODIFY + DIRECT in modify_ftrace_direct()
    
    [ Upstream commit 3e9a18e1c3e931abecf501cbb23d28d69f85bb56 ]
    
    ftrace_hash_ipmodify_enable() checks IPMODIFY and DIRECT ftrace_ops on
    the same kernel function. When needed, ftrace_hash_ipmodify_enable()
    calls ops->ops_func() to prepare the direct ftrace (BPF trampoline) to
    share the same function as the IPMODIFY ftrace (livepatch).
    
    ftrace_hash_ipmodify_enable() is called in register_ftrace_direct() path,
    but not called in modify_ftrace_direct() path. As a result, the following
    operations will break livepatch:
    
    1. Load livepatch to a kernel function;
    2. Attach fentry program to the kernel function;
    3. Attach fexit program to the kernel function.
    
    After 3, the kernel function being used will not be the livepatched
    version, but the original version.
    
    Fix this by adding __ftrace_hash_update_ipmodify() to
    __modify_ftrace_direct() and adjust some logic around the call.
    
    Signed-off-by: Song Liu <[email protected]>
    Reviewed-by: Jiri Olsa <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Acked-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
fuse: fix readahead reclaim deadlock [+ + +]
Author: Joanne Koong <[email protected]>
Date:   Thu Jan 1 10:20:12 2026 -0500

    fuse: fix readahead reclaim deadlock
    
    [ Upstream commit bd5603eaae0aabf527bfb3ce1bb07e979ce5bd50 ]
    
    Commit e26ee4efbc79 ("fuse: allocate ff->release_args only if release is
    needed") skips allocating ff->release_args if the server does not
    implement open. However in doing so, fuse_prepare_release() now skips
    grabbing the reference on the inode, which makes it possible for an
    inode to be evicted from the dcache while there are inflight readahead
    requests. This causes a deadlock if the server triggers reclaim while
    servicing the readahead request and reclaim attempts to evict the inode
    of the file being read ahead. Since the folio is locked during
    readahead, when reclaim evicts the fuse inode and fuse_evict_inode()
    attempts to remove all folios associated with the inode from the page
    cache (truncate_inode_pages_range()), reclaim will block forever waiting
    for the lock since readahead cannot relinquish the lock because it is
    itself blocked in reclaim:
    
    >>> stack_trace(1504735)
     folio_wait_bit_common (mm/filemap.c:1308:4)
     folio_lock (./include/linux/pagemap.h:1052:3)
     truncate_inode_pages_range (mm/truncate.c:336:10)
     fuse_evict_inode (fs/fuse/inode.c:161:2)
     evict (fs/inode.c:704:3)
     dentry_unlink_inode (fs/dcache.c:412:3)
     __dentry_kill (fs/dcache.c:615:3)
     shrink_kill (fs/dcache.c:1060:12)
     shrink_dentry_list (fs/dcache.c:1087:3)
     prune_dcache_sb (fs/dcache.c:1168:2)
     super_cache_scan (fs/super.c:221:10)
     do_shrink_slab (mm/shrinker.c:435:9)
     shrink_slab (mm/shrinker.c:626:10)
     shrink_node (mm/vmscan.c:5951:2)
     shrink_zones (mm/vmscan.c:6195:3)
     do_try_to_free_pages (mm/vmscan.c:6257:3)
     do_swap_page (mm/memory.c:4136:11)
     handle_pte_fault (mm/memory.c:5562:10)
     handle_mm_fault (mm/memory.c:5870:9)
     do_user_addr_fault (arch/x86/mm/fault.c:1338:10)
     handle_page_fault (arch/x86/mm/fault.c:1481:3)
     exc_page_fault (arch/x86/mm/fault.c:1539:2)
     asm_exc_page_fault+0x22/0x27
    
    Fix this deadlock by allocating ff->release_args and grabbing the
    reference on the inode when preparing the file for release even if the
    server does not implement open. The inode reference will be dropped when
    the last reference on the fuse file is dropped (see fuse_file_put() ->
    fuse_release_end()).
    
    Fixes: e26ee4efbc79 ("fuse: allocate ff->release_args only if release is needed")
    Cc: [email protected]
    Signed-off-by: Joanne Koong <[email protected]>
    Reported-by: Omar Sandoval <[email protected]>
    Signed-off-by: Miklos Szeredi <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
genalloc.h: fix htmldocs warning [+ + +]
Author: Andrew Morton <[email protected]>
Date:   Thu Nov 27 10:39:24 2025 -0800

    genalloc.h: fix htmldocs warning
    
    [ Upstream commit 5393802c94e0ab1295c04c94c57bcb00222d4674 ]
    
    WARNING: include/linux/genalloc.h:52 function parameter 'start_addr' not described in 'genpool_algo_t'
    
    Fixes: 52fbf1134d47 ("lib/genalloc.c: fix allocation of aligned buffer from non-aligned chunk")
    Reported-by: Stephen Rothwell <[email protected]>
    Closes: https://lkml.kernel.org/r/[email protected]
    Acked-by: Randy Dunlap <[email protected]>
    Tested-by: Randy Dunlap <[email protected]>
    Cc: Alexey Skidanov <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
gfs2: fix freeze error handling [+ + +]
Author: Alexey Velichayshiy <[email protected]>
Date:   Mon Dec 29 18:25:04 2025 -0500

    gfs2: fix freeze error handling
    
    [ Upstream commit 4cfc7d5a4a01d2133b278cdbb1371fba1b419174 ]
    
    After commit b77b4a4815a9 ("gfs2: Rework freeze / thaw logic"),
    the freeze error handling is broken because gfs2_do_thaw()
    overwrites the 'error' variable, causing incorrect processing
    of the original freeze error.
    
    Fix this by calling gfs2_do_thaw() when gfs2_lock_fs_check_clean()
    fails but ignoring its return value to preserve the original
    freeze error for proper reporting.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: b77b4a4815a9 ("gfs2: Rework freeze / thaw logic")
    Cc: [email protected] # v6.5+
    Signed-off-by: Alexey Velichayshiy <[email protected]>
    Signed-off-by: Andreas Gruenbacher <[email protected]>
    [ gfs2_do_thaw() only takes one param ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

gfs2: Fix use of bio_chain [+ + +]
Author: Andreas Gruenbacher <[email protected]>
Date:   Sun Nov 30 21:19:52 2025 +0000

    gfs2: Fix use of bio_chain
    
    [ Upstream commit 8a157e0a0aa5143b5d94201508c0ca1bb8cfb941 ]
    
    In gfs2_chain_bio(), the call to bio_chain() has its arguments swapped.
    The result is leaked bios and incorrect synchronization (only the last
    bio will actually be waited for).  This code is only used during mount
    and filesystem thaw, so the bug normally won't be noticeable.
    
    Reported-by: Stephen Zhang <[email protected]>
    Signed-off-by: Andreas Gruenbacher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
gpu: host1x: Fix race in syncpt alloc/free [+ + +]
Author: Mainak Sen <[email protected]>
Date:   Mon Jul 7 18:17:39 2025 +0900

    gpu: host1x: Fix race in syncpt alloc/free
    
    [ Upstream commit c7d393267c497502fa737607f435f05dfe6e3d9b ]
    
    Fix race condition between host1x_syncpt_alloc()
    and host1x_syncpt_put() by using kref_put_mutex()
    instead of kref_put() + manual mutex locking.
    
    This ensures no thread can acquire the
    syncpt_mutex after the refcount drops to zero
    but before syncpt_release acquires it.
    This prevents races where syncpoints could
    be allocated while still being cleaned up
    from a previous release.
    
    Remove explicit mutex locking in syncpt_release
    as kref_put_mutex() handles this atomically.
    
    Signed-off-by: Mainak Sen <[email protected]>
    Fixes: f5ba33fb9690 ("gpu: host1x: Reserve VBLANK syncpoints at initialization")
    Signed-off-by: Mikko Perttunen <[email protected]>
    Signed-off-by: Thierry Reding <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
hfsplus: fix missing hfs_bnode_get() in __hfs_bnode_create [+ + +]
Author: Yang Chenzhi <[email protected]>
Date:   Fri Aug 29 17:39:12 2025 +0800

    hfsplus: fix missing hfs_bnode_get() in __hfs_bnode_create
    
    [ Upstream commit 152af114287851583cf7e0abc10129941f19466a ]
    
    When sync() and link() are called concurrently, both threads may
    enter hfs_bnode_find() without finding the node in the hash table
    and proceed to create it.
    
    Thread A:
      hfsplus_write_inode()
        -> hfsplus_write_system_inode()
          -> hfs_btree_write()
            -> hfs_bnode_find(tree, 0)
              -> __hfs_bnode_create(tree, 0)
    
    Thread B:
      hfsplus_create_cat()
        -> hfs_brec_insert()
          -> hfs_bnode_split()
            -> hfs_bmap_alloc()
              -> hfs_bnode_find(tree, 0)
                -> __hfs_bnode_create(tree, 0)
    
    In this case, thread A creates the bnode, sets refcnt=1, and hashes it.
    Thread B also tries to create the same bnode, notices it has already
    been inserted, drops its own instance, and uses the hashed one without
    getting the node.
    
    ```
    
            node2 = hfs_bnode_findhash(tree, cnid);
            if (!node2) {                                 <- Thread A
                    hash = hfs_bnode_hash(cnid);
                    node->next_hash = tree->node_hash[hash];
                    tree->node_hash[hash] = node;
                    tree->node_hash_cnt++;
            } else {                                      <- Thread B
                    spin_unlock(&tree->hash_lock);
                    kfree(node);
                    wait_event(node2->lock_wq,
                            !test_bit(HFS_BNODE_NEW, &node2->flags));
                    return node2;
            }
    ```
    
    However, hfs_bnode_find() requires each call to take a reference.
    Here both threads end up setting refcnt=1. When they later put the node,
    this triggers:
    
    BUG_ON(!atomic_read(&node->refcnt))
    
    In this scenario, Thread B in fact finds the node in the hash table
    rather than creating a new one, and thus must take a reference.
    
    Fix this by calling hfs_bnode_get() when reusing a bnode newly created by
    another thread to ensure the refcount is updated correctly.
    
    A similar bug was fixed in HFS long ago in commit
    a9dc087fd3c4 ("fix missing hfs_bnode_get() in __hfs_bnode_create")
    but the same issue remained in HFS+ until now.
    
    Reported-by: [email protected]
    Signed-off-by: Yang Chenzhi <[email protected]>
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

hfsplus: fix volume corruption issue for generic/070 [+ + +]
Author: Viacheslav Dubeyko <[email protected]>
Date:   Fri Oct 31 17:12:30 2025 -0700

    hfsplus: fix volume corruption issue for generic/070
    
    [ Upstream commit ed490f36f439b877393c12a2113601e4145a5a56 ]
    
    The xfstests' test-case generic/070 leaves HFS+ volume
    in corrupted state:
    
    sudo ./check generic/070
    FSTYP -- hfsplus
    PLATFORM -- Linux/x86_64 hfsplus-testing-0001 6.17.0-rc1+ #4 SMP PREEMPT_DYNAMIC Wed Oct 1 15:02:44 PDT 2025
    MKFS_OPTIONS -- /dev/loop51
    MOUNT_OPTIONS -- /dev/loop51 /mnt/scratch
    
    generic/070 _check_generic_filesystem: filesystem on /dev/loop50 is inconsistent
    (see xfstests-dev/results//generic/070.full for details)
    
    Ran: generic/070
    Failures: generic/070
    Failed 1 of 1 tests
    
    sudo fsck.hfsplus -d /dev/loop50
    ** /dev/loop50
    Using cacheBlockSize=32K cacheTotalBlock=1024 cacheSize=32768K.
    Executing fsck_hfs (version 540.1-Linux).
    ** Checking non-journaled HFS Plus Volume.
    The volume name is test
    ** Checking extents overflow file.
    Unused node is not erased (node = 1)
    ** Checking catalog file.
    ** Checking multi-linked files.
    ** Checking catalog hierarchy.
    ** Checking extended attributes file.
    ** Checking volume bitmap.
    ** Checking volume information.
    Verify Status: VIStat = 0x0000, ABTStat = 0x0000 EBTStat = 0x0004
    CBTStat = 0x0000 CatStat = 0x00000000
    ** Repairing volume.
    ** Rechecking volume.
    ** Checking non-journaled HFS Plus Volume.
    The volume name is test
    ** Checking extents overflow file.
    ** Checking catalog file.
    ** Checking multi-linked files.
    ** Checking catalog hierarchy.
    ** Checking extended attributes file.
    ** Checking volume bitmap.
    ** Checking volume information.
    ** The volume test was repaired successfully.
    
    It is possible to see that fsck.hfsplus detected not
    erased and unused node for the case of extents overflow file.
    The HFS+ logic has special method that defines if the node
    should be erased:
    
    bool hfs_bnode_need_zeroout(struct hfs_btree *tree)
    {
            struct super_block *sb = tree->inode->i_sb;
            struct hfsplus_sb_info *sbi = HFSPLUS_SB(sb);
            const u32 volume_attr = be32_to_cpu(sbi->s_vhdr->attributes);
    
            return tree->cnid == HFSPLUS_CAT_CNID &&
                    volume_attr & HFSPLUS_VOL_UNUSED_NODE_FIX;
    }
    
    However, it is possible to see that this method works
    only for the case of catalog file. But debugging of the issue
    has shown that HFSPLUS_VOL_UNUSED_NODE_FIX attribute has been
    requested for the extents overflow file too:
    
    catalog file
    kernel: hfsplus: node 4, num_recs 0, flags 0x10
    kernel: hfsplus: tree->cnid 4, volume_attr 0x80000800
    
    extents overflow file
    kernel: hfsplus: node 1, num_recs 0, flags 0x10
    kernel: hfsplus: tree->cnid 3, volume_attr 0x80000800
    
    This patch modifies the hfs_bnode_need_zeroout() by checking
    only volume_attr but not the b-tree ID because node zeroing
    can be requested for all HFS+ b-tree types.
    
    sudo ./check generic/070
    FSTYP         -- hfsplus
    PLATFORM      -- Linux/x86_64 hfsplus-testing-0001 6.18.0-rc3+ #79 SMP PREEMPT_DYNAMIC Fri Oct 31 16:07:42 PDT 2025
    MKFS_OPTIONS  -- /dev/loop51
    MOUNT_OPTIONS -- /dev/loop51 /mnt/scratch
    
    generic/070 33s ...  34s
    Ran: generic/070
    Passed all 1 tests
    
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    cc: John Paul Adrian Glaubitz <[email protected]>
    cc: Yangtao Li <[email protected]>
    cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

hfsplus: fix volume corruption issue for generic/073 [+ + +]
Author: Viacheslav Dubeyko <[email protected]>
Date:   Wed Nov 12 15:25:23 2025 -0800

    hfsplus: fix volume corruption issue for generic/073
    
    [ Upstream commit 24e17a29cf7537f0947f26a50f85319abd723c6c ]
    
    The xfstests' test-case generic/073 leaves HFS+ volume
    in corrupted state:
    
    sudo ./check generic/073
    FSTYP -- hfsplus
    PLATFORM -- Linux/x86_64 hfsplus-testing-0001 6.17.0-rc1+ #4 SMP PREEMPT_DYNAMIC Wed Oct 1 15:02:44 PDT 2025
    MKFS_OPTIONS -- /dev/loop51
    MOUNT_OPTIONS -- /dev/loop51 /mnt/scratch
    
    generic/073 _check_generic_filesystem: filesystem on /dev/loop51 is inconsistent
    (see XFSTESTS-2/xfstests-dev/results//generic/073.full for details)
    
    Ran: generic/073
    Failures: generic/073
    Failed 1 of 1 tests
    
    sudo fsck.hfsplus -d /dev/loop51
    ** /dev/loop51
    Using cacheBlockSize=32K cacheTotalBlock=1024 cacheSize=32768K.
    Executing fsck_hfs (version 540.1-Linux).
    ** Checking non-journaled HFS Plus Volume.
    The volume name is untitled
    ** Checking extents overflow file.
    ** Checking catalog file.
    ** Checking multi-linked files.
    ** Checking catalog hierarchy.
    Invalid directory item count
    (It should be 1 instead of 0)
    ** Checking extended attributes file.
    ** Checking volume bitmap.
    ** Checking volume information.
    Verify Status: VIStat = 0x0000, ABTStat = 0x0000 EBTStat = 0x0000
    CBTStat = 0x0000 CatStat = 0x00004000
    ** Repairing volume.
    ** Rechecking volume.
    ** Checking non-journaled HFS Plus Volume.
    The volume name is untitled
    ** Checking extents overflow file.
    ** Checking catalog file.
    ** Checking multi-linked files.
    ** Checking catalog hierarchy.
    ** Checking extended attributes file.
    ** Checking volume bitmap.
    ** Checking volume information.
    ** The volume untitled was repaired successfully.
    
    The test is doing these steps on final phase:
    
    mv $SCRATCH_MNT/testdir_1/bar $SCRATCH_MNT/testdir_2/bar
    $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/testdir_1
    $XFS_IO_PROG -c "fsync" $SCRATCH_MNT/foo
    
    So, we move file bar from testdir_1 into testdir_2 folder. It means that HFS+
    logic decrements the number of entries in testdir_1 and increments number of
    entries in testdir_2. Finally, we do fsync only for testdir_1 and foo but not
    for testdir_2. As a result, this is the reason why fsck.hfsplus detects the
    volume corruption afterwards.
    
    This patch fixes the issue by means of adding the
    hfsplus_cat_write_inode() call for old_dir and new_dir in
    hfsplus_rename() after the successful ending of
    hfsplus_rename_cat(). This method makes modification of in-core
    inode objects for old_dir and new_dir but it doesn't save these
    modifications in Catalog File's entries. It was expected that
    hfsplus_write_inode() will save these modifications afterwards.
    However, because generic/073 does fsync only for testdir_1 and foo
    then testdir_2 modification hasn't beed saved into Catalog File's
    entry and it was flushed without this modification. And it was
    detected by fsck.hfsplus. Now, hfsplus_rename() stores in Catalog
    File all modified entries and correct state of Catalog File will
    be flushed during hfsplus_file_fsync() call. Finally, it makes
    fsck.hfsplus happy.
    
    sudo ./check generic/073
    FSTYP         -- hfsplus
    PLATFORM      -- Linux/x86_64 hfsplus-testing-0001 6.18.0-rc3+ #93 SMP PREEMPT_DYNAMIC Wed Nov 12 14:37:49 PST 2025
    MKFS_OPTIONS  -- /dev/loop51
    MOUNT_OPTIONS -- /dev/loop51 /mnt/scratch
    
    generic/073 32s ...  32s
    Ran: generic/073
    Passed all 1 tests
    
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    cc: John Paul Adrian Glaubitz <[email protected]>
    cc: Yangtao Li <[email protected]>
    cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

hfsplus: Verify inode mode when loading from disk [+ + +]
Author: Tetsuo Handa <[email protected]>
Date:   Sat Nov 15 18:18:54 2025 +0900

    hfsplus: Verify inode mode when loading from disk
    
    [ Upstream commit 005d4b0d33f6b4a23d382b7930f7a96b95b01f39 ]
    
    syzbot is reporting that S_IFMT bits of inode->i_mode can become bogus when
    the S_IFMT bits of the 16bits "mode" field loaded from disk are corrupted.
    
    According to [1], the permissions field was treated as reserved in Mac OS
    8 and 9. According to [2], the reserved field was explicitly initialized
    with 0, and that field must remain 0 as long as reserved. Therefore, when
    the "mode" field is not 0 (i.e. no longer reserved), the file must be
    S_IFDIR if dir == 1, and the file must be one of S_IFREG/S_IFLNK/S_IFCHR/
    S_IFBLK/S_IFIFO/S_IFSOCK if dir == 0.
    
    Reported-by: syzbot <[email protected]>
    Closes: https://syzkaller.appspot.com/bug?extid=895c23f6917da440ed0d
    Link: https://developer.apple.com/library/archive/technotes/tn/tn1150.html#HFSPlusPermissions [1]
    Link: https://developer.apple.com/library/archive/technotes/tn/tn1150.html#ReservedAndPadFields [2]
    Signed-off-by: Tetsuo Handa <[email protected]>
    Reviewed-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
HID: apple: Add SONiX AK870 PRO to non_apple_keyboards quirk list [+ + +]
Author: April Grimoire <[email protected]>
Date:   Thu Oct 23 00:37:26 2025 +0800

    HID: apple: Add SONiX AK870 PRO to non_apple_keyboards quirk list
    
    [ Upstream commit 743c81cdc98fd4fef62a89eb70efff994112c2d9 ]
    
    SONiX AK870 PRO keyboard pretends to be an apple keyboard by VID:PID,
    rendering function keys not treated properly. Despite being a
    SONiX USB DEVICE, it uses a different name, so adding it to the list.
    
    Signed-off-by: April Grimoire <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

HID: elecom: Add support for ELECOM M-XT3URBK (018F) [+ + +]
Author: Naoki Ueki <[email protected]>
Date:   Mon Nov 3 21:16:45 2025 +0900

    HID: elecom: Add support for ELECOM M-XT3URBK (018F)
    
    [ Upstream commit cdcbb8e8d10f656642380ee13516290437b52b36 ]
    
    The ELECOM M-XT3URBK trackball has an additional device ID (0x018F), which
    shares the same report descriptor as the existing device (0x00FB). However,
    the driver does not currently recognize this new ID, resulting in only five
    buttons being functional.
    
    This patch adds the new device ID so that all six buttons work properly.
    
    Signed-off-by: Naoki Ueki <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

HID: input: map HID_GD_Z to ABS_DISTANCE for stylus/pen [+ + +]
Author: Ping Cheng <[email protected]>
Date:   Mon Oct 27 13:37:42 2025 -0700

    HID: input: map HID_GD_Z to ABS_DISTANCE for stylus/pen
    
    commit 7953794f741e94d30df9dafaaa4c031c85b891d6 upstream.
    
    HID_GD_Z is mapped to ABS_Z for stylus and pen in hid-input.c. But HID_GD_Z
    should be used to report ABS_DISTANCE for stylus and pen as described at:
    Documentation/input/event-codes.rst#n226
    
    * ABS_DISTANCE:
    
      - Used to describe the distance of a tool from an interaction surface. This
        event should only be emitted while the tool is hovering, meaning in close
        proximity of the device and while the value of the BTN_TOUCH code is 0. If
        the input device may be used freely in three dimensions, consider ABS_Z
        instead.
      - BTN_TOOL_<name> should be set to 1 when the tool comes into detectable
        proximity and set to 0 when the tool leaves detectable proximity.
        BTN_TOOL_<name> signals the type of tool that is currently detected by the
        hardware and is otherwise independent of ABS_DISTANCE and/or BTN_TOUCH.
    
    This patch makes the correct mapping. The ABS_DISTANCE is currently not mapped
    by any HID usage in hid-generic driver.
    
    Signed-off-by: Ping Cheng <[email protected]>
    Cc: [email protected]
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

HID: logitech-dj: Remove duplicate error logging [+ + +]
Author: Hans de Goede <[email protected]>
Date:   Sat Nov 8 22:03:18 2025 +0100

    HID: logitech-dj: Remove duplicate error logging
    
    commit ca389a55d8b2d86a817433bf82e0602b68c4d541 upstream.
    
    logi_dj_recv_query_paired_devices() and logi_dj_recv_switch_to_dj_mode()
    both have 2 callers which all log an error if the function fails. Move
    the error logging to inside these 2 functions to remove the duplicated
    error logging in the callers.
    
    While at it also move the logi_dj_recv_send_report() call error handling
    in logi_dj_recv_switch_to_dj_mode() to directly after the call. That call
    only fails if the report cannot be found and in that case it does nothing,
    so the msleep() is not necessary on failures.
    
    Fixes: 6f20d3261265 ("HID: logitech-dj: Fix error handling in logi_dj_recv_switch_to_dj_mode()")
    Cc: [email protected]
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
hwmon: (ibmpex) fix use-after-free in high/low store [+ + +]
Author: Junrui Luo <[email protected]>
Date:   Wed Dec 10 17:48:08 2025 +0800

    hwmon: (ibmpex) fix use-after-free in high/low store
    
    [ Upstream commit 6946c726c3f4c36f0f049e6f97e88c510b15f65d ]
    
    The ibmpex_high_low_store() function retrieves driver data using
    dev_get_drvdata() and uses it without validation. This creates a race
    condition where the sysfs callback can be invoked after the data
    structure is freed, leading to use-after-free.
    
    Fix by adding a NULL check after dev_get_drvdata(), and reordering
    operations in the deletion path to prevent TOCTOU.
    
    Reported-by: Yuhao Jiang <[email protected]>
    Reported-by: Junrui Luo <[email protected]>
    Fixes: 57c7c3a0fdea ("hwmon: IBM power meter driver")
    Signed-off-by: Junrui Luo <[email protected]>
    Link: https://lore.kernel.org/r/MEYPR01MB7886BE2F51BFE41875B74B60AFA0A@MEYPR01MB7886.ausprd01.prod.outlook.com
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

hwmon: (max16065) Use local variable to avoid TOCTOU [+ + +]
Author: Gui-Dong Han <[email protected]>
Date:   Fri Nov 28 20:47:09 2025 +0800

    hwmon: (max16065) Use local variable to avoid TOCTOU
    
    commit b8d5acdcf525f44e521ca4ef51dce4dac403dab4 upstream.
    
    In max16065_current_show, data->curr_sense is read twice: once for the
    error check and again for the calculation. Since
    i2c_smbus_read_byte_data returns negative error codes on failure, if the
    data changes to an error code between the check and the use, ADC_TO_CURR
    results in an incorrect calculation.
    
    Read data->curr_sense into a local variable to ensure consistency. Note
    that data->curr_gain is constant and safe to access directly.
    
    This aligns max16065_current_show with max16065_input_show, which
    already uses a local variable for the same reason.
    
    Link: https://lore.kernel.org/all/CALbr=LYJ_ehtp53HXEVkSpYoub+XYSTU8Rg=o1xxMJ8=5z8B-g@mail.gmail.com/
    Fixes: f5bae2642e3d ("hwmon: Driver for MAX16065 System Manager and compatibles")
    Cc: [email protected]
    Signed-off-by: Gui-Dong Han <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: (tmp401) fix overflow caused by default conversion rate value [+ + +]
Author: Alexey Simakov <[email protected]>
Date:   Thu Dec 11 19:43:43 2025 +0300

    hwmon: (tmp401) fix overflow caused by default conversion rate value
    
    [ Upstream commit 82f2aab35a1ab2e1460de06ef04c726460aed51c ]
    
    The driver computes conversion intervals using the formula:
    
        interval = (1 << (7 - rate)) * 125ms
    
    where 'rate' is the sensor's conversion rate register value. According to
    the datasheet, the power-on reset value of this register is 0x8, which
    could be assigned to the register, after handling i2c general call.
    Using this default value causes a result greater than the bit width of
    left operand and an undefined behaviour in the calculation above, since
    shifting by values larger than the bit width is undefined behaviour as
    per C language standard.
    
    Limit the maximum usable 'rate' value to 7 to prevent undefined
    behaviour in calculations.
    
    Found by Linux Verification Center (linuxtesting.org) with Svace.
    
    Note (groeck):
        This does not matter in practice unless someone overwrites the chip
        configuration from outside the driver while the driver is loaded.
        The conversion time register is initialized with a value of 5 (500ms)
        when the driver is loaded, and the driver never writes a bad value.
    
    Fixes: ca53e7640de7 ("hwmon: (tmp401) Convert to _info API")
    Signed-off-by: Alexey Simakov <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

hwmon: (w83791d) Convert macros to functions to avoid TOCTOU [+ + +]
Author: Gui-Dong Han <[email protected]>
Date:   Wed Dec 3 02:01:05 2025 +0800

    hwmon: (w83791d) Convert macros to functions to avoid TOCTOU
    
    commit 670d7ef945d3a84683594429aea6ab2cdfa5ceb4 upstream.
    
    The macro FAN_FROM_REG evaluates its arguments multiple times. When used
    in lockless contexts involving shared driver data, this leads to
    Time-of-Check to Time-of-Use (TOCTOU) race conditions, potentially
    causing divide-by-zero errors.
    
    Convert the macro to a static function. This guarantees that arguments
    are evaluated only once (pass-by-value), preventing the race
    conditions.
    
    Additionally, in store_fan_div, move the calculation of the minimum
    limit inside the update lock. This ensures that the read-modify-write
    sequence operates on consistent data.
    
    Adhere to the principle of minimal changes by only converting macros
    that evaluate arguments multiple times and are used in lockless
    contexts.
    
    Link: https://lore.kernel.org/all/CALbr=LYJ_ehtp53HXEVkSpYoub+XYSTU8Rg=o1xxMJ8=5z8B-g@mail.gmail.com/
    Fixes: 9873964d6eb2 ("[PATCH] HWMON: w83791d: New hardware monitoring driver for the Winbond W83791D")
    Cc: [email protected]
    Signed-off-by: Gui-Dong Han <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: (w83l786ng) Convert macros to functions to avoid TOCTOU [+ + +]
Author: Gui-Dong Han <[email protected]>
Date:   Fri Nov 28 20:38:16 2025 +0800

    hwmon: (w83l786ng) Convert macros to functions to avoid TOCTOU
    
    commit 07272e883fc61574b8367d44de48917f622cdd83 upstream.
    
    The macros FAN_FROM_REG and TEMP_FROM_REG evaluate their arguments
    multiple times. When used in lockless contexts involving shared driver
    data, this causes Time-of-Check to Time-of-Use (TOCTOU) race
    conditions.
    
    Convert the macros to static functions. This guarantees that arguments
    are evaluated only once (pass-by-value), preventing the race
    conditions.
    
    Adhere to the principle of minimal changes by only converting macros
    that evaluate arguments multiple times and are used in lockless
    contexts.
    
    Link: https://lore.kernel.org/all/CALbr=LYJ_ehtp53HXEVkSpYoub+XYSTU8Rg=o1xxMJ8=5z8B-g@mail.gmail.com/
    Fixes: 85f03bccd6e0 ("hwmon: Add support for Winbond W83L786NG/NR")
    Cc: [email protected]
    Signed-off-by: Gui-Dong Han <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: sy7636a: Fix regulator_enable resource leak on error path [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Thu Nov 27 00:26:02 2025 +0800

    hwmon: sy7636a: Fix regulator_enable resource leak on error path
    
    [ Upstream commit 2f88425ef590b7fcc2324334b342e048edc144a9 ]
    
    In sy7636a_sensor_probe(), regulator_enable() is called but if
    devm_hwmon_device_register_with_info() fails, the function returns
    without calling regulator_disable(), leaving the regulator enabled
    and leaking the reference count.
    
    Switch to devm_regulator_get_enable() to automatically
    manage the regulator resource.
    
    Fixes: de34a4053250 ("hwmon: sy7636a: Add temperature driver for sy7636a")
    Suggested-by: Guenter Roeck <[email protected]>
    Signed-off-by: Haotian Zhang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
i2c: amd-mp2: fix reference leak in MP2 PCI device [+ + +]
Author: Ma Ke <[email protected]>
Date:   Wed Oct 22 17:54:02 2025 +0800

    i2c: amd-mp2: fix reference leak in MP2 PCI device
    
    commit a6ee6aac66fb394b7f6e6187c73bdcd873f2d139 upstream.
    
    In i2c_amd_probe(), amd_mp2_find_device() utilizes
    driver_find_next_device() which internally calls driver_find_device()
    to locate the matching device. driver_find_device() increments the
    reference count of the found device by calling get_device(), but
    amd_mp2_find_device() fails to call put_device() to decrement the
    reference count before returning. This results in a reference count
    leak of the PCI device each time i2c_amd_probe() is executed, which
    may prevent the device from being properly released and cause a memory
    leak.
    
    Found by code review.
    
    Cc: [email protected]
    Fixes: 529766e0a011 ("i2c: Add drivers for the AMD PCIe MP2 I2C controller")
    Signed-off-by: Ma Ke <[email protected]>
    Signed-off-by: Andi Shyti <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
i3c: Allow OF-alias-based persistent bus numbering [+ + +]
Author: Jeremy Kerr <[email protected]>
Date:   Wed Apr 5 17:41:49 2023 +0800

    i3c: Allow OF-alias-based persistent bus numbering
    
    [ Upstream commit 7dc2e0a875645a79f5c1c063019397e8e94008f5 ]
    
    Parse the /aliases node to assign any fixed bus numbers, as is done with
    the i2c subsystem. Numbering for non-aliased busses will start after the
    highest fixed bus number.
    
    This allows an alias node such as:
    
        aliases {
            i3c0 = &bus_a,
            i3c4 = &bus_b,
        };
    
    to set the numbering for a set of i3c controllers:
    
        /* fixed-numbered bus, assigned "i3c-0" */
        bus_a: i3c-master {
        };
    
        /* another fixed-numbered bus, assigned "i3c-4" */
        bus_b: i3c-master {
        };
    
        /* dynamic-numbered bus, likely assigned "i3c-5" */
        bus_c: i3c-master {
        };
    
    If no i3c device aliases are present, the numbering will stay as-is,
    starting from 0.
    
    Signed-off-by: Jeremy Kerr <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexandre Belloni <[email protected]>
    Stable-dep-of: 9d4f219807d5 ("i3c: fix refcount inconsistency in i3c_master_register")
    Signed-off-by: Sasha Levin <[email protected]>

i3c: fix refcount inconsistency in i3c_master_register [+ + +]
Author: Frank Li <[email protected]>
Date:   Thu Oct 16 10:38:13 2025 -0400

    i3c: fix refcount inconsistency in i3c_master_register
    
    [ Upstream commit 9d4f219807d5ac11fb1d596e4ddb09336b040067 ]
    
    In `i3c_master_register`, a possible refcount inconsistency has been
    identified, causing possible resource leak.
    
    Function `of_node_get` increases the refcount of `parent->of_node`. If
    function `i3c_bus_init` fails, the function returns immediately without
    a corresponding decrease, resulting in an inconsistent refcounter.
    
    Move call i3c_bus_init() after device_initialize() to let callback
    i3c_masterdev_release() release of_node.
    
    Reported-by: Shuhao Fu <[email protected]>
    Closes: https://lore.kernel.org/linux-i3c/[email protected]/T/#m2c05a982beeb14e7bf039c1d8db856734bf234c7
    Fixes: 3a379bbcea0a ("i3c: Add core I3C infrastructure")
    Signed-off-by: Frank Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

i3c: master: Inherit DMA masks and parameters from parent device [+ + +]
Author: Jarkko Nikula <[email protected]>
Date:   Thu Sep 21 08:56:53 2023 +0300

    i3c: master: Inherit DMA masks and parameters from parent device
    
    [ Upstream commit 0c35691551387e060e6ae7a6652b4101270c73cf ]
    
    Copy the DMA masks and parameters for an I3C master device from parent
    device so that the master device has them set for the DMA buffer and
    mapping API.
    
    Signed-off-by: Jarkko Nikula <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexandre Belloni <[email protected]>
    Stable-dep-of: 9d4f219807d5 ("i3c: fix refcount inconsistency in i3c_master_register")
    Signed-off-by: Sasha Levin <[email protected]>

i3c: master: svc: Prevent incomplete IBI transaction [+ + +]
Author: Stanley Chu <[email protected]>
Date:   Mon Oct 27 11:47:15 2025 +0800

    i3c: master: svc: Prevent incomplete IBI transaction
    
    [ Upstream commit 3a36273e5a07dda0ccec193800f3b78c3c0380af ]
    
    If no free IBI slot is available, svc_i3c_master_handle_ibi returns
    immediately. This causes the STOP condition to be missed because the
    EmitStop request is sent when the transfer is not complete. To resolve
    this, svc_i3c_master_handle_ibi must wait for the transfer to complete
    before returning.
    
    Fixes: dd3c52846d59 ("i3c: master: svc: Add Silvaco I3C master driver")
    Signed-off-by: Stanley Chu <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Reviewed-by: Miquel Raynal <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
i40e: fix scheduling in set_rx_mode [+ + +]
Author: Przemyslaw Korba <[email protected]>
Date:   Thu Nov 20 13:07:28 2025 +0100

    i40e: fix scheduling in set_rx_mode
    
    [ Upstream commit be43abc5514167cc129a8d8e9727b89b8e1d9719 ]
    
    Add service task schedule to set_rx_mode.
    In some cases there are error messages printed out in PTP application
    (ptp4l):
    
    ptp4l[13848.762]: port 1 (ens2f3np3): received SYNC without timestamp
    ptp4l[13848.825]: port 1 (ens2f3np3): received SYNC without timestamp
    ptp4l[13848.887]: port 1 (ens2f3np3): received SYNC without timestamp
    
    This happens when service task would not run immediately after
    set_rx_mode, and we need it for setup tasks. This service task checks, if
    PTP RX packets are hung in firmware, and propagate correct settings such
    as multicast address for IEEE 1588 Precision Time Protocol.
    RX timestamping depends on some of these filters set. Bug happens only
    with high PTP packets frequency incoming, and not every run since
    sometimes service task is being ran from a different place immediately
    after starting ptp4l.
    
    Fixes: 0e4425ed641f ("i40e: fix: do not sleep in netdev_ops")
    Reviewed-by: Grzegorz Nitka <[email protected]>
    Reviewed-by: Jacob Keller <[email protected]>
    Reviewed-by: Aleksandr Loktionov <[email protected]>
    Signed-off-by: Przemyslaw Korba <[email protected]>
    Tested-by: Rinitha S <[email protected]> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

i40e: Refactor argument of i40e_detect_recover_hung() [+ + +]
Author: Ivan Vecera <[email protected]>
Date:   Sat Apr 27 09:26:04 2024 +0200

    i40e: Refactor argument of i40e_detect_recover_hung()
    
    [ Upstream commit 7033ada04e33048c8b33294fecbb0d73f3cd1088 ]
    
    Commit 07d44190a389 ("i40e/i40evf: Detect and recover hung queue
    scenario") changes i40e_detect_recover_hung() argument type from
    i40e_pf* to i40e_vsi* to be shareable by both i40e and i40evf.
    Because the i40evf does not exist anymore and the function is
    exclusively used by i40e we can revert this change.
    
    Reviewed-by: Michal Schmidt <[email protected]>
    Tested-by: Pucha Himasekhar Reddy <[email protected]>
    Signed-off-by: Ivan Vecera <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Stable-dep-of: 699428342153 ("i40e: validate ring_len parameter against hardware-specific values")
    Signed-off-by: Sasha Levin <[email protected]>

i40e: Refactor argument of several client notification functions [+ + +]
Author: Ivan Vecera <[email protected]>
Date:   Sat Apr 27 09:26:03 2024 +0200

    i40e: Refactor argument of several client notification functions
    
    [ Upstream commit 54c4664e48eea52f2b296c73ddb8f5629b958678 ]
    
    Commit 0ef2d5afb12d ("i40e: KISS the client interface") simplified
    the client interface so in practice it supports only one client
    per i40e netdev. But we have still 2 notification functions that
    uses as parameter a pointer to VSI of netdevice associated with
    the client. After the mentioned commit only possible and used
    VSI is the main (LAN) VSI.
    So refactor these functions so they are called with PF pointer argument
    and the associated VSI (LAN) is taken inside them.
    
    Reviewed-by: Michal Schmidt <[email protected]>
    Tested-by: Pucha Himasekhar Reddy <[email protected]>
    Signed-off-by: Ivan Vecera <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Stable-dep-of: 699428342153 ("i40e: validate ring_len parameter against hardware-specific values")
    Signed-off-by: Sasha Levin <[email protected]>

i40e: validate ring_len parameter against hardware-specific values [+ + +]
Author: Gregory Herrero <[email protected]>
Date:   Fri Dec 12 22:06:43 2025 +0100

    i40e: validate ring_len parameter against hardware-specific values
    
    [ Upstream commit 69942834215323cd9131db557091b4dec43f19c5 ]
    
    The maximum number of descriptors supported by the hardware is
    hardware-dependent and can be retrieved using
    i40e_get_max_num_descriptors(). Move this function to a shared header
    and use it when checking for valid ring_len parameter rather than using
    hardcoded value.
    
    By fixing an over-acceptance issue, behavior change could be seen where
    ring_len could now be rejected while configuring rx and tx queues if its
    size is larger than the hardware-dependent maximum number of
    descriptors.
    
    Fixes: 55d225670def ("i40e: add validation for ring_len param")
    Signed-off-by: Gregory Herrero <[email protected]>
    Tested-by: Rafal Romanowski <[email protected]>
    Reviewed-by: Aleksandr Loktionov <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
iavf: fix off-by-one issues in iavf_config_rss_reg() [+ + +]
Author: Kohei Enju <[email protected]>
Date:   Sun Oct 26 01:58:50 2025 +0900

    iavf: fix off-by-one issues in iavf_config_rss_reg()
    
    [ Upstream commit 6daa2893f323981c7894c68440823326e93a7d61 ]
    
    There are off-by-one bugs when configuring RSS hash key and lookup
    table, causing out-of-bounds reads to memory [1] and out-of-bounds
    writes to device registers.
    
    Before commit 43a3d9ba34c9 ("i40evf: Allow PF driver to configure RSS"),
    the loop upper bounds were:
        i <= I40E_VFQF_{HKEY,HLUT}_MAX_INDEX
    which is safe since the value is the last valid index.
    
    That commit changed the bounds to:
        i <= adapter->rss_{key,lut}_size / 4
    where `rss_{key,lut}_size / 4` is the number of dwords, so the last
    valid index is `(rss_{key,lut}_size / 4) - 1`. Therefore, using `<=`
    accesses one element past the end.
    
    Fix the issues by using `<` instead of `<=`, ensuring we do not exceed
    the bounds.
    
    [1] KASAN splat about rss_key_size off-by-one
      BUG: KASAN: slab-out-of-bounds in iavf_config_rss+0x619/0x800
      Read of size 4 at addr ffff888102c50134 by task kworker/u8:6/63
    
      CPU: 0 UID: 0 PID: 63 Comm: kworker/u8:6 Not tainted 6.18.0-rc2-enjuk-tnguy-00378-g3005f5b77652-dirty #156 PREEMPT(voluntary)
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
      Workqueue: iavf iavf_watchdog_task
      Call Trace:
       <TASK>
       dump_stack_lvl+0x6f/0xb0
       print_report+0x170/0x4f3
       kasan_report+0xe1/0x1a0
       iavf_config_rss+0x619/0x800
       iavf_watchdog_task+0x2be7/0x3230
       process_one_work+0x7fd/0x1420
       worker_thread+0x4d1/0xd40
       kthread+0x344/0x660
       ret_from_fork+0x249/0x320
       ret_from_fork_asm+0x1a/0x30
       </TASK>
    
      Allocated by task 63:
       kasan_save_stack+0x30/0x50
       kasan_save_track+0x14/0x30
       __kasan_kmalloc+0x7f/0x90
       __kmalloc_noprof+0x246/0x6f0
       iavf_watchdog_task+0x28fc/0x3230
       process_one_work+0x7fd/0x1420
       worker_thread+0x4d1/0xd40
       kthread+0x344/0x660
       ret_from_fork+0x249/0x320
       ret_from_fork_asm+0x1a/0x30
    
      The buggy address belongs to the object at ffff888102c50100
       which belongs to the cache kmalloc-64 of size 64
      The buggy address is located 0 bytes to the right of
       allocated 52-byte region [ffff888102c50100, ffff888102c50134)
    
      The buggy address belongs to the physical page:
      page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x102c50
      flags: 0x200000000000000(node=0|zone=2)
      page_type: f5(slab)
      raw: 0200000000000000 ffff8881000418c0 dead000000000122 0000000000000000
      raw: 0000000000000000 0000000080200020 00000000f5000000 0000000000000000
      page dumped because: kasan: bad access detected
    
      Memory state around the buggy address:
       ffff888102c50000: 00 00 00 00 00 00 00 fc fc fc fc fc fc fc fc fc
       ffff888102c50080: 00 00 00 00 00 00 00 fc fc fc fc fc fc fc fc fc
      >ffff888102c50100: 00 00 00 00 00 00 04 fc fc fc fc fc fc fc fc fc
                                           ^
       ffff888102c50180: 00 00 00 00 00 00 00 00 fc fc fc fc fc fc fc fc
       ffff888102c50200: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    
    Fixes: 43a3d9ba34c9 ("i40evf: Allow PF driver to configure RSS")
    Signed-off-by: Kohei Enju <[email protected]>
    Reviewed-by: Aleksandr Loktionov <[email protected]>
    Reviewed-by: Przemek Kitszel <[email protected]>
    Tested-by: Rafal Romanowski <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
idr: fix idr_alloc() returning an ID out of range [+ + +]
Author: Matthew Wilcox (Oracle) <[email protected]>
Date:   Fri Nov 28 16:18:32 2025 +0000

    idr: fix idr_alloc() returning an ID out of range
    
    commit c6e8e595a0798ad67da0f7bebaf69c31ef70dfff upstream.
    
    If you use an IDR with a non-zero base, and specify a range that lies
    entirely below the base, 'max - base' becomes very large and
    idr_get_free() can return an ID that lies outside of the requested range.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 6ce711f27500 ("idr: Make 1-based IDRs more efficient")
    Signed-off-by: Matthew Wilcox (Oracle) <[email protected]>
    Reported-by: Jan Sokolowski <[email protected]>
    Reported-by: Koen Koning <[email protected]>
    Reported-by: Peter Senna Tschudin <[email protected]>
    Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/6449
    Reviewed-by: Christian König <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
iio: adc: ti_am335x_adc: Limit step_avg to valid range for gcc complains [+ + +]
Author: Pei Xiao <[email protected]>
Date:   Tue Oct 14 17:12:50 2025 +0800

    iio: adc: ti_am335x_adc: Limit step_avg to valid range for gcc complains
    
    [ Upstream commit c9fb952360d0c78bbe98239bd6b702f05c2dbb31 ]
    
    FIELD_PREP() checks that a value fits into the available bitfield, add a
    check for step_avg to fix gcc complains.
    
    which gcc complains about:
      drivers/iio/adc/ti_am335x_adc.c: In function 'tiadc_step_config':
      include/linux/compiler_types.h:572:38: error: call to
    '__compiletime_assert_491' declared with attribute error: FIELD_PREP: value
    too large for the field include/linux/mfd/ti_am335x_tscadc.h:58:29: note:
    in expansion of macro 'FIELD_PREP'
        #define STEPCONFIG_AVG(val) FIELD_PREP(GENMASK(4, 2), (val))
                                    ^~~~~~~~~~
    drivers/iio/adc/ti_am335x_adc.c:127:17: note: in expansion of macro 'STEPCONFIG_AVG'
            stepconfig = STEPCONFIG_AVG(ffs(adc_dev->step_avg[i]) - 1)
    
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Signed-off-by: Pei Xiao <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ima: Handle error code returned by ima_filter_rule_match() [+ + +]
Author: Zhao Yipeng <[email protected]>
Date:   Thu Nov 20 15:18:05 2025 +0800

    ima: Handle error code returned by ima_filter_rule_match()
    
    [ Upstream commit 738c9738e690f5cea24a3ad6fd2d9a323cf614f6 ]
    
    In ima_match_rules(), if ima_filter_rule_match() returns -ENOENT due to
    the rule being NULL, the function incorrectly skips the 'if (!rc)' check
    and sets 'result = true'. The LSM rule is considered a match, causing
    extra files to be measured by IMA.
    
    This issue can be reproduced in the following scenario:
    After unloading the SELinux policy module via 'semodule -d', if an IMA
    measurement is triggered before ima_lsm_rules is updated,
    in ima_match_rules(), the first call to ima_filter_rule_match() returns
    -ESTALE. This causes the code to enter the 'if (rc == -ESTALE &&
    !rule_reinitialized)' block, perform ima_lsm_copy_rule() and retry. In
    ima_lsm_copy_rule(), since the SELinux module has been removed, the rule
    becomes NULL, and the second call to ima_filter_rule_match() returns
    -ENOENT. This bypasses the 'if (!rc)' check and results in a false match.
    
    Call trace:
      selinux_audit_rule_match+0x310/0x3b8
      security_audit_rule_match+0x60/0xa0
      ima_match_rules+0x2e4/0x4a0
      ima_match_policy+0x9c/0x1e8
      ima_get_action+0x48/0x60
      process_measurement+0xf8/0xa98
      ima_bprm_check+0x98/0xd8
      security_bprm_check+0x5c/0x78
      search_binary_handler+0x6c/0x318
      exec_binprm+0x58/0x1b8
      bprm_execve+0xb8/0x130
      do_execveat_common.isra.0+0x1a8/0x258
      __arm64_sys_execve+0x48/0x68
      invoke_syscall+0x50/0x128
      el0_svc_common.constprop.0+0xc8/0xf0
      do_el0_svc+0x24/0x38
      el0_svc+0x44/0x200
      el0t_64_sync_handler+0x100/0x130
      el0t_64_sync+0x3c8/0x3d0
    
    Fix this by changing 'if (!rc)' to 'if (rc <= 0)' to ensure that error
    codes like -ENOENT do not bypass the check and accidentally result in a
    successful match.
    
    Fixes: 4af4662fa4a9d ("integrity: IMA policy")
    Signed-off-by: Zhao Yipeng <[email protected]>
    Reviewed-by: Roberto Sassu <[email protected]>
    Signed-off-by: Mimi Zohar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
inet: Avoid ehash lookup race in inet_ehash_insert() [+ + +]
Author: Xuanqiang Luo <[email protected]>
Date:   Wed Oct 15 10:02:35 2025 +0800

    inet: Avoid ehash lookup race in inet_ehash_insert()
    
    [ Upstream commit 1532ed0d0753c83e72595f785f82b48c28bbe5dc ]
    
    Since ehash lookups are lockless, if one CPU performs a lookup while
    another concurrently deletes and inserts (removing reqsk and inserting sk),
    the lookup may fail to find the socket, an RST may be sent.
    
    The call trace map is drawn as follows:
       CPU 0                           CPU 1
       -----                           -----
                                    inet_ehash_insert()
                                    spin_lock()
                                    sk_nulls_del_node_init_rcu(osk)
    __inet_lookup_established()
            (lookup failed)
                                    __sk_nulls_add_node_rcu(sk, list)
                                    spin_unlock()
    
    As both deletion and insertion operate on the same ehash chain, this patch
    introduces a new sk_nulls_replace_node_init_rcu() helper functions to
    implement atomic replacement.
    
    Fixes: 5e0724d027f0 ("tcp/dccp: fix hashdance race for passive sessions")
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Jiayuan Chen <[email protected]>
    Signed-off-by: Xuanqiang Luo <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Input: i8042 - add TUXEDO InfinityBook Max Gen10 AMD to i8042 quirk table [+ + +]
Author: Christoffer Sandberg <[email protected]>
Date:   Mon Nov 24 21:31:34 2025 +0100

    Input: i8042 - add TUXEDO InfinityBook Max Gen10 AMD to i8042 quirk table
    
    commit aed3716db7fff74919cc5775ca3a80c8bb246489 upstream.
    
    The device occasionally wakes up from suspend with missing input on the
    internal keyboard and the following suspend attempt results in an instant
    wake-up. The quirks fix both issues for this device.
    
    Signed-off-by: Christoffer Sandberg <[email protected]>
    Signed-off-by: Werner Sembach <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: ti_am335x_tsc - fix off-by-one error in wire_order validation [+ + +]
Author: Junjie Cao <[email protected]>
Date:   Thu Dec 18 21:56:59 2025 -0800

    Input: ti_am335x_tsc - fix off-by-one error in wire_order validation
    
    commit 248d3a73a0167dce15ba100477c3e778c4787178 upstream.
    
    The current validation 'wire_order[i] > ARRAY_SIZE(config_pins)' allows
    wire_order[i] to equal ARRAY_SIZE(config_pins), which causes out-of-bounds
    access when used as index in 'config_pins[wire_order[i]]'.
    
    Since config_pins has 4 elements (indices 0-3), the valid range for
    wire_order should be 0-3. Fix the off-by-one error by using >= instead
    of > in the validation check.
    
    Signed-off-by: Junjie Cao <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Fixes: bb76dc09ddfc ("input: ti_am33x_tsc: Order of TSC wires, made configurable")
    Cc: [email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
intel_th: Fix error handling in intel_th_output_open [+ + +]
Author: Ma Ke <[email protected]>
Date:   Wed Nov 12 17:17:23 2025 +0800

    intel_th: Fix error handling in intel_th_output_open
    
    commit 6d5925b667e4ed9e77c8278cc215191d29454a3f upstream.
    
    intel_th_output_open() calls bus_find_device_by_devt() which
    internally increments the device reference count via get_device(), but
    this reference is not properly released in several error paths. When
    device driver is unavailable, file operations cannot be obtained, or
    the driver's open method fails, the function returns without calling
    put_device(), leading to a permanent device reference count leak. This
    prevents the device from being properly released and could cause
    resource exhaustion over time.
    
    Found by code review.
    
    Cc: stable <[email protected]>
    Fixes: 39f4034693b7 ("intel_th: Add driver infrastructure for Intel(R) Trace Hub devices")
    Signed-off-by: Ma Ke <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
interconnect: qcom: msm8996: add missing link to SLAVE_USB_HS [+ + +]
Author: Dmitry Baryshkov <[email protected]>
Date:   Thu Oct 2 11:53:00 2025 +0300

    interconnect: qcom: msm8996: add missing link to SLAVE_USB_HS
    
    [ Upstream commit 8cf9b43f6b4d90e19a9341edefdd46842d4adb55 ]
    
    >From the initial submission the interconnect driver missed the link from
    SNOC_PNOC to the USB 2 configuration space. Add missing link in order to
    let the platform configure and utilize this path.
    
    Fixes: 7add937f5222 ("interconnect: qcom: Add MSM8996 interconnect provider driver")
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Georgi Djakov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
io_uring/poll: correctly handle io_poll_add() return value on update [+ + +]
Author: Jens Axboe <[email protected]>
Date:   Mon Dec 1 13:25:22 2025 -0700

    io_uring/poll: correctly handle io_poll_add() return value on update
    
    Commit 84230ad2d2afbf0c44c32967e525c0ad92e26b4e upstream.
    
    When the core of io_uring was updated to handle completions
    consistently and with fixed return codes, the POLL_REMOVE opcode
    with updates got slightly broken. If a POLL_ADD is pending and
    then POLL_REMOVE is used to update the events of that request, if that
    update causes the POLL_ADD to now trigger, then that completion is lost
    and a CQE is never posted.
    
    Additionally, ensure that if an update does cause an existing POLL_ADD
    to complete, that the completion value isn't always overwritten with
    -ECANCELED. For that case, whatever io_poll_add() set the value to
    should just be retained.
    
    Cc: [email protected]
    Fixes: 97b388d70b53 ("io_uring: handle completions in the core")
    Reported-by: [email protected]
    Tested-by: [email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
io_uring: fix filename leak in __io_openat_prep() [+ + +]
Author: Prithvi Tambewagh <[email protected]>
Date:   Thu Dec 25 12:58:29 2025 +0530

    io_uring: fix filename leak in __io_openat_prep()
    
    Commit b14fad555302a2104948feaff70503b64c80ac01 upstream.
    
     __io_openat_prep() allocates a struct filename using getname(). However,
    for the condition of the file being installed in the fixed file table as
    well as having O_CLOEXEC flag set, the function returns early. At that
    point, the request doesn't have REQ_F_NEED_CLEANUP flag set. Due to this,
    the memory for the newly allocated struct filename is not cleaned up,
    causing a memory leak.
    
    Fix this by setting the REQ_F_NEED_CLEANUP for the request just after the
    successful getname() call, so that when the request is torn down, the
    filename will be cleaned up, along with other resources needing cleanup.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=00e61c43eb5e4740438f
    Tested-by: [email protected]
    Cc: [email protected]
    Signed-off-by: Prithvi Tambewagh <[email protected]>
    Fixes: b9445598d8c6 ("io_uring: openat directly into fixed fd table")
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
iommu/amd: Fix pci_segment memleak in alloc_pci_segment() [+ + +]
Author: Jinhui Guo <[email protected]>
Date:   Tue Oct 28 00:50:17 2025 +0800

    iommu/amd: Fix pci_segment memleak in alloc_pci_segment()
    
    commit 75ba146c2674ba49ed8a222c67f9abfb4a4f2a4f upstream.
    
    Fix a memory leak of struct amd_iommu_pci_segment in alloc_pci_segment()
    when system memory (or contiguous memory) is insufficient.
    
    Fixes: 04230c119930 ("iommu/amd: Introduce per PCI segment device table")
    Fixes: eda797a27795 ("iommu/amd: Introduce per PCI segment rlookup table")
    Fixes: 99fc4ac3d297 ("iommu/amd: Introduce per PCI segment alias_table")
    Cc: [email protected]
    Signed-off-by: Jinhui Guo <[email protected]>
    Signed-off-by: Joerg Roedel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
iommu/apple-dart: fix device leak on of_xlate() [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Oct 20 06:53:05 2025 +0200

    iommu/apple-dart: fix device leak on of_xlate()
    
    commit a6eaa872c52a181ae9a290fd4e40c9df91166d7a upstream.
    
    Make sure to drop the reference taken to the iommu platform device when
    looking up its driver data during of_xlate().
    
    Fixes: 46d1fb072e76 ("iommu/dart: Add DART iommu driver")
    Cc: [email protected]      # 5.15
    Cc: Sven Peter <[email protected]>
    Acked-by: Robin Murphy <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Joerg Roedel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
iommu/arm-smmu-qcom: Enable use of all SMR groups when running bare-metal [+ + +]
Author: Stephan Gerhold <[email protected]>
Date:   Thu Aug 21 10:33:53 2025 +0200

    iommu/arm-smmu-qcom: Enable use of all SMR groups when running bare-metal
    
    [ Upstream commit 5583a55e074b33ccd88ac0542fd7cd656a7e2c8c ]
    
    Some platforms (e.g. SC8280XP and X1E) support more than 128 stream
    matching groups. This is more than what is defined as maximum by the ARM
    SMMU architecture specification. Commit 122611347326 ("iommu/arm-smmu-qcom:
    Limit the SMR groups to 128") disabled use of the additional groups because
    they don't exhibit the same behavior as the architecture supported ones.
    
    It seems like this is just another quirk of the hypervisor: When running
    bare-metal without the hypervisor, the additional groups appear to behave
    just like all others. The boot firmware uses some of the additional groups,
    so ignoring them in this situation leads to stream match conflicts whenever
    we allocate a new SMR group for the same SID.
    
    The workaround exists primarily because the bypass quirk detection fails
    when using a S2CR register from the additional matching groups, so let's
    perform the test with the last reliable S2CR (127) and then limit the
    number of SMR groups only if we detect that we are running below the
    hypervisor (because of the bypass quirk).
    
    Fixes: 122611347326 ("iommu/arm-smmu-qcom: Limit the SMR groups to 128")
    Signed-off-by: Stephan Gerhold <[email protected]>
    Signed-off-by: Will Deacon <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
iommu/arm-smmu: Convert to platform remove callback returning void [+ + +]
Author: Uwe Kleine-König <[email protected]>
Date:   Mon Jan 5 10:44:50 2026 -0500

    iommu/arm-smmu: Convert to platform remove callback returning void
    
    [ Upstream commit 62565a77c2323d32f2be737455729ac7d3efe6ad ]
    
    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 (mostly) ignored
    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.
    
    Trivially convert this driver from always returning zero in the remove
    callback to the void returning variant.
    
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Joerg Roedel <[email protected]>
    Stable-dep-of: 6a3908ce56e6 ("iommu/qcom: fix device leak on of_xlate()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iommu/arm-smmu: Drop if with an always false condition [+ + +]
Author: Uwe Kleine-König <[email protected]>
Date:   Mon Jan 5 10:44:49 2026 -0500

    iommu/arm-smmu: Drop if with an always false condition
    
    [ Upstream commit a2972cb89935160bfe515b15d28a77694723ac06 ]
    
    The remove and shutdown callback are only called after probe completed
    successfully. In this case platform_set_drvdata() was called with a
    non-NULL argument and so smmu is never NULL. Other functions in this
    driver also don't check for smmu being non-NULL before using it.
    
    Also note that returning an error code from a remove callback doesn't
    result in the device staying bound. It's still removed and devm allocated
    resources are freed (among others *smmu and the register mapping). So
    after an early exit to iommu device stayed around and using it probably
    oopses.
    
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Reviewed-by: Robin Murphy <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Joerg Roedel <[email protected]>
    Stable-dep-of: 6a3908ce56e6 ("iommu/qcom: fix device leak on of_xlate()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
iommu/exynos: fix device leak on of_xlate() [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Oct 20 06:53:07 2025 +0200

    iommu/exynos: fix device leak on of_xlate()
    
    commit 05913cc43cb122f9afecdbe775115c058b906e1b upstream.
    
    Make sure to drop the reference taken to the iommu platform device when
    looking up its driver data during of_xlate().
    
    Note that commit 1a26044954a6 ("iommu/exynos: add missing put_device()
    call in exynos_iommu_of_xlate()") fixed the leak in a couple of error
    paths, but the reference is still leaking on success.
    
    Fixes: aa759fd376fb ("iommu/exynos: Add callback for initializing devices from device tree")
    Cc: [email protected]      # 4.2: 1a26044954a6
    Cc: Yu Kuai <[email protected]>
    Acked-by: Robin Murphy <[email protected]>
    Acked-by: Marek Szyprowski <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Joerg Roedel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
iommu/ipmmu-vmsa: fix device leak on of_xlate() [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Oct 20 06:53:08 2025 +0200

    iommu/ipmmu-vmsa: fix device leak on of_xlate()
    
    commit 80aa518452c4aceb9459f9a8e3184db657d1b441 upstream.
    
    Make sure to drop the reference taken to the iommu platform device when
    looking up its driver data during of_xlate().
    
    Fixes: 7b2d59611fef ("iommu/ipmmu-vmsa: Replace local utlb code with fwspec ids")
    Cc: [email protected]      # 4.14
    Cc: Magnus Damm <[email protected]>
    Acked-by: Robin Murphy <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Joerg Roedel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
iommu/mediatek-v1: fix device leak on probe_device() [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Oct 20 06:53:12 2025 +0200

    iommu/mediatek-v1: fix device leak on probe_device()
    
    commit c77ad28bfee0df9cbc719eb5adc9864462cfb65b upstream.
    
    Make sure to drop the reference taken to the iommu platform device when
    looking up its driver data during probe_device().
    
    Fixes: b17336c55d89 ("iommu/mediatek: add support for mtk iommu generation one HW")
    Cc: [email protected]      # 4.8
    Cc: Honghui Zhang <[email protected]>
    Acked-by: Robin Murphy <[email protected]>
    Reviewed-by: Yong Wu <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
    Signed-off-by: Joerg Roedel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iommu/mediatek-v1: fix device leaks on probe() [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Jan 5 10:32:20 2026 -0500

    iommu/mediatek-v1: fix device leaks on probe()
    
    [ Upstream commit 46207625c9f33da0e43bb4ae1e91f0791b6ed633 ]
    
    Make sure to drop the references taken to the larb devices during
    probe on probe failure (e.g. probe deferral) and on driver unbind.
    
    Fixes: b17336c55d89 ("iommu/mediatek: add support for mtk iommu generation one HW")
    Cc: [email protected]      # 4.8
    Cc: Honghui Zhang <[email protected]>
    Acked-by: Robin Murphy <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
    Signed-off-by: Joerg Roedel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
iommu/mediatek: fix device leak on of_xlate() [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Oct 20 06:53:09 2025 +0200

    iommu/mediatek: fix device leak on of_xlate()
    
    commit b3f1ee18280363ef17f82b564fc379ceba9ec86f upstream.
    
    Make sure to drop the reference taken to the iommu platform device when
    looking up its driver data during of_xlate().
    
    Fixes: 0df4fabe208d ("iommu/mediatek: Add mt8173 IOMMU driver")
    Cc: [email protected]      # 4.6
    Acked-by: Robin Murphy <[email protected]>
    Reviewed-by: Yong Wu <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
    Signed-off-by: Joerg Roedel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iommu/mediatek: fix use-after-free on probe deferral [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Wed Dec 31 18:38:58 2025 -0500

    iommu/mediatek: fix use-after-free on probe deferral
    
    [ Upstream commit de83d4617f9fe059623e97acf7e1e10d209625b5 ]
    
    The driver is dropping the references taken to the larb devices during
    probe after successful lookup as well as on errors. This can
    potentially lead to a use-after-free in case a larb device has not yet
    been bound to its driver so that the iommu driver probe defers.
    
    Fix this by keeping the references as expected while the iommu driver is
    bound.
    
    Fixes: 26593928564c ("iommu/mediatek: Add error path for loop of mm_dts_parse")
    Cc: [email protected]
    Cc: Yong Wu <[email protected]>
    Acked-by: Robin Murphy <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Yong Wu <[email protected]>
    Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
    Signed-off-by: Joerg Roedel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iommu/mediatek: Improve safety for mediatek,smi property in larb nodes [+ + +]
Author: Yong Wu <[email protected]>
Date:   Wed Dec 31 18:38:57 2025 -0500

    iommu/mediatek: Improve safety for mediatek,smi property in larb nodes
    
    [ Upstream commit 6cde583d5352818a51985b32a960cdde85ab3821 ]
    
    No functional change. Just improve safety from dts.
    
    All the larbs that connect to one IOMMU must connect with the same
    smi-common. This patch checks all the mediatek,smi property for each
    larb, If their mediatek,smi are different, it will return fails.
    Also avoid there is no available smi-larb nodes.
    
    Suggested-by: Guenter Roeck <[email protected]>
    Signed-off-by: Yong Wu <[email protected]>
    Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
    Reviewed-by: Matthias Brugger <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Joerg Roedel <[email protected]>
    Stable-dep-of: de83d4617f9f ("iommu/mediatek: fix use-after-free on probe deferral")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
iommu/mtk_iommu_v1: Convert to platform remove callback returning void [+ + +]
Author: Uwe Kleine-König <[email protected]>
Date:   Mon Jan 5 10:32:19 2026 -0500

    iommu/mtk_iommu_v1: Convert to platform remove callback returning void
    
    [ Upstream commit 85e1049e50da9409678fc247ebad4c019d68041f ]
    
    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 (mostly) ignored
    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.
    
    Trivially convert this driver from always returning zero in the remove
    callback to the void returning variant.
    
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Joerg Roedel <[email protected]>
    Stable-dep-of: 46207625c9f3 ("iommu/mediatek-v1: fix device leaks on probe()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
iommu/omap: fix device leaks on probe_device() [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Oct 20 06:53:15 2025 +0200

    iommu/omap: fix device leaks on probe_device()
    
    commit b5870691065e6bbe6ba0650c0412636c6a239c5a upstream.
    
    Make sure to drop the references taken to the iommu platform devices
    when looking up their driver data during probe_device().
    
    Note that the arch data device pointer added by commit 604629bcb505
    ("iommu/omap: add support for late attachment of iommu devices") has
    never been used. Remove it to underline that the references are not
    needed.
    
    Fixes: 9d5018deec86 ("iommu/omap: Add support to program multiple iommus")
    Fixes: 7d6827748d54 ("iommu/omap: Fix iommu archdata name for DT-based devices")
    Cc: [email protected]      # 3.18
    Cc: Suman Anna <[email protected]>
    Acked-by: Robin Murphy <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Joerg Roedel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
iommu/qcom: fix device leak on of_xlate() [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Jan 5 10:44:53 2026 -0500

    iommu/qcom: fix device leak on of_xlate()
    
    [ Upstream commit 6a3908ce56e6879920b44ef136252b2f0c954194 ]
    
    Make sure to drop the reference taken to the iommu platform device when
    looking up its driver data during of_xlate().
    
    Note that commit e2eae09939a8 ("iommu/qcom: add missing put_device()
    call in qcom_iommu_of_xlate()") fixed the leak in a couple of error
    paths, but the reference is still leaking on success and late failures.
    
    Fixes: 0ae349a0f33f ("iommu/qcom: Add qcom_iommu")
    Cc: [email protected]      # 4.14: e2eae09939a8
    Cc: Rob Clark <[email protected]>
    Cc: Yu Kuai <[email protected]>
    Acked-by: Robin Murphy <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Joerg Roedel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iommu/qcom: Index contexts by asid number to allow asid 0 [+ + +]
Author: AngeloGioacchino Del Regno <[email protected]>
Date:   Mon Jan 5 10:44:52 2026 -0500

    iommu/qcom: Index contexts by asid number to allow asid 0
    
    [ Upstream commit ec5601661bfcdc206e6ceba1b97837e763dab1ba ]
    
    This driver was indexing the contexts by asid-1, which is probably
    done under the assumption that the first ASID is always 1.
    Unfortunately this is not always true: at least for MSM8956 and
    MSM8976's GPU IOMMU, the gpu_user context's ASID number is zero.
    To allow using a zero asid number, index the contexts by `asid`
    instead of by `asid - 1`.
    
    While at it, also enhance human readability by renaming the
    `num_ctxs` member of struct qcom_iommu_dev to `max_asid`.
    
    Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Will Deacon <[email protected]>
    Stable-dep-of: 6a3908ce56e6 ("iommu/qcom: fix device leak on of_xlate()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iommu/qcom: Use the asid read from device-tree if specified [+ + +]
Author: AngeloGioacchino Del Regno <[email protected]>
Date:   Mon Jan 5 10:44:51 2026 -0500

    iommu/qcom: Use the asid read from device-tree if specified
    
    [ Upstream commit fcf226f1f7083cba76af47bf8dd764b68b149cd2 ]
    
    As specified in this driver, the context banks are 0x1000 apart but
    on some SoCs the context number does not necessarily match this
    logic, hence we end up using the wrong ASID: keeping in mind that
    this IOMMU implementation relies heavily on SCM (TZ) calls, it is
    mandatory that we communicate the right context number.
    
    Since this is all about how context banks are mapped in firmware,
    which may be board dependent (as a different firmware version may
    eventually change the expected context bank numbers), introduce a
    new property "qcom,ctx-asid": when found, the ASID will be forced
    as read from the devicetree.
    
    When "qcom,ctx-asid" is not found, this driver retains the previous
    behavior as to avoid breaking older devicetrees or systems that do
    not require forcing ASID numbers.
    
    Signed-off-by: Marijn Suijten <[email protected]>
    [Marijn: Rebased over next-20221111]
    Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Will Deacon <[email protected]>
    Stable-dep-of: 6a3908ce56e6 ("iommu/qcom: fix device leak on of_xlate()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
iommu/sun50i: fix device leak on of_xlate() [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Oct 20 06:53:17 2025 +0200

    iommu/sun50i: fix device leak on of_xlate()
    
    commit f916109bf53864605d10bf6f4215afa023a80406 upstream.
    
    Make sure to drop the reference taken to the iommu platform device when
    looking up its driver data during of_xlate().
    
    Fixes: 4100b8c229b3 ("iommu: Add Allwinner H6 IOMMU driver")
    Cc: [email protected]      # 5.8
    Cc: Maxime Ripard <[email protected]>
    Acked-by: Robin Murphy <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Joerg Roedel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
iommu/tegra: fix device leak on probe_device() [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Oct 20 06:53:18 2025 +0200

    iommu/tegra: fix device leak on probe_device()
    
    commit c08934a61201db8f1d1c66fcc63fb2eb526b656d upstream.
    
    Make sure to drop the reference taken to the iommu platform device when
    looking up its driver data during probe_device().
    
    Note that commit 9826e393e4a8 ("iommu/tegra-smmu: Fix missing
    put_device() call in tegra_smmu_find") fixed the leak in an error path,
    but the reference is still leaking on success.
    
    Fixes: 891846516317 ("memory: Add NVIDIA Tegra memory controller support")
    Cc: [email protected]      # 3.19: 9826e393e4a8
    Cc: Miaoqian Lin <[email protected]>
    Acked-by: Robin Murphy <[email protected]>
    Acked-by: Thierry Reding <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Joerg Roedel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ip6_gre: make ip6gre_header() robust [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Dec 11 17:35:50 2025 +0000

    ip6_gre: make ip6gre_header() robust
    
    [ Upstream commit db5b4e39c4e63700c68a7e65fc4e1f1375273476 ]
    
    Over the years, syzbot found many ways to crash the kernel
    in ip6gre_header() [1].
    
    This involves team or bonding drivers ability to dynamically
    change their dev->needed_headroom and/or dev->hard_header_len
    
    In this particular crash mld_newpack() allocated an skb
    with a too small reserve/headroom, and by the time mld_sendpack()
    was called, syzbot managed to attach an ip6gre device.
    
    [1]
    skbuff: skb_under_panic: text:ffffffff8a1d69a8 len:136 put:40 head:ffff888059bc7000 data:ffff888059bc6fe8 tail:0x70 end:0x6c0 dev:team0
    ------------[ cut here ]------------
     kernel BUG at net/core/skbuff.c:213 !
     <TASK>
      skb_under_panic net/core/skbuff.c:223 [inline]
      skb_push+0xc3/0xe0 net/core/skbuff.c:2641
      ip6gre_header+0xc8/0x790 net/ipv6/ip6_gre.c:1371
      dev_hard_header include/linux/netdevice.h:3436 [inline]
      neigh_connected_output+0x286/0x460 net/core/neighbour.c:1618
      neigh_output include/net/neighbour.h:556 [inline]
      ip6_finish_output2+0xfb3/0x1480 net/ipv6/ip6_output.c:136
     __ip6_finish_output net/ipv6/ip6_output.c:-1 [inline]
      ip6_finish_output+0x234/0x7d0 net/ipv6/ip6_output.c:220
      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
    
    Fixes: c12b395a4664 ("gre: Support GRE over IPv6")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ipmi: Fix __scan_channels() failing to rescan channels [+ + +]
Author: Jinhui Guo <[email protected]>
Date:   Tue Sep 30 15:42:38 2025 +0800

    ipmi: Fix __scan_channels() failing to rescan channels
    
    [ Upstream commit 6bd30d8fc523fb880b4be548e8501bc0fe8f42d4 ]
    
    channel_handler() sets intf->channels_ready to true but never
    clears it, so __scan_channels() skips any rescan. When the BMC
    firmware changes a rescan is required. Allow it by clearing
    the flag before starting a new scan.
    
    Signed-off-by: Jinhui Guo <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Corey Minyard <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ipmi: Fix the race between __scan_channels() and deliver_response() [+ + +]
Author: Jinhui Guo <[email protected]>
Date:   Tue Sep 30 15:42:37 2025 +0800

    ipmi: Fix the race between __scan_channels() and deliver_response()
    
    [ Upstream commit 936750fdba4c45e13bbd17f261bb140dd55f5e93 ]
    
    The race window between __scan_channels() and deliver_response() causes
    the parameters of some channels to be set to 0.
    
    1.[CPUA] __scan_channels() issues an IPMI request and waits with
             wait_event() until all channels have been scanned.
             wait_event() internally calls might_sleep(), which might
             yield the CPU. (Moreover, an interrupt can preempt
             wait_event() and force the task to yield the CPU.)
    2.[CPUB] deliver_response() is invoked when the CPU receives the
             IPMI response. After processing a IPMI response,
             deliver_response() directly assigns intf->wchannels to
             intf->channel_list and sets intf->channels_ready to true.
             However, not all channels are actually ready for use.
    3.[CPUA] Since intf->channels_ready is already true, wait_event()
             never enters __wait_event(). __scan_channels() immediately
             clears intf->null_user_handler and exits.
    4.[CPUB] Once intf->null_user_handler is set to NULL, deliver_response()
             ignores further IPMI responses, leaving the remaining
             channels zero-initialized and unusable.
    
    CPUA                             CPUB
    -------------------------------  -----------------------------
    __scan_channels()
     intf->null_user_handler
           = channel_handler;
     send_channel_info_cmd(intf,
           0);
     wait_event(intf->waitq,
           intf->channels_ready);
      do {
       might_sleep();
                                     deliver_response()
                                      channel_handler()
                                       intf->channel_list =
                                             intf->wchannels + set;
                                       intf->channels_ready = true;
                                       send_channel_info_cmd(intf,
                                             intf->curr_channel);
       if (condition)
        break;
       __wait_event(wq_head,
              condition);
      } while(0)
     intf->null_user_handler
           = NULL;
                                     deliver_response()
                                      if (!msg->user)
                                       if (intf->null_user_handler)
                                        rv = -EINVAL;
                                      return rv;
    -------------------------------  -----------------------------
    
    Fix the race between __scan_channels() and deliver_response() by
    deferring both the assignment intf->channel_list = intf->wchannels
    and the flag intf->channels_ready = true until all channels have
    been successfully scanned or until the IPMI request has failed.
    
    Signed-off-by: Jinhui Guo <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Corey Minyard <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ipv4: Fix reference count leak when using error routes with nexthop objects [+ + +]
Author: Ido Schimmel <[email protected]>
Date:   Sun Dec 21 16:48:28 2025 +0200

    ipv4: Fix reference count leak when using error routes with nexthop objects
    
    [ Upstream commit ac782f4e3bfcde145b8a7f8af31d9422d94d172a ]
    
    When a nexthop object is deleted, it is marked as dead and then
    fib_table_flush() is called to flush all the routes that are using the
    dead nexthop.
    
    The current logic in fib_table_flush() is to only flush error routes
    (e.g., blackhole) when it is called as part of network namespace
    dismantle (i.e., with flush_all=true). Therefore, error routes are not
    flushed when their nexthop object is deleted:
    
     # ip link add name dummy1 up type dummy
     # ip nexthop add id 1 dev dummy1
     # ip route add 198.51.100.1/32 nhid 1
     # ip route add blackhole 198.51.100.2/32 nhid 1
     # ip nexthop del id 1
     # ip route show
     blackhole 198.51.100.2 nhid 1 dev dummy1
    
    As such, they keep holding a reference on the nexthop object which in
    turn holds a reference on the nexthop device, resulting in a reference
    count leak:
    
     # ip link del dev dummy1
     [   70.516258] unregister_netdevice: waiting for dummy1 to become free. Usage count = 2
    
    Fix by flushing error routes when their nexthop is marked as dead.
    
    IPv6 does not suffer from this problem.
    
    Fixes: 493ced1ac47c ("ipv4: Allow routes to use nexthop objects")
    Reported-by: Tetsuo Handa <[email protected]>
    Closes: https://lore.kernel.org/netdev/[email protected]/
    Reported-by: [email protected]
    Signed-off-by: Ido Schimmel <[email protected]>
    Reviewed-by: David Ahern <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ipv6: BUG() in pskb_expand_head() as part of calipso_skbuff_setattr() [+ + +]
Author: Will Rosenberg <[email protected]>
Date:   Fri Dec 19 10:36:37 2025 -0700

    ipv6: BUG() in pskb_expand_head() as part of calipso_skbuff_setattr()
    
    [ Upstream commit 58fc7342b529803d3c221101102fe913df7adb83 ]
    
    There exists a kernel oops caused by a BUG_ON(nhead < 0) at
    net/core/skbuff.c:2232 in pskb_expand_head().
    This bug is triggered as part of the calipso_skbuff_setattr()
    routine when skb_cow() is passed headroom > INT_MAX
    (i.e. (int)(skb_headroom(skb) + len_delta) < 0).
    
    The root cause of the bug is due to an implicit integer cast in
    __skb_cow(). The check (headroom > skb_headroom(skb)) is meant to ensure
    that delta = headroom - skb_headroom(skb) is never negative, otherwise
    we will trigger a BUG_ON in pskb_expand_head(). However, if
    headroom > INT_MAX and delta <= -NET_SKB_PAD, the check passes, delta
    becomes negative, and pskb_expand_head() is passed a negative value for
    nhead.
    
    Fix the trigger condition in calipso_skbuff_setattr(). Avoid passing
    "negative" headroom sizes to skb_cow() within calipso_skbuff_setattr()
    by only using skb_cow() to grow headroom.
    
    PoC:
            Using `netlabelctl` tool:
    
            netlabelctl map del default
            netlabelctl calipso add pass doi:7
            netlabelctl map add default address:0::1/128 protocol:calipso,7
    
            Then run the following PoC:
    
            int fd = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP);
    
            // setup msghdr
            int cmsg_size = 2;
            int cmsg_len = 0x60;
            struct msghdr msg;
            struct sockaddr_in6 dest_addr;
            struct cmsghdr * cmsg = (struct cmsghdr *) calloc(1,
                            sizeof(struct cmsghdr) + cmsg_len);
            msg.msg_name = &dest_addr;
            msg.msg_namelen = sizeof(dest_addr);
            msg.msg_iov = NULL;
            msg.msg_iovlen = 0;
            msg.msg_control = cmsg;
            msg.msg_controllen = cmsg_len;
            msg.msg_flags = 0;
    
            // setup sockaddr
            dest_addr.sin6_family = AF_INET6;
            dest_addr.sin6_port = htons(31337);
            dest_addr.sin6_flowinfo = htonl(31337);
            dest_addr.sin6_addr = in6addr_loopback;
            dest_addr.sin6_scope_id = 31337;
    
            // setup cmsghdr
            cmsg->cmsg_len = cmsg_len;
            cmsg->cmsg_level = IPPROTO_IPV6;
            cmsg->cmsg_type = IPV6_HOPOPTS;
            char * hop_hdr = (char *)cmsg + sizeof(struct cmsghdr);
            hop_hdr[1] = 0x9; //set hop size - (0x9 + 1) * 8 = 80
    
            sendmsg(fd, &msg, 0);
    
    Fixes: 2917f57b6bc1 ("calipso: Allow the lsm to label the skbuff directly.")
    Suggested-by: Paul Moore <[email protected]>
    Signed-off-by: Will Rosenberg <[email protected]>
    Acked-by: Paul Moore <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ipvlan: Ignore PACKET_LOOPBACK in handle_mode_l2() [+ + +]
Author: Dmitry Skorodumov <[email protected]>
Date:   Tue Dec 2 13:39:03 2025 +0300

    ipvlan: Ignore PACKET_LOOPBACK in handle_mode_l2()
    
    [ Upstream commit 0c57ff008a11f24f7f05fa760222692a00465fec ]
    
    Packets with pkt_type == PACKET_LOOPBACK are captured by
    handle_frame() function, but they don't have L2 header.
    We should not process them in handle_mode_l2().
    
    This doesn't affect old L2 functionality, since handling
    was anyway incorrect.
    
    Handle them the same way as in br_handle_frame():
    just pass the skb.
    
    To observe invalid behaviour, just start "ping -b" on bcast address
    of port-interface.
    
    Fixes: 2ad7bf363841 ("ipvlan: Initial check-in of the IPVLAN driver.")
    Signed-off-by: Dmitry Skorodumov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ipvs: fix ipv4 null-ptr-deref in route error path [+ + +]
Author: Slavin Liu <[email protected]>
Date:   Fri Nov 21 16:52:13 2025 +0800

    ipvs: fix ipv4 null-ptr-deref in route error path
    
    [ Upstream commit ad891bb3d079a46a821bf2b8867854645191bab0 ]
    
    The IPv4 code path in __ip_vs_get_out_rt() calls dst_link_failure()
    without ensuring skb->dev is set, leading to a NULL pointer dereference
    in fib_compute_spec_dst() when ipv4_link_failure() attempts to send
    ICMP destination unreachable messages.
    
    The issue emerged after commit ed0de45a1008 ("ipv4: recompile ip options
    in ipv4_link_failure") started calling __ip_options_compile() from
    ipv4_link_failure(). This code path eventually calls fib_compute_spec_dst()
    which dereferences skb->dev. An attempt was made to fix the NULL skb->dev
    dereference in commit 0113d9c9d1cc ("ipv4: fix null-deref in
    ipv4_link_failure"), but it only addressed the immediate dev_net(skb->dev)
    dereference by using a fallback device. The fix was incomplete because
    fib_compute_spec_dst() later in the call chain still accesses skb->dev
    directly, which remains NULL when IPVS calls dst_link_failure().
    
    The crash occurs when:
    1. IPVS processes a packet in NAT mode with a misconfigured destination
    2. Route lookup fails in __ip_vs_get_out_rt() before establishing a route
    3. The error path calls dst_link_failure(skb) with skb->dev == NULL
    4. ipv4_link_failure() → ipv4_send_dest_unreach() →
       __ip_options_compile() → fib_compute_spec_dst()
    5. fib_compute_spec_dst() dereferences NULL skb->dev
    
    Apply the same fix used for IPv6 in commit 326bf17ea5d4 ("ipvs: fix
    ipv6 route unreach panic"): set skb->dev from skb_dst(skb)->dev before
    calling dst_link_failure().
    
    KASAN: null-ptr-deref in range [0x0000000000000328-0x000000000000032f]
    CPU: 1 PID: 12732 Comm: syz.1.3469 Not tainted 6.6.114 #2
    RIP: 0010:__in_dev_get_rcu include/linux/inetdevice.h:233
    RIP: 0010:fib_compute_spec_dst+0x17a/0x9f0 net/ipv4/fib_frontend.c:285
    Call Trace:
      <TASK>
      spec_dst_fill net/ipv4/ip_options.c:232
      spec_dst_fill net/ipv4/ip_options.c:229
      __ip_options_compile+0x13a1/0x17d0 net/ipv4/ip_options.c:330
      ipv4_send_dest_unreach net/ipv4/route.c:1252
      ipv4_link_failure+0x702/0xb80 net/ipv4/route.c:1265
      dst_link_failure include/net/dst.h:437
      __ip_vs_get_out_rt+0x15fd/0x19e0 net/netfilter/ipvs/ip_vs_xmit.c:412
      ip_vs_nat_xmit+0x1d8/0xc80 net/netfilter/ipvs/ip_vs_xmit.c:764
    
    Fixes: ed0de45a1008 ("ipv4: recompile ip options in ipv4_link_failure")
    Signed-off-by: Slavin Liu <[email protected]>
    Acked-by: Julian Anastasov <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
irqchip/imx-mu-msi: Fix section mismatch [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Oct 13 11:46:06 2025 +0200

    irqchip/imx-mu-msi: Fix section mismatch
    
    [ Upstream commit 64acfd8e680ff8992c101fe19aadb112ce551072 ]
    
    Platform drivers can be probed after their init sections have been
    discarded so the irqchip init callbacks must not live in init.
    
    Fixes: 70afdab904d2 ("irqchip: Add IMX MU MSI controller driver")
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
irqchip/irq-bcm7038-l1: Fix section mismatch [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Oct 13 11:46:03 2025 +0200

    irqchip/irq-bcm7038-l1: Fix section mismatch
    
    [ Upstream commit e9db5332caaf4789ae3bafe72f61ad8e6e0c2d81 ]
    
    Platform drivers can be probed after their init sections have been
    discarded so the irqchip init callback must not live in init.
    
    Fixes: c057c799e379 ("irqchip/irq-bcm7038-l1: Switch to IRQCHIP_PLATFORM_DRIVER")
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Reviewed-by: Florian Fainelli <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
irqchip/irq-bcm7120-l2: Fix section mismatch [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Oct 13 11:46:04 2025 +0200

    irqchip/irq-bcm7120-l2: Fix section mismatch
    
    [ Upstream commit bfc0c5beab1fde843677923cf008f41d583c980a ]
    
    Platform drivers can be probed after their init sections have been
    discarded so the irqchip init callbacks must not live in init.
    
    Fixes: 3ac268d5ed22 ("irqchip/irq-bcm7120-l2: Switch to IRQCHIP_PLATFORM_DRIVER")
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Reviewed-by: Florian Fainelli <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
irqchip/irq-brcmstb-l2: Fix section mismatch [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Oct 13 11:46:05 2025 +0200

    irqchip/irq-brcmstb-l2: Fix section mismatch
    
    [ Upstream commit bbe1775924478e95372c2f896064ab6446000713 ]
    
    Platform drivers can be probed after their init sections have been
    discarded so the irqchip init callbacks must not live in init.
    
    Fixes: 51d9db5c8fbb ("irqchip/irq-brcmstb-l2: Switch to IRQCHIP_PLATFORM_DRIVER")
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Reviewed-by: Florian Fainelli <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
irqchip/mchp-eic: Fix error code in mchp_eic_domain_alloc() [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Tue Dec 9 09:54:16 2025 +0300

    irqchip/mchp-eic: Fix error code in mchp_eic_domain_alloc()
    
    [ Upstream commit 7dbc0d40d8347bd9de55c904f59ea44bcc8dedb7 ]
    
    If irq_domain_translate_twocell() sets "hwirq" to >= MCHP_EIC_NIRQ (2) then
    it results in an out of bounds access.
    
    The code checks for invalid values, but doesn't set the error code.  Return
    -EINVAL in that case, instead of returning success.
    
    Fixes: 00fa3461c86d ("irqchip/mchp-eic: Add support for the Microchip EIC")
    Signed-off-by: Dan Carpenter <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Reviewed-by: Claudiu Beznea <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
irqchip/qcom-irq-combiner: Fix section mismatch [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Oct 13 11:46:09 2025 +0200

    irqchip/qcom-irq-combiner: Fix section mismatch
    
    [ Upstream commit 9b685058ca936752285c5520d351b828312ac965 ]
    
    Platform drivers can be probed after their init sections have been
    discarded so the probe callback must not live in init.
    
    Fixes: f20cc9b00c7b ("irqchip/qcom: Add IRQ combiner driver")
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
jbd2: avoid bug_on in jbd2_journal_get_create_access() when file system corrupted [+ + +]
Author: Ye Bin <[email protected]>
Date:   Sat Oct 25 15:26:57 2025 +0800

    jbd2: avoid bug_on in jbd2_journal_get_create_access() when file system corrupted
    
    commit 986835bf4d11032bba4ab8414d18fce038c61bb4 upstream.
    
    There's issue when file system corrupted:
    ------------[ cut here ]------------
    kernel BUG at fs/jbd2/transaction.c:1289!
    Oops: invalid opcode: 0000 [#1] SMP KASAN PTI
    CPU: 5 UID: 0 PID: 2031 Comm: mkdir Not tainted 6.18.0-rc1-next
    RIP: 0010:jbd2_journal_get_create_access+0x3b6/0x4d0
    RSP: 0018:ffff888117aafa30 EFLAGS: 00010202
    RAX: 0000000000000000 RBX: ffff88811a86b000 RCX: ffffffff89a63534
    RDX: 1ffff110200ec602 RSI: 0000000000000004 RDI: ffff888100763010
    RBP: ffff888100763000 R08: 0000000000000001 R09: ffff888100763028
    R10: 0000000000000003 R11: 0000000000000000 R12: 0000000000000000
    R13: ffff88812c432000 R14: ffff88812c608000 R15: ffff888120bfc000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007f91d6970c99 CR3: 00000001159c4000 CR4: 00000000000006f0
    Call Trace:
     <TASK>
     __ext4_journal_get_create_access+0x42/0x170
     ext4_getblk+0x319/0x6f0
     ext4_bread+0x11/0x100
     ext4_append+0x1e6/0x4a0
     ext4_init_new_dir+0x145/0x1d0
     ext4_mkdir+0x326/0x920
     vfs_mkdir+0x45c/0x740
     do_mkdirat+0x234/0x2f0
     __x64_sys_mkdir+0xd6/0x120
     do_syscall_64+0x5f/0xfa0
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    The above issue occurs with us in errors=continue mode when accompanied by
    storage failures. There have been many inconsistencies in the file system
    data.
    In the case of file system data inconsistency, for example, if the block
    bitmap of a referenced block is not set, it can lead to the situation where
    a block being committed is allocated and used again. As a result, the
    following condition will not be satisfied then trigger BUG_ON. Of course,
    it is entirely possible to construct a problematic image that can trigger
    this BUG_ON through specific operations. In fact, I have constructed such
    an image and easily reproduced this issue.
    Therefore, J_ASSERT() holds true only under ideal conditions, but it may
    not necessarily be satisfied in exceptional scenarios. Using J_ASSERT()
    directly in abnormal situations would cause the system to crash, which is
    clearly not what we want. So here we directly trigger a JBD abort instead
    of immediately invoking BUG_ON.
    
    Fixes: 470decc613ab ("[PATCH] jbd2: initial copy of files from jbd")
    Signed-off-by: Ye Bin <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Theodore Ts'o <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

jbd2: fix the inconsistency between checksum and data in memory for journal sb [+ + +]
Author: Ye Bin <[email protected]>
Date:   Mon Dec 29 19:46:45 2025 -0500

    jbd2: fix the inconsistency between checksum and data in memory for journal sb
    
    [ Upstream commit 6abfe107894af7e8ce3a2e120c619d81ee764ad5 ]
    
    Copying the file system while it is mounted as read-only results in
    a mount failure:
    [~]# mkfs.ext4 -F /dev/sdc
    [~]# mount /dev/sdc -o ro /mnt/test
    [~]# dd if=/dev/sdc of=/dev/sda bs=1M
    [~]# mount /dev/sda /mnt/test1
    [ 1094.849826] JBD2: journal checksum error
    [ 1094.850927] EXT4-fs (sda): Could not load journal inode
    mount: mount /dev/sda on /mnt/test1 failed: Bad message
    
    The process described above is just an abstracted way I came up with to
    reproduce the issue. In the actual scenario, the file system was mounted
    read-only and then copied while it was still mounted. It was found that
    the mount operation failed. The user intended to verify the data or use
    it as a backup, and this action was performed during a version upgrade.
    Above issue may happen as follows:
    ext4_fill_super
     set_journal_csum_feature_set(sb)
      if (ext4_has_metadata_csum(sb))
       incompat = JBD2_FEATURE_INCOMPAT_CSUM_V3;
      if (test_opt(sb, JOURNAL_CHECKSUM)
       jbd2_journal_set_features(sbi->s_journal, compat, 0, incompat);
        lock_buffer(journal->j_sb_buffer);
        sb->s_feature_incompat  |= cpu_to_be32(incompat);
        //The data in the journal sb was modified, but the checksum was not
          updated, so the data remaining in memory has a mismatch between the
          data and the checksum.
        unlock_buffer(journal->j_sb_buffer);
    
    In this case, the journal sb copied over is in a state where the checksum
    and data are inconsistent, so mounting fails.
    To solve the above issue, update the checksum in memory after modifying
    the journal sb.
    
    Fixes: 4fd5ea43bc11 ("jbd2: checksum journal superblock")
    Signed-off-by: Ye Bin <[email protected]>
    Reviewed-by: Baokun Li <[email protected]>
    Reviewed-by: Darrick J. Wong <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Theodore Ts'o <[email protected]>
    Cc: [email protected]
    [ Changed jbd2_superblock_csum(sb) to jbd2_superblock_csum(journal, sb) ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

jbd2: use a weaker annotation in journal handling [+ + +]
Author: Byungchul Park <[email protected]>
Date:   Fri Oct 24 16:39:40 2025 +0900

    jbd2: use a weaker annotation in journal handling
    
    commit 40a71b53d5a6d4ea17e4d54b99b2ac03a7f5e783 upstream.
    
    jbd2 journal handling code doesn't want jbd2_might_wait_for_commit()
    to be placed between start_this_handle() and stop_this_handle().  So it
    marks the region with rwsem_acquire_read() and rwsem_release().
    
    However, the annotation is too strong for that purpose.  We don't have
    to use more than try lock annotation for that.
    
    rwsem_acquire_read() implies:
    
       1. might be a waiter on contention of the lock.
       2. enter to the critical section of the lock.
    
    All we need in here is to act 2, not 1.  So trylock version of
    annotation is sufficient for that purpose.  Now that dept partially
    relies on lockdep annotaions, dept interpets rwsem_acquire_read() as a
    potential wait and might report a deadlock by the wait.
    
    Replace it with trylock version of annotation.
    
    Signed-off-by: Byungchul Park <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Cc: [email protected]
    Message-ID: <[email protected]>
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
kallsyms: Fix wrong "big" kernel symbol type read from procfs [+ + +]
Author: Zheng Yejian <[email protected]>
Date:   Fri Oct 11 22:38:53 2024 +0800

    kallsyms: Fix wrong "big" kernel symbol type read from procfs
    
    commit f3f9f42232dee596d15491ca3f611d02174db49c upstream.
    
    Currently when the length of a symbol is longer than 0x7f characters,
    its type shown in /proc/kallsyms can be incorrect.
    
    I found this issue when reading the code, but it can be reproduced by
    following steps:
    
      1. Define a function which symbol length is 130 characters:
    
        #define X13(x) x##x##x##x##x##x##x##x##x##x##x##x##x
        static noinline void X13(x123456789)(void)
        {
            printk("hello world\n");
        }
    
      2. The type in vmlinux is 't':
    
        $ nm vmlinux | grep x123456
        ffffffff816290f0 t x123456789x123456789x123456789x12[...]
    
      3. Then boot the kernel, the type shown in /proc/kallsyms becomes 'g'
         instead of the expected 't':
    
        # cat /proc/kallsyms | grep x123456
        ffffffff816290f0 g x123456789x123456789x123456789x12[...]
    
    The root cause is that, after commit 73bbb94466fd ("kallsyms: support
    "big" kernel symbols"), ULEB128 was used to encode symbol name length.
    That is, for "big" kernel symbols of which name length is longer than
    0x7f characters, the length info is encoded into 2 bytes.
    
    kallsyms_get_symbol_type() expects to read the first char of the
    symbol name which indicates the symbol type. However, due to the
    "big" symbol case not being handled, the symbol type read from
    /proc/kallsyms may be wrong, so handle it properly.
    
    Cc: [email protected]
    Fixes: 73bbb94466fd ("kallsyms: support "big" kernel symbols")
    Signed-off-by: Zheng Yejian <[email protected]>
    Acked-by: Gary Guo <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Miguel Ojeda <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
kasan: refactor pcpu kasan vmalloc unpoison [+ + +]
Author: Maciej Wieczor-Retman <[email protected]>
Date:   Thu Dec 4 19:00:04 2025 +0000

    kasan: refactor pcpu kasan vmalloc unpoison
    
    commit 6f13db031e27e88213381039032a9cc061578ea6 upstream.
    
    A KASAN tag mismatch, possibly causing a kernel panic, can be observed
    on systems with a tag-based KASAN enabled and with multiple NUMA nodes.
    It was reported on arm64 and reproduced on x86. It can be explained in
    the following points:
    
    1. There can be more than one virtual memory chunk.
    2. Chunk's base address has a tag.
    3. The base address points at the first chunk and thus inherits
       the tag of the first chunk.
    4. The subsequent chunks will be accessed with the tag from the
       first chunk.
    5. Thus, the subsequent chunks need to have their tag set to
       match that of the first chunk.
    
    Refactor code by reusing __kasan_unpoison_vmalloc in a new helper in
    preparation for the actual fix.
    
    Link: https://lkml.kernel.org/r/eb61d93b907e262eefcaa130261a08bcb6c5ce51.1764874575.git.m.wieczorretman@pm.me
    Fixes: 1d96320f8d53 ("kasan, vmalloc: add vmalloc tagging for SW_TAGS")
    Signed-off-by: Maciej Wieczor-Retman <[email protected]>
    Reviewed-by: Andrey Konovalov <[email protected]>
    Cc: Alexander Potapenko <[email protected]>
    Cc: Andrey Ryabinin <[email protected]>
    Cc: Danilo Krummrich <[email protected]>
    Cc: Dmitriy Vyukov <[email protected]>
    Cc: Jiayuan Chen <[email protected]>
    Cc: Kees Cook <[email protected]>
    Cc: Marco Elver <[email protected]>
    Cc: "Uladzislau Rezki (Sony)" <[email protected]>
    Cc: Vincenzo Frascino <[email protected]>
    Cc: <[email protected]>    [6.1+]
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
kbuild: Use CRC32 and a 1MiB dictionary for XZ compressed modules [+ + +]
Author: Martin Nybo Andersen <[email protected]>
Date:   Fri Sep 15 12:15:39 2023 +0200

    kbuild: Use CRC32 and a 1MiB dictionary for XZ compressed modules
    
    commit fbf5892df21a8ccfcb2fda0fd65bc3169c89ed28 upstream.
    
    Kmod is now (since kmod commit 09c9f8c5df04 ("libkmod: Use kernel
    decompression when available")) using the kernel decompressor, when
    loading compressed modules.
    
    However, the kernel XZ decompressor is XZ Embedded, which doesn't
    handle CRC64 and dictionaries larger than 1MiB.
    
    Use CRC32 and 1MiB dictionary when XZ compressing and installing
    kernel modules.
    
    Link: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1050582
    Signed-off-by: Martin Nybo Andersen <[email protected]>
    Signed-off-by: Masahiro Yamada <[email protected]>
    Cc: Christoph Biedl <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

kbuild: Use objtree for module signing key path [+ + +]
Author: Mikhail Malyshev <[email protected]>
Date:   Wed Oct 15 16:34:52 2025 +0000

    kbuild: Use objtree for module signing key path
    
    [ Upstream commit af61da281f52aba0c5b090bafb3a31c5739850ff ]
    
    When building out-of-tree modules with CONFIG_MODULE_SIG_FORCE=y,
    module signing fails because the private key path uses $(srctree)
    while the public key path uses $(objtree). Since signing keys are
    generated in the build directory during kernel compilation, both
    paths should use $(objtree) for consistency.
    
    This causes SSL errors like:
      SSL error:02001002:system library:fopen:No such file or directory
      sign-file: /kernel-src/certs/signing_key.pem
    
    The issue occurs because:
    - sig-key uses: $(srctree)/certs/signing_key.pem (source tree)
    - cmd_sign uses: $(objtree)/certs/signing_key.x509 (build tree)
    
    But both keys are generated in $(objtree) during the build.
    
    This complements commit 25ff08aa43e37 ("kbuild: Fix signing issue for
    external modules") which fixed the scripts path and public key path,
    but missed the private key path inconsistency.
    
    Fixes out-of-tree module signing for configurations with separate
    source and build directories (e.g., O=/kernel-out).
    
    Signed-off-by: Mikhail Malyshev <[email protected]>
    Reviewed-by: Nathan Chancellor <[email protected]>
    Tested-by: Nicolas Schier <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Nicolas Schier <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
kernel/fork: only call untrack_pfn_clear() on VMAs duplicated for fork() [+ + +]
Author: David Hildenbrand <[email protected]>
Date:   Tue Apr 22 16:49:42 2025 +0200

    kernel/fork: only call untrack_pfn_clear() on VMAs duplicated for fork()
    
    commit e9f180d7cfde23b9f8eebd60272465176373ab2c upstream.
    
    Not intuitive, but vm_area_dup() located in kernel/fork.c is not only used
    for duplicating VMAs during fork(), but also for duplicating VMAs when
    splitting VMAs or when mremap()'ing them.
    
    VM_PFNMAP mappings can at least get ordinarily mremap()'ed (no change in
    size) and apparently also shrunk during mremap(), which implies
    duplicating the VMA in __split_vma() first.
    
    In case of ordinary mremap() (no change in size), we first duplicate the
    VMA in copy_vma_and_data()->copy_vma() to then call untrack_pfn_clear() on
    the old VMA: we effectively move the VM_PAT reservation.  So the
    untrack_pfn_clear() call on the new VMA duplicating is wrong in that
    context.
    
    Splitting of VMAs seems problematic, because we don't duplicate/adjust the
    reservation when splitting the VMA.  Instead, in memtype_erase() -- called
    during zapping/munmap -- we shrink a reservation in case only the end
    address matches: Assume we split a VMA into A and B, both would share a
    reservation until B is unmapped.
    
    So when unmapping B, the reservation would be updated to cover only A.
    When unmapping A, we would properly remove the now-shrunk reservation.
    That scenario describes the mremap() shrinking (old_size > new_size),
    where we split + unmap B, and the untrack_pfn_clear() on the new VMA when
    is wrong.
    
    What if we manage to split a VM_PFNMAP VMA into A and B and unmap A first?
    It would be broken because we would never free the reservation.  Likely,
    there are ways to trigger such a VMA split outside of mremap().
    
    Affecting other VMA duplication was not intended, vm_area_dup() being used
    outside of kernel/fork.c was an oversight.  So let's fix that for; how to
    handle VMA splits better should be investigated separately.
    
    
    With a simple reproducer that uses mprotect() to split such a VMA I can
    trigger
    
    x86/PAT: pat_mremap:26448 freeing invalid memtype [mem 0x00000000-0x00000fff]
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: dc84bc2aba85 ("x86/mm/pat: Fix VM_PAT handling when fork() fails in copy_page_range()")
    Signed-off-by: David Hildenbrand <[email protected]>
    Reviewed-by: Lorenzo Stoakes <[email protected]>
    Cc: Ingo Molnar <[email protected]>
    Cc: Dave Hansen <[email protected]>
    Cc: Andy Lutomirski <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Cc: Thomas Gleixner <[email protected]>
    Cc: Borislav Petkov <[email protected]>
    Cc: Rik van Riel <[email protected]>
    Cc: "H. Peter Anvin" <[email protected]>
    Cc: Linus Torvalds <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
KEYS: trusted: Fix a memory leak in tpm2_load_cmd [+ + +]
Author: Jarkko Sakkinen <[email protected]>
Date:   Sat Oct 18 13:30:36 2025 +0300

    KEYS: trusted: Fix a memory leak in tpm2_load_cmd
    
    commit 62cd5d480b9762ce70d720a81fa5b373052ae05f upstream.
    
    'tpm2_load_cmd' allocates a tempoary blob indirectly via 'tpm2_key_decode'
    but it is not freed in the failure paths. Address this by wrapping the blob
    into with a cleanup helper.
    
    Cc: [email protected] # v5.13+
    Fixes: f2219745250f ("security: keys: trusted: use ASN.1 TPM2 key format for the blobs")
    Signed-off-by: Jarkko Sakkinen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ksmbd: fix buffer validation by including null terminator size in EA length [+ + +]
Author: Namjae Jeon <[email protected]>
Date:   Sun Dec 14 15:06:34 2025 +0900

    ksmbd: fix buffer validation by including null terminator size in EA length
    
    commit 95d7a890e4b03e198836d49d699408fd1867cb55 upstream.
    
    The smb2_set_ea function, which handles Extended Attributes (EA),
    was performing buffer validation checks that incorrectly omitted the size
    of the null terminating character (+1 byte) for EA Name.
    This patch fixes the issue by explicitly adding '+ 1' to EaNameLength where
    the null terminator is expected to be present in the buffer, ensuring
    the validation accurately reflects the total required buffer size.
    
    Cc: [email protected]
    Reported-by: Roger <[email protected]>
    Reported-by: Stanislas Polu <[email protected]>
    Signed-off-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ksmbd: fix out-of-bounds in parse_sec_desc() [+ + +]
Author: Namjae Jeon <[email protected]>
Date:   Fri Dec 5 15:35:08 2025 +0800

    ksmbd: fix out-of-bounds in parse_sec_desc()
    
    commit d6e13e19063db24f94b690159d0633aaf72a0f03 upstream.
    
    If osidoffset, gsidoffset and dacloffset could be greater than smb_ntsd
    struct size. If it is smaller, It could cause slab-out-of-bounds.
    And when validating sid, It need to check it included subauth array size.
    
    Cc: [email protected]
    Reported-by: Norbert Szetei <[email protected]>
    Tested-by: Norbert Szetei <[email protected]>
    Signed-off-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Rajani Kantha <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ksmbd: Fix refcount leak when invalid session is found on session lookup [+ + +]
Author: Namjae Jeon <[email protected]>
Date:   Sun Dec 14 15:05:56 2025 +0900

    ksmbd: Fix refcount leak when invalid session is found on session lookup
    
    commit cafb57f7bdd57abba87725eb4e82bbdca4959644 upstream.
    
    When a session is found but its state is not SMB2_SESSION_VALID, It
    indicates that no valid session was found, but it is missing to decrement
    the reference count acquired by the session lookup, which results in
    a reference count leak. This patch fixes the issue by explicitly calling
    ksmbd_user_session_put to release the reference to the session.
    
    Cc: [email protected]
    Reported-by: Alexandre <[email protected]>
    Reported-by: Stanislas Polu <[email protected]>
    Signed-off-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ksmbd: fix use-after-free in ksmbd_tree_connect_put under concurrency [+ + +]
Author: Namjae Jeon <[email protected]>
Date:   Tue Nov 18 09:05:46 2025 +0900

    ksmbd: fix use-after-free in ksmbd_tree_connect_put under concurrency
    
    [ Upstream commit b39a1833cc4a2755b02603eec3a71a85e9dff926 ]
    
    Under high concurrency, A tree-connection object (tcon) is freed on
    a disconnect path while another path still holds a reference and later
    executes *_put()/write on it.
    
    Reported-by: Qianchang Zhao <[email protected]>
    Reported-by: Zhitong Liu <[email protected]>
    Signed-off-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ksmbd: ipc: fix use-after-free in ipc_msg_send_request [+ + +]
Author: Qianchang Zhao <[email protected]>
Date:   Wed Nov 26 12:24:18 2025 +0900

    ksmbd: ipc: fix use-after-free in ipc_msg_send_request
    
    commit 1fab1fa091f5aa97265648b53ea031deedd26235 upstream.
    
    ipc_msg_send_request() waits for a generic netlink reply using an
    ipc_msg_table_entry on the stack. The generic netlink handler
    (handle_generic_event()/handle_response()) fills entry->response under
    ipc_msg_table_lock, but ipc_msg_send_request() used to validate and free
    entry->response without holding the same lock.
    
    Under high concurrency this allows a race where handle_response() is
    copying data into entry->response while ipc_msg_send_request() has just
    freed it, leading to a slab-use-after-free reported by KASAN in
    handle_generic_event():
    
      BUG: KASAN: slab-use-after-free in handle_generic_event+0x3c4/0x5f0 [ksmbd]
      Write of size 12 at addr ffff888198ee6e20 by task pool/109349
      ...
      Freed by task:
        kvfree
        ipc_msg_send_request [ksmbd]
        ksmbd_rpc_open -> ksmbd_session_rpc_open [ksmbd]
    
    Fix by:
    - Taking ipc_msg_table_lock in ipc_msg_send_request() while validating
      entry->response, freeing it when invalid, and removing the entry from
      ipc_msg_table.
    - Returning the final entry->response pointer to the caller only after
      the hash entry is removed under the lock.
    - Returning NULL in the error path, preserving the original API
      semantics.
    
    This makes all accesses to entry->response consistent with
    handle_response(), which already updates and fills the response buffer
    under ipc_msg_table_lock, and closes the race that allowed the UAF.
    
    Cc: [email protected]
    Reported-by: Qianchang Zhao <[email protected]>
    Reported-by: Zhitong Liu <[email protected]>
    Signed-off-by: Qianchang Zhao <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ksmbd: skip lock-range check on equal size to avoid size==0 underflow [+ + +]
Author: Qianchang Zhao <[email protected]>
Date:   Sun Nov 9 10:00:55 2025 +0900

    ksmbd: skip lock-range check on equal size to avoid size==0 underflow
    
    commit 5d510ac31626ed157d2182149559430350cf2104 upstream.
    
    When size equals the current i_size (including 0), the code used to call
    check_lock_range(filp, i_size, size - 1, WRITE), which computes `size - 1`
    and can underflow for size==0. Skip the equal case.
    
    Cc: [email protected]
    Reported-by: Qianchang Zhao <[email protected]>
    Reported-by: Zhitong Liu <[email protected]>
    Signed-off-by: Qianchang Zhao <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ktest.pl: Fix uninitialized var in config-bisect.pl [+ + +]
Author: Steven Rostedt <[email protected]>
Date:   Wed Dec 3 18:09:24 2025 -0500

    ktest.pl: Fix uninitialized var in config-bisect.pl
    
    commit d3042cbe84a060b4df764eb6c5300bbe20d125ca upstream.
    
    The error path of copying the old config used the wrong variable in the
    error message:
    
     $ mkdir /tmp/build
     $ ./tools/testing/ktest/config-bisect.pl -b /tmp/build config-good /tmp/config-bad
     $ chmod 0 /tmp/build
     $ ./tools/testing/ktest/config-bisect.pl -b /tmp/build config-good /tmp/config-bad good
     cp /tmp/build//.config config-good.tmp ... [0 seconds] FAILED!
     Use of uninitialized value $config in concatenation (.) or string at ./tools/testing/ktest/config-bisect.pl line 744.
     failed to copy  to config-good.tmp
    
    When it should have shown:
    
     failed to copy /tmp/build//.config to config-good.tmp
    
    Cc: [email protected]
    Cc: John 'Warthog9' Hawley <[email protected]>
    Fixes: 0f0db065999cf ("ktest: Add standalone config-bisect.pl program")
    Link: https://patch.msgid.link/[email protected]
    Reported-by: "John W. Krahn" <[email protected]>
    Signed-off-by: Steven Rostedt <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
KVM: arm64: sys_regs: disable -Wuninitialized-const-pointer warning [+ + +]
Author: Justin Stitt <[email protected]>
Date:   Fri Dec 5 14:51:41 2025 -0800

    KVM: arm64: sys_regs: disable -Wuninitialized-const-pointer warning
    
    A new warning in Clang 22 [1] complains that @clidr passed to
    get_clidr_el1() is an uninitialized const pointer. get_clidr_el1()
    doesn't really care since it casts away the const-ness anyways -- it is
    a false positive.
    
    This patch isn't needed for anything past 6.1 as this code section was
    reworked in Commit 7af0c2534f4c ("KVM: arm64: Normalize cache
    configuration") which incidentally removed the aforementioned warning.
    Since there is no upstream equivalent, this patch just needs to be
    applied to 6.1.
    
    Disable this warning for sys_regs.o instead of backporting the patches
    from 6.2+ that modified this code area.
    
    Cc: [email protected]
    Fixes: 7c8c5e6a9101e ("arm64: KVM: system register handling")
    Link: https://github.com/llvm/llvm-project/commit/00dacf8c22f065cb52efb14cd091d441f19b319e [1]
    Reviewed-by: Nathan Chancellor <[email protected]>
    Signed-off-by: Justin Stitt <[email protected]>
    Reviewed-by: Tiffany Yang <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: nSVM: Avoid incorrect injection of SVM_EXIT_CR0_SEL_WRITE [+ + +]
Author: Yosry Ahmed <[email protected]>
Date:   Fri Oct 24 19:29:18 2025 +0000

    KVM: nSVM: Avoid incorrect injection of SVM_EXIT_CR0_SEL_WRITE
    
    commit 3d80f4c93d3d26d0f9a0dd2844961a632eeea634 upstream.
    
    When emulating L2 instructions, svm_check_intercept() checks whether a
    write to CR0 should trigger a synthesized #VMEXIT with
    SVM_EXIT_CR0_SEL_WRITE. However, it does not check whether L1 enabled
    the intercept for SVM_EXIT_WRITE_CR0, which has higher priority
    according to the APM (24593—Rev.  3.42—March 2024, Table 15-7):
    
      When both selective and non-selective CR0-write intercepts are active at
      the same time, the non-selective intercept takes priority. With respect
      to exceptions, the priority of this intercept is the same as the generic
      CR0-write intercept.
    
    Make sure L1 does NOT intercept SVM_EXIT_WRITE_CR0 before checking if
    SVM_EXIT_CR0_SEL_WRITE needs to be injected.
    
    Opportunistically tweak the "not CR0" logic to explicitly bail early so
    that it's more obvious that only CR0 has a selective intercept, and that
    modifying icpt_info.exit_code is functionally necessary so that the call
    to nested_svm_exit_handled() checks the correct exit code.
    
    Fixes: cfec82cb7d31 ("KVM: SVM: Add intercept check for emulated cr accesses")
    Cc: [email protected]
    Signed-off-by: Yosry Ahmed <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [sean: isolate non-CR0 write logic, tweak comments accordingly]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: nSVM: Clear exit_code_hi in VMCB when synthesizing nested VM-Exits [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Thu Nov 13 14:56:13 2025 -0800

    KVM: nSVM: Clear exit_code_hi in VMCB when synthesizing nested VM-Exits
    
    commit da01f64e7470988f8607776aa7afa924208863fb upstream.
    
    Explicitly clear exit_code_hi in the VMCB when synthesizing "normal"
    nested VM-Exits, as the full exit code is a 64-bit value (spoiler alert),
    and all exit codes for non-failing VMRUN use only bits 31:0.
    
    Cc: Jim Mattson <[email protected]>
    Cc: Yosry Ahmed <[email protected]>
    Cc: [email protected]
    Reviewed-by: Yosry Ahmed <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: nSVM: Propagate SVM_EXIT_CR0_SEL_WRITE correctly for LMSW emulation [+ + +]
Author: Yosry Ahmed <[email protected]>
Date:   Fri Oct 24 19:29:17 2025 +0000

    KVM: nSVM: Propagate SVM_EXIT_CR0_SEL_WRITE correctly for LMSW emulation
    
    commit 5674a76db0213f9db1e4d08e847ff649b46889c0 upstream.
    
    When emulating L2 instructions, svm_check_intercept() checks whether a
    write to CR0 should trigger a synthesized #VMEXIT with
    SVM_EXIT_CR0_SEL_WRITE. For MOV-to-CR0, SVM_EXIT_CR0_SEL_WRITE is only
    triggered if any bit other than CR0.MP and CR0.TS is updated. However,
    according to the APM (24593—Rev.  3.42—March 2024, Table 15-7):
    
      The LMSW instruction treats the selective CR0-write
      intercept as a non-selective intercept (i.e., it intercepts
      regardless of the value being written).
    
    Skip checking the changed bits for x86_intercept_lmsw and always inject
    SVM_EXIT_CR0_SEL_WRITE.
    
    Fixes: cfec82cb7d31 ("KVM: SVM: Add intercept check for emulated cr accesses")
    Cc: [email protected]
    Reported-by: Matteo Rizzo <[email protected]>
    Signed-off-by: Yosry Ahmed <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: nSVM: Set exit_code_hi to -1 when synthesizing SVM_EXIT_ERR (failed VMRUN) [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Thu Nov 13 14:56:14 2025 -0800

    KVM: nSVM: Set exit_code_hi to -1 when synthesizing SVM_EXIT_ERR (failed VMRUN)
    
    commit f402ecd7a8b6446547076f4bd24bd5d4dcc94481 upstream.
    
    Set exit_code_hi to -1u as a temporary band-aid to fix a long-standing
    (effectively since KVM's inception) bug where KVM treats the exit code as
    a 32-bit value, when in reality it's a 64-bit value.  Per the APM, offset
    0x70 is a single 64-bit value:
    
      070h 63:0 EXITCODE
    
    And a sane reading of the error values defined in "Table C-1. SVM Intercept
    Codes" is that negative values use the full 64 bits:
    
      –1 VMEXIT_INVALID Invalid guest state in VMCB.
      –2 VMEXIT_BUSYBUSY bit was set in the VMSA
      –3 VMEXIT_IDLE_REQUIREDThe sibling thread is not in an idle state
      -4 VMEXIT_INVALID_PMC Invalid PMC state
    
    And that interpretation is confirmed by testing on Milan and Turin (by
    setting bits in CR0[63:32] to generate VMEXIT_INVALID on VMRUN).
    
    Furthermore, Xen has treated exitcode as a 64-bit value since HVM support
    was adding in 2006 (see Xen commit d1bd157fbc ("Big merge the HVM
    full-virtualisation abstractions.")).
    
    Cc: Jim Mattson <[email protected]>
    Cc: Yosry Ahmed <[email protected]>
    Cc: [email protected]
    Reviewed-by: Yosry Ahmed <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: nVMX: Immediately refresh APICv controls as needed on nested VM-Exit [+ + +]
Author: Dongli Zhang <[email protected]>
Date:   Wed Dec 31 10:11:53 2025 -0500

    KVM: nVMX: Immediately refresh APICv controls as needed on nested VM-Exit
    
    [ Upstream commit 29763138830916f46daaa50e83e7f4f907a3236b ]
    
    If an APICv status updated was pended while L2 was active, immediately
    refresh vmcs01's controls instead of pending KVM_REQ_APICV_UPDATE as
    kvm_vcpu_update_apicv() only calls into vendor code if a change is
    necessary.
    
    E.g. if APICv is inhibited, and then activated while L2 is running:
    
      kvm_vcpu_update_apicv()
      |
      -> __kvm_vcpu_update_apicv()
         |
         -> apic->apicv_active = true
          |
          -> vmx_refresh_apicv_exec_ctrl()
             |
             -> vmx->nested.update_vmcs01_apicv_status = true
              |
              -> return
    
    Then L2 exits to L1:
    
      __nested_vmx_vmexit()
      |
      -> kvm_make_request(KVM_REQ_APICV_UPDATE)
    
      vcpu_enter_guest(): KVM_REQ_APICV_UPDATE
      -> kvm_vcpu_update_apicv()
         |
         -> __kvm_vcpu_update_apicv()
            |
            -> return // because if (apic->apicv_active == activate)
    
    Reported-by: Chao Gao <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]
    Fixes: 7c69661e225c ("KVM: nVMX: Defer APICv updates while L2 is active until L1 is active")
    Cc: [email protected]
    Signed-off-by: Dongli Zhang <[email protected]>
    [sean: write changelog]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    [ exported vmx_refresh_apicv_exec_ctrl() and added declaration in vmx.h ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: SVM: Don't skip unrelated instruction if INT3/INTO is replaced [+ + +]
Author: Omar Sandoval <[email protected]>
Date:   Mon Dec 8 01:17:27 2025 -0500

    KVM: SVM: Don't skip unrelated instruction if INT3/INTO is replaced
    
    [ Upstream commit 4da3768e1820cf15cced390242d8789aed34f54d ]
    
    When re-injecting a soft interrupt from an INT3, INT0, or (select) INTn
    instruction, discard the exception and retry the instruction if the code
    stream is changed (e.g. by a different vCPU) between when the CPU
    executes the instruction and when KVM decodes the instruction to get the
    next RIP.
    
    As effectively predicted by commit 6ef88d6e36c2 ("KVM: SVM: Re-inject
    INT3/INTO instead of retrying the instruction"), failure to verify that
    the correct INTn instruction was decoded can effectively clobber guest
    state due to decoding the wrong instruction and thus specifying the
    wrong next RIP.
    
    The bug most often manifests as "Oops: int3" panics on static branch
    checks in Linux guests.  Enabling or disabling a static branch in Linux
    uses the kernel's "text poke" code patching mechanism.  To modify code
    while other CPUs may be executing that code, Linux (temporarily)
    replaces the first byte of the original instruction with an int3 (opcode
    0xcc), then patches in the new code stream except for the first byte,
    and finally replaces the int3 with the first byte of the new code
    stream.  If a CPU hits the int3, i.e. executes the code while it's being
    modified, then the guest kernel must look up the RIP to determine how to
    handle the #BP, e.g. by emulating the new instruction.  If the RIP is
    incorrect, then this lookup fails and the guest kernel panics.
    
    The bug reproduces almost instantly by hacking the guest kernel to
    repeatedly check a static branch[1] while running a drgn script[2] on
    the host to constantly swap out the memory containing the guest's TSS.
    
    [1]: https://gist.github.com/osandov/44d17c51c28c0ac998ea0334edf90b5a
    [2]: https://gist.github.com/osandov/10e45e45afa29b11e0c7209247afc00b
    
    Fixes: 6ef88d6e36c2 ("KVM: SVM: Re-inject INT3/INTO instead of retrying the instruction")
    Cc: [email protected]
    Co-developed-by: Sean Christopherson <[email protected]>
    Signed-off-by: Omar Sandoval <[email protected]>
    Link: https://patch.msgid.link/1cc6dcdf36e3add7ee7c8d90ad58414eeb6c3d34.1762278762.git.osandov@fb.com
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: SVM: Mark VMCB_NPT as dirty on nested VMRUN [+ + +]
Author: Jim Mattson <[email protected]>
Date:   Mon Sep 22 09:29:23 2025 -0700

    KVM: SVM: Mark VMCB_NPT as dirty on nested VMRUN
    
    commit 7c8b465a1c91f674655ea9cec5083744ec5f796a upstream.
    
    Mark the VMCB_NPT bit as dirty in nested_vmcb02_prepare_save()
    on every nested VMRUN.
    
    If L1 changes the PAT MSR between two VMRUN instructions on the same
    L1 vCPU, the g_pat field in the associated vmcb02 will change, and the
    VMCB_NPT clean bit should be cleared.
    
    Fixes: 4bb170a5430b ("KVM: nSVM: do not mark all VMCB02 fields dirty on nested vmexit")
    Cc: [email protected]
    Signed-off-by: Jim Mattson <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: SVM: Mark VMCB_PERM_MAP as dirty on nested VMRUN [+ + +]
Author: Jim Mattson <[email protected]>
Date:   Mon Sep 22 09:29:22 2025 -0700

    KVM: SVM: Mark VMCB_PERM_MAP as dirty on nested VMRUN
    
    commit 93c9e107386dbe1243287a5b14ceca894de372b9 upstream.
    
    Mark the VMCB_PERM_MAP bit as dirty in nested_vmcb02_prepare_control()
    on every nested VMRUN.
    
    If L1 changes MSR interception (INTERCEPT_MSR_PROT) between two VMRUN
    instructions on the same L1 vCPU, the msrpm_base_pa in the associated
    vmcb02 will change, and the VMCB_PERM_MAP clean bit should be cleared.
    
    Fixes: 4bb170a5430b ("KVM: nSVM: do not mark all VMCB02 fields dirty on nested vmexit")
    Reported-by: Matteo Rizzo <[email protected]>
    Cc: [email protected]
    Signed-off-by: Jim Mattson <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: x86/mmu: Use EMULTYPE flag to track write #PFs to shadow pages [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Mon Dec 8 01:17:26 2025 -0500

    KVM: x86/mmu: Use EMULTYPE flag to track write #PFs to shadow pages
    
    [ Upstream commit 258d985f6eb360c9c7aacd025d0dbc080a59423f ]
    
    Use a new EMULTYPE flag, EMULTYPE_WRITE_PF_TO_SP, to track page faults
    on self-changing writes to shadowed page tables instead of propagating
    that information to the emulator via a semi-persistent vCPU flag.  Using
    a flag in "struct kvm_vcpu_arch" is confusing, especially as implemented,
    as it's not at all obvious that clearing the flag only when emulation
    actually occurs is correct.
    
    E.g. if KVM sets the flag and then retries the fault without ever getting
    to the emulator, the flag will be left set for future calls into the
    emulator.  But because the flag is consumed if and only if both
    EMULTYPE_PF and EMULTYPE_ALLOW_RETRY_PF are set, and because
    EMULTYPE_ALLOW_RETRY_PF is deliberately not set for direct MMUs, emulated
    MMIO, or while L2 is active, KVM avoids false positives on a stale flag
    since FNAME(page_fault) is guaranteed to be run and refresh the flag
    before it's ultimately consumed by the tail end of reexecute_instruction().
    
    Signed-off-by: Sean Christopherson <[email protected]>
    Message-Id: <[email protected]>
    Signed-off-by: Paolo Bonzini <[email protected]>
    Stable-dep-of: 4da3768e1820 ("KVM: SVM: Don't skip unrelated instruction if INT3/INTO is replaced")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: x86: Don't clear async #PF queue when CR0.PG is disabled (e.g. on #SMI) [+ + +]
Author: Maxim Levitsky <[email protected]>
Date:   Tue Oct 14 23:32:58 2025 -0400

    KVM: x86: Don't clear async #PF queue when CR0.PG is disabled (e.g. on #SMI)
    
    commit ab4e41eb9fabd4607304fa7cfe8ec9c0bd8e1552 upstream.
    
    Fix an interaction between SMM and PV asynchronous #PFs where an #SMI can
    cause KVM to drop an async #PF ready event, and thus result in guest tasks
    becoming permanently stuck due to the task that encountered the #PF never
    being resumed.  Specifically, don't clear the completion queue when paging
    is disabled, and re-check for completed async #PFs if/when paging is
    enabled.
    
    Prior to commit 2635b5c4a0e4 ("KVM: x86: interrupt based APF 'page ready'
    event delivery"), flushing the APF queue without notifying the guest of
    completed APF requests when paging is disabled was "necessary", in that
    delivering a #PF to the guest when paging is disabled would likely confuse
    and/or crash the guest.  And presumably the original async #PF development
    assumed that a guest would only disable paging when there was no intent to
    ever re-enable paging.
    
    That assumption fails in several scenarios, most visibly on an emulated
    SMI, as entering SMM always disables CR0.PG (i.e. initially runs with
    paging disabled).  When the SMM handler eventually executes RSM, the
    interrupted paging-enabled is restored, and the async #PF event is lost.
    
    Similarly, invoking firmware, e.g. via EFI runtime calls, might require a
    transition through paging modes and thus also disable paging with valid
    entries in the competion queue.
    
    To avoid dropping completion events, drop the "clear" entirely, and handle
    paging-enable transitions in the same way KVM already handles APIC
    enable/disable events: if a vCPU's APIC is disabled, APF completion events
    are not kept pending and not injected while APIC is disabled.  Once a
    vCPU's APIC is re-enabled, KVM raises KVM_REQ_APF_READY so that the vCPU
    recognizes any pending pending #APF ready events.
    
    Signed-off-by: Maxim Levitsky <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    [sean: rework changelog to call out #PF injection, drop "real mode"
           references, expand the code comment]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: x86: Explicitly set new periodic hrtimer expiration in apic_timer_fn() [+ + +]
Author: fuqiang wang <[email protected]>
Date:   Thu Nov 13 12:51:12 2025 -0800

    KVM: x86: Explicitly set new periodic hrtimer expiration in apic_timer_fn()
    
    commit 9633f180ce994ab293ce4924a9b7aaf4673aa114 upstream.
    
    When restarting an hrtimer to emulate a the guest's APIC timer in periodic
    mode, explicitly set the expiration using the target expiration computed
    by advance_periodic_target_expiration() instead of adding the period to
    the existing timer.  This will allow making adjustments to the expiration,
    e.g. to deal with expirations far in the past, without having to implement
    the same logic in both advance_periodic_target_expiration() and
    apic_timer_fn().
    
    Cc: [email protected]
    Signed-off-by: fuqiang wang <[email protected]>
    [sean: split to separate patch, write changelog]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: x86: Fix VM hard lockup after prolonged inactivity with periodic HV timer [+ + +]
Author: fuqiang wang <[email protected]>
Date:   Thu Nov 13 12:51:13 2025 -0800

    KVM: x86: Fix VM hard lockup after prolonged inactivity with periodic HV timer
    
    commit 18ab3fc8e880791aa9f7c000261320fc812b5465 upstream.
    
    When advancing the target expiration for the guest's APIC timer in periodic
    mode, set the expiration to "now" if the target expiration is in the past
    (similar to what is done in update_target_expiration()).  Blindly adding
    the period to the previous target expiration can result in KVM generating
    a practically unbounded number of hrtimer IRQs due to programming an
    expired timer over and over.  In extreme scenarios, e.g. if userspace
    pauses/suspends a VM for an extended duration, this can even cause hard
    lockups in the host.
    
    Currently, the bug only affects Intel CPUs when using the hypervisor timer
    (HV timer), a.k.a. the VMX preemption timer.  Unlike the software timer,
    a.k.a. hrtimer, which KVM keeps running even on exits to userspace, the
    HV timer only runs while the guest is active.  As a result, if the vCPU
    does not run for an extended duration, there will be a huge gap between
    the target expiration and the current time the vCPU resumes running.
    Because the target expiration is incremented by only one period on each
    timer expiration, this leads to a series of timer expirations occurring
    rapidly after the vCPU/VM resumes.
    
    More critically, when the vCPU first triggers a periodic HV timer
    expiration after resuming, advancing the expiration by only one period
    will result in a target expiration in the past.  As a result, the delta
    may be calculated as a negative value.  When the delta is converted into
    an absolute value (tscdeadline is an unsigned u64), the resulting value
    can overflow what the HV timer is capable of programming.  I.e. the large
    value will exceed the VMX Preemption Timer's maximum bit width of
    cpu_preemption_timer_multi + 32, and thus cause KVM to switch from the
    HV timer to the software timer (hrtimers).
    
    After switching to the software timer, periodic timer expiration callbacks
    may be executed consecutively within a single clock interrupt handler,
    because hrtimers honors KVM's request for an expiration in the past and
    immediately re-invokes KVM's callback after reprogramming.  And because
    the interrupt handler runs with IRQs disabled, restarting KVM's hrtimer
    over and over until the target expiration is advanced to "now" can result
    in a hard lockup.
    
    E.g. the following hard lockup was triggered in the host when running a
    Windows VM (only relevant because it used the APIC timer in periodic mode)
    after resuming the VM from a long suspend (in the host).
    
      NMI watchdog: Watchdog detected hard LOCKUP on cpu 45
      ...
      RIP: 0010:advance_periodic_target_expiration+0x4d/0x80 [kvm]
      ...
      RSP: 0018:ff4f88f5d98d8ef0 EFLAGS: 00000046
      RAX: fff0103f91be678e RBX: fff0103f91be678e RCX: 00843a7d9e127bcc
      RDX: 0000000000000002 RSI: 0052ca4003697505 RDI: ff440d5bfbdbd500
      RBP: ff440d5956f99200 R08: ff2ff2a42deb6a84 R09: 000000000002a6c0
      R10: 0122d794016332b3 R11: 0000000000000000 R12: ff440db1af39cfc0
      R13: ff440db1af39cfc0 R14: ffffffffc0d4a560 R15: ff440db1af39d0f8
      FS:  00007f04a6ffd700(0000) GS:ff440db1af380000(0000) knlGS:000000e38a3b8000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 000000d5651feff8 CR3: 000000684e038002 CR4: 0000000000773ee0
      PKRU: 55555554
      Call Trace:
       <IRQ>
       apic_timer_fn+0x31/0x50 [kvm]
       __hrtimer_run_queues+0x100/0x280
       hrtimer_interrupt+0x100/0x210
       ? ttwu_do_wakeup+0x19/0x160
       smp_apic_timer_interrupt+0x6a/0x130
       apic_timer_interrupt+0xf/0x20
       </IRQ>
    
    Moreover, if the suspend duration of the virtual machine is not long enough
    to trigger a hard lockup in this scenario, since commit 98c25ead5eda
    ("KVM: VMX: Move preemption timer <=> hrtimer dance to common x86"), KVM
    will continue using the software timer until the guest reprograms the APIC
    timer in some way.  Since the periodic timer does not require frequent APIC
    timer register programming, the guest may continue to use the software
    timer in perpetuity.
    
    Fixes: d8f2f498d9ed ("x86/kvm: fix LAPIC timer drift when guest uses periodic mode")
    Cc: [email protected]
    Signed-off-by: fuqiang wang <[email protected]>
    [sean: massage comments and changelog]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: x86: WARN if hrtimer callback for periodic APIC timer fires with period=0 [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Thu Nov 13 12:51:11 2025 -0800

    KVM: x86: WARN if hrtimer callback for periodic APIC timer fires with period=0
    
    commit 0ea9494be9c931ddbc084ad5e11fda91b554cf47 upstream.
    
    WARN and don't restart the hrtimer if KVM's callback runs with the guest's
    APIC timer in periodic mode but with a period of '0', as not advancing the
    hrtimer's deadline would put the CPU into an infinite loop of hrtimer
    events.  Observing a period of '0' should be impossible, even when the
    hrtimer is running on a different CPU than the vCPU, as KVM is supposed to
    cancel the hrtimer before changing (or zeroing) the period, e.g. when
    switching from periodic to one-shot.
    
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
leds: leds-lp50xx: Allow LED 0 to be added to module bank [+ + +]
Author: Christian Hitz <[email protected]>
Date:   Wed Oct 8 14:32:21 2025 +0200

    leds: leds-lp50xx: Allow LED 0 to be added to module bank
    
    commit 26fe74d598c32e7bc6f150edfc4aa43e1bee55db upstream.
    
    led_banks contains LED module number(s) that should be grouped into the
    module bank. led_banks is 0-initialized.
    By checking the led_banks entries for 0, un-set entries are detected.
    But a 0-entry also indicates that LED module 0 should be grouped into the
    module bank.
    
    By only iterating over the available entries no check for unused entries
    is required and LED module 0 can be added to bank.
    
    Cc: [email protected]
    Fixes: 242b81170fb8 ("leds: lp50xx: Add the LP50XX family of the RGB LED driver")
    Signed-off-by: Christian Hitz <[email protected]>
    Reviewed-by: Jacek Anaszewski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

leds: leds-lp50xx: Enable chip before any communication [+ + +]
Author: Christian Hitz <[email protected]>
Date:   Tue Oct 28 16:51:40 2025 +0100

    leds: leds-lp50xx: Enable chip before any communication
    
    commit 434959618c47efe9e5f2e20f4a850caac4f6b823 upstream.
    
    If a GPIO is used to control the chip's enable pin, it needs to be pulled
    high before any i2c communication is attempted.
    
    Currently, the enable GPIO handling is not correct.
    
    Assume the enable GPIO is low when the probe function is entered. In this
    case the device is in SHUTDOWN mode and does not react to i2c commands.
    
    During probe the following sequence happens:
     1. The call to lp50xx_reset() on line 548 has no effect as i2c is not
        possible yet.
     2. Then - on line 552 - lp50xx_enable_disable() is called. As
        "priv->enable_gpio“ has not yet been initialized, setting the GPIO has
        no effect. Also the i2c enable command is not executed as the device
        is still in SHUTDOWN.
     3. On line 556 the call to lp50xx_probe_dt() finally parses the rest of
        the DT and the configured priv->enable_gpio is set up.
    
    As a result the device is still in SHUTDOWN mode and not ready for
    operation.
    
    Split lp50xx_enable_disable() into distinct enable and disable functions
    to enforce correct ordering between enable_gpio manipulations and i2c
    commands.
    Read enable_gpio configuration from DT before attempting to manipulate
    enable_gpio.
    Add delays to observe correct wait timing after manipulating enable_gpio
    and before any i2c communication.
    
    Cc: [email protected]
    Fixes: 242b81170fb8 ("leds: lp50xx: Add the LP50XX family of the RGB LED driver")
    Signed-off-by: Christian Hitz <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

leds: leds-lp50xx: LP5009 supports 3 modules for a total of 9 LEDs [+ + +]
Author: Christian Hitz <[email protected]>
Date:   Wed Oct 22 08:33:04 2025 +0200

    leds: leds-lp50xx: LP5009 supports 3 modules for a total of 9 LEDs
    
    commit 5246e3673eeeccb4f5bf4f42375dd495d465ac15 upstream.
    
    LP5009 supports 9 LED outputs that are grouped into 3 modules.
    
    Cc: [email protected]
    Fixes: 242b81170fb8 ("leds: lp50xx: Add the LP50XX family of the RGB LED driver")
    Signed-off-by: Christian Hitz <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

leds: netxbig: Fix GPIO descriptor leak in error paths [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Fri Oct 31 10:16:20 2025 +0800

    leds: netxbig: Fix GPIO descriptor leak in error paths
    
    [ Upstream commit 03865dd8af52eb16c38062df2ed30a91b604780e ]
    
    The function netxbig_gpio_ext_get() acquires GPIO descriptors but
    fails to release them when errors occur mid-way through initialization.
    The cleanup callback registered by devm_add_action_or_reset() only
    runs on success, leaving acquired GPIOs leaked on error paths.
    
    Add goto-based error handling to release all acquired GPIOs before
    returning errors.
    
    Fixes: 9af512e81964 ("leds: netxbig: Convert to use GPIO descriptors")
    Suggested-by: Markus Elfring <[email protected]>
    Signed-off-by: Haotian Zhang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

leds: Replace all non-returning strlcpy with strscpy [+ + +]
Author: Azeem Shaikh <[email protected]>
Date:   Tue May 23 02:14:51 2023 +0000

    leds: Replace all non-returning strlcpy with strscpy
    
    [ Upstream commit bf4a35e9201d30b63a8d276797d6ecfaa596ccd3 ]
    
    strlcpy() reads the entire source buffer first.
    This read may exceed the destination size limit.
    This is both inefficient and can lead to linear read
    overflows if a source string is not NUL-terminated [1].
    In an effort to remove strlcpy() completely [2], replace
    strlcpy() here with strscpy().
    No return values were used, so direct replacement is safe.
    
    [1] https://www.kernel.org/doc/html/latest/process/deprecated.html#strlcpy
    [2] https://github.com/KSPP/linux/issues/89
    
    Signed-off-by: Azeem Shaikh <[email protected]>
    Reviewed-by: Kees Cook <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Stable-dep-of: ccc35ff2fd29 ("leds: spi-byte: Use devm_led_classdev_register_ext()")
    Signed-off-by: Sasha Levin <[email protected]>

leds: spi-byte: Use devm_led_classdev_register_ext() [+ + +]
Author: Stefan Kalscheuer <[email protected]>
Date:   Sun Feb 4 16:07:26 2024 +0100

    leds: spi-byte: Use devm_led_classdev_register_ext()
    
    [ Upstream commit ccc35ff2fd2911986b716a87fe65e03fac2312c9 ]
    
    Use extended classdev registration to generate generic device names from
    color and function enums instead of reading only the label from the
    device tree.
    
    Signed-off-by: Stefan Kalscheuer <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
lib/crypto: x86/blake2s: Fix 32-bit arg treated as 64-bit [+ + +]
Author: Eric Biggers <[email protected]>
Date:   Sun Nov 2 15:42:04 2025 -0800

    lib/crypto: x86/blake2s: Fix 32-bit arg treated as 64-bit
    
    commit 2f22115709fc7ebcfa40af3367a508fbbd2f71e9 upstream.
    
    In the C code, the 'inc' argument to the assembly functions
    blake2s_compress_ssse3() and blake2s_compress_avx512() is declared with
    type u32, matching blake2s_compress().  The assembly code then reads it
    from the 64-bit %rcx.  However, the ABI doesn't guarantee zero-extension
    to 64 bits, nor do gcc or clang guarantee it.  Therefore, fix these
    functions to read this argument from the 32-bit %ecx.
    
    In theory, this bug could have caused the wrong 'inc' value to be used,
    causing incorrect BLAKE2s hashes.  In practice, probably not: I've fixed
    essentially this same bug in many other assembly files too, but there's
    never been a real report of it having caused a problem.  In x86_64, all
    writes to 32-bit registers are zero-extended to 64 bits.  That results
    in zero-extension in nearly all situations.  I've only been able to
    demonstrate a lack of zero-extension with a somewhat contrived example
    involving truncation, e.g. when the C code has a u64 variable holding
    0x1234567800000040 and passes it as a u32 expecting it to be truncated
    to 0x40 (64).  But that's not what the real code does, of course.
    
    Fixes: ed0356eda153 ("crypto: blake2s - x86_64 SIMD implementation")
    Cc: [email protected]
    Reviewed-by: Ard Biesheuvel <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Eric Biggers <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
lib/vsprintf: Check pointer before dereferencing in time_and_date() [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Mon Nov 10 14:21:18 2025 +0100

    lib/vsprintf: Check pointer before dereferencing in time_and_date()
    
    [ Upstream commit 372a12bd5df0199aa234eaf8ef31ed7ecd61d40f ]
    
    The pointer may be invalid when gets to the printf(). In particular
    the time_and_date() dereferencing it in some cases without checking.
    
    Move the check from rtc_str() to time_and_date() to cover all cases.
    
    Fixes: 7daac5b2fdf8 ("lib/vsprintf: Print time64_t in human readable format")
    Signed-off-by: Andy Shevchenko <[email protected]>
    Reviewed-by: Petr Mladek <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Petr Mladek <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
libceph: make decode_pool() more resilient against corrupted osdmaps [+ + +]
Author: Ilya Dryomov <[email protected]>
Date:   Tue Dec 2 10:32:31 2025 +0100

    libceph: make decode_pool() more resilient against corrupted osdmaps
    
    commit 8c738512714e8c0aa18f8a10c072d5b01c83db39 upstream.
    
    If the osdmap is (maliciously) corrupted such that the encoded length
    of ceph_pg_pool envelope is less than what is expected for a particular
    encoding version, out-of-bounds reads may ensue because the only bounds
    check that is there is based on that length value.
    
    This patch adds explicit bounds checks for each field that is decoded
    or skipped.
    
    Cc: [email protected]
    Reported-by: ziming zhang <[email protected]>
    Signed-off-by: Ilya Dryomov <[email protected]>
    Reviewed-by: Xiubo Li <[email protected]>
    Tested-by: ziming zhang <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Linux: Linux 6.1.160 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Sun Jan 11 15:19:28 2026 +0100

    Linux 6.1.160
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Brett A C Sheffield <[email protected]>
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Slade Watkins <[email protected]>
    Tested-by: Shuah Khan <[email protected]>
    Tested-by: Ron Economos <[email protected]>
    Tested-by: Peter Schneider <[email protected]>
    Tested-by: Salvatore Bonaccorso <[email protected]>
    Tested-by: Jeffrin Jose T <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Mark Brown <[email protected]>
    Tested-by: Brett A C Sheffield <[email protected]>
    Tested-by: Francesco Dolcini <[email protected]>
    Tested-by: Jeffrin Jose T <[email protected]>
    Tested-by: Miguel Ojeda <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
livepatch: Match old_sympos 0 and 1 in klp_find_func() [+ + +]
Author: Song Liu <[email protected]>
Date:   Mon Oct 13 10:30:19 2025 -0700

    livepatch: Match old_sympos 0 and 1 in klp_find_func()
    
    [ Upstream commit 139560e8b973402140cafeb68c656c1374bd4c20 ]
    
    When there is only one function of the same name, old_sympos of 0 and 1
    are logically identical. Match them in klp_find_func().
    
    This is to avoid a corner case with different toolchain behavior.
    
    In this specific issue, two versions of kpatch-build were used to
    build livepatch for the same kernel. One assigns old_sympos == 0 for
    unique local functions, the other assigns old_sympos == 1 for unique
    local functions. Both versions work fine by themselves. (PS: This
    behavior change was introduced in a downstream version of kpatch-build.
    This change does not exist in upstream kpatch-build.)
    
    However, during livepatch upgrade (with the replace flag set) from a
    patch built with one version of kpatch-build to the same fix built with
    the other version of kpatch-build, livepatching fails with errors like:
    
    [   14.218706] sysfs: cannot create duplicate filename 'xxx/somefunc,1'
    ...
    [   14.219466] Call Trace:
    [   14.219468]  <TASK>
    [   14.219469]  dump_stack_lvl+0x47/0x60
    [   14.219474]  sysfs_warn_dup.cold+0x17/0x27
    [   14.219476]  sysfs_create_dir_ns+0x95/0xb0
    [   14.219479]  kobject_add_internal+0x9e/0x260
    [   14.219483]  kobject_add+0x68/0x80
    [   14.219485]  ? kstrdup+0x3c/0xa0
    [   14.219486]  klp_enable_patch+0x320/0x830
    [   14.219488]  patch_init+0x443/0x1000 [ccc_0_6]
    [   14.219491]  ? 0xffffffffa05eb000
    [   14.219492]  do_one_initcall+0x2e/0x190
    [   14.219494]  do_init_module+0x67/0x270
    [   14.219496]  init_module_from_file+0x75/0xa0
    [   14.219499]  idempotent_init_module+0x15a/0x240
    [   14.219501]  __x64_sys_finit_module+0x61/0xc0
    [   14.219503]  do_syscall_64+0x5b/0x160
    [   14.219505]  entry_SYSCALL_64_after_hwframe+0x4b/0x53
    [   14.219507] RIP: 0033:0x7f545a4bd96d
    ...
    [   14.219516] kobject: kobject_add_internal failed for somefunc,1 with
        -EEXIST, don't try to register things with the same name ...
    
    This happens because klp_find_func() thinks somefunc with old_sympos==0
    is not the same as somefunc with old_sympos==1, and klp_add_object_nops
    adds another xxx/func,1 to the list of functions to patch.
    
    Signed-off-by: Song Liu <[email protected]>
    Acked-by: Josh Poimboeuf <[email protected]>
    [[email protected]: Fixed some typos.]
    Reviewed-by: Petr Mladek <[email protected]>
    Tested-by: Petr Mladek <[email protected]>
    Signed-off-by: Petr Mladek <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
lockd: fix vfs_test_lock() calls [+ + +]
Author: NeilBrown <[email protected]>
Date:   Tue Jan 6 18:08:16 2026 -0500

    lockd: fix vfs_test_lock() calls
    
    [ Upstream commit a49a2a1baa0c553c3548a1c414b6a3c005a8deba ]
    
    Usage of vfs_test_lock() is somewhat confused.  Documentation suggests
    it is given a "lock" but this is not the case.  It is given a struct
    file_lock which contains some details of the sort of lock it should be
    looking for.
    
    In particular passing a "file_lock" containing fl_lmops or fl_ops is
    meaningless and possibly confusing.
    
    This is particularly problematic in lockd.  nlmsvc_testlock() receives
    an initialised "file_lock" from xdr-decode, including manager ops and an
    owner.  It then mistakenly passes this to vfs_test_lock() which might
    replace the owner and the ops.  This can lead to confusion when freeing
    the lock.
    
    The primary role of the 'struct file_lock' passed to vfs_test_lock() is
    to report a conflicting lock that was found, so it makes more sense for
    nlmsvc_testlock() to pass "conflock", which it uses for returning the
    conflicting lock.
    
    With this change, freeing of the lock is not confused and code in
    __nlm4svc_proc_test() and __nlmsvc_proc_test() can be simplified.
    
    Documentation for vfs_test_lock() is improved to reflect its real
    purpose, and a WARN_ON_ONCE() is added to avoid a similar problem in the
    future.
    
    Reported-by: Olga Kornievskaia <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]
    Signed-off-by: NeilBrown <[email protected]>
    Fixes: 20fa19027286 ("nfs: add export operations")
    Cc: [email protected]
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    [ adapted c.flc_* field accesses to direct fl_* fields ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
locking/spinlock/debug: Fix data-race in do_raw_write_lock [+ + +]
Author: Alexander Sverdlin <[email protected]>
Date:   Fri Sep 19 11:12:38 2025 +0200

    locking/spinlock/debug: Fix data-race in do_raw_write_lock
    
    commit c14ecb555c3ee80eeb030a4e46d00e679537f03a upstream.
    
    KCSAN reports:
    
    BUG: KCSAN: data-race in do_raw_write_lock / do_raw_write_lock
    
    write (marked) to 0xffff800009cf504c of 4 bytes by task 1102 on cpu 1:
     do_raw_write_lock+0x120/0x204
     _raw_write_lock_irq
     do_exit
     call_usermodehelper_exec_async
     ret_from_fork
    
    read to 0xffff800009cf504c of 4 bytes by task 1103 on cpu 0:
     do_raw_write_lock+0x88/0x204
     _raw_write_lock_irq
     do_exit
     call_usermodehelper_exec_async
     ret_from_fork
    
    value changed: 0xffffffff -> 0x00000001
    
    Reported by Kernel Concurrency Sanitizer on:
    CPU: 0 PID: 1103 Comm: kworker/u4:1 6.1.111
    
    Commit 1a365e822372 ("locking/spinlock/debug: Fix various data races") has
    adressed most of these races, but seems to be not consistent/not complete.
    
    >From do_raw_write_lock() only debug_write_lock_after() part has been
    converted to WRITE_ONCE(), but not debug_write_lock_before() part.
    Do it now.
    
    Fixes: 1a365e822372 ("locking/spinlock/debug: Fix various data races")
    Reported-by: Adrian Freihofer <[email protected]>
    Signed-off-by: Alexander Sverdlin <[email protected]>
    Signed-off-by: Boqun Feng <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Reviewed-by: Paul E. McKenney <[email protected]>
    Acked-by: Waiman Long <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
LoongArch: Add machine_kexec_mask_interrupts() implementation [+ + +]
Author: Huacai Chen <[email protected]>
Date:   Sat Dec 13 17:49:50 2025 +0800

    LoongArch: Add machine_kexec_mask_interrupts() implementation
    
    Commit 863a320dc6fd7c855f47da4b ("LoongArch: Mask all interrupts during
    kexec/kdump") is backported to LTS branches, but they lack a generic
    machine_kexec_mask_interrupts() implementation, so add an arch-specific
    one.
    
    Signed-off-by: Tianyang Zhang <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

LoongArch: Add new PCI ID for pci_fixup_vgadev() [+ + +]
Author: Huacai Chen <[email protected]>
Date:   Sat Dec 6 10:39:49 2025 +0800

    LoongArch: Add new PCI ID for pci_fixup_vgadev()
    
    commit bf3fa8f232a1eec8d7b88dcd9e925e60f04f018d upstream.
    
    Loongson-2K3000 has a new PCI ID (0x7a46) for its display controller,
    Add it for pci_fixup_vgadev() since we prefer a discrete graphics card
    as default boot device if present.
    
    Cc: [email protected]
    Signed-off-by: Tianrui Zhao <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

LoongArch: BPF: Zero-extend bpf_tail_call() index [+ + +]
Author: Hengqi Chen <[email protected]>
Date:   Wed Dec 31 15:19:20 2025 +0800

    LoongArch: BPF: Zero-extend bpf_tail_call() index
    
    commit eb71f5c433e1c6dff089b315881dec40a88a7baf upstream.
    
    The bpf_tail_call() index should be treated as a u32 value. Let's
    zero-extend it to avoid calling wrong BPF progs. See similar fixes
    for x86 [1]) and arm64 ([2]) for more details.
    
      [1]: https://github.com/torvalds/linux/commit/90caccdd8cc0215705f18b92771b449b01e2474a
      [2]: https://github.com/torvalds/linux/commit/16338a9b3ac30740d49f5dfed81bac0ffa53b9c7
    
    Cc: [email protected]
    Fixes: 5dc615520c4d ("LoongArch: Add BPF JIT support")
    Signed-off-by: Hengqi Chen <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

LoongArch: Correct the calculation logic of thread_count [+ + +]
Author: Qiang Ma <[email protected]>
Date:   Sat Dec 6 10:39:49 2025 +0800

    LoongArch: Correct the calculation logic of thread_count
    
    commit 1de0ae21f136efa6c5d8a4d3e07b7d1ca39c750f upstream.
    
    For thread_count, the current calculation method has a maximum of 255,
    which may not be sufficient in the future. Therefore, we are correcting
    it now.
    
    Reference: SMBIOS Specification, 7.5 Processor Information (Type 4)[1]
    
    [1]: https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.9.0.pdf
    
    Cc: [email protected]
    Signed-off-by: Qiang Ma <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

LoongArch: Mask all interrupts during kexec/kdump [+ + +]
Author: Huacai Chen <[email protected]>
Date:   Thu Nov 20 14:42:05 2025 +0800

    LoongArch: Mask all interrupts during kexec/kdump
    
    [ Upstream commit 863a320dc6fd7c855f47da4bb82a8de2d9102ea2 ]
    
    If the default state of the interrupt controllers in the first kernel
    don't mask any interrupts, it may cause the second kernel to potentially
    receive interrupts (which were previously allocated by the first kernel)
    immediately after a CPU becomes online during its boot process. These
    interrupts cannot be properly routed, leading to bad IRQ issues.
    
    This patch calls machine_kexec_mask_interrupts() to mask all interrupts
    during the kexec/kdump process.
    
    Signed-off-by: Tianyang Zhang <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

LoongArch: Use __pmd()/__pte() for swap entry conversions [+ + +]
Author: WangYuli <[email protected]>
Date:   Sat Dec 6 10:39:48 2025 +0800

    LoongArch: Use __pmd()/__pte() for swap entry conversions
    
    commit 4a71df151e703b5e7e85b33369cee59ef2665e61 upstream.
    
    The __pmd() and __pte() helper macros provide the correct initialization
    syntax and abstraction for the pmd_t and pte_t types.
    
    Use __pmd() to fix follow warning about __swp_entry_to_pmd() with gcc-15
    under specific configs [1] :
    
      In file included from ./include/linux/pgtable.h:6,
                       from ./include/linux/mm.h:31,
                       from ./include/linux/pagemap.h:8,
                       from arch/loongarch/mm/init.c:14:
      ./include/linux/swapops.h: In function ‘swp_entry_to_pmd’:
      ./arch/loongarch/include/asm/pgtable.h:302:34: error: missing braces around initializer [-Werror=missing-braces]
        302 | #define __swp_entry_to_pmd(x)   ((pmd_t) { (x).val | _PAGE_HUGE })
            |                                  ^
      ./include/linux/swapops.h:559:16: note: in expansion of macro ‘__swp_entry_to_pmd’
        559 |         return __swp_entry_to_pmd(arch_entry);
            |                ^~~~~~~~~~~~~~~~~~
      cc1: all warnings being treated as errors
    
    Also update __swp_entry_to_pte() to use __pte() for consistency.
    
    [1]. https://download.01.org/0day-ci/archive/20251119/[email protected]/config
    
    Cc: [email protected]
    Signed-off-by: Yuli Wang <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mac80211: support RNR for EMA AP [+ + +]
Author: Aloka Dixit <[email protected]>
Date:   Thu Mar 23 04:38:01 2023 -0700

    mac80211: support RNR for EMA AP
    
    [ Upstream commit 68b9bea267bfc1259e195dcac1bf69db0c0c28da ]
    
    Generate EMA beacons, each including MBSSID and RNR elements at a given
    index. If number of stored RNR elements is more than the number of
    MBSSID elements then add those in every EMA beacon.
    
    Signed-off-by: Aloka Dixit <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Stable-dep-of: a519be2f5d95 ("wifi: mac80211: do not use old MBSSID elements")
    Signed-off-by: Sasha Levin <[email protected]>

 
macintosh/mac_hid: fix race condition in mac_hid_toggle_emumouse [+ + +]
Author: Long Li <[email protected]>
Date:   Tue Aug 19 17:10:35 2025 +0800

    macintosh/mac_hid: fix race condition in mac_hid_toggle_emumouse
    
    [ Upstream commit 1e4b207ffe54cf33a4b7a2912c4110f89c73bf3f ]
    
    The following warning appears when running syzkaller, and this issue also
    exists in the mainline code.
    
     ------------[ cut here ]------------
     list_add double add: new=ffffffffa57eee28, prev=ffffffffa57eee28, next=ffffffffa5e63100.
     WARNING: CPU: 0 PID: 1491 at lib/list_debug.c:35 __list_add_valid_or_report+0xf7/0x130
     Modules linked in:
     CPU: 0 PID: 1491 Comm: syz.1.28 Not tainted 6.6.0+ #3
     Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 04/01/2014
     RIP: 0010:__list_add_valid_or_report+0xf7/0x130
     RSP: 0018:ff1100010dfb7b78 EFLAGS: 00010282
     RAX: 0000000000000000 RBX: ffffffffa57eee18 RCX: ffffffff97fc9817
     RDX: 0000000000040000 RSI: ffa0000002383000 RDI: 0000000000000001
     RBP: ffffffffa57eee28 R08: 0000000000000001 R09: ffe21c0021bf6f2c
     R10: 0000000000000001 R11: 6464615f7473696c R12: ffffffffa5e63100
     R13: ffffffffa57eee28 R14: ffffffffa57eee28 R15: ff1100010dfb7d48
     FS:  00007fb14398b640(0000) GS:ff11000119600000(0000) knlGS:0000000000000000
     CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: 0000000000000000 CR3: 000000010d096005 CR4: 0000000000773ef0
     DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
     DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
     PKRU: 80000000
     Call Trace:
      <TASK>
      input_register_handler+0xb3/0x210
      mac_hid_start_emulation+0x1c5/0x290
      mac_hid_toggle_emumouse+0x20a/0x240
      proc_sys_call_handler+0x4c2/0x6e0
      new_sync_write+0x1b1/0x2d0
      vfs_write+0x709/0x950
      ksys_write+0x12a/0x250
      do_syscall_64+0x5a/0x110
      entry_SYSCALL_64_after_hwframe+0x78/0xe2
    
    The WARNING occurs when two processes concurrently write to the mac-hid
    emulation sysctl, causing a race condition in mac_hid_toggle_emumouse().
    Both processes read old_val=0, then both try to register the input handler,
    leading to a double list_add of the same handler.
    
      CPU0                             CPU1
      -------------------------        -------------------------
      vfs_write() //write 1            vfs_write()  //write 1
        proc_sys_write()                 proc_sys_write()
          mac_hid_toggle_emumouse()          mac_hid_toggle_emumouse()
            old_val = *valp // old_val=0
                                               old_val = *valp // old_val=0
                                               mutex_lock_killable()
                                               proc_dointvec() // *valp=1
                                               mac_hid_start_emulation()
                                                 input_register_handler()
                                               mutex_unlock()
            mutex_lock_killable()
            proc_dointvec()
            mac_hid_start_emulation()
              input_register_handler() //Trigger Warning
            mutex_unlock()
    
    Fix this by moving the old_val read inside the mutex lock region.
    
    Fixes: 99b089c3c38a ("Input: Mac button emulation - implement as an input filter")
    Signed-off-by: Long Li <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
md/raid5: fix IO hang when array is broken with IO inflight [+ + +]
Author: Yu Kuai <[email protected]>
Date:   Mon Nov 17 16:55:57 2025 +0800

    md/raid5: fix IO hang when array is broken with IO inflight
    
    [ Upstream commit a913d1f6a7f607c110aeef8b58c8988f47a4b24e ]
    
    Following test can cause IO hang:
    
    mdadm -CvR /dev/md0 -l10 -n4 /dev/sd[abcd] --assume-clean --chunk=64K --bitmap=none
    sleep 5
    echo 1 > /sys/block/sda/device/delete
    echo 1 > /sys/block/sdb/device/delete
    echo 1 > /sys/block/sdc/device/delete
    echo 1 > /sys/block/sdd/device/delete
    
    dd if=/dev/md0 of=/dev/null bs=8k count=1 iflag=direct
    
    Root cause:
    
    1) all disks removed, however all rdevs in the array is still in sync,
    IO will be issued normally.
    
    2) IO failure from sda, and set badblocks failed, sda will be faulty
    and MD_SB_CHANGING_PENDING will be set.
    
    3) error recovery try to recover this IO from other disks, IO will be
    issued to sdb, sdc, and sdd.
    
    4) IO failure from sdb, and set badblocks failed again, now array is
    broken and will become read-only.
    
    5) IO failure from sdc and sdd, however, stripe can't be handled anymore
    because MD_SB_CHANGING_PENDING is set:
    
    handle_stripe
     handle_stripe
     if (test_bit MD_SB_CHANGING_PENDING)
      set_bit STRIPE_HANDLE
      goto finish
      // skip handling failed stripe
    
    release_stripe
     if (test_bit STRIPE_HANDLE)
      list_add_tail conf->hand_list
    
    6) later raid5d can't handle failed stripe as well:
    
    raid5d
     md_check_recovery
      md_update_sb
       if (!md_is_rdwr())
        // can't clear pending bit
        return
     if (test_bit MD_SB_CHANGING_PENDING)
      break;
      // can't handle failed stripe
    
    Since MD_SB_CHANGING_PENDING can never be cleared for read-only array,
    fix this problem by skip this checking for read-only array.
    
    Link: https://lore.kernel.org/linux-raid/[email protected]
    Fixes: d87f064f5874 ("md: never update metadata when array is read-only.")
    Signed-off-by: Yu Kuai <[email protected]>
    Reviewed-by: Li Nan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
md: export md_is_rdwr() and is_md_suspended() [+ + +]
Author: Yu Kuai <[email protected]>
Date:   Fri May 12 09:56:08 2023 +0800

    md: export md_is_rdwr() and is_md_suspended()
    
    [ Upstream commit 431e61257d631157e1d374f1368febf37aa59f7c ]
    
    The two apis will be used later to fix a deadlock in raid456, there are
    no functional changes.
    
    Signed-off-by: Yu Kuai <[email protected]>
    Signed-off-by: Song Liu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: a913d1f6a7f6 ("md/raid5: fix IO hang when array is broken with IO inflight")
    Signed-off-by: Sasha Levin <[email protected]>

 
media: adv7842: Avoid possible out-of-bounds array accesses in adv7842_cp_log_status() [+ + +]
Author: Ivan Abramov <[email protected]>
Date:   Wed Sep 3 02:23:31 2025 +0300

    media: adv7842: Avoid possible out-of-bounds array accesses in adv7842_cp_log_status()
    
    commit 8163419e3e05d71dcfa8fb49c8fdf8d76908fe51 upstream.
    
    It's possible for cp_read() and hdmi_read() to return -EIO. Those
    values are further used as indexes for accessing arrays.
    
    Fix that by checking return values where it's needed.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: a89bcd4c6c20 ("[media] adv7842: add new video decoder driver")
    Cc: [email protected]
    Signed-off-by: Ivan Abramov <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: amphion: Add a frame flush mode for decoder [+ + +]
Author: Ming Qian <[email protected]>
Date:   Mon Jan 5 16:32:22 2026 -0500

    media: amphion: Add a frame flush mode for decoder
    
    [ Upstream commit 9ea16ba6eaf93f25f61855751f71e2e701709ddf ]
    
    By default the amphion decoder will pre-parse 3 frames before starting
    to decode the first frame. Alternatively, a block of flush padding data
    can be appended to the frame, which will ensure that the decoder can
    start decoding immediately after parsing the flush padding data, thus
    potentially reducing decoding latency.
    
    This mode was previously only enabled, when the display delay was set to
    0. Allow the user to manually toggle the use of that mode via a module
    parameter called low_latency, which enables the mode without
    changing the display order.
    
    Signed-off-by: Ming Qian <[email protected]>
    Reviewed-by: Nicolas Dufresne <[email protected]>
    Signed-off-by: Sebastian Fricke <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Stable-dep-of: 634c2cd17bd0 ("media: amphion: Remove vpu_vb_is_codecconfig")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: amphion: Cancel message work before releasing the VPU core [+ + +]
Author: Ming Qian <[email protected]>
Date:   Tue Sep 16 14:10:07 2025 +0800

    media: amphion: Cancel message work before releasing the VPU core
    
    commit ae246b0032146e352c4c06a7bf03cd3d5bcb2ecd upstream.
    
    To avoid accessing the VPU register after release of the VPU core,
    cancel the message work and destroy the workqueue that handles the
    VPU message before release of the VPU core.
    
    Fixes: 3cd084519c6f ("media: amphion: add vpu v4l2 m2m support")
    Cc: [email protected]
    Signed-off-by: Ming Qian <[email protected]>
    Signed-off-by: Nicolas Dufresne <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: amphion: Make some vpu_v4l2 functions static [+ + +]
Author: Laurent Pinchart <[email protected]>
Date:   Mon Jan 5 16:32:23 2026 -0500

    media: amphion: Make some vpu_v4l2 functions static
    
    [ Upstream commit 5d1e54bb4dc6741284a3ed587e994308ddee2f16 ]
    
    Some functions defined in vpu_v4l2.c are never used outside of that
    compilation unit. Make them static.
    
    Signed-off-by: Laurent Pinchart <[email protected]>
    Reviewed-by: Ming Qian <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Stable-dep-of: 634c2cd17bd0 ("media: amphion: Remove vpu_vb_is_codecconfig")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: amphion: Remove vpu_vb_is_codecconfig [+ + +]
Author: Ming Qian <[email protected]>
Date:   Mon Jan 5 16:32:24 2026 -0500

    media: amphion: Remove vpu_vb_is_codecconfig
    
    [ Upstream commit 634c2cd17bd021487c57b95973bddb14be8002ff ]
    
    Currently the function vpu_vb_is_codecconfig() always returns 0.
    Delete it and its related code.
    
    Fixes: 3cd084519c6f ("media: amphion: add vpu v4l2 m2m support")
    Cc: [email protected]
    Signed-off-by: Ming Qian <[email protected]>
    Signed-off-by: Nicolas Dufresne <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: cec: Fix debugfs leak on bus_register() failure [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Mon Sep 29 19:12:29 2025 +0800

    media: cec: Fix debugfs leak on bus_register() failure
    
    commit c43bcd2b2aa3c2ca9d2433c3990ecbc2c47d10eb upstream.
    
    In cec_devnode_init(), the debugfs directory created with
    debugfs_create_dir() is not removed if bus_register() fails.
    This leaves a stale "cec" entry in debugfs and prevents
    proper module reloading.
    
    Fix this by removing the debugfs directory in the error path.
    
    Fixes: a56960e8b406 ("[media] cec: add HDMI CEC framework (core)")
    Cc: [email protected]
    Signed-off-by: Haotian Zhang <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: dvb-usb: dtv5100: fix out-of-bounds in dtv5100_i2c_msg() [+ + +]
Author: Jeongjun Park <[email protected]>
Date:   Mon Apr 21 21:52:44 2025 +0900

    media: dvb-usb: dtv5100: fix out-of-bounds in dtv5100_i2c_msg()
    
    commit b91e6aafe8d356086cc621bc03e35ba2299e4788 upstream.
    
    rlen value is a user-controlled value, but dtv5100_i2c_msg() does not
    check the size of the rlen value. Therefore, if it is set to a value
    larger than sizeof(st->data), an out-of-bounds vuln occurs for st->data.
    
    Therefore, we need to add proper range checking to prevent this vuln.
    
    Fixes: 60688d5e6e6e ("V4L/DVB (8735): dtv5100: replace dummy frontend by zl10353")
    Cc: [email protected]
    Signed-off-by: Jeongjun Park <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: i2c: ADV7604: Remove redundant cancel_delayed_work in probe [+ + +]
Author: Duoming Zhou <[email protected]>
Date:   Tue Sep 2 09:53:37 2025 +0800

    media: i2c: ADV7604: Remove redundant cancel_delayed_work in probe
    
    commit 8f34f24355a607b98ecd9924837aab13c676eeca upstream.
    
    The delayed_work delayed_work_enable_hotplug is initialized with
    INIT_DELAYED_WORK() in adv76xx_probe(), but it is never scheduled
    anywhere in the probe function.
    
    Calling cancel_delayed_work() on a work that has never been
    scheduled is redundant and unnecessary, as there is no pending
    work to cancel.
    
    Remove the redundant cancel_delayed_work() from error handling
    path and adjust the goto label accordingly to simplify the code
    and avoid potential confusion.
    
    Fixes: 54450f591c99 ("[media] adv7604: driver for the Analog Devices ADV7604 video decoder")
    Cc: [email protected]
    Signed-off-by: Duoming Zhou <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: i2c: adv7842: Remove redundant cancel_delayed_work in probe [+ + +]
Author: Duoming Zhou <[email protected]>
Date:   Tue Sep 2 09:10:31 2025 +0800

    media: i2c: adv7842: Remove redundant cancel_delayed_work in probe
    
    commit e66a5cc606c58e72f18f9cdd868a3672e918f9f8 upstream.
    
    The delayed_work delayed_work_enable_hotplug is initialized with
    INIT_DELAYED_WORK() in adv7842_probe(), but it is never scheduled
    anywhere in the probe function.
    
    Calling cancel_delayed_work() on a work that has never been
    scheduled is redundant and unnecessary, as there is no pending
    work to cancel.
    
    Remove the redundant cancel_delayed_work() from error handling
    path and adjust the goto label accordingly to simplify the code
    and avoid potential confusion.
    
    Fixes: a89bcd4c6c20 ("[media] adv7842: add new video decoder driver")
    Cc: [email protected]
    Signed-off-by: Duoming Zhou <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: mediatek: vcodec: Fix a reference leak in mtk_vcodec_fw_vpu_init() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Mon Jan 5 18:31:38 2026 -0500

    media: mediatek: vcodec: Fix a reference leak in mtk_vcodec_fw_vpu_init()
    
    [ Upstream commit cdd0f118ef87db8a664fb5ea366fd1766d2df1cd ]
    
    vpu_get_plat_device() increases the reference count of the returned
    platform device. However, when devm_kzalloc() fails, the reference
    is not released, causing a reference leak.
    
    Fix this by calling put_device() on fw_pdev->dev before returning
    on the error path.
    
    Fixes: e25a89f743b1 ("media: mtk-vcodec: potential dereference of null pointer")
    Cc: [email protected]
    Signed-off-by: Haoxiang Li <[email protected]>
    Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
    Reviewed-by: Tzung-Bi Shih <[email protected]>
    Signed-off-by: Nicolas Dufresne <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    [ adapted file path from common/ subdirectory and adjusted devm_kzalloc target from plat_dev->dev to dev->plat_dev->dev ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: msp3400: Avoid possible out-of-bounds array accesses in msp3400c_thread() [+ + +]
Author: Ivan Abramov <[email protected]>
Date:   Wed Sep 3 02:28:14 2025 +0300

    media: msp3400: Avoid possible out-of-bounds array accesses in msp3400c_thread()
    
    commit d2bceb2e20e783d57e739c71e4e50b4b9f4a3953 upstream.
    
    It's possible for max1 to remain -1 if msp_read() always fail. This
    variable is further used as index for accessing arrays.
    
    Fix that by checking max1 prior to array accesses.
    
    It seems that restart is the preferable action in case of out-of-bounds
    value.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 8a4b275f9c19 ("V4L/DVB (3427): audmode and rxsubchans fixes (VIDIOC_G/S_TUNER)")
    Cc: [email protected]
    Signed-off-by: Ivan Abramov <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: pvrusb2: Fix incorrect variable used in trace message [+ + +]
Author: Colin Ian King <[email protected]>
Date:   Wed Sep 3 09:44:16 2025 +0100

    media: pvrusb2: Fix incorrect variable used in trace message
    
    commit be440980eace19c035a0745fd6b6e42707bc4f49 upstream.
    
    The pvr2_trace message is reporting an error about control read
    transfers, however it is using the incorrect variable write_len
    instead of read_lean. Fix this by using the correct variable
    read_len.
    
    Fixes: d855497edbfb ("V4L/DVB (4228a): pvrusb2 to kernel 2.6.18")
    Cc: [email protected]
    Signed-off-by: Colin Ian King <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: rc: st_rc: Fix reset control resource leak [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Fri Oct 31 14:03:32 2025 +0800

    media: rc: st_rc: Fix reset control resource leak
    
    commit 1240abf4b71f632f0117b056e22488e4d9808938 upstream.
    
    The driver calls reset_control_get_optional_exclusive() but never calls
    reset_control_put() in error paths or in the remove function. This causes
    a resource leak when probe fails after successfully acquiring the reset
    control, or when the driver is unloaded.
    
    Switch to devm_reset_control_get_optional_exclusive() to automatically
    manage the reset control resource.
    
    Fixes: a4b80242d046 ("media: st-rc: explicitly request exclusive reset control")
    Cc: [email protected]
    Signed-off-by: Haotian Zhang <[email protected]>
    Reviewed-by: Patrice Chotard <[email protected]>
    Signed-off-by: Sean Young <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: renesas: rcar_drif: fix device node reference leak in rcar_drif_bond_enabled [+ + +]
Author: Miaoqian Lin <[email protected]>
Date:   Wed Sep 3 21:37:29 2025 +0800

    media: renesas: rcar_drif: fix device node reference leak in rcar_drif_bond_enabled
    
    commit 445e1658894fd74eab7e53071fa16233887574ed upstream.
    
    The function calls of_parse_phandle() which returns
    a device node with an incremented reference count. When the bonded device
    is not available, the function
    returns NULL without releasing the reference, causing a reference leak.
    
    Add of_node_put(np) to release the device node reference.
    The of_node_put function handles NULL pointers.
    
    Found through static analysis by reviewing the doc of of_parse_phandle()
    and cross-checking its usage patterns across the codebase.
    
    Fixes: 7625ee981af1 ("[media] media: platform: rcar_drif: Add DRIF support")
    Cc: [email protected]
    Signed-off-by: Miaoqian Lin <[email protected]>
    Reviewed-by: Geert Uytterhoeven <[email protected]>
    Reviewed-by: Fabrizio Castro <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: samsung: exynos4-is: fix potential ABBA deadlock on init [+ + +]
Author: Marek Szyprowski <[email protected]>
Date:   Tue Oct 14 12:46:43 2025 +0200

    media: samsung: exynos4-is: fix potential ABBA deadlock on init
    
    commit 17dc8ccd6dd5ffe30aa9b0d36e2af1389344ce2b upstream.
    
    v4l2_device_register_subdev_nodes() must called without taking
    media_dev->graph_mutex to avoid potential AB-BA deadlock on further
    subdevice driver initialization.
    
    Fixes: fa91f1056f17 ("[media] exynos4-is: Add support for asynchronous subdevices registration")
    Cc: [email protected]
    Signed-off-by: Marek Szyprowski <[email protected]>
    Acked-by: Sylwester Nawrocki <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: TDA1997x: Remove redundant cancel_delayed_work in probe [+ + +]
Author: Duoming Zhou <[email protected]>
Date:   Mon Sep 1 21:26:17 2025 +0800

    media: TDA1997x: Remove redundant cancel_delayed_work in probe
    
    commit 29de195ca39fc2ac0af6fd45522994df9f431f80 upstream.
    
    The delayed_work delayed_work_enable_hpd is initialized with
    INIT_DELAYED_WORK(), but it is never scheduled in tda1997x_probe().
    
    Calling cancel_delayed_work() on a work that has never been
    scheduled is redundant and unnecessary, as there is no pending
    work to cancel.
    
    Remove the redundant cancel_delayed_work() from error handling
    path in tda1997x_probe() to avoid potential confusion.
    
    Fixes: 9ac0038db9a7 ("media: i2c: Add TDA1997x HDMI receiver driver")
    Cc: [email protected]
    Signed-off-by: Duoming Zhou <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: v4l2-mem2mem: Fix outdated documentation [+ + +]
Author: Laurent Pinchart <[email protected]>
Date:   Wed Oct 8 12:55:18 2025 +0300

    media: v4l2-mem2mem: Fix outdated documentation
    
    commit 082b86919b7a94de01d849021b4da820a6cb89dc upstream.
    
    Commit cbd9463da1b1 ("media: v4l2-mem2mem: Avoid calling .device_run in
    v4l2_m2m_job_finish") deferred calls to .device_run() to a work queue to
    avoid recursive calls when a job is finished right away from
    .device_run(). It failed to update the v4l2_m2m_job_finish()
    documentation that still states the function must not be called from
    .device_run(). Fix it.
    
    Fixes: cbd9463da1b1 ("media: v4l2-mem2mem: Avoid calling .device_run in v4l2_m2m_job_finish")
    Cc: [email protected]
    Signed-off-by: Laurent Pinchart <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: verisilicon: Fix CPU stalls on G2 bus error [+ + +]
Author: Nicolas Dufresne <[email protected]>
Date:   Mon Jan 5 12:53:07 2026 -0500

    media: verisilicon: Fix CPU stalls on G2 bus error
    
    [ Upstream commit 19c286b755072a22a063052f530a6b1fac8a1f63 ]
    
    In some seek stress tests, we are getting IRQ from the G2 decoder where
    the dec_bus_int and the dec_e bits are high, meaning the decoder is
    still running despite the error.
    
    Fix this by reworking the IRQ handler to only finish the job once we
    have reached completion and move the software reset to when our software
    watchdog triggers.
    
    This way, we let the hardware continue on errors when it did not self
    reset and in worse case scenario the hardware timeout will
    automatically stop it. The actual error will be fixed in a follow up
    patch.
    
    Fixes: 3385c514ecc5a ("media: hantro: Convert imx8m_vpu_g2_irq to helper")
    Cc: [email protected]
    Reviewed-by: Benjamin Gaignard <[email protected]>
    Signed-off-by: Nicolas Dufresne <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: verisilicon: Protect G2 HEVC decoder against invalid DPB index [+ + +]
Author: Nicolas Dufresne <[email protected]>
Date:   Mon Sep 22 14:43:39 2025 -0400

    media: verisilicon: Protect G2 HEVC decoder against invalid DPB index
    
    commit 47825b1646a6a9eca0f90baa3d4f98947c2add96 upstream.
    
    Fix the Hantro G2 HEVC decoder so that we use DPB index 0 whenever a
    ninvalid index is received from user space. This protects the hardware
    from doing faulty memory access which then leads to bus errors.
    
    To be noted that when a reference is missing, userspace such as GStreamer
    passes an invalid DPB index of 255. This issue was found by seeking to a
    CRA picture using GStreamer. The framework is currently missing the code
    to skip over RASL pictures placed after the CRA. This situation can also
    occur while doing live streaming over lossy transport.
    
    Fixes: cb5dd5a0fa518 ("media: hantro: Introduce G2/HEVC decoder")
    Cc: [email protected]
    Reviewed-by: Benjamin Gaignard <[email protected]>
    Signed-off-by: Nicolas Dufresne <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: videobuf2: Fix device reference leak in vb2_dc_alloc error path [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Tue Oct 28 14:44:43 2025 +0800

    media: videobuf2: Fix device reference leak in vb2_dc_alloc error path
    
    commit 94de23a9aa487d7c1372efb161721d7949a177ae upstream.
    
    In vb2_dc_alloc(), get_device() is called to increment the device
    reference count. However, if subsequent DMA allocation fails
    (vb2_dc_alloc_coherent or vb2_dc_alloc_non_coherent returns error),
    the function returns without calling put_device(), causing a device
    reference leak.
    
    Add put_device() call in the error path before kfree() to properly
    release the device reference acquired earlier.
    
    Fixes: de27891f675e ("media: videobuf2: handle non-contiguous DMA allocations")
    Cc: [email protected]
    Signed-off-by: Haotian Zhang <[email protected]>
    Reviewed-by: Marek Szyprowski <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: vidtv: initialize local pointers upon transfer of memory ownership [+ + +]
Author: Jeongjun Park <[email protected]>
Date:   Fri Sep 5 14:18:16 2025 +0900

    media: vidtv: initialize local pointers upon transfer of memory ownership
    
    commit 98aabfe2d79f74613abc2b0b1cef08f97eaf5322 upstream.
    
    vidtv_channel_si_init() creates a temporary list (program, service, event)
    and ownership of the memory itself is transferred to the PAT/SDT/EIT
    tables through vidtv_psi_pat_program_assign(),
    vidtv_psi_sdt_service_assign(), vidtv_psi_eit_event_assign().
    
    The problem here is that the local pointer where the memory ownership
    transfer was completed is not initialized to NULL. This causes the
    vidtv_psi_pmt_create_sec_for_each_pat_entry() function to fail, and
    in the flow that jumps to free_eit, the memory that was freed by
    vidtv_psi_*_table_destroy() can be accessed again by
    vidtv_psi_*_event_destroy() due to the uninitialized local pointer, so it
    is freed once again.
    
    Therefore, to prevent use-after-free and double-free vulnerability,
    local pointers must be initialized to NULL when transferring memory
    ownership.
    
    Cc: <[email protected]>
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=1d9c0edea5907af239e0
    Fixes: 3be8037960bc ("media: vidtv: add error checks")
    Signed-off-by: Jeongjun Park <[email protected]>
    Reviewed-by: Daniel Almeida <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: vpif_capture: fix section mismatch [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Oct 17 07:33:20 2025 +0200

    media: vpif_capture: fix section mismatch
    
    commit 0ef841113724166c3c484d0e9ae6db1eb5634fde upstream.
    
    Platform drivers can be probed after their init sections have been
    discarded (e.g. on probe deferral or manual rebind through sysfs) so the
    probe function must not live in init.
    
    Note that commit ffa1b391c61b ("V4L/DVB: vpif_cap/disp: Removed section
    mismatch warning") incorrectly suppressed the modpost warning.
    
    Fixes: ffa1b391c61b ("V4L/DVB: vpif_cap/disp: Removed section mismatch warning")
    Fixes: 6ffefff5a9e7 ("V4L/DVB (12906c): V4L : vpif capture driver for DM6467")
    Cc: [email protected]      # 2.6.32
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: vpif_display: fix section mismatch [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Oct 17 07:33:21 2025 +0200

    media: vpif_display: fix section mismatch
    
    commit 59ca64bf98e4209df8ace8057d31ae3c80f948cd upstream.
    
    Platform drivers can be probed after their init sections have been
    discarded (e.g. on probe deferral or manual rebind through sysfs) so the
    probe function must not live in init.
    
    Note that commit ffa1b391c61b ("V4L/DVB: vpif_cap/disp: Removed section
    mismatch warning") incorrectly suppressed the modpost warning.
    
    Fixes: ffa1b391c61b ("V4L/DVB: vpif_cap/disp: Removed section mismatch warning")
    Fixes: e7332e3a552f ("V4L/DVB (12176): davinci/vpif_display: Add VPIF display driver")
    Cc: [email protected]      # 2.6.32
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mfd: altera-sysmgr: Fix device leak on sysmgr regmap lookup [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Thu Sep 25 17:02:19 2025 +0200

    mfd: altera-sysmgr: Fix device leak on sysmgr regmap lookup
    
    commit ccb7cd3218e48665f3c7e19eede0da5f069c323d upstream.
    
    Make sure to drop the reference taken to the sysmgr platform device when
    retrieving its driver data.
    
    Note that holding a reference to a device does not prevent its driver
    data from going away.
    
    Fixes: f36e789a1f8d ("mfd: altera-sysmgr: Add SOCFPGA System Manager")
    Cc: [email protected]      # 5.2
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mfd: da9055: Fix missing regmap_del_irq_chip() in error path [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Fri Oct 10 09:17:36 2025 +0800

    mfd: da9055: Fix missing regmap_del_irq_chip() in error path
    
    [ Upstream commit 1b58acfd067ca16116b9234cd6b2d30cc8ab7502 ]
    
    When da9055_device_init() fails after regmap_add_irq_chip()
    succeeds but mfd_add_devices() fails, the error handling path
    only calls mfd_remove_devices() but forgets to call
    regmap_del_irq_chip(). This results in a resource leak.
    
    Fix this by adding regmap_del_irq_chip() to the error path so
    that resources are released properly.
    
    Fixes: 2896434cf272 ("mfd: DA9055 core driver")
    Signed-off-by: Haotian Zhang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mfd: max77620: Fix potential IRQ chip conflict when probing two devices [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Thu Oct 23 12:19:40 2025 +0200

    mfd: max77620: Fix potential IRQ chip conflict when probing two devices
    
    commit 2bac49bad1f3553cc3b3bfb22cc194e9bd9e8427 upstream.
    
    MAX77620 is most likely always a single device on the board, however
    nothing stops board designers to have two of them, thus same device
    driver could probe twice. Or user could manually try to probing second
    time.
    
    Device driver is not ready for that case, because it allocates
    statically 'struct regmap_irq_chip' as non-const and stores during
    probe in 'irq_drv_data' member a pointer to per-probe state
    container ('struct max77620_chip').  devm_regmap_add_irq_chip() does not
    make a copy of 'struct regmap_irq_chip' but store the pointer.
    
    Second probe - either successful or failure - would overwrite the
    'irq_drv_data' from previous device probe, so interrupts would be
    executed in a wrong context.
    
    Cc: [email protected]
    Fixes: 3df140d11c6d ("mfd: max77620: Mask/unmask interrupt before/after servicing it")
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mfd: mt6358-irq: Fix missing irq_domain_remove() in error path [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Tue Nov 18 20:14:27 2025 +0800

    mfd: mt6358-irq: Fix missing irq_domain_remove() in error path
    
    [ Upstream commit 384bd58bf7095e4c4c8fcdbcede316ef342c630c ]
    
    If devm_request_threaded_irq() fails after irq_domain_add_linear()
    succeeds in mt6358_irq_init(), the function returns without removing
    the created IRQ domain, leading to a resource leak.
    
    Call irq_domain_remove() in the error path after a successful
    irq_domain_add_linear() to properly release the IRQ domain.
    
    Fixes: 2b91c28f2abd ("mfd: Add support for the MediaTek MT6358 PMIC")
    Signed-off-by: Haotian Zhang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mfd: mt6397-irq: Fix missing irq_domain_remove() in error path [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Tue Nov 18 20:15:00 2025 +0800

    mfd: mt6397-irq: Fix missing irq_domain_remove() in error path
    
    [ Upstream commit b4b1bd1f330fdd13706382be6c90ce9f58cee3f5 ]
    
    If devm_request_threaded_irq() fails after irq_domain_create_linear()
    succeeds in mt6397_irq_init(), the function returns without removing
    the created IRQ domain, leading to a resource leak.
    
    Call irq_domain_remove() in the error path after a successful
    irq_domain_create_linear() to properly release the IRQ domain.
    
    Fixes: a4872e80ce7d ("mfd: mt6397: Extract IRQ related code from core driver")
    Signed-off-by: Haotian Zhang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
MIPS: Fix a reference leak bug in ip22_check_gio() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Thu Dec 4 18:36:18 2025 +0800

    MIPS: Fix a reference leak bug in ip22_check_gio()
    
    [ Upstream commit 680ad315caaa2860df411cb378bf3614d96c7648 ]
    
    If gio_device_register fails, gio_dev_put() is required to
    drop the gio_dev device reference.
    
    Fixes: e84de0c61905 ("MIPS: GIO bus support for SGI IP22/28")
    Signed-off-by: Haoxiang Li <[email protected]>
    Signed-off-by: Thomas Bogendoerfer <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mlxsw: spectrum_mr: Fix use-after-free when updating multicast route stats [+ + +]
Author: Ido Schimmel <[email protected]>
Date:   Tue Dec 2 18:44:13 2025 +0100

    mlxsw: spectrum_mr: Fix use-after-free when updating multicast route stats
    
    [ Upstream commit 8ac1dacec458f55f871f7153242ed6ab60373b90 ]
    
    Cited commit added a dedicated mutex (instead of RTNL) to protect the
    multicast route list, so that it will not change while the driver
    periodically traverses it in order to update the kernel about multicast
    route stats that were queried from the device.
    
    One instance of list entry deletion (during route replace) was missed
    and it can result in a use-after-free [1].
    
    Fix by acquiring the mutex before deleting the entry from the list and
    releasing it afterwards.
    
    [1]
    BUG: KASAN: slab-use-after-free in mlxsw_sp_mr_stats_update+0x4a5/0x540 drivers/net/ethernet/mellanox/mlxsw/spectrum_mr.c:1006 [mlxsw_spectrum]
    Read of size 8 at addr ffff8881523c2fa8 by task kworker/2:5/22043
    
    CPU: 2 UID: 0 PID: 22043 Comm: kworker/2:5 Not tainted 6.18.0-rc1-custom-g1a3d6d7cd014 #1 PREEMPT(full)
    Hardware name: Mellanox Technologies Ltd. MSN2010/SA002610, BIOS 5.6.5 08/24/2017
    Workqueue: mlxsw_core mlxsw_sp_mr_stats_update [mlxsw_spectrum]
    Call Trace:
     <TASK>
     dump_stack_lvl+0xba/0x110
     print_report+0x174/0x4f5
     kasan_report+0xdf/0x110
     mlxsw_sp_mr_stats_update+0x4a5/0x540 drivers/net/ethernet/mellanox/mlxsw/spectrum_mr.c:1006 [mlxsw_spectrum]
     process_one_work+0x9cc/0x18e0
     worker_thread+0x5df/0xe40
     kthread+0x3b8/0x730
     ret_from_fork+0x3e9/0x560
     ret_from_fork_asm+0x1a/0x30
     </TASK>
    
    Allocated by task 29933:
     kasan_save_stack+0x30/0x50
     kasan_save_track+0x14/0x30
     __kasan_kmalloc+0x8f/0xa0
     mlxsw_sp_mr_route_add+0xd8/0x4770 [mlxsw_spectrum]
     mlxsw_sp_router_fibmr_event_work+0x371/0xad0 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c:7965 [mlxsw_spectrum]
     process_one_work+0x9cc/0x18e0
     worker_thread+0x5df/0xe40
     kthread+0x3b8/0x730
     ret_from_fork+0x3e9/0x560
     ret_from_fork_asm+0x1a/0x30
    
    Freed by task 29933:
     kasan_save_stack+0x30/0x50
     kasan_save_track+0x14/0x30
     __kasan_save_free_info+0x3b/0x70
     __kasan_slab_free+0x43/0x70
     kfree+0x14e/0x700
     mlxsw_sp_mr_route_add+0x2dea/0x4770 drivers/net/ethernet/mellanox/mlxsw/spectrum_mr.c:444 [mlxsw_spectrum]
     mlxsw_sp_router_fibmr_event_work+0x371/0xad0 drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c:7965 [mlxsw_spectrum]
     process_one_work+0x9cc/0x18e0
     worker_thread+0x5df/0xe40
     kthread+0x3b8/0x730
     ret_from_fork+0x3e9/0x560
     ret_from_fork_asm+0x1a/0x30
    
    Fixes: f38656d06725 ("mlxsw: spectrum_mr: Protect multicast route list with a lock")
    Signed-off-by: Ido Schimmel <[email protected]>
    Reviewed-by: Petr Machata <[email protected]>
    Signed-off-by: Petr Machata <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/f996feecfd59fde297964bfc85040b6d83ec6089.1764695650.git.petrm@nvidia.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mlxsw: spectrum_router: Fix neighbour use-after-free [+ + +]
Author: Ido Schimmel <[email protected]>
Date:   Tue Dec 2 18:44:12 2025 +0100

    mlxsw: spectrum_router: Fix neighbour use-after-free
    
    [ Upstream commit 8b0e69763ef948fb872a7767df4be665d18f5fd4 ]
    
    We sometimes observe use-after-free when dereferencing a neighbour [1].
    The problem seems to be that the driver stores a pointer to the
    neighbour, but without holding a reference on it. A reference is only
    taken when the neighbour is used by a nexthop.
    
    Fix by simplifying the reference counting scheme. Always take a
    reference when storing a neighbour pointer in a neighbour entry. Avoid
    taking a referencing when the neighbour is used by a nexthop as the
    neighbour entry associated with the nexthop already holds a reference.
    
    Tested by running the test that uncovered the problem over 300 times.
    Without this patch the problem was reproduced after a handful of
    iterations.
    
    [1]
    BUG: KASAN: slab-use-after-free in mlxsw_sp_neigh_entry_update+0x2d4/0x310
    Read of size 8 at addr ffff88817f8e3420 by task ip/3929
    
    CPU: 3 UID: 0 PID: 3929 Comm: ip Not tainted 6.18.0-rc4-virtme-g36b21a067510 #3 PREEMPT(full)
    Hardware name: Nvidia SN5600/VMOD0013, BIOS 5.13 05/31/2023
    Call Trace:
     <TASK>
     dump_stack_lvl+0x6f/0xa0
     print_address_description.constprop.0+0x6e/0x300
     print_report+0xfc/0x1fb
     kasan_report+0xe4/0x110
     mlxsw_sp_neigh_entry_update+0x2d4/0x310
     mlxsw_sp_router_rif_gone_sync+0x35f/0x510
     mlxsw_sp_rif_destroy+0x1ea/0x730
     mlxsw_sp_inetaddr_port_vlan_event+0xa1/0x1b0
     __mlxsw_sp_inetaddr_lag_event+0xcc/0x130
     __mlxsw_sp_inetaddr_event+0xf5/0x3c0
     mlxsw_sp_router_netdevice_event+0x1015/0x1580
     notifier_call_chain+0xcc/0x150
     call_netdevice_notifiers_info+0x7e/0x100
     __netdev_upper_dev_unlink+0x10b/0x210
     netdev_upper_dev_unlink+0x79/0xa0
     vrf_del_slave+0x18/0x50
     do_set_master+0x146/0x7d0
     do_setlink.isra.0+0x9a0/0x2880
     rtnl_newlink+0x637/0xb20
     rtnetlink_rcv_msg+0x6fe/0xb90
     netlink_rcv_skb+0x123/0x380
     netlink_unicast+0x4a3/0x770
     netlink_sendmsg+0x75b/0xc90
     __sock_sendmsg+0xbe/0x160
     ____sys_sendmsg+0x5b2/0x7d0
     ___sys_sendmsg+0xfd/0x180
     __sys_sendmsg+0x124/0x1c0
     do_syscall_64+0xbb/0xfd0
     entry_SYSCALL_64_after_hwframe+0x4b/0x53
    [...]
    
    Allocated by task 109:
     kasan_save_stack+0x30/0x50
     kasan_save_track+0x14/0x30
     __kasan_kmalloc+0x7b/0x90
     __kmalloc_noprof+0x2c1/0x790
     neigh_alloc+0x6af/0x8f0
     ___neigh_create+0x63/0xe90
     mlxsw_sp_nexthop_neigh_init+0x430/0x7e0
     mlxsw_sp_nexthop_type_init+0x212/0x960
     mlxsw_sp_nexthop6_group_info_init.constprop.0+0x81f/0x1280
     mlxsw_sp_nexthop6_group_get+0x392/0x6a0
     mlxsw_sp_fib6_entry_create+0x46a/0xfd0
     mlxsw_sp_router_fib6_replace+0x1ed/0x5f0
     mlxsw_sp_router_fib6_event_work+0x10a/0x2a0
     process_one_work+0xd57/0x1390
     worker_thread+0x4d6/0xd40
     kthread+0x355/0x5b0
     ret_from_fork+0x1d4/0x270
     ret_from_fork_asm+0x11/0x20
    
    Freed by task 154:
     kasan_save_stack+0x30/0x50
     kasan_save_track+0x14/0x30
     __kasan_save_free_info+0x3b/0x60
     __kasan_slab_free+0x43/0x70
     kmem_cache_free_bulk.part.0+0x1eb/0x5e0
     kvfree_rcu_bulk+0x1f2/0x260
     kfree_rcu_work+0x130/0x1b0
     process_one_work+0xd57/0x1390
     worker_thread+0x4d6/0xd40
     kthread+0x355/0x5b0
     ret_from_fork+0x1d4/0x270
     ret_from_fork_asm+0x11/0x20
    
    Last potentially related work creation:
     kasan_save_stack+0x30/0x50
     kasan_record_aux_stack+0x8c/0xa0
     kvfree_call_rcu+0x93/0x5b0
     mlxsw_sp_router_neigh_event_work+0x67d/0x860
     process_one_work+0xd57/0x1390
     worker_thread+0x4d6/0xd40
     kthread+0x355/0x5b0
     ret_from_fork+0x1d4/0x270
     ret_from_fork_asm+0x11/0x20
    
    Fixes: 6cf3c971dc84 ("mlxsw: spectrum_router: Add private neigh table")
    Signed-off-by: Ido Schimmel <[email protected]>
    Reviewed-by: Petr Machata <[email protected]>
    Signed-off-by: Petr Machata <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/92d75e21d95d163a41b5cea67a15cd33f547cba6.1764695650.git.petrm@nvidia.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mm/balloon_compaction: convert balloon_page_delete() to balloon_page_finalize() [+ + +]
Author: David Hildenbrand <[email protected]>
Date:   Mon Jan 5 13:18:48 2026 -0500

    mm/balloon_compaction: convert balloon_page_delete() to balloon_page_finalize()
    
    [ Upstream commit 15504b1163007bbfbd9a63460d5c14737c16e96d ]
    
    Let's move the removal of the page from the balloon list into the single
    caller, to remove the dependency on the PG_isolated flag and clarify
    locking requirements.
    
    Note that for now, balloon_page_delete() was used on two paths:
    
    (1) Removing a page from the balloon for deflation through
        balloon_page_list_dequeue()
    (2) Removing an isolated page from the balloon for migration in the
        per-driver migration handlers. Isolated pages were already removed from
        the balloon list during isolation.
    
    So instead of relying on the flag, we can just distinguish both cases
    directly and handle it accordingly in the caller.
    
    We'll shuffle the operations a bit such that they logically make more
    sense (e.g., remove from the list before clearing flags).
    
    In balloon migration functions we can now move the balloon_page_finalize()
    out of the balloon lock and perform the finalization just before dropping
    the balloon reference.
    
    Document that the page lock is currently required when modifying the
    movability aspects of a page; hopefully we can soon decouple this from the
    page lock.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: David Hildenbrand <[email protected]>
    Reviewed-by: Lorenzo Stoakes <[email protected]>
    Cc: Alistair Popple <[email protected]>
    Cc: Al Viro <[email protected]>
    Cc: Arnd Bergmann <[email protected]>
    Cc: Brendan Jackman <[email protected]>
    Cc: Byungchul Park <[email protected]>
    Cc: Chengming Zhou <[email protected]>
    Cc: Christian Brauner <[email protected]>
    Cc: Christophe Leroy <[email protected]>
    Cc: Eugenio Pé rez <[email protected]>
    Cc: Greg Kroah-Hartman <[email protected]>
    Cc: Gregory Price <[email protected]>
    Cc: Harry Yoo <[email protected]>
    Cc: "Huang, Ying" <[email protected]>
    Cc: Jan Kara <[email protected]>
    Cc: Jason Gunthorpe <[email protected]>
    Cc: Jason Wang <[email protected]>
    Cc: Jerrin Shaji George <[email protected]>
    Cc: Johannes Weiner <[email protected]>
    Cc: John Hubbard <[email protected]>
    Cc: Jonathan Corbet <[email protected]>
    Cc: Joshua Hahn <[email protected]>
    Cc: Liam Howlett <[email protected]>
    Cc: Madhavan Srinivasan <[email protected]>
    Cc: Mathew Brost <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Miaohe Lin <[email protected]>
    Cc: Michael Ellerman <[email protected]>
    Cc: "Michael S. Tsirkin" <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Mike Rapoport <[email protected]>
    Cc: Minchan Kim <[email protected]>
    Cc: Naoya Horiguchi <[email protected]>
    Cc: Nicholas Piggin <[email protected]>
    Cc: Oscar Salvador <[email protected]>
    Cc: Peter Xu <[email protected]>
    Cc: Qi Zheng <[email protected]>
    Cc: Rakie Kim <[email protected]>
    Cc: Rik van Riel <[email protected]>
    Cc: Sergey Senozhatsky <[email protected]>
    Cc: Shakeel Butt <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: Xuan Zhuo <[email protected]>
    Cc: xu xin <[email protected]>
    Cc: Zi Yan <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Stable-dep-of: 0da2ba35c0d5 ("powerpc/pseries/cmm: adjust BALLOON_MIGRATE when migrating pages")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm/balloon_compaction: we cannot have isolated pages in the balloon list [+ + +]
Author: David Hildenbrand <[email protected]>
Date:   Mon Jan 5 13:18:47 2026 -0500

    mm/balloon_compaction: we cannot have isolated pages in the balloon list
    
    [ Upstream commit fb05f992b6bbb4702307d96f00703ee637b24dbf ]
    
    Patch series "mm/migration: rework movable_ops page migration (part 1)",
    v2.
    
    In the future, as we decouple "struct page" from "struct folio", pages
    that support "non-lru page migration" -- movable_ops page migration such
    as memory balloons and zsmalloc -- will no longer be folios.  They will
    not have ->mapping, ->lru, and likely no refcount and no page lock.  But
    they will have a type and flags 🙂
    
    This is the first part (other parts not written yet) of decoupling
    movable_ops page migration from folio migration.
    
    In this series, we get rid of the ->mapping usage, and start cleaning up
    the code + separating it from folio migration.
    
    Migration core will have to be further reworked to not treat movable_ops
    pages like folios.  This is the first step into that direction.
    
    This patch (of 29):
    
    The core will set PG_isolated only after mops->isolate_page() was called.
    In case of the balloon, that is where we will remove it from the balloon
    list.  So we cannot have isolated pages in the balloon list.
    
    Let's drop this unnecessary check.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: David Hildenbrand <[email protected]>
    Acked-by: Zi Yan <[email protected]>
    Reviewed-by: Lorenzo Stoakes <[email protected]>
    Cc: Alistair Popple <[email protected]>
    Cc: Al Viro <[email protected]>
    Cc: Arnd Bergmann <[email protected]>
    Cc: Brendan Jackman <[email protected]>
    Cc: Byungchul Park <[email protected]>
    Cc: Chengming Zhou <[email protected]>
    Cc: Christian Brauner <[email protected]>
    Cc: Christophe Leroy <[email protected]>
    Cc: Eugenio Pé rez <[email protected]>
    Cc: Greg Kroah-Hartman <[email protected]>
    Cc: Gregory Price <[email protected]>
    Cc: "Huang, Ying" <[email protected]>
    Cc: Jan Kara <[email protected]>
    Cc: Jason Gunthorpe <[email protected]>
    Cc: Jason Wang <[email protected]>
    Cc: Jerrin Shaji George <[email protected]>
    Cc: Johannes Weiner <[email protected]>
    Cc: John Hubbard <[email protected]>
    Cc: Jonathan Corbet <[email protected]>
    Cc: Joshua Hahn <[email protected]>
    Cc: Liam Howlett <[email protected]>
    Cc: Madhavan Srinivasan <[email protected]>
    Cc: Mathew Brost <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Miaohe Lin <[email protected]>
    Cc: Michael Ellerman <[email protected]>
    Cc: "Michael S. Tsirkin" <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Mike Rapoport <[email protected]>
    Cc: Minchan Kim <[email protected]>
    Cc: Naoya Horiguchi <[email protected]>
    Cc: Nicholas Piggin <[email protected]>
    Cc: Oscar Salvador <[email protected]>
    Cc: Peter Xu <[email protected]>
    Cc: Qi Zheng <[email protected]>
    Cc: Rakie Kim <[email protected]>
    Cc: Rik van Riel <[email protected]>
    Cc: Sergey Senozhatsky <[email protected]>
    Cc: Shakeel Butt <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: Xuan Zhuo <[email protected]>
    Cc: xu xin <[email protected]>
    Cc: Harry Yoo <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Stable-dep-of: 0da2ba35c0d5 ("powerpc/pseries/cmm: adjust BALLOON_MIGRATE when migrating pages")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/damon/tests/core-kunit: handle alloc failures in damon_test_set_regions() [+ + +]
Author: SeongJae Park <[email protected]>
Date:   Sat Nov 1 11:20:04 2025 -0700

    mm/damon/tests/core-kunit: handle alloc failures in damon_test_set_regions()
    
    commit 74d5969995d129fd59dd93b9c7daa6669cb6810f upstream.
    
    damon_test_set_regions() is assuming all dynamic memory allocation in it
    will succeed.  Those are indeed likely in the real use cases since those
    allocations are too small to fail, but theoretically those could fail.  In
    the case, inappropriate memory access can happen.  Fix it by appropriately
    cleanup pre-allocated memory and skip the execution of the remaining tests
    in the failure cases.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 62f409560eb2 ("mm/damon/core-test: test damon_set_regions")
    Signed-off-by: SeongJae Park <[email protected]>
    Cc: Brendan Higgins <[email protected]>
    Cc: David Gow <[email protected]>
    Cc: Kefeng Wang <[email protected]>
    Cc: <[email protected]>    [6.1+]
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm/damon/tests/core-kunit: handle alloc failures on damon_test_merge_two() [+ + +]
Author: SeongJae Park <[email protected]>
Date:   Sat Nov 1 11:20:00 2025 -0700

    mm/damon/tests/core-kunit: handle alloc failures on damon_test_merge_two()
    
    commit 3d443dd29a1db7efa587a4bb0c06a497e13ca9e4 upstream.
    
    damon_test_merge_two() is assuming all dynamic memory allocation in it
    will succeed.  Those are indeed likely in the real use cases since those
    allocations are too small to fail, but theoretically those could fail.  In
    the case, inappropriate memory access can happen.  Fix it by appropriately
    cleanup pre-allocated memory and skip the execution of the remaining tests
    in the failure cases.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 17ccae8bb5c9 ("mm/damon: add kunit tests")
    Signed-off-by: SeongJae Park <[email protected]>
    Cc: Brendan Higgins <[email protected]>
    Cc: David Gow <[email protected]>
    Cc: Kefeng Wang <[email protected]>
    Cc: <[email protected]>    [5.15+]
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm/damon/tests/core-kunit: handle alloc failures on damon_test_split_at() [+ + +]
Author: SeongJae Park <[email protected]>
Date:   Sat Nov 1 11:19:59 2025 -0700

    mm/damon/tests/core-kunit: handle alloc failures on damon_test_split_at()
    
    commit 5e80d73f22043c59c8ad36452a3253937ed77955 upstream.
    
    damon_test_split_at() is assuming all dynamic memory allocation in it will
    succeed.  Those are indeed likely in the real use cases since those
    allocations are too small to fail, but theoretically those could fail.  In
    the case, inappropriate memory access can happen.  Fix it by appropriately
    cleanup pre-allocated memory and skip the execution of the remaining tests
    in the failure cases.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 17ccae8bb5c9 ("mm/damon: add kunit tests")
    Signed-off-by: SeongJae Park <[email protected]>
    Cc: Brendan Higgins <[email protected]>
    Cc: David Gow <[email protected]>
    Cc: Kefeng Wang <[email protected]>
    Cc: <[email protected]>    [5.15+]
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm/damon/tests/core-kunit: handle alloc failures on damon_test_split_regions_of() [+ + +]
Author: SeongJae Park <[email protected]>
Date:   Sat Nov 1 11:20:02 2025 -0700

    mm/damon/tests/core-kunit: handle alloc failures on damon_test_split_regions_of()
    
    commit eded254cb69044bd4abde87394ea44909708d7c0 upstream.
    
    damon_test_split_regions_of() is assuming all dynamic memory allocation in
    it will succeed.  Those are indeed likely in the real use cases since
    those allocations are too small to fail, but theoretically those could
    fail.  In the case, inappropriate memory access can happen.  Fix it by
    appropriately cleanup pre-allocated memory and skip the execution of the
    remaining tests in the failure cases.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 17ccae8bb5c9 ("mm/damon: add kunit tests")
    Signed-off-by: SeongJae Park <[email protected]>
    Cc: Brendan Higgins <[email protected]>
    Cc: David Gow <[email protected]>
    Cc: Kefeng Wang <[email protected]>
    Cc: <[email protected]>    [5.15+]
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm/damon/tests/core-kunit: handle alloc failures on dasmon_test_merge_regions_of() [+ + +]
Author: SeongJae Park <[email protected]>
Date:   Sat Nov 1 11:20:01 2025 -0700

    mm/damon/tests/core-kunit: handle alloc failures on dasmon_test_merge_regions_of()
    
    commit 0998d2757218771c59d5ca59ccf13d1542a38f17 upstream.
    
    damon_test_merge_regions_of() is assuming all dynamic memory allocation in
    it will succeed.  Those are indeed likely in the real use cases since
    those allocations are too small to fail, but theoretically those could
    fail.  In the case, inappropriate memory access can happen.  Fix it by
    appropriately cleanup pre-allocated memory and skip the execution of the
    remaining tests in the failure cases.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 17ccae8bb5c9 ("mm/damon: add kunit tests")
    Signed-off-by: SeongJae Park <[email protected]>
    Cc: Brendan Higgins <[email protected]>
    Cc: David Gow <[email protected]>
    Cc: Kefeng Wang <[email protected]>
    Cc: <[email protected]>    [5.15+]
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm/damon/tests/core-kunit: handle allocation failures in damon_test_regions() [+ + +]
Author: SeongJae Park <[email protected]>
Date:   Sat Nov 1 11:19:56 2025 -0700

    mm/damon/tests/core-kunit: handle allocation failures in damon_test_regions()
    
    commit e16fdd4f754048d6e23c56bd8d920b71e41e3777 upstream.
    
    damon_test_regions() is assuming all dynamic memory allocation in it will
    succeed.  Those are indeed likely in the real use cases since those
    allocations are too small to fail, but theoretically those could fail.  In
    the case, inappropriate memory access can happen.  Fix it by appropriately
    cleanup pre-allocated memory and skip the execution of the remaining tests
    in the failure cases.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 17ccae8bb5c9 ("mm/damon: add kunit tests")
    Signed-off-by: SeongJae Park <[email protected]>
    Cc: Brendan Higgins <[email protected]>
    Cc: David Gow <[email protected]>
    Cc: Kefeng Wang <[email protected]>
    Cc: <[email protected]>    [5.15+]
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm/damon/tests/core-kunit: handle memory alloc failure from damon_test_aggregate() [+ + +]
Author: SeongJae Park <[email protected]>
Date:   Sat Nov 1 11:19:58 2025 -0700

    mm/damon/tests/core-kunit: handle memory alloc failure from damon_test_aggregate()
    
    commit f79f2fc44ebd0ed655239046be3e80e8804b5545 upstream.
    
    damon_test_aggregate() is assuming all dynamic memory allocation in it
    will succeed.  Those are indeed likely in the real use cases since those
    allocations are too small to fail, but theoretically those could fail.  In
    the case, inappropriate memory access can happen.  Fix it by appropriately
    cleanup pre-allocated memory and skip the execution of the remaining tests
    in the failure cases.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 17ccae8bb5c9 ("mm/damon: add kunit tests")
    Signed-off-by: SeongJae Park <[email protected]>
    Cc: Brendan Higgins <[email protected]>
    Cc: David Gow <[email protected]>
    Cc: Kefeng Wang <[email protected]>
    Cc: <[email protected]>    [5.15+]
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm/damon/tests/core-kunit: handle memory failure from damon_test_target() [+ + +]
Author: SeongJae Park <[email protected]>
Date:   Sat Nov 1 11:19:57 2025 -0700

    mm/damon/tests/core-kunit: handle memory failure from damon_test_target()
    
    commit fafe953de2c661907c94055a2497c6b8dbfd26f3 upstream.
    
    damon_test_target() is assuming all dynamic memory allocation in it will
    succeed.  Those are indeed likely in the real use cases since those
    allocations are too small to fail, but theoretically those could fail.  In
    the case, inappropriate memory access can happen.  Fix it by appropriately
    cleanup pre-allocated memory and skip the execution of the remaining tests
    in the failure cases.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 17ccae8bb5c9 ("mm/damon: add kunit tests")
    Signed-off-by: SeongJae Park <[email protected]>
    Cc: Brendan Higgins <[email protected]>
    Cc: David Gow <[email protected]>
    Cc: Kefeng Wang <[email protected]>
    Cc: <[email protected]>    [5.15+]
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/damon/tests/vaddr-kunit: handle alloc failures in damon_test_split_evenly_fail() [+ + +]
Author: SeongJae Park <[email protected]>
Date:   Sat Nov 1 11:20:12 2025 -0700

    mm/damon/tests/vaddr-kunit: handle alloc failures in damon_test_split_evenly_fail()
    
    commit 7890e5b5bb6e386155c6e755fe70e0cdcc77f18e upstream.
    
    damon_test_split_evenly_fail() is assuming all dynamic memory allocation
    in it will succeed.  Those are indeed likely in the real use cases since
    those allocations are too small to fail, but theoretically those could
    fail.  In the case, inappropriate memory access can happen.  Fix it by
    appropriately cleanup pre-allocated memory and skip the execution of the
    remaining tests in the failure cases.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 17ccae8bb5c9 ("mm/damon: add kunit tests")
    Signed-off-by: SeongJae Park <[email protected]>
    Cc: Brendan Higgins <[email protected]>
    Cc: David Gow <[email protected]>
    Cc: Kefeng Wang <[email protected]>
    Cc: <[email protected]>    [5.15+]
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm/damon/tests/vaddr-kunit: handle alloc failures on damon_do_test_apply_three_regions() [+ + +]
Author: SeongJae Park <[email protected]>
Date:   Sat Nov 1 11:20:11 2025 -0700

    mm/damon/tests/vaddr-kunit: handle alloc failures on damon_do_test_apply_three_regions()
    
    commit 2b22d0fcc6320ba29b2122434c1d2f0785fb0a25 upstream.
    
    damon_do_test_apply_three_regions() is assuming all dynamic memory
    allocation in it will succeed.  Those are indeed likely in the real use
    cases since those allocations are too small to fail, but theoretically
    those could fail.  In the case, inappropriate memory access can happen.
    Fix it by appropriately cleanup pre-allocated memory and skip the
    execution of the remaining tests in the failure cases.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 17ccae8bb5c9 ("mm/damon: add kunit tests")
    Signed-off-by: SeongJae Park <[email protected]>
    Cc: Brendan Higgins <[email protected]>
    Cc: David Gow <[email protected]>
    Cc: Kefeng Wang <[email protected]>
    Cc: <[email protected]>    [5.15+]
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: SeongJae Park <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm/damon/tests/vaddr-kunit: handle alloc failures on damon_test_split_evenly_succ() [+ + +]
Author: SeongJae Park <[email protected]>
Date:   Sat Nov 1 11:20:13 2025 -0700

    mm/damon/tests/vaddr-kunit: handle alloc failures on damon_test_split_evenly_succ()
    
    commit 0a63a0e7570b9b2631dfb8d836dc572709dce39e upstream.
    
    damon_test_split_evenly_succ() is assuming all dynamic memory allocation
    in it will succeed.  Those are indeed likely in the real use cases since
    those allocations are too small to fail, but theoretically those could
    fail.  In the case, inappropriate memory access can happen.  Fix it by
    appropriately cleanup pre-allocated memory and skip the execution of the
    remaining tests in the failure cases.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 17ccae8bb5c9 ("mm/damon: add kunit tests")
    Signed-off-by: SeongJae Park <[email protected]>
    Cc: Brendan Higgins <[email protected]>
    Cc: David Gow <[email protected]>
    Cc: Kefeng Wang <[email protected]>
    Cc: <[email protected]>    [5.15+]
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/mprotect: delete pmd_none_or_clear_bad_unless_trans_huge() [+ + +]
Author: Hugh Dickins <[email protected]>
Date:   Tue Jan 6 20:47:14 2026 +0900

    mm/mprotect: delete pmd_none_or_clear_bad_unless_trans_huge()
    
    commit 670ddd8cdcbd1d07a4571266ae3517f821728c3a upstream.
    
    change_pmd_range() had special pmd_none_or_clear_bad_unless_trans_huge(),
    required to avoid "bad" choices when setting automatic NUMA hinting under
    mmap_read_lock(); but most of that is already covered in pte_offset_map()
    now.  change_pmd_range() just wants a pmd_none() check before wasting time
    on MMU notifiers, then checks on the read-once _pmd value to work out
    what's needed for huge cases.  If change_pte_range() returns -EAGAIN to
    retry if pte_offset_map_lock() fails, nothing more special is needed.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Hugh Dickins <[email protected]>
    Cc: Alistair Popple <[email protected]>
    Cc: Anshuman Khandual <[email protected]>
    Cc: Axel Rasmussen <[email protected]>
    Cc: Christophe Leroy <[email protected]>
    Cc: Christoph Hellwig <[email protected]>
    Cc: David Hildenbrand <[email protected]>
    Cc: "Huang, Ying" <[email protected]>
    Cc: Ira Weiny <[email protected]>
    Cc: Jason Gunthorpe <[email protected]>
    Cc: Kirill A. Shutemov <[email protected]>
    Cc: Lorenzo Stoakes <[email protected]>
    Cc: Matthew Wilcox <[email protected]>
    Cc: Mel Gorman <[email protected]>
    Cc: Miaohe Lin <[email protected]>
    Cc: Mike Kravetz <[email protected]>
    Cc: Mike Rapoport (IBM) <[email protected]>
    Cc: Minchan Kim <[email protected]>
    Cc: Naoya Horiguchi <[email protected]>
    Cc: Pavel Tatashin <[email protected]>
    Cc: Peter Xu <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Cc: Qi Zheng <[email protected]>
    Cc: Ralph Campbell <[email protected]>
    Cc: Ryan Roberts <[email protected]>
    Cc: SeongJae Park <[email protected]>
    Cc: Song Liu <[email protected]>
    Cc: Steven Price <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: Thomas Hellström <[email protected]>
    Cc: Will Deacon <[email protected]>
    Cc: Yang Shi <[email protected]>
    Cc: Yu Zhao <[email protected]>
    Cc: Zack Rusin <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    [ Background: It was reported that a bad pmd is seen when automatic NUMA
      balancing is marking page table entries as prot_numa:
    
          [2437548.196018] mm/pgtable-generic.c:50: bad pmd 00000000af22fc02(dffffffe71fbfe02)
          [2437548.235022] Call Trace:
          [2437548.238234]  <TASK>
          [2437548.241060]  dump_stack_lvl+0x46/0x61
          [2437548.245689]  panic+0x106/0x2e5
          [2437548.249497]  pmd_clear_bad+0x3c/0x3c
          [2437548.253967]  change_pmd_range.isra.0+0x34d/0x3a7
          [2437548.259537]  change_p4d_range+0x156/0x20e
          [2437548.264392]  change_protection_range+0x116/0x1a9
          [2437548.269976]  change_prot_numa+0x15/0x37
          [2437548.274774]  task_numa_work+0x1b8/0x302
          [2437548.279512]  task_work_run+0x62/0x95
          [2437548.283882]  exit_to_user_mode_loop+0x1a4/0x1a9
          [2437548.289277]  exit_to_user_mode_prepare+0xf4/0xfc
          [2437548.294751]  ? sysvec_apic_timer_interrupt+0x34/0x81
          [2437548.300677]  irqentry_exit_to_user_mode+0x5/0x25
          [2437548.306153]  asm_sysvec_apic_timer_interrupt+0x16/0x1b
    
        This is due to a race condition between change_prot_numa() and
        THP migration because the kernel doesn't check is_swap_pmd() and
        pmd_trans_huge() atomically:
    
        change_prot_numa()                      THP migration
        ======================================================================
        - change_pmd_range()
        -> is_swap_pmd() returns false,
        meaning it's not a PMD migration
        entry.
                                          - do_huge_pmd_numa_page()
                                          -> migrate_misplaced_page() sets
                                             migration entries for the THP.
        - change_pmd_range()
        -> pmd_none_or_clear_bad_unless_trans_huge()
        -> pmd_none() and pmd_trans_huge() returns false
        - pmd_none_or_clear_bad_unless_trans_huge()
        -> pmd_bad() returns true for the migration entry!
    
      The upstream commit 670ddd8cdcbd ("mm/mprotect: delete
      pmd_none_or_clear_bad_unless_trans_huge()") closes this race condition
      by checking is_swap_pmd() and pmd_trans_huge() atomically.
    
      Backporting note:
        Unlike the mainline, pte_offset_map_lock() does not check if the pmd
        entry is a migration entry or a hugepage; acquires PTL unconditionally
        instead of returning failure. Therefore, it is necessary to keep the
        !is_swap_pmd() && !pmd_trans_huge() && !pmd_devmap() check before
        acquiring the PTL.
    
        After acquiring the lock, open-code the semantics of
        pte_offset_map_lock() in the mainline kernel; change_pte_range() fails
        if the pmd value has changed. This requires adding pmd_old parameter
        (pmd_t value that is read before calling the function) to
        change_pte_range(). ]
    
    Signed-off-by: Harry Yoo <[email protected]>
    Acked-by: David Hildenbrand (Red Hat) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm/mprotect: use long for page accountings and retval [+ + +]
Author: Peter Xu <[email protected]>
Date:   Tue Jan 6 20:47:13 2026 +0900

    mm/mprotect: use long for page accountings and retval
    
    commit a79390f5d6a78647fd70856bd42b22d994de0ba2 upstream.
    
    Switch to use type "long" for page accountings and retval across the whole
    procedure of change_protection().
    
    The change should have shrinked the possible maximum page number to be
    half comparing to previous (ULONG_MAX / 2), but it shouldn't overflow on
    any system either because the maximum possible pages touched by change
    protection should be ULONG_MAX / PAGE_SIZE.
    
    Two reasons to switch from "unsigned long" to "long":
    
      1. It suites better on count_vm_numa_events(), whose 2nd parameter takes
         a long type.
    
      2. It paves way for returning negative (error) values in the future.
    
    Currently the only caller that consumes this retval is change_prot_numa(),
    where the unsigned long was converted to an int.  Since at it, touching up
    the numa code to also take a long, so it'll avoid any possible overflow
    too during the int-size convertion.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Peter Xu <[email protected]>
    Acked-by: Mike Kravetz <[email protected]>
    Acked-by: James Houghton <[email protected]>
    Cc: Andrea Arcangeli <[email protected]>
    Cc: Axel Rasmussen <[email protected]>
    Cc: David Hildenbrand <[email protected]>
    Cc: Muchun Song <[email protected]>
    Cc: Nadav Amit <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    [ Adjust context ]
    Signed-off-by: Harry Yoo <[email protected]>
    Acked-by: David Hildenbrand (Red Hat) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm: (un)track_pfn_copy() fix + doc improvements [+ + +]
Author: David Hildenbrand <[email protected]>
Date:   Tue Apr 8 10:59:50 2025 +0200

    mm: (un)track_pfn_copy() fix + doc improvements
    
    commit 8c56c5dbcf52220cc9be7a36e7f21ebd5939e0b9 upstream.
    
    We got a late smatch warning and some additional review feedback.
    
            smatch warnings:
            mm/memory.c:1428 copy_page_range() error: uninitialized symbol 'pfn'.
    
    We actually use the pfn only when it is properly initialized; however, we
    may pass an uninitialized value to a function -- although it will not use
    it that likely still is UB in C.
    
    So let's just fix it by always initializing pfn in the caller of
    track_pfn_copy(), and improving the documentation of track_pfn_copy().
    
    While at it, clarify the doc of untrack_pfn_copy(), that internal checks
    make sure if we actually have to untrack anything.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: dc84bc2aba85 ("x86/mm/pat: Fix VM_PAT handling when fork() fails in copy_page_range()")
    Signed-off-by: David Hildenbrand <[email protected]>
    Reported-by: kernel test robot <[email protected]>
    Reported-by: Dan Carpenter <[email protected]>
    Closes: https://lore.kernel.org/r/[email protected]/
    Reviewed-by: Lorenzo Stoakes <[email protected]>
    Acked-by: Ingo Molnar <[email protected]>
    Cc: Andrew Morton <[email protected]>
    Cc: Dave Hansen <[email protected]>
    Cc: Andy Lutomirski <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Cc: Thomas Gleixner <[email protected]>
    Cc: Borislav Petkov <[email protected]>
    Cc: Rik van Riel <[email protected]>
    Cc: "H. Peter Anvin" <[email protected]>
    Cc: Linus Torvalds <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm: consider non-anon swap cache folios in folio_expected_ref_count() [+ + +]
Author: Bijan Tabatabai <[email protected]>
Date:   Tue Jan 6 19:36:27 2026 -0500

    mm: consider non-anon swap cache folios in folio_expected_ref_count()
    
    [ Upstream commit f183663901f21fe0fba8bd31ae894bc529709ee0 ]
    
    Currently, folio_expected_ref_count() only adds references for the swap
    cache if the folio is anonymous.  However, according to the comment above
    the definition of PG_swapcache in enum pageflags, shmem folios can also
    have PG_swapcache set.  This patch makes sure references for the swap
    cache are added if folio_test_swapcache(folio) is true.
    
    This issue was found when trying to hot-unplug memory in a QEMU/KVM
    virtual machine.  When initiating hot-unplug when most of the guest memory
    is allocated, hot-unplug hangs partway through removal due to migration
    failures.  The following message would be printed several times, and would
    be printed again about every five seconds:
    
    [   49.641309] migrating pfn b12f25 failed ret:7
    [   49.641310] page: refcount:2 mapcount:0 mapping:0000000033bd8fe2 index:0x7f404d925 pfn:0xb12f25
    [   49.641311] aops:swap_aops
    [   49.641313] flags: 0x300000000030508(uptodate|active|owner_priv_1|reclaim|swapbacked|node=0|zone=3)
    [   49.641314] raw: 0300000000030508 ffffed312c4bc908 ffffed312c4bc9c8 0000000000000000
    [   49.641315] raw: 00000007f404d925 00000000000c823b 00000002ffffffff 0000000000000000
    [   49.641315] page dumped because: migration failure
    
    When debugging this, I found that these migration failures were due to
    __migrate_folio() returning -EAGAIN for a small set of folios because the
    expected reference count it calculates via folio_expected_ref_count() is
    one less than the actual reference count of the folios.  Furthermore, all
    of the affected folios were not anonymous, but had the PG_swapcache flag
    set, inspiring this patch.  After applying this patch, the memory
    hot-unplug behaves as expected.
    
    I tested this on a machine running Ubuntu 24.04 with kernel version
    6.8.0-90-generic and 64GB of memory.  The guest VM is managed by libvirt
    and runs Ubuntu 24.04 with kernel version 6.18 (though the head of the
    mm-unstable branch as a Dec 16, 2025 was also tested and behaves the same)
    and 48GB of memory.  The libvirt XML definition for the VM can be found at
    [1].  CONFIG_MHP_DEFAULT_ONLINE_TYPE_ONLINE_MOVABLE is set in the guest
    kernel so the hot-pluggable memory is automatically onlined.
    
    Below are the steps to reproduce this behavior:
    
    1) Define and start and virtual machine
      host$ virsh -c qemu:///system define ./test_vm.xml # test_vm.xml from [1]
      host$ virsh -c qemu:///system start test_vm
    
    2) Setup swap in the guest
      guest$ sudo fallocate -l 32G /swapfile
      guest$ sudo chmod 0600 /swapfile
      guest$ sudo mkswap /swapfile
      guest$ sudo swapon /swapfile
    
    3) Use alloc_data [2] to allocate most of the remaining guest memory
      guest$ ./alloc_data 45
    
    4) In a separate guest terminal, monitor the amount of used memory
      guest$ watch -n1 free -h
    
    5) When alloc_data has finished allocating, initiate the memory
    hot-unplug using the provided xml file [3]
      host$ virsh -c qemu:///system detach-device test_vm ./remove.xml --live
    
    After initiating the memory hot-unplug, you should see the amount of
    available memory in the guest decrease, and the amount of used swap data
    increase.  If everything works as expected, when all of the memory is
    unplugged, there should be around 8.5-9GB of data in swap.  If the
    unplugging is unsuccessful, the amount of used swap data will settle below
    that.  If that happens, you should be able to see log messages in dmesg
    similar to the one posted above.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://github.com/BijanT/linux_patch_files/blob/main/test_vm.xml [1]
    Link: https://github.com/BijanT/linux_patch_files/blob/main/alloc_data.c [2]
    Link: https://github.com/BijanT/linux_patch_files/blob/main/remove.xml [3]
    Fixes: 86ebd50224c0 ("mm: add folio_expected_ref_count() for reference count calculation")
    Signed-off-by: Bijan Tabatabai <[email protected]>
    Acked-by: David Hildenbrand (Red Hat) <[email protected]>
    Acked-by: Zi Yan <[email protected]>
    Reviewed-by: Baolin Wang <[email protected]>
    Cc: Liam Howlett <[email protected]>
    Cc: Lorenzo Stoakes <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Mike Rapoport <[email protected]>
    Cc: Shivank Garg <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: Kairui Song <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm: simplify folio_expected_ref_count() [+ + +]
Author: David Hildenbrand <[email protected]>
Date:   Tue Jan 6 19:36:26 2026 -0500

    mm: simplify folio_expected_ref_count()
    
    [ Upstream commit 78cb1a13c42a6d843e21389f74d1edb90ed07288 ]
    
    Now that PAGE_MAPPING_MOVABLE is gone, we can simplify and rely on the
    folio_test_anon() test only.
    
    ... but staring at the users, this function should never even have been
    called on movable_ops pages. E.g.,
    * __buffer_migrate_folio() does not make sense for them
    * folio_migrate_mapping() does not make sense for them
    * migrate_huge_page_move_mapping() does not make sense for them
    * __migrate_folio() does not make sense for them
    * ... and khugepaged should never stumble over them
    
    Let's simply refuse typed pages (which includes slab) except hugetlb, and
    WARN.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: David Hildenbrand <[email protected]>
    Reviewed-by: Zi Yan <[email protected]>
    Reviewed-by: Lorenzo Stoakes <[email protected]>
    Reviewed-by: Harry Yoo <[email protected]>
    Cc: Alistair Popple <[email protected]>
    Cc: Al Viro <[email protected]>
    Cc: Arnd Bergmann <[email protected]>
    Cc: Brendan Jackman <[email protected]>
    Cc: Byungchul Park <[email protected]>
    Cc: Chengming Zhou <[email protected]>
    Cc: Christian Brauner <[email protected]>
    Cc: Christophe Leroy <[email protected]>
    Cc: Eugenio Pé rez <[email protected]>
    Cc: Greg Kroah-Hartman <[email protected]>
    Cc: Gregory Price <[email protected]>
    Cc: "Huang, Ying" <[email protected]>
    Cc: Jan Kara <[email protected]>
    Cc: Jason Gunthorpe <[email protected]>
    Cc: Jason Wang <[email protected]>
    Cc: Jerrin Shaji George <[email protected]>
    Cc: Johannes Weiner <[email protected]>
    Cc: John Hubbard <[email protected]>
    Cc: Jonathan Corbet <[email protected]>
    Cc: Joshua Hahn <[email protected]>
    Cc: Liam Howlett <[email protected]>
    Cc: Madhavan Srinivasan <[email protected]>
    Cc: Mathew Brost <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Miaohe Lin <[email protected]>
    Cc: Michael Ellerman <[email protected]>
    Cc: "Michael S. Tsirkin" <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Mike Rapoport <[email protected]>
    Cc: Minchan Kim <[email protected]>
    Cc: Naoya Horiguchi <[email protected]>
    Cc: Nicholas Piggin <[email protected]>
    Cc: Oscar Salvador <[email protected]>
    Cc: Peter Xu <[email protected]>
    Cc: Qi Zheng <[email protected]>
    Cc: Rakie Kim <[email protected]>
    Cc: Rik van Riel <[email protected]>
    Cc: Sergey Senozhatsky <[email protected]>
    Cc: Shakeel Butt <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: Xuan Zhuo <[email protected]>
    Cc: xu xin <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Stable-dep-of: f183663901f2 ("mm: consider non-anon swap cache folios in folio_expected_ref_count()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mmc: sdhci-esdhc-imx: add alternate ARCH_S32 dependency to Kconfig [+ + +]
Author: Jared Kangas <[email protected]>
Date:   Fri Dec 12 07:03:17 2025 -0800

    mmc: sdhci-esdhc-imx: add alternate ARCH_S32 dependency to Kconfig
    
    commit d3ecb12e2e04ce53c95f933c462f2d8b150b965b upstream.
    
    MMC_SDHCI_ESDHC_IMX requires ARCH_MXC despite also being used on
    ARCH_S32, which results in unmet dependencies when compiling strictly
    for ARCH_S32. Resolve this by adding ARCH_S32 as an alternative to
    ARCH_MXC in the driver's dependencies.
    
    Fixes: 5c4f00627c9a ("mmc: sdhci-esdhc-imx: add NXP S32G2 support")
    Cc: [email protected]
    Signed-off-by: Jared Kangas <[email protected]>
    Reviewed-by: Haibo Chen <[email protected]>
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mmc: sdhci-msm: Avoid early clock doubling during HS400 transition [+ + +]
Author: Sarthak Garg <[email protected]>
Date:   Fri Nov 14 13:58:24 2025 +0530

    mmc: sdhci-msm: Avoid early clock doubling during HS400 transition
    
    commit b1f856b1727c2eaa4be2c6d7cd7a8ed052bbeb87 upstream.
    
    According to the hardware programming guide, the clock frequency must
    remain below 52MHz during the transition to HS400 mode.
    
    However,in the current implementation, the timing is set to HS400 (a
    DDR mode) before adjusting the clock. This causes the clock to double
    prematurely to 104MHz during the transition phase, violating the
    specification and potentially resulting in CRC errors or CMD timeouts.
    
    This change ensures that clock doubling is avoided during intermediate
    transitions and is applied only when the card requires a 200MHz clock
    for HS400 operation.
    
    Signed-off-by: Sarthak Garg <[email protected]>
    Reviewed-by: Bjorn Andersson <[email protected]>
    Acked-by: Adrian Hunter <[email protected]>
    Cc: [email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mptcp: avoid deadlock on fallback while reinjecting [+ + +]
Author: Paolo Abeni <[email protected]>
Date:   Tue Dec 30 08:20:05 2025 -0500

    mptcp: avoid deadlock on fallback while reinjecting
    
    [ Upstream commit ffb8c27b0539dd90262d1021488e7817fae57c42 ]
    
    Jakub reported an MPTCP deadlock at fallback time:
    
     WARNING: possible recursive locking detected
     6.18.0-rc7-virtme #1 Not tainted
     --------------------------------------------
     mptcp_connect/20858 is trying to acquire lock:
     ff1100001da18b60 (&msk->fallback_lock){+.-.}-{3:3}, at: __mptcp_try_fallback+0xd8/0x280
    
     but task is already holding lock:
     ff1100001da18b60 (&msk->fallback_lock){+.-.}-{3:3}, at: __mptcp_retrans+0x352/0xaa0
    
     other info that might help us debug this:
      Possible unsafe locking scenario:
    
            CPU0
            ----
       lock(&msk->fallback_lock);
       lock(&msk->fallback_lock);
    
      *** DEADLOCK ***
    
      May be due to missing lock nesting notation
    
     3 locks held by mptcp_connect/20858:
      #0: ff1100001da18290 (sk_lock-AF_INET){+.+.}-{0:0}, at: mptcp_sendmsg+0x114/0x1bc0
      #1: ff1100001db40fd0 (k-sk_lock-AF_INET#2){+.+.}-{0:0}, at: __mptcp_retrans+0x2cb/0xaa0
      #2: ff1100001da18b60 (&msk->fallback_lock){+.-.}-{3:3}, at: __mptcp_retrans+0x352/0xaa0
    
     stack backtrace:
     CPU: 0 UID: 0 PID: 20858 Comm: mptcp_connect Not tainted 6.18.0-rc7-virtme #1 PREEMPT(full)
     Hardware name: Bochs, BIOS Bochs 01/01/2011
     Call Trace:
      <TASK>
      dump_stack_lvl+0x6f/0xa0
      print_deadlock_bug.cold+0xc0/0xcd
      validate_chain+0x2ff/0x5f0
      __lock_acquire+0x34c/0x740
      lock_acquire.part.0+0xbc/0x260
      _raw_spin_lock_bh+0x38/0x50
      __mptcp_try_fallback+0xd8/0x280
      mptcp_sendmsg_frag+0x16c2/0x3050
      __mptcp_retrans+0x421/0xaa0
      mptcp_release_cb+0x5aa/0xa70
      release_sock+0xab/0x1d0
      mptcp_sendmsg+0xd5b/0x1bc0
      sock_write_iter+0x281/0x4d0
      new_sync_write+0x3c5/0x6f0
      vfs_write+0x65e/0xbb0
      ksys_write+0x17e/0x200
      do_syscall_64+0xbb/0xfd0
      entry_SYSCALL_64_after_hwframe+0x4b/0x53
     RIP: 0033:0x7fa5627cbc5e
     Code: 4d 89 d8 e8 14 bd 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:00007fff1fe14700 EFLAGS: 00000202 ORIG_RAX: 0000000000000001
     RAX: ffffffffffffffda RBX: 0000000000000005 RCX: 00007fa5627cbc5e
     RDX: 0000000000001f9c RSI: 00007fff1fe16984 RDI: 0000000000000005
     RBP: 00007fff1fe14710 R08: 0000000000000000 R09: 0000000000000000
     R10: 0000000000000000 R11: 0000000000000202 R12: 00007fff1fe16920
     R13: 0000000000002000 R14: 0000000000001f9c R15: 0000000000001f9c
    
    The packet scheduler could attempt a reinjection after receiving an
    MP_FAIL and before the infinite map has been transmitted, causing a
    deadlock since MPTCP needs to do the reinjection atomically from WRT
    fallback.
    
    Address the issue explicitly avoiding the reinjection in the critical
    scenario. Note that this is the only fallback critical section that
    could potentially send packets and hit the double-lock.
    
    Reported-by: Jakub Kicinski <[email protected]>
    Closes: https://netdev-ctrl.bots.linux.dev/logs/vmksft/mptcp-dbg/results/412720/1-mptcp-join-sh/stderr
    Fixes: f8a1d9b18c5e ("mptcp: make fallback action and fallback decision atomic")
    Cc: [email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Reviewed-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/20251205-net-mptcp-misc-fixes-6-19-rc1-v1-4-9e4781a6c1b8@kernel.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: fallback earlier on simult connection [+ + +]
Author: Paolo Abeni <[email protected]>
Date:   Tue Jan 6 12:58:52 2026 -0500

    mptcp: fallback earlier on simult connection
    
    [ Upstream commit 71154bbe49423128c1c8577b6576de1ed6836830 ]
    
    Syzkaller reports a simult-connect race leading to inconsistent fallback
    status:
    
      WARNING: CPU: 3 PID: 33 at net/mptcp/subflow.c:1515 subflow_data_ready+0x40b/0x7c0 net/mptcp/subflow.c:1515
      Modules linked in:
      CPU: 3 UID: 0 PID: 33 Comm: ksoftirqd/3 Not tainted syzkaller #0 PREEMPT(full)
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014
      RIP: 0010:subflow_data_ready+0x40b/0x7c0 net/mptcp/subflow.c:1515
      Code: 89 ee e8 78 61 3c f6 40 84 ed 75 21 e8 8e 66 3c f6 44 89 fe bf 07 00 00 00 e8 c1 61 3c f6 41 83 ff 07 74 09 e8 76 66 3c f6 90 <0f> 0b 90 e8 6d 66 3c f6 48 89 df e8 e5 ad ff ff 31 ff 89 c5 89 c6
      RSP: 0018:ffffc900006cf338 EFLAGS: 00010246
      RAX: 0000000000000000 RBX: ffff888031acd100 RCX: ffffffff8b7f2abf
      RDX: ffff88801e6ea440 RSI: ffffffff8b7f2aca RDI: 0000000000000005
      RBP: 0000000000000000 R08: 0000000000000005 R09: 0000000000000007
      R10: 0000000000000004 R11: 0000000000002c10 R12: ffff88802ba69900
      R13: 1ffff920000d9e67 R14: ffff888046f81800 R15: 0000000000000004
      FS:  0000000000000000(0000) GS:ffff8880d69bc000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 0000560fc0ca1670 CR3: 0000000032c3a000 CR4: 0000000000352ef0
      Call Trace:
       <TASK>
       tcp_data_queue+0x13b0/0x4f90 net/ipv4/tcp_input.c:5197
       tcp_rcv_state_process+0xfdf/0x4ec0 net/ipv4/tcp_input.c:6922
       tcp_v6_do_rcv+0x492/0x1740 net/ipv6/tcp_ipv6.c:1672
       tcp_v6_rcv+0x2976/0x41e0 net/ipv6/tcp_ipv6.c:1918
       ip6_protocol_deliver_rcu+0x188/0x1520 net/ipv6/ip6_input.c:438
       ip6_input_finish+0x1e4/0x4b0 net/ipv6/ip6_input.c:489
       NF_HOOK include/linux/netfilter.h:318 [inline]
       NF_HOOK include/linux/netfilter.h:312 [inline]
       ip6_input+0x105/0x2f0 net/ipv6/ip6_input.c:500
       dst_input include/net/dst.h:471 [inline]
       ip6_rcv_finish net/ipv6/ip6_input.c:79 [inline]
       NF_HOOK include/linux/netfilter.h:318 [inline]
       NF_HOOK include/linux/netfilter.h:312 [inline]
       ipv6_rcv+0x264/0x650 net/ipv6/ip6_input.c:311
       __netif_receive_skb_one_core+0x12d/0x1e0 net/core/dev.c:5979
       __netif_receive_skb+0x1d/0x160 net/core/dev.c:6092
       process_backlog+0x442/0x15e0 net/core/dev.c:6444
       __napi_poll.constprop.0+0xba/0x550 net/core/dev.c:7494
       napi_poll net/core/dev.c:7557 [inline]
       net_rx_action+0xa9f/0xfe0 net/core/dev.c:7684
       handle_softirqs+0x216/0x8e0 kernel/softirq.c:579
       run_ksoftirqd kernel/softirq.c:968 [inline]
       run_ksoftirqd+0x3a/0x60 kernel/softirq.c:960
       smpboot_thread_fn+0x3f7/0xae0 kernel/smpboot.c:160
       kthread+0x3c2/0x780 kernel/kthread.c:463
       ret_from_fork+0x5d7/0x6f0 arch/x86/kernel/process.c:148
       ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:245
       </TASK>
    
    The TCP subflow can process the simult-connect syn-ack packet after
    transitioning to TCP_FIN1 state, bypassing the MPTCP fallback check,
    as the sk_state_change() callback is not invoked for * -> FIN_WAIT1
    transitions.
    
    That will move the msk socket to an inconsistent status and the next
    incoming data will hit the reported splat.
    
    Close the race moving the simult-fallback check at the earliest possible
    stage - that is at syn-ack generation time.
    
    About the fixes tags: [2] was supposed to also fix this issue introduced
    by [3]. [1] is required as a dependence: it was not explicitly marked as
    a fix, but it is one and it has already been backported before [3]. In
    other words, this commit should be backported up to [3], including [2]
    and [1] if that's not already there.
    
    Fixes: 23e89e8ee7be ("tcp: Don't drop SYN+ACK for simultaneous connect().") [1]
    Fixes: 4fd19a307016 ("mptcp: fix inconsistent state on fastopen race") [2]
    Fixes: 1e777f39b4d7 ("mptcp: add MSG_FASTOPEN sendmsg flag support") [3]
    Cc: [email protected]
    Reported-by: [email protected]
    Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/586
    Signed-off-by: Paolo Abeni <[email protected]>
    Reviewed-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/20251212-net-mptcp-subflow_data_ready-warn-v1-1-d1f9fd1c36c8@kernel.org
    Signed-off-by: Paolo Abeni <[email protected]>
    [ adapted mptcp_try_fallback() call from two arguments to one argument ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: Initialise rcv_mss before calling tcp_send_active_reset() in mptcp_do_fastclose(). [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Mon Dec 8 08:00:54 2025 -0500

    mptcp: Initialise rcv_mss before calling tcp_send_active_reset() in mptcp_do_fastclose().
    
    [ Upstream commit f07f4ea53e22429c84b20832fa098b5ecc0d4e35 ]
    
    syzbot reported divide-by-zero in __tcp_select_window() by
    MPTCP socket. [0]
    
    We had a similar issue for the bare TCP and fixed in commit
    499350a5a6e7 ("tcp: initialize rcv_mss to TCP_MIN_MSS instead
    of 0").
    
    Let's apply the same fix to mptcp_do_fastclose().
    
    [0]:
    Oops: divide error: 0000 [#1] SMP KASAN PTI
    CPU: 0 UID: 0 PID: 6068 Comm: syz.0.17 Not tainted syzkaller #0 PREEMPT(full)
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/25/2025
    RIP: 0010:__tcp_select_window+0x824/0x1320 net/ipv4/tcp_output.c:3336
    Code: ff ff ff 44 89 f1 d3 e0 89 c1 f7 d1 41 01 cc 41 21 c4 e9 a9 00 00 00 e8 ca 49 01 f8 e9 9c 00 00 00 e8 c0 49 01 f8 44 89 e0 99 <f7> 7c 24 1c 41 29 d4 48 bb 00 00 00 00 00 fc ff df e9 80 00 00 00
    RSP: 0018:ffffc90003017640 EFLAGS: 00010293
    RAX: 0000000000000000 RBX: 0000000000000000 RCX: ffff88807b469e40
    RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
    RBP: ffffc90003017730 R08: ffff888033268143 R09: 1ffff1100664d028
    R10: dffffc0000000000 R11: ffffed100664d029 R12: 0000000000000000
    R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
    FS:  000055557faa0500(0000) GS:ffff888126135000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007f64a1912ff8 CR3: 0000000072122000 CR4: 00000000003526f0
    Call Trace:
     <TASK>
     tcp_select_window net/ipv4/tcp_output.c:281 [inline]
     __tcp_transmit_skb+0xbc7/0x3aa0 net/ipv4/tcp_output.c:1568
     tcp_transmit_skb net/ipv4/tcp_output.c:1649 [inline]
     tcp_send_active_reset+0x2d1/0x5b0 net/ipv4/tcp_output.c:3836
     mptcp_do_fastclose+0x27e/0x380 net/mptcp/protocol.c:2793
     mptcp_disconnect+0x238/0x710 net/mptcp/protocol.c:3253
     mptcp_sendmsg_fastopen+0x2f8/0x580 net/mptcp/protocol.c:1776
     mptcp_sendmsg+0x1774/0x1980 net/mptcp/protocol.c:1855
     sock_sendmsg_nosec net/socket.c:727 [inline]
     __sock_sendmsg+0xe5/0x270 net/socket.c:742
     __sys_sendto+0x3bd/0x520 net/socket.c:2244
     __do_sys_sendto net/socket.c:2251 [inline]
     __se_sys_sendto net/socket.c:2247 [inline]
     __x64_sys_sendto+0xde/0x100 net/socket.c:2247
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xfa/0xfa0 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7f66e998f749
    Code: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 a8 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007ffff9acedb8 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
    RAX: ffffffffffffffda RBX: 00007f66e9be5fa0 RCX: 00007f66e998f749
    RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000003
    RBP: 00007ffff9acee10 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000001
    R13: 00007f66e9be5fa0 R14: 00007f66e9be5fa0 R15: 0000000000000006
     </TASK>
    
    Fixes: ae155060247b ("mptcp: fix duplicate reset on fastclose")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Matthieu Baerts (NGI0) <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: pm: ignore unknown endpoint flags [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Tue Dec 30 08:48:42 2025 -0500

    mptcp: pm: ignore unknown endpoint flags
    
    [ Upstream commit 0ace3297a7301911e52d8195cb1006414897c859 ]
    
    Before this patch, the kernel was saving any flags set by the userspace,
    even unknown ones. This doesn't cause critical issues because the kernel
    is only looking at specific ones. But on the other hand, endpoints dumps
    could tell the userspace some recent flags seem to be supported on older
    kernel versions.
    
    Instead, ignore all unknown flags when parsing them. By doing that, the
    userspace can continue to set unsupported flags, but it has a way to
    verify what is supported by the kernel.
    
    Note that it sounds better to continue accepting unsupported flags not
    to change the behaviour, but also that eases things on the userspace
    side by adding "optional" endpoint types only supported by newer kernel
    versions without having to deal with the different kernel versions.
    
    A note for the backports: there will be conflicts in mptcp.h on older
    versions not having the mentioned flags, the new line should still be
    added last, and the '5' needs to be adapted to have the same value as
    the last entry.
    
    Fixes: 01cacb00b35c ("mptcp: add netlink-based PM")
    Cc: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/20251205-net-mptcp-misc-fixes-6-19-rc1-v1-1-9e4781a6c1b8@kernel.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ GENMASK(5, 0) => GENMASK(4, 0) + context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mt76: mt7615: Fix memory leak in mt7615_mcu_wtbl_sta_add() [+ + +]
Author: Zilin Guan <[email protected]>
Date:   Thu Nov 13 06:24:15 2025 +0000

    mt76: mt7615: Fix memory leak in mt7615_mcu_wtbl_sta_add()
    
    [ Upstream commit 53d1548612670aa8b5d89745116cc33d9d172863 ]
    
    In mt7615_mcu_wtbl_sta_add(), an skb sskb is allocated. If the
    subsequent call to mt76_connac_mcu_alloc_wtbl_req() fails, the function
    returns an error without freeing sskb, leading to a memory leak.
    
    Fix this by calling dev_kfree_skb() on sskb in the error handling path
    to ensure it is properly released.
    
    Fixes: 99c457d902cf9 ("mt76: mt7615: move mt7615_mcu_set_bmc to mt7615_mcu_ops")
    Signed-off-by: Zilin Guan <[email protected]>
    Acked-by: Lorenzo Bianconi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Felix Fietkau <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mtd: lpddr_cmds: fix signed shifts in lpddr_cmds [+ + +]
Author: Ivan Stepchenko <[email protected]>
Date:   Fri Nov 21 14:54:46 2025 +0300

    mtd: lpddr_cmds: fix signed shifts in lpddr_cmds
    
    [ Upstream commit c909fec69f84b39e63876c69b9df2c178c6b76ba ]
    
    There are several places where a value of type 'int' is shifted by
    lpddr->chipshift. lpddr->chipshift is derived from QINFO geometry and
    might reach 31 when QINFO reports a 2 GiB size - the maximum supported by
    LPDDR(1) compliant chips. This may cause unexpected sign-extensions when
    casting the integer value to the type of 'unsigned long'.
    
    Use '1UL << lpddr->chipshift' and cast 'j' to unsigned long before
    shifting so the computation is performed at the destination width.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: c68264711ca6 ("[MTD] LPDDR Command set driver")
    Signed-off-by: Ivan Stepchenko <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mtd: rawnand: renesas: Handle devm_pm_runtime_enable() errors [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Mon Nov 24 00:35:51 2025 +0800

    mtd: rawnand: renesas: Handle devm_pm_runtime_enable() errors
    
    [ Upstream commit a3623e1ae1ed6be4d49b2ccb9996a9d2b65c1828 ]
    
    devm_pm_runtime_enable() can fail due to memory allocation failures.
    The current code ignores its return value and proceeds with
    pm_runtime_resume_and_get(), which may operate on incorrectly
    initialized runtime PM state.
    
    Check the return value of devm_pm_runtime_enable() and return the
    error code if it fails.
    
    Fixes: 6a2277a0ebe7 ("mtd: rawnand: renesas: Use runtime PM instead of the raw clock API")
    Signed-off-by: Haotian Zhang <[email protected]>
    Reviewed-by: Geert Uytterhoeven <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nbd: defer config put in recv_work [+ + +]
Author: Zheng Qixing <[email protected]>
Date:   Sat Nov 8 15:02:02 2025 +0800

    nbd: defer config put in recv_work
    
    [ Upstream commit 9517b82d8d422d426a988b213fdd45c6b417b86d ]
    
    There is one uaf issue in recv_work when running NBD_CLEAR_SOCK and
    NBD_CMD_RECONFIGURE:
      nbd_genl_connect     // conf_ref=2 (connect and recv_work A)
      nbd_open             // conf_ref=3
      recv_work A done     // conf_ref=2
      NBD_CLEAR_SOCK       // conf_ref=1
      nbd_genl_reconfigure // conf_ref=2 (trigger recv_work B)
      close nbd            // conf_ref=1
      recv_work B
        config_put         // conf_ref=0
        atomic_dec(&config->recv_threads); -> UAF
    
    Or only running NBD_CLEAR_SOCK:
      nbd_genl_connect   // conf_ref=2
      nbd_open           // conf_ref=3
      NBD_CLEAR_SOCK     // conf_ref=2
      close nbd
        nbd_release
          config_put     // conf_ref=1
      recv_work
        config_put       // conf_ref=0
        atomic_dec(&config->recv_threads); -> UAF
    
    Commit 87aac3a80af5 ("nbd: call nbd_config_put() before notifying the
    waiter") moved nbd_config_put() to run before waking up the waiter in
    recv_work, in order to ensure that nbd_start_device_ioctl() would not
    be woken up while nbd->task_recv was still uncleared.
    
    However, in nbd_start_device_ioctl(), after being woken up it explicitly
    calls flush_workqueue() to make sure all current works are finished.
    Therefore, there is no need to move the config put ahead of the wakeup.
    
    Move nbd_config_put() to the end of recv_work, so that the reference is
    held for the whole lifetime of the worker thread. This makes sure the
    config cannot be freed while recv_work is still running, even if clear
    + reconfigure interleave.
    
    In addition, we don't need to worry about recv_work dropping the last
    nbd_put (which causes deadlock):
    
    path A (netlink with NBD_CFLAG_DESTROY_ON_DISCONNECT):
      connect  // nbd_refs=1 (trigger recv_work)
      open nbd // nbd_refs=2
      NBD_CLEAR_SOCK
      close nbd
        nbd_release
          nbd_disconnect_and_put
            flush_workqueue // recv_work done
          nbd_config_put
            nbd_put // nbd_refs=1
          nbd_put // nbd_refs=0
            queue_work
    
    path B (netlink without NBD_CFLAG_DESTROY_ON_DISCONNECT):
      connect  // nbd_refs=2 (trigger recv_work)
      open nbd // nbd_refs=3
      NBD_CLEAR_SOCK // conf_refs=2
      close nbd
        nbd_release
          nbd_config_put // conf_refs=1
          nbd_put // nbd_refs=2
      recv_work done // conf_refs=0, nbd_refs=1
      rmmod // nbd_refs=0
    
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/all/[email protected]/T/
    Fixes: 87aac3a80af5 ("nbd: make the config put is called before the notifying the waiter")
    Depends-on: e2daec488c57 ("nbd: Fix hungtask when nbd_config_put")
    Signed-off-by: Zheng Qixing <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

nbd: defer config unlock in nbd_genl_connect [+ + +]
Author: Zheng Qixing <[email protected]>
Date:   Mon Nov 10 20:49:20 2025 +0800

    nbd: defer config unlock in nbd_genl_connect
    
    [ Upstream commit 1649714b930f9ea6233ce0810ba885999da3b5d4 ]
    
    There is one use-after-free warning when running NBD_CMD_CONNECT and
    NBD_CLEAR_SOCK:
    
    nbd_genl_connect
      nbd_alloc_and_init_config // config_refs=1
      nbd_start_device // config_refs=2
      set NBD_RT_HAS_CONFIG_REF                     open nbd // config_refs=3
      recv_work done // config_refs=2
                                                    NBD_CLEAR_SOCK // config_refs=1
                                                    close nbd // config_refs=0
      refcount_inc -> uaf
    
    ------------[ cut here ]------------
    refcount_t: addition on 0; use-after-free.
    WARNING: CPU: 24 PID: 1014 at lib/refcount.c:25 refcount_warn_saturate+0x12e/0x290
     nbd_genl_connect+0x16d0/0x1ab0
     genl_family_rcv_msg_doit+0x1f3/0x310
     genl_rcv_msg+0x44a/0x790
    
    The issue can be easily reproduced by adding a small delay before
    refcount_inc(&nbd->config_refs) in nbd_genl_connect():
    
            mutex_unlock(&nbd->config_lock);
            if (!ret) {
                    set_bit(NBD_RT_HAS_CONFIG_REF, &config->runtime_flags);
    +               printk("before sleep\n");
    +               mdelay(5 * 1000);
    +               printk("after sleep\n");
                    refcount_inc(&nbd->config_refs);
                    nbd_connect_reply(info, nbd->index);
            }
    
    Fixes: e46c7287b1c2 ("nbd: add a basic netlink interface")
    Signed-off-by: Zheng Qixing <[email protected]>
    Reviewed-by: Yu Kuai <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/ethtool/ioctl: remove if n_stats checks from ethtool_get_phy_stats [+ + +]
Author: Daniil Tatianin <[email protected]>
Date:   Mon Dec 26 14:48:24 2022 +0300

    net/ethtool/ioctl: remove if n_stats checks from ethtool_get_phy_stats
    
    [ Upstream commit fd4778581d61d8848b532f8cdc9b325138748437 ]
    
    Now that we always early return if we don't have any stats we can remove
    these checks as they're no longer necessary.
    
    Signed-off-by: Daniil Tatianin <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 7b07be1ff1cb ("ethtool: Avoid overflowing userspace buffer on stats query")
    Signed-off-by: Sasha Levin <[email protected]>

net/ethtool/ioctl: split ethtool_get_phy_stats into multiple helpers [+ + +]
Author: Daniil Tatianin <[email protected]>
Date:   Mon Dec 26 14:48:25 2022 +0300

    net/ethtool/ioctl: split ethtool_get_phy_stats into multiple helpers
    
    [ Upstream commit 201ed315f9676809cd5b20a39206e964106d4f27 ]
    
    So that it's easier to follow and make sense of the branching and
    various conditions.
    
    Stats retrieval has been split into two separate functions
    ethtool_get_phy_stats_phydev & ethtool_get_phy_stats_ethtool.
    The former attempts to retrieve the stats using phydev & phy_ops, while
    the latter uses ethtool_ops.
    
    Actual n_stats validation & array allocation has been moved into a new
    ethtool_vzalloc_stats_array helper.
    
    This also fixes a potential NULL dereference of
    ops->get_ethtool_phy_stats where it was getting called in an else branch
    unconditionally without making sure it was actually present.
    
    Found by Linux Verification Center (linuxtesting.org) with the SVACE
    static analysis tool.
    
    Signed-off-by: Daniil Tatianin <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 7b07be1ff1cb ("ethtool: Avoid overflowing userspace buffer on stats query")
    Signed-off-by: Sasha Levin <[email protected]>

 
net/hsr: fix NULL pointer dereference in prp_get_untagged_frame() [+ + +]
Author: Shaurya Rane <[email protected]>
Date:   Sat Nov 29 15:07:18 2025 +0530

    net/hsr: fix NULL pointer dereference in prp_get_untagged_frame()
    
    commit 188e0fa5a679570ea35474575e724d8211423d17 upstream.
    
    prp_get_untagged_frame() calls __pskb_copy() to create frame->skb_std
    but doesn't check if the allocation failed. If __pskb_copy() returns
    NULL, skb_clone() is called with a NULL pointer, causing a crash:
    
    Oops: general protection fault, probably for non-canonical address 0xdffffc000000000f: 0000 [#1] SMP KASAN NOPTI
    KASAN: null-ptr-deref in range [0x0000000000000078-0x000000000000007f]
    CPU: 0 UID: 0 PID: 5625 Comm: syz.1.18 Not tainted syzkaller #0 PREEMPT(full)
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014
    RIP: 0010:skb_clone+0xd7/0x3a0 net/core/skbuff.c:2041
    Code: 03 42 80 3c 20 00 74 08 4c 89 f7 e8 23 29 05 f9 49 83 3e 00 0f 85 a0 01 00 00 e8 94 dd 9d f8 48 8d 6b 7e 49 89 ee 49 c1 ee 03 <43> 0f b6 04 26 84 c0 0f 85 d1 01 00 00 44 0f b6 7d 00 41 83 e7 0c
    RSP: 0018:ffffc9000d00f200 EFLAGS: 00010207
    RAX: ffffffff892235a1 RBX: 0000000000000000 RCX: ffff88803372a480
    RDX: 0000000000000000 RSI: 0000000000000820 RDI: 0000000000000000
    RBP: 000000000000007e R08: ffffffff8f7d0f77 R09: 1ffffffff1efa1ee
    R10: dffffc0000000000 R11: fffffbfff1efa1ef R12: dffffc0000000000
    R13: 0000000000000820 R14: 000000000000000f R15: ffff88805144cc00
    FS:  0000555557f6d500(0000) GS:ffff88808d72f000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000555581d35808 CR3: 000000005040e000 CR4: 0000000000352ef0
    Call Trace:
     <TASK>
     hsr_forward_do net/hsr/hsr_forward.c:-1 [inline]
     hsr_forward_skb+0x1013/0x2860 net/hsr/hsr_forward.c:741
     hsr_handle_frame+0x6ce/0xa70 net/hsr/hsr_slave.c:84
     __netif_receive_skb_core+0x10b9/0x4380 net/core/dev.c:5966
     __netif_receive_skb_one_core net/core/dev.c:6077 [inline]
     __netif_receive_skb+0x72/0x380 net/core/dev.c:6192
     netif_receive_skb_internal net/core/dev.c:6278 [inline]
     netif_receive_skb+0x1cb/0x790 net/core/dev.c:6337
     tun_rx_batched+0x1b9/0x730 drivers/net/tun.c:1485
     tun_get_user+0x2b65/0x3e90 drivers/net/tun.c:1953
     tun_chr_write_iter+0x113/0x200 drivers/net/tun.c:1999
     new_sync_write fs/read_write.c:593 [inline]
     vfs_write+0x5c9/0xb30 fs/read_write.c:686
     ksys_write+0x145/0x250 fs/read_write.c:738
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xfa/0xfa0 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7f0449f8e1ff
    Code: 89 54 24 18 48 89 74 24 10 89 7c 24 08 e8 f9 92 02 00 48 8b 54 24 18 48 8b 74 24 10 41 89 c0 8b 7c 24 08 b8 01 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 31 44 89 c7 48 89 44 24 08 e8 4c 93 02 00 48
    RSP: 002b:00007ffd7ad94c90 EFLAGS: 00000293 ORIG_RAX: 0000000000000001
    RAX: ffffffffffffffda RBX: 00007f044a1e5fa0 RCX: 00007f0449f8e1ff
    RDX: 000000000000003e RSI: 0000200000000500 RDI: 00000000000000c8
    RBP: 00007ffd7ad94d20 R08: 0000000000000000 R09: 0000000000000000
    R10: 000000000000003e R11: 0000000000000293 R12: 0000000000000001
    R13: 00007f044a1e5fa0 R14: 00007f044a1e5fa0 R15: 0000000000000003
     </TASK>
    
    Add a NULL check immediately after __pskb_copy() to handle allocation
    failures gracefully.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=2fa344348a579b779e05
    Fixes: f266a683a480 ("net/hsr: Better frame dispatch")
    Cc: [email protected]
    Signed-off-by: Shaurya Rane <[email protected]>
    Reviewed-by: Felix Maurer <[email protected]>
    Tested-by: Felix Maurer <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net/mlx5: Create a new profile for SFs [+ + +]
Author: Parav Pandit <[email protected]>
Date:   Thu Apr 23 08:27:59 2020 -0500

    net/mlx5: Create a new profile for SFs
    
    [ Upstream commit 9df839a711aee437390b16ee39cf0b5c1620be6a ]
    
    Create a new profile for SFs in order to disable the command cache.
    Each function command cache consumes ~500KB of memory, when using a
    large number of SFs this savings is notable on memory constarined
    systems.
    
    Use a new profile to provide for future differences between SFs and PFs.
    
    The mr_cache not used for non-PF functions, so it is excluded from the
    new profile.
    
    Signed-off-by: Parav Pandit <[email protected]>
    Reviewed-by: Bodong Wang <[email protected]>
    Signed-off-by: Saeed Mahameed <[email protected]>
    Stable-dep-of: 5846a365fc64 ("net/mlx5: Drain firmware reset in shutdown callback")
    Signed-off-by: Sasha Levin <[email protected]>

net/mlx5: Drain firmware reset in shutdown callback [+ + +]
Author: Moshe Shemesh <[email protected]>
Date:   Tue Dec 9 14:56:10 2025 +0200

    net/mlx5: Drain firmware reset in shutdown callback
    
    [ Upstream commit 5846a365fc6476b02d6766963cf0985520f0385f ]
    
    Invoke drain_fw_reset() in the shutdown callback to ensure all
    firmware reset handling is completed before shutdown proceeds.
    
    Fixes: 16d42d313350 ("net/mlx5: Drain fw_reset when removing device")
    Signed-off-by: Moshe Shemesh <[email protected]>
    Reviewed-by: Shay Drori <[email protected]>
    Signed-off-by: Tariq Toukan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/mlx5: fw reset, clear reset requested on drain_fw_reset [+ + +]
Author: Moshe Shemesh <[email protected]>
Date:   Tue Dec 9 14:56:09 2025 +0200

    net/mlx5: fw reset, clear reset requested on drain_fw_reset
    
    [ Upstream commit 89a898d63f6f588acf5c104c65c94a38b68c69a6 ]
    
    drain_fw_reset() waits for ongoing firmware reset events and blocks new
    event handling, but does not clear the reset requested flag, and may
    keep sync reset polling.
    
    To fix it, call mlx5_sync_reset_clear_reset_requested() to clear the
    flag, stop sync reset polling, and resume health polling, ensuring
    health issues are still detected after the firmware reset drain.
    
    Fixes: 16d42d313350 ("net/mlx5: Drain fw_reset when removing device")
    Signed-off-by: Moshe Shemesh <[email protected]>
    Reviewed-by: Shay Drori <[email protected]>
    Signed-off-by: Tariq Toukan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/mlx5: fw_tracer, Add support for unrecognized string [+ + +]
Author: Shay Drory <[email protected]>
Date:   Tue Jan 17 15:24:19 2023 +0200

    net/mlx5: fw_tracer, Add support for unrecognized string
    
    [ Upstream commit f7133135235dbd11e7cb5fe62fe5d05ce5e82eeb ]
    
    In case FW is publishing a string which isn't found in the driver's
    string DBs, keep the string as raw data.
    
    Signed-off-by: Shay Drory <[email protected]>
    Reviewed-by: Moshe Shemesh <[email protected]>
    Signed-off-by: Saeed Mahameed <[email protected]>
    Stable-dep-of: b35966042d20 ("net/mlx5: fw_tracer, Validate format string parameters")
    Signed-off-by: Sasha Levin <[email protected]>

net/mlx5: fw_tracer, Handle escaped percent properly [+ + +]
Author: Shay Drory <[email protected]>
Date:   Tue Dec 9 14:56:12 2025 +0200

    net/mlx5: fw_tracer, Handle escaped percent properly
    
    [ Upstream commit c0289f67f7d6a0dfba0e92cfe661a5c70c8c6e92 ]
    
    The firmware tracer's format string validation and parameter counting
    did not properly handle escaped percent signs (%%). This caused
    fw_tracer to count more parameters when trace format strings contained
    literal percent characters.
    
    To fix it, allow %% to pass string validation and skip %% sequences when
    counting parameters since they represent literal percent signs rather
    than format specifiers.
    
    Fixes: 70dd6fdb8987 ("net/mlx5: FW tracer, parse traces and kernel tracing support")
    Signed-off-by: Shay Drory <[email protected]>
    Reported-by: Breno Leitao <[email protected]>
    Reviewed-by: Moshe Shemesh <[email protected]>
    Closes: https://lore.kernel.org/netdev/hanz6rzrb2bqbplryjrakvkbmv4y5jlmtthnvi3thg5slqvelp@t3s3erottr6s/
    Signed-off-by: Tariq Toukan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/mlx5: fw_tracer, Validate format string parameters [+ + +]
Author: Shay Drory <[email protected]>
Date:   Tue Dec 9 14:56:11 2025 +0200

    net/mlx5: fw_tracer, Validate format string parameters
    
    [ Upstream commit b35966042d20b14e2d83330049f77deec5229749 ]
    
    Add validation for format string parameters in the firmware tracer to
    prevent potential security vulnerabilities and crashes from malformed
    format strings received from firmware.
    
    The firmware tracer receives format strings from the device firmware and
    uses them to format trace messages. Without proper validation, bad
    firmware could provide format strings with invalid format specifiers
    (e.g., %s, %p, %n) that could lead to crashes, or other undefined
    behavior.
    
    Add mlx5_tracer_validate_params() to validate that all format specifiers
    in trace strings are limited to safe integer/hex formats (%x, %d, %i,
    %u, %llx, %lx, etc.). Reject strings containing other format types that
    could be used to access arbitrary memory or cause crashes.
    Invalid format strings are added to the trace output for visibility with
    "BAD_FORMAT: " prefix.
    
    Fixes: 70dd6fdb8987 ("net/mlx5: FW tracer, parse traces and kernel tracing support")
    Signed-off-by: Shay Drory <[email protected]>
    Reviewed-by: Moshe Shemesh <[email protected]>
    Reported-by: Breno Leitao <[email protected]>
    Closes: https://lore.kernel.org/netdev/hanz6rzrb2bqbplryjrakvkbmv4y5jlmtthnvi3thg5slqvelp@t3s3erottr6s/
    Signed-off-by: Tariq Toukan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/sched: ets: Always remove class from active list before deleting in ets_qdisc_change [+ + +]
Author: Jamal Hadi Salim <[email protected]>
Date:   Fri Nov 28 10:19:19 2025 -0500

    net/sched: ets: Always remove class from active list before deleting in ets_qdisc_change
    
    [ Upstream commit ce052b9402e461a9aded599f5b47e76bc727f7de ]
    
    [email protected] says:
    
    The vulnerability is a race condition between `ets_qdisc_dequeue` and
    `ets_qdisc_change`.  It leads to UAF on `struct Qdisc` object.
    Attacker requires the capability to create new user and network namespace
    in order to trigger the bug.
    See my additional commentary at the end of the analysis.
    
    Analysis:
    
    static int ets_qdisc_change(struct Qdisc *sch, struct nlattr *opt,
                              struct netlink_ext_ack *extack)
    {
    ...
    
          // (1) this lock is preventing .change handler (`ets_qdisc_change`)
          //to race with .dequeue handler (`ets_qdisc_dequeue`)
          sch_tree_lock(sch);
    
          for (i = nbands; i < oldbands; i++) {
                  if (i >= q->nstrict && q->classes[i].qdisc->q.qlen)
                          list_del_init(&q->classes[i].alist);
                  qdisc_purge_queue(q->classes[i].qdisc);
          }
    
          WRITE_ONCE(q->nbands, nbands);
          for (i = nstrict; i < q->nstrict; i++) {
                  if (q->classes[i].qdisc->q.qlen) {
                          // (2) the class is added to the q->active
                          list_add_tail(&q->classes[i].alist, &q->active);
                          q->classes[i].deficit = quanta[i];
                  }
          }
          WRITE_ONCE(q->nstrict, nstrict);
          memcpy(q->prio2band, priomap, sizeof(priomap));
    
          for (i = 0; i < q->nbands; i++)
                  WRITE_ONCE(q->classes[i].quantum, quanta[i]);
    
          for (i = oldbands; i < q->nbands; i++) {
                  q->classes[i].qdisc = queues[i];
                  if (q->classes[i].qdisc != &noop_qdisc)
                          qdisc_hash_add(q->classes[i].qdisc, true);
          }
    
          // (3) the qdisc is unlocked, now dequeue can be called in parallel
          // to the rest of .change handler
          sch_tree_unlock(sch);
    
          ets_offload_change(sch);
          for (i = q->nbands; i < oldbands; i++) {
                  // (4) we're reducing the refcount for our class's qdisc and
                  //  freeing it
                  qdisc_put(q->classes[i].qdisc);
                  // (5) If we call .dequeue between (4) and (5), we will have
                  // a strong UAF and we can control RIP
                  q->classes[i].qdisc = NULL;
                  WRITE_ONCE(q->classes[i].quantum, 0);
                  q->classes[i].deficit = 0;
                  gnet_stats_basic_sync_init(&q->classes[i].bstats);
                  memset(&q->classes[i].qstats, 0, sizeof(q->classes[i].qstats));
          }
          return 0;
    }
    
    Comment:
    This happens because some of the classes have their qdiscs assigned to
    NULL, but remain in the active list. This commit fixes this issue by always
    removing the class from the active list before deleting and freeing its
    associated qdisc
    
    Reproducer Steps
    (trimmed version of what was sent by [email protected])
    
    ```
    DEV="${DEV:-lo}"
    ROOT_HANDLE="${ROOT_HANDLE:-1:}"
    BAND2_HANDLE="${BAND2_HANDLE:-20:}"   # child under 1:2
    PING_BYTES="${PING_BYTES:-48}"
    PING_COUNT="${PING_COUNT:-200000}"
    PING_DST="${PING_DST:-127.0.0.1}"
    
    SLOW_TBF_RATE="${SLOW_TBF_RATE:-8bit}"
    SLOW_TBF_BURST="${SLOW_TBF_BURST:-100b}"
    SLOW_TBF_LAT="${SLOW_TBF_LAT:-1s}"
    
    cleanup() {
      tc qdisc del dev "$DEV" root 2>/dev/null
    }
    trap cleanup EXIT
    
    ip link set "$DEV" up
    
    tc qdisc del dev "$DEV" root 2>/dev/null || true
    
    tc qdisc add dev "$DEV" root handle "$ROOT_HANDLE" ets bands 2 strict 2
    
    tc qdisc add dev "$DEV" parent 1:2 handle "$BAND2_HANDLE" \
      tbf rate "$SLOW_TBF_RATE" burst "$SLOW_TBF_BURST" latency "$SLOW_TBF_LAT"
    
    tc filter add dev "$DEV" parent 1: protocol all prio 1 u32 match u32 0 0 flowid 1:2
    tc -s qdisc ls dev $DEV
    
    ping -I "$DEV" -f -c "$PING_COUNT" -s "$PING_BYTES" -W 0.001 "$PING_DST" \
      >/dev/null 2>&1 &
    tc qdisc change dev "$DEV" root handle "$ROOT_HANDLE" ets bands 2 strict 0
    tc qdisc change dev "$DEV" root handle "$ROOT_HANDLE" ets bands 2 strict 2
    tc -s qdisc ls dev $DEV
    tc qdisc del dev "$DEV" parent 1:2 || true
    tc -s qdisc ls dev $DEV
    tc qdisc change dev "$DEV" root handle "$ROOT_HANDLE" ets bands 1 strict 1
    ```
    
    KASAN report
    ```
    ==================================================================
    BUG: KASAN: slab-use-after-free in ets_qdisc_dequeue+0x1071/0x11b0 kernel/net/sched/sch_ets.c:481
    Read of size 8 at addr ffff8880502fc018 by task ping/12308
    >
    CPU: 0 UID: 0 PID: 12308 Comm: ping Not tainted 6.18.0-rc4-dirty #1 PREEMPT(full)
    Hardware name: QEMU Ubuntu 25.04 PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    Call Trace:
     <IRQ>
     __dump_stack kernel/lib/dump_stack.c:94
     dump_stack_lvl+0x100/0x190 kernel/lib/dump_stack.c:120
     print_address_description kernel/mm/kasan/report.c:378
     print_report+0x156/0x4c9 kernel/mm/kasan/report.c:482
     kasan_report+0xdf/0x110 kernel/mm/kasan/report.c:595
     ets_qdisc_dequeue+0x1071/0x11b0 kernel/net/sched/sch_ets.c:481
     dequeue_skb kernel/net/sched/sch_generic.c:294
     qdisc_restart kernel/net/sched/sch_generic.c:399
     __qdisc_run+0x1c9/0x1b00 kernel/net/sched/sch_generic.c:417
     __dev_xmit_skb kernel/net/core/dev.c:4221
     __dev_queue_xmit+0x2848/0x4410 kernel/net/core/dev.c:4729
     dev_queue_xmit kernel/./include/linux/netdevice.h:3365
    [...]
    
    Allocated by task 17115:
     kasan_save_stack+0x30/0x50 kernel/mm/kasan/common.c:56
     kasan_save_track+0x14/0x30 kernel/mm/kasan/common.c:77
     poison_kmalloc_redzone kernel/mm/kasan/common.c:400
     __kasan_kmalloc+0xaa/0xb0 kernel/mm/kasan/common.c:417
     kasan_kmalloc kernel/./include/linux/kasan.h:262
     __do_kmalloc_node kernel/mm/slub.c:5642
     __kmalloc_node_noprof+0x34e/0x990 kernel/mm/slub.c:5648
     kmalloc_node_noprof kernel/./include/linux/slab.h:987
     qdisc_alloc+0xb8/0xc30 kernel/net/sched/sch_generic.c:950
     qdisc_create_dflt+0x93/0x490 kernel/net/sched/sch_generic.c:1012
     ets_class_graft+0x4fd/0x800 kernel/net/sched/sch_ets.c:261
     qdisc_graft+0x3e4/0x1780 kernel/net/sched/sch_api.c:1196
    [...]
    
    Freed by task 9905:
     kasan_save_stack+0x30/0x50 kernel/mm/kasan/common.c:56
     kasan_save_track+0x14/0x30 kernel/mm/kasan/common.c:77
     __kasan_save_free_info+0x3b/0x70 kernel/mm/kasan/generic.c:587
     kasan_save_free_info kernel/mm/kasan/kasan.h:406
     poison_slab_object kernel/mm/kasan/common.c:252
     __kasan_slab_free+0x5f/0x80 kernel/mm/kasan/common.c:284
     kasan_slab_free kernel/./include/linux/kasan.h:234
     slab_free_hook kernel/mm/slub.c:2539
     slab_free kernel/mm/slub.c:6630
     kfree+0x144/0x700 kernel/mm/slub.c:6837
     rcu_do_batch kernel/kernel/rcu/tree.c:2605
     rcu_core+0x7c0/0x1500 kernel/kernel/rcu/tree.c:2861
     handle_softirqs+0x1ea/0x8a0 kernel/kernel/softirq.c:622
     __do_softirq kernel/kernel/softirq.c:656
    [...]
    
    Commentary:
    
    1. Maher Azzouzi working with Trend Micro Zero Day Initiative was reported as
    the person who found the issue. I requested to get a proper email to add to the
    reported-by tag but got no response. For this reason i will credit the person
    i exchanged emails with i.e [email protected]
    
    2. Neither i nor Victor who did a much more thorough testing was able to
    reproduce a UAF with the PoC or other approaches we tried. We were both able to
    reproduce a null ptr deref. After exchange with [email protected]
    they sent a small change to be made to the code to add an extra delay which
    was able to simulate the UAF. i.e, this:
       qdisc_put(q->classes[i].qdisc);
       mdelay(90);
       q->classes[i].qdisc = NULL;
    
    I was informed by Thomas Gleixner([email protected]) that adding delays was
    acceptable approach for demonstrating the bug, quote:
    "Adding such delays is common exploit validation practice"
    The equivalent delay could happen "by virt scheduling the vCPU out, SMIs,
    NMIs, PREEMPT_RT enabled kernel"
    
    3. I asked the OP to test and report back but got no response and after a
    few days gave up and proceeded to submit this fix.
    
    Fixes: de6d25924c2a ("net/sched: sch_ets: don't peek at classes beyond 'nbands'")
    Reported-by: [email protected]
    Tested-by: Victor Nogueira <[email protected]>
    Signed-off-by: Jamal Hadi Salim <[email protected]>
    Reviewed-by: Davide Caratti <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: ets: Remove drr class from the active list if it changes to strict [+ + +]
Author: Victor Nogueira <[email protected]>
Date:   Mon Dec 8 16:01:24 2025 -0300

    net/sched: ets: Remove drr class from the active list if it changes to strict
    
    [ Upstream commit b1e125ae425aba9b45252e933ca8df52a843ec70 ]
    
    Whenever a user issues an ets qdisc change command, transforming a
    drr class into a strict one, the ets code isn't checking whether that
    class was in the active list and removing it. This means that, if a
    user changes a strict class (which was in the active list) back to a drr
    one, that class will be added twice to the active list [1].
    
    Doing so with the following commands:
    
    tc qdisc add dev lo root handle 1: ets bands 2 strict 1
    tc qdisc add dev lo parent 1:2 handle 20: \
        tbf rate 8bit burst 100b latency 1s
    tc filter add dev lo parent 1: basic classid 1:2
    ping -c1 -W0.01 -s 56 127.0.0.1
    tc qdisc change dev lo root handle 1: ets bands 2 strict 2
    tc qdisc change dev lo root handle 1: ets bands 2 strict 1
    ping -c1 -W0.01 -s 56 127.0.0.1
    
    Will trigger the following splat with list debug turned on:
    
    [   59.279014][  T365] ------------[ cut here ]------------
    [   59.279452][  T365] list_add double add: new=ffff88801d60e350, prev=ffff88801d60e350, next=ffff88801d60e2c0.
    [   59.280153][  T365] WARNING: CPU: 3 PID: 365 at lib/list_debug.c:35 __list_add_valid_or_report+0x17f/0x220
    [   59.280860][  T365] Modules linked in:
    [   59.281165][  T365] CPU: 3 UID: 0 PID: 365 Comm: tc Not tainted 6.18.0-rc7-00105-g7e9f13163c13-dirty #239 PREEMPT(voluntary)
    [   59.281977][  T365] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
    [   59.282391][  T365] RIP: 0010:__list_add_valid_or_report+0x17f/0x220
    [   59.282842][  T365] Code: 89 c6 e8 d4 b7 0d ff 90 0f 0b 90 90 31 c0 e9 31 ff ff ff 90 48 c7 c7 e0 a0 22 9f 48 89 f2 48 89 c1 4c 89 c6 e8 b2 b7 0d ff 90 <0f> 0b 90 90 31 c0 e9 0f ff ff ff 48 89 f7 48 89 44 24 10 4c 89 44
    ...
    [   59.288812][  T365] Call Trace:
    [   59.289056][  T365]  <TASK>
    [   59.289224][  T365]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   59.289546][  T365]  ets_qdisc_change+0xd2b/0x1e80
    [   59.289891][  T365]  ? __lock_acquire+0x7e7/0x1be0
    [   59.290223][  T365]  ? __pfx_ets_qdisc_change+0x10/0x10
    [   59.290546][  T365]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   59.290898][  T365]  ? __mutex_trylock_common+0xda/0x240
    [   59.291228][  T365]  ? __pfx___mutex_trylock_common+0x10/0x10
    [   59.291655][  T365]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   59.291993][  T365]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   59.292313][  T365]  ? trace_contention_end+0xc8/0x110
    [   59.292656][  T365]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   59.293022][  T365]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   59.293351][  T365]  tc_modify_qdisc+0x63a/0x1cf0
    
    Fix this by always checking and removing an ets class from the active list
    when changing it to strict.
    
    [1] https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/tree/net/sched/sch_ets.c?id=ce052b9402e461a9aded599f5b47e76bc727f7de#n663
    
    Fixes: cd9b50adc6bb9 ("net/sched: ets: fix crash when flipping from 'strict' to 'quantum'")
    Acked-by: Jamal Hadi Salim <[email protected]>
    Signed-off-by: Victor Nogueira <[email protected]>
    Reviewed-by: Petr Machata <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: sch_cake: Fix incorrect qlen reduction in cake_drop [+ + +]
Author: Xiang Mei <[email protected]>
Date:   Thu Nov 27 17:14:14 2025 -0700

    net/sched: sch_cake: Fix incorrect qlen reduction in cake_drop
    
    [ Upstream commit 9fefc78f7f02d71810776fdeb119a05a946a27cc ]
    
    In cake_drop(), qdisc_tree_reduce_backlog() is used to update the qlen
    and backlog of the qdisc hierarchy. Its caller, cake_enqueue(), assumes
    that the parent qdisc will enqueue the current packet. However, this
    assumption breaks when cake_enqueue() returns NET_XMIT_CN: the parent
    qdisc stops enqueuing current packet, leaving the tree qlen/backlog
    accounting inconsistent. This mismatch can lead to a NULL dereference
    (e.g., when the parent Qdisc is qfq_qdisc).
    
    This patch computes the qlen/backlog delta in a more robust way by
    observing the difference before and after the series of cake_drop()
    calls, and then compensates the qdisc tree accounting if cake_enqueue()
    returns NET_XMIT_CN.
    
    To ensure correct compensation when ACK thinning is enabled, a new
    variable is introduced to keep qlen unchanged.
    
    Fixes: 15de71d06a40 ("net/sched: Make cake_enqueue return NET_XMIT_CN when past buffer_limit")
    Signed-off-by: Xiang Mei <[email protected]>
    Reviewed-by: Toke Høiland-Jørgensen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net: bridge: Describe @tunnel_hash member in net_bridge_vlan_group struct [+ + +]
Author: Bagas Sanjaya <[email protected]>
Date:   Thu Dec 18 11:29:37 2025 +0700

    net: bridge: Describe @tunnel_hash member in net_bridge_vlan_group struct
    
    [ Upstream commit f79f9b7ace1713e4b83888c385f5f55519dfb687 ]
    
    Sphinx reports kernel-doc warning:
    
    WARNING: ./net/bridge/br_private.h:267 struct member 'tunnel_hash' not described in 'net_bridge_vlan_group'
    
    Fix it by describing @tunnel_hash member.
    
    Fixes: efa5356b0d9753 ("bridge: per vlan dst_metadata netlink support")
    Signed-off-by: Bagas Sanjaya <[email protected]>
    Acked-by: Nikolay Aleksandrov <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: b53: skip multicast entries for fdb_dump() [+ + +]
Author: Jonas Gorski <[email protected]>
Date:   Wed Dec 17 21:57:56 2025 +0100

    net: dsa: b53: skip multicast entries for fdb_dump()
    
    [ Upstream commit d42bce414d1c5c0b536758466a1f63ac358e613c ]
    
    port_fdb_dump() is supposed to only add fdb entries, but we iterate over
    the full ARL table, which also includes multicast entries.
    
    So check if the entry is a multicast entry before passing it on to the
    callback().
    
    Additionally, the port of those entries is a bitmask, not a port number,
    so any included entries would have even be for the wrong port.
    
    Fixes: 1da6df85c6fb ("net: dsa: b53: Implement ARL add/del/dump operations")
    Signed-off-by: Jonas Gorski <[email protected]>
    Reviewed-by: Florian Fainelli <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: sja1105: fix kasan out-of-bounds warning in sja1105_table_delete_entry() [+ + +]
Author: Vladimir Oltean <[email protected]>
Date:   Fri Dec 5 13:54:48 2025 +0800

    net: dsa: sja1105: fix kasan out-of-bounds warning in sja1105_table_delete_entry()
    
    [ Upstream commit 5f2b28b79d2d1946ee36ad8b3dc0066f73c90481 ]
    
    There are actually 2 problems:
    - deleting the last element doesn't require the memmove of elements
      [i + 1, end) over it. Actually, element i+1 is out of bounds.
    - The memmove itself should move size - i - 1 elements, because the last
      element is out of bounds.
    
    The out-of-bounds element still remains out of bounds after being
    accessed, so the problem is only that we touch it, not that it becomes
    in active use. But I suppose it can lead to issues if the out-of-bounds
    element is part of an unmapped page.
    
    Fixes: 6666cebc5e30 ("net: dsa: sja1105: Add support for VLAN operations")
    Signed-off-by: Vladimir Oltean <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Chen Yu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: ethtool: fix the error condition in ethtool_get_phy_stats_ethtool() [+ + +]
Author: Su Hui <[email protected]>
Date:   Wed Jun 5 11:47:43 2024 +0800

    net: ethtool: fix the error condition in ethtool_get_phy_stats_ethtool()
    
    commit 0dcc53abf58d572d34c5313de85f607cd33fc691 upstream.
    
    Clang static checker (scan-build) warning:
    net/ethtool/ioctl.c:line 2233, column 2
    Called function pointer is null (null dereference).
    
    Return '-EOPNOTSUPP' when 'ops->get_ethtool_phy_stats' is NULL to fix
    this typo error.
    
    Fixes: 201ed315f967 ("net/ethtool/ioctl: split ethtool_get_phy_stats into multiple helpers")
    Signed-off-by: Su Hui <[email protected]>
    Reviewed-by: Przemek Kitszel <[email protected]>
    Reviewed-by: Hariprasad Kelam <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: hns3: add VLAN id validation before using [+ + +]
Author: Jian Shen <[email protected]>
Date:   Thu Dec 11 10:37:37 2025 +0800

    net: hns3: add VLAN id validation before using
    
    [ Upstream commit 6ef935e65902bfed53980ad2754b06a284ea8ac1 ]
    
    Currently, the VLAN id may be used without validation when
    receive a VLAN configuration mailbox from VF. The length of
    vlan_del_fail_bmap is BITS_TO_LONGS(VLAN_N_VID). It may cause
    out-of-bounds memory access once the VLAN id is bigger than
    or equal to VLAN_N_VID.
    
    Therefore, VLAN id needs to be checked to ensure it is within
    the range of VLAN_N_VID.
    
    Fixes: fe4144d47eef ("net: hns3: sync VLAN filter entries when kill VLAN ID failed")
    Signed-off-by: Jian Shen <[email protected]>
    Signed-off-by: Jijie Shao <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: hns3: using the num_tqps in the vf driver to apply for resources [+ + +]
Author: Jian Shen <[email protected]>
Date:   Thu Dec 11 10:37:35 2025 +0800

    net: hns3: using the num_tqps in the vf driver to apply for resources
    
    [ Upstream commit c2a16269742e176fccdd0ef9c016a233491a49ad ]
    
    Currently, hdev->htqp is allocated using hdev->num_tqps, and kinfo->tqp
    is allocated using kinfo->num_tqps. However, kinfo->num_tqps is set to
    min(new_tqps, hdev->num_tqps);  Therefore, kinfo->num_tqps may be smaller
    than hdev->num_tqps, which causes some hdev->htqp[i] to remain
    uninitialized in hclgevf_knic_setup().
    
    Thus, this patch allocates hdev->htqp and kinfo->tqp using hdev->num_tqps,
    ensuring that the lengths of hdev->htqp and kinfo->tqp are consistent
    and that all elements are properly initialized.
    
    Fixes: e2cb1dec9779 ("net: hns3: Add HNS3 VF HCL(Hardware Compatibility Layer) Support")
    Signed-off-by: Jian Shen <[email protected]>
    Signed-off-by: Jijie Shao <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: hns3: using the num_tqps to check whether tqp_index is out of range when vf get ring info from mbx [+ + +]
Author: Jian Shen <[email protected]>
Date:   Thu Dec 11 10:37:36 2025 +0800

    net: hns3: using the num_tqps to check whether tqp_index is out of range when vf get ring info from mbx
    
    [ Upstream commit d180c11aa8a6fa735f9ac2c72c61364a9afc2ba7 ]
    
    Currently, rss_size = num_tqps / tc_num. If tc_num is 1, then num_tqps
    equals rss_size. However, if the tc_num is greater than 1, then rss_size
    will be less than num_tqps, causing the tqp_index check for subsequent TCs
    using rss_size to always fail.
    
    This patch uses the num_tqps to check whether tqp_index is out of range,
    instead of rss_size.
    
    Fixes: 326334aad024 ("net: hns3: add a check for tqp_index in hclge_get_ring_chain_from_mbx()")
    Signed-off-by: Jian Shen <[email protected]>
    Signed-off-by: Jijie Shao <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: lan743x: Allocate rings outside ZONE_DMA [+ + +]
Author: Thangaraj Samynathan <[email protected]>
Date:   Tue Apr 15 10:15:09 2025 +0530

    net: lan743x: Allocate rings outside ZONE_DMA
    
    commit 8a8f3f4991761a70834fe6719d09e9fd338a766e upstream.
    
    The driver allocates ring elements using GFP_DMA flags. There is
    no dependency from LAN743x hardware on memory allocation should be
    in DMA_ZONE. Hence modifying the flags to use only GFP_ATOMIC. This
    is consistent with other callers of lan743x_rx_init_ring_element().
    
    Reported-by: Zhang, Liyin(CN) <[email protected]>
    Signed-off-by: Thangaraj Samynathan <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: macb: Relocate mog_init_rings() callback from macb_mac_link_up() to macb_open() [+ + +]
Author: Xiaolei Wang <[email protected]>
Date:   Mon Dec 22 09:56:24 2025 +0800

    net: macb: Relocate mog_init_rings() callback from macb_mac_link_up() to macb_open()
    
    commit 99537d5c476cada9cf75aef9fa75579a31faadb9 upstream.
    
    In the non-RT kernel, local_bh_disable() merely disables preemption,
    whereas it maps to an actual spin lock in the RT kernel. Consequently,
    when attempting to refill RX buffers via netdev_alloc_skb() in
    macb_mac_link_up(), a deadlock scenario arises as follows:
    
       WARNING: possible circular locking dependency detected
       6.18.0-08691-g2061f18ad76e #39 Not tainted
       ------------------------------------------------------
       kworker/0:0/8 is trying to acquire lock:
       ffff00080369bbe0 (&bp->lock){+.+.}-{3:3}, at: macb_start_xmit+0x808/0xb7c
    
       but task is already holding lock:
       ffff000803698e58 (&queue->tx_ptr_lock){+...}-{3:3}, at: macb_start_xmit
       +0x148/0xb7c
    
       which lock already depends on the new lock.
    
       the existing dependency chain (in reverse order) is:
    
       -> #3 (&queue->tx_ptr_lock){+...}-{3:3}:
              rt_spin_lock+0x50/0x1f0
              macb_start_xmit+0x148/0xb7c
              dev_hard_start_xmit+0x94/0x284
              sch_direct_xmit+0x8c/0x37c
              __dev_queue_xmit+0x708/0x1120
              neigh_resolve_output+0x148/0x28c
              ip6_finish_output2+0x2c0/0xb2c
              __ip6_finish_output+0x114/0x308
              ip6_output+0xc4/0x4a4
              mld_sendpack+0x220/0x68c
              mld_ifc_work+0x2a8/0x4f4
              process_one_work+0x20c/0x5f8
              worker_thread+0x1b0/0x35c
              kthread+0x144/0x200
              ret_from_fork+0x10/0x20
    
       -> #2 (_xmit_ETHER#2){+...}-{3:3}:
              rt_spin_lock+0x50/0x1f0
              sch_direct_xmit+0x11c/0x37c
              __dev_queue_xmit+0x708/0x1120
              neigh_resolve_output+0x148/0x28c
              ip6_finish_output2+0x2c0/0xb2c
              __ip6_finish_output+0x114/0x308
              ip6_output+0xc4/0x4a4
              mld_sendpack+0x220/0x68c
              mld_ifc_work+0x2a8/0x4f4
              process_one_work+0x20c/0x5f8
              worker_thread+0x1b0/0x35c
              kthread+0x144/0x200
              ret_from_fork+0x10/0x20
    
       -> #1 ((softirq_ctrl.lock)){+.+.}-{3:3}:
              lock_release+0x250/0x348
              __local_bh_enable_ip+0x7c/0x240
              __netdev_alloc_skb+0x1b4/0x1d8
              gem_rx_refill+0xdc/0x240
              gem_init_rings+0xb4/0x108
              macb_mac_link_up+0x9c/0x2b4
              phylink_resolve+0x170/0x614
              process_one_work+0x20c/0x5f8
              worker_thread+0x1b0/0x35c
              kthread+0x144/0x200
              ret_from_fork+0x10/0x20
    
       -> #0 (&bp->lock){+.+.}-{3:3}:
              __lock_acquire+0x15a8/0x2084
              lock_acquire+0x1cc/0x350
              rt_spin_lock+0x50/0x1f0
              macb_start_xmit+0x808/0xb7c
              dev_hard_start_xmit+0x94/0x284
              sch_direct_xmit+0x8c/0x37c
              __dev_queue_xmit+0x708/0x1120
              neigh_resolve_output+0x148/0x28c
              ip6_finish_output2+0x2c0/0xb2c
              __ip6_finish_output+0x114/0x308
              ip6_output+0xc4/0x4a4
              mld_sendpack+0x220/0x68c
              mld_ifc_work+0x2a8/0x4f4
              process_one_work+0x20c/0x5f8
              worker_thread+0x1b0/0x35c
              kthread+0x144/0x200
              ret_from_fork+0x10/0x20
    
       other info that might help us debug this:
    
       Chain exists of:
         &bp->lock --> _xmit_ETHER#2 --> &queue->tx_ptr_lock
    
        Possible unsafe locking scenario:
    
              CPU0                    CPU1
              ----                    ----
         lock(&queue->tx_ptr_lock);
                                      lock(_xmit_ETHER#2);
                                      lock(&queue->tx_ptr_lock);
         lock(&bp->lock);
    
        *** DEADLOCK ***
    
       Call trace:
        show_stack+0x18/0x24 (C)
        dump_stack_lvl+0xa0/0xf0
        dump_stack+0x18/0x24
        print_circular_bug+0x28c/0x370
        check_noncircular+0x198/0x1ac
        __lock_acquire+0x15a8/0x2084
        lock_acquire+0x1cc/0x350
        rt_spin_lock+0x50/0x1f0
        macb_start_xmit+0x808/0xb7c
        dev_hard_start_xmit+0x94/0x284
        sch_direct_xmit+0x8c/0x37c
        __dev_queue_xmit+0x708/0x1120
        neigh_resolve_output+0x148/0x28c
        ip6_finish_output2+0x2c0/0xb2c
        __ip6_finish_output+0x114/0x308
        ip6_output+0xc4/0x4a4
        mld_sendpack+0x220/0x68c
        mld_ifc_work+0x2a8/0x4f4
        process_one_work+0x20c/0x5f8
        worker_thread+0x1b0/0x35c
        kthread+0x144/0x200
        ret_from_fork+0x10/0x20
    
    Notably, invoking the mog_init_rings() callback upon link establishment
    is unnecessary. Instead, we can exclusively call mog_init_rings() within
    the ndo_open() callback. This adjustment resolves the deadlock issue.
    Furthermore, since MACB_CAPS_MACB_IS_EMAC cases do not use mog_init_rings()
    when opening the network interface via at91ether_open(), moving
    mog_init_rings() to macb_open() also eliminates the MACB_CAPS_MACB_IS_EMAC
    check.
    
    Fixes: 633e98a711ac ("net: macb: use resolved link config in mac_link_up()")
    Cc: [email protected]
    Suggested-by: Kevin Hao <[email protected]>
    Signed-off-by: Xiaolei Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: mdio: aspeed: add dummy read to avoid read-after-write issue [+ + +]
Author: Jacky Chou <[email protected]>
Date:   Thu Dec 11 14:24:58 2025 +0800

    net: mdio: aspeed: add dummy read to avoid read-after-write issue
    
    [ Upstream commit d1a1a4bade4b20c0858d0b2f81d2611de055f675 ]
    
    The Aspeed MDIO controller may return incorrect data when a read operation
    follows immediately after a write. Due to a controller bug, the subsequent
    read can latch stale data, causing the polling logic to terminate earlier
    than expected.
    
    To work around this hardware issue, insert a dummy read after each write
    operation. This ensures that the next actual read returns the correct
    data and prevents premature polling exit.
    
    This workaround has been verified to stabilize MDIO transactions on
    affected Aspeed platforms.
    
    Fixes: f160e99462c6 ("net: phy: Add mdio-aspeed")
    Signed-off-by: Jacky Chou <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Link: https://patch.msgid.link/20251211-aspeed_mdio_add_dummy_read-v3-1-382868869004@aspeedtech.com
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: nfc: fix deadlock between nfc_unregister_device and rfkill_fop_write [+ + +]
Author: Deepanshu Kartikey <[email protected]>
Date:   Thu Dec 18 06:53:54 2025 +0530

    net: nfc: fix deadlock between nfc_unregister_device and rfkill_fop_write
    
    commit 1ab526d97a57e44d26fadcc0e9adeb9c0c0182f5 upstream.
    
    A deadlock can occur between nfc_unregister_device() and rfkill_fop_write()
    due to lock ordering inversion between device_lock and rfkill_global_mutex.
    
    The problematic lock order is:
    
    Thread A (rfkill_fop_write):
      rfkill_fop_write()
        mutex_lock(&rfkill_global_mutex)
          rfkill_set_block()
            nfc_rfkill_set_block()
              nfc_dev_down()
                device_lock(&dev->dev)    <- waits for device_lock
    
    Thread B (nfc_unregister_device):
      nfc_unregister_device()
        device_lock(&dev->dev)
          rfkill_unregister()
            mutex_lock(&rfkill_global_mutex)  <- waits for rfkill_global_mutex
    
    This creates a classic ABBA deadlock scenario.
    
    Fix this by moving rfkill_unregister() and rfkill_destroy() outside the
    device_lock critical section. Store the rfkill pointer in a local variable
    before releasing the lock, then call rfkill_unregister() after releasing
    device_lock.
    
    This change is safe because rfkill_fop_write() holds rfkill_global_mutex
    while calling the rfkill callbacks, and rfkill_unregister() also acquires
    rfkill_global_mutex before cleanup. Therefore, rfkill_unregister() will
    wait for any ongoing callback to complete before proceeding, and
    device_del() is only called after rfkill_unregister() returns, preventing
    any use-after-free.
    
    The similar lock ordering in nfc_register_device() (device_lock ->
    rfkill_global_mutex via rfkill_register) is safe because during
    registration the device is not yet in rfkill_list, so no concurrent
    rfkill operations can occur on this device.
    
    Fixes: 3e3b5dfcd16a ("NFC: reorder the logic in nfc_{un,}register_device")
    Cc: [email protected]
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=4ef89409a235d804c6c2
    Link: https://lore.kernel.org/all/[email protected]/T/ [v1]
    Signed-off-by: Deepanshu Kartikey <[email protected]>
    Reviewed-by: Krzysztof Kozlowski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: openvswitch: Avoid needlessly taking the RTNL on vport destroy [+ + +]
Author: Toke Høiland-Jørgensen <[email protected]>
Date:   Thu Dec 11 12:50:05 2025 +0100

    net: openvswitch: Avoid needlessly taking the RTNL on vport destroy
    
    [ Upstream commit 5498227676303e3ffa9a3a46214af96bc3e81314 ]
    
    The openvswitch teardown code will immediately call
    ovs_netdev_detach_dev() in response to a NETDEV_UNREGISTER notification.
    It will then start the dp_notify_work workqueue, which will later end up
    calling the vport destroy() callback. This callback takes the RTNL to do
    another ovs_netdev_detach_port(), which in this case is unnecessary.
    This causes extra pressure on the RTNL, in some cases leading to
    "unregister_netdevice: waiting for XX to become free" warnings on
    teardown.
    
    We can straight-forwardly avoid the extra RTNL lock acquisition by
    checking the device flags before taking the lock, and skip the locking
    altogether if the IFF_OVS_DATAPATH flag has already been unset.
    
    Fixes: b07c26511e94 ("openvswitch: fix vport-netdev unregister")
    Tested-by: Adrian Moreno <[email protected]>
    Signed-off-by: Toke Høiland-Jørgensen <[email protected]>
    Acked-by: Eelco Chaudron <[email protected]>
    Acked-by: Aaron Conole <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: openvswitch: fix middle attribute validation in push_nsh() action [+ + +]
Author: Ilya Maximets <[email protected]>
Date:   Thu Dec 4 11:53:32 2025 +0100

    net: openvswitch: fix middle attribute validation in push_nsh() action
    
    [ Upstream commit 5ace7ef87f059d68b5f50837ef3e8a1a4870c36e ]
    
    The push_nsh() action structure looks like this:
    
     OVS_ACTION_ATTR_PUSH_NSH(OVS_KEY_ATTR_NSH(OVS_NSH_KEY_ATTR_BASE,...))
    
    The outermost OVS_ACTION_ATTR_PUSH_NSH attribute is OK'ed by the
    nla_for_each_nested() inside __ovs_nla_copy_actions().  The innermost
    OVS_NSH_KEY_ATTR_BASE/MD1/MD2 are OK'ed by the nla_for_each_nested()
    inside nsh_key_put_from_nlattr().  But nothing checks if the attribute
    in the middle is OK.  We don't even check that this attribute is the
    OVS_KEY_ATTR_NSH.  We just do a double unwrap with a pair of nla_data()
    calls - first time directly while calling validate_push_nsh() and the
    second time as part of the nla_for_each_nested() macro, which isn't
    safe, potentially causing invalid memory access if the size of this
    attribute is incorrect.  The failure may not be noticed during
    validation due to larger netlink buffer, but cause trouble later during
    action execution where the buffer is allocated exactly to the size:
    
     BUG: KASAN: slab-out-of-bounds in nsh_hdr_from_nlattr+0x1dd/0x6a0 [openvswitch]
     Read of size 184 at addr ffff88816459a634 by task a.out/22624
    
     CPU: 8 UID: 0 PID: 22624 6.18.0-rc7+ #115 PREEMPT(voluntary)
     Call Trace:
      <TASK>
      dump_stack_lvl+0x51/0x70
      print_address_description.constprop.0+0x2c/0x390
      kasan_report+0xdd/0x110
      kasan_check_range+0x35/0x1b0
      __asan_memcpy+0x20/0x60
      nsh_hdr_from_nlattr+0x1dd/0x6a0 [openvswitch]
      push_nsh+0x82/0x120 [openvswitch]
      do_execute_actions+0x1405/0x2840 [openvswitch]
      ovs_execute_actions+0xd5/0x3b0 [openvswitch]
      ovs_packet_cmd_execute+0x949/0xdb0 [openvswitch]
      genl_family_rcv_msg_doit+0x1d6/0x2b0
      genl_family_rcv_msg+0x336/0x580
      genl_rcv_msg+0x9f/0x130
      netlink_rcv_skb+0x11f/0x370
      genl_rcv+0x24/0x40
      netlink_unicast+0x73e/0xaa0
      netlink_sendmsg+0x744/0xbf0
      __sys_sendto+0x3d6/0x450
      do_syscall_64+0x79/0x2c0
      entry_SYSCALL_64_after_hwframe+0x76/0x7e
      </TASK>
    
    Let's add some checks that the attribute is properly sized and it's
    the only one attribute inside the action.  Technically, there is no
    real reason for OVS_KEY_ATTR_NSH to be there, as we know that we're
    pushing an NSH header already, it just creates extra nesting, but
    that's how uAPI works today.  So, keeping as it is.
    
    Fixes: b2d0f5d5dc53 ("openvswitch: enable NSH support")
    Reported-by: Junvy Yang <[email protected]>
    Signed-off-by: Ilya Maximets <[email protected]>
    Acked-by: Eelco Chaudron [email protected]
    Reviewed-by: Aaron Conole <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: phy: adin1100: Fix software power-down ready condition [+ + +]
Author: Alexander Dahl <[email protected]>
Date:   Wed Nov 19 13:47:36 2025 +0100

    net: phy: adin1100: Fix software power-down ready condition
    
    [ Upstream commit bccaf1fe08f2c9f96f6bc38391d41e67f6bf38e3 ]
    
    Value CRSM_SFT_PD written to Software Power-Down Control Register
    (CRSM_SFT_PD_CNTRL) is 0x01 and therefor different to value
    CRSM_SFT_PD_RDY (0x02) read from System Status Register (CRSM_STAT) for
    confirmation powerdown has been reached.
    
    The condition could have only worked when disabling powerdown
    (both 0x00), but never when enabling it (0x01 != 0x02).
    
    Result is a timeout, like so:
    
        $ ifdown eth0
        macb f802c000.ethernet eth0: Link is Down
        ADIN1100 f802c000.ethernet-ffffffff:01: adin_set_powerdown_mode failed: -110
        ADIN1100 f802c000.ethernet-ffffffff:01: adin_set_powerdown_mode failed: -110
    
    Fixes: 7eaf9132996a ("net: phy: adin1100: Add initial support for ADIN1100 industrial PHY")
    Signed-off-by: Alexander Dahl <[email protected]>
    Reviewed-by: Russell King (Oracle) <[email protected]>
    Acked-by: Nuno Sá <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: Remove RTNL dance for SIOCBRADDIF and SIOCBRDELIF. [+ + +]
Author: Thadeu Lima de Souza Cascardo <[email protected]>
Date:   Wed Jan 7 14:21:16 2026 -0300

    net: Remove RTNL dance for SIOCBRADDIF and SIOCBRDELIF.
    
    commit ed3ba9b6e280e14cc3148c1b226ba453f02fa76c upstream.
    
    SIOCBRDELIF is passed to dev_ioctl() first and later forwarded to
    br_ioctl_call(), which causes unnecessary RTNL dance and the splat
    below [0] under RTNL pressure.
    
    Let's say Thread A is trying to detach a device from a bridge and
    Thread B is trying to remove the bridge.
    
    In dev_ioctl(), Thread A bumps the bridge device's refcnt by
    netdev_hold() and releases RTNL because the following br_ioctl_call()
    also re-acquires RTNL.
    
    In the race window, Thread B could acquire RTNL and try to remove
    the bridge device.  Then, rtnl_unlock() by Thread B will release RTNL
    and wait for netdev_put() by Thread A.
    
    Thread A, however, must hold RTNL after the unlock in dev_ifsioc(),
    which may take long under RTNL pressure, resulting in the splat by
    Thread B.
    
      Thread A (SIOCBRDELIF)           Thread B (SIOCBRDELBR)
      ----------------------           ----------------------
      sock_ioctl                       sock_ioctl
      `- sock_do_ioctl                 `- br_ioctl_call
         `- dev_ioctl                     `- br_ioctl_stub
            |- rtnl_lock                     |
            |- dev_ifsioc                    '
            '  |- dev = __dev_get_by_name(...)
               |- netdev_hold(dev, ...)      .
           /   |- rtnl_unlock  ------.       |
           |   |- br_ioctl_call       `--->  |- rtnl_lock
      Race |   |  `- br_ioctl_stub           |- br_del_bridge
      Window   |     |                       |  |- dev = __dev_get_by_name(...)
           |   |     |  May take long        |  `- br_dev_delete(dev, ...)
           |   |     |  under RTNL pressure  |     `- unregister_netdevice_queue(dev, ...)
           |   |     |               |       `- rtnl_unlock
           \   |     |- rtnl_lock  <-'          `- netdev_run_todo
               |     |- ...                        `- netdev_run_todo
               |     `- rtnl_unlock                   |- __rtnl_unlock
               |                                      |- netdev_wait_allrefs_any
               |- netdev_put(dev, ...)  <----------------'
                                                    Wait refcnt decrement
                                                    and log splat below
    
    To avoid blocking SIOCBRDELBR unnecessarily, let's not call
    dev_ioctl() for SIOCBRADDIF and SIOCBRDELIF.
    
    In the dev_ioctl() path, we do the following:
    
      1. Copy struct ifreq by get_user_ifreq in sock_do_ioctl()
      2. Check CAP_NET_ADMIN in dev_ioctl()
      3. Call dev_load() in dev_ioctl()
      4. Fetch the master dev from ifr.ifr_name in dev_ifsioc()
    
    3. can be done by request_module() in br_ioctl_call(), so we move
    1., 2., and 4. to br_ioctl_stub().
    
    Note that 2. is also checked later in add_del_if(), but it's better
    performed before RTNL.
    
    SIOCBRADDIF and SIOCBRDELIF have been processed in dev_ioctl() since
    the pre-git era, and there seems to be no specific reason to process
    them there.
    
    [0]:
    unregister_netdevice: waiting for wpan3 to become free. Usage count = 2
    ref_tracker: wpan3@ffff8880662d8608 has 1/1 users at
         __netdev_tracker_alloc include/linux/netdevice.h:4282 [inline]
         netdev_hold include/linux/netdevice.h:4311 [inline]
         dev_ifsioc+0xc6a/0x1160 net/core/dev_ioctl.c:624
         dev_ioctl+0x255/0x10c0 net/core/dev_ioctl.c:826
         sock_do_ioctl+0x1ca/0x260 net/socket.c:1213
         sock_ioctl+0x23a/0x6c0 net/socket.c:1318
         vfs_ioctl fs/ioctl.c:51 [inline]
         __do_sys_ioctl fs/ioctl.c:906 [inline]
         __se_sys_ioctl fs/ioctl.c:892 [inline]
         __x64_sys_ioctl+0x1a4/0x210 fs/ioctl.c:892
         do_syscall_x64 arch/x86/entry/common.c:52 [inline]
         do_syscall_64+0xcb/0x250 arch/x86/entry/common.c:83
         entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Fixes: 893b19587534 ("net: bridge: fix ioctl locking")
    Reported-by: syzkaller <[email protected]>
    Reported-by: yan kang <[email protected]>
    Reported-by: yue sun <[email protected]>
    Closes: https://lore.kernel.org/netdev/SY8P300MB0421225D54EB92762AE8F0F2A1D32@SY8P300MB0421.AUSP300.PROD.OUTLOOK.COM/
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Acked-by: Stanislav Fomichev <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Acked-by: Nikolay Aleksandrov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    [cascardo: fixed conflict at dev_ifsioc]
    Signed-off-by: Thadeu Lima de Souza Cascardo <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: rose: fix invalid array index in rose_kill_by_device() [+ + +]
Author: Pwnverse <[email protected]>
Date:   Mon Dec 22 21:22:27 2025 +0000

    net: rose: fix invalid array index in rose_kill_by_device()
    
    [ Upstream commit 6595beb40fb0ec47223d3f6058ee40354694c8e4 ]
    
    rose_kill_by_device() collects sockets into a local array[] and then
    iterates over them to disconnect sockets bound to a device being brought
    down.
    
    The loop mistakenly indexes array[cnt] instead of array[i]. For cnt <
    ARRAY_SIZE(array), this reads an uninitialized entry; for cnt ==
    ARRAY_SIZE(array), it is an out-of-bounds read. Either case can lead to
    an invalid socket pointer dereference and also leaks references taken
    via sock_hold().
    
    Fix the index to use i.
    
    Fixes: 64b8bc7d5f143 ("net/rose: fix races in rose_kill_by_device()")
    Co-developed-by: Fatma Alwasmi <[email protected]>
    Signed-off-by: Fatma Alwasmi <[email protected]>
    Signed-off-by: Pwnverse <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: stmmac: dwmac4: Allow platforms to specify some DMA/MTL offsets [+ + +]
Author: Andrew Halaney <[email protected]>
Date:   Tue Apr 11 15:04:06 2023 -0500

    net: stmmac: dwmac4: Allow platforms to specify some DMA/MTL offsets
    
    [ Upstream commit 33719b57f52e5b761234373f98f55f4e036d61c9 ]
    
    Some platforms have dwmac4 implementations that have a different
    address space layout than the default, resulting in the need to define
    their own DMA/MTL offsets.
    
    Extend the functions to allow a platform driver to indicate what its
    addresses are, overriding the defaults.
    
    Signed-off-by: Andrew Halaney <[email protected]>
    Reviewed-by: Jesse Brandeburg <[email protected]>
    Tested-by: Brian Masney <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Stable-dep-of: a48e23221000 ("net: stmmac: fix the crash issue for zero copy XDP_TX action")
    Signed-off-by: Sasha Levin <[email protected]>

net: stmmac: fix ethtool per-queue statistics [+ + +]
Author: Petr Tesarik <[email protected]>
Date:   Fri Jan 5 21:16:42 2024 +0100

    net: stmmac: fix ethtool per-queue statistics
    
    commit 61921bdaa132b580b6db6858e6d7dcdb870df5fe upstream.
    
    Fix per-queue statistics for devices with more than one queue.
    
    The output data pointer is currently reset in each loop iteration,
    effectively summing all queue statistics in the first four u64 values.
    
    The summary values are not even labeled correctly. For example, if eth0 has
    2 queues, ethtool -S eth0 shows:
    
         q0_tx_pkt_n: 374 (actually tx_pkt_n over all queues)
         q0_tx_irq_n: 23  (actually tx_normal_irq_n over all queues)
         q1_tx_pkt_n: 462 (actually rx_pkt_n over all queues)
         q1_tx_irq_n: 446 (actually rx_normal_irq_n over all queues)
         q0_rx_pkt_n: 0
         q0_rx_irq_n: 0
         q1_rx_pkt_n: 0
         q1_rx_irq_n: 0
    
    Fixes: 133466c3bbe1 ("net: stmmac: use per-queue 64 bit statistics where necessary")
    Cc: [email protected]
    Signed-off-by: Petr Tesarik <[email protected]>
    Reviewed-by: Jisheng Zhang <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: stmmac: fix incorrect rxq|txq_stats reference [+ + +]
Author: Jisheng Zhang <[email protected]>
Date:   Mon Sep 18 00:53:28 2023 +0800

    net: stmmac: fix incorrect rxq|txq_stats reference
    
    commit 8070274b472e2e9f5f67a990f5e697634c415708 upstream.
    
    commit 133466c3bbe1 ("net: stmmac: use per-queue 64 bit statistics
    where necessary") caused one regression as found by Uwe, the backtrace
    looks like:
    
            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: 0 PID: 1 Comm: swapper/0 Not tainted 6.5.0-rc1-00449-g133466c3bbe1-dirty #21
            Hardware name: STM32 (Device Tree Support)
             unwind_backtrace from show_stack+0x18/0x1c
             show_stack from dump_stack_lvl+0x60/0x90
             dump_stack_lvl from register_lock_class+0x98c/0x99c
             register_lock_class from __lock_acquire+0x74/0x293c
             __lock_acquire from lock_acquire+0x134/0x398
             lock_acquire from stmmac_get_stats64+0x2ac/0x2fc
             stmmac_get_stats64 from dev_get_stats+0x44/0x130
             dev_get_stats from rtnl_fill_stats+0x38/0x120
             rtnl_fill_stats from rtnl_fill_ifinfo+0x834/0x17f4
             rtnl_fill_ifinfo from rtmsg_ifinfo_build_skb+0xc0/0x144
             rtmsg_ifinfo_build_skb from rtmsg_ifinfo+0x50/0x88
             rtmsg_ifinfo from __dev_notify_flags+0xc0/0xec
             __dev_notify_flags from dev_change_flags+0x50/0x5c
             dev_change_flags from ip_auto_config+0x2f4/0x1260
             ip_auto_config from do_one_initcall+0x70/0x35c
             do_one_initcall from kernel_init_freeable+0x2ac/0x308
             kernel_init_freeable from kernel_init+0x1c/0x138
             kernel_init from ret_from_fork+0x14/0x2c
    
    The reason is the rxq|txq_stats structures are not what expected
    because stmmac_open() -> __stmmac_open() the structure is overwritten
    by "memcpy(&priv->dma_conf, dma_conf, sizeof(*dma_conf));"
    This causes the well initialized syncp member of rxq|txq_stats is
    overwritten unexpectedly as pointed out by Johannes and Uwe.
    
    Fix this issue by moving rxq|txq_stats back to stmmac_extra_stats. For
    SMP cache friendly, we also mark stmmac_txq_stats and stmmac_rxq_stats
    as ____cacheline_aligned_in_smp.
    
    Fixes: 133466c3bbe1 ("net: stmmac: use per-queue 64 bit statistics where necessary")
    Signed-off-by: Jisheng Zhang <[email protected]>
    Reported-by: Uwe Kleine-König <[email protected]>
    Tested-by: Uwe Kleine-König <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: stmmac: fix rx limit check in stmmac_rx_zc() [+ + +]
Author: Alexey Kodanev <[email protected]>
Date:   Wed Nov 26 10:43:27 2025 +0000

    net: stmmac: fix rx limit check in stmmac_rx_zc()
    
    [ Upstream commit 8048168df56e225c94e50b04cb7b0514135d7a1c ]
    
    The extra "count >= limit" check in stmmac_rx_zc() is redundant and
    has no effect because the value of "count" doesn't change after the
    while condition at this point.
    
    However, it can change after "read_again:" label:
    
            while (count < limit) {
                ...
    
                if (count >= limit)
                    break;
        read_again:
                ...
                /* XSK pool expects RX frame 1:1 mapped to XSK buffer */
                if (likely(status & rx_not_ls)) {
                    xsk_buff_free(buf->xdp);
                    buf->xdp = NULL;
                    dirty++;
                    count++;
                    goto read_again;
                }
                ...
    
    This patch addresses the same issue previously resolved in stmmac_rx()
    by commit fa02de9e7588 ("net: stmmac: fix rx budget limit check").
    The fix is the same: move the check after the label to ensure that it
    bounds the goto loop.
    
    Fixes: bba2556efad6 ("net: stmmac: Enable RX via AF_XDP zero-copy")
    Signed-off-by: Alexey Kodanev <[email protected]>
    Reviewed-by: Russell King (Oracle) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: stmmac: fix the crash issue for zero copy XDP_TX action [+ + +]
Author: Wei Fang <[email protected]>
Date:   Thu Dec 4 15:13:32 2025 +0800

    net: stmmac: fix the crash issue for zero copy XDP_TX action
    
    [ Upstream commit a48e232210009be50591fdea8ba7c07b0f566a13 ]
    
    There is a crash issue when running zero copy XDP_TX action, the crash
    log is shown below.
    
    [  216.122464] Unable to handle kernel paging request at virtual address fffeffff80000000
    [  216.187524] Internal error: Oops: 0000000096000144 [#1]  SMP
    [  216.301694] Call trace:
    [  216.304130]  dcache_clean_poc+0x20/0x38 (P)
    [  216.308308]  __dma_sync_single_for_device+0x1bc/0x1e0
    [  216.313351]  stmmac_xdp_xmit_xdpf+0x354/0x400
    [  216.317701]  __stmmac_xdp_run_prog+0x164/0x368
    [  216.322139]  stmmac_napi_poll_rxtx+0xba8/0xf00
    [  216.326576]  __napi_poll+0x40/0x218
    [  216.408054] Kernel panic - not syncing: Oops: Fatal exception in interrupt
    
    For XDP_TX action, the xdp_buff is converted to xdp_frame by
    xdp_convert_buff_to_frame(). The memory type of the resulting xdp_frame
    depends on the memory type of the xdp_buff. For page pool based xdp_buff
    it produces xdp_frame with memory type MEM_TYPE_PAGE_POOL. For zero copy
    XSK pool based xdp_buff it produces xdp_frame with memory type
    MEM_TYPE_PAGE_ORDER0. However, stmmac_xdp_xmit_back() does not check the
    memory type and always uses the page pool type, this leads to invalid
    mappings and causes the crash. Therefore, check the xdp_buff memory type
    in stmmac_xdp_xmit_back() to fix this issue.
    
    Fixes: bba2556efad6 ("net: stmmac: Enable RX via AF_XDP zero-copy")
    Signed-off-by: Wei Fang <[email protected]>
    Reviewed-by: Hariprasad Kelam <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: stmmac: introduce wrapper for struct xdp_buff [+ + +]
Author: Song Yoong Siang <[email protected]>
Date:   Sat Apr 15 14:45:01 2023 +0800

    net: stmmac: introduce wrapper for struct xdp_buff
    
    [ Upstream commit 5b24324a907c996faf47ea3969499e04beea9c4f ]
    
    Introduce struct stmmac_xdp_buff as a preparation to support XDP Rx
    metadata via kfuncs.
    
    Signed-off-by: Song Yoong Siang <[email protected]>
    Reviewed-by: Jacob Keller <[email protected]>
    Acked-by: Jesper Dangaard Brouer <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: a48e23221000 ("net: stmmac: fix the crash issue for zero copy XDP_TX action")
    Signed-off-by: Sasha Levin <[email protected]>

net: stmmac: Pass stmmac_priv in some callbacks [+ + +]
Author: Andrew Halaney <[email protected]>
Date:   Tue Apr 11 15:04:05 2023 -0500

    net: stmmac: Pass stmmac_priv in some callbacks
    
    [ Upstream commit 1d84b487bc2d9061bd00203f571e5cb99fe0a312 ]
    
    Passing stmmac_priv to some of the callbacks allows hwif implementations
    to grab some data that platforms can customize. Adjust the callbacks
    accordingly in preparation of such a platform customization.
    
    Signed-off-by: Andrew Halaney <[email protected]>
    Reviewed-by: Jesse Brandeburg <[email protected]>
    Tested-by: Brian Masney <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Stable-dep-of: a48e23221000 ("net: stmmac: fix the crash issue for zero copy XDP_TX action")
    Signed-off-by: Sasha Levin <[email protected]>

net: stmmac: Power up SERDES after the PHY link [+ + +]
Author: Revanth Kumar Uppala <[email protected]>
Date:   Thu Dec 1 15:58:43 2022 +0000

    net: stmmac: Power up SERDES after the PHY link
    
    [ Upstream commit a46e9010124256f5bf5fc2c241a45cf1944b768e ]
    
    The Tegra MGBE ethernet controller requires that the SERDES link is
    powered-up after the PHY link is up, otherwise the link fails to
    become ready following a resume from suspend. Add a variable to indicate
    that the SERDES link must be powered-up after the PHY link.
    
    Signed-off-by: Revanth Kumar Uppala <[email protected]>
    Signed-off-by: Jon Hunter <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: a48e23221000 ("net: stmmac: fix the crash issue for zero copy XDP_TX action")
    Signed-off-by: Sasha Levin <[email protected]>

net: stmmac: Remove some unnecessary void pointers [+ + +]
Author: Andrew Halaney <[email protected]>
Date:   Tue Apr 11 15:04:04 2023 -0500

    net: stmmac: Remove some unnecessary void pointers
    
    [ Upstream commit 0c3f3c4f4b15a2c105e1ca882d100048074a2865 ]
    
    There's a few spots in the hardware interface where a void pointer is
    used, but what's passed in and later cast out is always the same type.
    
    Just use the proper type directly.
    
    Reviewed-by: Simon Horman <[email protected]>
    Signed-off-by: Andrew Halaney <[email protected]>
    Reviewed-by: Jesse Brandeburg <[email protected]>
    Tested-by: Brian Masney <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Stable-dep-of: a48e23221000 ("net: stmmac: fix the crash issue for zero copy XDP_TX action")
    Signed-off-by: Sasha Levin <[email protected]>

net: stmmac: use per-queue 64 bit statistics where necessary [+ + +]
Author: Jisheng Zhang <[email protected]>
Date:   Tue Jul 18 00:06:30 2023 +0800

    net: stmmac: use per-queue 64 bit statistics where necessary
    
    [ Upstream commit 133466c3bbe171f826294161db203f7670bb30c8 ]
    
    Currently, there are two major issues with stmmac driver statistics
    First of all, statistics in stmmac_extra_stats, stmmac_rxq_stats
    and stmmac_txq_stats are 32 bit variables on 32 bit platforms. This
    can cause some stats to overflow after several minutes of
    high traffic, for example rx_pkt_n, tx_pkt_n and so on.
    
    Secondly, if HW supports multiqueues, there are frequent cacheline
    ping pongs on some driver statistic vars, for example, normal_irq_n,
    tx_pkt_n and so on. What's more, frequent cacheline ping pongs on
    normal_irq_n happens in ISR, this makes the situation worse.
    
    To improve the driver, we convert those statistics to 64 bit, implement
    ndo_get_stats64 and update .get_ethtool_stats implementation
    accordingly. We also use per-queue statistics where necessary to remove
    the cacheline ping pongs as much as possible to make multiqueue
    operations faster. Those statistics which are not possible to overflow
    and not frequently updated are kept as is.
    
    Signed-off-by: Jisheng Zhang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: a48e23221000 ("net: stmmac: fix the crash issue for zero copy XDP_TX action")
    Signed-off-by: Sasha Levin <[email protected]>

net: stmmac: xgmac: add ethtool per-queue irq statistic support [+ + +]
Author: Teoh Ji Sheng <[email protected]>
Date:   Mon May 8 22:43:40 2023 +0800

    net: stmmac: xgmac: add ethtool per-queue irq statistic support
    
    [ Upstream commit af8eacf2b42e0a736a7a2a1379fb6c0b7fd66da4 ]
    
    Commit af9bf70154eb ("net: stmmac: add ethtool per-queue irq statistic
    support") introduced ethtool per-queue statistics support to display
    number of interrupts generated by DMA tx and DMA rx for DWMAC4 core.
    This patch extend the support to XGMAC core.
    
    Signed-off-by: Teoh Ji Sheng <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: a48e23221000 ("net: stmmac: fix the crash issue for zero copy XDP_TX action")
    Signed-off-by: Sasha Levin <[email protected]>

net: usb: asix: validate PHY address before use [+ + +]
Author: Deepanshu Kartikey <[email protected]>
Date:   Thu Dec 18 06:41:56 2025 +0530

    net: usb: asix: validate PHY address before use
    
    [ Upstream commit a1e077a3f76eea0dc671ed6792e7d543946227e8 ]
    
    The ASIX driver reads the PHY address from the USB device via
    asix_read_phy_addr(). A malicious or faulty device can return an
    invalid address (>= PHY_MAX_ADDR), which causes a warning in
    mdiobus_get_phy():
    
      addr 207 out of range
      WARNING: drivers/net/phy/mdio_bus.c:76
    
    Validate the PHY address in asix_read_phy_addr() and remove the
    now-redundant check in ax88172a.c.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=3d43c9066a5b54902232
    Tested-by: [email protected]
    Fixes: 7e88b11a862a ("net: usb: asix: refactor asix_read_phy_addr() and handle errors on return")
    Link: https://lore.kernel.org/all/[email protected]/T/ [v1]
    Signed-off-by: Deepanshu Kartikey <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: usb: rtl8150: fix memory leak on usb_submit_urb() failure [+ + +]
Author: Deepakkumar Karn <[email protected]>
Date:   Tue Dec 16 20:43:05 2025 +0530

    net: usb: rtl8150: fix memory leak on usb_submit_urb() failure
    
    [ Upstream commit 12cab1191d9890097171156d06bfa8d31f1e39c8 ]
    
    In async_set_registers(), when usb_submit_urb() fails, the allocated
      async_req structure and URB are not freed, causing a memory leak.
    
      The completion callback async_set_reg_cb() is responsible for freeing
      these allocations, but it is only called after the URB is successfully
      submitted and completes (successfully or with error). If submission
      fails, the callback never runs and the memory is leaked.
    
      Fix this by freeing both the URB and the request structure in the error
      path when usb_submit_urb() fails.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=8dd915c7cb0490fc8c52
    Fixes: 4d12997a9bb3 ("drivers: net: usb: rtl8150: concurrent URB bugfix")
    Signed-off-by: Deepakkumar Karn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: usb: sr9700: fix incorrect command used to write single register [+ + +]
Author: Ethan Nelson-Moore <[email protected]>
Date:   Sun Dec 21 00:24:00 2025 -0800

    net: usb: sr9700: fix incorrect command used to write single register
    
    commit fa0b198be1c6775bc7804731a43be5d899d19e7a upstream.
    
    This fixes the device failing to initialize with "error reading MAC
    address" for me, probably because the incorrect write of NCR_RST to
    SR_NCR is not actually resetting the device.
    
    Fixes: c9b37458e95629b1d1171457afdcc1bf1eb7881d ("USB2NET : SR9700 : One chip USB 1.1 USB2NET SR9700Device Driver Support")
    Cc: [email protected]
    Signed-off-by: Ethan Nelson-Moore <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
netfilter: flowtable: check for maximum number of encapsulations in bridge vlan [+ + +]
Author: Pablo Neira Ayuso <[email protected]>
Date:   Thu Nov 27 23:26:22 2025 +0000

    netfilter: flowtable: check for maximum number of encapsulations in bridge vlan
    
    [ Upstream commit 634f3853cc98d73bdec8918010ee29b06981583e ]
    
    Add a sanity check to skip path discovery if the maximum number of
    encapsulation is reached. While at it, check for underflow too.
    
    Fixes: 26267bf9bb57 ("netfilter: flowtable: bridge vlan hardware offload and switchdev")
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nf_conncount: fix leaked ct in error paths [+ + +]
Author: Fernando Fernandez Mancera <[email protected]>
Date:   Fri Dec 5 12:58:01 2025 +0100

    netfilter: nf_conncount: fix leaked ct in error paths
    
    [ Upstream commit 2e2a720766886190a6d35c116794693aabd332b6 ]
    
    There are some situations where ct might be leaked as error paths are
    skipping the refcounted check and return immediately. In order to solve
    it make sure that the check is always called.
    
    Fixes: be102eb6a0e7 ("netfilter: nf_conncount: rework API to use sk_buff directly")
    Signed-off-by: Fernando Fernandez Mancera <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nf_conncount: rework API to use sk_buff directly [+ + +]
Author: Fernando Fernandez Mancera <[email protected]>
Date:   Fri Nov 21 01:14:30 2025 +0100

    netfilter: nf_conncount: rework API to use sk_buff directly
    
    [ Upstream commit be102eb6a0e7c03db00e50540622f4e43b2d2844 ]
    
    When using nf_conncount infrastructure for non-confirmed connections a
    duplicated track is possible due to an optimization introduced since
    commit d265929930e2 ("netfilter: nf_conncount: reduce unnecessary GC").
    
    In order to fix this introduce a new conncount API that receives
    directly an sk_buff struct.  It fetches the tuple and zone and the
    corresponding ct from it. It comes with both existing conncount variants
    nf_conncount_count_skb() and nf_conncount_add_skb(). In addition remove
    the old API and adjust all the users to use the new one.
    
    This way, for each sk_buff struct it is possible to check if there is a
    ct present and already confirmed. If so, skip the add operation.
    
    Fixes: d265929930e2 ("netfilter: nf_conncount: reduce unnecessary GC")
    Signed-off-by: Fernando Fernandez Mancera <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nft_connlimit: update the count if add was skipped [+ + +]
Author: Fernando Fernandez Mancera <[email protected]>
Date:   Fri Nov 21 01:14:32 2025 +0100

    netfilter: nft_connlimit: update the count if add was skipped
    
    [ Upstream commit 69894e5b4c5e28cda5f32af33d4a92b7a4b93b0e ]
    
    Connlimit expression can be used for all kind of packets and not only
    for packets with connection state new. See this ruleset as example:
    
    table ip filter {
            chain input {
                    type filter hook input priority filter; policy accept;
                    tcp dport 22 ct count over 4 counter
            }
    }
    
    Currently, if the connection count goes over the limit the counter will
    count the packets. When a connection is closed, the connection count
    won't decrement as it should because it is only updated for new
    connections due to an optimization on __nf_conncount_add() that prevents
    updating the list if the connection is duplicated.
    
    To solve this problem, check whether the connection was skipped and if
    so, update the list. Adjust count_tree() too so the same fix is applied
    for xt_connlimit.
    
    Fixes: 976afca1ceba ("netfilter: nf_conncount: Early exit in nf_conncount_lookup() and cleanup")
    Closes: https://lore.kernel.org/netfilter/trinity-85c72a88-d762-46c3-be97-36f10e5d9796-1761173693813@3c-app-mailcom-bs12/
    Signed-off-by: Fernando Fernandez Mancera <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
netrom: Fix memory leak in nr_sendmsg() [+ + +]
Author: Wang Liang <[email protected]>
Date:   Sat Nov 29 12:13:15 2025 +0800

    netrom: Fix memory leak in nr_sendmsg()
    
    [ Upstream commit 613d12dd794e078be8ff3cf6b62a6b9acf7f4619 ]
    
    syzbot reported a memory leak [1].
    
    When function sock_alloc_send_skb() return NULL in nr_output(), the
    original skb is not freed, which was allocated in nr_sendmsg(). Fix this
    by freeing it before return.
    
    [1]
    BUG: memory leak
    unreferenced object 0xffff888129f35500 (size 240):
      comm "syz.0.17", pid 6119, jiffies 4294944652
      hex dump (first 32 bytes):
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        00 00 00 00 00 00 00 00 00 10 52 28 81 88 ff ff  ..........R(....
      backtrace (crc 1456a3e4):
        kmemleak_alloc_recursive include/linux/kmemleak.h:44 [inline]
        slab_post_alloc_hook mm/slub.c:4983 [inline]
        slab_alloc_node mm/slub.c:5288 [inline]
        kmem_cache_alloc_node_noprof+0x36f/0x5e0 mm/slub.c:5340
        __alloc_skb+0x203/0x240 net/core/skbuff.c:660
        alloc_skb include/linux/skbuff.h:1383 [inline]
        alloc_skb_with_frags+0x69/0x3f0 net/core/skbuff.c:6671
        sock_alloc_send_pskb+0x379/0x3e0 net/core/sock.c:2965
        sock_alloc_send_skb include/net/sock.h:1859 [inline]
        nr_sendmsg+0x287/0x450 net/netrom/af_netrom.c:1105
        sock_sendmsg_nosec net/socket.c:727 [inline]
        __sock_sendmsg net/socket.c:742 [inline]
        sock_write_iter+0x293/0x2a0 net/socket.c:1195
        new_sync_write fs/read_write.c:593 [inline]
        vfs_write+0x45d/0x710 fs/read_write.c:686
        ksys_write+0x143/0x170 fs/read_write.c:738
        do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
        do_syscall_64+0xa4/0xfa0 arch/x86/entry/syscall_64.c:94
        entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=d7abc36bbbb6d7d40b58
    Tested-by: [email protected]
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Wang Liang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nfc: pn533: Fix error code in pn533_acr122_poweron_rdr() [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Tue Dec 9 09:56:39 2025 +0300

    nfc: pn533: Fix error code in pn533_acr122_poweron_rdr()
    
    [ Upstream commit 885bebac9909994050bbbeed0829c727e42bd1b7 ]
    
    Set the error code if "transferred != sizeof(cmd)" instead of
    returning success.
    
    Fixes: dbafc28955fa ("NFC: pn533: don't send USB data off of the stack")
    Signed-off-by: Dan Carpenter <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
NFS: Automounted filesystems should inherit ro,noexec,nodev,sync flags [+ + +]
Author: Trond Myklebust <[email protected]>
Date:   Fri Nov 28 14:22:44 2025 -0500

    NFS: Automounted filesystems should inherit ro,noexec,nodev,sync flags
    
    [ Upstream commit 8675c69816e4276b979ff475ee5fac4688f80125 ]
    
    When a filesystem is being automounted, it needs to preserve the
    user-set superblock mount options, such as the "ro" flag.
    
    Reported-by: Li Lingfeng <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]/
    Fixes: f2aedb713c28 ("NFS: Add fs_context support.")
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

NFS: Avoid changing nlink when file removes and attribute updates race [+ + +]
Author: Trond Myklebust <[email protected]>
Date:   Mon Nov 17 15:28:17 2025 -0500

    NFS: Avoid changing nlink when file removes and attribute updates race
    
    [ Upstream commit bd4928ec799b31c492eb63f9f4a0c1e0bb4bb3f7 ]
    
    If a file removal races with another operation that updates its
    attributes, then skip the change to nlink, and just mark the attributes
    as being stale.
    
    Reported-by: Aiden Lambert <[email protected]>
    Fixes: 59a707b0d42e ("NFS: Ensure we revalidate the inode correctly after remove or rename")
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

NFS: Fix inheritance of the block sizes when automounting [+ + +]
Author: Trond Myklebust <[email protected]>
Date:   Fri Nov 28 16:06:41 2025 -0500

    NFS: Fix inheritance of the block sizes when automounting
    
    [ Upstream commit 2b092175f5e301cdaa935093edfef2be9defb6df ]
    
    Only inherit the block sizes that were actually specified as mount
    parameters for the parent mount.
    
    Fixes: 62a55d088cd8 ("NFS: Additional refactoring for fs_context conversion")
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

NFS: Initialise verifiers for visible dentries in nfs_atomic_open() [+ + +]
Author: Trond Myklebust <[email protected]>
Date:   Wed Nov 19 08:39:50 2025 -0500

    NFS: Initialise verifiers for visible dentries in nfs_atomic_open()
    
    [ Upstream commit 518c32a1bc4f8df1a8442ee8cdfea3e2fcff20a0 ]
    
    Ensure that the verifiers are initialised before calling
    d_splice_alias() in nfs_atomic_open().
    
    Reported-by: Michael Stoler <[email protected]>
    Fixes: 809fd143de88 ("NFSv4: Ensure nfs_atomic_open set the dentry verifier on ENOENT")
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

NFS: Initialise verifiers for visible dentries in readdir and lookup [+ + +]
Author: Trond Myklebust <[email protected]>
Date:   Wed Nov 19 08:36:16 2025 -0500

    NFS: Initialise verifiers for visible dentries in readdir and lookup
    
    [ Upstream commit 9bd545539b233725a3416801f7c374bff0327d6e ]
    
    Ensure that the verifiers are initialised before calling
    d_splice_alias() in both nfs_prime_dcache() and nfs_lookup().
    
    Reported-by: Michael Stoler <[email protected]>
    Fixes: a1147b8281bd ("NFS: Fix up directory verifier races")
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
NFSD/blocklayout: Fix minlength check in proc_layoutget [+ + +]
Author: Sergey Bashirov <[email protected]>
Date:   Fri Oct 3 12:11:03 2025 +0300

    NFSD/blocklayout: Fix minlength check in proc_layoutget
    
    [ Upstream commit 3524b021b0ec620a76c89aee78e9d4b4130fb711 ]
    
    The extent returned by the file system may have a smaller offset than
    the segment offset requested by the client. In this case, the minimum
    segment length must be checked against the requested range. Otherwise,
    the client may not be able to continue the read/write operation.
    
    Fixes: 8650b8a05850 ("nfsd: pNFS block layout driver")
    Signed-off-by: Sergey Bashirov <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
NFSD: Clear SECLABEL in the suppattr_exclcreat bitmap [+ + +]
Author: Chuck Lever <[email protected]>
Date:   Tue Dec 30 22:55:37 2025 -0500

    NFSD: Clear SECLABEL in the suppattr_exclcreat bitmap
    
    [ Upstream commit 27d17641cacfedd816789b75d342430f6b912bd2 ]
    
    >>From RFC 8881:
    
    5.8.1.14. Attribute 75: suppattr_exclcreat
    
    > The bit vector that would set all REQUIRED and RECOMMENDED
    > attributes that are supported by the EXCLUSIVE4_1 method of file
    > creation via the OPEN operation. The scope of this attribute
    > applies to all objects with a matching fsid.
    
    There's nothing in RFC 8881 that states that suppattr_exclcreat is
    or is not allowed to contain bits for attributes that are clear in
    the reported supported_attrs bitmask. But it doesn't make sense for
    an NFS server to indicate that it /doesn't/ implement an attribute,
    but then also indicate that clients /are/ allowed to set that
    attribute using OPEN(create) with EXCLUSIVE4_1.
    
    Ensure that the SECURITY_LABEL and ACL bits are not set in the
    suppattr_exclcreat bitmask when they are also not set in the
    supported_attrs bitmask.
    
    Fixes: 8c18f2052e75 ("nfsd41: SUPPATTR_EXCLCREAT attribute")
    Cc: [email protected]
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nfsd: Drop the client reference in client_states_open() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Sat Dec 6 15:38:42 2025 +0800

    nfsd: Drop the client reference in client_states_open()
    
    commit 1f941b2c23fd34c6f3b76d36f9d0a2528fa92b8f upstream.
    
    In error path, call drop_client() to drop the reference
    obtained by get_nfsdfs_clp().
    
    Fixes: 78599c42ae3c ("nfsd4: add file to display list of client's opens")
    Cc: [email protected]
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Haoxiang Li <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

nfsd: Mark variable __maybe_unused to avoid W=1 build break [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Thu Nov 13 09:31:31 2025 +0100

    nfsd: Mark variable __maybe_unused to avoid W=1 build break
    
    commit ebae102897e760e9e6bc625f701dd666b2163bd1 upstream.
    
    Clang is not happy about set but (in some cases) unused variable:
    
    fs/nfsd/export.c:1027:17: error: variable 'inode' set but not used [-Werror,-Wunused-but-set-variable]
    
    since it's used as a parameter to dprintk() which might be configured
    a no-op. To avoid uglifying code with the specific ifdeffery just mark
    the variable __maybe_unused.
    
    The commit [1], which introduced this behaviour, is quite old and hence
    the Fixes tag points to the first of the Git era.
    
    Link: https://git.kernel.org/pub/scm/linux/kernel/git/history/history.git/commit/?id=0431923fb7a1 [1]
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Signed-off-by: Andy Shevchenko <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
NFSD: NFSv4 file creation neglects setting ACL [+ + +]
Author: Chuck Lever <[email protected]>
Date:   Mon Jan 5 15:33:11 2026 -0500

    NFSD: NFSv4 file creation neglects setting ACL
    
    [ Upstream commit 913f7cf77bf14c13cfea70e89bcb6d0b22239562 ]
    
    An NFSv4 client that sets an ACL with a named principal during file
    creation retrieves the ACL afterwards, and finds that it is only a
    default ACL (based on the mode bits) and not the ACL that was
    requested during file creation. This violates RFC 8881 section
    6.4.1.3: "the ACL attribute is set as given".
    
    The issue occurs in nfsd_create_setattr(). On 6.1.y, the check to
    determine whether nfsd_setattr() should be called is simply
    "iap->ia_valid", which only accounts for iattr changes. When only
    an ACL is present (and no iattr fields are set), nfsd_setattr() is
    skipped and the POSIX ACL is never applied to the inode.
    
    Subsequently, when the client retrieves the ACL, the server finds
    no POSIX ACL on the inode and returns one generated from the file's
    mode bits rather than returning the originally-specified ACL.
    
    Reported-by: Aurelien Couderc <[email protected]>
    Fixes: c0cbe70742f4 ("NFSD: add posix ACLs to struct nfsd_attrs")
    Cc: [email protected]
    [ cel: Adjust nfsd_create_setattr() instead of nfsd_attrs_valid() ]
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

NFSD: use correct reservation type in nfsd4_scsi_fence_client [+ + +]
Author: Dai Ngo <[email protected]>
Date:   Wed Nov 5 12:45:54 2025 -0800

    NFSD: use correct reservation type in nfsd4_scsi_fence_client
    
    commit 6f52063db9aabdaabea929b1e998af98c2e8d917 upstream.
    
    The reservation type argument for the pr_preempt call should match the
    one used in nfsd4_block_get_device_info_scsi.
    
    Fixes: f99d4fbdae67 ("nfsd: add SCSI layout support")
    Cc: [email protected]
    Signed-off-by: Dai Ngo <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
NFSv4/pNFS: Clear NFS_INO_LAYOUTCOMMIT in pnfs_mark_layout_stateid_invalid [+ + +]
Author: Jonathan Curley <[email protected]>
Date:   Wed Nov 12 18:02:42 2025 +0000

    NFSv4/pNFS: Clear NFS_INO_LAYOUTCOMMIT in pnfs_mark_layout_stateid_invalid
    
    [ Upstream commit e0f8058f2cb56de0b7572f51cd563ca5debce746 ]
    
    Fixes a crash when layout is null during this call stack:
    
    write_inode
        -> nfs4_write_inode
            -> pnfs_layoutcommit_inode
    
    pnfs_set_layoutcommit relies on the lseg refcount to keep the layout
    around. Need to clear NFS_INO_LAYOUTCOMMIT otherwise we might attempt
    to reference a null layout.
    
    Fixes: fe1cf9469d7bc ("pNFS: Clear all layout segment state in pnfs_mark_layout_stateid_invalid")
    Signed-off-by: Jonathan Curley <[email protected]>
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ntfs3: Fix uninit buffer allocated by __getname() [+ + +]
Author: Sidharth Seela <[email protected]>
Date:   Tue Sep 23 12:10:16 2025 +0530

    ntfs3: Fix uninit buffer allocated by __getname()
    
    [ Upstream commit 9948dcb2f7b5a1bf8e8710eafaf6016e00be3ad6 ]
    
    Fix uninit errors caused after buffer allocation given to 'de'; by
    initializing the buffer with zeroes. The fix was found by using KMSAN.
    
    Reported-by: [email protected]
    Fixes: 78ab59fee07f2 ("fs/ntfs3: Rework file operations")
    Signed-off-by: Sidharth Seela <[email protected]>
    Signed-off-by: Konstantin Komarov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ntfs3: fix uninit memory after failed mi_read in mi_format_new [+ + +]
Author: Raphael Pinsonneault-Thibeault <[email protected]>
Date:   Sun Oct 12 16:16:34 2025 -0400

    ntfs3: fix uninit memory after failed mi_read in mi_format_new
    
    [ Upstream commit 73e6b9dacf72a1e7a4265eacca46f8f33e0997d6 ]
    
    Fix a KMSAN un-init bug found by syzkaller.
    
    ntfs_get_bh() expects a buffer from sb_getblk(), that buffer may not be
    uptodate. We do not bring the buffer uptodate before setting it as
    uptodate. If the buffer were to not be uptodate, it could mean adding a
    buffer with un-init data to the mi record. Attempting to load that record
    will trigger KMSAN.
    
    Avoid this by setting the buffer as uptodate, if it’s not already, by
    overwriting it.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=7a2ba6b7b66340cff225
    Tested-by: [email protected]
    Fixes: 4342306f0f0d5 ("fs/ntfs3: Add file operations and implementation")
    Signed-off-by: Raphael Pinsonneault-Thibeault <[email protected]>
    Signed-off-by: Konstantin Komarov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ntfs3: init run lock for extend inode [+ + +]
Author: Edward Adam Davis <[email protected]>
Date:   Tue Sep 16 13:50:13 2025 +0800

    ntfs3: init run lock for extend inode
    
    [ Upstream commit be99c62ac7e7af514e4b13f83c891a3cccefaa48 ]
    
    After setting the inode mode of $Extend to a regular file, executing the
    truncate system call will enter the do_truncate() routine, causing the
    run_lock uninitialized error reported by syzbot.
    
    Prior to patch 4e8011ffec79, if the inode mode of $Extend was not set to
    a regular file, the do_truncate() routine would not be entered.
    
    Add the run_lock initialization when loading $Extend.
    
    syzbot reported:
    INFO: trying to register non-static key.
    Call Trace:
     dump_stack_lvl+0x189/0x250 lib/dump_stack.c:120
     assign_lock_key+0x133/0x150 kernel/locking/lockdep.c:984
     register_lock_class+0x105/0x320 kernel/locking/lockdep.c:1299
     __lock_acquire+0x99/0xd20 kernel/locking/lockdep.c:5112
     lock_acquire+0x120/0x360 kernel/locking/lockdep.c:5868
     down_write+0x96/0x1f0 kernel/locking/rwsem.c:1590
     ntfs_set_size+0x140/0x200 fs/ntfs3/inode.c:860
     ntfs_extend+0x1d9/0x970 fs/ntfs3/file.c:387
     ntfs_setattr+0x2e8/0xbe0 fs/ntfs3/file.c:808
    
    Fixes: 4e8011ffec79 ("ntfs3: pretend $Extend records as regular files")
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=bdeb22a4b9a09ab9aa45
    Tested-by: [email protected]
    Signed-off-by: Edward Adam Davis <[email protected]>
    Signed-off-by: Konstantin Komarov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ntfs: Do not overwrite uptodate pages [+ + +]
Author: Matthew Wilcox (Oracle) <[email protected]>
Date:   Fri Jul 18 20:53:58 2025 +0100

    ntfs: Do not overwrite uptodate pages
    
    commit 68f6bd128e75a032432eda9d16676ed2969a1096 upstream.
    
    When reading a compressed file, we may read several pages in addition to
    the one requested.  The current code will overwrite pages in the page
    cache with the data from disc which can definitely result in changes
    that have been made being lost.
    
    For example if we have four consecutie pages ABCD in the file compressed
    into a single extent, on first access, we'll bring in ABCD.  Then we
    write to page B.  Memory pressure results in the eviction of ACD.
    When we attempt to write to page C, we will overwrite the data in page
    B with the data currently on disk.
    
    I haven't investigated the decompression code to check whether it's
    OK to overwrite a clean page or whether it might be possible to see
    corrupt data.  Out of an abundance of caution, decline to overwrite
    uptodate pages, not just dirty pages.
    
    Fixes: 4342306f0f0d (fs/ntfs3: Add file operations and implementation)
    Signed-off-by: Matthew Wilcox (Oracle) <[email protected]>
    Cc: [email protected]
    Signed-off-by: Konstantin Komarov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nvme-fc: don't hold rport lock when putting ctrl [+ + +]
Author: Daniel Wagner <[email protected]>
Date:   Thu Oct 30 11:05:45 2025 +0100

    nvme-fc: don't hold rport lock when putting ctrl
    
    [ Upstream commit b71cbcf7d170e51148d5467820ae8a72febcb651 ]
    
    nvme_fc_ctrl_put can acquire the rport lock when freeing the
    ctrl object:
    
    nvme_fc_ctrl_put
      nvme_fc_ctrl_free
        spin_lock_irqsave(rport->lock)
    
    Thus we can't hold the rport lock when calling nvme_fc_ctrl_put.
    
    Justin suggested use the safe list iterator variant because
    nvme_fc_ctrl_put will also modify the rport->list.
    
    Cc: Justin Tee <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Daniel Wagner <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
objtool: Fix find_{symbol,func}_containing() [+ + +]
Author: Peter Zijlstra <[email protected]>
Date:   Thu Sep 15 13:11:12 2022 +0200

    objtool: Fix find_{symbol,func}_containing()
    
    [ Upstream commit 5da6aea375cde499fdfac3cde4f26df4a840eb9f ]
    
    The current find_{symbol,func}_containing() functions are broken in
    the face of overlapping symbols, exactly the case that is needed for a
    new ibt/endbr supression.
    
    Import interval_tree_generic.h into the tools tree and convert the
    symbol tree to an interval tree to support proper range stabs.
    
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: 72567c630d32 ("objtool: Fix weak symbol detection")
    Signed-off-by: Sasha Levin <[email protected]>

objtool: Fix weak symbol detection [+ + +]
Author: Josh Poimboeuf <[email protected]>
Date:   Wed Sep 17 09:03:27 2025 -0700

    objtool: Fix weak symbol detection
    
    [ Upstream commit 72567c630d32bc31f671977f78228c80937ed80e ]
    
    find_symbol_hole_containing() fails to find a symbol hole (aka stripped
    weak symbol) if its section has no symbols before the hole.  This breaks
    weak symbol detection if -ffunction-sections is enabled.
    
    Fix that by allowing the interval tree to contain section symbols, which
    are always at offset zero for a given section.
    
    Fixes a bunch of (-ffunction-sections) warnings like:
    
      vmlinux.o: warning: objtool: .text.__x64_sys_io_setup+0x10: unreachable instruction
    
    Fixes: 4adb23686795 ("objtool: Ignore extra-symbol code")
    Acked-by: Petr Mladek <[email protected]>
    Tested-by: Joe Lawrence <[email protected]>
    Signed-off-by: Josh Poimboeuf <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ocfs2: fix kernel BUG in ocfs2_find_victim_chain [+ + +]
Author: Prithvi Tambewagh <[email protected]>
Date:   Mon Dec 1 18:37:11 2025 +0530

    ocfs2: fix kernel BUG in ocfs2_find_victim_chain
    
    commit 039bef30e320827bac8990c9f29d2a68cd8adb5f upstream.
    
    syzbot reported a kernel BUG in ocfs2_find_victim_chain() because the
    `cl_next_free_rec` field of the allocation chain list (next free slot in
    the chain list) is 0, triggring the BUG_ON(!cl->cl_next_free_rec)
    condition in ocfs2_find_victim_chain() and panicking the kernel.
    
    To fix this, an if condition is introduced in ocfs2_claim_suballoc_bits(),
    just before calling ocfs2_find_victim_chain(), the code block in it being
    executed when either of the following conditions is true:
    
    1. `cl_next_free_rec` is equal to 0, indicating that there are no free
    chains in the allocation chain list
    2. `cl_next_free_rec` is greater than `cl_count` (the total number of
    chains in the allocation chain list)
    
    Either of them being true is indicative of the fact that there are no
    chains left for usage.
    
    This is addressed using ocfs2_error(), which prints
    the error log for debugging purposes, rather than panicking the kernel.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Prithvi Tambewagh <[email protected]>
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=96d38c6e1655c1420a72
    Tested-by: [email protected]
    Reviewed-by: Joseph Qi <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: Heming Zhao <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ocfs2: fix memory leak in ocfs2_merge_rec_left() [+ + +]
Author: Dmitry Antipov <[email protected]>
Date:   Fri Dec 5 09:51:59 2025 +0300

    ocfs2: fix memory leak in ocfs2_merge_rec_left()
    
    [ Upstream commit 2214ec4bf89d0fd27717322d3983a2f3b469c7f3 ]
    
    In 'ocfs2_merge_rec_left()', do not reset 'left_path' to NULL after
    move, thus allowing 'ocfs2_free_path()' to free it before return.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 677b975282e4 ("ocfs2: Add support for cross extent block")
    Signed-off-by: Dmitry Antipov <[email protected]>
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=cfc7cab3bb6eaa7c4de2
    Reviewed-by: Heming Zhao <[email protected]>
    Acked-by: Joseph Qi <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ocfs2: relax BUG() to ocfs2_error() in __ocfs2_move_extent() [+ + +]
Author: Dmitry Antipov <[email protected]>
Date:   Thu Oct 9 13:23:49 2025 +0300

    ocfs2: relax BUG() to ocfs2_error() in __ocfs2_move_extent()
    
    [ Upstream commit 8a7d58845fae061c62b50bc5eeb9bae4a1dedc3d ]
    
    In '__ocfs2_move_extent()', relax 'BUG()' to 'ocfs2_error()' just
    to avoid crashing the whole kernel due to a filesystem corruption.
    
    Fixes: 8f603e567aa7 ("Ocfs2/move_extents: move a range of extent.")
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Dmitry Antipov <[email protected]>
    Closes: https://syzkaller.appspot.com/bug?extid=727d161855d11d81e411
    Reported-by: [email protected]
    Reviewed-by: Joseph Qi <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
octeontx2-pf: fix "UBSAN: shift-out-of-bounds error" [+ + +]
Author: Anshumali Gaur <[email protected]>
Date:   Fri Dec 19 11:52:26 2025 +0530

    octeontx2-pf: fix "UBSAN: shift-out-of-bounds error"
    
    [ Upstream commit 85f4b0c650d9f9db10bda8d3acfa1af83bf78cf7 ]
    
    This patch ensures that the RX ring size (rx_pending) is not
    set below the permitted length. This avoids UBSAN
    shift-out-of-bounds errors when users passes small or zero
    ring sizes via ethtool -G.
    
    Fixes: d45d8979840d ("octeontx2-pf: Add basic ethtool support")
    Signed-off-by: Anshumali Gaur <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
page_pool: Fix use-after-free in page_pool_recycle_in_ring [+ + +]
Author: Dong Chenchen <[email protected]>
Date:   Wed Dec 10 12:15:55 2025 +0000

    page_pool: Fix use-after-free in page_pool_recycle_in_ring
    
    [ Upstream commit 271683bb2cf32e5126c592b5d5e6a756fa374fd9 ]
    
    syzbot reported a uaf in page_pool_recycle_in_ring:
    
    BUG: KASAN: slab-use-after-free in lock_release+0x151/0xa30 kernel/locking/lockdep.c:5862
    Read of size 8 at addr ffff8880286045a0 by task syz.0.284/6943
    
    CPU: 0 UID: 0 PID: 6943 Comm: syz.0.284 Not tainted 6.13.0-rc3-syzkaller-gdfa94ce54f41 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:94 [inline]
     dump_stack_lvl+0x241/0x360 lib/dump_stack.c:120
     print_address_description mm/kasan/report.c:378 [inline]
     print_report+0x169/0x550 mm/kasan/report.c:489
     kasan_report+0x143/0x180 mm/kasan/report.c:602
     lock_release+0x151/0xa30 kernel/locking/lockdep.c:5862
     __raw_spin_unlock_bh include/linux/spinlock_api_smp.h:165 [inline]
     _raw_spin_unlock_bh+0x1b/0x40 kernel/locking/spinlock.c:210
     spin_unlock_bh include/linux/spinlock.h:396 [inline]
     ptr_ring_produce_bh include/linux/ptr_ring.h:164 [inline]
     page_pool_recycle_in_ring net/core/page_pool.c:707 [inline]
     page_pool_put_unrefed_netmem+0x748/0xb00 net/core/page_pool.c:826
     page_pool_put_netmem include/net/page_pool/helpers.h:323 [inline]
     page_pool_put_full_netmem include/net/page_pool/helpers.h:353 [inline]
     napi_pp_put_page+0x149/0x2b0 net/core/skbuff.c:1036
     skb_pp_recycle net/core/skbuff.c:1047 [inline]
     skb_free_head net/core/skbuff.c:1094 [inline]
     skb_release_data+0x6c4/0x8a0 net/core/skbuff.c:1125
     skb_release_all net/core/skbuff.c:1190 [inline]
     __kfree_skb net/core/skbuff.c:1204 [inline]
     sk_skb_reason_drop+0x1c9/0x380 net/core/skbuff.c:1242
     kfree_skb_reason include/linux/skbuff.h:1263 [inline]
     __skb_queue_purge_reason include/linux/skbuff.h:3343 [inline]
    
    root cause is:
    
    page_pool_recycle_in_ring
      ptr_ring_produce
        spin_lock(&r->producer_lock);
        WRITE_ONCE(r->queue[r->producer++], ptr)
          //recycle last page to pool
                                    page_pool_release
                                      page_pool_scrub
                                        page_pool_empty_ring
                                          ptr_ring_consume
                                          page_pool_return_page  //release all page
                                      __page_pool_destroy
                                         free_percpu(pool->recycle_stats);
                                         free(pool) //free
    
         spin_unlock(&r->producer_lock); //pool->ring uaf read
      recycle_stat_inc(pool, ring);
    
    page_pool can be free while page pool recycle the last page in ring.
    Add producer-lock barrier to page_pool_release to prevent the page
    pool from being free before all pages have been recycled.
    
    recycle_stat_inc() is empty when CONFIG_PAGE_POOL_STATS is not
    enabled, which will trigger Wempty-body build warning. Add definition
    for pool stat macro to fix warning.
    
    Suggested-by: Jakub Kicinski <[email protected]>
    Link: https://lore.kernel.org/netdev/[email protected]
    Fixes: ff7d6b27f894 ("page_pool: refurbish version of page_pool code")
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=204a4382fcb3311f3858
    Signed-off-by: Dong Chenchen <[email protected]>
    Reviewed-by: Toke Høiland-Jørgensen <[email protected]>
    Reviewed-by: Mina Almasry <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ Minor context change fixed. ]
    Signed-off-by: Ruohan Lan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
parisc: Do not reprogram affinitiy on ASP chip [+ + +]
Author: Helge Deller <[email protected]>
Date:   Tue Nov 25 15:23:02 2025 +0100

    parisc: Do not reprogram affinitiy on ASP chip
    
    commit dca7da244349eef4d78527cafc0bf80816b261f5 upstream.
    
    The ASP chip is a very old variant of the GSP chip and is used e.g. in
    HP 730 workstations. When trying to reprogram the affinity it will crash
    with a HPMC as the relevant registers don't seem to be at the usual
    location.  Let's avoid the crash by checking the sversion. Also note,
    that reprogramming isn't necessary either, as the HP730 is a just a
    single-CPU machine.
    
    Signed-off-by: Helge Deller <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

parisc: entry.S: fix space adjustment on interruption for 64-bit userspace [+ + +]
Author: Sven Schnelle <[email protected]>
Date:   Thu Oct 30 08:56:05 2025 +0100

    parisc: entry.S: fix space adjustment on interruption for 64-bit userspace
    
    commit 1aa4524c0c1b54842c4c0a370171d11b12d0709b upstream.
    
    In wide mode, the IASQ contain the upper part of the GVA
    during interruption. This needs to be reversed before
    the space is used - otherwise it contains parts of IAOQ.
    See Page 2-13 "Processing Resources / Interruption Instruction
    Address Queues" in the Parisc 2.0 Architecture Manual page 2-13
    for an explanation.
    
    The IAOQ/IASQ space_adjust was skipped for other interruptions
    than itlb misses. However, the code in handle_interruption()
    checks whether iasq[0] contains a valid space. Due to the not
    masked out bits this match failed and the process was killed.
    
    Also add space_adjust for IAOQ1/IASQ1 so ptregs contains sane values.
    
    Signed-off-by: Sven Schnelle <[email protected]>
    Cc: [email protected] # v6.0+
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

parisc: entry: set W bit for !compat tasks in syscall_restore_rfi() [+ + +]
Author: Sven Schnelle <[email protected]>
Date:   Wed Oct 15 23:21:41 2025 +0200

    parisc: entry: set W bit for !compat tasks in syscall_restore_rfi()
    
    commit 5fb1d3ce3e74a4530042795e1e065422295f1371 upstream.
    
    When the kernel leaves to userspace via syscall_restore_rfi(), the
    W bit is not set in the new PSW. This doesn't cause any problems
    because there's no 64 bit userspace for parisc. Simple static binaries
    are usually loaded at addresses way below the 32 bit limit so the W bit
    doesn't matter.
    
    Fix this by setting the W bit when TIF_32BIT is not set.
    
    Signed-off-by: Sven Schnelle <[email protected]>
    Cc: [email protected]
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
PCI/PM: Reinstate clearing state_saved in legacy and !PM codepaths [+ + +]
Author: Lukas Wunner <[email protected]>
Date:   Wed Nov 19 09:50:01 2025 +0100

    PCI/PM: Reinstate clearing state_saved in legacy and !PM codepaths
    
    commit 894f475f88e06c0f352c829849560790dbdedbe5 upstream.
    
    When a PCI device is suspended, it is normally the PCI core's job to save
    Config Space and put the device into a low power state.  However drivers
    are allowed to assume these responsibilities.  When they do, the PCI core
    can tell by looking at the state_saved flag in struct pci_dev:  The flag
    is cleared before commencing the suspend sequence and it is set when
    pci_save_state() is called.  If the PCI core finds the flag set late in
    the suspend sequence, it refrains from calling pci_save_state() itself.
    
    But there are two corner cases where the PCI core neglects to clear the
    flag before commencing the suspend sequence:
    
    * If a driver has legacy PCI PM callbacks, pci_legacy_suspend() neglects
      to clear the flag.  The (stale) flag is subsequently queried by
      pci_legacy_suspend() itself and pci_legacy_suspend_late().
    
    * If a device has no driver or its driver has no PCI PM callbacks,
      pci_pm_freeze() neglects to clear the flag.  The (stale) flag is
      subsequently queried by pci_pm_freeze_noirq().
    
    The flag may be set prior to suspend if the device went through error
    recovery:  Drivers commonly invoke pci_restore_state() + pci_save_state()
    to restore Config Space after reset.
    
    The flag may also be set if drivers call pci_save_state() on probe to
    allow for recovery from subsequent errors.
    
    The result is that pci_legacy_suspend_late() and pci_pm_freeze_noirq()
    don't call pci_save_state() and so the state that will be restored on
    resume is the one recorded on last error recovery or on probe, not the one
    that the device had on suspend.  If the two states happen to be identical,
    there's no problem.
    
    Reinstate clearing the flag in pci_legacy_suspend() and pci_pm_freeze().
    The two functions used to do that until commit 4b77b0a2ba27 ("PCI: Clear
    saved_state after the state has been restored") deemed it unnecessary
    because it assumed that it's sufficient to clear the flag on resume in
    pci_restore_state().  The commit seemingly did not take into account that
    pci_save_state() and pci_restore_state() are not only used by power
    management code, but also for error recovery.
    
    Devices without driver or whose driver has no PCI PM callbacks may be in
    runtime suspend when pci_pm_freeze() is called.  Their state has already
    been saved, so don't clear the flag to skip a pointless pci_save_state()
    in pci_pm_freeze_noirq().
    
    None of the drivers with legacy PCI PM callbacks seem to use runtime PM,
    so clear the flag unconditionally in their case.
    
    Fixes: 4b77b0a2ba27 ("PCI: Clear saved_state after the state has been restored")
    Signed-off-by: Lukas Wunner <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Reviewed-by: Rafael J. Wysocki (Intel) <[email protected]>
    Cc: [email protected] # v2.6.32+
    Link: https://patch.msgid.link/094f2aad64418710daf0940112abe5a0afdc6bce.1763483367.git.lukas@wunner.de
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
PCI: brcmstb: Fix disabling L0s capability [+ + +]
Author: Jim Quinlan <[email protected]>
Date:   Mon Jan 5 14:14:41 2026 -0500

    PCI: brcmstb: Fix disabling L0s capability
    
    [ Upstream commit 9583f9d22991d2cfb5cc59a2552040c4ae98d998 ]
    
    caab002d5069 ("PCI: brcmstb: Disable L0s component of ASPM if requested")
    set PCI_EXP_LNKCAP_ASPM_L1 and (optionally) PCI_EXP_LNKCAP_ASPM_L0S in
    PCI_EXP_LNKCAP (aka PCIE_RC_CFG_PRIV1_LINK_CAPABILITY in brcmstb).
    
    But instead of using PCI_EXP_LNKCAP_ASPM_L1 and PCI_EXP_LNKCAP_ASPM_L0S
    directly, it used PCIE_LINK_STATE_L1 and PCIE_LINK_STATE_L0S, which are
    Linux-created values that only coincidentally matched the PCIe spec.
    b478e162f227 ("PCI/ASPM: Consolidate link state defines") later changed
    them so they no longer matched the PCIe spec, so the bits ended up in the
    wrong place in PCI_EXP_LNKCAP.
    
    Use PCI_EXP_LNKCAP_ASPM_L0S to clear L0s support when there's an
    'aspm-no-l0s' property.  Rely on brcmstb hardware to advertise L0s and/or
    L1 support otherwise.
    
    Fixes: caab002d5069 ("PCI: brcmstb: Disable L0s component of ASPM if requested")
    Reported-by: Bjorn Helgaas <[email protected]>
    Closes: https://lore.kernel.org/linux-pci/20250925194424.GA2197200@bhelgaas
    Signed-off-by: Jim Quinlan <[email protected]>
    [mani: reworded subject and description, added closes tag and CCed stable]
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    [bhelgaas: commit log]
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Reviewed-by: Florian Fainelli <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    [ adapted context due to missing link width negotiation defines and variables ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: dwc: Fix wrong PORT_LOGIC_LTSSM_STATE_MASK definition [+ + +]
Author: Shawn Lin <[email protected]>
Date:   Fri Nov 14 20:09:00 2025 +0800

    PCI: dwc: Fix wrong PORT_LOGIC_LTSSM_STATE_MASK definition
    
    [ Upstream commit bcc9a4a0bca3aee4303fa4a20302e57b24ac8f68 ]
    
    As per DesignWare Cores PCI Express Controller Databook, section 5.50,
    SII: Debug Signals, cxpl_debug_info[63:0]:
    
      [5:0] smlh_ltssm_state: LTSSM current state. Encoding is same as the
      dedicated smlh_ltssm_state output.
    
    The mask should be 6 bits, from 0 to 5. Hence, fix the mask definition.
    
    Fixes: 23fe5bd4be90 ("PCI: keystone: Cleanup ks_pcie_link_up()")
    Signed-off-by: Shawn Lin <[email protected]>
    [mani: reworded description]
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

PCI: keystone: Exit ks_pcie_probe() for invalid mode [+ + +]
Author: Siddharth Vadapalli <[email protected]>
Date:   Wed Oct 29 13:34:51 2025 +0530

    PCI: keystone: Exit ks_pcie_probe() for invalid mode
    
    [ Upstream commit 95d9c3f0e4546eaec0977f3b387549a8463cd49f ]
    
    Commit under Fixes introduced support for PCIe EP mode on AM654x platforms.
    When the mode happens to be either "DW_PCIE_RC_TYPE" or "DW_PCIE_EP_TYPE",
    the PCIe Controller is configured accordingly. However, when the mode is
    neither of them, an error message is displayed, but the driver probe
    succeeds. Since this "invalid" mode is not associated with a functional
    PCIe Controller, the probe should fail.
    
    Fix the behavior by exiting "ks_pcie_probe()" with the return value of
    "-EINVAL" in addition to displaying the existing error message when the
    mode is invalid.
    
    Fixes: 23284ad677a9 ("PCI: keystone: Add support for PCIe EP in AM654x Platforms")
    Signed-off-by: Siddharth Vadapalli <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
perf record: skip synthesize event when open evsel failed [+ + +]
Author: Shuai Xue <[email protected]>
Date:   Thu Oct 23 09:50:43 2025 +0800

    perf record: skip synthesize event when open evsel failed
    
    [ Upstream commit 163e5f2b96632b7fb2eaa965562aca0dbdf9f996 ]
    
    When using perf record with the `--overwrite` option, a segmentation fault
    occurs if an event fails to open. For example:
    
      perf record -e cycles-ct -F 1000 -a --overwrite
      Error:
      cycles-ct:H: PMU Hardware doesn't support sampling/overflow-interrupts. Try 'perf stat'
      perf: Segmentation fault
          #0 0x6466b6 in dump_stack debug.c:366
          #1 0x646729 in sighandler_dump_stack debug.c:378
          #2 0x453fd1 in sigsegv_handler builtin-record.c:722
          #3 0x7f8454e65090 in __restore_rt libc-2.32.so[54090]
          #4 0x6c5671 in __perf_event__synthesize_id_index synthetic-events.c:1862
          #5 0x6c5ac0 in perf_event__synthesize_id_index synthetic-events.c:1943
          #6 0x458090 in record__synthesize builtin-record.c:2075
          #7 0x45a85a in __cmd_record builtin-record.c:2888
          #8 0x45deb6 in cmd_record builtin-record.c:4374
          #9 0x4e5e33 in run_builtin perf.c:349
          #10 0x4e60bf in handle_internal_command perf.c:401
          #11 0x4e6215 in run_argv perf.c:448
          #12 0x4e653a in main perf.c:555
          #13 0x7f8454e4fa72 in __libc_start_main libc-2.32.so[3ea72]
          #14 0x43a3ee in _start ??:0
    
    The --overwrite option implies --tail-synthesize, which collects non-sample
    events reflecting the system status when recording finishes. However, when
    evsel opening fails (e.g., unsupported event 'cycles-ct'), session->evlist
    is not initialized and remains NULL. The code unconditionally calls
    record__synthesize() in the error path, which iterates through the NULL
    evlist pointer and causes a segfault.
    
    To fix it, move the record__synthesize() call inside the error check block, so
    it's only called when there was no error during recording, ensuring that evlist
    is properly initialized.
    
    Fixes: 4ea648aec019 ("perf record: Add --tail-synthesize option")
    Signed-off-by: Shuai Xue <[email protected]>
    Signed-off-by: Namhyung Kim <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
perf tools: Fix split kallsyms DSO counting [+ + +]
Author: Namhyung Kim <[email protected]>
Date:   Tue Dec 2 15:57:15 2025 -0800

    perf tools: Fix split kallsyms DSO counting
    
    [ Upstream commit ad0b9c4865b98dc37f4d606d26b1c19808796805 ]
    
    It's counted twice as it's increased after calling maps__insert().  I
    guess we want to increase it only after it's added properly.
    
    Reviewed-by: Ian Rogers <[email protected]>
    Fixes: 2e538c4a1847291cf ("perf tools: Improve kernel/modules symbol lookup")
    Signed-off-by: Namhyung Kim <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
perf/x86/amd: Check event before enable to avoid GPF [+ + +]
Author: George Kennedy <[email protected]>
Date:   Tue Oct 8 08:00:53 2024 -0500

    perf/x86/amd: Check event before enable to avoid GPF
    
    [ Upstream commit 866cf36bfee4fba6a492d2dcc5133f857e3446b0 ]
    
    On AMD machines cpuc->events[idx] can become NULL in a subtle race
    condition with NMI->throttle->x86_pmu_stop().
    
    Check event for NULL in amd_pmu_enable_all() before enable to avoid a GPF.
    This appears to be an AMD only issue.
    
    Syzkaller reported a GPF in amd_pmu_enable_all.
    
    INFO: NMI handler (perf_event_nmi_handler) took too long to run: 13.143
        msecs
    Oops: general protection fault, probably for non-canonical address
        0xdffffc0000000034: 0000  PREEMPT SMP KASAN NOPTI
    KASAN: null-ptr-deref in range [0x00000000000001a0-0x00000000000001a7]
    CPU: 0 UID: 0 PID: 328415 Comm: repro_36674776 Not tainted 6.12.0-rc1-syzk
    RIP: 0010:x86_pmu_enable_event (arch/x86/events/perf_event.h:1195
        arch/x86/events/core.c:1430)
    RSP: 0018:ffff888118009d60 EFLAGS: 00010012
    RAX: dffffc0000000000 RBX: 0000000000000000 RCX: 0000000000000000
    RDX: 0000000000000034 RSI: 0000000000000000 RDI: 00000000000001a0
    RBP: 0000000000000001 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000002
    R13: ffff88811802a440 R14: ffff88811802a240 R15: ffff8881132d8601
    FS:  00007f097dfaa700(0000) GS:ffff888118000000(0000) GS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00000000200001c0 CR3: 0000000103d56000 CR4: 00000000000006f0
    Call Trace:
     <IRQ>
    amd_pmu_enable_all (arch/x86/events/amd/core.c:760 (discriminator 2))
    x86_pmu_enable (arch/x86/events/core.c:1360)
    event_sched_out (kernel/events/core.c:1191 kernel/events/core.c:1186
        kernel/events/core.c:2346)
    __perf_remove_from_context (kernel/events/core.c:2435)
    event_function (kernel/events/core.c:259)
    remote_function (kernel/events/core.c:92 (discriminator 1)
        kernel/events/core.c:72 (discriminator 1))
    __flush_smp_call_function_queue (./arch/x86/include/asm/jump_label.h:27
        ./include/linux/jump_label.h:207 ./include/trace/events/csd.h:64
        kernel/smp.c:135 kernel/smp.c:540)
    __sysvec_call_function_single (./arch/x86/include/asm/jump_label.h:27
        ./include/linux/jump_label.h:207
        ./arch/x86/include/asm/trace/irq_vectors.h:99 arch/x86/kernel/smp.c:272)
    sysvec_call_function_single (arch/x86/kernel/smp.c:266 (discriminator 47)
        arch/x86/kernel/smp.c:266 (discriminator 47))
     </IRQ>
    
    Reported-by: syzkaller <[email protected]>
    Signed-off-by: George Kennedy <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
perf/x86/intel: Correct large PEBS flag check [+ + +]
Author: Dapeng Mi <[email protected]>
Date:   Wed Oct 29 18:21:28 2025 +0800

    perf/x86/intel: Correct large PEBS flag check
    
    [ Upstream commit 5e4e355ae7cdeb0fef5dbe908866e1f895abfacc ]
    
    current large PEBS flag check only checks if sample_regs_user contains
    unsupported GPRs but doesn't check if sample_regs_intr contains
    unsupported GPRs.
    
    Of course, currently PEBS HW supports to sample all perf supported GPRs,
    the missed check doesn't cause real issue. But it won't be true any more
    after the subsequent patches support to sample SSP register. SSP
    sampling is not supported by adaptive PEBS HW and it would be supported
    until arch-PEBS HW. So correct this issue.
    
    Fixes: a47ba4d77e12 ("perf/x86: Enable free running PEBS for REGS_USER/INTR")
    Signed-off-by: Dapeng Mi <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
phy: broadcom: bcm63xx-usbh: fix section mismatches [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Oct 17 07:45:37 2025 +0200

    phy: broadcom: bcm63xx-usbh: fix section mismatches
    
    commit 356d1924b9a6bc2164ce2bf1fad147b0c37ae085 upstream.
    
    Platform drivers can be probed after their init sections have been
    discarded (e.g. on probe deferral or manual rebind through sysfs) so the
    probe function and match table must not live in init.
    
    Fixes: 783f6d3dcf35 ("phy: bcm63xx-usbh: Add BCM63xx USBH driver")
    Cc: [email protected]      # 5.9
    Cc: Álvaro Fernández Rojas <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Neil Armstrong <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

phy: mscc: Fix PTP for VSC8574 and VSC8572 [+ + +]
Author: Horatiu Vultur <[email protected]>
Date:   Thu Oct 23 21:13:50 2025 +0200

    phy: mscc: Fix PTP for VSC8574 and VSC8572
    
    [ Upstream commit ea5df88aeca112aac69e6c32e3dd1433a113b0c9 ]
    
    The PTP initialization is two-step. First part are the function
    vsc8584_ptp_probe_once() and vsc8584_ptp_probe() at probe time which
    initialize the locks, queues, creates the PTP device. The second part is
    the function vsc8584_ptp_init() at config_init() time which initialize
    PTP in the HW.
    
    For VSC8574 and VSC8572, the PTP initialization is incomplete. It is
    missing the first part but it makes the second part. Meaning that the
    ptp_clock_register() is never called.
    
    There is no crash without the first part when enabling PTP but this is
    unexpected because some PHys have PTP functionality exposed by the
    driver and some don't even though they share the same PTP clock PTP.
    
    Fixes: 774626fa440e ("net: phy: mscc: Add PTP support for 2 more VSC PHYs")
    Reviewed-by: Maxime Chevallier <[email protected]>
    Signed-off-by: Horatiu Vultur <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

phy: renesas: rcar-gen3-usb2: Fix an error handling path in rcar_gen3_phy_usb2_probe() [+ + +]
Author: Christophe JAILLET <[email protected]>
Date:   Thu Oct 23 16:58:05 2025 +0300

    phy: renesas: rcar-gen3-usb2: Fix an error handling path in rcar_gen3_phy_usb2_probe()
    
    [ Upstream commit 662bb179d3381c7c069e44bb177396bcaee31cc8 ]
    
    If an error occurs after the reset_control_deassert(),
    reset_control_assert() must be called, as already done in the remove
    function.
    
    Use devm_add_action_or_reset() to add the missing call and simplify the
    .remove() function accordingly.
    
    While at it, drop struct rcar_gen3_chan::rstc as it is not used aymore.
    
    [claudiu.beznea: removed "struct reset_control *rstc = data;" from
     rcar_gen3_reset_assert(), dropped struct rcar_gen3_chan::rstc]
    
    Fixes: 4eae16375357 ("phy: renesas: rcar-gen3-usb2: Add support to initialize the bus")
    Signed-off-by: Christophe JAILLET <[email protected]>
    Reviewed-by: Biju Das <[email protected]>
    Reviewed-by: Geert Uytterhoeven <[email protected]>
    Tested-by: Wolfram Sang <[email protected]>
    Signed-off-by: Claudiu Beznea <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
pinctrl: qcom: msm: Fix deadlock in pinmux configuration [+ + +]
Author: Praveen Talari <[email protected]>
Date:   Mon Nov 10 15:40:41 2025 +0530

    pinctrl: qcom: msm: Fix deadlock in pinmux configuration
    
    [ Upstream commit 1c2e70397b4125022dba80f6111271a37fb36bae ]
    
    Replace disable_irq() with disable_irq_nosync() in msm_pinmux_set_mux()
    to prevent deadlock when wakeup IRQ is triggered on the same
    GPIO being reconfigured.
    
    The issue occurs when a wakeup IRQ is triggered on a GPIO and the IRQ
    handler attempts to reconfigure the same GPIO's pinmux. In this scenario,
    msm_pinmux_set_mux() calls disable_irq() which waits for the currently
    running IRQ handler to complete, creating a circular dependency that
    results in deadlock.
    
    Using disable_irq_nosync() avoids waiting for the IRQ handler to
    complete, preventing the deadlock condition while still properly
    disabling the interrupt during pinmux reconfiguration.
    
    Suggested-by: Prasad Sodagudi <[email protected]>
    Signed-off-by: Praveen Talari <[email protected]>
    Reviewed-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

pinctrl: single: Fix incorrect type for error return variable [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Wed Dec 3 14:13:47 2025 +0800

    pinctrl: single: Fix incorrect type for error return variable
    
    [ Upstream commit 61d1bb53547d42c6bdaec9da4496beb3a1a05264 ]
    
    pcs_pinconf_get() and pcs_pinconf_set() declare ret as unsigned int,
    but assign it the return values of pcs_get_function() that may return
    negative error codes. This causes negative error codes to be
    converted to large positive values.
    
    Change ret from unsigned int to int in both functions.
    
    Fixes: 9dddb4df90d1 ("pinctrl: single: support generic pinconf")
    Signed-off-by: Haotian Zhang <[email protected]>
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

pinctrl: single: Fix PIN_CONFIG_BIAS_DISABLE handling [+ + +]
Author: Matthijs Kooijman <[email protected]>
Date:   Tue Mar 19 12:06:34 2024 +0100

    pinctrl: single: Fix PIN_CONFIG_BIAS_DISABLE handling
    
    [ Upstream commit b5fe46efc147516a908d2d31bf40eb858ab76d51 ]
    
    The pinctrl-single driver handles pin_config_set by looking up the
    requested setting in a DT-defined lookup table, which defines what bits
    correspond to each setting. There is no way to add
    PIN_CONFIG_BIAS_DISABLE entries to the table, since there is instead
    code to disable the bias by applying the disable values of both the
    pullup and pulldown entries in the table.
    
    However, this code is inside the table-lookup loop, so it would only
    execute if there is an entry for PIN_CONFIG_BIAS_DISABLE in the table,
    which can never exist, so this code never runs.
    
    This commit lifts the offending code out of the loop, so it just
    executes directly whenever PIN_CONFIG_BIAS_DISABLE is requested,
    skippipng the table lookup loop.
    
    This also introduces a new `param` variable to make the code slightly
    more readable.
    
    This bug seems to have existed when this code was first merged in commit
    9dddb4df90d13 ("pinctrl: single: support generic pinconf"). Earlier
    versions of this patch did have an entry for PIN_CONFIG_BIAS_DISABLE in
    the lookup table, but that was removed, which is probably how this bug
    was introduced.
    
    Signed-off-by: Matthijs Kooijman <[email protected]>
    Reviewed-by: Haojian Zhuang <[email protected]>
    Reviewed-by: Tony Lindgren <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Linus Walleij <[email protected]>
    Stable-dep-of: 61d1bb53547d ("pinctrl: single: Fix incorrect type for error return variable")
    Signed-off-by: Sasha Levin <[email protected]>

pinctrl: stm32: fix hwspinlock resource leak in probe function [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Wed Oct 29 09:42:52 2025 +0800

    pinctrl: stm32: fix hwspinlock resource leak in probe function
    
    [ Upstream commit 002679f79ed605e543fbace465557317cd307c9a ]
    
    In stm32_pctl_probe(), hwspin_lock_request_specific() is called to
    request a hwspinlock, but the acquired lock is not freed on multiple
    error paths after this call. This causes resource leakage when the
    function fails to initialize properly.
    
    Use devm_hwspin_lock_request_specific() instead of
    hwspin_lock_request_specific() to automatically manage the hwspinlock
    resource lifecycle.
    
    Fixes: 97cfb6cd34f2 ("pinctrl: stm32: protect configuration registers with a hwspinlock")
    Signed-off-by: Haotian Zhang <[email protected]>
    Reviewed-by: Antonio Borneo <[email protected]>
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
platform/chrome: cros_ec_ishtp: Fix UAF after unbinding driver [+ + +]
Author: Tzung-Bi Shih <[email protected]>
Date:   Fri Oct 31 03:39:00 2025 +0000

    platform/chrome: cros_ec_ishtp: Fix UAF after unbinding driver
    
    commit 944edca81e7aea15f83cf9a13a6ab67f711e8abd upstream.
    
    After unbinding the driver, another kthread `cros_ec_console_log_work`
    is still accessing the device, resulting an UAF and crash.
    
    The driver doesn't unregister the EC device in .remove() which should
    shutdown sub-devices synchronously.  Fix it.
    
    Fixes: 26a14267aff2 ("platform/chrome: Add ChromeOS EC ISHTP driver")
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Tzung-Bi Shih <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
platform/x86/intel/hid: Add Dell Pro Rugged 10/12 tablet to VGBS DMI quirks [+ + +]
Author: Chia-Lin Kao (AceLan) <[email protected]>
Date:   Thu Nov 27 15:04:07 2025 +0800

    platform/x86/intel/hid: Add Dell Pro Rugged 10/12 tablet to VGBS DMI quirks
    
    [ Upstream commit b169e1733cadb614e87f69d7a5ae1b186c50d313 ]
    
    Dell Pro Rugged 10/12 tablets has a reliable VGBS method.
    If VGBS is not called on boot, the on-screen keyboard won't appear if the
    device is booted without a keyboard.
    
    Call VGBS on boot on thess devices to get the initial state of
    SW_TABLET_MODE in a reliable way.
    
    Signed-off-by: Chia-Lin Kao (AceLan) <[email protected]>
    Reviewed-by: Hans de Goede <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
platform/x86: acer-wmi: Ignore backlight event [+ + +]
Author: Armin Wolf <[email protected]>
Date:   Mon Nov 17 16:59:38 2025 +0100

    platform/x86: acer-wmi: Ignore backlight event
    
    [ Upstream commit 444a9256f8d106e08a6bc2dc8ef28a8699e4b3ba ]
    
    On the Acer Nitro AN515-58, the event 4 - 0 is send by the ACPI
    firmware when the backlight up/down keys are pressed. Ignore this
    event to avoid spamming the kernel log with error messages, as the
    acpi-video driver already handles brightness up/down events.
    
    Reported-by: Bugaddr <[email protected]>
    Closes: https://bugaddr.tech/posts/2025-11-16-debugging-the-acer-nitro-5-an515-58-fn-f10-keyboard-backlight-bug-on-linux/#wmi-interface-issues
    Tested-by: Bugaddr <[email protected]>
    Signed-off-by: Armin Wolf <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

platform/x86: asus-wmi: use brightness_set_blocking() for kbd led [+ + +]
Author: Anton Khirnov <[email protected]>
Date:   Sat Nov 29 11:13:08 2025 +0100

    platform/x86: asus-wmi: use brightness_set_blocking() for kbd led
    
    [ Upstream commit ccb61a328321ba3f8567e350664c9ca7a42b6c70 ]
    
    kbd_led_set() can sleep, and so may not be used as the brightness_set()
    callback.
    
    Otherwise using this led with a trigger leads to system hangs
    accompanied by:
    BUG: scheduling while atomic: acpi_fakekeyd/2588/0x00000003
    CPU: 4 UID: 0 PID: 2588 Comm: acpi_fakekeyd Not tainted 6.17.9+deb14-amd64 #1 PREEMPT(lazy)  Debian 6.17.9-1
    Hardware name: ASUSTeK COMPUTER INC. ASUS EXPERTBOOK B9403CVAR/B9403CVAR, BIOS B9403CVAR.311 12/24/2024
    Call Trace:
     <TASK>
     [...]
     schedule_timeout+0xbd/0x100
     __down_common+0x175/0x290
     down_timeout+0x67/0x70
     acpi_os_wait_semaphore+0x57/0x90
     [...]
     asus_wmi_evaluate_method3+0x87/0x190 [asus_wmi]
     led_trigger_event+0x3f/0x60
     [...]
    
    Fixes: 9fe44fc98ce4 ("platform/x86: asus-wmi: Simplify the keyboard brightness updating process")
    Signed-off-by: Anton Khirnov <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Reviewed-by: Denis Benato <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

platform/x86: huawei-wmi: add keys for HONOR models [+ + +]
Author: Jia Ston <[email protected]>
Date:   Wed Oct 29 05:18:38 2025 +0000

    platform/x86: huawei-wmi: add keys for HONOR models
    
    [ Upstream commit 5c72329716d0858621021193330594d5d26bf44d ]
    
    HONOR MagicBook X16/X14 models produced in 2025 cannot use the Print
    Screen and YOYO keys properly, with the system reporting them as
    unknown key presses (codes: 0x028b and 0x028e).
    
    To resolve this, a key_entry is added for both the HONOR Print Screen
    key and the HONOR YOYO key, ensuring they function correctly on these
    models.
    
    Signed-off-by: Ston Jia <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

platform/x86: ibm_rtl: fix EBDA signature search pointer arithmetic [+ + +]
Author: Junrui Luo <[email protected]>
Date:   Fri Dec 19 16:30:29 2025 +0800

    platform/x86: ibm_rtl: fix EBDA signature search pointer arithmetic
    
    [ Upstream commit 15dd100349b8526cbdf2de0ce3e72e700eb6c208 ]
    
    The ibm_rtl_init() function searches for the signature but has a pointer
    arithmetic error. The loop counter suggests searching at 4-byte intervals
    but the implementation only advances by 1 byte per iteration.
    
    Fix by properly advancing the pointer by sizeof(unsigned int) bytes
    each iteration.
    
    Reported-by: Yuhao Jiang <[email protected]>
    Reported-by: Junrui Luo <[email protected]>
    Fixes: 35f0ce032b0f ("IBM Real-Time "SMI Free" mode driver -v7")
    Signed-off-by: Junrui Luo <[email protected]>
    Link: https://patch.msgid.link/SYBPR01MB78812D887A92DE3802D0D06EAFA9A@SYBPR01MB7881.ausprd01.prod.outlook.com
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

platform/x86: intel: chtwc_int33fe: don't dereference swnode args [+ + +]
Author: Bartosz Golaszewski <[email protected]>
Date:   Fri Nov 21 11:04:50 2025 +0100

    platform/x86: intel: chtwc_int33fe: don't dereference swnode args
    
    commit 527250cd9092461f1beac3e4180a4481bffa01b5 upstream.
    
    Members of struct software_node_ref_args should not be dereferenced
    directly but set using the provided macros. Commit d7cdbbc93c56
    ("software node: allow referencing firmware nodes") changed the name of
    the software node member and caused a build failure. Remove all direct
    dereferences of the ref struct as a fix.
    
    However, this driver also seems to abuse the software node interface by
    waiting for a node with an arbitrary name "intel-xhci-usb-sw" to appear
    in the system before setting up the reference for the I2C device, while
    the actual software node already exists in the intel-xhci-usb-role-switch
    module and should be used to set up a static reference. Add a FIXME for
    a future improvement.
    
    Fixes: d7cdbbc93c56 ("software node: allow referencing firmware nodes")
    Fixes: 53c24c2932e5 ("platform/x86: intel_cht_int33fe: use inline reference properties")
    Cc: [email protected]
    Reported-by: Stephen Rothwell <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Reviewed-by: Hans de Goede <[email protected]>
    Acked-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Philipp Zabel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

platform/x86: msi-laptop: add missing sysfs_remove_group() [+ + +]
Author: Thomas Fourier <[email protected]>
Date:   Wed Dec 17 11:36:13 2025 +0100

    platform/x86: msi-laptop: add missing sysfs_remove_group()
    
    [ Upstream commit 1461209cf813b6ee6d40f29b96b544587df6d2b1 ]
    
    A sysfs group is created in msi_init() when old_ec_model is enabled, but
    never removed. Remove the msipf_old_attribute_group in that case.
    
    Fixes: 03696e51d75a ("msi-laptop: Disable brightness control for new EC")
    Signed-off-by: Thomas Fourier <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
PM: runtime: Do not clear needs_force_resume with enabled runtime PM [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Mon Dec 15 15:21:34 2025 +0100

    PM: runtime: Do not clear needs_force_resume with enabled runtime PM
    
    commit 359afc8eb02a518fbdd0cbd462c8c2827c6cbec2 upstream.
    
    Commit 89d9cec3b1e9 ("PM: runtime: Clear power.needs_force_resume in
    pm_runtime_reinit()") added provisional clearing of power.needs_force_resume
    to pm_runtime_reinit(), but it is done unconditionally which is a
    mistake because pm_runtime_reinit() may race with driver probing
    and removal [1].
    
    To address this, notice that power.needs_force_resume should never
    be set when runtime PM is enabled and so it only needs to be cleared
    when runtime PM is disabled, and update pm_runtime_init() to only
    clear that flag when runtime PM is disabled.
    
    Fixes: 89d9cec3b1e9 ("PM: runtime: Clear power.needs_force_resume in pm_runtime_reinit()")
    Reported-by: Ed Tsai <[email protected]>
    Closes: https://lore.kernel.org/linux-pm/[email protected]/ [1]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Cc: 6.17+ <[email protected]> # 6.17+
    Reviewed-by: Ulf Hansson <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
pmdomain: imx: Fix reference count leak in imx_gpc_probe() [+ + +]
Author: Wentao Liang <[email protected]>
Date:   Tue Jan 6 12:05:17 2026 -0500

    pmdomain: imx: Fix reference count leak in imx_gpc_probe()
    
    [ Upstream commit 73cb5f6eafb0ac7aea8cdeb8ff12981aa741d8fb ]
    
    of_get_child_by_name() returns a node pointer with refcount incremented.
    Use the __free() attribute to manage the pgc_node reference, ensuring
    automatic of_node_put() cleanup when pgc_node goes out of scope.
    
    This eliminates the need for explicit error handling paths and avoids
    reference count leaks.
    
    Fixes: 721cabf6c660 ("soc: imx: move PGC handling to a new GPC driver")
    Cc: [email protected]
    Signed-off-by: Wentao Liang <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

pmdomain: Use device_get_match_data() [+ + +]
Author: Rob Herring <[email protected]>
Date:   Tue Jan 6 12:05:16 2026 -0500

    pmdomain: Use device_get_match_data()
    
    [ Upstream commit 3ba9fdfaa550936837b50b73d6c27ac401fde875 ]
    
    Use preferred device_get_match_data() instead of of_match_device() to
    get the driver match data. With this, adjust the includes to explicitly
    include the correct headers.
    
    Signed-off-by: Rob Herring <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Stable-dep-of: 73cb5f6eafb0 ("pmdomain: imx: Fix reference count leak in imx_gpc_probe()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
power: supply: apm_power: only unset own apm_get_power_status [+ + +]
Author: Ahelenia Ziemiańska <[email protected]>
Date:   Fri Oct 17 00:05:18 2025 +0200

    power: supply: apm_power: only unset own apm_get_power_status
    
    [ Upstream commit bd44ea12919ac4e83c9f3997240fe58266aa8799 ]
    
    Mirroring drivers/macintosh/apm_emu.c, this means that
      modprobe apm_power && modprobe $anotherdriver && modprobe -r apm_power
    leaves $anotherdriver's apm_get_power_status instead of deleting it.
    
    Fixes: 3788ec932bfd ("[BATTERY] APM emulation driver for class batteries")
    Signed-off-by: Ahelenia Ziemiańska <[email protected]>
    Link: https://patch.msgid.link/xczpgox57hxbunkcbdl5fxhc4gnsajsipldfidi7355afezk64@tarta.nabijaczleweli.xyz
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

power: supply: cw2015: Check devm_delayed_work_autocancel() return code [+ + +]
Author: Ivan Abramov <[email protected]>
Date:   Wed Oct 8 15:07:11 2025 +0300

    power: supply: cw2015: Check devm_delayed_work_autocancel() return code
    
    [ Upstream commit 92ec7e7b86ec0aff9cd7db64d9dce50a0ea7c542 ]
    
    Since devm_delayed_work_autocancel() may fail, add return code check and
    exit cw_bat_probe() on error.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 0cb172a4918e ("power: supply: cw2015: Use device managed API to simplify the code")
    Signed-off-by: Ivan Abramov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

power: supply: wm831x: Check wm831x_set_bits() return value [+ + +]
Author: Ivan Abramov <[email protected]>
Date:   Thu Oct 9 20:05:52 2025 +0300

    power: supply: wm831x: Check wm831x_set_bits() return value
    
    [ Upstream commit ea14bae6df18942bccb467fcf5ff33ca677b8253 ]
    
    Since wm831x_set_bits() may return error, log failure and exit from
    wm831x_usb_limit_change() in such case.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 626b6cd5f52e ("power: wm831x_power: Support USB charger current limit management")
    Signed-off-by: Ivan Abramov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
powerpc, mm: Fix mprotect on book3s 32-bit [+ + +]
Author: Dave Vasilevsky <[email protected]>
Date:   Sun Nov 16 01:40:46 2025 -0500

    powerpc, mm: Fix mprotect on book3s 32-bit
    
    commit 78fc63ffa7813e33681839bb33826c24195f0eb7 upstream.
    
    On 32-bit book3s with hash-MMUs, tlb_flush() was a no-op. This was
    unnoticed because all uses until recently were for unmaps, and thus
    handled by __tlb_remove_tlb_entry().
    
    After commit 4a18419f71cd ("mm/mprotect: use mmu_gather") in kernel 5.19,
    tlb_gather_mmu() started being used for mprotect as well. This caused
    mprotect to simply not work on these machines:
    
      int *ptr = mmap(NULL, 4096, PROT_READ|PROT_WRITE,
                      MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
      *ptr = 1; // force HPTE to be created
      mprotect(ptr, 4096, PROT_READ);
      *ptr = 2; // should segfault, but succeeds
    
    Fixed by making tlb_flush() actually flush TLB pages. This finally
    agrees with the behaviour of boot3s64's tlb_flush().
    
    Fixes: 4a18419f71cd ("mm/mprotect: use mmu_gather")
    Cc: [email protected]
    Reviewed-by: Christophe Leroy <[email protected]>
    Reviewed-by: Ritesh Harjani (IBM) <[email protected]>
    Signed-off-by: Dave Vasilevsky <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
powerpc/32: Fix unpaired stwcx. on interrupt exit [+ + +]
Author: Christophe Leroy <[email protected]>
Date:   Fri Sep 12 10:37:34 2025 +0200

    powerpc/32: Fix unpaired stwcx. on interrupt exit
    
    [ Upstream commit 10e1c77c3636d815db802ceef588522c2d2d947c ]
    
    Commit b96bae3ae2cb ("powerpc/32: Replace ASM exception exit by C
    exception exit from ppc64") erroneouly copied to powerpc/32 the logic
    from powerpc/64 based on feature CPU_FTR_STCX_CHECKS_ADDRESS which is
    always 0 on powerpc/32.
    
    Re-instate the logic implemented by commit b64f87c16f3c ("[POWERPC]
    Avoid unpaired stwcx. on some processors") which is based on
    CPU_FTR_NEED_PAIRED_STWCX feature.
    
    Fixes: b96bae3ae2cb ("powerpc/32: Replace ASM exception exit by C exception exit from ppc64")
    Signed-off-by: Christophe Leroy <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/6040b5dbcf5cdaa1cd919fcf0790f12974ea6e5a.1757666244.git.christophe.leroy@csgroup.eu
    Signed-off-by: Sasha Levin <[email protected]>

 
powerpc/64s/ptdump: Fix kernel_hash_pagetable dump for ISA v3.00 HPTE format [+ + +]
Author: Ritesh Harjani (IBM) <[email protected]>
Date:   Thu Oct 30 20:27:28 2025 +0530

    powerpc/64s/ptdump: Fix kernel_hash_pagetable dump for ISA v3.00 HPTE format
    
    [ Upstream commit eae40a6da63faa9fb63ff61f8fa2b3b57da78a84 ]
    
    HPTE format was changed since Power9 (ISA 3.0) onwards. While dumping
    kernel hash page tables, nothing gets printed on powernv P9+. This patch
    utilizes the helpers added in the patch tagged as fixes, to convert new
    format to old format and dump the hptes. This fix is only needed for
    native_find() (powernv), since pseries continues to work fine with the
    old format.
    
    Fixes: 6b243fcfb5f1e ("powerpc/64: Simplify adaptation to new ISA v3.00 HPTE format")
    Signed-off-by: Ritesh Harjani (IBM) <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/4c2bb9e5b3cfbc0dd80b61b67cdd3ccfc632684c.1761834163.git.ritesh.list@gmail.com
    Signed-off-by: Sasha Levin <[email protected]>

 
powerpc/64s/radix/kfence: map __kfence_pool at page granularity [+ + +]
Author: Hari Bathini <[email protected]>
Date:   Mon Jul 1 18:30:21 2024 +0530

    powerpc/64s/radix/kfence: map __kfence_pool at page granularity
    
    commit 353d7a84c214f184d5a6b62acdec8b4424159b7c upstream.
    
    When KFENCE is enabled, total system memory is mapped at page level
    granularity. But in radix MMU mode, ~3GB additional memory is needed
    to map 100GB of system memory at page level granularity when compared
    to using 2MB direct mapping.This is not desired considering KFENCE is
    designed to be enabled in production kernels [1].
    
    Mapping only the memory allocated for KFENCE pool at page granularity is
    sufficient to enable KFENCE support. So, allocate __kfence_pool during
    bootup and map it at page granularity instead of mapping all system
    memory at page granularity.
    
    Without patch:
      # cat /proc/meminfo
      MemTotal:       101201920 kB
    
    With patch:
      # cat /proc/meminfo
      MemTotal:       104483904 kB
    
    Note that enabling KFENCE at runtime is disabled for radix MMU for now,
    as it depends on the ability to split page table mappings and such APIs
    are not currently implemented for radix MMU.
    
    All kfence_test.c testcases passed with this patch.
    
    [1] https://lore.kernel.org/all/[email protected]/
    
    Signed-off-by: Hari Bathini <[email protected]>
    Signed-off-by: Michael Ellerman <[email protected]>
    Link: https://msgid.link/[email protected]
    Cc: Aboorva Devarajan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
powerpc/64s/slb: Fix SLB multihit issue during SLB preload [+ + +]
Author: Donet Tom <[email protected]>
Date:   Thu Oct 30 20:27:26 2025 +0530

    powerpc/64s/slb: Fix SLB multihit issue during SLB preload
    
    commit 00312419f0863964625d6dcda8183f96849412c6 upstream.
    
    On systems using the hash MMU, there is a software SLB preload cache that
    mirrors the entries loaded into the hardware SLB buffer. This preload
    cache is subject to periodic eviction — typically after every 256 context
    switches — to remove old entry.
    
    To optimize performance, the kernel skips switch_mmu_context() in
    switch_mm_irqs_off() when the prev and next mm_struct are the same.
    However, on hash MMU systems, this can lead to inconsistencies between
    the hardware SLB and the software preload cache.
    
    If an SLB entry for a process is evicted from the software cache on one
    CPU, and the same process later runs on another CPU without executing
    switch_mmu_context(), the hardware SLB may retain stale entries. If the
    kernel then attempts to reload that entry, it can trigger an SLB
    multi-hit error.
    
    The following timeline shows how stale SLB entries are created and can
    cause a multi-hit error when a process moves between CPUs without a
    MMU context switch.
    
    CPU 0                                   CPU 1
    -----                                    -----
    Process P
    exec                                    swapper/1
     load_elf_binary
      begin_new_exc
        activate_mm
         switch_mm_irqs_off
          switch_mmu_context
           switch_slb
           /*
            * This invalidates all
            * the entries in the HW
            * and setup the new HW
            * SLB entries as per the
            * preload cache.
            */
    context_switch
    sched_migrate_task migrates process P to cpu-1
    
    Process swapper/0                       context switch (to process P)
    (uses mm_struct of Process P)           switch_mm_irqs_off()
                                             switch_slb
                                               load_slb++
                                                /*
                                                * load_slb becomes 0 here
                                                * and we evict an entry from
                                                * the preload cache with
                                                * preload_age(). We still
                                                * keep HW SLB and preload
                                                * cache in sync, that is
                                                * because all HW SLB entries
                                                * anyways gets evicted in
                                                * switch_slb during SLBIA.
                                                * We then only add those
                                                * entries back in HW SLB,
                                                * which are currently
                                                * present in preload_cache
                                                * (after eviction).
                                                */
                                            load_elf_binary continues...
                                             setup_new_exec()
                                              slb_setup_new_exec()
    
                                            sched_switch event
                                            sched_migrate_task migrates
                                            process P to cpu-0
    
    context_switch from swapper/0 to Process P
     switch_mm_irqs_off()
      /*
       * Since both prev and next mm struct are same we don't call
       * switch_mmu_context(). This will cause the HW SLB and SW preload
       * cache to go out of sync in preload_new_slb_context. Because there
       * was an SLB entry which was evicted from both HW and preload cache
       * on cpu-1. Now later in preload_new_slb_context(), when we will try
       * to add the same preload entry again, we will add this to the SW
       * preload cache and then will add it to the HW SLB. Since on cpu-0
       * this entry was never invalidated, hence adding this entry to the HW
       * SLB will cause a SLB multi-hit error.
       */
    load_elf_binary continues...
     START_THREAD
      start_thread
       preload_new_slb_context
       /*
        * This tries to add a new EA to preload cache which was earlier
        * evicted from both cpu-1 HW SLB and preload cache. This caused the
        * HW SLB of cpu-0 to go out of sync with the SW preload cache. The
        * reason for this was, that when we context switched back on CPU-0,
        * we should have ideally called switch_mmu_context() which will
        * bring the HW SLB entries on CPU-0 in sync with SW preload cache
        * entries by setting up the mmu context properly. But we didn't do
        * that since the prev mm_struct running on cpu-0 was same as the
        * next mm_struct (which is true for swapper / kernel threads). So
        * now when we try to add this new entry into the HW SLB of cpu-0,
        * we hit a SLB multi-hit error.
        */
    
    WARNING: CPU: 0 PID: 1810970 at arch/powerpc/mm/book3s64/slb.c:62
    assert_slb_presence+0x2c/0x50(48 results) 02:47:29 [20157/42149]
    Modules linked in:
    CPU: 0 UID: 0 PID: 1810970 Comm: dd Not tainted 6.16.0-rc3-dirty #12
    VOLUNTARY
    Hardware name: IBM pSeries (emulated by qemu) POWER8 (architected)
    0x4d0200 0xf000004 of:SLOF,HEAD hv:linux,kvm pSeries
    NIP:  c00000000015426c LR: c0000000001543b4 CTR: 0000000000000000
    REGS: c0000000497c77e0 TRAP: 0700   Not tainted  (6.16.0-rc3-dirty)
    MSR:  8000000002823033 <SF,VEC,VSX,FP,ME,IR,DR,RI,LE>  CR: 28888482  XER: 00000000
    CFAR: c0000000001543b0 IRQMASK: 3
    <...>
    NIP [c00000000015426c] assert_slb_presence+0x2c/0x50
    LR [c0000000001543b4] slb_insert_entry+0x124/0x390
    Call Trace:
      0x7fffceb5ffff (unreliable)
      preload_new_slb_context+0x100/0x1a0
      start_thread+0x26c/0x420
      load_elf_binary+0x1b04/0x1c40
      bprm_execve+0x358/0x680
      do_execveat_common+0x1f8/0x240
      sys_execve+0x58/0x70
      system_call_exception+0x114/0x300
      system_call_common+0x160/0x2c4
    
    >From the above analysis, during early exec the hardware SLB is cleared,
    and entries from the software preload cache are reloaded into hardware
    by switch_slb. However, preload_new_slb_context and slb_setup_new_exec
    also attempt to load some of the same entries, which can trigger a
    multi-hit. In most cases, these additional preloads simply hit existing
    entries and add nothing new. Removing these functions avoids redundant
    preloads and eliminates the multi-hit issue. This patch removes these
    two functions.
    
    We tested process switching performance using the context_switch
    benchmark on POWER9/hash, and observed no regression.
    
    Without this patch: 129041 ops/sec
    With this patch:    129341 ops/sec
    
    We also measured SLB faults during boot, and the counts are essentially
    the same with and without this patch.
    
    SLB faults without this patch: 19727
    SLB faults with this patch:    19786
    
    Fixes: 5434ae74629a ("powerpc/64s/hash: Add a SLB preload cache")
    cc: [email protected]
    Suggested-by: Nicholas Piggin <[email protected]>
    Signed-off-by: Donet Tom <[email protected]>
    Signed-off-by: Ritesh Harjani (IBM) <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/0ac694ae683494fe8cadbd911a1a5018d5d3c541.1761834163.git.ritesh.list@gmail.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
powerpc/addnote: Fix overflow on 32-bit builds [+ + +]
Author: Ben Collins <[email protected]>
Date:   Mon Apr 21 22:31:13 2025 -0400

    powerpc/addnote: Fix overflow on 32-bit builds
    
    [ Upstream commit 825ce89a3ef17f84cf2c0eacfa6b8dc9fd11d13f ]
    
    The PUT_64[LB]E() macros need to cast the value to unsigned long long
    like the GET_64[LB]E() macros. Caused lots of warnings when compiled
    on 32-bit, and clobbered addresses (36-bit P4080).
    
    Signed-off-by: Ben Collins <[email protected]>
    Reviewed-by: Christophe Leroy <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/2025042122-mustard-wrasse-694572@boujee-and-buff
    Signed-off-by: Sasha Levin <[email protected]>

 
powerpc/kexec: Enable SMT before waking offline CPUs [+ + +]
Author: Nysal Jan K.A. <[email protected]>
Date:   Tue Oct 28 16:25:12 2025 +0530

    powerpc/kexec: Enable SMT before waking offline CPUs
    
    commit c2296a1e42418556efbeb5636c4fa6aa6106713a upstream.
    
    If SMT is disabled or a partial SMT state is enabled, when a new kernel
    image is loaded for kexec, on reboot the following warning is observed:
    
    kexec: Waking offline cpu 228.
    WARNING: CPU: 0 PID: 9062 at arch/powerpc/kexec/core_64.c:223 kexec_prepare_cpus+0x1b0/0x1bc
    [snip]
     NIP kexec_prepare_cpus+0x1b0/0x1bc
     LR  kexec_prepare_cpus+0x1a0/0x1bc
     Call Trace:
      kexec_prepare_cpus+0x1a0/0x1bc (unreliable)
      default_machine_kexec+0x160/0x19c
      machine_kexec+0x80/0x88
      kernel_kexec+0xd0/0x118
      __do_sys_reboot+0x210/0x2c4
      system_call_exception+0x124/0x320
      system_call_vectored_common+0x15c/0x2ec
    
    This occurs as add_cpu() fails due to cpu_bootable() returning false for
    CPUs that fail the cpu_smt_thread_allowed() check or non primary
    threads if SMT is disabled.
    
    Fix the issue by enabling SMT and resetting the number of SMT threads to
    the number of threads per core, before attempting to wake up all present
    CPUs.
    
    Fixes: 38253464bc82 ("cpu/SMT: Create topology_smt_thread_allowed()")
    Reported-by: Sachin P Bappalige <[email protected]>
    Cc: [email protected] # v6.6+
    Reviewed-by: Srikar Dronamraju <[email protected]>
    Signed-off-by: Nysal Jan K.A. <[email protected]>
    Tested-by: Samir M <[email protected]>
    Reviewed-by: Sourabh Jain <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
powerpc/pseries/cmm: adjust BALLOON_MIGRATE when migrating pages [+ + +]
Author: David Hildenbrand <[email protected]>
Date:   Mon Jan 5 13:18:49 2026 -0500

    powerpc/pseries/cmm: adjust BALLOON_MIGRATE when migrating pages
    
    [ Upstream commit 0da2ba35c0d532ca0fe7af698b17d74c4d084b9a ]
    
    Let's properly adjust BALLOON_MIGRATE like the other drivers.
    
    Note that the INFLATE/DEFLATE events are triggered from the core when
    enqueueing/dequeueing pages.
    
    This was found by code inspection.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: fe030c9b85e6 ("powerpc/pseries/cmm: Implement balloon compaction")
    Signed-off-by: David Hildenbrand <[email protected]>
    Reviewed-by: Ritesh Harjani (IBM) <[email protected]>
    Cc: Christophe Leroy <[email protected]>
    Cc: Madhavan Srinivasan <[email protected]>
    Cc: Michael Ellerman <[email protected]>
    Cc: Nicholas Piggin <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

powerpc/pseries/cmm: call balloon_devinfo_init() also without CONFIG_BALLOON_COMPACTION [+ + +]
Author: David Hildenbrand <[email protected]>
Date:   Tue Oct 21 12:06:05 2025 +0200

    powerpc/pseries/cmm: call balloon_devinfo_init() also without CONFIG_BALLOON_COMPACTION
    
    commit fc6bcf9ac4de76f5e7bcd020b3c0a86faff3f2d5 upstream.
    
    Patch series "powerpc/pseries/cmm: two smaller fixes".
    
    Two smaller fixes identified while doing a bigger rework.
    
    
    This patch (of 2):
    
    We always have to initialize the balloon_dev_info, even when compaction is
    not configured in: otherwise the containing list and the lock are left
    uninitialized.
    
    Likely not many such configs exist in practice, but let's CC stable to
    be sure.
    
    This was found by code inspection.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: fe030c9b85e6 ("powerpc/pseries/cmm: Implement balloon compaction")
    Signed-off-by: David Hildenbrand <[email protected]>
    Reviewed-by: Ritesh Harjani (IBM) <[email protected]>
    Cc: Christophe Leroy <[email protected]>
    Cc: Madhavan Srinivasan <[email protected]>
    Cc: Michael Ellerman <[email protected]>
    Cc: Nicholas Piggin <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ps3disk: use memcpy_{from,to}_bvec index [+ + +]
Author: Rene Rebe <[email protected]>
Date:   Fri Nov 14 15:30:33 2025 +0100

    ps3disk: use memcpy_{from,to}_bvec index
    
    [ Upstream commit 79bd8c9814a273fa7ba43399e1c07adec3fc95db ]
    
    With 6e0a48552b8c (ps3disk: use memcpy_{from,to}_bvec) converting
    ps3disk to new bvec helpers, incrementing the offset was accidently
    lost, corrupting consecutive buffers. Restore index for non-corrupted
    data transfers.
    
    Fixes: 6e0a48552b8c (ps3disk: use memcpy_{from,to}_bvec)
    Signed-off-by: René Rebe <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
pwm: bcm2835: Make sure the channel is enabled after pwm_request() [+ + +]
Author: Uwe Kleine-König <[email protected]>
Date:   Tue Nov 18 18:43:02 2025 +0100

    pwm: bcm2835: Make sure the channel is enabled after pwm_request()
    
    [ Upstream commit cda323dbda76600bf9761970d58517648f0de67d ]
    
    The .free callback cleared among others the enable bit PWENx in the
    control register. When the PWM is requested later again this bit isn't
    restored but the core assumes the PWM is enabled and thus skips a
    request to configure the same state as before.
    
    To fix that don't touch the hardware configuration in .free(). For
    symmetry also drop .request() and configure the mode completely in
    .apply().
    
    Fixes: e5a06dc5ac1f ("pwm: Add BCM2835 PWM driver")
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Reviewed-by: Florian Fainelli <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

pwm: stm32: Always program polarity [+ + +]
Author: Sean Nyekjaer <[email protected]>
Date:   Thu Jan 8 13:45:23 2026 +0100

    pwm: stm32: Always program polarity
    
    Commit 7346e7a058a2 ("pwm: stm32: Always do lazy disabling") triggered a
    regression where PWM polarity changes could be ignored.
    
    stm32_pwm_set_polarity() was skipped due to a mismatch between the
    cached pwm->state.polarity and the actual hardware state, leaving the
    hardware polarity unchanged.
    
    Fixes: 7edf7369205b ("pwm: Add driver for STM32 plaftorm")
    Cc: [email protected] # <= 6.12
    Signed-off-by: Sean Nyekjaer <[email protected]>
    Co-developed-by: Uwe Kleine-König <[email protected]>
    Signed-off-by: Uwe Kleine-König <[email protected]>

 
r8169: fix RTL8117 Wake-on-Lan in DASH mode [+ + +]
Author: René Rebe <[email protected]>
Date:   Tue Dec 2 19:41:37 2025 +0100

    r8169: fix RTL8117 Wake-on-Lan in DASH mode
    
    commit dd75c723ef566f7f009c047f47e0eee95fe348ab upstream.
    
    Wake-on-Lan does currently not work for r8169 in DASH mode, e.g. the
    ASUS Pro WS X570-ACE with RTL8168fp/RTL8117.
    
    Fix by not returning early in rtl_prepare_power_down when dash_enabled.
    While this fixes WoL, it still kills the OOB RTL8117 remote management
    BMC connection. Fix by not calling rtl8168_driver_stop if WoL is enabled.
    
    Fixes: 065c27c184d6 ("r8169: phy power ops")
    Signed-off-by: René Rebe <[email protected]>
    Cc: [email protected]
    Reviewed-by: Heiner Kallweit <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
rculist: Add hlist_nulls_replace_rcu() and hlist_nulls_replace_init_rcu() [+ + +]
Author: Xuanqiang Luo <[email protected]>
Date:   Wed Oct 15 10:02:34 2025 +0800

    rculist: Add hlist_nulls_replace_rcu() and hlist_nulls_replace_init_rcu()
    
    [ Upstream commit 9c4609225ec1cb551006d6a03c7c4ad8cb5584c0 ]
    
    Add two functions to atomically replace RCU-protected hlist_nulls entries.
    
    Keep using WRITE_ONCE() to assign values to ->next and ->pprev, as
    mentioned in the patch below:
    commit efd04f8a8b45 ("rcu: Use WRITE_ONCE() for assignments to ->next for
    rculist_nulls")
    commit 860c8802ace1 ("rcu: Use WRITE_ONCE() for assignments to ->pprev for
    hlist_nulls")
    
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Frederic Weisbecker <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Signed-off-by: Xuanqiang Luo <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 1532ed0d0753 ("inet: Avoid ehash lookup race in inet_ehash_insert()")
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/bnxt_re: fix dma_free_coherent() pointer [+ + +]
Author: Thomas Fourier <[email protected]>
Date:   Tue Dec 30 09:51:21 2025 +0100

    RDMA/bnxt_re: fix dma_free_coherent() pointer
    
    [ Upstream commit fcd431a9627f272b4c0bec445eba365fe2232a94 ]
    
    The dma_alloc_coherent() allocates a dma-mapped buffer, pbl->pg_arr[i].
    The dma_free_coherent() should pass the same buffer to
    dma_free_coherent() and not page-aligned.
    
    Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver")
    Signed-off-by: Thomas Fourier <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

RDMA/bnxt_re: Fix IB_SEND_IP_CSUM handling in post_send [+ + +]
Author: Alok Tiwari <[email protected]>
Date:   Fri Dec 19 01:32:57 2025 -0800

    RDMA/bnxt_re: Fix IB_SEND_IP_CSUM handling in post_send
    
    [ Upstream commit f01765a2361323e78e3d91b1cb1d5527a83c5cf7 ]
    
    The bnxt_re SEND path checks wr->send_flags to enable features such as
    IP checksum offload. However, send_flags is a bitmask and may contain
    multiple flags (e.g. IB_SEND_SIGNALED | IB_SEND_IP_CSUM), while the
    existing code uses a switch() statement that only matches when
    send_flags is exactly IB_SEND_IP_CSUM.
    
    As a result, checksum offload is not enabled when additional SEND
    flags are present.
    
    Replace the switch() with a bitmask test:
    
        if (wr->send_flags & IB_SEND_IP_CSUM)
    
    This ensures IP checksum offload is enabled correctly when multiple
    SEND flags are used.
    
    Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver")
    Signed-off-by: Alok Tiwari <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Kalesh AP <[email protected]>
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

RDMA/bnxt_re: Fix incorrect BAR check in bnxt_qplib_map_creq_db() [+ + +]
Author: Alok Tiwari <[email protected]>
Date:   Wed Dec 17 02:01:41 2025 -0800

    RDMA/bnxt_re: Fix incorrect BAR check in bnxt_qplib_map_creq_db()
    
    [ Upstream commit 145a417a39d7efbc881f52e829817376972b278c ]
    
    RCFW_COMM_CONS_PCI_BAR_REGION is defined as BAR 2, so checking
    !creq_db->reg.bar_id is incorrect and always false.
    
    pci_resource_start() returns the BAR base address, and a value of 0
    indicates that the BAR is unassigned. Update the condition to test
    bar_base == 0 instead.
    
    This ensures the driver detects and logs an error for an unassigned
    RCFW communication BAR.
    
    Fixes: cee0c7bba486 ("RDMA/bnxt_re: Refactor command queue management code")
    Signed-off-by: Alok Tiwari <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Kalesh AP <[email protected]>
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

RDMA/bnxt_re: Fix to use correct page size for PDE table [+ + +]
Author: Kalesh AP <[email protected]>
Date:   Tue Dec 23 18:48:55 2025 +0530

    RDMA/bnxt_re: Fix to use correct page size for PDE table
    
    [ Upstream commit 3d70e0fb0f289b0c778041c5bb04d099e1aa7c1c ]
    
    In bnxt_qplib_alloc_init_hwq(), while allocating memory for PDE table
    driver incorrectly is using the "pg_size" value passed to the function.
    Fixed to use the right value 4K. Also, fixed the allocation size for
    PBL table.
    
    Fixes: 0c4dcd602817 ("RDMA/bnxt_re: Refactor hardware queue memory allocation")
    Signed-off-by: Damodharam Ammepalli <[email protected]>
    Signed-off-by: Kalesh AP <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Selvin Xavier <[email protected]>
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/cm: Fix leaking the multicast GID table reference [+ + +]
Author: Jason Gunthorpe <[email protected]>
Date:   Fri Nov 28 20:53:21 2025 -0400

    RDMA/cm: Fix leaking the multicast GID table reference
    
    commit 57f3cb6c84159d12ba343574df2115fb18dd83ca upstream.
    
    If the CM ID is destroyed while the CM event for multicast creating is
    still queued the cancel_work_sync() will prevent the work from running
    which also prevents destroying the ah_attr. This leaks a refcount and
    triggers a WARN:
    
       GID entry ref leak for dev syz1 index 2 ref=573
       WARNING: CPU: 1 PID: 655 at drivers/infiniband/core/cache.c:809 release_gid_table drivers/infiniband/core/cache.c:806 [inline]
       WARNING: CPU: 1 PID: 655 at drivers/infiniband/core/cache.c:809 gid_table_release_one+0x284/0x3cc drivers/infiniband/core/cache.c:886
    
    Destroy the ah_attr after canceling the work, it is safe to call this
    twice.
    
    Link: https://patch.msgid.link/r/[email protected]
    Cc: [email protected]
    Fixes: fe454dc31e84 ("RDMA/ucma: Fix use-after-free bug in ucma_create_uevent")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/all/[email protected]
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
RDMA/core: Check for the presence of LS_NLA_TYPE_DGID correctly [+ + +]
Author: Jason Gunthorpe <[email protected]>
Date:   Fri Nov 28 13:37:28 2025 -0400

    RDMA/core: Check for the presence of LS_NLA_TYPE_DGID correctly
    
    commit a7b8e876e0ef0232b8076972c57ce9a7286b47ca upstream.
    
    The netlink response for RDMA_NL_LS_OP_IP_RESOLVE should always have a
    LS_NLA_TYPE_DGID attribute, it is invalid if it does not.
    
    Use the nl parsing logic properly and call nla_parse_deprecated() to fill
    the nlattrs array and then directly index that array to get the data for
    the DGID. Just fail if it is NULL.
    
    Remove the for loop searching for the nla, and squash the validation and
    parsing into one function.
    
    Fixes an uninitialized read from the stack triggered by userspace if it
    does not provide the DGID to a kernel initiated RDMA_NL_LS_OP_IP_RESOLVE
    query.
    
        BUG: KMSAN: uninit-value in hex_byte_pack include/linux/hex.h:13 [inline]
        BUG: KMSAN: uninit-value in ip6_string+0xef4/0x13a0 lib/vsprintf.c:1490
         hex_byte_pack include/linux/hex.h:13 [inline]
         ip6_string+0xef4/0x13a0 lib/vsprintf.c:1490
         ip6_addr_string+0x18a/0x3e0 lib/vsprintf.c:1509
         ip_addr_string+0x245/0xee0 lib/vsprintf.c:1633
         pointer+0xc09/0x1bd0 lib/vsprintf.c:2542
         vsnprintf+0xf8a/0x1bd0 lib/vsprintf.c:2930
         vprintk_store+0x3ae/0x1530 kernel/printk/printk.c:2279
         vprintk_emit+0x307/0xcd0 kernel/printk/printk.c:2426
         vprintk_default+0x3f/0x50 kernel/printk/printk.c:2465
         vprintk+0x36/0x50 kernel/printk/printk_safe.c:82
         _printk+0x17e/0x1b0 kernel/printk/printk.c:2475
         ib_nl_process_good_ip_rsep drivers/infiniband/core/addr.c:128 [inline]
         ib_nl_handle_ip_res_resp+0x963/0x9d0 drivers/infiniband/core/addr.c:141
         rdma_nl_rcv_msg drivers/infiniband/core/netlink.c:-1 [inline]
         rdma_nl_rcv_skb drivers/infiniband/core/netlink.c:239 [inline]
         rdma_nl_rcv+0xefa/0x11c0 drivers/infiniband/core/netlink.c:259
         netlink_unicast_kernel net/netlink/af_netlink.c:1320 [inline]
         netlink_unicast+0xf04/0x12b0 net/netlink/af_netlink.c:1346
         netlink_sendmsg+0x10b3/0x1250 net/netlink/af_netlink.c:1896
         sock_sendmsg_nosec net/socket.c:714 [inline]
         __sock_sendmsg+0x333/0x3d0 net/socket.c:729
         ____sys_sendmsg+0x7e0/0xd80 net/socket.c:2617
         ___sys_sendmsg+0x271/0x3b0 net/socket.c:2671
         __sys_sendmsg+0x1aa/0x300 net/socket.c:2703
         __compat_sys_sendmsg net/compat.c:346 [inline]
         __do_compat_sys_sendmsg net/compat.c:353 [inline]
         __se_compat_sys_sendmsg net/compat.c:350 [inline]
         __ia32_compat_sys_sendmsg+0xa4/0x100 net/compat.c:350
         ia32_sys_call+0x3f6c/0x4310 arch/x86/include/generated/asm/syscalls_32.h:371
         do_syscall_32_irqs_on arch/x86/entry/syscall_32.c:83 [inline]
         __do_fast_syscall_32+0xb0/0x150 arch/x86/entry/syscall_32.c:306
         do_fast_syscall_32+0x38/0x80 arch/x86/entry/syscall_32.c:331
         do_SYSENTER_32+0x1f/0x30 arch/x86/entry/syscall_32.c:3
    
    Link: https://patch.msgid.link/r/[email protected]
    Cc: [email protected]
    Fixes: ae43f8286730 ("IB/core: Add IP to GID netlink offload")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

RDMA/core: Fix "KASAN: slab-use-after-free Read in ib_register_device" problem [+ + +]
Author: Zhu Yanjun <[email protected]>
Date:   Tue May 6 17:10:08 2025 +0200

    RDMA/core: Fix "KASAN: slab-use-after-free Read in ib_register_device" problem
    
    commit d0706bfd3ee40923c001c6827b786a309e2a8713 upstream.
    
    Call Trace:
    
     __dump_stack lib/dump_stack.c:94 [inline]
     dump_stack_lvl+0x116/0x1f0 lib/dump_stack.c:120
     print_address_description mm/kasan/report.c:408 [inline]
     print_report+0xc3/0x670 mm/kasan/report.c:521
     kasan_report+0xe0/0x110 mm/kasan/report.c:634
     strlen+0x93/0xa0 lib/string.c:420
     __fortify_strlen include/linux/fortify-string.h:268 [inline]
     get_kobj_path_length lib/kobject.c:118 [inline]
     kobject_get_path+0x3f/0x2a0 lib/kobject.c:158
     kobject_uevent_env+0x289/0x1870 lib/kobject_uevent.c:545
     ib_register_device drivers/infiniband/core/device.c:1472 [inline]
     ib_register_device+0x8cf/0xe00 drivers/infiniband/core/device.c:1393
     rxe_register_device+0x275/0x320 drivers/infiniband/sw/rxe/rxe_verbs.c:1552
     rxe_net_add+0x8e/0xe0 drivers/infiniband/sw/rxe/rxe_net.c:550
     rxe_newlink+0x70/0x190 drivers/infiniband/sw/rxe/rxe.c:225
     nldev_newlink+0x3a3/0x680 drivers/infiniband/core/nldev.c:1796
     rdma_nl_rcv_msg+0x387/0x6e0 drivers/infiniband/core/netlink.c:195
     rdma_nl_rcv_skb.constprop.0.isra.0+0x2e5/0x450
     netlink_unicast_kernel net/netlink/af_netlink.c:1313 [inline]
     netlink_unicast+0x53a/0x7f0 net/netlink/af_netlink.c:1339
     netlink_sendmsg+0x8d1/0xdd0 net/netlink/af_netlink.c:1883
     sock_sendmsg_nosec net/socket.c:712 [inline]
     __sock_sendmsg net/socket.c:727 [inline]
     ____sys_sendmsg+0xa95/0xc70 net/socket.c:2566
     ___sys_sendmsg+0x134/0x1d0 net/socket.c:2620
     __sys_sendmsg+0x16d/0x220 net/socket.c:2652
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xcd/0x260 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    This problem is similar to the problem that the
    commit 1d6a9e7449e2 ("RDMA/core: Fix use-after-free when rename device name")
    fixes.
    
    The root cause is: the function ib_device_rename() renames the name with
    lock. But in the function kobject_uevent(), this name is accessed without
    lock protection at the same time.
    
    The solution is to add the lock protection when this name is accessed in
    the function kobject_uevent().
    
    Fixes: 779e0bf47632 ("RDMA/core: Do not indicate device ready when device enablement fails")
    Link: https://patch.msgid.link/r/[email protected]
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=e2ce9e275ecc70a30b72
    Signed-off-by: Zhu Yanjun <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    [ Ajay: Modified to apply on v5.10.y-v6.6.y
            ib_device_notify_register() not present in v5.10.y-v6.6.y,
            so directly added lock for kobject_uevent() ]
    Signed-off-by: Ajay Kaher <[email protected]>
    Signed-off-by: Shivani Agarwal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

RDMA/core: Fix logic error in ib_get_gids_from_rdma_hdr() [+ + +]
Author: Jang Ingyu <[email protected]>
Date:   Fri Dec 19 13:15:08 2025 +0900

    RDMA/core: Fix logic error in ib_get_gids_from_rdma_hdr()
    
    [ Upstream commit 8aaa848eaddd9ef8680fc6aafbd3a0646da5df40 ]
    
    Fix missing comparison operator for RDMA_NETWORK_ROCE_V1 in the
    conditional statement. The constant was used directly instead of
    being compared with net_type, causing the condition to always
    evaluate to true.
    
    Fixes: 1c15b4f2a42f ("RDMA/core: Modify enum ib_gid_type and enum rdma_network_type")
    Signed-off-by: Jang Ingyu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/efa: Remove possible negative shift [+ + +]
Author: Michael Margolin <[email protected]>
Date:   Wed Dec 10 17:36:56 2025 +0000

    RDMA/efa: Remove possible negative shift
    
    [ Upstream commit 85463eb6a46caf2f1e0e1a6d0731f2f3bab17780 ]
    
    The page size used for device might in some cases be smaller than
    PAGE_SIZE what results in a negative shift when calculating the number of
    host pages in PAGE_SIZE for a debug log. Remove the debug line together
    with the calculation.
    
    Fixes: 40909f664d27 ("RDMA/efa: Add EFA verbs implementation")
    Link: https://patch.msgid.link/r/[email protected]
    Reviewed-by: Tom Sela <[email protected]>
    Reviewed-by: Yonatan Nachum <[email protected]>
    Signed-off-by: Michael Margolin <[email protected]>
    Reviewed-by: Gal Pressman <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/irdma: avoid invalid read in irdma_net_event [+ + +]
Author: Michal Schmidt <[email protected]>
Date:   Thu Nov 27 15:31:50 2025 +0100

    RDMA/irdma: avoid invalid read in irdma_net_event
    
    [ Upstream commit 6f05611728e9d0ab024832a4f1abb74a5f5d0bb0 ]
    
    irdma_net_event() should not dereference anything from "neigh" (alias
    "ptr") until it has checked that the event is NETEVENT_NEIGH_UPDATE.
    Other events come with different structures pointed to by "ptr" and they
    may be smaller than struct neighbour.
    
    Move the read of neigh->dev under the NETEVENT_NEIGH_UPDATE case.
    
    The bug is mostly harmless, but it triggers KASAN on debug kernels:
    
     BUG: KASAN: stack-out-of-bounds in irdma_net_event+0x32e/0x3b0 [irdma]
     Read of size 8 at addr ffffc900075e07f0 by task kworker/27:2/542554
    
     CPU: 27 PID: 542554 Comm: kworker/27:2 Kdump: loaded Not tainted 5.14.0-630.el9.x86_64+debug #1
     Hardware name: [...]
     Workqueue: events rt6_probe_deferred
     Call Trace:
      <IRQ>
      dump_stack_lvl+0x60/0xb0
      print_address_description.constprop.0+0x2c/0x3f0
      print_report+0xb4/0x270
      kasan_report+0x92/0xc0
      irdma_net_event+0x32e/0x3b0 [irdma]
      notifier_call_chain+0x9e/0x180
      atomic_notifier_call_chain+0x5c/0x110
      rt6_do_redirect+0xb91/0x1080
      tcp_v6_err+0xe9b/0x13e0
      icmpv6_notify+0x2b2/0x630
      ndisc_redirect_rcv+0x328/0x530
      icmpv6_rcv+0xc16/0x1360
      ip6_protocol_deliver_rcu+0xb84/0x12e0
      ip6_input_finish+0x117/0x240
      ip6_input+0xc4/0x370
      ipv6_rcv+0x420/0x7d0
      __netif_receive_skb_one_core+0x118/0x1b0
      process_backlog+0xd1/0x5d0
      __napi_poll.constprop.0+0xa3/0x440
      net_rx_action+0x78a/0xba0
      handle_softirqs+0x2d4/0x9c0
      do_softirq+0xad/0xe0
      </IRQ>
    
    Fixes: 915cc7ac0f8e ("RDMA/irdma: Add miscellaneous utility definitions")
    Link: https://patch.msgid.link/r/[email protected]
    Signed-off-by: Michal Schmidt <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

RDMA/irdma: Fix data race in irdma_free_pble [+ + +]
Author: Krzysztof Czurylo <[email protected]>
Date:   Mon Nov 24 20:53:43 2025 -0600

    RDMA/irdma: Fix data race in irdma_free_pble
    
    [ Upstream commit 81f44409fb4f027d1e6d54edbeba5156ad94b214 ]
    
    Protects pble_rsrc counters with mutex to prevent data race.
    Fixes the following data race in irdma_free_pble reported by KCSAN:
    
    BUG: KCSAN: data-race in irdma_free_pble [irdma] / irdma_free_pble [irdma]
    
    write to 0xffff91430baa0078 of 8 bytes by task 16956 on cpu 5:
     irdma_free_pble+0x3b/0xb0 [irdma]
     irdma_dereg_mr+0x108/0x110 [irdma]
     ib_dereg_mr_user+0x74/0x160 [ib_core]
     uverbs_free_mr+0x26/0x30 [ib_uverbs]
     destroy_hw_idr_uobject+0x4a/0x90 [ib_uverbs]
     uverbs_destroy_uobject+0x7b/0x330 [ib_uverbs]
     uobj_destroy+0x61/0xb0 [ib_uverbs]
     ib_uverbs_run_method+0x1f2/0x380 [ib_uverbs]
     ib_uverbs_cmd_verbs+0x365/0x440 [ib_uverbs]
     ib_uverbs_ioctl+0x111/0x190 [ib_uverbs]
     __x64_sys_ioctl+0xc9/0x100
     do_syscall_64+0x44/0xa0
     entry_SYSCALL_64_after_hwframe+0x6e/0xd8
    
    read to 0xffff91430baa0078 of 8 bytes by task 16953 on cpu 2:
     irdma_free_pble+0x23/0xb0 [irdma]
     irdma_dereg_mr+0x108/0x110 [irdma]
     ib_dereg_mr_user+0x74/0x160 [ib_core]
     uverbs_free_mr+0x26/0x30 [ib_uverbs]
     destroy_hw_idr_uobject+0x4a/0x90 [ib_uverbs]
     uverbs_destroy_uobject+0x7b/0x330 [ib_uverbs]
     uobj_destroy+0x61/0xb0 [ib_uverbs]
     ib_uverbs_run_method+0x1f2/0x380 [ib_uverbs]
     ib_uverbs_cmd_verbs+0x365/0x440 [ib_uverbs]
     ib_uverbs_ioctl+0x111/0x190 [ib_uverbs]
     __x64_sys_ioctl+0xc9/0x100
     do_syscall_64+0x44/0xa0
     entry_SYSCALL_64_after_hwframe+0x6e/0xd8
    
    value changed: 0x0000000000005a62 -> 0x0000000000005a68
    
    Fixes: e8c4dbc2fcac ("RDMA/irdma: Add PBLE resource manager")
    Signed-off-by: Krzysztof Czurylo <[email protected]>
    Signed-off-by: Tatyana Nikolova <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

RDMA/irdma: Fix data race in irdma_sc_ccq_arm [+ + +]
Author: Krzysztof Czurylo <[email protected]>
Date:   Mon Nov 24 20:53:42 2025 -0600

    RDMA/irdma: Fix data race in irdma_sc_ccq_arm
    
    [ Upstream commit a521928164433de44fed5aaf5f49aeb3f1fb96f5 ]
    
    Adds a lock around irdma_sc_ccq_arm body to prevent inter-thread data race.
    Fixes data race in irdma_sc_ccq_arm() reported by KCSAN:
    
    BUG: KCSAN: data-race in irdma_sc_ccq_arm [irdma] / irdma_sc_ccq_arm [irdma]
    
    read to 0xffff9d51b4034220 of 8 bytes by task 255 on cpu 11:
     irdma_sc_ccq_arm+0x36/0xd0 [irdma]
     irdma_cqp_ce_handler+0x300/0x310 [irdma]
     cqp_compl_worker+0x2a/0x40 [irdma]
     process_one_work+0x402/0x7e0
     worker_thread+0xb3/0x6d0
     kthread+0x178/0x1a0
     ret_from_fork+0x2c/0x50
    
    write to 0xffff9d51b4034220 of 8 bytes by task 89 on cpu 3:
     irdma_sc_ccq_arm+0x7e/0xd0 [irdma]
     irdma_cqp_ce_handler+0x300/0x310 [irdma]
     irdma_wait_event+0xd4/0x3e0 [irdma]
     irdma_handle_cqp_op+0xa5/0x220 [irdma]
     irdma_hw_flush_wqes+0xb1/0x300 [irdma]
     irdma_flush_wqes+0x22e/0x3a0 [irdma]
     irdma_cm_disconn_true+0x4c7/0x5d0 [irdma]
     irdma_disconnect_worker+0x35/0x50 [irdma]
     process_one_work+0x402/0x7e0
     worker_thread+0xb3/0x6d0
     kthread+0x178/0x1a0
     ret_from_fork+0x2c/0x50
    
    value changed: 0x0000000000024000 -> 0x0000000000034000
    
    Fixes: 3f49d6842569 ("RDMA/irdma: Implement HW Admin Queue OPs")
    Signed-off-by: Krzysztof Czurylo <[email protected]>
    Signed-off-by: Tatyana Nikolova <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/rtrs: Fix clt_path::max_pages_per_mr calculation [+ + +]
Author: Honggang LI <[email protected]>
Date:   Mon Dec 29 10:56:17 2025 +0800

    RDMA/rtrs: Fix clt_path::max_pages_per_mr calculation
    
    [ Upstream commit 43bd09d5b750f700499ae8ec45fd41a4c48673e6 ]
    
    If device max_mr_size bits in the range [mr_page_shift+31:mr_page_shift]
    are zero, the `min3` function will set clt_path::max_pages_per_mr to
    zero.
    
    `alloc_path_reqs` will pass zero, which is invalid, as the third parameter
    to `ib_alloc_mr`.
    
    Fixes: 6a98d71daea1 ("RDMA/rtrs: client: main functionality")
    Signed-off-by: Honggang LI <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

RDMA/rtrs: server: Fix error handling in get_or_create_srv [+ + +]
Author: Ma Ke <[email protected]>
Date:   Mon Nov 10 08:51:58 2025 +0800

    RDMA/rtrs: server: Fix error handling in get_or_create_srv
    
    [ Upstream commit a338d6e849ab31f32c08b4fcac11c0c72afbb150 ]
    
    After device_initialize() is called, use put_device() to release the
    device according to kernel device management rules. While direct
    kfree() work in this case, using put_device() is more correct.
    
    Found by code review.
    
    Fixes: 9cb837480424 ("RDMA/rtrs: server: main functionality")
    Signed-off-by: Ma Ke <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Acked-by: Jack Wang <[email protected]>
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
regulator: core: disable supply if enabling main regulator fails [+ + +]
Author: Gabor Juhos <[email protected]>
Date:   Fri Nov 7 18:10:08 2025 +0100

    regulator: core: disable supply if enabling main regulator fails
    
    [ Upstream commit fb1ebb10468da414d57153ddebaab29c38ef1a78 ]
    
    For 'always-on' and 'boot-on' regulators, the set_machine_constraints()
    may enable supply before enabling the main regulator, however if the
    latter fails, the function returns with an error but the supply remains
    enabled.
    
    When this happens, the regulator_register() function continues on the
    error path where it puts the supply regulator. Since enabling the supply
    is not balanced with a disable call, a warning similar to the following
    gets issued from _regulator_put():
    
        [    1.603889] WARNING: CPU: 2 PID: 44 at _regulator_put+0x8c/0xa0
        [    1.603908] Modules linked in:
        [    1.603926] CPU: 2 UID: 0 PID: 44 Comm: kworker/u16:3 Not tainted 6.18.0-rc4 #0 NONE
        [    1.603938] Hardware name: Qualcomm Technologies, Inc. IPQ9574/AP-AL02-C7 (DT)
        [    1.603945] Workqueue: async async_run_entry_fn
        [    1.603958] pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
        [    1.603967] pc : _regulator_put+0x8c/0xa0
        [    1.603976] lr : _regulator_put+0x7c/0xa0
        ...
        [    1.604140] Call trace:
        [    1.604145]  _regulator_put+0x8c/0xa0 (P)
        [    1.604156]  regulator_register+0x2ec/0xbf0
        [    1.604166]  devm_regulator_register+0x60/0xb0
        [    1.604178]  rpm_reg_probe+0x120/0x208
        [    1.604187]  platform_probe+0x64/0xa8
        ...
    
    In order to avoid this, change the set_machine_constraints() function to
    disable the supply if enabling the main regulator fails.
    
    Fixes: 05f224ca6693 ("regulator: core: Clean enabling always-on regulators + their supplies")
    Signed-off-by: Gabor Juhos <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

regulator: core: Protect regulator_supply_alias_list with regulator_list_mutex [+ + +]
Author: sparkhuang <[email protected]>
Date:   Thu Nov 27 10:57:16 2025 +0800

    regulator: core: Protect regulator_supply_alias_list with regulator_list_mutex
    
    [ Upstream commit 0cc15a10c3b4ab14cd71b779fd5c9ca0cb2bc30d ]
    
    regulator_supply_alias_list was accessed without any locking in
    regulator_supply_alias(), regulator_register_supply_alias(), and
    regulator_unregister_supply_alias(). Concurrent registration,
    unregistration and lookups can race, leading to:
    
    1 use-after-free if an alias entry is removed while being read,
    2 duplicate entries when two threads register the same alias,
    3 inconsistent alias mappings observed by consumers.
    
    Protect all traversals, insertions and deletions on
    regulator_supply_alias_list with the existing regulator_list_mutex.
    
    Fixes: a06ccd9c3785f ("regulator: core: Add ability to create a lookup alias for supply")
    Signed-off-by: sparkhuang <[email protected]>
    Reviewed-by: Charles Keepax <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Reinstate "resource: avoid unnecessary lookups in find_next_iomem_res()" [+ + +]
Author: Ilias Stamatis <[email protected]>
Date:   Mon Nov 24 16:53:49 2025 +0000

    Reinstate "resource: avoid unnecessary lookups in find_next_iomem_res()"
    
    [ Upstream commit 6fb3acdebf65a72df0a95f9fd2c901ff2bc9a3a2 ]
    
    Commit 97523a4edb7b ("kernel/resource: remove first_lvl / siblings_only
    logic") removed an optimization introduced by commit 756398750e11
    ("resource: avoid unnecessary lookups in find_next_iomem_res()").  That
    was not called out in the message of the first commit explicitly so it's
    not entirely clear whether removing the optimization happened
    inadvertently or not.
    
    As the original commit message of the optimization explains there is no
    point considering the children of a subtree in find_next_iomem_res() if
    the top level range does not match.
    
    Reinstating the optimization results in performance improvements in
    systems where /proc/iomem is ~5k lines long.  Calling mmap() on /dev/mem
    in such platforms takes 700-1500μs without the optimisation and 10-50μs
    with the optimisation.
    
    Note that even though commit 97523a4edb7b removed the 'sibling_only'
    parameter from next_resource(), newer kernels have basically reinstated it
    under the name 'skip_children'.
    
    Link: https://lore.kernel.org/all/[email protected]/T/#u
    Fixes: 97523a4edb7b ("kernel/resource: remove first_lvl / siblings_only logic")
    Signed-off-by: Ilias Stamatis <[email protected]>
    Acked-by: David Hildenbrand (Red Hat) <[email protected]>
    Cc: Andriy Shevchenko <[email protected]>
    Cc: Baoquan He <[email protected]>
    Cc: "Huang, Ying" <[email protected]>
    Cc: Nadav Amit <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
remoteproc: qcom_q6v5_wcss: fix parsing of qcom,halt-regs [+ + +]
Author: Alexandru Gagniuc <[email protected]>
Date:   Fri Nov 28 19:32:05 2025 -0600

    remoteproc: qcom_q6v5_wcss: fix parsing of qcom,halt-regs
    
    [ Upstream commit 7e81fa8d809ed1e67ae9ecd52d20a20c2c65d877 ]
    
    The "qcom,halt-regs" consists of a phandle reference followed by the
    three offsets within syscon for halt registers. Thus, we need to
    request 4 integers from of_property_read_variable_u32_array(), with
    the halt_reg ofsets at indexes 1, 2, and 3. Offset 0 is the phandle.
    
    With MAX_HALT_REG at 3, of_property_read_variable_u32_array() returns
    -EOVERFLOW, causing .probe() to fail.
    
    Increase MAX_HALT_REG to 4, and update the indexes accordingly.
    
    Fixes: 0af65b9b915e ("remoteproc: qcom: wcss: Add non pas wcss Q6 support for QCS404")
    Signed-off-by: Alexandru Gagniuc <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
reset: fix BIT macro reference [+ + +]
Author: Encrow Thorne <[email protected]>
Date:   Mon Nov 10 14:10:37 2025 +0800

    reset: fix BIT macro reference
    
    [ Upstream commit f3d8b64ee46c9b4b0b82b1a4642027728bac95b8 ]
    
    RESET_CONTROL_FLAGS_BIT_* macros use BIT(), but reset.h does not
    include bits.h. This causes compilation errors when including
    reset.h standalone.
    
    Include bits.h to make reset.h self-contained.
    
    Suggested-by: Troy Mitchell <[email protected]>
    Reviewed-by: Troy Mitchell <[email protected]>
    Reviewed-by: Philipp Zabel <[email protected]>
    Signed-off-by: Encrow Thorne <[email protected]>
    Signed-off-by: Philipp Zabel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
resource: introduce is_type_match() helper and use it [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Wed Sep 25 18:43:35 2024 +0300

    resource: introduce is_type_match() helper and use it
    
    [ Upstream commit ba1eccc114ffc62c4495a5e15659190fa2c42308 ]
    
    There are already a couple of places where we may replace a few lines of
    code by calling a helper, which increases readability while deduplicating
    the code.
    
    Introduce is_type_match() helper and use it.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Andy Shevchenko <[email protected]>
    Cc: Rasmus Villemoes <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Stable-dep-of: 6fb3acdebf65 ("Reinstate "resource: avoid unnecessary lookups in find_next_iomem_res()"")
    Signed-off-by: Sasha Levin <[email protected]>

resource: replace open coded resource_intersection() [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Wed Sep 25 18:43:34 2024 +0300

    resource: replace open coded resource_intersection()
    
    [ Upstream commit 5c1edea773c98707fbb23d1df168bcff52f61e4b ]
    
    Patch series "resource: A couple of cleanups".
    
    A couple of ad-hoc cleanups since there was a recent development of
    the code in question. No functional changes intended.
    
    This patch (of 2):
    
    __region_intersects() uses open coded resource_intersection().  Replace it
    with existing API which also make more clear what we are checking.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Andy Shevchenko <[email protected]>
    Cc: Rasmus Villemoes <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Stable-dep-of: 6fb3acdebf65 ("Reinstate "resource: avoid unnecessary lookups in find_next_iomem_res()"")
    Signed-off-by: Sasha Levin <[email protected]>

resource: Replace printk(KERN_WARNING) by pr_warn(), printk() by pr_info() [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Wed Nov 9 17:56:17 2022 +0200

    resource: Replace printk(KERN_WARNING) by pr_warn(), printk() by pr_info()
    
    [ Upstream commit 2a4e628570d42fcc13a94f1acf25e3cfeaec08f6 ]
    
    Replace printk(KERN_WARNING) by pr_warn() and printk() by pr_info().
    
    While at it, use %pa for the resource_size_t variables. With that,
    for the sake of consistency, introduce a temporary variable for
    the end address in iomem_map_sanity_check() like it's done in another
    function in the same module.
    
    Signed-off-by: Andy Shevchenko <[email protected]>
    Reviewed-by: Rafael J. Wysocki <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: 6fb3acdebf65 ("Reinstate "resource: avoid unnecessary lookups in find_next_iomem_res()"")
    Signed-off-by: Sasha Levin <[email protected]>

resource: Reuse for_each_resource() macro [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Tue Sep 12 19:53:10 2023 +0300

    resource: Reuse for_each_resource() macro
    
    [ Upstream commit 441f0dd8fa035a2c7cfe972047bb905d3be05c1b ]
    
    We have a few places where for_each_resource() is open coded.
    Replace that by the macro. This makes code easier to read and
    understand.
    
    With this, compile r_next() only for CONFIG_PROC_FS=y.
    
    Signed-off-by: Andy Shevchenko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: 6fb3acdebf65 ("Reinstate "resource: avoid unnecessary lookups in find_next_iomem_res()"")
    Signed-off-by: Sasha Levin <[email protected]>

 
Revert "iommu/amd: Skip enabling command/event buffers for kdump" [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Fri Jan 9 11:48:34 2026 +0100

    Revert "iommu/amd: Skip enabling command/event buffers for kdump"
    
    This reverts commit f33890f95140660923003ba1e2f114dee20e691b which is
    commit 9be15fbfc6c5c89c22cf6e209f66ea43ee0e58bb upstream.
    
    This causes problems in older kernel trees as SNP host kdump is not
    supported in them, so drop it from the stable branches.
    
    Reported-by: Ashish Kalra <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Cc: Vasant Hegde <[email protected]>
    Cc: Sairaj Kodilkar <[email protected]>
    Cc: Joerg Roedel <[email protected]>
    Cc: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "nfs: clear SB_RDONLY before getting superblock" [+ + +]
Author: Trond Myklebust <[email protected]>
Date:   Fri Nov 28 13:39:38 2025 -0500

    Revert "nfs: clear SB_RDONLY before getting superblock"
    
    [ Upstream commit d216b698d44e33417ad4cc796cb04ccddbb8c0ee ]
    
    This reverts commit 8cd9b785943c57a136536250da80ba1eb6f8eb18.
    
    Silently ignoring the "ro" and "rw" mount options causes user confusion,
    and regressions.
    
    Reported-by: Alkis Georgopoulos<[email protected]>
    Cc: Li Lingfeng <[email protected]>
    Fixes: 8cd9b785943c ("nfs: clear SB_RDONLY before getting superblock")
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Revert "nfs: ignore SB_RDONLY when mounting nfs" [+ + +]
Author: Trond Myklebust <[email protected]>
Date:   Fri Nov 28 13:39:45 2025 -0500

    Revert "nfs: ignore SB_RDONLY when mounting nfs"
    
    [ Upstream commit d4a26d34f1946142f9d32e540490e4926ae9a46b ]
    
    This reverts commit 52cb7f8f177878b4f22397b9c4d2c8f743766be3.
    
    Silently ignoring the "ro" and "rw" mount options causes user confusion,
    and regressions.
    
    Reported-by: Alkis Georgopoulos<[email protected]>
    Cc: Li Lingfeng <[email protected]>
    Fixes: 52cb7f8f1778 ("nfs: ignore SB_RDONLY when mounting nfs")
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Revert "nfs: ignore SB_RDONLY when remounting nfs" [+ + +]
Author: Trond Myklebust <[email protected]>
Date:   Fri Nov 28 13:39:07 2025 -0500

    Revert "nfs: ignore SB_RDONLY when remounting nfs"
    
    [ Upstream commit 400fa37afbb11a601c204b72af0f0e5bc2db695c ]
    
    This reverts commit 80c4de6ab44c14e910117a02f2f8241ffc6ec54a.
    
    Silently ignoring the "ro" and "rw" mount options causes user confusion,
    and regressions.
    
    Reported-by: Alkis Georgopoulos<[email protected]>
    Cc: Li Lingfeng <[email protected]>
    Fixes: 80c4de6ab44c ("nfs: ignore SB_RDONLY when remounting nfs")
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Revert "xfrm: destroy xfrm_state synchronously on net exit path" [+ + +]
Author: Sabrina Dubroca <[email protected]>
Date:   Tue Jul 29 17:11:53 2025 -0400

    Revert "xfrm: destroy xfrm_state synchronously on net exit path"
    
    [ Upstream commit 2a198bbec6913ae1c90ec963750003c6213668c7 ]
    
    This reverts commit f75a2804da391571563c4b6b29e7797787332673.
    
    With all states (whether user or kern) removed from the hashtables
    during deletion, there's no need for synchronous destruction of
    states. xfrm6_tunnel states still need to have been destroyed (which
    will be the case when its last user is deleted (not destroyed)) so
    that xfrm6_tunnel_free_spi removes it from the per-netns hashtable
    before the netns is destroyed.
    
    This has the benefit of skipping one synchronize_rcu per state (in
    __xfrm_state_destroy(sync=true)) when we exit a netns.
    
    Signed-off-by: Sabrina Dubroca <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RISC-V: KVM: Fix guest page fault within HLV* instructions [+ + +]
Author: Fangyu Yu <[email protected]>
Date:   Fri Nov 21 21:35:43 2025 +0800

    RISC-V: KVM: Fix guest page fault within HLV* instructions
    
    [ Upstream commit 974555d6e417974e63444266e495a06d06c23af5 ]
    
    When executing HLV* instructions at the HS mode, a guest page fault
    may occur when a g-stage page table migration between triggering the
    virtual instruction exception and executing the HLV* instruction.
    
    This may be a corner case, and one simpler way to handle this is to
    re-execute the instruction where the virtual  instruction exception
    occurred, and the guest page fault will be automatically handled.
    
    Fixes: b91f0e4cb8a3 ("RISC-V: KVM: Factor-out instruction emulation into separate sources")
    Signed-off-by: Fangyu Yu <[email protected]>
    Reviewed-by: Anup Patel <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Anup Patel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
rpmsg: glink: fix rpmsg device leak [+ + +]
Author: Srinivas Kandagatla <[email protected]>
Date:   Fri Aug 22 11:00:42 2025 +0100

    rpmsg: glink: fix rpmsg device leak
    
    commit a53e356df548f6b0e82529ef3cc6070f42622189 upstream.
    
    While testing rpmsg-char interface it was noticed that duplicate sysfs
    entries are getting created and below warning is noticed.
    
    Reason for this is that we are leaking rpmsg device pointer, setting it
    null without actually unregistering device.
    Any further attempts to unregister fail because rpdev is NULL,
    resulting in a leak.
    
    Fix this by unregistering rpmsg device before removing its reference
    from rpmsg channel.
    
    sysfs: cannot create duplicate filename '/devices/platform/soc@0/3700000.remot
    eproc/remoteproc/remoteproc1/3700000.remoteproc:glink-edge/3700000.remoteproc:
    glink-edge.adsp_apps.-1.-1'
    [  114.115347] CPU: 0 UID: 0 PID: 9 Comm: kworker/0:0 Not
     tainted 6.16.0-rc4 #7 PREEMPT
    [  114.115355] Hardware name: Qualcomm Technologies, Inc. Robotics RB3gen2 (DT)
    [  114.115358] Workqueue: events qcom_glink_work
    [  114.115371] Call trace:8
    [  114.115374]  show_stack+0x18/0x24 (C)
    [  114.115382]  dump_stack_lvl+0x60/0x80
    [  114.115388]  dump_stack+0x18/0x24
    [  114.115393]  sysfs_warn_dup+0x64/0x80
    [  114.115402]  sysfs_create_dir_ns+0xf4/0x120
    [  114.115409]  kobject_add_internal+0x98/0x260
    [  114.115416]  kobject_add+0x9c/0x108
    [  114.115421]  device_add+0xc4/0x7a0
    [  114.115429]  rpmsg_register_device+0x5c/0xb0
    [  114.115434]  qcom_glink_work+0x4bc/0x820
    [  114.115438]  process_one_work+0x148/0x284
    [  114.115446]  worker_thread+0x2c4/0x3e0
    [  114.115452]  kthread+0x12c/0x204
    [  114.115457]  ret_from_fork+0x10/0x20
    [  114.115464] kobject: kobject_add_internal failed for 3700000.remoteproc:
    glink-edge.adsp_apps.-1.-1 with -EEXIST, don't try to register things with
    the same name in the same directory.
    [  114.250045] rpmsg 3700000.remoteproc:glink-edge.adsp_apps.-1.-1:
    device_add failed: -17
    
    Fixes: 835764ddd9af ("rpmsg: glink: Move the common glink protocol implementation to glink_native.c")
    Cc: [email protected]
    Signed-off-by: Srinivas Kandagatla <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
rtc: gamecube: Check the return value of ioremap() [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Wed Nov 26 16:06:25 2025 +0800

    rtc: gamecube: Check the return value of ioremap()
    
    [ Upstream commit d1220e47e4bd2be8b84bc158f4dea44f2f88b226 ]
    
    The function ioremap() in gamecube_rtc_read_offset_from_sram() can fail
    and return NULL, which is dereferenced without checking, leading to a
    NULL pointer dereference.
    
    Add a check for the return value of ioremap() and return -ENOMEM on
    failure.
    
    Fixes: 86559400b3ef ("rtc: gamecube: Add a RTC driver for the GameCube, Wii and Wii U")
    Signed-off-by: Haotian Zhang <[email protected]>
    Reviewed-by: Link Mauve <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
s390/ap: Don't leak debug feature files if AP instructions are not available [+ + +]
Author: Heiko Carstens <[email protected]>
Date:   Fri Oct 24 12:24:33 2025 +0200

    s390/ap: Don't leak debug feature files if AP instructions are not available
    
    [ Upstream commit 020d5dc57874e58d3ebae398f3fe258f029e3d06 ]
    
    If no AP instructions are available the AP bus module leaks registered
    debug feature files. Change function call order to fix this.
    
    Fixes: cccd85bfb7bf ("s390/zcrypt: Rework debug feature invocations.")
    Reviewed-by: Harald Freudenberger <[email protected]>
    Signed-off-by: Heiko Carstens <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
s390/dasd: Fix gendisk parent after copy pair swap [+ + +]
Author: Stefan Haberland <[email protected]>
Date:   Wed Nov 26 17:06:31 2025 +0100

    s390/dasd: Fix gendisk parent after copy pair swap
    
    commit c943bfc6afb8d0e781b9b7406f36caa8bbf95cb9 upstream.
    
    After a copy pair swap the block device's "device" symlink points to
    the secondary CCW device, but the gendisk's parent remained the
    primary, leaving /sys/block/<dasdx> under the wrong parent.
    
    Move the gendisk to the secondary's device with device_move(), keeping
    the sysfs topology consistent after the swap.
    
    Fixes: 413862caad6f ("s390/dasd: add copy pair swap capability")
    Cc: [email protected] #6.1
    Reviewed-by: Jan Hoeppner <[email protected]>
    Signed-off-by: Stefan Haberland <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
s390/smp: Fix fallback CPU detection [+ + +]
Author: Heiko Carstens <[email protected]>
Date:   Mon Oct 20 16:17:54 2025 +0200

    s390/smp: Fix fallback CPU detection
    
    [ Upstream commit 07a75d08cfa1b883a6e1256666e5f0617ee99231 ]
    
    In case SCLP CPU detection does not work a fallback mechanism using SIGP is
    in place. Since a cleanup this does not work correctly anymore: new CPUs
    are only considered if their type matches the boot CPU.
    
    Before the cleanup the information if a CPU type should be considered was
    also part of a structure generated by the fallback mechanism and indicated
    that a CPU type should not be considered when adding CPUs.
    
    Since the rework a global SCLP state is used instead. If the global SCLP
    state indicates that the CPU type should be considered and the fallback
    mechanism is used, there may be a mismatch with CPU types if CPUs are
    added. This can lead to a system with only a single CPU even tough there
    are many more CPUs.
    
    Address this by simply copying the boot cpu type into the generated data
    structure from the fallback mechanism.
    
    Reported-by: Alexander Egorenkov <[email protected]>
    Fixes: d08d94306e90 ("s390/smp: cleanup core vs. cpu in the SCLP interface")
    Reviewed-by: Mete Durlu <[email protected]>
    Signed-off-by: Heiko Carstens <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
samples: work around glibc redefining some of our defines wrong [+ + +]
Author: Linus Torvalds <[email protected]>
Date:   Fri Nov 21 09:29:02 2025 -0800

    samples: work around glibc redefining some of our defines wrong
    
    [ Upstream commit a48f822908982353c3256e35a089e9e7d0d61580 ]
    
    Apparently as of version 2.42, glibc headers define AT_RENAME_NOREPLACE
    and some of the other flags for renameat2() and friends in <stdio.h>.
    
    Which would all be fine, except for inexplicable reasons glibc decided
    to define them _differently_ from the kernel definitions, which then
    makes some of our sample code that includes both kernel headers and user
    space headers unhappy, because the compiler will (correctly) complain
    about redefining things.
    
    Now, mixing kernel headers and user space headers is always a somewhat
    iffy proposition due to namespacing issues, but it's kind of inevitable
    in our sample and selftest code.  And this is just glibc being stupid.
    
    Those defines come from the kernel, glibc is exposing the kernel
    interfaces, and glibc shouldn't make up some random new expressions for
    these values.
    
    It's not like glibc headers changed the actual result values, but they
    arbitrarily just decided to use a different expression to describe those
    values.  The kernel just does
    
        #define AT_RENAME_NOREPLACE  0x0001
    
    while glibc does
    
        # define RENAME_NOREPLACE (1 << 0)
        # define AT_RENAME_NOREPLACE RENAME_NOREPLACE
    
    instead.  Same value in the end, but very different macro definition.
    
    For absolutely no reason.
    
    This has since been fixed in the glibc development tree, so eventually
    we'll end up with the canonical expressions and no clashes.  But in the
    meantime the broken headers are in the glibc-2.42 release and have made
    it out into distributions.
    
    Do a minimal work-around to make the samples build cleanly by just
    undefining the affected macros in between the user space header include
    and the kernel header includes.
    
    Signed-off-by: Linus Torvalds <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
sched/deadline: only set free_cpus for online runqueues [+ + +]
Author: Doug Berger <[email protected]>
Date:   Thu Aug 14 18:22:36 2025 -0700

    sched/deadline: only set free_cpus for online runqueues
    
    [ Upstream commit 382748c05e58a9f1935f5a653c352422375566ea ]
    
    Commit 16b269436b72 ("sched/deadline: Modify cpudl::free_cpus
    to reflect rd->online") introduced the cpudl_set/clear_freecpu
    functions to allow the cpu_dl::free_cpus mask to be manipulated
    by the deadline scheduler class rq_on/offline callbacks so the
    mask would also reflect this state.
    
    Commit 9659e1eeee28 ("sched/deadline: Remove cpu_active_mask
    from cpudl_find()") removed the check of the cpu_active_mask to
    save some processing on the premise that the cpudl::free_cpus
    mask already reflected the runqueue online state.
    
    Unfortunately, there are cases where it is possible for the
    cpudl_clear function to set the free_cpus bit for a CPU when the
    deadline runqueue is offline. When this occurs while a CPU is
    connected to the default root domain the flag may retain the bad
    state after the CPU has been unplugged. Later, a different CPU
    that is transitioning through the default root domain may push a
    deadline task to the powered down CPU when cpudl_find sees its
    free_cpus bit is set. If this happens the task will not have the
    opportunity to run.
    
    One example is outlined here:
    https://lore.kernel.org/lkml/[email protected]
    
    Another occurs when the last deadline task is migrated from a
    CPU that has an offlined runqueue. The dequeue_task member of
    the deadline scheduler class will eventually call cpudl_clear
    and set the free_cpus bit for the CPU.
    
    This commit modifies the cpudl_clear function to be aware of the
    online state of the deadline runqueue so that the free_cpus mask
    can be updated appropriately.
    
    It is no longer necessary to manage the mask outside of the
    cpudl_set/clear functions so the cpudl_set/clear_freecpu
    functions are removed. In addition, since the free_cpus mask is
    now only updated under the cpudl lock the code was changed to
    use the non-atomic __cpumask functions.
    
    Signed-off-by: Doug Berger <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
sched/fair: Proportional newidle balance [+ + +]
Author: Peter Zijlstra <[email protected]>
Date:   Wed Dec 3 11:25:52 2025 +0000

    sched/fair: Proportional newidle balance
    
    commit 33cf66d88306663d16e4759e9d24766b0aaa2e17 upstream.
    
    Add a randomized algorithm that runs newidle balancing proportional to
    its success rate.
    
    This improves schbench significantly:
    
     6.18-rc4:                      2.22 Mrps/s
     6.18-rc4+revert:               2.04 Mrps/s
     6.18-rc4+revert+random:        2.18 Mrps/S
    
    Conversely, per Adam Li this affects SpecJBB slightly, reducing it by 1%:
    
     6.17:                  -6%
     6.17+revert:            0%
     6.17+revert+random:    -1%
    
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Reviewed-by: Dietmar Eggemann <[email protected]>
    Tested-by: Dietmar Eggemann <[email protected]>
    Tested-by: Chris Mason <[email protected]>
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://patch.msgid.link/[email protected]
    [ Ajay: Modified to apply on v6.1 ]
    Signed-off-by: Ajay Kaher <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

sched/fair: Revert max_newidle_lb_cost bump [+ + +]
Author: Peter Zijlstra <[email protected]>
Date:   Fri Nov 7 17:01:20 2025 +0100

    sched/fair: Revert max_newidle_lb_cost bump
    
    [ Upstream commit d206fbad9328ddb68ebabd7cf7413392acd38081 ]
    
    Many people reported regressions on their database workloads due to:
    
      155213a2aed4 ("sched/fair: Bump sd->max_newidle_lb_cost when newidle balance fails")
    
    For instance Adam Li reported a 6% regression on SpecJBB.
    
    Conversely this will regress schbench again; on my machine from 2.22
    Mrps/s down to 2.04 Mrps/s.
    
    Reported-by: Joseph Salisbury <[email protected]>
    Reported-by: Adam Li <[email protected]>
    Reported-by: Dietmar Eggemann <[email protected]>
    Reported-by: Hazem Mohamed Abuelfotoh <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Reviewed-by: Dietmar Eggemann <[email protected]>
    Tested-by: Dietmar Eggemann <[email protected]>
    Tested-by: Chris Mason <[email protected]>
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

sched/fair: Small cleanup to sched_balance_newidle() [+ + +]
Author: Peter Zijlstra <[email protected]>
Date:   Wed Dec 3 11:25:50 2025 +0000

    sched/fair: Small cleanup to sched_balance_newidle()
    
    commit e78e70dbf603c1425f15f32b455ca148c932f6c1 upstream.
    
    Pull out the !sd check to simplify code.
    
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Reviewed-by: Dietmar Eggemann <[email protected]>
    Tested-by: Dietmar Eggemann <[email protected]>
    Tested-by: Chris Mason <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [ Ajay: Modified to apply on v6.1 ]
    Signed-off-by: Ajay Kaher <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

sched/fair: Small cleanup to update_newidle_cost() [+ + +]
Author: Peter Zijlstra <[email protected]>
Date:   Wed Dec 3 11:25:51 2025 +0000

    sched/fair: Small cleanup to update_newidle_cost()
    
    commit 08d473dd8718e4a4d698b1113a14a40ad64a909b upstream.
    
    Simplify code by adding a few variables.
    
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Reviewed-by: Dietmar Eggemann <[email protected]>
    Tested-by: Dietmar Eggemann <[email protected]>
    Tested-by: Chris Mason <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [ Ajay: Modified to apply on v6.1 ]
    Signed-off-by: Ajay Kaher <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sched/isolation: add cpu_is_isolated() API [+ + +]
Author: Frederic Weisbecker <[email protected]>
Date:   Fri Mar 17 14:44:47 2023 +0100

    sched/isolation: add cpu_is_isolated() API
    
    [ Upstream commit a85c2257a8ac353af16dbcbf32c50d3380860bc5 ]
    
    Patch series "memcg, cpuisol: do not interfere pcp cache charges draining
    with cpuisol workloads".
    
    Leonardo has reported [1] that pcp memcg charge draining can interfere
    with cpu isolated workloads.  The said draining is done from a WQ context
    with a pcp worker scheduled on each CPU which holds any cached charges for
    a specific memcg hierarchy.  Operation is not really a common operation
    [2].  It can be triggered from the userspace though so some care is
    definitely due.
    
    Leonardo has tried to address the issue by allowing remote charge draining
    [3].  This approach requires an additional locking to synchronize pcp
    caches sync from a remote cpu from local pcp consumers.  Even though the
    proposed lock was per-cpu there is still potential for contention and less
    predictable behavior.
    
    This patchset addresses the issue from a different angle.  Rather than
    dealing with a potential synchronization, cpus which are isolated are
    simply never scheduled to be drained.  This means that a small amount of
    charges could be laying around and waiting for a later use or they are
    flushed when a different memcg is charged from the same cpu.  More details
    are in patch 2.  The first patch from Frederic is implementing an
    abstraction to tell whether a specific cpu has been isolated and therefore
    require a special treatment.
    
    This patch (of 2):
    
    Provide this new API to check if a CPU has been isolated either through
    isolcpus= or nohz_full= kernel parameter.
    
    It aims at avoiding kernel load deemed to be safely spared on CPUs running
    sensitive workload that can't bear any disturbance, such as pcp cache
    draining.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Frederic Weisbecker <[email protected]>
    Signed-off-by: Michal Hocko <[email protected]>
    Suggested-by: Michal Hocko <[email protected]>
    Cc: Johannes Weiner <[email protected]>
    Cc: Marcelo Tosatti <[email protected]>
    Cc: Muchun Song <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Cc: Roman Gushchin <[email protected]>
    Cc: Shakeel Butt <[email protected]>
    Cc: Thomas Gleixner <[email protected]>
    Cc: Leonardo Bras <[email protected]>
    Cc: Ingo Molnar <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Stable-dep-of: 10845a105bbc ("blk-mq: skip CPU offline notify on unmapped hctx")
    Signed-off-by: Sasha Levin <[email protected]>

 
scs: fix a wrong parameter in __scs_magic [+ + +]
Author: Zhichi Lin <[email protected]>
Date:   Sat Oct 11 16:22:22 2025 +0800

    scs: fix a wrong parameter in __scs_magic
    
    commit 08bd4c46d5e63b78e77f2605283874bbe868ab19 upstream.
    
    __scs_magic() needs a 'void *' variable, but a 'struct task_struct *' is
    given.  'task_scs(tsk)' is the starting address of the task's shadow call
    stack, and '__scs_magic(task_scs(tsk))' is the end address of the task's
    shadow call stack.  Here should be '__scs_magic(task_scs(tsk))'.
    
    The user-visible effect of this bug is that when CONFIG_DEBUG_STACK_USAGE
    is enabled, the shadow call stack usage checking function
    (scs_check_usage) would scan an incorrect memory range.  This could lead
    to:
    
    1. **Inaccurate stack usage reporting**: The function would calculate
       wrong usage statistics for the shadow call stack, potentially showing
       incorrect value in kmsg.
    
    2. **Potential kernel crash**: If the value of __scs_magic(tsk)is
       greater than that of __scs_magic(task_scs(tsk)), the for loop may
       access unmapped memory, potentially causing a kernel panic.  However,
       this scenario is unlikely because task_struct is allocated via the slab
       allocator (which typically returns lower addresses), while the shadow
       call stack returned by task_scs(tsk) is allocated via vmalloc(which
       typically returns higher addresses).
    
    However, since this is purely a debugging feature
    (CONFIG_DEBUG_STACK_USAGE), normal production systems should be not
    unaffected.  The bug only impacts developers and testers who are actively
    debugging stack usage with this configuration enabled.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 5bbaf9d1fcb9 ("scs: Add support for stack usage debugging")
    Signed-off-by: Jiyuan Xie <[email protected]>
    Signed-off-by: Zhichi Lin <[email protected]>
    Reviewed-by: Sami Tolvanen <[email protected]>
    Acked-by: Will Deacon <[email protected]>
    Cc: Andrey Konovalov <[email protected]>
    Cc: Kees Cook <[email protected]>
    Cc: Marco Elver <[email protected]>
    Cc: Will Deacon <[email protected]>
    Cc: Yee Lee <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
scsi: aic94xx: fix use-after-free in device removal path [+ + +]
Author: Junrui Luo <[email protected]>
Date:   Wed Oct 29 00:29:04 2025 +0800

    scsi: aic94xx: fix use-after-free in device removal path
    
    commit f6ab594672d4cba08540919a4e6be2e202b60007 upstream.
    
    The asd_pci_remove() function fails to synchronize with pending tasklets
    before freeing the asd_ha structure, leading to a potential
    use-after-free vulnerability.
    
    When a device removal is triggered (via hot-unplug or module unload),
    race condition can occur.
    
    The fix adds tasklet_kill() before freeing the asd_ha structure,
    ensuring all scheduled tasklets complete before cleanup proceeds.
    
    Reported-by: Yuhao Jiang <[email protected]>
    Reported-by: Junrui Luo <[email protected]>
    Fixes: 2908d778ab3e ("[SCSI] aic94xx: new driver")
    Cc: [email protected]
    Signed-off-by: Junrui Luo <[email protected]>
    Link: https://patch.msgid.link/ME2PR01MB3156AB7DCACA206C845FC7E8AFFDA@ME2PR01MB3156.ausprd01.prod.outlook.com
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: qla2xxx: Fix initiator mode with qlini_mode=exclusive [+ + +]
Author: Tony Battersby <[email protected]>
Date:   Mon Nov 10 10:48:45 2025 -0500

    scsi: qla2xxx: Fix initiator mode with qlini_mode=exclusive
    
    [ Upstream commit 8f58fc64d559b5fda1b0a5e2a71422be61e79ab9 ]
    
    When given the module parameter qlini_mode=exclusive, qla2xxx in
    initiator mode is initially unable to successfully send SCSI commands to
    devices it finds while scanning, resulting in an escalating series of
    resets until an adapter reset clears the issue.  Fix by checking the
    active mode instead of the module parameter.
    
    Signed-off-by: Tony Battersby <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: qla2xxx: Fix lost interrupts with qlini_mode=disabled [+ + +]
Author: Tony Battersby <[email protected]>
Date:   Mon Nov 10 10:50:05 2025 -0500

    scsi: qla2xxx: Fix lost interrupts with qlini_mode=disabled
    
    [ Upstream commit 4f6aaade2a22ac428fa99ed716cf2b87e79c9837 ]
    
    When qla2xxx is loaded with qlini_mode=disabled,
    ha->flags.disable_msix_handshake is used before it is set, resulting in
    the wrong interrupt handler being used on certain HBAs
    (qla2xxx_msix_rsp_q_hs() is used when qla2xxx_msix_rsp_q() should be
    used).  The only difference between these two interrupt handlers is that
    the _hs() version writes to a register to clear the "RISC" interrupt,
    whereas the other version does not.  So this bug results in the RISC
    interrupt being cleared when it should not be.  This occasionally causes
    a different interrupt handler qla24xx_msix_default() for a different
    vector to see ((stat & HSRX_RISC_INT) == 0) and ignore its interrupt,
    which then causes problems like:
    
    qla2xxx [0000:02:00.0]-d04c:6: MBX Command timeout for cmd 20,
      iocontrol=8 jiffies=1090c0300 mb[0-3]=[0x4000 0x0 0x40 0xda] mb7 0x500
      host_status 0x40000010 hccr 0x3f00
    qla2xxx [0000:02:00.0]-101e:6: Mailbox cmd timeout occurred, cmd=0x20,
      mb[0]=0x20. Scheduling ISP abort
    (the cmd varies; sometimes it is 0x20, 0x22, 0x54, 0x5a, 0x5d, or 0x6a)
    
    This problem can be reproduced with a 16 or 32 Gbps HBA by loading
    qla2xxx with qlini_mode=disabled and running a high IOPS test while
    triggering frequent RSCN database change events.
    
    While analyzing the problem I discovered that even with
    disable_msix_handshake forced to 0, it is not necessary to clear the
    RISC interrupt from qla2xxx_msix_rsp_q_hs() (more below).  So just
    completely remove qla2xxx_msix_rsp_q_hs() and the logic for selecting
    it, which also fixes the bug with qlini_mode=disabled.
    
    The test below describes the justification for not needing
    qla2xxx_msix_rsp_q_hs():
    
    Force disable_msix_handshake to 0:
    qla24xx_config_rings():
    if (0 && (ha->fw_attributes & BIT_6) && (IS_MSIX_NACK_CAPABLE(ha)) &&
        (ha->flags.msix_enabled)) {
    
    In qla24xx_msix_rsp_q() and qla2xxx_msix_rsp_q_hs(), check:
      (rd_reg_dword(®->host_status) & HSRX_RISC_INT)
    
    Count the number of calls to each function with HSRX_RISC_INT set and
    the number with HSRX_RISC_INT not set while performing some I/O.
    
    If qla2xxx_msix_rsp_q_hs() clears the RISC interrupt (original code):
    qla24xx_msix_rsp_q:    50% of calls have HSRX_RISC_INT set
    qla2xxx_msix_rsp_q_hs:  5% of calls have HSRX_RISC_INT set
    (# of qla2xxx_msix_rsp_q_hs interrupts) =
        (# of qla24xx_msix_rsp_q interrupts) * 3
    
    If qla2xxx_msix_rsp_q_hs() does not clear the RISC interrupt (patched
    code):
    qla24xx_msix_rsp_q:    100% of calls have HSRX_RISC_INT set
    qla2xxx_msix_rsp_q_hs:   9% of calls have HSRX_RISC_INT set
    (# of qla2xxx_msix_rsp_q_hs interrupts) =
        (# of qla24xx_msix_rsp_q interrupts) * 3
    
    In the case of the original code, qla24xx_msix_rsp_q() was seeing
    HSRX_RISC_INT set only 50% of the time because qla2xxx_msix_rsp_q_hs()
    was clearing it when it shouldn't have been.  In the patched code,
    qla24xx_msix_rsp_q() sees HSRX_RISC_INT set 100% of the time, which
    makes sense if that interrupt handler needs to clear the RISC interrupt
    (which it does).  qla2xxx_msix_rsp_q_hs() sees HSRX_RISC_INT only 9% of
    the time, which is just overlap from the other interrupt during the
    high IOPS test.
    
    Tested with SCST on:
    QLE2742  FW:v9.08.02 (32 Gbps 2-port)
    QLE2694L FW:v9.10.11 (16 Gbps 4-port)
    QLE2694L FW:v9.08.02 (16 Gbps 4-port)
    QLE2672  FW:v8.07.12 (16 Gbps 2-port)
    both initiator and target mode
    
    Signed-off-by: Tony Battersby <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: qla2xxx: Use reinit_completion on mbx_intr_comp [+ + +]
Author: Tony Battersby <[email protected]>
Date:   Mon Nov 10 10:51:28 2025 -0500

    scsi: qla2xxx: Use reinit_completion on mbx_intr_comp
    
    [ Upstream commit 957aa5974989fba4ae4f807ebcb27f12796edd4d ]
    
    If a mailbox command completes immediately after
    wait_for_completion_timeout() times out, ha->mbx_intr_comp could be left
    in an inconsistent state, causing the next mailbox command not to wait
    for the hardware.  Fix by reinitializing the completion before use.
    
    Signed-off-by: Tony Battersby <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: Revert "scsi: qla2xxx: Perform lockless command completion in abort path" [+ + +]
Author: Tony Battersby <[email protected]>
Date:   Mon Nov 10 10:47:35 2025 -0500

    scsi: Revert "scsi: qla2xxx: Perform lockless command completion in abort path"
    
    commit b57fbc88715b6d18f379463f48a15b560b087ffe upstream.
    
    This reverts commit 0367076b0817d5c75dfb83001ce7ce5c64d803a9.
    
    The commit being reverted added code to __qla2x00_abort_all_cmds() to
    call sp->done() without holding a spinlock.  But unlike the older code
    below it, this new code failed to check sp->cmd_type and just assumed
    TYPE_SRB, which results in a jump to an invalid pointer in target-mode
    with TYPE_TGT_CMD:
    
    qla2xxx [0000:65:00.0]-d034:8: qla24xx_do_nack_work create sess success
      0000000009f7a79b
    qla2xxx [0000:65:00.0]-5003:8: ISP System Error - mbx1=1ff5h mbx2=10h
      mbx3=0h mbx4=0h mbx5=191h mbx6=0h mbx7=0h.
    qla2xxx [0000:65:00.0]-d01e:8: -> fwdump no buffer
    qla2xxx [0000:65:00.0]-f03a:8: qla_target(0): System error async event
      0x8002 occurred
    qla2xxx [0000:65:00.0]-00af:8: Performing ISP error recovery -
      ha=0000000058183fda.
    BUG: kernel NULL pointer dereference, address: 0000000000000000
    PF: supervisor instruction fetch in kernel mode
    PF: error_code(0x0010) - not-present page
    PGD 0 P4D 0
    Oops: 0010 [#1] SMP
    CPU: 2 PID: 9446 Comm: qla2xxx_8_dpc Tainted: G           O       6.1.133 #1
    Hardware name: Supermicro Super Server/X11SPL-F, BIOS 4.2 12/15/2023
    RIP: 0010:0x0
    Code: Unable to access opcode bytes at 0xffffffffffffffd6.
    RSP: 0018:ffffc90001f93dc8 EFLAGS: 00010206
    RAX: 0000000000000282 RBX: 0000000000000355 RCX: ffff88810d16a000
    RDX: ffff88810dbadaa8 RSI: 0000000000080000 RDI: ffff888169dc38c0
    RBP: ffff888169dc38c0 R08: 0000000000000001 R09: 0000000000000045
    R10: ffffffffa034bdf0 R11: 0000000000000000 R12: ffff88810800bb40
    R13: 0000000000001aa8 R14: ffff888100136610 R15: ffff8881070f7400
    FS:  0000000000000000(0000) GS:ffff88bf80080000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: ffffffffffffffd6 CR3: 000000010c8ff006 CR4: 00000000003706e0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     ? __die+0x4d/0x8b
     ? page_fault_oops+0x91/0x180
     ? trace_buffer_unlock_commit_regs+0x38/0x1a0
     ? exc_page_fault+0x391/0x5e0
     ? asm_exc_page_fault+0x22/0x30
     __qla2x00_abort_all_cmds+0xcb/0x3e0 [qla2xxx_scst]
     qla2x00_abort_all_cmds+0x50/0x70 [qla2xxx_scst]
     qla2x00_abort_isp_cleanup+0x3b7/0x4b0 [qla2xxx_scst]
     qla2x00_abort_isp+0xfd/0x860 [qla2xxx_scst]
     qla2x00_do_dpc+0x581/0xa40 [qla2xxx_scst]
     kthread+0xa8/0xd0
     </TASK>
    
    Then commit 4475afa2646d ("scsi: qla2xxx: Complete command early within
    lock") added the spinlock back, because not having the lock caused a
    race and a crash.  But qla2x00_abort_srb() in the switch below already
    checks for qla2x00_chip_is_down() and handles it the same way, so the
    code above the switch is now redundant and still buggy in target-mode.
    Remove it.
    
    Cc: [email protected]
    Signed-off-by: Tony Battersby <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: sim710: Fix resource leak by adding missing ioport_unmap() calls [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Wed Oct 29 11:25:55 2025 +0800

    scsi: sim710: Fix resource leak by adding missing ioport_unmap() calls
    
    [ Upstream commit acd194d9b5bac419e04968ffa44351afabb50bac ]
    
    The driver calls ioport_map() to map I/O ports in sim710_probe_common()
    but never calls ioport_unmap() to release the mapping. This causes
    resource leaks in both the error path when request_irq() fails and in
    the normal device removal path via sim710_device_remove().
    
    Add ioport_unmap() calls in the out_release error path and in
    sim710_device_remove().
    
    Fixes: 56fece20086e ("[PATCH] finally fix 53c700 to use the generic iomem infrastructure")
    Signed-off-by: Haotian Zhang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: smartpqi: Add abort handler [+ + +]
Author: Kevin Barnett <[email protected]>
Date:   Thu Aug 24 10:58:05 2023 -0500

    scsi: smartpqi: Add abort handler
    
    [ Upstream commit 153c45dd63ef33ffb3d78307db5aa6131b2fdefc ]
    
    Implement aborts as resets.
    
    Avoid I/O stalls across all devices attached to a controller when device
    I/O requests time out.
    
    Reviewed-by: Mahesh Rajashekhara <[email protected]>
    Reviewed-by: Scott Teel <[email protected]>
    Reviewed-by: Scott Benesh <[email protected]>
    Reviewed-by: Mike McGowen <[email protected]>
    Signed-off-by: Kevin Barnett <[email protected]>
    Signed-off-by: Don Brace <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Stable-dep-of: b518e86d1a70 ("scsi: smartpqi: Fix device resources accessed after device removal")
    Signed-off-by: Sasha Levin <[email protected]>

scsi: smartpqi: Convert to host_tagset [+ + +]
Author: Don Brace <[email protected]>
Date:   Tue Nov 8 13:21:38 2022 -0600

    scsi: smartpqi: Convert to host_tagset
    
    [ Upstream commit b27ac2faa2fc0b2677cf1cbd270af734a1f5fd95 ]
    
    Add support for host_tagset.
    
    Also move the reserved command slots to the end of the pool to eliminate an
    addition operation for every SCSI request.
    
    This patch was originally authored by Hannes Reinecke here:
    
    Link: https://lore.kernel.org/linux-block/[email protected]/
    
    But we NAKed this patch because we wanted to fully test multipath
    failover operations.
    
    Suggested-by: Hannes Reinecke <[email protected]>
    Reviewed-by: Scott Benesh <[email protected]>
    Reviewed-by: Scott Teel <[email protected]>
    Reviewed-by: Mahesh Rajashekhara <[email protected]>
    Reviewed-by: Mike McGowen <[email protected]>
    Reviewed-by: Kevin Barnett <[email protected]>
    Signed-off-by: Don Brace <[email protected]>
    Link: https://lore.kernel.org/r/166793529811.322537.3294617845448383948.stgit@brunhilda
    Signed-off-by: Martin K. Petersen <[email protected]>
    Stable-dep-of: b518e86d1a70 ("scsi: smartpqi: Fix device resources accessed after device removal")
    Signed-off-by: Sasha Levin <[email protected]>

scsi: smartpqi: Fix device resources accessed after device removal [+ + +]
Author: Mike McGowen <[email protected]>
Date:   Thu Nov 6 10:38:20 2025 -0600

    scsi: smartpqi: Fix device resources accessed after device removal
    
    [ Upstream commit b518e86d1a70a88f6592a7c396cf1b93493d1aab ]
    
    Correct possible race conditions during device removal.
    
    Previously, a scheduled work item to reset a LUN could still execute
    after the device was removed, leading to use-after-free and other
    resource access issues.
    
    This race condition occurs because the abort handler may schedule a LUN
    reset concurrently with device removal via sdev_destroy(), leading to
    use-after-free and improper access to freed resources.
    
      - Check in the device reset handler if the device is still present in
        the controller's SCSI device list before running; if not, the reset
        is skipped.
    
      - Cancel any pending TMF work that has not started in sdev_destroy().
    
      - Ensure device freeing in sdev_destroy() is done while holding the
        LUN reset mutex to avoid races with ongoing resets.
    
    Fixes: 2d80f4054f7f ("scsi: smartpqi: Update deleting a LUN via sysfs")
    Reviewed-by: Scott Teel <[email protected]>
    Reviewed-by: Scott Benesh <[email protected]>
    Signed-off-by: Mike McGowen <[email protected]>
    Signed-off-by: Don Brace <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: smartpqi: Remove contention for raid_bypass_cnt [+ + +]
Author: Mike McGowen <[email protected]>
Date:   Fri Apr 28 10:37:05 2023 -0500

    scsi: smartpqi: Remove contention for raid_bypass_cnt
    
    [ Upstream commit 80d560d94fa9b28069c62e1a64ae4a03d5f43fbc ]
    
    Reduce CPU contention when incrementing variable raid_bypass_cnt.
    
    Remove the atomic operations for this variable by changing the atomic to an
    unsigned int and replace atomic operations with standard operations. The
    value is only checked that it is increasing and accuracy is not required.
    
    Reviewed-by: Scott Benesh <[email protected]>
    Reviewed-by: Scott Teel <[email protected]>
    Reviewed-by: Kevin Barnett <[email protected]>
    Signed-off-by: Mike McGowen <[email protected]>
    Signed-off-by: Don Brace <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Stable-dep-of: b518e86d1a70 ("scsi: smartpqi: Fix device resources accessed after device removal")
    Signed-off-by: Sasha Levin <[email protected]>

scsi: stex: Fix reboot_notifier leak in probe error path [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Tue Nov 4 17:48:47 2025 +0800

    scsi: stex: Fix reboot_notifier leak in probe error path
    
    [ Upstream commit 20da637eb545b04753e20c675cfe97b04c7b600b ]
    
    In stex_probe(), register_reboot_notifier() is called at the beginning,
    but if any subsequent initialization step fails, the function returns
    without unregistering the notifier, resulting in a resource leak.
    
    Add unregister_reboot_notifier() in the out_disable error path to ensure
    proper cleanup on all failure paths.
    
    Fixes: 61b745fa63db ("scsi: stex: Add S6 support")
    Signed-off-by: Haotian Zhang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: target: Do not write NUL characters into ASCII configfs output [+ + +]
Author: Bart Van Assche <[email protected]>
Date:   Mon Oct 27 11:46:38 2025 -0700

    scsi: target: Do not write NUL characters into ASCII configfs output
    
    [ Upstream commit c03b55f235e283cae49c88b9602fd11096b92eba ]
    
    NUL characters are not allowed in ASCII configfs output. Hence this
    patch.
    
    Fixes: c66ac9db8d4a ("[SCSI] target: Add LIO target core v4.0.0-rc6")
    Signed-off-by: Bart Van Assche <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: target: Reset t_task_cdb pointer in error case [+ + +]
Author: Andrey Vatoropin <[email protected]>
Date:   Tue Nov 18 08:42:31 2025 +0000

    scsi: target: Reset t_task_cdb pointer in error case
    
    commit 5053eab38a4c4543522d0c320c639c56a8b59908 upstream.
    
    If allocation of cmd->t_task_cdb fails, it remains NULL but is later
    dereferenced in the 'err' path.
    
    In case of error, reset NULL t_task_cdb value to point at the default
    fixed-size buffer.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 9e95fb805dc0 ("scsi: target: Fix NULL pointer dereference")
    Cc: [email protected]
    Signed-off-by: Andrey Vatoropin <[email protected]>
    Reviewed-by: Mike Christie <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: ufs: core: Add ufshcd_update_evt_hist() for UFS suspend error [+ + +]
Author: Seunghwan Baek <[email protected]>
Date:   Tue Dec 30 11:01:59 2025 -0500

    scsi: ufs: core: Add ufshcd_update_evt_hist() for UFS suspend error
    
    [ Upstream commit c9f36f04a8a2725172cdf2b5e32363e4addcb14c ]
    
    If UFS resume fails, the event history is updated in ufshcd_resume(), but
    there is no code anywhere to record UFS suspend. Therefore, add code to
    record UFS suspend error event history.
    
    Fixes: dd11376b9f1b ("scsi: ufs: Split the drivers/scsi/ufs directory")
    Cc: [email protected]
    Signed-off-by: Seunghwan Baek <[email protected]>
    Reviewed-by: Peter Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: ufs: core: fix incorrect buffer duplication in ufshcd_read_string_desc() [+ + +]
Author: Bean Huo <[email protected]>
Date:   Sat Nov 8 00:05:17 2025 +0100

    scsi: ufs: core: fix incorrect buffer duplication in ufshcd_read_string_desc()
    
    [ Upstream commit d794b499f948801f54d67ddbc34a6eac5a6d150a ]
    
    The function ufshcd_read_string_desc() was duplicating memory starting
    from the beginning of struct uc_string_id, which included the length and
    type fields. As a result, the allocated buffer contained unwanted
    metadata in addition to the string itself.
    
    The correct behavior is to duplicate only the Unicode character array in
    the structure. Update the code so that only the actual string content is
    copied into the new buffer.
    
    Fixes: 5f57704dbcfe ("scsi: ufs: Use kmemdup in ufshcd_read_string_desc()")
    Reviewed-by: Avri Altman <[email protected]>
    Reviewed-by: Bart Van Assche <[email protected]>
    Signed-off-by: Bean Huo <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
sctp: Defer SCTP_DBG_OBJCNT_DEC() to sctp_destroy_sock(). [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Thu Oct 23 23:16:50 2025 +0000

    sctp: Defer SCTP_DBG_OBJCNT_DEC() to sctp_destroy_sock().
    
    [ Upstream commit 622e8838a29845316668ec2e7648428878df7f9a ]
    
    SCTP_DBG_OBJCNT_INC() is called only when sctp_init_sock()
    returns 0 after successfully allocating sctp_sk(sk)->ep.
    
    OTOH, SCTP_DBG_OBJCNT_DEC() is called in sctp_close().
    
    The code seems to expect that the socket is always exposed
    to userspace once SCTP_DBG_OBJCNT_INC() is incremented, but
    there is a path where the assumption is not true.
    
    In sctp_accept(), sctp_sock_migrate() could fail after
    sctp_init_sock().
    
    Then, sk_common_release() does not call inet_release() nor
    sctp_close().  Instead, it calls sk->sk_prot->destroy().
    
    Let's move SCTP_DBG_OBJCNT_DEC() from sctp_close() to
    sctp_destroy_sock().
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Acked-by: Xin Long <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
selftests/bpf: Fix failure paths in send_signal test [+ + +]
Author: Alexei Starovoitov <[email protected]>
Date:   Thu Nov 13 09:11:53 2025 -0800

    selftests/bpf: Fix failure paths in send_signal test
    
    [ Upstream commit c13339039891dbdfa6c1972f0483bd07f610b776 ]
    
    When test_send_signal_kern__open_and_load() fails parent closes the
    pipe which cases ASSERT_EQ(read(pipe_p2c...)) to fail, but child
    continues and enters infinite loop, while parent is stuck in wait(NULL).
    Other error paths have similar issue, so kill the child before waiting on it.
    
    The bug was discovered while compiling all of selftests with -O1 instead of -O2
    which caused progs/test_send_signal_kern.c to fail to load.
    
    Fixes: ab8b7f0cb358 ("tools/bpf: Add self tests for bpf_send_signal_thread()")
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Acked-by: Eduard Zingerman <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

selftests/bpf: Improve reliability of test_perf_branches_no_hw() [+ + +]
Author: Matt Bobrowski <[email protected]>
Date:   Wed Nov 19 14:35:40 2025 +0000

    selftests/bpf: Improve reliability of test_perf_branches_no_hw()
    
    [ Upstream commit ae24fc8a16b0481ea8c5acbc66453c49ec0431c4 ]
    
    Currently, test_perf_branches_no_hw() relies on the busy loop within
    test_perf_branches_common() being slow enough to allow at least one
    perf event sample tick to occur before starting to tear down the
    backing perf event BPF program. With a relatively small fixed
    iteration count of 1,000,000, this is not guaranteed on modern fast
    CPUs, resulting in the test run to subsequently fail with the
    following:
    
    bpf_testmod.ko is already unloaded.
    Loading bpf_testmod.ko...
    Successfully loaded bpf_testmod.ko.
    test_perf_branches_common:PASS:test_perf_branches_load 0 nsec
    test_perf_branches_common:PASS:attach_perf_event 0 nsec
    test_perf_branches_common:PASS:set_affinity 0 nsec
    check_good_sample:PASS:output not valid 0 nsec
    check_good_sample:PASS:read_branches_size 0 nsec
    check_good_sample:PASS:read_branches_stack 0 nsec
    check_good_sample:PASS:read_branches_stack 0 nsec
    check_good_sample:PASS:read_branches_global 0 nsec
    check_good_sample:PASS:read_branches_global 0 nsec
    check_good_sample:PASS:read_branches_size 0 nsec
    test_perf_branches_no_hw:PASS:perf_event_open 0 nsec
    test_perf_branches_common:PASS:test_perf_branches_load 0 nsec
    test_perf_branches_common:PASS:attach_perf_event 0 nsec
    test_perf_branches_common:PASS:set_affinity 0 nsec
    check_bad_sample:FAIL:output not valid no valid sample from prog
    Summary: 0/1 PASSED, 0 SKIPPED, 1 FAILED
    Successfully unloaded bpf_testmod.ko.
    
    On a modern CPU (i.e. one with a 3.5 GHz clock rate), executing 1
    million increments of a volatile integer can take significantly less
    than 1 millisecond. If the spin loop and detachment of the perf event
    BPF program elapses before the first 1 ms sampling interval elapses,
    the perf event will never end up firing. Fix this by bumping the loop
    iteration counter a little within test_perf_branches_common(), along
    with ensuring adding another loop termination condition which is
    directly influenced by the backing perf event BPF program
    executing. Notably, a concious decision was made to not adjust the
    sample_freq value as that is just not a reliable way to go about
    fixing the problem. It effectively still leaves the race window open.
    
    Fixes: 67306f84ca78c ("selftests/bpf: Add bpf_read_branch_records() selftest")
    Signed-off-by: Matt Bobrowski <[email protected]>
    Reviewed-by: Jiri Olsa <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

selftests/bpf: skip test_perf_branches_hw() on unsupported platforms [+ + +]
Author: Matt Bobrowski <[email protected]>
Date:   Thu Nov 20 14:20:59 2025 +0000

    selftests/bpf: skip test_perf_branches_hw() on unsupported platforms
    
    [ Upstream commit 27746aaf1b20172f0859546c4a3e82eca459f680 ]
    
    Gracefully skip the test_perf_branches_hw subtest on platforms that
    do not support LBR or require specialized perf event attributes
    to enable branch sampling.
    
    For example, AMD's Milan (Zen 3) supports BRS rather than traditional
    LBR. This requires specific configurations (attr.type = PERF_TYPE_RAW,
    attr.config = RETIRED_TAKEN_BRANCH_INSTRUCTIONS) that differ from the
    generic setup used within this test. Notably, it also probably doesn't
    hold much value to special case perf event configurations for selected
    micro architectures.
    
    Fixes: 67306f84ca78c ("selftests/bpf: Add bpf_read_branch_records() selftest")
    Signed-off-by: Matt Bobrowski <[email protected]>
    Acked-by: Song Liu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
selftests/ftrace: traceonoff_triggers: strip off names [+ + +]
Author: Yipeng Zou <[email protected]>
Date:   Fri Aug 18 09:32:26 2023 +0800

    selftests/ftrace: traceonoff_triggers: strip off names
    
    [ Upstream commit b889b4fb4cbea3ca7eb9814075d6a51936394bd9 ]
    
    The func_traceonoff_triggers.tc sometimes goes to fail
    on my board, Kunpeng-920.
    
    [root@localhost]# ./ftracetest ./test.d/ftrace/func_traceonoff_triggers.tc -l fail.log
    === Ftrace unit tests ===
    [1] ftrace - test for function traceon/off triggers     [FAIL]
    [2] (instance)  ftrace - test for function traceon/off triggers [UNSUPPORTED]
    
    I look up the log, and it shows that the md5sum is different between csum1 and csum2.
    
    ++ cnt=611
    ++ sleep .1
    +++ cnt_trace
    +++ grep -v '^#' trace
    +++ wc -l
    ++ cnt2=611
    ++ '[' 611 -ne 611 ']'
    +++ cat tracing_on
    ++ on=0
    ++ '[' 0 '!=' 0 ']'
    +++ md5sum trace
    ++ csum1='76896aa74362fff66a6a5f3cf8a8a500  trace'
    ++ sleep .1
    +++ md5sum trace
    ++ csum2='ee8625a21c058818fc26e45c1ed3f6de  trace'
    ++ '[' '76896aa74362fff66a6a5f3cf8a8a500  trace' '!=' 'ee8625a21c058818fc26e45c1ed3f6de  trace' ']'
    ++ fail 'Tracing file is still changing'
    ++ echo Tracing file is still changing
    Tracing file is still changing
    ++ exit_fail
    ++ exit 1
    
    So I directly dump the trace file before md5sum, the diff shows that:
    
    [root@localhost]# diff trace_1.log trace_2.log -y --suppress-common-lines
    dockerd-12285   [036] d.... 18385.510290: sched_stat | <...>-12285   [036] d.... 18385.510290: sched_stat
    dockerd-12285   [036] d.... 18385.510291: sched_swit | <...>-12285   [036] d.... 18385.510291: sched_swit
    <...>-740       [044] d.... 18385.602859: sched_stat | kworker/44:1-740 [044] d.... 18385.602859: sched_stat
    <...>-740       [044] d.... 18385.602860: sched_swit | kworker/44:1-740 [044] d.... 18385.602860: sched_swit
    
    And we can see that <...> filed be filled with names.
    
    We can strip off the names there to fix that.
    
    After strip off the names:
    
    kworker/u257:0-12 [019] d..2.  2528.758910: sched_stat | -12 [019] d..2.  2528.758910: sched_stat_runtime: comm=k
    kworker/u257:0-12 [019] d..2.  2528.758912: sched_swit | -12 [019] d..2.  2528.758912: sched_switch: prev_comm=kw
    <idle>-0          [000] d.s5.  2528.762318: sched_waki | -0  [000] d.s5.  2528.762318: sched_waking: comm=sshd pi
    <idle>-0          [037] dNh2.  2528.762326: sched_wake | -0  [037] dNh2.  2528.762326: sched_wakeup: comm=sshd pi
    <idle>-0          [037] d..2.  2528.762334: sched_swit | -0  [037] d..2.  2528.762334: sched_switch: prev_comm=sw
    
    Link: https://lore.kernel.org/r/[email protected]
    Fixes: d87b29179aa0 ("selftests: ftrace: Use md5sum to take less time of checking logs")
    Suggested-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Yipeng Zou <[email protected]>
    Acked-by: Masami Hiramatsu (Google) <[email protected]>
    Reviewed-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Shuah Khan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
selftests: net: fix "buffer overflow detected" for tap.c [+ + +]
Author: Alice C. Munduruca <[email protected]>
Date:   Tue Dec 16 12:06:41 2025 -0500

    selftests: net: fix "buffer overflow detected" for tap.c
    
    [ Upstream commit 472c5dd6b95c02b3e5d7395acf542150e91165e7 ]
    
    When the selftest 'tap.c' is compiled with '-D_FORTIFY_SOURCE=3',
    the strcpy() in rtattr_add_strsz() is replaced with a checked
    version which causes the test to consistently fail when compiled
    with toolchains for which this option is enabled by default.
    
     TAP version 13
     1..3
     # Starting 3 tests from 1 test cases.
     #  RUN           tap.test_packet_valid_udp_gso ...
     *** buffer overflow detected ***: terminated
     # test_packet_valid_udp_gso: Test terminated by assertion
     #          FAIL  tap.test_packet_valid_udp_gso
     not ok 1 tap.test_packet_valid_udp_gso
     #  RUN           tap.test_packet_valid_udp_csum ...
     *** buffer overflow detected ***: terminated
     # test_packet_valid_udp_csum: Test terminated by assertion
     #          FAIL  tap.test_packet_valid_udp_csum
     not ok 2 tap.test_packet_valid_udp_csum
     #  RUN           tap.test_packet_crash_tap_invalid_eth_proto ...
     *** buffer overflow detected ***: terminated
     # test_packet_crash_tap_invalid_eth_proto: Test terminated by assertion
     #          FAIL  tap.test_packet_crash_tap_invalid_eth_proto
     not ok 3 tap.test_packet_crash_tap_invalid_eth_proto
     # FAILED: 0 / 3 tests passed.
     # Totals: pass:0 fail:3 xfail:0 xpass:0 skip:0 error:0
    
    A buffer overflow is detected by the fortified glibc __strcpy_chk()
    since the __builtin_object_size() of `RTA_DATA(rta)` is incorrectly
    reported as 1, even though there is ample space in its bounding
    buffer `req`.
    
    Additionally, given that IFLA_IFNAME also expects a null-terminated
    string, callers of rtaddr_add_str{,sz}() could simply use the
    rtaddr_add_strsz() variant. (which has been renamed to remove the
    trailing `sz`) memset() has been used for this function since it
    is unchecked and thus circumvents the issue discussed in the
    previous paragraph.
    
    Fixes: 2e64fe4624d1 ("selftests: add few test cases for tap driver")
    Signed-off-by: Alice C. Munduruca <[email protected]>
    Reviewed-by: Cengiz Can <[email protected]>
    Reviewed-by: Willem de Bruijn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
serial: add support of CPCI cards [+ + +]
Author: Magne Bruno <[email protected]>
Date:   Mon Nov 10 17:24:56 2025 +0100

    serial: add support of CPCI cards
    
    commit 0e5a99e0e5f50353b86939ff6e424800d769c818 upstream.
    
    Addi-Data GmbH is manufacturing multi-serial ports cards supporting CompactPCI (known as CPCI).
    Those cards are identified with different DeviceIds. Those cards integrating standard UARTs
    work the same way as PCI/PCIe models already supported in the serial driver.
    
    Signed-off-by: Magne Bruno <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: stable <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

serial: Make uart_remove_one_port() return void [+ + +]
Author: Uwe Kleine-König <[email protected]>
Date:   Tue Dec 30 14:49:02 2025 -0500

    serial: Make uart_remove_one_port() return void
    
    [ Upstream commit d5b3d02d0b107345f2a6ecb5b06f98356f5c97ab ]
    
    The return value is only ever used as a return value for remove callbacks
    of platform drivers. This return value is ignored by the driver core.
    (The only effect is an error message, but uart_remove_one_port() already
    emitted one in this case.)
    
    So the return value isn't used at all and uart_remove_one_port() can be
    changed to return void without any loss. Also this better matches the
    Linux device model as remove functions are not supposed to fail.
    
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: 74098cc06e75 ("xhci: dbgtty: fix device unregister: fixup")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

serial: sprd: Return -EPROBE_DEFER when uart clock is not ready [+ + +]
Author: Wenhua Lin <[email protected]>
Date:   Wed Oct 22 11:08:40 2025 +0800

    serial: sprd: Return -EPROBE_DEFER when uart clock is not ready
    
    [ Upstream commit 29e8a0c587e328ed458380a45d6028adf64d7487 ]
    
    In sprd_clk_init(), when devm_clk_get() returns -EPROBE_DEFER
    for either uart or source clock, we should propagate the
    error instead of just warning and continuing with NULL clocks.
    
    Currently the driver only emits a warning when clock acquisition
    fails and proceeds with NULL clock pointers. This can lead to
    issues later when the clocks are actually needed. More importantly,
    when the clock provider is not ready yet and returns -EPROBE_DEFER,
    we should return this error to allow deferred probing.
    
    This change adds explicit checks for -EPROBE_DEFER after both:
    1. devm_clk_get(uport->dev, uart)
    2. devm_clk_get(uport->dev, source)
    
    When -EPROBE_DEFER is encountered, the function now returns
    -EPROBE_DEFER to let the driver framework retry probing
    later when the clock dependencies are resolved.
    
    Signed-off-by: Wenhua Lin <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Cixi Geng <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
smack: fix bug: unprivileged task can create labels [+ + +]
Author: Konstantin Andreev <[email protected]>
Date:   Tue Jun 17 00:32:16 2025 +0300

    smack: fix bug: unprivileged task can create labels
    
    [ Upstream commit c147e13ea7fe9f118f8c9ba5e96cbd644b00d6b3 ]
    
    If an unprivileged task is allowed to relabel itself
    (/smack/relabel-self is not empty),
    it can freely create new labels by writing their
    names into own /proc/PID/attr/smack/current
    
    This occurs because do_setattr() imports
    the provided label in advance,
    before checking "relabel-self" list.
    
    This change ensures that the "relabel-self" list
    is checked before importing the label.
    
    Fixes: 38416e53936e ("Smack: limited capability for changing process label")
    Signed-off-by: Konstantin Andreev <[email protected]>
    Signed-off-by: Casey Schaufler <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
smb/server: fix return value of smb2_ioctl() [+ + +]
Author: ChenXiaoSong <[email protected]>
Date:   Fri Oct 17 18:46:10 2025 +0800

    smb/server: fix return value of smb2_ioctl()
    
    [ Upstream commit 269df046c1e15ab34fa26fd90db9381f022a0963 ]
    
    __process_request() will not print error messages if smb2_ioctl()
    always returns 0.
    
    Fix this by returning the correct value at the end of function.
    
    Signed-off-by: ChenXiaoSong <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
smb: fix invalid username check in smb3_fs_context_parse_param() [+ + +]
Author: Yiqi Sun <[email protected]>
Date:   Tue Nov 11 15:05:39 2025 +0800

    smb: fix invalid username check in smb3_fs_context_parse_param()
    
    [ Upstream commit ed6612165b74f09db00ef0abaf9831895ab28b7f ]
    
    Since the maximum return value of strnlen(..., CIFS_MAX_USERNAME_LEN)
    is CIFS_MAX_USERNAME_LEN, length check in smb3_fs_context_parse_param()
    is always FALSE and invalid.
    
    Fix the comparison in if statement.
    
    Signed-off-by: Yiqi Sun <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
smc91x: fix broken irq-context in PREEMPT_RT [+ + +]
Author: Yeoreum Yun <[email protected]>
Date:   Wed Dec 17 08:51:15 2025 +0000

    smc91x: fix broken irq-context in PREEMPT_RT
    
    [ Upstream commit 6402078bd9d1ed46e79465e1faaa42e3458f8a33 ]
    
    When smc91x.c is built with PREEMPT_RT, the following splat occurs
    in FVP_RevC:
    
    [   13.055000] smc91x LNRO0003:00 eth0: link up, 10Mbps, half-duplex, lpa 0x0000
    [   13.062137] BUG: workqueue leaked atomic, lock or RCU: kworker/2:1[106]
    [   13.062137]      preempt=0x00000000 lock=0->0 RCU=0->1 workfn=mld_ifc_work
    [   13.062266] C
    ** replaying previous printk message **
    [   13.062266] CPU: 2 UID: 0 PID: 106 Comm: kworker/2:1 Not tainted 6.18.0-dirty #179 PREEMPT_{RT,(full)}
    [   13.062353] Hardware name:  , BIOS
    [   13.062382] Workqueue: mld mld_ifc_work
    [   13.062469] Call trace:
    [   13.062494]  show_stack+0x24/0x40 (C)
    [   13.062602]  __dump_stack+0x28/0x48
    [   13.062710]  dump_stack_lvl+0x7c/0xb0
    [   13.062818]  dump_stack+0x18/0x34
    [   13.062926]  process_scheduled_works+0x294/0x450
    [   13.063043]  worker_thread+0x260/0x3d8
    [   13.063124]  kthread+0x1c4/0x228
    [   13.063235]  ret_from_fork+0x10/0x20
    
    This happens because smc_special_trylock() disables IRQs even on PREEMPT_RT,
    but smc_special_unlock() does not restore IRQs on PREEMPT_RT.
    The reason is that smc_special_unlock() calls spin_unlock_irqrestore(),
    and rcu_read_unlock_bh() in __dev_queue_xmit() cannot invoke
    rcu_read_unlock() through __local_bh_enable_ip() when current->softirq_disable_cnt becomes zero.
    
    To address this issue, replace smc_special_trylock() with spin_trylock_irqsave().
    
    Fixes: 342a93247e08 ("locking/spinlock: Provide RT variant header: <linux/spinlock_rt.h>")
    Signed-off-by: Yeoreum Yun <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
soc: amlogic: canvas: fix device leak on lookup [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Sep 26 16:24:53 2025 +0200

    soc: amlogic: canvas: fix device leak on lookup
    
    commit 32200f4828de9d7e6db379909898e718747f4e18 upstream.
    
    Make sure to drop the reference taken to the canvas platform device when
    looking up its driver data.
    
    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.
    
    Also note that commit 28f851e6afa8 ("soc: amlogic: canvas: add missing
    put_device() call in meson_canvas_get()") fixed the leak in a lookup
    error path, but the reference is still leaking on success.
    
    Fixes: d4983983d987 ("soc: amlogic: add meson-canvas driver")
    Cc: [email protected]      # 4.20: 28f851e6afa8
    Cc: Yu Kuai <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Martin Blumenstingl <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Neil Armstrong <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

soc: qcom: ocmem: fix device leak on lookup [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Sep 26 16:35:10 2025 +0200

    soc: qcom: ocmem: fix device leak on lookup
    
    commit b5c16ea57b030b8e9428ec726e26219dfe05c3d9 upstream.
    
    Make sure to drop the reference taken to the ocmem platform device when
    looking up its driver data.
    
    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.
    
    Also note that commit 0ff027027e05 ("soc: qcom: ocmem: Fix missing
    put_device() call in of_get_ocmem") fixed the leak in a lookup error
    path, but the reference is still leaking on success.
    
    Fixes: 88c1e9404f1d ("soc: qcom: add OCMEM driver")
    Cc: [email protected]      # 5.5: 0ff027027e05
    Cc: Brian Masney <[email protected]>
    Cc: Miaoqian Lin <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Brian Masney <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

soc: qcom: smem: fix hwspinlock resource leak in probe error paths [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Wed Oct 29 10:27:33 2025 +0800

    soc: qcom: smem: fix hwspinlock resource leak in probe error paths
    
    [ Upstream commit dc5db35073a19f6d3c30bea367b551c1a784ef8f ]
    
    The hwspinlock acquired via hwspin_lock_request_specific() is not
    released on several error paths. This results in resource leakage
    when probe fails.
    
    Switch to devm_hwspin_lock_request_specific() to automatically
    handle cleanup on probe failure. Remove the manual hwspin_lock_free()
    in qcom_smem_remove() as devm handles it automatically.
    
    Fixes: 20bb6c9de1b7 ("soc: qcom: smem: map only partitions used by local HOST")
    Signed-off-by: Haotian Zhang <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

soc: renesas: r9a06g032-sysctrl: Handle h2mode setting based on USBF presence [+ + +]
Author: Herve Codina <[email protected]>
Date:   Thu Jan 5 16:22:54 2023 +0100

    soc: renesas: r9a06g032-sysctrl: Handle h2mode setting based on USBF presence
    
    [ Upstream commit e9fee814b054e4f6f2faf3d9c1944869fe41c9dd ]
    
    The CFG_USB[H2MODE] allows to switch the USB configuration. The
    configuration supported are:
      - One host and one device
    or
      - Two hosts
    
    Set CFG_USB[H2MODE] based on the USBF controller (USB device)
    availability.
    
    Signed-off-by: Herve Codina <[email protected]>
    Reviewed-by: Geert Uytterhoeven <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: f8def051bbcf ("clk: renesas: r9a06g032: Fix memory leak in error path")
    Signed-off-by: Sasha Levin <[email protected]>

 
spi: cadence-quadspi: Add clock configuration for StarFive JH7110 QSPI [+ + +]
Author: William Qiu <[email protected]>
Date:   Fri Aug 4 10:02:53 2023 +0800

    spi: cadence-quadspi: Add clock configuration for StarFive JH7110 QSPI
    
    [ Upstream commit 33f1ef6d4eb6bca726608ed939c9fd94d96ceefd ]
    
    Add JH7110's clock initialization code to the driver.
    
    Signed-off-by: William Qiu <[email protected]>
    Reviewed-by: Hal Feng <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Stable-dep-of: 1889dd208197 ("spi: cadence-quadspi: Fix clock disable on probe failure path")
    Signed-off-by: Sasha Levin <[email protected]>

spi: cadence-quadspi: Add compatible for AMD Pensando Elba SoC [+ + +]
Author: Brad Larson <[email protected]>
Date:   Mon May 15 11:16:05 2023 -0700

    spi: cadence-quadspi: Add compatible for AMD Pensando Elba SoC
    
    [ Upstream commit f5c2f9f9584353bc816d76a65c97dd03dc61678c ]
    
    The AMD Pensando Elba SoC has the Cadence QSPI controller integrated.
    
    The quirk CQSPI_NEEDS_APB_AHB_HAZARD_WAR is added and if enabled
    a dummy readback from the controller is performed to ensure
    synchronization.
    
    Signed-off-by: Brad Larson <[email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]
    Stable-dep-of: 1889dd208197 ("spi: cadence-quadspi: Fix clock disable on probe failure path")
    Signed-off-by: Sasha Levin <[email protected]>

spi: cadence-quadspi: add missing clk_disable_unprepare() in cqspi_probe() [+ + +]
Author: Yang Yingliang <[email protected]>
Date:   Wed Nov 29 16:11:47 2023 +0800

    spi: cadence-quadspi: add missing clk_disable_unprepare() in cqspi_probe()
    
    [ Upstream commit 5cb475174cce1bfedf1025b6e235e2c43d81144f ]
    
    cqspi_jh7110_clk_init() is called after clk_prepare_enable(cqspi->clk),
    if it fails, it should goto label 'probe_reset_failed' to disable
    cqspi->clk.
    
    In the error path after calling cqspi_jh7110_clk_init(),
    cqspi_jh7110_disable_clk() need be called.
    
    Fixes: 33f1ef6d4eb6 ("spi: cadence-quadspi: Add clock configuration for StarFive JH7110 QSPI")
    Signed-off-by: Yang Yingliang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Stable-dep-of: 1889dd208197 ("spi: cadence-quadspi: Fix clock disable on probe failure path")
    Signed-off-by: Sasha Levin <[email protected]>

spi: cadence-quadspi: Add support for StarFive JH7110 QSPI [+ + +]
Author: William Qiu <[email protected]>
Date:   Thu Mar 2 18:52:21 2023 +0800

    spi: cadence-quadspi: Add support for StarFive JH7110 QSPI
    
    [ Upstream commit 47fef94afeae2a125607b6b45145594713471320 ]
    
    Add QSPI reset operation in device probe and add RISCV support to
    QUAD SPI Kconfig.
    
    Co-developed-by: Ziv Xu <[email protected]>
    Signed-off-by: Ziv Xu <[email protected]>
    Signed-off-by: William Qiu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Stable-dep-of: 1889dd208197 ("spi: cadence-quadspi: Fix clock disable on probe failure path")
    Signed-off-by: Sasha Levin <[email protected]>

spi: cadence-quadspi: Fix clock disable on probe failure path [+ + +]
Author: Anurag Dutta <[email protected]>
Date:   Fri Dec 12 12:53:12 2025 +0530

    spi: cadence-quadspi: Fix clock disable on probe failure path
    
    [ Upstream commit 1889dd2081975ce1f6275b06cdebaa8d154847a9 ]
    
    When cqspi_request_mmap_dma() returns -EPROBE_DEFER after runtime PM
    is enabled, the error path calls clk_disable_unprepare() on an already
    disabled clock, causing an imbalance.
    
    Use pm_runtime_get_sync() to increment the usage counter and resume the
    device. This prevents runtime_suspend() from being invoked and causing
    a double clock disable.
    
    Fixes: 140623410536 ("mtd: spi-nor: Add driver for Cadence Quad SPI Flash Controller")
    Signed-off-by: Anurag Dutta <[email protected]>
    Tested-by: Nishanth Menon <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

spi: fsl-cpm: Check length parity before switching to 16 bit mode [+ + +]
Author: Christophe Leroy <[email protected]>
Date:   Thu Nov 20 09:34:49 2025 +0100

    spi: fsl-cpm: Check length parity before switching to 16 bit mode
    
    commit 1417927df8049a0194933861e9b098669a95c762 upstream.
    
    Commit fc96ec826bce ("spi: fsl-cpm: Use 16 bit mode for large transfers
    with even size") failed to make sure that the size is really even
    before switching to 16 bit mode. Until recently the problem went
    unnoticed because kernfs uses a pre-allocated bounce buffer of size
    PAGE_SIZE for reading EEPROM.
    
    But commit 8ad6249c51d0 ("eeprom: at25: convert to spi-mem API")
    introduced an additional dynamically allocated bounce buffer whose size
    is exactly the size of the transfer, leading to a buffer overrun in
    the fsl-cpm driver when that size is odd.
    
    Add the missing length parity verification and remain in 8 bit mode
    when the length is not even.
    
    Fixes: fc96ec826bce ("spi: fsl-cpm: Use 16 bit mode for large transfers with even size")
    Cc: [email protected]
    Closes: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Christophe Leroy <[email protected]>
    Reviewed-by: Sverdlin Alexander <[email protected]>
    Link: https://patch.msgid.link/3c4d81c3923c93f95ec56702a454744a4bad3cfc.1763627618.git.christophe.leroy@csgroup.eu
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

spi: imx: keep dma request disabled before dma transfer setup [+ + +]
Author: Robin Gong <[email protected]>
Date:   Fri Oct 24 13:53:20 2025 +0800

    spi: imx: keep dma request disabled before dma transfer setup
    
    [ Upstream commit 86d57d9c07d54e8cb385ffe800930816ccdba0c1 ]
    
    Since sdma hardware configure postpone to transfer phase, have to disable
    dma request before dma transfer setup because there is a hardware
    limitation on sdma event enable(ENBLn) as below:
    
    "It is thus essential for the Arm platform to program them before any DMA
     request is triggered to the SDMA, otherwise an unpredictable combination
     of channels may be started."
    
    Signed-off-by: Carlos Song <[email protected]>
    Signed-off-by: Robin Gong <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

spi: tegra210-quad: Fix timeout handling [+ + +]
Author: Vishwaroop A <[email protected]>
Date:   Tue Oct 28 15:57:01 2025 +0000

    spi: tegra210-quad: Fix timeout handling
    
    [ Upstream commit b4e002d8a7cee3b1d70efad0e222567f92a73000 ]
    
    When the CPU that the QSPI interrupt handler runs on (typically CPU 0)
    is excessively busy, it can lead to rare cases of the IRQ thread not
    running before the transfer timeout is reached.
    
    While handling the timeouts, any pending transfers are cleaned up and
    the message that they correspond to is marked as failed, which leaves
    the curr_xfer field pointing at stale memory.
    
    To avoid this, clear curr_xfer to NULL upon timeout and check for this
    condition when the IRQ thread is finally run.
    
    While at it, also make sure to clear interrupts on failure so that new
    interrupts can be run.
    
    A better, more involved, fix would move the interrupt clearing into a
    hard IRQ handler. Ideally we would also want to signal that the IRQ
    thread no longer needs to be run after the timeout is hit to avoid the
    extra check for a valid transfer.
    
    Fixes: 921fc1838fb0 ("spi: tegra210-quad: Add support for Tegra210 QSPI controller")
    Signed-off-by: Thierry Reding <[email protected]>
    Signed-off-by: Vishwaroop A <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

spi: xilinx: increase number of retries before declaring stall [+ + +]
Author: Alvaro Gamez Machado <[email protected]>
Date:   Thu Nov 6 14:45:35 2025 +0100

    spi: xilinx: increase number of retries before declaring stall
    
    [ Upstream commit 939edfaa10f1d22e6af6a84bf4bd96dc49c67302 ]
    
    SPI devices using a (relative) slow frequency need a larger time.
    
    For instance, microblaze running at 83.25MHz and performing a
    3 bytes transaction using a 10MHz/16 = 625kHz needed this stall
    value increased to at least 20. The SPI device is quite slow, but
    also is the microblaze, so set this value to 32 to give it even
    more margin.
    
    Signed-off-by: Alvaro Gamez Machado <[email protected]>
    Reviewed-by: Ricardo Ribalda <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
staging: fbtft: core: fix potential memory leak in fbtft_probe_common() [+ + +]
Author: Jianglei Nie <[email protected]>
Date:   Wed Nov 12 20:22:07 2025 +0100

    staging: fbtft: core: fix potential memory leak in fbtft_probe_common()
    
    [ Upstream commit 47d3949a9b04cbcb0e10abae30c2b53e98706e11 ]
    
    fbtft_probe_common() allocates a memory chunk for "info" with
    fbtft_framebuffer_alloc(). When "display->buswidth == 0" is true, the
    function returns without releasing the "info", which will lead to a
    memory leak.
    
    Fix it by calling fbtft_framebuffer_release() when "display->buswidth
    == 0" is true.
    
    Fixes: c296d5f9957c ("staging: fbtft: core support")
    Signed-off-by: Jianglei Nie <[email protected]>
    Signed-off-by: Andy Shevchenko <[email protected]>
    Acked-by: Abdun Nihaal <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

staging: rtl8723bs: fix out-of-bounds read in OnBeacon ESR IE parsing [+ + +]
Author: Navaneeth K <[email protected]>
Date:   Thu Nov 20 16:35:20 2025 +0000

    staging: rtl8723bs: fix out-of-bounds read in OnBeacon ESR IE parsing
    
    commit 502ddcc405b69fa92e0add6c1714d654504f6fd7 upstream.
    
    The Extended Supported Rates (ESR) IE handling in OnBeacon accessed
    *(p + 1 + ielen) and *(p + 2 + ielen) without verifying that these
    offsets lie within the received frame buffer. A malformed beacon with
    an ESR IE positioned at the end of the buffer could cause an
    out-of-bounds read, potentially triggering a kernel panic.
    
    Add a boundary check to ensure that the ESR IE body and the subsequent
    bytes are within the limits of the frame before attempting to access
    them.
    
    This prevents OOB reads caused by malformed beacon frames.
    
    Signed-off-by: Navaneeth K <[email protected]>
    Cc: stable <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

staging: rtl8723bs: fix out-of-bounds read in rtw_get_ie() parser [+ + +]
Author: Navaneeth K <[email protected]>
Date:   Thu Nov 20 16:23:52 2025 +0000

    staging: rtl8723bs: fix out-of-bounds read in rtw_get_ie() parser
    
    commit 154828bf9559b9c8421fc2f0d7f7f76b3683aaed upstream.
    
    The Information Element (IE) parser rtw_get_ie() trusted the length
    byte of each IE without validating that the IE body (len bytes after
    the 2-byte header) fits inside the remaining frame buffer. A malformed
    frame can advertise an IE length larger than the available data, causing
    the parser to increment its pointer beyond the buffer end. This results
    in out-of-bounds reads or, depending on the pattern, an infinite loop.
    
    Fix by validating that (offset + 2 + len) does not exceed the limit
    before accepting the IE or advancing to the next element.
    
    This prevents OOB reads and ensures the parser terminates safely on
    malformed frames.
    
    Signed-off-by: Navaneeth K <[email protected]>
    Cc: stable <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

staging: rtl8723bs: fix stack buffer overflow in OnAssocReq IE parsing [+ + +]
Author: Navaneeth K <[email protected]>
Date:   Thu Nov 20 16:33:08 2025 +0000

    staging: rtl8723bs: fix stack buffer overflow in OnAssocReq IE parsing
    
    commit 6ef0e1c10455927867cac8f0ed6b49f328f8cf95 upstream.
    
    The Supported Rates IE length from an incoming Association Request frame
    was used directly as the memcpy() length when copying into a fixed-size
    16-byte stack buffer (supportRate). A malicious station can advertise an
    IE length larger than 16 bytes, causing a stack buffer overflow.
    
    Clamp ie_len to the buffer size before copying the Supported Rates IE,
    and correct the bounds check when merging Extended Supported Rates to
    prevent a second potential overflow.
    
    This prevents kernel stack corruption triggered by malformed association
    requests.
    
    Signed-off-by: Navaneeth K <[email protected]>
    Cc: stable <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
SUNRPC: svcauth_gss: avoid NULL deref on zero length gss_token in gss_read_proxy_verf [+ + +]
Author: Joshua Rogers <[email protected]>
Date:   Wed Dec 31 09:32:39 2025 -0500

    SUNRPC: svcauth_gss: avoid NULL deref on zero length gss_token in gss_read_proxy_verf
    
    [ Upstream commit d4b69a6186b215d2dc1ebcab965ed88e8d41768d ]
    
    A zero length gss_token results in pages == 0 and in_token->pages[0]
    is NULL. The code unconditionally evaluates
    page_address(in_token->pages[0]) for the initial memcpy, which can
    dereference NULL even when the copy length is 0. Guard the first
    memcpy so it only runs when length > 0.
    
    Fixes: 5866efa8cbfb ("SUNRPC: Fix svcauth_gss_proxy_init()")
    Cc: [email protected]
    Signed-off-by: Joshua Rogers <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    [ adapted xdr buffer pointer API to older argv iov_base/iov_len API ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
svcrdma: return 0 on success from svc_rdma_copy_inline_range [+ + +]
Author: Joshua Rogers <[email protected]>
Date:   Fri Nov 7 10:09:48 2025 -0500

    svcrdma: return 0 on success from svc_rdma_copy_inline_range
    
    commit 94972027ab55b200e031059fd6c7a649f8248020 upstream.
    
    The function comment specifies 0 on success and -EINVAL on invalid
    parameters. Make the tail return 0 after a successful copy loop.
    
    Fixes: d7cc73972661 ("svcrdma: support multiple Read chunks per RPC")
    Cc: [email protected]
    Signed-off-by: Joshua Rogers <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
team: fix check for port enabled in team_queue_override_port_prio_changed() [+ + +]
Author: Jiri Pirko <[email protected]>
Date:   Fri Dec 12 11:29:53 2025 +0100

    team: fix check for port enabled in team_queue_override_port_prio_changed()
    
    [ Upstream commit 932ac51d9953eaf77a1252f79b656d4ca86163c6 ]
    
    There has been a syzkaller bug reported recently with the following
    trace:
    
    list_del corruption, ffff888058bea080->prev is LIST_POISON2 (dead000000000122)
    ------------[ cut here ]------------
    kernel BUG at lib/list_debug.c:59!
    Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTI
    CPU: 3 UID: 0 PID: 21246 Comm: syz.0.2928 Not tainted syzkaller #0 PREEMPT(full)
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014
    RIP: 0010:__list_del_entry_valid_or_report+0x13e/0x200 lib/list_debug.c:59
    Code: 48 c7 c7 e0 71 f0 8b e8 30 08 ef fc 90 0f 0b 48 89 ef e8 a5 02 55 fd 48 89 ea 48 89 de 48 c7 c7 40 72 f0 8b e8 13 08 ef fc 90 <0f> 0b 48 89 ef e8 88 02 55 fd 48 89 ea 48 b8 00 00 00 00 00 fc ff
    RSP: 0018:ffffc9000d49f370 EFLAGS: 00010286
    RAX: 000000000000004e RBX: ffff888058bea080 RCX: ffffc9002817d000
    RDX: 0000000000000000 RSI: ffffffff819becc6 RDI: 0000000000000005
    RBP: dead000000000122 R08: 0000000000000005 R09: 0000000000000000
    R10: 0000000080000000 R11: 0000000000000001 R12: ffff888039e9c230
    R13: ffff888058bea088 R14: ffff888058bea080 R15: ffff888055461480
    FS:  00007fbbcfe6f6c0(0000) GS:ffff8880d6d0a000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 000000110c3afcb0 CR3: 00000000382c7000 CR4: 0000000000352ef0
    Call Trace:
     <TASK>
     __list_del_entry_valid include/linux/list.h:132 [inline]
     __list_del_entry include/linux/list.h:223 [inline]
     list_del_rcu include/linux/rculist.h:178 [inline]
     __team_queue_override_port_del drivers/net/team/team_core.c:826 [inline]
     __team_queue_override_port_del drivers/net/team/team_core.c:821 [inline]
     team_queue_override_port_prio_changed drivers/net/team/team_core.c:883 [inline]
     team_priority_option_set+0x171/0x2f0 drivers/net/team/team_core.c:1534
     team_option_set drivers/net/team/team_core.c:376 [inline]
     team_nl_options_set_doit+0x8ae/0xe60 drivers/net/team/team_core.c:2653
     genl_family_rcv_msg_doit+0x209/0x2f0 net/netlink/genetlink.c:1115
     genl_family_rcv_msg net/netlink/genetlink.c:1195 [inline]
     genl_rcv_msg+0x55c/0x800 net/netlink/genetlink.c:1210
     netlink_rcv_skb+0x158/0x420 net/netlink/af_netlink.c:2552
     genl_rcv+0x28/0x40 net/netlink/genetlink.c:1219
     netlink_unicast_kernel net/netlink/af_netlink.c:1320 [inline]
     netlink_unicast+0x5aa/0x870 net/netlink/af_netlink.c:1346
     netlink_sendmsg+0x8c8/0xdd0 net/netlink/af_netlink.c:1896
     sock_sendmsg_nosec net/socket.c:727 [inline]
     __sock_sendmsg net/socket.c:742 [inline]
     ____sys_sendmsg+0xa98/0xc70 net/socket.c:2630
     ___sys_sendmsg+0x134/0x1d0 net/socket.c:2684
     __sys_sendmsg+0x16d/0x220 net/socket.c:2716
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xcd/0xfa0 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    The problem is in this flow:
    1) Port is enabled, queue_id != 0, in qom_list
    2) Port gets disabled
            -> team_port_disable()
            -> team_queue_override_port_del()
            -> del (removed from list)
    3) Port is disabled, queue_id != 0, not in any list
    4) Priority changes
            -> team_queue_override_port_prio_changed()
            -> checks: port disabled && queue_id != 0
            -> calls del - hits the BUG as it is removed already
    
    To fix this, change the check in team_queue_override_port_prio_changed()
    so it returns early if port is not enabled.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=422806e5f4cce722a71f
    Fixes: 6c31ff366c11 ("team: remove synchronize_rcu() called during queue override change")
    Signed-off-by: Jiri Pirko <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ti-sysc: allow OMAP2 and OMAP4 timers to be reserved on AM33xx [+ + +]
Author: Matthias Schiffer <[email protected]>
Date:   Mon Aug 25 15:11:13 2025 +0200

    ti-sysc: allow OMAP2 and OMAP4 timers to be reserved on AM33xx
    
    [ Upstream commit 3f61783920504b2cf99330b372d82914bb004d8e ]
    
    am33xx.dtsi has the same clock setup as am35xx.dtsi, setting
    ti,no-reset-on-init and ti,no-idle on timer1_target and timer2_target,
    so AM33 needs the same workaround as AM35 to avoid ti-sysc probe
    failing on certain target modules.
    
    Signed-off-by: Matthias Schiffer <[email protected]>
    Signed-off-by: Alexander Stein <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Kevin Hilman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tools/nolibc/stdio: let perror work when NOLIBC_IGNORE_ERRNO is set [+ + +]
Author: Benjamin Berg <[email protected]>
Date:   Wed Sep 24 16:20:50 2025 +0200

    tools/nolibc/stdio: let perror work when NOLIBC_IGNORE_ERRNO is set
    
    [ Upstream commit c485ca3aff2442adea4c08ceb5183e671ebed22a ]
    
    There is no errno variable when NOLIBC_IGNORE_ERRNO is defined. As such,
    simply print the message with "unknown error" rather than the integer
    value of errno.
    
    Fixes: acab7bcdb1bc ("tools/nolibc/stdio: add perror() to report the errno value")
    Signed-off-by: Benjamin Berg <[email protected]>
    Signed-off-by: Thomas Weißschuh <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tools/testing/nvdimm: Use per-DIMM device handle [+ + +]
Author: Alison Schofield <[email protected]>
Date:   Fri Oct 31 16:42:20 2025 -0700

    tools/testing/nvdimm: Use per-DIMM device handle
    
    commit f59b701b4674f7955170b54c4167c5590f4714eb upstream.
    
    KASAN reports a global-out-of-bounds access when running these nfit
    tests: clear.sh, pmem-errors.sh, pfn-meta-errors.sh, btt-errors.sh,
    daxdev-errors.sh, and inject-error.sh.
    
    [] BUG: KASAN: global-out-of-bounds in nfit_test_ctl+0x769f/0x7840 [nfit_test]
    [] Read of size 4 at addr ffffffffc03ea01c by task ndctl/1215
    [] The buggy address belongs to the variable:
    [] handle+0x1c/0x1df4 [nfit_test]
    
    nfit_test_search_spa() uses handle[nvdimm->id] to retrieve a device
    handle and triggers a KASAN error when it reads past the end of the
    handle array. It should not be indexing the handle array at all.
    
    The correct device handle is stored in per-DIMM test data. Each DIMM
    has a struct nfit_mem that embeds a struct acpi_nfit_memdev that
    describes the NFIT device handle. Use that device handle here.
    
    Fixes: 10246dc84dfc ("acpi nfit: nfit_test supports translate SPA")
    Cc: [email protected]
    Signed-off-by: Alison Schofield <[email protected]>
    Reviewed-by: Dave Jiang <[email protected]>> ---
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Ira Weiny <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tpm: Cap the number of PCR banks [+ + +]
Author: Jarkko Sakkinen <[email protected]>
Date:   Tue Sep 30 15:58:02 2025 +0300

    tpm: Cap the number of PCR banks
    
    commit faf07e611dfa464b201223a7253e9dc5ee0f3c9e upstream.
    
    tpm2_get_pcr_allocation() does not cap any upper limit for the number of
    banks. Cap the limit to eight banks so that out of bounds values coming
    from external I/O cause on only limited harm.
    
    Cc: [email protected] # v5.10+
    Fixes: bcfff8384f6c ("tpm: dynamically allocate the allocated_banks array")
    Tested-by: Lai Yi <[email protected]>
    Reviewed-by: Jonathan McDowell <[email protected]>
    Reviewed-by: Roberto Sassu <[email protected]>
    Signed-off-by: Jarkko Sakkinen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tracing: Do not register unsupported perf events [+ + +]
Author: Steven Rostedt <[email protected]>
Date:   Tue Dec 16 18:24:40 2025 -0500

    tracing: Do not register unsupported perf events
    
    commit ef7f38df890f5dcd2ae62f8dbde191d72f3bebae upstream.
    
    Synthetic events currently do not have a function to register perf events.
    This leads to calling the tracepoint register functions with a NULL
    function pointer which triggers:
    
     ------------[ cut here ]------------
     WARNING: kernel/tracepoint.c:175 at tracepoint_add_func+0x357/0x370, CPU#2: perf/2272
     Modules linked in: kvm_intel kvm irqbypass
     CPU: 2 UID: 0 PID: 2272 Comm: perf Not tainted 6.18.0-ftest-11964-ge022764176fc-dirty #323 PREEMPTLAZY
     Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.17.0-debian-1.17.0-1 04/01/2014
     RIP: 0010:tracepoint_add_func+0x357/0x370
     Code: 28 9c e8 4c 0b f5 ff eb 0f 4c 89 f7 48 c7 c6 80 4d 28 9c e8 ab 89 f4 ff 31 c0 5b 41 5c 41 5d 41 5e 41 5f 5d c3 cc cc cc cc cc <0f> 0b 49 c7 c6 ea ff ff ff e9 ee fe ff ff 0f 0b e9 f9 fe ff ff 0f
     RSP: 0018:ffffabc0c44d3c40 EFLAGS: 00010246
     RAX: 0000000000000001 RBX: ffff9380aa9e4060 RCX: 0000000000000000
     RDX: 000000000000000a RSI: ffffffff9e1d4a98 RDI: ffff937fcf5fd6c8
     RBP: 0000000000000001 R08: 0000000000000007 R09: ffff937fcf5fc780
     R10: 0000000000000003 R11: ffffffff9c193910 R12: 000000000000000a
     R13: ffffffff9e1e5888 R14: 0000000000000000 R15: ffffabc0c44d3c78
     FS:  00007f6202f5f340(0000) GS:ffff93819f00f000(0000) knlGS:0000000000000000
     CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: 000055d3162281a8 CR3: 0000000106a56003 CR4: 0000000000172ef0
     Call Trace:
      <TASK>
      tracepoint_probe_register+0x5d/0x90
      synth_event_reg+0x3c/0x60
      perf_trace_event_init+0x204/0x340
      perf_trace_init+0x85/0xd0
      perf_tp_event_init+0x2e/0x50
      perf_try_init_event+0x6f/0x230
      ? perf_event_alloc+0x4bb/0xdc0
      perf_event_alloc+0x65a/0xdc0
      __se_sys_perf_event_open+0x290/0x9f0
      do_syscall_64+0x93/0x7b0
      ? entry_SYSCALL_64_after_hwframe+0x76/0x7e
      ? trace_hardirqs_off+0x53/0xc0
      entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Instead, have the code return -ENODEV, which doesn't warn and has perf
    error out with:
    
     # perf record -e synthetic:futex_wait
    Error:
    The sys_perf_event_open() syscall returned with 19 (No such device) for event (synthetic:futex_wait).
    "dmesg | grep -i perf" may provide additional information.
    
    Ideally perf should support synthetic events, but for now just fix the
    warning. The support can come later.
    
    Cc: [email protected]
    Cc: Masami Hiramatsu <[email protected]>
    Cc: Mathieu Desnoyers <[email protected]>
    Cc: Arnaldo Carvalho de Melo <[email protected]>
    Cc: Jiri Olsa <[email protected]>
    Cc: Namhyung Kim <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Fixes: 4b147936fa509 ("tracing: Add support for 'synthetic' events")
    Reported-by: Ian Rogers <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tty: fix tty_port_tty_*hangup() kernel-doc [+ + +]
Author: Jiri Slaby (SUSE) <[email protected]>
Date:   Tue Jun 24 10:06:41 2025 +0200

    tty: fix tty_port_tty_*hangup() kernel-doc
    
    commit 6241b49540a65a6d5274fa938fd3eb4cbfe2e076 upstream.
    
    The commit below added a new helper, but omitted to move (and add) the
    corressponding kernel-doc. Do it now.
    
    Signed-off-by: "Jiri Slaby (SUSE)" <[email protected]>
    Fixes: 2b5eac0f8c6e ("tty: introduce and use tty_port_tty_vhangup() helper")
    Link: https://lore.kernel.org/all/[email protected]/
    Reported-by: Ilpo Järvinen <[email protected]>
    Cc: Jonathan Corbet <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

tty: introduce and use tty_port_tty_vhangup() helper [+ + +]
Author: Jiri Slaby (SUSE) <[email protected]>
Date:   Tue Dec 30 14:49:03 2025 -0500

    tty: introduce and use tty_port_tty_vhangup() helper
    
    [ Upstream commit 2b5eac0f8c6e79bc152c8804f9f88d16717013ab ]
    
    This code (tty_get -> vhangup -> tty_put) is repeated on few places.
    Introduce a helper similar to tty_port_tty_hangup() (asynchronous) to
    handle even vhangup (synchronous).
    
    And use it on those places.
    
    In fact, reuse the tty_port_tty_hangup()'s code and call tty_vhangup()
    depending on a new bool parameter.
    
    Signed-off-by: "Jiri Slaby (SUSE)" <[email protected]>
    Cc: Karsten Keil <[email protected]>
    Cc: David Lin <[email protected]>
    Cc: Johan Hovold <[email protected]>
    Cc: Alex Elder <[email protected]>
    Cc: Oliver Neukum <[email protected]>
    Cc: Marcel Holtmann <[email protected]>
    Cc: Johan Hedberg <[email protected]>
    Cc: Luiz Augusto von Dentz <[email protected]>
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: 74098cc06e75 ("xhci: dbgtty: fix device unregister: fixup")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
uio: uio_fsl_elbc_gpcm:: Add null pointer check to uio_fsl_elbc_gpcm_probe [+ + +]
Author: Li Qiang <[email protected]>
Date:   Wed Oct 15 14:40:20 2025 +0800

    uio: uio_fsl_elbc_gpcm:: Add null pointer check to uio_fsl_elbc_gpcm_probe
    
    [ Upstream commit d48fb15e6ad142e0577428a8c5028136e10c7b3d ]
    
    devm_kasprintf() returns a pointer to dynamically allocated memory
    which can be NULL upon failure.
    
    Fixes: d57801c45f53e ("uio: uio_fsl_elbc_gpcm: use device-managed allocators")
    Signed-off-by: Li Qiang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
usb: chaoskey: fix locking for O_NONBLOCK [+ + +]
Author: Oliver Neukum <[email protected]>
Date:   Thu Oct 30 10:39:06 2025 +0100

    usb: chaoskey: fix locking for O_NONBLOCK
    
    [ Upstream commit a2fa8a12e6bc9d89c0505b8dd7ae38ec173d25de ]
    
    A failure to take a lock with O_NONBLOCK needs to result
    in -EAGAIN. Change it.
    
    Fixes: 66e3e591891da ("usb: Add driver for Altus Metrum ChaosKey device (v2)")
    Signed-off-by: Oliver Neukum <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

usb: dwc2: disable platform lowlevel hw resources during shutdown [+ + +]
Author: Jisheng Zhang <[email protected]>
Date:   Sun Jun 29 17:46:55 2025 +0800

    usb: dwc2: disable platform lowlevel hw resources during shutdown
    
    [ Upstream commit 7481a97c5f49f10c7490bb990d0e863f23b9bb71 ]
    
    On some SoC platforms, in shutdown stage, most components' power is cut
    off, but there's still power supply to the so called always-on
    domain, so if the dwc2's regulator is from the always-on domain, we
    need to explicitly disable it to save power.
    
    Disable platform lowlevel hw resources such as phy, clock and
    regulators etc. in device shutdown hook to reduce non-necessary power
    consumption when the platform enters shutdown stage.
    
    Signed-off-by: Jisheng Zhang <[email protected]>
    Acked-by: Minas Harutyunyan <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: b6ebcfdcac40 ("usb: dwc2: fix hang during shutdown if set as peripheral")
    Signed-off-by: Sasha Levin <[email protected]>

usb: dwc2: fix hang during shutdown if set as peripheral [+ + +]
Author: Jisheng Zhang <[email protected]>
Date:   Tue Nov 4 08:25:02 2025 +0800

    usb: dwc2: fix hang during shutdown if set as peripheral
    
    [ Upstream commit b6ebcfdcac40a27953f052e4269ce75a18825ffc ]
    
    dwc2 on most platforms needs phy controller, clock and power supply.
    All of them must be enabled/activated to properly operate. If dwc2
    is configured as peripheral mode, then all the above three hardware
    resources are disabled at the end of the probe:
    
            /* Gadget code manages lowlevel hw on its own */
            if (hsotg->dr_mode == USB_DR_MODE_PERIPHERAL)
                    dwc2_lowlevel_hw_disable(hsotg);
    
    But dwc2_driver_shutdown() tries to disable the interrupts on HW IP
    level. This would result in hang during shutdown if dwc2 is configured
    as peripheral mode.
    
    Fix this hang by only disable and sync irq when lowlevel hw is enabled.
    
    Fixes: 4fdf228cdf69 ("usb: dwc2: Fix shutdown callback in platform")
    Signed-off-by: Jisheng Zhang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

usb: dwc2: fix hang during suspend if set as peripheral [+ + +]
Author: Jisheng Zhang <[email protected]>
Date:   Tue Nov 4 08:25:03 2025 +0800

    usb: dwc2: fix hang during suspend if set as peripheral
    
    [ Upstream commit 2b94b054ac4974ad2f89f7f7461840c851933adb ]
    
    dwc2 on most platforms needs phy controller, clock and power supply.
    All of them must be enabled/activated to properly operate. If dwc2
    is configured as peripheral mode, then all the above three hardware
    resources are disabled at the end of the probe:
    
            /* Gadget code manages lowlevel hw on its own */
            if (hsotg->dr_mode == USB_DR_MODE_PERIPHERAL)
                    dwc2_lowlevel_hw_disable(hsotg);
    
    But the dwc2_suspend() tries to read the dwc2's reg to check whether
    is_device_mode or not, this would result in hang during suspend if dwc2
    is configured as peripheral mode.
    
    Fix this hang by bypassing suspend/resume if lowlevel hw isn't
    enabled.
    
    Fixes: 09a75e857790 ("usb: dwc2: refactor common low-level hw code to platform.c")
    Signed-off-by: Jisheng Zhang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

usb: dwc3: keep susphy enabled during exit to avoid controller faults [+ + +]
Author: Udipto Goswami <[email protected]>
Date:   Tue Dec 30 09:54:19 2025 -0500

    usb: dwc3: keep susphy enabled during exit to avoid controller faults
    
    [ Upstream commit e1003aa7ec9eccdde4c926bd64ef42816ad55f25 ]
    
    On some platforms, switching USB roles from host to device can trigger
    controller faults due to premature PHY power-down. This occurs when the
    PHY is disabled too early during teardown, causing synchronization
    issues between the PHY and controller.
    
    Keep susphy enabled during dwc3_host_exit() and dwc3_gadget_exit()
    ensures the PHY remains in a low-power state capable of handling
    required commands during role switch.
    
    Cc: stable <[email protected]>
    Fixes: 6d735722063a ("usb: dwc3: core: Prevent phy suspend during init")
    Suggested-by: Thinh Nguyen <[email protected]>
    Signed-off-by: Udipto Goswami <[email protected]>
    Acked-by: Thinh Nguyen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: dwc3: of-simple: fix clock resource leak in dwc3_of_simple_probe [+ + +]
Author: Miaoqian Lin <[email protected]>
Date:   Thu Dec 11 10:49:36 2025 +0400

    usb: dwc3: of-simple: fix clock resource leak in dwc3_of_simple_probe
    
    commit 3b4961313d31e200c9e974bb1536cdea217f78b5 upstream.
    
    When clk_bulk_prepare_enable() fails, the error path jumps to
    err_resetc_assert, skipping clk_bulk_put_all() and leaking the
    clock references acquired by clk_bulk_get_all().
    
    Add err_clk_put_all label to properly release clock resources
    in all error paths.
    
    Found via static analysis and code review.
    
    Fixes: c0c61471ef86 ("usb: dwc3: of-simple: Convert to bulk clk API")
    Cc: stable <[email protected]>
    Signed-off-by: Miaoqian Lin <[email protected]>
    Acked-by: Thinh Nguyen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
USB: Fix descriptor count when handling invalid MBIM extended descriptor [+ + +]
Author: Seungjin Bae <[email protected]>
Date:   Sun Sep 28 14:56:11 2025 -0400

    USB: Fix descriptor count when handling invalid MBIM extended descriptor
    
    [ Upstream commit 5570ad1423ee60f6e972dadb63fb2e5f90a54cbe ]
    
    In cdc_parse_cdc_header(), the check for the USB_CDC_MBIM_EXTENDED_TYPE
    descriptor was using 'break' upon detecting an invalid length.
    
    This was incorrect because 'break' only exits the switch statement,
    causing the code to fall through to cnt++, thus incorrectly
    incrementing the count of parsed descriptors for a descriptor that was
    actually invalid and being discarded.
    
    This patch changes 'break' to 'goto next_desc;' to ensure that the
    logic skips the counter increment and correctly proceeds to the next
    descriptor in the buffer. This maintains an accurate count of only
    the successfully parsed descriptors.
    
    Fixes: e4c6fb7794982 ("usbnet: move the CDC parser into USB core")
    Signed-off-by: Seungjin Bae <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
usb: gadget: lpc32xx_udc: fix clock imbalance in error path [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Thu Dec 18 16:35:15 2025 +0100

    usb: gadget: lpc32xx_udc: fix clock imbalance in error path
    
    commit 782be79e4551550d7a82b1957fc0f7347e6d461f upstream.
    
    A recent change fixing a device reference leak introduced a clock
    imbalance by reusing an error path so that the clock may be disabled
    before having been enabled.
    
    Note that the clock framework allows for passing in NULL clocks so there
    is no risk for a NULL pointer dereference.
    
    Also drop the bogus I2C client NULL check added by the offending commit
    as the pointer has already been verified to be non-NULL.
    
    Fixes: c84117912bdd ("USB: lpc32xx_udc: Fix error handling in probe")
    Cc: [email protected]
    Cc: Ma Ke <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Vladimir Zapolskiy <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: tegra-xudc: Always reinitialize data toggle when clear halt [+ + +]
Author: Haotien Hsu <[email protected]>
Date:   Thu Nov 27 11:35:40 2025 +0800

    usb: gadget: tegra-xudc: Always reinitialize data toggle when clear halt
    
    commit 2585973c7f9ee31d21e5848c996fab2521fd383d upstream.
    
    The driver previously skipped handling ClearFeature(ENDPOINT_HALT)
    when the endpoint was already not halted. This prevented the
    controller from resetting the data sequence number and reinitializing
    the endpoint state.
    
    According to USB 3.2 specification Rev. 1.1, section 9.4.5,
    ClearFeature(ENDPOINT_HALT) must always reset the data sequence and
    set the stream state machine to Disabled, regardless of whether the
    endpoint was halted.
    
    Remove the early return so that ClearFeature(ENDPOINT_HALT) always
    resets the endpoint sequence state as required by the specification.
    
    Fixes: 49db427232fe ("usb: gadget: Add UDC driver for tegra XUSB device mode controller")
    Cc: stable <[email protected]>
    Signed-off-by: Haotien Hsu <[email protected]>
    Signed-off-by: Wayne Chang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
USB: lpc32xx_udc: Fix error handling in probe [+ + +]
Author: Ma Ke <[email protected]>
Date:   Mon Dec 15 10:09:31 2025 +0800

    USB: lpc32xx_udc: Fix error handling in probe
    
    commit c84117912bddd9e5d87e68daf182410c98181407 upstream.
    
    lpc32xx_udc_probe() acquires an i2c_client reference through
    isp1301_get_client() but fails to release it in both error handling
    paths and the normal removal path. This could result in a reference
    count leak for the I2C device, preventing proper cleanup and potentially
    leading to resource exhaustion. Add put_device() to release the
    reference in the probe failure path and in the remove function.
    
    Calling path: isp1301_get_client() -> of_find_i2c_device_by_node() ->
    i2c_find_device_by_fwnode(). As comments of i2c_find_device_by_fwnode()
    says, 'The user must call put_device(&client->dev) once done with the
    i2c client.'
    
    Found by code review.
    
    Cc: stable <[email protected]>
    Fixes: 24a28e428351 ("USB: gadget driver for LPC32xx")
    Signed-off-by: Ma Ke <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usb: ohci-nxp: fix device leak on probe failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Tue Dec 30 08:26:34 2025 -0500

    usb: ohci-nxp: fix device leak on probe failure
    
    [ Upstream commit b4c61e542faf8c9131d69ecfc3ad6de96d1b2ab8 ]
    
    Make sure to drop the reference taken when looking up the PHY I2C device
    during probe on probe failure (e.g. probe deferral) and on driver
    unbind.
    
    Fixes: 73108aa90cbf ("USB: ohci-nxp: Use isp1301 driver")
    Cc: [email protected]      # 3.5
    Reported-by: Ma Ke <[email protected]>
    Link: https://lore.kernel.org/lkml/[email protected]/
    Signed-off-by: Johan Hovold <[email protected]>
    Acked-by: Alan Stern <[email protected]>
    Reviewed-by: Vladimir Zapolskiy <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: ohci-nxp: Use helper function devm_clk_get_enabled() [+ + +]
Author: Zhang Zekun <[email protected]>
Date:   Tue Dec 30 08:26:33 2025 -0500

    usb: ohci-nxp: Use helper function devm_clk_get_enabled()
    
    [ Upstream commit c146ede472717f352b7283a525bd9a1a2b15e2cf ]
    
    devm_clk_get() and clk_prepare_enable() can be replaced by helper
    function devm_clk_get_enabled(). Let's use devm_clk_get_enabled() to
    simplify code and avoid calling clk_disable_unprepare().
    
    Signed-off-by: Zhang Zekun <[email protected]>
    Acked-by: Alan Stern <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: b4c61e542faf ("usb: ohci-nxp: fix device leak on probe failure")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: phy: fsl-usb: Fix use-after-free in delayed work during device removal [+ + +]
Author: Duoming Zhou <[email protected]>
Date:   Fri Dec 5 11:48:31 2025 +0800

    usb: phy: fsl-usb: Fix use-after-free in delayed work during device removal
    
    commit 41ca62e3e21e48c2903b3b45e232cf4f2ff7434f upstream.
    
    The delayed work item otg_event is initialized in fsl_otg_conf() and
    scheduled under two conditions:
    1. When a host controller binds to the OTG controller.
    2. When the USB ID pin state changes (cable insertion/removal).
    
    A race condition occurs when the device is removed via fsl_otg_remove():
    the fsl_otg instance may be freed while the delayed work is still pending
    or executing. This leads to use-after-free when the work function
    fsl_otg_event() accesses the already freed memory.
    
    The problematic scenario:
    
    (detach thread)            | (delayed work)
    fsl_otg_remove()           |
      kfree(fsl_otg_dev) //FREE| fsl_otg_event()
                               |   og = container_of(...) //USE
                               |   og-> //USE
    
    Fix this by calling disable_delayed_work_sync() in fsl_otg_remove()
    before deallocating the fsl_otg structure. This ensures the delayed work
    is properly canceled and completes execution prior to memory deallocation.
    
    This bug was identified through static analysis.
    
    Fixes: 0807c500a1a6 ("USB: add Freescale USB OTG Transceiver driver")
    Cc: stable <[email protected]>
    Signed-off-by: Duoming Zhou <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: phy: Initialize struct usb_phy list_head [+ + +]
Author: Diogo Ivo <[email protected]>
Date:   Fri Nov 21 18:16:36 2025 +0000

    usb: phy: Initialize struct usb_phy list_head
    
    commit c69ff68b097b0f53333114f1b2c3dc128f389596 upstream.
    
    As part of the registration of a new 'struct usb_phy' with the USB PHY core
    via either usb_add_phy(struct usb_phy *x, ...) or usb_add_phy_dev(struct
    usb_phy *x) these functions call list_add_tail(&x->head, phy_list) in
    order for the new instance x to be stored in phy_list, a static list
    kept internally by the core.
    
    After 7d21114dc6a2 ("usb: phy: Introduce one extcon device into usb phy")
    when executing either of the registration functions above it is possible
    that usb_add_extcon() fails, leading to either function returning before
    the call to list_add_tail(), leaving x->head uninitialized.
    
    Then, when a driver tries to undo the failed registration by calling
    usb_remove_phy(struct usb_phy *x) there will be an unconditional call to
    list_del(&x->head) acting on an uninitialized variable, and thus a
    possible NULL pointer dereference.
    
    Fix this by initializing x->head before usb_add_extcon() has a
    chance to fail. Note that this was not needed before 7d21114dc6a2 since
    list_add_phy() was executed unconditionally and it guaranteed that x->head
    was initialized.
    
    Fixes: 7d21114dc6a2 ("usb: phy: Introduce one extcon device into usb phy")
    Cc: stable <[email protected]>
    Signed-off-by: Diogo Ivo <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: phy: isp1301: fix non-OF device reference imbalance [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Thu Dec 18 16:35:16 2025 +0100

    usb: phy: isp1301: fix non-OF device reference imbalance
    
    commit b4b64fda4d30a83a7f00e92a0c8a1d47699609f3 upstream.
    
    A recent change fixing a device reference leak in a UDC driver
    introduced a potential use-after-free in the non-OF case as the
    isp1301_get_client() helper only increases the reference count for the
    returned I2C device in the OF case.
    
    Increment the reference count also for non-OF so that the caller can
    decrement it unconditionally.
    
    Note that this is inherently racy just as using the returned I2C device
    is since nothing is preventing the PHY driver from being unbound while
    in use.
    
    Fixes: c84117912bdd ("USB: lpc32xx_udc: Fix error handling in probe")
    Cc: [email protected]
    Cc: Ma Ke <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Vladimir Zapolskiy <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: raw-gadget: cap raw_io transfer length to KMALLOC_MAX_SIZE [+ + +]
Author: Gopi Krishna Menon <[email protected]>
Date:   Tue Oct 28 22:26:57 2025 +0530

    usb: raw-gadget: cap raw_io transfer length to KMALLOC_MAX_SIZE
    
    [ Upstream commit a5160af78be7fcf3ade6caab0a14e349560c96d7 ]
    
    The previous commit removed the PAGE_SIZE limit on transfer length of
    raw_io buffer in order to avoid any problems with emulating USB devices
    whose full configuration descriptor exceeds PAGE_SIZE in length. However
    this also removes the upperbound on user supplied length, allowing very
    large values to be passed to the allocator.
    
    syzbot on fuzzing the transfer length with very large value (1.81GB)
    results in kmalloc() to fall back to the page allocator, which triggers
    a kernel warning as the page allocator cannot handle allocations more
    than MAX_PAGE_ORDER/KMALLOC_MAX_SIZE.
    
    Since there is no limit imposed on the size of buffer for both control
    and non control transfers, cap the raw_io transfer length to
    KMALLOC_MAX_SIZE and return -EINVAL for larger transfer length to
    prevent any warnings from the page allocator.
    
    Fixes: 37b9dd0d114a ("usb: raw-gadget: do not limit transfer length")
    Tested-by: [email protected]
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Gopi Krishna Menon <[email protected]>
    Reviewed-by: Andrey Konovalov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

usb: renesas_usbhs: Fix a resource leak in usbhs_pipe_malloc() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Thu Dec 4 21:21:29 2025 +0800

    usb: renesas_usbhs: Fix a resource leak in usbhs_pipe_malloc()
    
    commit 36cc7e09df9e43db21b46519b740145410dd9f4a upstream.
    
    usbhsp_get_pipe() set pipe's flags to IS_USED. In error paths,
    usbhsp_put_pipe() is required to clear pipe's flags to prevent
    pipe exhaustion.
    
    Fixes: f1407d5c6624 ("usb: renesas_usbhs: Add Renesas USBHS common code")
    Cc: stable <[email protected]>
    Signed-off-by: Haoxiang Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
USB: serial: belkin_sa: fix TIOCMBIS and TIOCMBIC [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Wed Oct 22 17:26:33 2025 +0200

    USB: serial: belkin_sa: fix TIOCMBIS and TIOCMBIC
    
    commit b6e0b3016187446ddef9edac03cd9d544ac63f11 upstream.
    
    Asserting or deasserting a modem control line using TIOCMBIS or TIOCMBIC
    should not deassert any lines that are not in the mask.
    
    Fix this long-standing regression dating back to 2003 when the
    tiocmset() callback was introduced.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Reviewed-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: ftdi_sio: match on interface number for jtag [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Nov 10 12:12:05 2025 +0100

    USB: serial: ftdi_sio: match on interface number for jtag
    
    commit 4e31a5d0a9ee672f708fc993c1d5520643f769fd upstream.
    
    Some FTDI devices have the first port reserved for JTAG and have been
    using a dedicated quirk to prevent binding to it.
    
    As can be inferred directly or indirectly from the commit messages,
    almost all of these devices are dual port devices which means that the
    more recently added macro for matching on interface number can be used
    instead (and some such devices do so already).
    
    This avoids probing interfaces that will never be bound and cleans up
    the match table somewhat.
    
    Note that the JTAG quirk is kept for quad port devices, which would
    otherwise require three match entries.
    
    Cc: [email protected]
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: kobil_sct: fix TIOCMBIS and TIOCMBIC [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Wed Oct 22 17:26:34 2025 +0200

    USB: serial: kobil_sct: fix TIOCMBIS and TIOCMBIC
    
    commit d432df758f92c4c28aac409bc807fd1716167577 upstream.
    
    Asserting or deasserting a modem control line using TIOCMBIS or TIOCMBIC
    should not deassert any lines that are not in the mask.
    
    Fix this long-standing issue dating back to 2003 when the support for
    these ioctls was added with the introduction of the tiocmset() callback.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Reviewed-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: option: add Foxconn T99W760 [+ + +]
Author: Slark Xiao <[email protected]>
Date:   Tue Nov 18 14:45:28 2025 +0800

    USB: serial: option: add Foxconn T99W760
    
    commit 7970b4969c4c99bcdaf105f9f39c6d2021f6d244 upstream.
    
    T99W760 is designed based on Qualcomm SDX35 (5G redcap) chip. There are
    three serial ports to be enumerated: Modem, NMEA and Diag.
    
    test evidence as below:
    T:  Bus=03 Lev=01 Prnt=01 Port=03 Cnt=01 Dev#=  4 Spd=5000  MxCh= 0
    D:  Ver= 3.20 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=0489 ProdID=e123 Rev=05.15
    S:  Manufacturer=QCOM
    S:  Product=SDXBAAGHA-IDP _SN:39A8D3E4
    S:  SerialNumber=39a8d3e4
    C:  #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=896mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
    E:  Ad=85(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=87(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=88(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    
    0&1: MBIM, 2:Modem, 3:GNSS(non-serial port), 4: NMEA, 5:Diag
    
    Signed-off-by: Slark Xiao <[email protected]>
    Cc: [email protected]
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: option: add Telit Cinterion FE910C04 new compositions [+ + +]
Author: Fabio Porcedda <[email protected]>
Date:   Wed Nov 26 15:26:39 2025 +0100

    USB: serial: option: add Telit Cinterion FE910C04 new compositions
    
    commit c908039a29aa70870871f4848125b3d743f929bf upstream.
    
    Add the following Telit Cinterion new compositions:
    
    0x10c1: RNDIS + tty (AT/NMEA) + tty (AT) + tty (diag)
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10c1 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=ef(misc ) Sub=04 Prot=01 Driver=rndis_host
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10c2: MBIM + tty (AT/NMEA) + tty (AT) + tty (diag)
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  8 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10c2 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10c3: ECM + tty (AT/NMEA) + tty (AT) + tty (diag)
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  9 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10c3 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=06 Prot=00 Driver=cdc_ether
    E:  Ad=82(I) Atr=03(Int.) MxPS=  16 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10c5: RNDIS + tty (AT) + tty (AT) + tty (diag)
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 10 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10c5 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=ef(misc ) Sub=04 Prot=01 Driver=rndis_host
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10c6: MBIM + tty (AT) + tty (AT) + tty (diag)
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 11 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10c6 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10c9: MBIM + tty (AT) + tty (diag) + DPL (Data Packet Logging) + adb
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 13 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10c9 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 6 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 4 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=usbfs
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10cb: RNDIS + tty (AT) + tty (diag) + DPL (Data Packet Logging) + adb
    T:  Bus=01 Lev=01 Prnt=01 Port=09 Cnt=01 Dev#=  9 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10cb Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 6 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=ef(misc ) Sub=04 Prot=01 Driver=rndis_host
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 4 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Cc: [email protected]
    Signed-off-by: Fabio Porcedda <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: option: move Telit 0x10c7 composition in the right place [+ + +]
Author: Fabio Porcedda <[email protected]>
Date:   Wed Nov 26 15:26:40 2025 +0100

    USB: serial: option: move Telit 0x10c7 composition in the right place
    
    commit 072f2c49572547f4b0776fe2da6b8f61e4b34699 upstream.
    
    Move Telit 0x10c7 composition right after 0x10c6 composition and
    before 0x10c8 composition.
    
    Signed-off-by: Fabio Porcedda <[email protected]>
    Cc: [email protected]
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usb: typec: ucsi: Handle incorrect num_connectors capability [+ + +]
Author: Mark Pearson <[email protected]>
Date:   Thu Aug 21 14:53:07 2025 -0400

    usb: typec: ucsi: Handle incorrect num_connectors capability
    
    [ Upstream commit 30cd2cb1abf4c4acdb1ddb468c946f68939819fb ]
    
    The UCSI spec states that the num_connectors field is 7 bits, and the
    8th bit is reserved and should be set to zero.
    Some buggy FW has been known to set this bit, and it can lead to a
    system not booting.
    Flag that the FW is not behaving correctly, and auto-fix the value
    so that the system boots correctly.
    
    Found on Lenovo P1 G8 during Linux enablement program. The FW will
    be fixed, but seemed worth addressing in case it hit platforms that
    aren't officially Linux supported.
    
    Signed-off-by: Mark Pearson <[email protected]>
    Reviewed-by: Heikki Krogerus <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

usb: usb-storage: Maintain minimal modifications to the bcdDevice range. [+ + +]
Author: Chen Changcheng <[email protected]>
Date:   Thu Dec 18 09:23:18 2025 +0800

    usb: usb-storage: Maintain minimal modifications to the bcdDevice range.
    
    commit 0831269b5f71594882accfceb02638124f88955d upstream.
    
    We cannot determine which models require the NO_ATA_1X and
    IGNORE_RESIDUE quirks aside from the EL-R12 optical drive device.
    
    Fixes: 955a48a5353f ("usb: usb-storage: No additional quirks need to be added to the EL-R12 optical drive.")
    Signed-off-by: Chen Changcheng <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: usb-storage: No additional quirks need to be added to the EL-R12 optical drive. [+ + +]
Author: Chen Changcheng <[email protected]>
Date:   Fri Nov 21 14:40:20 2025 +0800

    usb: usb-storage: No additional quirks need to be added to the EL-R12 optical drive.
    
    [ Upstream commit 955a48a5353f4fe009704a9a4272a3adf627cd35 ]
    
    The optical drive of EL-R12 has the same vid and pid as INIC-3069,
    as follows:
    T:  Bus=02 Lev=02 Prnt=02 Port=01 Cnt=01 Dev#=  3 Spd=5000 MxCh= 0
    D:  Ver= 3.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs=  1
    P:  Vendor=13fd ProdID=3940 Rev= 3.10
    S:  Manufacturer=HL-DT-ST
    S:  Product= DVD+-RW GT80N
    S:  SerialNumber=423349524E4E38303338323439202020
    C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=144mA
    I:* If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=02 Prot=50 Driver=usb-storage
    E:  Ad=83(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=0a(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    
    This will result in the optical drive device also adding
    the quirks of US_FL_NO_ATA_1X. When performing an erase operation,
    it will fail, and the reason for the failure is as follows:
    [  388.967742] sr 5:0:0:0: [sr0] tag#0 Send: scmd 0x00000000d20c33a7
    [  388.967742] sr 5:0:0:0: [sr0] tag#0 CDB: ATA command pass through(12)/Blank a1 11 00 00 00 00 00 00 00 00 00 00
    [  388.967773] sr 5:0:0:0: [sr0] tag#0 Done: SUCCESS Result: hostbyte=DID_TARGET_FAILURE driverbyte=DRIVER_OK cmd_age=0s
    [  388.967773] sr 5:0:0:0: [sr0] tag#0 CDB: ATA command pass through(12)/Blank a1 11 00 00 00 00 00 00 00 00 00 00
    [  388.967803] sr 5:0:0:0: [sr0] tag#0 Sense Key : Illegal Request [current]
    [  388.967803] sr 5:0:0:0: [sr0] tag#0 Add. Sense: Invalid field in cdb
    [  388.967803] sr 5:0:0:0: [sr0] tag#0 scsi host busy 1 failed 0
    [  388.967803] sr 5:0:0:0: Notifying upper driver of completion (result 8100002)
    [  388.967834] sr 5:0:0:0: [sr0] tag#0 0 sectors total, 0 bytes done.
    
    For the EL-R12 standard optical drive, all operational commands
    and usage scenarios were tested without adding the IGNORE_RESIDUE quirks,
    and no issues were encountered. It can be reasonably concluded
    that removing the IGNORE_RESIDUE quirks has no impact.
    
    Signed-off-by: Chen Changcheng <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

usb: xhci: Apply the link chain quirk on NEC isoc endpoints [+ + +]
Author: Michal Pecio <[email protected]>
Date:   Thu Jan 8 00:49:27 2026 -0800

    usb: xhci: Apply the link chain quirk on NEC isoc endpoints
    
    commit bb0ba4cb1065e87f9cc75db1fa454e56d0894d01 upstream.
    
    Two clearly different specimens of NEC uPD720200 (one with start/stop
    bug, one without) were seen to cause IOMMU faults after some Missed
    Service Errors. Faulting address is immediately after a transfer ring
    segment and patched dynamic debug messages revealed that the MSE was
    received when waiting for a TD near the end of that segment:
    
    [ 1.041954] xhci_hcd: Miss service interval error for slot 1 ep 2 expected TD DMA ffa08fe0
    [ 1.042120] xhci_hcd: AMD-Vi: Event logged [IO_PAGE_FAULT domain=0x0005 address=0xffa09000 flags=0x0000]
    [ 1.042146] xhci_hcd: AMD-Vi: Event logged [IO_PAGE_FAULT domain=0x0005 address=0xffa09040 flags=0x0000]
    
    It gets even funnier if the next page is a ring segment accessible to
    the HC. Below, it reports MSE in segment at ff1e8000, plows through a
    zero-filled page at ff1e9000 and starts reporting events for TRBs in
    page at ff1ea000 every microframe, instead of jumping to seg ff1e6000.
    
    [ 7.041671] xhci_hcd: Miss service interval error for slot 1 ep 2 expected TD DMA ff1e8fe0
    [ 7.041999] xhci_hcd: Miss service interval error for slot 1 ep 2 expected TD DMA ff1e8fe0
    [ 7.042011] xhci_hcd: WARN: buffer overrun event for slot 1 ep 2 on endpoint
    [ 7.042028] xhci_hcd: All TDs skipped for slot 1 ep 2. Clear skip flag.
    [ 7.042134] xhci_hcd: WARN: buffer overrun event for slot 1 ep 2 on endpoint
    [ 7.042138] xhci_hcd: ERROR Transfer event TRB DMA ptr not part of current TD ep_index 2 comp_code 31
    [ 7.042144] xhci_hcd: Looking for event-dma 00000000ff1ea040 trb-start 00000000ff1e6820 trb-end 00000000ff1e6820
    [ 7.042259] xhci_hcd: WARN: buffer overrun event for slot 1 ep 2 on endpoint
    [ 7.042262] xhci_hcd: ERROR Transfer event TRB DMA ptr not part of current TD ep_index 2 comp_code 31
    [ 7.042266] xhci_hcd: Looking for event-dma 00000000ff1ea050 trb-start 00000000ff1e6820 trb-end 00000000ff1e6820
    
    At some point completion events change from Isoch Buffer Overrun to
    Short Packet and the HC finally finds cycle bit mismatch in ff1ec000.
    
    [ 7.098130] xhci_hcd: ERROR Transfer event TRB DMA ptr not part of current TD ep_index 2 comp_code 13
    [ 7.098132] xhci_hcd: Looking for event-dma 00000000ff1ecc50 trb-start 00000000ff1e6820 trb-end 00000000ff1e6820
    [ 7.098254] xhci_hcd: ERROR Transfer event TRB DMA ptr not part of current TD ep_index 2 comp_code 13
    [ 7.098256] xhci_hcd: Looking for event-dma 00000000ff1ecc60 trb-start 00000000ff1e6820 trb-end 00000000ff1e6820
    [ 7.098379] xhci_hcd: Overrun event on slot 1 ep 2
    
    It's possible that data from the isochronous device were written to
    random buffers of pending TDs on other endpoints (either IN or OUT),
    other devices or even other HCs in the same IOMMU domain.
    
    Lastly, an error from a different USB device on another HC. Was it
    caused by the above? I don't know, but it may have been. The disk
    was working without any other issues and generated PCIe traffic to
    starve the NEC of upstream BW and trigger those MSEs. The two HCs
    shared one x1 slot by means of a commercial "PCIe splitter" board.
    
    [ 7.162604] usb 10-2: reset SuperSpeed USB device number 3 using xhci_hcd
    [ 7.178990] sd 9:0:0:0: [sdb] tag#0 UNKNOWN(0x2003) Result: hostbyte=0x07 driverbyte=DRIVER_OK cmd_age=0s
    [ 7.179001] sd 9:0:0:0: [sdb] tag#0 CDB: opcode=0x28 28 00 04 02 ae 00 00 02 00 00
    [ 7.179004] I/O error, dev sdb, sector 67284480 op 0x0:(READ) flags 0x80700 phys_seg 5 prio class 0
    
    Fortunately, it appears that this ridiculous bug is avoided by setting
    the chain bit of Link TRBs on isochronous rings. Other ancient HCs are
    known which also expect the bit to be set and they ignore Link TRBs if
    it's not. Reportedly, 0.95 spec guaranteed that the bit is set.
    
    The bandwidth-starved NEC HC running a 32KB/uframe UVC endpoint reports
    tens of MSEs per second and runs into the bug within seconds. Chaining
    Link TRBs allows the same workload to run for many minutes, many times.
    
    No negative side effects seen in UVC recording and UAC playback with a
    few devices at full speed, high speed and SuperSpeed.
    
    The problem doesn't reproduce on the newer Renesas uPD720201/uPD720202
    and on old Etron EJ168 and VIA VL805 (but the VL805 has other bug).
    
    [shorten line length of log snippets in commit messge -Mathias]
    
    Signed-off-by: Michal Pecio <[email protected]>
    Cc: [email protected]
    Signed-off-by: Mathias Nyman <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    [Shivani: Modified to apply on v5.10.y-v6.1.y]
    Signed-off-by: Shivani Agarwal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: xhci: limit run_graceperiod for only usb 3.0 devices [+ + +]
Author: Hongyu Xie <[email protected]>
Date:   Wed Nov 19 16:23:55 2025 +0200

    usb: xhci: limit run_graceperiod for only usb 3.0 devices
    
    [ Upstream commit 8d34983720155b8f05de765f0183d9b0e1345cc0 ]
    
    run_graceperiod blocks usb 2.0 devices from auto suspending after
    xhci_start for 500ms.
    
    Log shows:
    [   13.387170] xhci_hub_control:1271: xhci-hcd PNP0D10:03: Get port status 7-1 read: 0x2a0, return 0x100
    [   13.387177] hub_event:5779: hub 7-0:1.0: state 7 ports 1 chg 0000 evt 0000
    [   13.387182] hub_suspend:3903: hub 7-0:1.0: hub_suspend
    [   13.387188] hcd_bus_suspend:2250: usb usb7: bus auto-suspend, wakeup 1
    [   13.387191] hcd_bus_suspend:2279: usb usb7: suspend raced with wakeup event
    [   13.387193] hcd_bus_resume:2303: usb usb7: usb auto-resume
    [   13.387296] hub_event:5779: hub 3-0:1.0: state 7 ports 1 chg 0000 evt 0000
    [   13.393343] handle_port_status:2034: xhci-hcd PNP0D10:02: handle_port_status: starting usb5 port polling.
    [   13.393353] xhci_hub_control:1271: xhci-hcd PNP0D10:02: Get port status 5-1 read: 0x206e1, return 0x10101
    [   13.400047] hub_suspend:3903: hub 3-0:1.0: hub_suspend
    [   13.403077] hub_resume:3948: hub 7-0:1.0: hub_resume
    [   13.403080] xhci_hub_control:1271: xhci-hcd PNP0D10:03: Get port status 7-1 read: 0x2a0, return 0x100
    [   13.403085] hub_event:5779: hub 7-0:1.0: state 7 ports 1 chg 0000 evt 0000
    [   13.403087] hub_suspend:3903: hub 7-0:1.0: hub_suspend
    [   13.403090] hcd_bus_suspend:2250: usb usb7: bus auto-suspend, wakeup 1
    [   13.403093] hcd_bus_suspend:2279: usb usb7: suspend raced with wakeup event
    [   13.403095] hcd_bus_resume:2303: usb usb7: usb auto-resume
    [   13.405002] handle_port_status:1913: xhci-hcd PNP0D10:04: Port change event, 9-1, id 1, portsc: 0x6e1
    [   13.405016] hub_activate:1169: usb usb5-port1: status 0101 change 0001
    [   13.405026] xhci_clear_port_change_bit:658: xhci-hcd PNP0D10:02: clear port1 connect change, portsc: 0x6e1
    [   13.413275] hcd_bus_suspend:2250: usb usb3: bus auto-suspend, wakeup 1
    [   13.419081] hub_resume:3948: hub 7-0:1.0: hub_resume
    [   13.419086] xhci_hub_control:1271: xhci-hcd PNP0D10:03: Get port status 7-1 read: 0x2a0, return 0x100
    [   13.419095] hub_event:5779: hub 7-0:1.0: state 7 ports 1 chg 0000 evt 0000
    [   13.419100] hub_suspend:3903: hub 7-0:1.0: hub_suspend
    [   13.419106] hcd_bus_suspend:2250: usb usb7: bus auto-suspend, wakeup 1
    [   13.419110] hcd_bus_suspend:2279: usb usb7: suspend raced with wakeup event
    [   13.419112] hcd_bus_resume:2303: usb usb7: usb auto-resume
    [   13.420455] handle_port_status:2034: xhci-hcd PNP0D10:04: handle_port_status: starting usb9 port polling.
    [   13.420493] handle_port_status:1913: xhci-hcd PNP0D10:05: Port change event, 10-1, id 1, portsc: 0x6e1
    [   13.425332] hcd_bus_suspend:2279: usb usb3: suspend raced with wakeup event
    [   13.431931] handle_port_status:2034: xhci-hcd PNP0D10:05: handle_port_status: starting usb10 port polling.
    [   13.435080] hub_resume:3948: hub 7-0:1.0: hub_resume
    [   13.435084] xhci_hub_control:1271: xhci-hcd PNP0D10:03: Get port status 7-1 read: 0x2a0, return 0x100
    [   13.435092] hub_event:5779: hub 7-0:1.0: state 7 ports 1 chg 0000 evt 0000
    [   13.435096] hub_suspend:3903: hub 7-0:1.0: hub_suspend
    [   13.435102] hcd_bus_suspend:2250: usb usb7: bus auto-suspend, wakeup 1
    [   13.435106] hcd_bus_suspend:2279: usb usb7: suspend raced with wakeup event
    
    usb7 and other usb 2.0 root hub were rapidly toggling between suspend
    and resume states. More, "suspend raced with wakeup event" confuses people.
    
    So, limit run_graceperiod for only usb 3.0 devices
    
    Signed-off-by: Hongyu Xie <[email protected]>
    Signed-off-by: Mathias Nyman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

usb: xhci: move link chain bit quirk checks into one helper function. [+ + +]
Author: Niklas Neronin <[email protected]>
Date:   Thu Jan 8 00:49:26 2026 -0800

    usb: xhci: move link chain bit quirk checks into one helper function.
    
    commit 7476a2215c07703db5e95efaa3fc5b9f957b9417 upstream.
    
    Older 0.95 xHCI hosts and some other specific newer hosts require the
    chain bit to be set for Link TRBs even if the link TRB is not in the
    middle of a transfer descriptor (TD).
    
    move the checks for all those cases  into one xhci_link_chain_quirk()
    function to clean up and avoid code duplication.
    
    No functional changes.
    
    [skip renaming chain_links flag, reword commit message -Mathias]
    
    Signed-off-by: Niklas Neronin <[email protected]>
    Signed-off-by: Mathias Nyman <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    [Shivani: Modified to apply on v5.10.y-v6.1.y]
    Signed-off-by: Shivani Agarwal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usbip: Fix locking bug in RT-enabled kernels [+ + +]
Author: Lizhi Xu <[email protected]>
Date:   Tue Sep 16 09:41:43 2025 +0800

    usbip: Fix locking bug in RT-enabled kernels
    
    [ Upstream commit 09bf21bf5249880f62fe759b53b14b4b52900c6c ]
    
    Interrupts are disabled before entering usb_hcd_giveback_urb().
    A spinlock_t becomes a sleeping lock on PREEMPT_RT, so it cannot be
    acquired with disabled interrupts.
    
    Save the interrupt status and restore it after usb_hcd_giveback_urb().
    
    syz reported:
    BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:48
    Call Trace:
     dump_stack_lvl+0x189/0x250 lib/dump_stack.c:120
     rt_spin_lock+0xc7/0x2c0 kernel/locking/spinlock_rt.c:57
     spin_lock include/linux/spinlock_rt.h:44 [inline]
     mon_bus_complete drivers/usb/mon/mon_main.c:134 [inline]
     mon_complete+0x5c/0x200 drivers/usb/mon/mon_main.c:147
     usbmon_urb_complete include/linux/usb/hcd.h:738 [inline]
     __usb_hcd_giveback_urb+0x254/0x5e0 drivers/usb/core/hcd.c:1647
     vhci_urb_enqueue+0xb4f/0xe70 drivers/usb/usbip/vhci_hcd.c:818
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=205ef33a3b636b4181fb
    Signed-off-by: Lizhi Xu <[email protected]>
    Acked-by: Shuah Khan <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
vhost/vsock: improve RCU read sections around vhost_vsock_get() [+ + +]
Author: Stefano Garzarella <[email protected]>
Date:   Wed Nov 26 14:38:26 2025 +0100

    vhost/vsock: improve RCU read sections around vhost_vsock_get()
    
    [ Upstream commit d8ee3cfdc89b75dc059dc21c27bef2c1440f67eb ]
    
    vhost_vsock_get() uses hash_for_each_possible_rcu() to find the
    `vhost_vsock` associated with the `guest_cid`. hash_for_each_possible_rcu()
    should only be called within an RCU read section, as mentioned in the
    following comment in include/linux/rculist.h:
    
    /**
     * hlist_for_each_entry_rcu - iterate over rcu list of given type
     * @pos:        the type * to use as a loop cursor.
     * @head:       the head for your list.
     * @member:     the name of the hlist_node within the struct.
     * @cond:       optional lockdep expression if called from non-RCU protection.
     *
     * This list-traversal primitive may safely run concurrently with
     * the _rcu list-mutation primitives such as hlist_add_head_rcu()
     * as long as the traversal is guarded by rcu_read_lock().
     */
    
    Currently, all calls to vhost_vsock_get() are between rcu_read_lock()
    and rcu_read_unlock() except for calls in vhost_vsock_set_cid() and
    vhost_vsock_reset_orphans(). In both cases, the current code is safe,
    but we can make improvements to make it more robust.
    
    About vhost_vsock_set_cid(), when building the kernel with
    CONFIG_PROVE_RCU_LIST enabled, we get the following RCU warning when the
    user space issues `ioctl(dev, VHOST_VSOCK_SET_GUEST_CID, ...)` :
    
      WARNING: suspicious RCU usage
      6.18.0-rc7 #62 Not tainted
      -----------------------------
      drivers/vhost/vsock.c:74 RCU-list traversed in non-reader section!!
    
      other info that might help us debug this:
    
      rcu_scheduler_active = 2, debug_locks = 1
      1 lock held by rpc-libvirtd/3443:
       #0: ffffffffc05032a8 (vhost_vsock_mutex){+.+.}-{4:4}, at: vhost_vsock_dev_ioctl+0x2ff/0x530 [vhost_vsock]
    
      stack backtrace:
      CPU: 2 UID: 0 PID: 3443 Comm: rpc-libvirtd Not tainted 6.18.0-rc7 #62 PREEMPT(none)
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.17.0-7.fc42 06/10/2025
      Call Trace:
       <TASK>
       dump_stack_lvl+0x75/0xb0
       dump_stack+0x14/0x1a
       lockdep_rcu_suspicious.cold+0x4e/0x97
       vhost_vsock_get+0x8f/0xa0 [vhost_vsock]
       vhost_vsock_dev_ioctl+0x307/0x530 [vhost_vsock]
       __x64_sys_ioctl+0x4f2/0xa00
       x64_sys_call+0xed0/0x1da0
       do_syscall_64+0x73/0xfa0
       entry_SYSCALL_64_after_hwframe+0x76/0x7e
       ...
       </TASK>
    
    This is not a real problem, because the vhost_vsock_get() caller, i.e.
    vhost_vsock_set_cid(), holds the `vhost_vsock_mutex` used by the hash
    table writers. Anyway, to prevent that warning, add lockdep_is_held()
    condition to hash_for_each_possible_rcu() to verify that either the
    caller is in an RCU read section or `vhost_vsock_mutex` is held when
    CONFIG_PROVE_RCU_LIST is enabled; and also clarify the comment for
    vhost_vsock_get() to better describe the locking requirements and the
    scope of the returned pointer validity.
    
    About vhost_vsock_reset_orphans(), currently this function is only
    called via vsock_for_each_connected_socket(), which holds the
    `vsock_table_lock` spinlock (which is also an RCU read-side critical
    section). However, add an explicit RCU read lock there to make the code
    more robust and explicit about the RCU requirements, and to prevent
    issues if the calling context changes in the future or if
    vhost_vsock_reset_orphans() is called from other contexts.
    
    Fixes: 834e772c8db0 ("vhost/vsock: fix use-after-free in network stack callers")
    Cc: [email protected]
    Signed-off-by: Stefano Garzarella <[email protected]>
    Reviewed-by: Stefan Hajnoczi <[email protected]>
    Message-Id: <[email protected]>
    Message-ID: <20251126210313.GA499503@fedora>
    Acked-by: Jason Wang <[email protected]>
    Signed-off-by: Michael S. Tsirkin <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
via_wdt: fix critical boot hang due to unnamed resource allocation [+ + +]
Author: Li Qiang <[email protected]>
Date:   Sun Sep 28 16:33:32 2025 +0800

    via_wdt: fix critical boot hang due to unnamed resource allocation
    
    [ Upstream commit 7aa31ee9ec92915926e74731378c009c9cc04928 ]
    
    The VIA watchdog driver uses allocate_resource() to reserve a MMIO
    region for the watchdog control register. However, the allocated
    resource was not given a name, which causes the kernel resource tree
    to contain an entry marked as "<BAD>" under /proc/iomem on x86
    platforms.
    
    During boot, this unnamed resource can lead to a critical hang because
    subsequent resource lookups and conflict checks fail to handle the
    invalid entry properly.
    
    Signed-off-by: Li Qiang <[email protected]>
    Reviewed-by: Guenter Roeck <[email protected]>
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Wim Van Sebroeck <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
virtio: fix typo in virtio_device_ready() comment [+ + +]
Author: Michael S. Tsirkin <[email protected]>
Date:   Thu Nov 13 04:34:31 2025 -0500

    virtio: fix typo in virtio_device_ready() comment
    
    [ Upstream commit 361173f95ae4b726ebbbf0bd594274f5576c4abc ]
    
    "coherenct" -> "coherent"
    
    Fixes: 8b4ec69d7e09 ("virtio: harden vring IRQ")
    Message-Id: <db286e9a65449347f6584e68c9960fd5ded2b4b0.1763026134.git.mst@redhat.com>
    Acked-by: Jason Wang <[email protected]>
    Signed-off-by: Michael S. Tsirkin <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

virtio: fix virtqueue_set_affinity() docs [+ + +]
Author: Michael S. Tsirkin <[email protected]>
Date:   Thu Nov 13 04:34:43 2025 -0500

    virtio: fix virtqueue_set_affinity() docs
    
    [ Upstream commit 43236d8bbafff94b423afecc4a692dd90602d426 ]
    
    Rewrite the comment for better grammar and clarity.
    
    Fixes: 75a0a52be3c2 ("virtio: introduce an API to set affinity for a virtqueue")
    Message-Id: <e317e91bd43b070e5eaec0ebbe60c5749d02e2dd.1763026134.git.mst@redhat.com>
    Acked-by: Jason Wang <[email protected]>
    Signed-off-by: Michael S. Tsirkin <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
virtio_console: fix order of fields cols and rows [+ + +]
Author: Maximilian Immanuel Brandtner <[email protected]>
Date:   Mon Mar 24 15:42:46 2025 +0100

    virtio_console: fix order of fields cols and rows
    
    commit 5326ab737a47278dbd16ed3ee7380b26c7056ddd upstream.
    
    According to section 5.3.6.2 (Multiport Device Operation) of the virtio
    spec(version 1.2) a control buffer with the event VIRTIO_CONSOLE_RESIZE
    is followed by a virtio_console_resize struct containing cols then rows.
    The kernel implements this the wrong way around (rows then cols) resulting
    in the two values being swapped.
    
    Signed-off-by: Maximilian Immanuel Brandtner <[email protected]>
    Message-Id: <[email protected]>
    Signed-off-by: Michael S. Tsirkin <[email protected]>
    Cc: Filip Hejsek <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
virtio_vdpa: fix misleading return in void function [+ + +]
Author: Alok Tiwari <[email protected]>
Date:   Wed Oct 1 12:16:50 2025 -0700

    virtio_vdpa: fix misleading return in void function
    
    [ Upstream commit e40b6abe0b1247d43bc61942aa7534fca7209e44 ]
    
    virtio_vdpa_set_status() is declared as returning void, but it used
    "return vdpa_set_status()" Since vdpa_set_status() also returns
    void, the return statement is unnecessary and misleading.
    Remove it.
    
    Fixes: c043b4a8cf3b ("virtio: introduce a vDPA based transport")
    Signed-off-by: Alok Tiwari <[email protected]>
    Message-Id: <[email protected]>
    Signed-off-by: Michael S. Tsirkin <[email protected]>
    Acked-by: Jason Wang <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
watchdog: wdat_wdt: Fix ACPI table leak in probe function [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Thu Nov 13 10:30:32 2025 +0800

    watchdog: wdat_wdt: Fix ACPI table leak in probe function
    
    [ Upstream commit 25c0b472eab8379683d4eef681185c104bed8ffd ]
    
    wdat_wdt_probe() calls acpi_get_table() to obtain the WDAT ACPI table but
    never calls acpi_put_table() on any paths. This causes a permanent ACPI
    table memory leak.
    
    Add a single cleanup path which calls acpi_put_table() to ensure
    the ACPI table is always released.
    
    Fixes: 058dfc767008 ("ACPI / watchdog: Add support for WDAT hardware watchdog")
    Suggested-by: Guenter Roeck <[email protected]>
    Signed-off-by: Haotian Zhang <[email protected]>
    Reviewed-by: Guenter Roeck <[email protected]>
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Wim Van Sebroeck <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
wifi: ath11k: fix peer HE MCS assignment [+ + +]
Author: Baochen Qiang <[email protected]>
Date:   Fri Oct 17 09:49:00 2025 +0800

    wifi: ath11k: fix peer HE MCS assignment
    
    [ Upstream commit 4a013ca2d490c73c40588d62712ffaa432046a04 ]
    
    In ath11k_wmi_send_peer_assoc_cmd(), peer's transmit MCS is sent to
    firmware as receive MCS while peer's receive MCS sent as transmit MCS,
    which goes against firmwire's definition.
    
    While connecting to a misbehaved AP that advertises 0xffff (meaning not
    supported) for 160 MHz transmit MCS map, firmware crashes due to 0xffff
    is assigned to he_mcs->rx_mcs_set field.
    
            Ext Tag: HE Capabilities
                [...]
                Supported HE-MCS and NSS Set
                    [...]
                    Rx and Tx MCS Maps 160 MHz
                        [...]
                        Tx HE-MCS Map 160 MHz: 0xffff
    
    Swap the assignment to fix this issue.
    
    As the HE rate control mask is meant to limit our own transmit MCS, it
    needs to go via he_mcs->rx_mcs_set field. With the aforementioned swapping
    done, change is needed as well to apply it to the peer's receive MCS.
    
    Tested-on: WCN6855 hw2.1 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.41
    Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1
    
    Fixes: 61fe43e7216d ("ath11k: add support for setting fixed HE rate/gi/ltf")
    Signed-off-by: Baochen Qiang <[email protected]>
    Reviewed-by: Vasanthakumar Thiagarajan <[email protected]>
    Link: https://patch.msgid.link/20251017-ath11k-mcs-assignment-v1-2-da40825c1783@oss.qualcomm.com
    Signed-off-by: Jeff Johnson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: brcmfmac: Add DMI nvram filename quirk for Acer A1 840 tablet [+ + +]
Author: Hans de Goede <[email protected]>
Date:   Mon Nov 3 11:03:14 2025 +0100

    wifi: brcmfmac: Add DMI nvram filename quirk for Acer A1 840 tablet
    
    [ Upstream commit a8e5a110c0c38e08e5dd66356cd1156e91cf88e1 ]
    
    The Acer A1 840 tablet contains quite generic names in the sys_vendor and
    product_name DMI strings, without this patch brcmfmac will try to load:
    brcmfmac43340-sdio.Insyde-BayTrail.txt as nvram file which is a bit
    too generic.
    
    Add a DMI quirk so that a unique and clearly identifiable nvram file name
    is used on the Acer A1 840 tablet.
    
    Acked-by: Arend van Spriel <[email protected]>
    Signed-off-by: Hans de Goede <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: cfg80211: move puncturing bitmap validation from mac80211 [+ + +]
Author: Aloka Dixit <[email protected]>
Date:   Mon Jan 30 16:12:24 2023 -0800

    wifi: cfg80211: move puncturing bitmap validation from mac80211
    
    [ Upstream commit b25413fed3d43e1ed3340df4d928971bb8639f66 ]
    
    - Move ieee80211_valid_disable_subchannel_bitmap() from mlme.c to
      chan.c, rename it as cfg80211_valid_disable_subchannel_bitmap()
      and export it.
    - Modify the prototype to include struct cfg80211_chan_def instead
      of only bandwidth to support a check which returns false if the
      primary channel is punctured.
    
    Signed-off-by: Aloka Dixit <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Stable-dep-of: a519be2f5d95 ("wifi: mac80211: do not use old MBSSID elements")
    Signed-off-by: Sasha Levin <[email protected]>

wifi: cfg80211: sme: store capped length in __cfg80211_connect_result() [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Wed Dec 3 14:14:47 2025 +0300

    wifi: cfg80211: sme: store capped length in __cfg80211_connect_result()
    
    [ Upstream commit 2b77b9551d1184cb5af8271ff350e6e2c1b3db0d ]
    
    The QGenie AI code review tool says we should store the capped length to
    wdev->u.client.ssid_len.  The AI is correct.
    
    Fixes: 62b635dcd69c ("wifi: cfg80211: sme: cap SSID length in __cfg80211_connect_result()")
    Signed-off-by: Dan Carpenter <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: cw1200: Fix potential memory leak in cw1200_bh_rx_helper() [+ + +]
Author: Abdun Nihaal <[email protected]>
Date:   Mon Nov 10 23:23:15 2025 +0530

    wifi: cw1200: Fix potential memory leak in cw1200_bh_rx_helper()
    
    [ Upstream commit 5e88e864118c20e63a1571d0ff0a152e5d684959 ]
    
    In one of the error paths, the memory allocated for skb_rx is not freed.
    Fix that by freeing it before returning.
    
    Fixes: a910e4a94f69 ("cw1200: add driver for the ST-E CW1100 & CW1200 WLAN chipsets")
    Signed-off-by: Abdun Nihaal <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: ieee80211: correct FILS status codes [+ + +]
Author: Ria Thomas <[email protected]>
Date:   Mon Nov 24 18:26:37 2025 +0530

    wifi: ieee80211: correct FILS status codes
    
    [ Upstream commit 24d4da5c2565313c2ad3c43449937a9351a64407 ]
    
    The FILS status codes are set to 108/109, but the IEEE 802.11-2020
    spec defines them as 112/113. Update the enum so it matches the
    specification and keeps the kernel consistent with standard values.
    
    Fixes: a3caf7440ded ("cfg80211: Add support for FILS shared key authentication offload")
    Signed-off-by: Ria Thomas <[email protected]>
    Reviewed-by: Jeff Johnson <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mac80211: Discard Beacon frames to non-broadcast address [+ + +]
Author: Jouni Malinen <[email protected]>
Date:   Tue Jan 6 21:34:39 2026 -0500

    wifi: mac80211: Discard Beacon frames to non-broadcast address
    
    [ Upstream commit 193d18f60588e95d62e0f82b6a53893e5f2f19f8 ]
    
    Beacon frames are required to be sent to the broadcast address, see IEEE
    Std 802.11-2020, 11.1.3.1 ("The Address 1 field of the Beacon .. frame
    shall be set to the broadcast address"). A unicast Beacon frame might be
    used as a targeted attack to get one of the associated STAs to do
    something (e.g., using CSA to move it to another channel). As such, it
    is better have strict filtering for this on the received side and
    discard all Beacon frames that are sent to an unexpected address.
    
    This is even more important for cases where beacon protection is used.
    The current implementation in mac80211 is correctly discarding unicast
    Beacon frames if the Protected Frame bit in the Frame Control field is
    set to 0. However, if that bit is set to 1, the logic used for checking
    for configured BIGTK(s) does not actually work. If the driver does not
    have logic for dropping unicast Beacon frames with Protected Frame bit
    1, these frames would be accepted in mac80211 processing as valid Beacon
    frames even though they are not protected. This would allow beacon
    protection to be bypassed. While the logic for checking beacon
    protection could be extended to cover this corner case, a more generic
    check for discard all Beacon frames based on A1=unicast address covers
    this without needing additional changes.
    
    Address all these issues by dropping received Beacon frames if they are
    sent to a non-broadcast address.
    
    Cc: [email protected]
    Fixes: af2d14b01c32 ("mac80211: Beacon protection using the new BIGTK (STA)")
    Signed-off-by: Jouni Malinen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    [ adapted RX_DROP return value to RX_DROP_MONITOR ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

wifi: mac80211: do not use old MBSSID elements [+ + +]
Author: Aloka Dixit <[email protected]>
Date:   Mon Dec 15 09:46:56 2025 -0800

    wifi: mac80211: do not use old MBSSID elements
    
    [ Upstream commit a519be2f5d958c5804f2cfd68f1f384291271fab ]
    
    When userspace brings down and deletes a non-transmitted profile,
    it is expected to send a new updated Beacon template for the
    transmitted profile of that multiple BSSID (MBSSID) group which
    does not include the removed profile in MBSSID element. This
    update comes via NL80211_CMD_SET_BEACON.
    
    Such updates work well as long as the group continues to have at
    least one non-transmitted profile as NL80211_ATTR_MBSSID_ELEMS
    is included in the new Beacon template.
    
    But when the last non-trasmitted profile is removed, it still
    gets included in Beacon templates sent to driver. This happens
    because when no MBSSID elements are sent by the userspace,
    ieee80211_assign_beacon() ends up using the element stored from
    earlier Beacon template.
    
    Do not copy old MBSSID elements, instead userspace should always
    include these when applicable.
    
    Fixes: 2b3171c6fe0a ("mac80211: MBSSID beacon handling in AP mode")
    Signed-off-by: Aloka Dixit <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mac80211: fix switch count in EMA beacons [+ + +]
Author: Aditya Kumar Singh <[email protected]>
Date:   Wed May 31 11:50:12 2023 +0530

    wifi: mac80211: fix switch count in EMA beacons
    
    commit 1afa18e9e72396d1e1aedd6dbb34681f2413316b upstream.
    
    Currently, whenever an EMA beacon is formed, due to is_template
    argument being false from the caller, the switch count is always
    decremented once which is wrong.
    
    Also if switch count is equal to profile periodicity, this makes
    the switch count to reach till zero which triggers a WARN_ON_ONCE.
    
    [  261.593915] CPU: 1 PID: 800 Comm: kworker/u8:3 Not tainted 5.4.213 #0
    [  261.616143] Hardware name: Qualcomm Technologies, Inc. IPQ9574
    [  261.622666] Workqueue: phy0 ath12k_get_link_bss_conf [ath12k]
    [  261.629771] pstate: 60400005 (nZCv daif +PAN -UAO)
    [  261.635595] pc : ieee80211_next_txq+0x1ac/0x1b8 [mac80211]
    [  261.640282] lr : ieee80211_beacon_update_cntdwn+0x64/0xb4 [mac80211]
    [...]
    [  261.729683] Call trace:
    [  261.734986]  ieee80211_next_txq+0x1ac/0x1b8 [mac80211]
    [  261.737156]  ieee80211_beacon_cntdwn_is_complete+0xa28/0x1194 [mac80211]
    [  261.742365]  ieee80211_beacon_cntdwn_is_complete+0xef4/0x1194 [mac80211]
    [  261.749224]  ieee80211_beacon_get_template_ema_list+0x38/0x5c [mac80211]
    [  261.755908]  ath12k_get_link_bss_conf+0xf8/0x33b4 [ath12k]
    [  261.762590]  ath12k_get_link_bss_conf+0x390/0x33b4 [ath12k]
    [  261.767881]  process_one_work+0x194/0x270
    [  261.773346]  worker_thread+0x200/0x314
    [  261.777514]  kthread+0x140/0x150
    [  261.781158]  ret_from_fork+0x10/0x18
    
    Fix this issue by making the is_template argument as true when fetching
    the EMA beacons.
    
    Fixes: bd54f3c29077 ("wifi: mac80211: generate EMA beacons in AP mode")
    Signed-off-by: Aditya Kumar Singh <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

wifi: mac80211: generate EMA beacons in AP mode [+ + +]
Author: Aloka Dixit <[email protected]>
Date:   Mon Dec 5 16:50:37 2022 -0800

    wifi: mac80211: generate EMA beacons in AP mode
    
    [ Upstream commit bd54f3c29077f23dad92ef82a78061b40be30c65 ]
    
    Add APIs to generate an array of beacons for an EMA AP (enhanced
    multiple BSSID advertisements), each including a single MBSSID element.
    EMA profile periodicity equals the count of elements.
    
    - ieee80211_beacon_get_template_ema_list() - Generate and return all
    EMA beacon templates. Drivers must call ieee80211_beacon_free_ema_list()
    to free the memory. No change in the prototype for the existing API,
    ieee80211_beacon_get_template(), which should be used for non-EMA AP.
    
    - ieee80211_beacon_get_template_ema_index() - Generate a beacon which
    includes the multiple BSSID element at the given index. Drivers can use
    this function in a loop until NULL is returned which indicates end of
    available MBSSID elements.
    
    - ieee80211_beacon_free_ema_list() - free the memory allocated for the
    list of EMA beacon templates.
    
    Modify existing functions ieee80211_beacon_get_ap(),
    ieee80211_get_mbssid_beacon_len() and ieee80211_beacon_add_mbssid()
    to accept a new parameter for EMA index.
    
    Signed-off-by: Aloka Dixit <[email protected]>
    Co-developed-by: John Crispin <[email protected]>
    Signed-off-by: John Crispin <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Stable-dep-of: a519be2f5d95 ("wifi: mac80211: do not use old MBSSID elements")
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mac80211: mlme: handle EHT channel puncturing [+ + +]
Author: Johannes Berg <[email protected]>
Date:   Fri Jan 27 12:39:31 2023 +0100

    wifi: mac80211: mlme: handle EHT channel puncturing
    
    [ Upstream commit aa87cd8b35736a5183745ab0ec4b82419024dfd7 ]
    
    Handle the Puncturing info received from the AP in the
    EHT Operation element in beacons.
    
    If the info is invalid:
     - during association: disable EHT connection for the AP
     - after association: disconnect
    
    This commit includes many (internal) bugfixes and spec
    updates various people.
    
    Co-developed-by: Miri Korenblit <[email protected]>
    Signed-off-by: Miri Korenblit <[email protected]>
    Link: https://lore.kernel.org/r/20230127123930.4fbc74582331.I3547481d49f958389f59dfeba3fcc75e72b0aa6e@changeid
    Signed-off-by: Johannes Berg <[email protected]>
    Stable-dep-of: a519be2f5d95 ("wifi: mac80211: do not use old MBSSID elements")
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mt76: Fix DTS power-limits on little endian systems [+ + +]
Author: Sven Eckelmann (Plasma Cloud) <[email protected]>
Date:   Mon Dec 29 16:13:28 2025 -0500

    wifi: mt76: Fix DTS power-limits on little endian systems
    
    [ Upstream commit 38b845e1f9e810869b0a0b69f202b877b7b7fb12 ]
    
    The power-limits for ru and mcs and stored in the devicetree as bytewise
    array (often with sizes which are not a multiple of 4). These arrays have a
    prefix which defines for how many modes a line is applied. This prefix is
    also only a byte - but the code still tried to fix the endianness of this
    byte with a be32 operation. As result, loading was mostly failing or was
    sending completely unexpected values to the firmware.
    
    Since the other rates are also stored in the devicetree as bytewise arrays,
    just drop the u32 access + be32_to_cpu conversion and directly access them
    as bytes arrays.
    
    Cc: [email protected]
    Fixes: 22b980badc0f ("mt76: add functions for parsing rate power limits from DT")
    Fixes: a9627d992b5e ("mt76: extend DT rate power limits to support 11ax devices")
    Signed-off-by: Sven Eckelmann (Plasma Cloud) <[email protected]>
    Signed-off-by: Felix Fietkau <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

wifi: nl80211: add a command to enable/disable HW timestamping [+ + +]
Author: Avraham Stern <[email protected]>
Date:   Wed Mar 1 12:09:21 2023 +0200

    wifi: nl80211: add a command to enable/disable HW timestamping
    
    [ Upstream commit cbbaf2bb829b6c4ef911d4a725fc9b1fadc1e43f ]
    
    Add a command to enable and disable HW timestamping of TM and FTM
    frames. HW timestamping can be enabled for a specific mac address
    or for all addresses.
    
    The low level driver will indicate how many peers HW timestamping
    can be enabled concurrently, and this information will be passed
    to userspace.
    
    Signed-off-by: Avraham Stern <[email protected]>
    Signed-off-by: Gregory Greenman <[email protected]>
    Link: https://lore.kernel.org/r/20230301115906.05678d7b1c17.Iccc08869ea8156f1c71a3111a47f86dd56234bd0@changeid
    [switch to needing netdev UP, minor edits]
    Signed-off-by: Johannes Berg <[email protected]>
    Stable-dep-of: a519be2f5d95 ("wifi: mac80211: do not use old MBSSID elements")
    Signed-off-by: Sasha Levin <[email protected]>

wifi: nl80211: fix puncturing bitmap policy [+ + +]
Author: Johannes Berg <[email protected]>
Date:   Fri Feb 24 13:36:57 2023 +0100

    wifi: nl80211: fix puncturing bitmap policy
    
    commit b27f07c50a73e34eefb6b1030b235192b7ded850 upstream.
    
    This was meant to be a u32, and while applying the patch
    I tried to use policy validation for it. However, not only
    did I copy/paste it to u8 instead of u32, but also used
    the policy range erroneously. Fix both of these issues.
    
    Fixes: d7c1a9a0ed18 ("wifi: nl80211: validate and configure puncturing bitmap")
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

wifi: nl80211: validate and configure puncturing bitmap [+ + +]
Author: Aloka Dixit <[email protected]>
Date:   Mon Jan 30 16:12:25 2023 -0800

    wifi: nl80211: validate and configure puncturing bitmap
    
    [ Upstream commit d7c1a9a0ed180d8884798ce97afe7283622a484f ]
    
    - New feature flag, NL80211_EXT_FEATURE_PUNCT, to advertise
      driver support for preamble puncturing in AP mode.
    - New attribute, NL80211_ATTR_PUNCT_BITMAP, to receive a puncturing
      bitmap from the userspace during AP bring up (NL80211_CMD_START_AP)
      and channel switch (NL80211_CMD_CHANNEL_SWITCH) operations. Each bit
      corresponds to a 20 MHz channel in the operating bandwidth, lowest
      bit for the lowest channel. Bit set to 1 indicates that the channel
      is punctured. Higher 16 bits are reserved.
    - New members added to structures cfg80211_ap_settings and
      cfg80211_csa_settings to propagate the bitmap to the driver after
      validation.
    
    Signed-off-by: Aloka Dixit <[email protected]>
    Signed-off-by: Muna Sinada <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    [move validation against 0xffff into policy]
    Signed-off-by: Johannes Berg <[email protected]>
    Stable-dep-of: a519be2f5d95 ("wifi: mac80211: do not use old MBSSID elements")
    Signed-off-by: Sasha Levin <[email protected]>

wifi: rtl818x: Fix potential memory leaks in rtl8180_init_rx_ring() [+ + +]
Author: Abdun Nihaal <[email protected]>
Date:   Fri Nov 14 15:15:26 2025 +0530

    wifi: rtl818x: Fix potential memory leaks in rtl8180_init_rx_ring()
    
    [ Upstream commit 9b5b9c042b30befc5b37e4539ace95af70843473 ]
    
    In rtl8180_init_rx_ring(), memory is allocated for skb packets and DMA
    allocations in a loop. When an allocation fails, the previously
    successful allocations are not freed on exit.
    
    Fix that by jumping to err_free_rings label on error, which calls
    rtl8180_free_rx_ring() to free the allocations. Remove the free of
    rx_ring in rtl8180_init_rx_ring() error path, and set the freed
    priv->rx_buf entry to null, to avoid double free.
    
    Fixes: f653211197f3 ("Add rtl8180 wireless driver")
    Signed-off-by: Abdun Nihaal <[email protected]>
    Reviewed-by: Ping-Ke Shih <[email protected]>
    Signed-off-by: Ping-Ke Shih <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

wifi: rtl818x: rtl8187: Fix potential buffer underflow in rtl8187_rx_cb() [+ + +]
Author: Seungjin Bae <[email protected]>
Date:   Mon Nov 17 20:32:59 2025 -0500

    wifi: rtl818x: rtl8187: Fix potential buffer underflow in rtl8187_rx_cb()
    
    [ Upstream commit b647d2574e4583c2e3b0ab35568f60c88e910840 ]
    
    The rtl8187_rx_cb() calculates the rx descriptor header address
    by subtracting its size from the skb tail pointer.
    However, it does not validate if the received packet
    (skb->len from urb->actual_length) is large enough to contain this
    header.
    
    If a truncated packet is received, this will lead to a buffer
    underflow, reading memory before the start of the skb data area,
    and causing a kernel panic.
    
    Add length checks for both rtl8187 and rtl8187b descriptor headers
    before attempting to access them, dropping the packet cleanly if the
    check fails.
    
    Fixes: 6f7853f3cbe4 ("rtl8187: change rtl8187_dev.c to support RTL8187B (part 2)")
    Signed-off-by: Seungjin Bae <[email protected]>
    Signed-off-by: Ping-Ke Shih <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
x86/boot: Fix page table access in 5-level to 4-level paging transition [+ + +]
Author: Usama Arif <[email protected]>
Date:   Mon Nov 3 14:09:22 2025 +0000

    x86/boot: Fix page table access in 5-level to 4-level paging transition
    
    [ Upstream commit eb2266312507d7b757859e2227aa5c4ba6280ebe ]
    
    When transitioning from 5-level to 4-level paging, the existing code
    incorrectly accesses page table entries by directly dereferencing CR3 and
    applying PAGE_MASK. This approach has several issues:
    
    - __native_read_cr3() returns the raw CR3 register value, which on x86_64
      includes not just the physical address but also flags. Bits above the
      physical address width of the system i.e. above __PHYSICAL_MASK_SHIFT) are
      also not masked.
    
    - The PGD entry is masked by PAGE_SIZE which doesn't take into account the
      higher bits such as _PAGE_BIT_NOPTISHADOW.
    
    Replace this with proper accessor functions:
    
    - native_read_cr3_pa(): Uses CR3_ADDR_MASK to additionally mask metadata out
      of CR3 (like SME or LAM bits). All remaining bits are real address bits or
      reserved and must be 0.
    
    - mask pgd value with PTE_PFN_MASK instead of PAGE_MASK, accounting for flags
      above bit 51 (_PAGE_BIT_NOPTISHADOW in particular). Bits below 51, but above
      the max physical address are reserved and must be 0.
    
    Fixes: e9d0e6330eb8 ("x86/boot/compressed/64: Prepare new top-level page table for trampoline")
    Reported-by: Michael van der Westhuizen <[email protected]>
    Reported-by: Tobias Fleig <[email protected]>
    Co-developed-by: Kiryl Shutsemau <[email protected]>
    Signed-off-by: Kiryl Shutsemau <[email protected]>
    Signed-off-by: Usama Arif <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Reviewed-by: Ard Biesheuvel <[email protected]>
    Acked-by: Dave Hansen <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
x86/dumpstack: Prevent KASAN false positive warnings in __show_regs() [+ + +]
Author: Tengda Wu <[email protected]>
Date:   Thu Oct 23 09:06:32 2025 +0000

    x86/dumpstack: Prevent KASAN false positive warnings in __show_regs()
    
    [ Upstream commit ced37e9ceae50e4cb6cd058963bd315ec9afa651 ]
    
    When triggering a stack dump via sysrq (echo t > /proc/sysrq-trigger),
    KASAN may report false-positive out-of-bounds access:
    
      BUG: KASAN: out-of-bounds in __show_regs+0x4b/0x340
      Call Trace:
        dump_stack_lvl
        print_address_description.constprop.0
        print_report
        __show_regs
        show_trace_log_lvl
        sched_show_task
        show_state_filter
        sysrq_handle_showstate
        __handle_sysrq
        write_sysrq_trigger
        proc_reg_write
        vfs_write
        ksys_write
        do_syscall_64
        entry_SYSCALL_64_after_hwframe
    
    The issue occurs as follows:
    
      Task A (walk other tasks' stacks)           Task B (running)
      1. echo t > /proc/sysrq-trigger
      show_trace_log_lvl
        regs = unwind_get_entry_regs()
        show_regs_if_on_stack(regs)
                                                  2. The stack value pointed by
                                                     `regs` keeps changing, and
                                                     so are the tags in its
                                                     KASAN shadow region.
          __show_regs(regs)
            regs->ax, regs->bx, ...
              3. hit KASAN redzones, OOB
    
    When task A walks task B's stack without suspending it, the continuous changes
    in task B's stack (and corresponding KASAN shadow tags) may cause task A to
    hit KASAN redzones when accessing obsolete values on the stack, resulting in
    false positive reports.
    
    Simply stopping the task before unwinding is not a viable fix, as it would
    alter the state intended to inspect. This is especially true for diagnosing
    misbehaving tasks (e.g., in a hard lockup), where stopping might fail or hide
    the root cause by changing the call stack.
    
    Therefore, fix this by disabling KASAN checks during asynchronous stack
    unwinding, which is identified when the unwinding task does not match the
    current task (task != current).
    
      [ bp: Align arguments on function's opening brace. ]
    
    Fixes: 3b3fa11bc700 ("x86/dumpstack: Print any pt_regs found on the stack")
    Signed-off-by: Tengda Wu <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Reviewed-by: Andrey Ryabinin <[email protected]>
    Acked-by: Josh Poimboeuf <[email protected]>
    Link: https://patch.msgid.link/all/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
x86/mm/pat: clear VM_PAT if copy_p4d_range failed [+ + +]
Author: Ma Wupeng <[email protected]>
Date:   Wed Dec 24 10:24:31 2025 +0000

    x86/mm/pat: clear VM_PAT if copy_p4d_range failed
    
    [ Upstream commit d155df53f31068c3340733d586eb9b3ddfd70fc5 ]
    
    Syzbot reports a warning in untrack_pfn().  Digging into the root we found
    that this is due to memory allocation failure in pmd_alloc_one.  And this
    failure is produced due to failslab.
    
    In copy_page_range(), memory alloaction for pmd failed.  During the error
    handling process in copy_page_range(), mmput() is called to remove all
    vmas.  While untrack_pfn this empty pfn, warning happens.
    
    Here's a simplified flow:
    
    dup_mm
      dup_mmap
        copy_page_range
          copy_p4d_range
            copy_pud_range
              copy_pmd_range
                pmd_alloc
                  __pmd_alloc
                    pmd_alloc_one
                      page = alloc_pages(gfp, 0);
                        if (!page)
                          return NULL;
        mmput
            exit_mmap
              unmap_vmas
                unmap_single_vma
                  untrack_pfn
                    follow_phys
                      WARN_ON_ONCE(1);
    
    Since this vma is not generate successfully, we can clear flag VM_PAT.  In
    this case, untrack_pfn() will not be called while cleaning this vma.
    
    Function untrack_pfn_moved() has also been renamed to fit the new logic.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Ma Wupeng <[email protected]>
    Reported-by: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Alexander Ofitserov <[email protected]>
    Cc: [email protected]
    [ Ajay: Modified to apply on v6.1 ]
    Signed-off-by: Ajay Kaher <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

x86/mm/pat: Fix VM_PAT handling when fork() fails in copy_page_range() [+ + +]
Author: David Hildenbrand <[email protected]>
Date:   Wed Dec 24 10:24:32 2025 +0000

    x86/mm/pat: Fix VM_PAT handling when fork() fails in copy_page_range()
    
    [ Upstream commit dc84bc2aba85a1508f04a936f9f9a15f64ebfb31 ]
    
    If track_pfn_copy() fails, we already added the dst VMA to the maple
    tree. As fork() fails, we'll cleanup the maple tree, and stumble over
    the dst VMA for which we neither performed any reservation nor copied
    any page tables.
    
    Consequently untrack_pfn() will see VM_PAT and try obtaining the
    PAT information from the page table -- which fails because the page
    table was not copied.
    
    The easiest fix would be to simply clear the VM_PAT flag of the dst VMA
    if track_pfn_copy() fails. However, the whole thing is about "simply"
    clearing the VM_PAT flag is shaky as well: if we passed track_pfn_copy()
    and performed a reservation, but copying the page tables fails, we'll
    simply clear the VM_PAT flag, not properly undoing the reservation ...
    which is also wrong.
    
    So let's fix it properly: set the VM_PAT flag only if the reservation
    succeeded (leaving it clear initially), and undo the reservation if
    anything goes wrong while copying the page tables: clearing the VM_PAT
    flag after undoing the reservation.
    
    Note that any copied page table entries will get zapped when the VMA will
    get removed later, after copy_page_range() succeeded; as VM_PAT is not set
    then, we won't try cleaning VM_PAT up once more and untrack_pfn() will be
    happy. Note that leaving these page tables in place without a reservation
    is not a problem, as we are aborting fork(); this process will never run.
    
    A reproducer can trigger this usually at the first try:
    
      https://gitlab.com/davidhildenbrand/scratchspace/-/raw/main/reproducers/pat_fork.c
    
      WARNING: CPU: 26 PID: 11650 at arch/x86/mm/pat/memtype.c:983 get_pat_info+0xf6/0x110
      Modules linked in: ...
      CPU: 26 UID: 0 PID: 11650 Comm: repro3 Not tainted 6.12.0-rc5+ #92
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-2.fc40 04/01/2014
      RIP: 0010:get_pat_info+0xf6/0x110
      ...
      Call Trace:
       <TASK>
       ...
       untrack_pfn+0x52/0x110
       unmap_single_vma+0xa6/0xe0
       unmap_vmas+0x105/0x1f0
       exit_mmap+0xf6/0x460
       __mmput+0x4b/0x120
       copy_process+0x1bf6/0x2aa0
       kernel_clone+0xab/0x440
       __do_sys_clone+0x66/0x90
       do_syscall_64+0x95/0x180
    
    Likely this case was missed in:
    
      d155df53f310 ("x86/mm/pat: clear VM_PAT if copy_p4d_range failed")
    
    ... and instead of undoing the reservation we simply cleared the VM_PAT flag.
    
    Keep the documentation of these functions in include/linux/pgtable.h,
    one place is more than sufficient -- we should clean that up for the other
    functions like track_pfn_remap/untrack_pfn separately.
    
    Fixes: d155df53f310 ("x86/mm/pat: clear VM_PAT if copy_p4d_range failed")
    Fixes: 2ab640379a0a ("x86: PAT: hooks in generic vm code to help archs to track pfnmap regions - v3")
    Reported-by: xingwei lee <[email protected]>
    Reported-by: yuxin wang <[email protected]>
    Reported-by: Marius Fleischer <[email protected]>
    Signed-off-by: David Hildenbrand <[email protected]>
    Signed-off-by: Ingo Molnar <[email protected]>
    Cc: Andy Lutomirski <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Cc: Rik van Riel <[email protected]>
    Cc: "H. Peter Anvin" <[email protected]>
    Cc: Linus Torvalds <[email protected]>
    Cc: Andrew Morton <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Closes: https://lore.kernel.org/lkml/CABOYnLx_dnqzpCW99G81DmOr+2UzdmZMk=T3uxwNxwz+R1RAwg@mail.gmail.com/
    Closes: https://lore.kernel.org/lkml/CAJg=8jwijTP5fre8woS4JVJQ8iUA6v+iNcsOgtj9Zfpc3obDOQ@mail.gmail.com/
    Signed-off-by: Sasha Levin <[email protected]>
    Cc: [email protected]
    [ Ajay: Modified to apply on v6.1 ]
    Signed-off-by: Ajay Kaher <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86/ptrace: Always inline trivial accessors [+ + +]
Author: Peter Zijlstra <[email protected]>
Date:   Fri Oct 31 12:04:24 2025 +0100

    x86/ptrace: Always inline trivial accessors
    
    [ Upstream commit 1fe4002cf7f23d70c79bda429ca2a9423ebcfdfa ]
    
    A KASAN build bloats these single load/store helpers such that
    it fails to inline them:
    
      vmlinux.o: error: objtool: irqentry_exit+0x5e8: call to instruction_pointer_set() with UACCESS enabled
    
    Make sure the compiler isn't allowed to do stupid.
    
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Signed-off-by: Ingo Molnar <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
x86/xen: Fix sparse warning in enlighten_pv.c [+ + +]
Author: Juergen Gross <[email protected]>
Date:   Mon Dec 15 12:51:12 2025 +0100

    x86/xen: Fix sparse warning in enlighten_pv.c
    
    [ Upstream commit e5aff444e3a7bdeef5ea796a2099fc3c60a070fa ]
    
    The sparse tool issues a warning for arch/x76/xen/enlighten_pv.c:
    
       arch/x86/xen/enlighten_pv.c:120:9: sparse: sparse: incorrect type
         in initializer (different address spaces)
         expected void const [noderef] __percpu *__vpp_verify
         got bool *
    
    This is due to the percpu variable xen_in_preemptible_hcall being
    exported via EXPORT_SYMBOL_GPL() instead of EXPORT_PER_CPU_SYMBOL_GPL().
    
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Fixes: fdfd811ddde3 ("x86/xen: allow privcmd hypercalls to be preempted")
    Reviewed-by: Boris Ostrovsky <[email protected]>
    Signed-off-by: Juergen Gross <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

x86/xen: Move Xen upcall handler [+ + +]
Author: Brian Gerst <[email protected]>
Date:   Fri Mar 14 11:12:14 2025 -0400

    x86/xen: Move Xen upcall handler
    
    [ Upstream commit 1ab7b5ed44ba9bce581e225f40219b793bc779d6 ]
    
    Move the upcall handler to Xen-specific files.
    
    No functional changes.
    
    Signed-off-by: Brian Gerst <[email protected]>
    Signed-off-by: Ingo Molnar <[email protected]>
    Reviewed-by: Juergen Gross <[email protected]>
    Reviewed-by: Sohil Mehta <[email protected]>
    Cc: Andy Lutomirski <[email protected]>
    Cc: H. Peter Anvin <[email protected]>
    Cc: Linus Torvalds <[email protected]>
    Cc: Josh Poimboeuf <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: e5aff444e3a7 ("x86/xen: Fix sparse warning in enlighten_pv.c")
    Signed-off-by: Sasha Levin <[email protected]>

 
xfrm: also call xfrm_state_delete_tunnel at destroy time for states that were never added [+ + +]
Author: Sabrina Dubroca <[email protected]>
Date:   Thu Dec 4 17:43:27 2025 -0500

    xfrm: also call xfrm_state_delete_tunnel at destroy time for states that were never added
    
    [ Upstream commit 10deb69864840ccf96b00ac2ab3a2055c0c04721 ]
    
    In commit b441cf3f8c4b ("xfrm: delete x->tunnel as we delete x"), I
    missed the case where state creation fails between full
    initialization (->init_state has been called) and being inserted on
    the lists.
    
    In this situation, ->init_state has been called, so for IPcomp
    tunnels, the fallback tunnel has been created and added onto the
    lists, but the user state never gets added, because we fail before
    that. The user state doesn't go through __xfrm_state_delete, so we
    don't call xfrm_state_delete_tunnel for those states, and we end up
    leaking the FB tunnel.
    
    There are several codepaths affected by this: the add/update paths, in
    both net/key and xfrm, and the migrate code (xfrm_migrate,
    xfrm_state_migrate). A "proper" rollback of the init_state work would
    probably be doable in the add/update code, but for migrate it gets
    more complicated as multiple states may be involved.
    
    At some point, the new (not-inserted) state will be destroyed, so call
    xfrm_state_delete_tunnel during xfrm_state_gc_destroy. Most states
    will have their fallback tunnel cleaned up during __xfrm_state_delete,
    which solves the issue that b441cf3f8c4b (and other patches before it)
    aimed at. All states (including FB tunnels) will be removed from the
    lists once xfrm_state_fini has called flush_work(&xfrm_state_gc_work).
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=999eb23467f83f9bf9bf
    Fixes: b441cf3f8c4b ("xfrm: delete x->tunnel as we delete x")
    Signed-off-by: Sabrina Dubroca <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

xfrm: delete x->tunnel as we delete x [+ + +]
Author: Sabrina Dubroca <[email protected]>
Date:   Tue Jul 29 17:11:52 2025 -0400

    xfrm: delete x->tunnel as we delete x
    
    [ Upstream commit b441cf3f8c4b8576639d20c8eb4aa32917602ecd ]
    
    The ipcomp fallback tunnels currently get deleted (from the various
    lists and hashtables) as the last user state that needed that fallback
    is destroyed (not deleted). If a reference to that user state still
    exists, the fallback state will remain on the hashtables/lists,
    triggering the WARN in xfrm_state_fini. Because of those remaining
    references, the fix in commit f75a2804da39 ("xfrm: destroy xfrm_state
    synchronously on net exit path") is not complete.
    
    We recently fixed one such situation in TCP due to defered freeing of
    skbs (commit 9b6412e6979f ("tcp: drop secpath at the same time as we
    currently drop dst")). This can also happen due to IP reassembly: skbs
    with a secpath remain on the reassembly queue until netns
    destruction. If we can't guarantee that the queues are flushed by the
    time xfrm_state_fini runs, there may still be references to a (user)
    xfrm_state, preventing the timely deletion of the corresponding
    fallback state.
    
    Instead of chasing each instance of skbs holding a secpath one by one,
    this patch fixes the issue directly within xfrm, by deleting the
    fallback state as soon as the last user state depending on it has been
    deleted. Destruction will still happen when the final reference is
    dropped.
    
    A separate lockdep class for the fallback state is required since
    we're going to lock x->tunnel while x is locked.
    
    Fixes: 9d4139c76905 ("netns xfrm: per-netns xfrm_state_all list")
    Signed-off-by: Sabrina Dubroca <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
xfrm: flush all states in xfrm_state_fini [+ + +]
Author: Sabrina Dubroca <[email protected]>
Date:   Mon Aug 4 11:05:43 2025 +0200

    xfrm: flush all states in xfrm_state_fini
    
    [ Upstream commit 42e42562c9cfcdacf000f1b42284a4fad24f8546 ]
    
    While reverting commit f75a2804da39 ("xfrm: destroy xfrm_state
    synchronously on net exit path"), I incorrectly changed
    xfrm_state_flush's "proto" argument back to IPSEC_PROTO_ANY. This
    reverts some of the changes in commit dbb2483b2a46 ("xfrm: clean up
    xfrm protocol checks"), and leads to some states not being removed
    when we exit the netns.
    
    Pass 0 instead of IPSEC_PROTO_ANY from both xfrm_state_fini
    xfrm6_tunnel_net_exit, so that xfrm_state_flush deletes all states.
    
    Fixes: 2a198bbec691 ("Revert "xfrm: destroy xfrm_state synchronously on net exit path"")
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=6641a61fe0e2e89ae8c5
    Tested-by: [email protected]
    Signed-off-by: Sabrina Dubroca <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
xfs: fix a memory leak in xfs_buf_item_init() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Wed Dec 10 17:06:01 2025 +0800

    xfs: fix a memory leak in xfs_buf_item_init()
    
    commit fc40459de82543b565ebc839dca8f7987f16f62e upstream.
    
    xfs_buf_item_get_format() may allocate memory for bip->bli_formats,
    free the memory in the error path.
    
    Fixes: c3d5f0c2fb85 ("xfs: complain if anyone tries to create a too-large buffer log item")
    Cc: [email protected]
    Signed-off-by: Haoxiang Li <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Carlos Maiolino <[email protected]>
    Signed-off-by: Carlos Maiolino <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
xhci: dbgtty: fix device unregister: fixup [+ + +]
Author: Łukasz Bartosik <[email protected]>
Date:   Tue Dec 30 14:49:04 2025 -0500

    xhci: dbgtty: fix device unregister: fixup
    
    [ Upstream commit 74098cc06e753d3ffd8398b040a3a1dfb65260c0 ]
    
    This fixup replaces tty_vhangup() call with call to
    tty_port_tty_vhangup(). Both calls hangup tty device
    synchronously however tty_port_tty_vhangup() increases
    reference count during the hangup operation using
    scoped_guard(tty_port_tty).
    
    Cc: stable <[email protected]>
    Fixes: 1f73b8b56cf3 ("xhci: dbgtty: fix device unregister")
    Signed-off-by: Łukasz Bartosik <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>