Changelog in Linux kernel 6.18.3

 
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: fan: Workaround for 64-bit firmware bug [+ + +]
Author: Armin Wolf <[email protected]>
Date:   Wed Oct 8 01:41:45 2025 +0200

    ACPI: fan: Workaround for 64-bit firmware bug
    
    [ Upstream commit 2e00f7a4bb0ac25ec7477b55fe482da39fb4dce8 ]
    
    Some firmware implementations use the "Ones" ASL opcode to produce
    an integer with all bits set in order to indicate missing speed or
    power readings. This however only works when using 32-bit integers,
    as the ACPI spec requires a 32-bit integer (0xFFFFFFFF) to be
    returned for missing speed/power readings. With 64-bit integers the
    "Ones" opcode produces a 64-bit integer with all bits set, violating
    the ACPI spec regarding the placeholder value for missing readings.
    
    Work around such buggy firmware implementation by also checking for
    64-bit integers with all bits set when reading _FST.
    
    Signed-off-by: Armin Wolf <[email protected]>
    [ rjw: Typo fix in the changelog ]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ACPI: PCC: Fix race condition by removing static qualifier [+ + +]
Author: Pengjie Zhang <[email protected]>
Date:   Wed Dec 10 21:26:34 2025 +0800

    ACPI: PCC: Fix race condition by removing static qualifier
    
    commit f103fa127c93016bcd89b05d8e11dc1a84f6990d upstream.
    
    Local variable 'ret' in acpi_pcc_address_space_setup() is currently
    declared as 'static'. This can lead to race conditions in a
    multithreaded environment.
    
    Remove the 'static' qualifier to ensure that 'ret' will be allocated
    directly on the stack as a local variable.
    
    Fixes: a10b1c99e2dc ("ACPI: PCC: Setup PCC Opregion handler only if platform interrupt is available")
    Signed-off-by: Pengjie Zhang <[email protected]>
    Reviewed-by: Sudeep Holla <[email protected]>
    Acked-by: [email protected]
    Cc: 6.2+ <[email protected]> # 6.2+
    [ rjw: 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: 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: hda/realtek: Add Asus quirk for TAS amplifiers [+ + +]
Author: Antheas Kapenekakis <[email protected]>
Date:   Tue Dec 16 22:17:14 2025 +0100

    ALSA: hda/realtek: Add Asus quirk for TAS amplifiers
    
    commit f7cede182c963720edd1e5fb50ea4f1c7eafa30e upstream.
    
    By default, these devices use the quirk ALC294_FIXUP_ASUS_SPK. Not
    using it causes the headphone jack to stop working. Therefore,
    introduce a new quirk ALC287_FIXUP_TXNW2781_I2C_ASUS that binds
    to the TAS amplifier while using that quirk.
    
    Cc: [email protected]
    Fixes: 18a4895370a7 ("ALSA: hda/realtek: Add match for ASUS Xbox Ally projects")
    Signed-off-by: Antheas Kapenekakis <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: 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: 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]>

 
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]>

 
amd/iommu: Preserve domain ids inside the kdump kernel [+ + +]
Author: Sairaj Kodilkar <[email protected]>
Date:   Fri Nov 21 14:41:15 2025 +0530

    amd/iommu: Preserve domain ids inside the kdump kernel
    
    [ Upstream commit c2e8dc1222c2136e714d5d972dce7e64924e4ed8 ]
    
    Currently AMD IOMMU driver does not reserve domain ids programmed in the
    DTE while reusing the device table inside kdump kernel. This can cause
    reallocation of these domain ids for newer domains that are created by
    the kdump kernel, which can lead to potential IO_PAGE_FAULTs
    
    Hence reserve these ids inside pdom_ids.
    
    Fixes: 38e5f33ee359 ("iommu/amd: Reuse device table for kdump")
    Signed-off-by: Sairaj Kodilkar <[email protected]>
    Reported-by: Jason Gunthorpe <[email protected]>
    Reviewed-by: Vasant Hegde <[email protected]>
    Reviewed-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Joerg Roedel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
arm64/gcs: Flush the GCS locking state on exec [+ + +]
Author: Mark Brown <[email protected]>
Date:   Sat Nov 29 00:48:45 2025 +0000

    arm64/gcs: Flush the GCS locking state on exec
    
    commit 98a97bf41528ef738b06eb07ec2b2eb1cfde6ce6 upstream.
    
    When we exec a new task we forget to flush the set of locked GCS mode bits.
    Since we do flush the rest of the state this means that if GCS is locked
    the new task will be unable to enable GCS, it will be locked as being
    disabled. Add the expected flush.
    
    Fixes: fc84bc5378a8 ("arm64/gcs: Context switch GCS state for EL0")
    Cc: <[email protected]> # 6.13.x
    Reported-by: Yury Khrustalev <[email protected]>
    Signed-off-by: Mark Brown <[email protected]>
    Tested-by: Yury Khrustalev <[email protected]>
    Signed-off-by: Catalin Marinas <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
arm64: dts: mediatek: Apply mt8395-radxa DT overlay at build time [+ + +]
Author: Rob Herring (Arm) <[email protected]>
Date:   Fri Dec 5 22:59:38 2025 +0100

    arm64: dts: mediatek: Apply mt8395-radxa DT overlay at build time
    
    [ Upstream commit ce7b1d58609abc2941a1f38094147f439fb74233 ]
    
    It's a requirement that DT overlays be applied at build time in order to
    validate them as overlays are not validated on their own.
    
    Add missing target for mt8395-radxa hd panel overlay.
    
    Fixes: 4c8ff61199a7 ("arm64: dts: mediatek: mt8395-radxa-nio-12l: Add Radxa 8 HD panel")
    Signed-off-by: Frank Wunderlich <[email protected]>
    Acked-by: AngeloGioacchino Del Regno <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rob Herring (Arm) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: kdump: Fix elfcorehdr overlap caused by reserved memory processing reorder [+ + +]
Author: Jianpeng Chang <[email protected]>
Date:   Fri Dec 5 09:59:34 2025 +0800

    arm64: kdump: Fix elfcorehdr overlap caused by reserved memory processing reorder
    
    [ Upstream commit 3e8ade58b71b48913d21b647b2089e03e81f117e ]
    
    Commit 8a6e02d0c00e ("of: reserved_mem: Restructure how the reserved
    memory regions are processed") changed the processing order of reserved
    memory regions, causing elfcorehdr to overlap with dynamically allocated
    reserved memory regions during kdump kernel boot.
    
    The issue occurs because:
    1. kexec-tools allocates elfcorehdr in the last crashkernel reserved
       memory region and passes it to the second kernel
    2. The problematic commit moved dynamic reserved memory allocation
       (like bman-fbpr) to occur during fdt_scan_reserved_mem(), before
       elfcorehdr reservation in fdt_reserve_elfcorehdr()
    3. bman-fbpr with 16MB alignment requirement can get allocated at
       addresses that overlap with the elfcorehdr location
    4. When fdt_reserve_elfcorehdr() tries to reserve elfcorehdr memory,
       overlap detection identifies the conflict and skips reservation
    5. kdump kernel fails with "Unable to handle kernel paging request"
       because elfcorehdr memory is not properly reserved
    
    The boot log:
    Before 8a6e02d0c00e:
      OF: fdt: Reserving 1 KiB of memory at 0xf4fff000 for elfcorehdr
      OF: reserved mem: 0xf3000000..0xf3ffffff bman-fbpr
    
    After 8a6e02d0c00e:
      OF: reserved mem: 0xf4000000..0xf4ffffff bman-fbpr
      OF: fdt: elfcorehdr is overlapped
    
    Fix this by ensuring elfcorehdr reservation occurs before dynamic
    reserved memory allocation.
    
    Fixes: 8a6e02d0c00e ("of: reserved_mem: Restructure how the reserved memory regions are processed")
    Signed-off-by: Jianpeng Chang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rob Herring (Arm) <[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:   Fri Nov 14 15:02:25 2025 +0100

    ARM: dts: microchip: sama5d2: fix spi flexcom fifo size to 32
    
    commit 7d5864dc5d5ea6a35983dd05295fb17f2f2f44ce upstream.
    
    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: Greg Kroah-Hartman <[email protected]>

ARM: dts: microchip: sama7d65: fix uart fifo size to 32 [+ + +]
Author: Nicolas Ferre <[email protected]>
Date:   Fri Nov 14 11:33:12 2025 +0100

    ARM: dts: microchip: sama7d65: fix uart fifo size to 32
    
    commit 1f591be0a02c697f65a21be35f1d74117bbf4be2 upstream.
    
    On some flexcom nodes related to uart, the fifo sizes were wrong: fix
    them to 32 data.  Note that product datasheet is being reviewed to fix
    inconsistency, but this value is validated by product's designers.
    
    Fixes: 261dcfad1b59 ("ARM: dts: microchip: add sama7d65 SoC DT")
    Fixes: b51e4aea3ecf ("ARM: dts: microchip: sama7d65: Add FLEXCOMs to sama7d65 SoC")
    Cc: [email protected] # 6.16+
    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: Greg Kroah-Hartman <[email protected]>

ARM: dts: microchip: sama7g5: fix uart fifo size to 32 [+ + +]
Author: Nicolas Ferre <[email protected]>
Date:   Fri Nov 14 11:33:13 2025 +0100

    ARM: dts: microchip: sama7g5: fix uart fifo size to 32
    
    commit 5654889a94b0de5ad6ceae3793e7f5e0b61b50b6 upstream.
    
    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: Greg Kroah-Hartman <[email protected]>

 
ASoC: ak4458: remove the reset operation in probe and remove [+ + +]
Author: Shengjiu Wang <[email protected]>
Date:   Tue Dec 16 15:02:01 2025 +0800

    ASoC: ak4458: remove the reset operation in probe and remove
    
    [ Upstream commit 00b960a83c764208b0623089eb70af3685e3906f ]
    
    The reset_control handler has the reference count for usage, as there is
    reset operation in runtime suspend and resume, then reset operation in
    probe() would cause the reference count of reset not balanced.
    
    Previously add reset operation in probe and remove is to fix the compile
    issue with !CONFIG_PM, as the driver has been update to use
    RUNTIME_PM_OPS(), so that change can be reverted.
    
    Fixes: 1e0dff741b0a ("ASoC: ak4458: remove "reset-gpios" property handler")
    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_sai: Constrain sample rates from audio PLLs only in master mode [+ + +]
Author: Chancel Liu <[email protected]>
Date:   Wed Dec 10 15:21:09 2025 +0900

    ASoC: fsl_sai: Constrain sample rates from audio PLLs only in master mode
    
    [ Upstream commit 9f4d0899efd9892fc7514c9488270e1bb7dedd2b ]
    
    If SAI works in master mode it will generate clocks for external codec
    from audio PLLs. Thus sample rates should be constrained according to
    audio PLL clocks. While SAI works in slave mode which means clocks are
    generated externally then constraints are independent of audio PLLs.
    
    Fixes: 4edc98598be4 ("ASoC: fsl_sai: Add sample rate constraint")
    Signed-off-by: Chancel Liu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: ops: fix snd_soc_get_volsw for sx controls [+ + +]
Author: Stefan Binding <[email protected]>
Date:   Tue Dec 16 13:49:20 2025 +0000

    ASoC: ops: fix snd_soc_get_volsw for sx controls
    
    [ Upstream commit 095d621141826a2841dae85b52c784c147ea99d3 ]
    
    SX controls are currently broken, since the clamp introduced in
    commit a0ce874cfaaa ("ASoC: ops: improve snd_soc_get_volsw") does not
    handle SX controls, for example where the min value in the clamp is
    greater than the max value in the clamp.
    
    Add clamp parameter to prevent clamping in SX controls.
    The nature of SX controls mean that it wraps around 0, with a variable
    number of bits, therefore clamping the value becomes complicated and
    prone to error.
    
    Fixes 35 kunit tests for soc_ops_test_access.
    
    Fixes: a0ce874cfaaa ("ASoC: ops: improve snd_soc_get_volsw")
    
    Co-developed-by: Charles Keepax <[email protected]>
    Signed-off-by: Stefan Binding <[email protected]>
    Tested-by: Peter Ujfalusi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: SDCA: support Q7.8 volume format [+ + +]
Author: Shuming Fan <[email protected]>
Date:   Thu Nov 6 17:33:35 2025 +0800

    ASoC: SDCA: support Q7.8 volume format
    
    [ Upstream commit 1b0f3f9ee41ee2bdd206667f85ea2aa36dfe6e69 ]
    
    The SDCA specification uses Q7.8 volume format.
    This patch adds a field to indicate whether it is SDCA volume control
    and supports the volume settings.
    
    Signed-off-by: Shuming Fan <[email protected]>
    Reviewed-by: Charles Keepax <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Stable-dep-of: 095d62114182 ("ASoC: ops: fix snd_soc_get_volsw for sx controls")
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: SOF: ipc4-topology: Convert FLOAT to S32 during blob selection [+ + +]
Author: Peter Ujfalusi <[email protected]>
Date:   Mon Dec 15 14:06:48 2025 +0200

    ASoC: SOF: ipc4-topology: Convert FLOAT to S32 during blob selection
    
    commit 816f291fc23f325d31509d0e97873249ad75ae9a upstream.
    
    SSP/DMIC blobs have no support for FLOAT type, they are using S32 on data
    bus.
    
    Convert the format from FLOAT_LE to S32_LE to make sure that the correct
    format is used within the path.
    
    FLOAT conversion will be done on the host side (or within the path).
    
    Fixes: f7c41911ad74 ("ASoC: SOF: ipc4-topology: Add support for float sample type")
    Cc: [email protected]
    Signed-off-by: Peter Ujfalusi <[email protected]>
    Reviewed-by: Bard Liao <[email protected]>
    Reviewed-by: Seppo Ingalsuo <[email protected]>
    Reviewed-by: Kai Vehmanen <[email protected]>
    Reviewed-by: Ranjani Sridharan <[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: SOF: ipc4-topology: Prefer 32-bit DMIC blobs for 8-bit formats as well [+ + +]
Author: Peter Ujfalusi <[email protected]>
Date:   Mon Dec 15 14:06:47 2025 +0200

    ASoC: SOF: ipc4-topology: Prefer 32-bit DMIC blobs for 8-bit formats as well
    
    commit 26e455064983e00013c0a63ffe0eed9e9ec2fa89 upstream.
    
    With the introduction of 8-bit formats the DMIC blob lookup also needs to
    be modified to prefer the 32-bit blob when 8-bit format is used on FE.
    
    At the same time we also need to make sure that in case 8-bit format is
    used, but only 16-bit blob is available for DMIC then we will not try to
    look for 8-bit blob (which is invalid) as fallback, but for a 16-bit one.
    
    Fixes: c04c2e829649 ("ASoC: SOF: ipc4-topology: Add support for 8-bit formats")
    Cc: [email protected]
    Signed-off-by: Peter Ujfalusi <[email protected]>
    Reviewed-by: Bard Liao <[email protected]>
    Reviewed-by: Seppo Ingalsuo <[email protected]>
    Reviewed-by: Kai Vehmanen <[email protected]>
    Reviewed-by: Ranjani Sridharan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
block: fix race between wbt_enable_default and IO submission [+ + +]
Author: Ming Lei <[email protected]>
Date:   Fri Dec 12 22:35:00 2025 +0800

    block: fix race between wbt_enable_default and IO submission
    
    [ Upstream commit 9869d3a6fed381f3b98404e26e1afc75d680cbf9 ]
    
    When wbt_enable_default() is moved out of queue freezing in elevator_change(),
    it can cause the wbt inflight counter to become negative (-1), leading to hung
    tasks in the writeback path. Tasks get stuck in wbt_wait() because the counter
    is in an inconsistent state.
    
    The issue occurs because wbt_enable_default() could race with IO submission,
    allowing the counter to be decremented before proper initialization. This manifests
    as:
    
      rq_wait[0]:
        inflight:             -1
        has_waiters:        True
    
    rwb_enabled() checks the state, which can be updated exactly between wbt_wait()
    (rq_qos_throttle()) and wbt_track()(rq_qos_track()), then the inflight counter
    will become negative.
    
    And results in hung task warnings like:
      task:kworker/u24:39 state:D stack:0 pid:14767
      Call Trace:
        rq_qos_wait+0xb4/0x150
        wbt_wait+0xa9/0x100
        __rq_qos_throttle+0x24/0x40
        blk_mq_submit_bio+0x672/0x7b0
        ...
    
    Fix this by:
    
    1. Splitting wbt_enable_default() into:
       - __wbt_enable_default(): Returns true if wbt_init() should be called
       - wbt_enable_default(): Wrapper for existing callers (no init)
       - wbt_init_enable_default(): New function that checks and inits WBT
    
    2. Using wbt_init_enable_default() in blk_register_queue() to ensure
       proper initialization during queue registration
    
    3. Move wbt_init() out of wbt_enable_default() which is only for enabling
       disabled wbt from bfq and iocost, and wbt_init() isn't needed. Then the
       original lock warning can be avoided.
    
    4. Removing the ELEVATOR_FLAG_ENABLE_WBT_ON_EXIT flag and its handling
       code since it's no longer needed
    
    This ensures WBT is properly initialized before any IO can be submitted,
    preventing the counter from going negative.
    
    Cc: Nilay Shroff <[email protected]>
    Cc: Yu Kuai <[email protected]>
    Cc: Guangwu Zhang <[email protected]>
    Fixes: 78c271344b6f ("block: move wbt_enable_default() out of queue freezing from sched ->exit()")
    Signed-off-by: Ming Lei <[email protected]>
    Reviewed-by: Nilay Shroff <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

block: freeze queue when updating zone resources [+ + +]
Author: Damien Le Moal <[email protected]>
Date:   Wed Nov 5 06:22:36 2025 +0900

    block: freeze queue when updating zone resources
    
    commit bba4322e3f303b2d656e748be758320b567f046f upstream.
    
    Modify disk_update_zone_resources() to freeze the device queue before
    updating the number of zones, zone capacity and other zone related
    resources. The locking order resulting from the call to
    queue_limits_commit_update_frozen() is preserved, that is, the queue
    limits lock is first taken by calling queue_limits_start_update() before
    freezing the queue, and the queue is unfrozen after executing
    queue_limits_commit_update(), which replaces the call to
    queue_limits_commit_update_frozen().
    
    This change ensures that there are no in-flights I/Os when the zone
    resources are updated due to a zone revalidation. In case of error when
    the limits are applied, directly call disk_free_zone_resources() from
    disk_update_zone_resources() while the disk queue is still frozen to
    avoid needing to freeze & unfreeze the queue again in
    blk_revalidate_disk_zones(), thus simplifying that function code a
    little.
    
    Fixes: 0b83c86b444a ("block: Prevent potential deadlock in blk_revalidate_disk_zones()")
    Cc: [email protected]
    Signed-off-by: Damien Le Moal <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Reviewed-by: Chaitanya Kulkarni <[email protected]>
    Reviewed-by: Hannes Reinecke <[email protected]>
    Reviewed-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

block: introduce alloc_sched_data and free_sched_data elevator methods [+ + +]
Author: Nilay Shroff <[email protected]>
Date:   Thu Nov 13 14:28:20 2025 +0530

    block: introduce alloc_sched_data and free_sched_data elevator methods
    
    [ Upstream commit 61019afdf6ac17c8e8f9c42665aa1fa82f04a3e2 ]
    
    The recent lockdep splat [1] highlights a potential deadlock risk
    involving ->elevator_lock and ->freeze_lock dependencies on -pcpu_alloc_
    mutex. The trace shows that the issue occurs when the Kyber scheduler
    allocates dynamic memory for its elevator data during initialization.
    
    To address this, introduce two new elevator operation callbacks:
    ->alloc_sched_data and ->free_sched_data. The subsequent patch would
    build upon these newly introduced methods to suppress lockdep splat[1].
    
    [1] https://lore.kernel.org/all/CAGVVp+VNW4M-5DZMNoADp6o2VKFhi7KxWpTDkcnVyjO0=-D5+A@mail.gmail.com/
    
    Signed-off-by: Nilay Shroff <[email protected]>
    Reviewed-by: Ming Lei <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Stable-dep-of: 9869d3a6fed3 ("block: fix race between wbt_enable_default and IO submission")
    Signed-off-by: Sasha Levin <[email protected]>

block: move elevator tags into struct elevator_resources [+ + +]
Author: Nilay Shroff <[email protected]>
Date:   Thu Nov 13 14:28:19 2025 +0530

    block: move elevator tags into struct elevator_resources
    
    [ Upstream commit 04728ce90966c54417fd8120a3820104d18ba68d ]
    
    This patch introduces a new structure, struct elevator_resources, to
    group together all elevator-related resources that share the same
    lifetime. As a first step, this change moves the elevator tag pointer
    from struct elv_change_ctx into the new struct elevator_resources.
    
    Additionally, rename blk_mq_alloc_sched_tags_batch() and
    blk_mq_free_sched_tags_batch() to blk_mq_alloc_sched_res_batch() and
    blk_mq_free_sched_res_batch(), respectively. Introduce two new wrapper
    helpers, blk_mq_alloc_sched_res() and blk_mq_free_sched_res(), around
    blk_mq_alloc_sched_tags() and blk_mq_free_sched_tags().
    
    These changes pave the way for consolidating the allocation and freeing
    of elevator-specific resources into common helper functions. This
    refactoring improves encapsulation and prepares the code for future
    extensions, allowing additional elevator-specific data to be added to
    struct elevator_resources without cluttering struct elv_change_ctx.
    
    Subsequent patches will extend struct elevator_resources to include
    other elevator-related data.
    
    Reviewed-by: Ming Lei <[email protected]>
    Reviewed-by: Yu Kuai <[email protected]>
    Signed-off-by: Nilay Shroff <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Stable-dep-of: 9869d3a6fed3 ("block: fix race between wbt_enable_default and IO submission")
    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: Remove queue freezing from several sysfs store callbacks [+ + +]
Author: Bart Van Assche <[email protected]>
Date:   Fri Nov 14 13:04:07 2025 -0800

    block: Remove queue freezing from several sysfs store callbacks
    
    commit 935a20d1bebf6236076785fac3ff81e3931834e9 upstream.
    
    Freezing the request queue from inside sysfs store callbacks may cause a
    deadlock in combination with the dm-multipath driver and the
    queue_if_no_path option. Additionally, freezing the request queue slows
    down system boot on systems where sysfs attributes are set synchronously.
    
    Fix this by removing the blk_mq_freeze_queue() / blk_mq_unfreeze_queue()
    calls from the store callbacks that do not strictly need these callbacks.
    Add the __data_racy annotation to request_queue.rq_timeout to suppress
    KCSAN data race reports about the rq_timeout reads.
    
    This patch may cause a small delay in applying the new settings.
    
    For all the attributes affected by this patch, I/O will complete
    correctly whether the old or the new value of the attribute is used.
    
    This patch affects the following sysfs attributes:
    * io_poll_delay
    * io_timeout
    * nomerges
    * read_ahead_kb
    * rq_affinity
    
    Here is an example of a deadlock triggered by running test srp/002
    if this patch is not applied:
    
    task:multipathd
    Call Trace:
     <TASK>
     __schedule+0x8c1/0x1bf0
     schedule+0xdd/0x270
     schedule_preempt_disabled+0x1c/0x30
     __mutex_lock+0xb89/0x1650
     mutex_lock_nested+0x1f/0x30
     dm_table_set_restrictions+0x823/0xdf0
     __bind+0x166/0x590
     dm_swap_table+0x2a7/0x490
     do_resume+0x1b1/0x610
     dev_suspend+0x55/0x1a0
     ctl_ioctl+0x3a5/0x7e0
     dm_ctl_ioctl+0x12/0x20
     __x64_sys_ioctl+0x127/0x1a0
     x64_sys_call+0xe2b/0x17d0
     do_syscall_64+0x96/0x3a0
     entry_SYSCALL_64_after_hwframe+0x4b/0x53
     </TASK>
    task:(udev-worker)
    Call Trace:
     <TASK>
     __schedule+0x8c1/0x1bf0
     schedule+0xdd/0x270
     blk_mq_freeze_queue_wait+0xf2/0x140
     blk_mq_freeze_queue_nomemsave+0x23/0x30
     queue_ra_store+0x14e/0x290
     queue_attr_store+0x23e/0x2c0
     sysfs_kf_write+0xde/0x140
     kernfs_fop_write_iter+0x3b2/0x630
     vfs_write+0x4fd/0x1390
     ksys_write+0xfd/0x230
     __x64_sys_write+0x76/0xc0
     x64_sys_call+0x276/0x17d0
     do_syscall_64+0x96/0x3a0
     entry_SYSCALL_64_after_hwframe+0x4b/0x53
     </TASK>
    
    Cc: Christoph Hellwig <[email protected]>
    Cc: Ming Lei <[email protected]>
    Cc: Nilay Shroff <[email protected]>
    Cc: Martin Wilck <[email protected]>
    Cc: Benjamin Marzinski <[email protected]>
    Cc: [email protected]
    Fixes: af2814149883 ("block: freeze the queue in queue_attr_store")
    Signed-off-by: Bart Van Assche <[email protected]>
    Reviewed-by: Nilay Shroff <[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]>

block: unify elevator tags and type xarrays into struct elv_change_ctx [+ + +]
Author: Nilay Shroff <[email protected]>
Date:   Thu Nov 13 14:28:18 2025 +0530

    block: unify elevator tags and type xarrays into struct elv_change_ctx
    
    [ Upstream commit 232143b605387b372dee0ec7830f93b93df5f67d ]
    
    Currently, the nr_hw_queues update path manages two disjoint xarrays —
    one for elevator tags and another for elevator type — both used during
    elevator switching. Maintaining these two parallel structures for the
    same purpose adds unnecessary complexity and potential for mismatched
    state.
    
    This patch unifies both xarrays into a single structure, struct
    elv_change_ctx, which holds all per-queue elevator change context. A
    single xarray, named elv_tbl, now maps each queue (q->id) in a tagset
    to its corresponding elv_change_ctx entry, encapsulating the elevator
    tags, type and name references.
    
    This unification simplifies the code, improves maintainability, and
    clarifies ownership of per-queue elevator state.
    
    Reviewed-by: Ming Lei <[email protected]>
    Reviewed-by: Yu Kuai <[email protected]>
    Signed-off-by: Nilay Shroff <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Stable-dep-of: 9869d3a6fed3 ("block: fix race between wbt_enable_default and IO submission")
    Signed-off-by: Sasha Levin <[email protected]>

block: use {alloc|free}_sched data methods [+ + +]
Author: Nilay Shroff <[email protected]>
Date:   Thu Nov 13 14:28:21 2025 +0530

    block: use {alloc|free}_sched data methods
    
    [ Upstream commit 0315476e78c050048e80f66334a310e5581b46bb ]
    
    The previous patch introduced ->alloc_sched_data and
    ->free_sched_data methods. This patch builds upon that
    by now using these methods during elevator switch and
    nr_hw_queue update.
    
    It's also ensured that scheduler-specific data is
    allocated and freed through the new callbacks outside
    of the ->freeze_lock and ->elevator_lock locking contexts,
    thereby preventing any dependency on pcpu_alloc_mutex.
    
    Reviewed-by: Ming Lei <[email protected]>
    Reviewed-by: Yu Kuai <[email protected]>
    Signed-off-by: Nilay Shroff <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Stable-dep-of: 9869d3a6fed3 ("block: fix race between wbt_enable_default and IO submission")
    Signed-off-by: Sasha Levin <[email protected]>

 
Bluetooth: btusb: add new custom firmwares [+ + +]
Author: Shuai Zhang <[email protected]>
Date:   Sun Nov 9 17:24:37 2025 +0800

    Bluetooth: btusb: add new custom firmwares
    
    [ Upstream commit a8b38d19857d42a1f2e90c9d9b0f74de2500acd7 ]
    
    The new platform uses the QCA2066 chip along with a new board ID, which
    requires a dedicated firmware file to ensure proper initialization.
    Without this entry, the driver cannot locate and load the correct
    firmware, resulting in Bluetooth bring-up failure.
    
    This patch adds a new entry to the firmware table for QCA2066 so that
    the driver can correctly identify the board ID and load the appropriate
    firmware from 'qca/QCA2066/' in the linux-firmware repository.
    
    Signed-off-by: Shuai Zhang <[email protected]>
    Acked-by: Dmitry Baryshkov <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: btusb: Add new VID/PID 0x0489/0xE12F for RTL8852BE-VT [+ + +]
Author: Max Chou <[email protected]>
Date:   Wed Nov 5 13:50:39 2025 +0800

    Bluetooth: btusb: Add new VID/PID 0x0489/0xE12F for RTL8852BE-VT
    
    [ Upstream commit 32caa197b9b603e20f49fd3a0dffecd0cd620499 ]
    
    Add the support ID(0x0489, 0xE12F) to usb_device_id table for
    Realtek RTL8852BE-VT.
    
    The device info from /sys/kernel/debug/usb/devices as below.
    
    T:  Bus=04 Lev=02 Prnt=02 Port=05 Cnt=01 Dev#= 86 Spd=12   MxCh= 0
    D:  Ver= 1.00 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=0489 ProdID=e12f Rev= 0.00
    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: Max Chou <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[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: Add new VID/PID 2b89/6275 for RTL8761BUV [+ + +]
Author: Chingbin Li <[email protected]>
Date:   Mon Oct 6 16:46:47 2025 +0800

    Bluetooth: btusb: Add new VID/PID 2b89/6275 for RTL8761BUV
    
    [ Upstream commit 8dbbb5423c0802ec21266765de80fd491868fab1 ]
    
    Add VID 2b89 & PID 6275 for Realtek RTL8761BUV 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=02 Cnt=01 Dev#=  6 Spd=12   MxCh= 0
    D:  Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=2b89 ProdID=6275 Rev= 2.00
    S:  Manufacturer=Realtek
    S:  Product=Bluetooth Radio
    S:  SerialNumber=00E04C239987
    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: Chingbin Li <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: btusb: MT7920: Add VID/PID 0489/e135 [+ + +]
Author: Chris Lu <[email protected]>
Date:   Wed Oct 15 11:31:49 2025 +0800

    Bluetooth: btusb: MT7920: Add VID/PID 0489/e135
    
    [ Upstream commit c126f98c011f5796ba118ef2093122d02809d30d ]
    
    Add VID 0489 & PID e135 for MediaTek MT7920 USB Bluetooth chip.
    
    The information in /sys/kernel/debug/usb/devices about the Bluetooth
    device is listed as the below.
    
    T:  Bus=06 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480  MxCh= 0
    D:  Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=0489 ProdID=e135 Rev= 1.00
    S:  Manufacturer=MediaTek Inc.
    S:  Product=Wireless_Device
    S:  SerialNumber=000000000
    C:* #Ifs= 3 Cfg#= 1 Atr=e0 MxPwr=100mA
    A:  FirstIf#= 0 IfCount= 3 Cls=e0(wlcon) Sub=01 Prot=01
    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=125us
    E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
    E:  Ad=03(O) 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=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
    E:  Ad=03(O) 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=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
    E:  Ad=03(O) 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=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
    E:  Ad=03(O) 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=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
    E:  Ad=03(O) 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=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
    I:  If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  63 Ivl=1ms
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  63 Ivl=1ms
    I:* If#= 2 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
    E:  Ad=8a(I) Atr=03(Int.) MxPS=  64 Ivl=125us
    E:  Ad=0a(O) Atr=03(Int.) MxPS=  64 Ivl=125us
    I:  If#= 2 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
    E:  Ad=8a(I) Atr=03(Int.) MxPS=  64 Ivl=125us
    E:  Ad=0a(O) Atr=03(Int.) MxPS=  64 Ivl=125us
    
    Signed-off-by: Chris Lu <[email protected]>
    Reviewed-by: Paul Menzel <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: btusb: MT7922: Add VID/PID 0489/e170 [+ + +]
Author: Chris Lu <[email protected]>
Date:   Wed Oct 15 11:31:50 2025 +0800

    Bluetooth: btusb: MT7922: Add VID/PID 0489/e170
    
    [ Upstream commit 5a6700a31c953af9a17a7e2681335f31d922614d ]
    
    Add VID 0489 & PID e170 for MediaTek MT7922 USB Bluetooth chip.
    
    The information in /sys/kernel/debug/usb/devices about the Bluetooth
    device is listed as the below.
    
    T:  Bus=06 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480  MxCh= 0
    D:  Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=0489 ProdID=e170 Rev= 1.00
    S:  Manufacturer=MediaTek Inc.
    S:  Product=Wireless_Device
    S:  SerialNumber=000000000
    C:* #Ifs= 3 Cfg#= 1 Atr=e0 MxPwr=100mA
    A:  FirstIf#= 0 IfCount= 3 Cls=e0(wlcon) Sub=01 Prot=01
    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=125us
    E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
    E:  Ad=03(O) 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=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
    E:  Ad=03(O) 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=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
    E:  Ad=03(O) 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=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
    E:  Ad=03(O) 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=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
    E:  Ad=03(O) 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=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
    I:  If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
    E:  Ad=83(I) Atr=01(Isoc) MxPS=  63 Ivl=1ms
    E:  Ad=03(O) Atr=01(Isoc) MxPS=  63 Ivl=1ms
    I:* If#= 2 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
    E:  Ad=8a(I) Atr=03(Int.) MxPS=  64 Ivl=125us
    E:  Ad=0a(O) Atr=03(Int.) MxPS=  64 Ivl=125us
    I:  If#= 2 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
    E:  Ad=8a(I) Atr=03(Int.) MxPS= 512 Ivl=125us
    E:  Ad=0a(O) Atr=03(Int.) MxPS= 512 Ivl=125us
    
    Signed-off-by: Chris Lu <[email protected]>
    Reviewed-by: Paul Menzel <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bnxt_en: Fix XDP_TX path [+ + +]
Author: Michael Chan <[email protected]>
Date:   Tue Dec 2 16:30:24 2025 -0800

    bnxt_en: Fix XDP_TX path
    
    [ Upstream commit 0373d5c387f24de749cc22e694a14b3a7c7eb515 ]
    
    For XDP_TX action in bnxt_rx_xdp(), clearing of the event flags is not
    correct.  __bnxt_poll_work() -> bnxt_rx_pkt() -> bnxt_rx_xdp() may be
    looping within NAPI and some event flags may be set in earlier
    iterations.  In particular, if BNXT_TX_EVENT is set earlier indicating
    some XDP_TX packets are ready and pending, it will be cleared if it is
    XDP_TX action again.  Normally, we will set BNXT_TX_EVENT again when we
    successfully call __bnxt_xmit_xdp().  But if the TX ring has no more
    room, the flag will not be set.  This will cause the TX producer to be
    ahead but the driver will not hit the TX doorbell.
    
    For multi-buf XDP_TX, there is no need to clear the event flags and set
    BNXT_AGG_EVENT.  The BNXT_AGG_EVENT flag should have been set earlier in
    bnxt_rx_pkt().
    
    The visible symptom of this is that the RX ring associated with the
    TX XDP ring will eventually become empty and all packets will be dropped.
    Because this condition will cause the driver to not refill the RX ring
    seeing that the TX ring has forever pending XDP_TX packets.
    
    The fix is to only clear BNXT_RX_EVENT when we have successfully
    called __bnxt_xmit_xdp().
    
    Fixes: 7f0a168b0441 ("bnxt_en: Add completion ring pointer in TX and RX ring structures")
    Reported-by: Pavel Dubovitsky <[email protected]>
    Reviewed-by: Andy Gospodarek <[email protected]>
    Reviewed-by: Pavan Chebbi <[email protected]>
    Reviewed-by: Kalesh AP <[email protected]>
    Signed-off-by: Michael Chan <[email protected]>
    Reviewed-by: Jacob Keller <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[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: Fix truncated dmabuf iterator reads [+ + +]
Author: T.J. Mercier <[email protected]>
Date:   Wed Dec 3 16:03:47 2025 -0800

    bpf: Fix truncated dmabuf iterator reads
    
    [ Upstream commit 234483565dbb2b264fdd165927c89fbf3ecf4733 ]
    
    If there is a large number (hundreds) of dmabufs allocated, the text
    output generated from dmabuf_iter_seq_show can exceed common user buffer
    sizes (e.g. PAGE_SIZE) necessitating multiple start/stop cycles to
    iterate through all dmabufs. However the dmabuf iterator currently
    returns NULL in dmabuf_iter_seq_start for all non-zero pos values, which
    results in the truncation of the output before all dmabufs are handled.
    
    After dma_buf_iter_begin / dma_buf_iter_next, the refcount of the buffer
    is elevated so that the BPF iterator program can run without holding any
    locks. When a stop occurs, instead of immediately dropping the reference
    on the buffer, stash a pointer to the buffer in seq->priv until
    either start is called or the iterator is released. This also enables
    the resumption of iteration without first walking through the list of
    dmabufs based on the pos value.
    
    Fixes: 76ea95534995 ("bpf: Add dmabuf iterator")
    Signed-off-by: T.J. Mercier <[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 verifier assumptions of bpf_d_path's output buffer [+ + +]
Author: Shuran Liu <[email protected]>
Date:   Sat Dec 6 22:12:09 2025 +0800

    bpf: Fix verifier assumptions of bpf_d_path's output buffer
    
    [ Upstream commit ac44dcc788b950606793e8f9690c30925f59df02 ]
    
    Commit 37cce22dbd51 ("bpf: verifier: Refactor helper access type
    tracking") started distinguishing read vs write accesses performed by
    helpers.
    
    The second argument of bpf_d_path() is a pointer to a buffer that the
    helper fills with the resulting path. However, its prototype currently
    uses ARG_PTR_TO_MEM without MEM_WRITE.
    
    Before 37cce22dbd51, helper accesses were conservatively treated as
    potential writes, so this mismatch did not cause issues. Since that
    commit, the verifier may incorrectly assume that the buffer contents
    are unchanged across the helper call and base its optimizations on this
    wrong assumption. This can lead to misbehaviour in BPF programs that
    read back the buffer, such as prefix comparisons on the returned path.
    
    Fix this by marking the second argument of bpf_d_path() as
    ARG_PTR_TO_MEM | MEM_WRITE so that the verifier correctly models the
    write to the caller-provided buffer.
    
    Fixes: 37cce22dbd51 ("bpf: verifier: Refactor helper access type tracking")
    Co-developed-by: Zesen Liu <[email protected]>
    Signed-off-by: Zesen Liu <[email protected]>
    Co-developed-by: Peili Gao <[email protected]>
    Signed-off-by: Peili Gao <[email protected]>
    Co-developed-by: Haoran Ni <[email protected]>
    Signed-off-by: Haoran Ni <[email protected]>
    Signed-off-by: Shuran Liu <[email protected]>
    Reviewed-by: Matt Bobrowski <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    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:   Thu Nov 27 16:35:59 2025 +0000

    btrfs: don't log conflicting inode if it's a dir moved in the current transaction
    
    commit 266273eaf4d99475f1ae57f687b3e42bc71ec6f0 upstream.
    
    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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: don't rewrite ret from inode_permission [+ + +]
Author: Josef Bacik <[email protected]>
Date:   Tue Nov 18 17:08:41 2025 +0100

    btrfs: don't rewrite ret from inode_permission
    
    commit 0185c2292c600993199bc6b1f342ad47a9e8c678 upstream.
    
    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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: fix a potential path leak in print_data_reloc_error() [+ + +]
Author: Qu Wenruo <[email protected]>
Date:   Tue Nov 25 18:49:56 2025 +1030

    btrfs: fix a potential path leak in print_data_reloc_error()
    
    [ Upstream commit 313ef70a9f0f637a09d9ef45222f5bdcf30a354b ]
    
    Inside print_data_reloc_error(), if extent_from_logical() failed we
    return immediately.
    
    However there are the following cases where extent_from_logical() can
    return error but still holds a path:
    
    - btrfs_search_slot() returned 0
    
    - No backref item found in extent tree
    
    - No flags_ret provided
      This is not possible in this call site though.
    
    So for the above two cases, we can return without releasing the path,
    causing extent buffer leaks.
    
    Fixes: b9a9a85059cd ("btrfs: output affected files when relocation fails")
    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]>

btrfs: fix changeset leak on mmap write after failure to reserve metadata [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Thu Dec 11 11:51:19 2025 +0000

    btrfs: fix changeset leak on mmap write after failure to reserve metadata
    
    [ Upstream commit 37343524f000d2a64359867d7024a73233d3b438 ]
    
    If the call to btrfs_delalloc_reserve_metadata() fails we jump to the
    'out_noreserve' label and there we never free the extent_changeset
    allocated by the previous call to btrfs_check_data_free_space() (if
    qgroups are enabled). Fix this by calling extent_changeset_free() under
    the 'out_noreserve' label.
    
    Fixes: 6599716de2d6 ("btrfs: fix -ENOSPC mmap write failure on NOCOW files/extents")
    Reported-by: [email protected]
    Link: https://lore.kernel.org/linux-btrfs/[email protected]/
    Reviewed-by: Qu Wenruo <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[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:   Mon Dec 1 19:26:38 2025 +0100

    can: gs_usb: gs_can_open(): fix error handling
    
    commit 3e54d3b4a8437b6783d4145c86962a2aa51022f3 upstream.
    
    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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

can: j1939: make j1939_sk_bind() fail if device is no longer registered [+ + +]
Author: Tetsuo Handa <[email protected]>
Date:   Tue Nov 25 22:43:12 2025 +0900

    can: j1939: make j1939_sk_bind() fail if device is no longer registered
    
    [ Upstream commit 46cea215dc9444ec32a76b1b6a9cb809e17b64d5 ]
    
    There is a theoretical race window in j1939_sk_netdev_event_unregister()
    where two j1939_sk_bind() calls jump in between read_unlock_bh() and
    lock_sock().
    
    The assumption jsk->priv == priv can fail if the first j1939_sk_bind()
    call once made jsk->priv == NULL due to failed j1939_local_ecu_get() call
    and the second j1939_sk_bind() call again made jsk->priv != NULL due to
    successful j1939_local_ecu_get() call.
    
    Since the socket lock is held by both j1939_sk_netdev_event_unregister()
    and j1939_sk_bind(), checking ndev->reg_state with the socket lock held can
    reliably make the second j1939_sk_bind() call fail (and close this race
    window).
    
    Fixes: 7fcbe5b2c6a4 ("can: j1939: implement NETDEV_UNREGISTER notification handler")
    Signed-off-by: Tetsuo Handa <[email protected]>
    Acked-by: Oleksij Rempel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
cgroup: rstat: use LOCK CMPXCHG in css_rstat_updated [+ + +]
Author: Shakeel Butt <[email protected]>
Date:   Fri Dec 5 12:01:06 2025 -0800

    cgroup: rstat: use LOCK CMPXCHG in css_rstat_updated
    
    commit 3309b63a2281efb72df7621d60cc1246b6286ad3 upstream.
    
    On x86-64, this_cpu_cmpxchg() uses CMPXCHG without LOCK prefix which
    means it is only safe for the local CPU and not for multiple CPUs.
    Recently the commit 36df6e3dbd7e ("cgroup: make css_rstat_updated nmi
    safe") make css_rstat_updated lockless and uses lockless list to allow
    reentrancy. Since css_rstat_updated can invoked from process context,
    IRQ and NMI, it uses this_cpu_cmpxchg() to select the winner which will
    inset the lockless lnode into the global per-cpu lockless list.
    
    However the commit missed one case where lockless node of a cgroup can
    be accessed and modified by another CPU doing the flushing. Basically
    llist_del_first_init() in css_process_update_tree().
    
    On a cursory look, it can be questioned how css_process_update_tree()
    can see a lockless node in global lockless list where the updater is at
    this_cpu_cmpxchg() and before llist_add() call in css_rstat_updated().
    This can indeed happen in the presence of IRQs/NMI.
    
    Consider this scenario: Updater for cgroup stat C on CPU A in process
    context is after llist_on_list() check and before this_cpu_cmpxchg() in
    css_rstat_updated() where it get interrupted by IRQ/NMI. In the IRQ/NMI
    context, a new updater calls css_rstat_updated() for same cgroup C and
    successfully inserts rstatc_pcpu->lnode.
    
    Now concurrently CPU B is running the flusher and it calls
    llist_del_first_init() for CPU A and got rstatc_pcpu->lnode of cgroup C
    which was added by the IRQ/NMI updater.
    
    Now imagine CPU B calling init_llist_node() on cgroup C's
    rstatc_pcpu->lnode of CPU A and on CPU A, the process context updater
    calling this_cpu_cmpxchg(rstatc_pcpu->lnode) concurrently.
    
    The CMPXCNG without LOCK on CPU A is not safe and thus we need LOCK
    prefix.
    
    In Meta's fleet running the kernel with the commit 36df6e3dbd7e, we are
    observing on some machines the memcg stats are getting skewed by more
    than the actual memory on the system. On close inspection, we noticed
    that lockless node for a workload for specific CPU was in the bad state
    and thus all the updates on that CPU for that cgroup was being lost.
    
    To confirm if this skew was indeed due to this CMPXCHG without LOCK in
    css_rstat_updated(), we created a repro (using AI) at [1] which shows
    that CMPXCHG without LOCK creates almost the same lnode corruption as
    seem in Meta's fleet and with LOCK CMPXCHG the issue does not
    reproduces.
    
    Link: http://lore.kernel.org/efiagdwmzfwpdzps74fvcwq3n4cs36q33ij7eebcpssactv3zu@se4hqiwxcfxq [1]
    Signed-off-by: Shakeel Butt <[email protected]>
    Cc: [email protected] # v6.17+
    Fixes: 36df6e3dbd7e ("cgroup: make css_rstat_updated nmi safe")
    Signed-off-by: Tejun Heo <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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]>

 
cifs: Fix memory and information leak in smb3_reconfigure() [+ + +]
Author: Zilin Guan <[email protected]>
Date:   Wed Dec 24 15:21:42 2025 +0000

    cifs: Fix memory and information leak in smb3_reconfigure()
    
    [ Upstream commit cb6d5aa9c0f10074f1ad056c3e2278ad2cc7ec8d ]
    
    In smb3_reconfigure(), if smb3_sync_session_ctx_passwords() fails, the
    function returns immediately without freeing and erasing the newly
    allocated new_password and new_password2. This causes both a memory leak
    and a potential information leak.
    
    Fix this by calling kfree_sensitive() on both password buffers before
    returning in this error case.
    
    Fixes: 0f0e357902957 ("cifs: during remount, make sure passwords are in sync")
    Signed-off-by: Zilin Guan <[email protected]>
    Reviewed-by: ChenXiaoSong <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
clk: keystone: syscon-clk: fix regmap leak on probe failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Thu Nov 27 14:42:43 2025 +0100

    clk: keystone: syscon-clk: fix regmap leak on probe failure
    
    commit 9c75986a298f121ed2c6599b05e51d9a34e77068 upstream.
    
    The mmio regmap allocated during probe is never freed.
    
    Switch to using the device managed allocator so that the regmap is
    released on probe failures (e.g. probe deferral) and on driver unbind.
    
    Fixes: a250cd4c1901 ("clk: keystone: syscon-clk: Do not use syscon helper to build regmap")
    Cc: [email protected]      # 6.15
    Cc: Andrew Davis <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Stephen Boyd <[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: qcom: dispcc-sm7150: Fix dispcc_mdss_pclk0_clk_src [+ + +]
Author: Jens Reidel <[email protected]>
Date:   Fri Sep 19 14:34:32 2025 +0200

    clk: qcom: dispcc-sm7150: Fix dispcc_mdss_pclk0_clk_src
    
    [ Upstream commit e3c13e0caa8ceb7dec1a7c4fcfd9dbef56a69fbe ]
    
    Set CLK_OPS_PARENT_ENABLE to ensure the parent gets prepared and enabled
    when switching to it, fixing an "rcg didn't update its configuration"
    warning.
    
    Signed-off-by: Jens Reidel <[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: Sasha Levin <[email protected]>

 
cpufreq: dt-platdev: Add JH7110S SOC to the allowlist [+ + +]
Author: Hal Feng <[email protected]>
Date:   Thu Oct 16 16:00:48 2025 +0800

    cpufreq: dt-platdev: Add JH7110S SOC to the allowlist
    
    [ Upstream commit 6e7970cab51d01b8f7c56f120486c571c22e1b80 ]
    
    Add the compatible strings for supporting the generic
    cpufreq driver on the StarFive JH7110S SoC.
    
    Signed-off-by: Hal Feng <[email protected]>
    Reviewed-by: Heinrich Schuchardt <[email protected]>
    Signed-off-by: Viresh Kumar <[email protected]>
    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]>

 
cpuidle: governors: teo: Drop misguided target residency check [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Thu Nov 13 14:24:31 2025 +0100

    cpuidle: governors: teo: Drop misguided target residency check
    
    commit a03b2011808ab02ccb7ab6b573b013b77fbb5921 upstream.
    
    When the target residency of the current candidate idle state is
    greater than the expected time till the closest timer (the sleep
    length), it does not matter whether or not the tick has already been
    stopped or if it is going to be stopped.  The closest timer will
    trigger anyway at its due time, so if an idle state with target
    residency above the sleep length is selected, energy will be wasted
    and there may be excess latency.
    
    Of course, if the closest timer were canceled before it could trigger,
    a deeper idle state would be more suitable, but this is not expected
    to happen (generally speaking, hrtimers are not expected to be
    canceled as a rule).
    
    Accordingly, the teo_state_ok() check done in that case causes energy to
    be wasted more often than it allows any energy to be saved (if it allows
    any energy to be saved at all), so drop it and let the governor use the
    teo_find_shallower_state() return value as the new candidate idle state
    index.
    
    Fixes: 21d28cd2fa5f ("cpuidle: teo: Do not call tick_nohz_get_sleep_length() upfront")
    Cc: All applicable <[email protected]>
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Reviewed-by: Christian Loehle <[email protected]>
    Tested-by: Christian Loehle <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

cpuidle: menu: Use residency threshold in polling state override decisions [+ + +]
Author: Aboorva Devarajan <[email protected]>
Date:   Mon Oct 6 07:09:54 2025 +0530

    cpuidle: menu: Use residency threshold in polling state override decisions
    
    [ Upstream commit 07d815701274d156ad8c7c088a52e01642156fb8 ]
    
    On virtualized PowerPC (pseries) systems, where only one polling state
    (Snooze) and one deep state (CEDE) are available, selecting CEDE when
    the predicted idle duration is less than the target residency of CEDE
    state can hurt performance. In such cases, the entry/exit overhead of
    CEDE outweighs the power savings, leading to unnecessary state
    transitions and higher latency.
    
    Menu governor currently contains a special-case rule that prioritizes
    the first non-polling state over polling, even when its target residency
    is much longer than the predicted idle duration. On PowerPC/pseries,
    where the gap between the polling state (Snooze) and the first non-polling
    state (CEDE) is large, this behavior causes performance regressions.
    
    Refine that special case by adding an extra requirement: the first
    non-polling state can only be chosen if its target residency is below
    the defined RESIDENCY_THRESHOLD_NS. If this condition is not satisfied,
    polling is allowed instead, avoiding suboptimal non-polling state
    entries.
    
    This change is limited to the single special-case rule for the first
    non-polling state. The general non-polling state selection logic in the
    menu governor remains unchanged.
    
    Performance improvement observed with pgbench on PowerPC (pseries)
    system:
    +---------------------------+------------+------------+------------+
    | Metric                    | Baseline   | Patched    | Change (%) |
    +---------------------------+------------+------------+------------+
    | Transactions/sec (TPS)    | 495,210    | 536,982    | +8.45%     |
    | Avg latency (ms)          | 0.163      | 0.150      | -7.98%     |
    +---------------------------+------------+------------+------------+
    
    CPUIdle state usage:
    +--------------+--------------+-------------+
    | Metric       | Baseline     | Patched     |
    +--------------+--------------+-------------+
    | Total usage  | 12,735,820   | 13,918,442  |
    | Above usage  | 11,401,520   | 1,598,210   |
    | Below usage  | 20,145       | 702,395     |
    +--------------+--------------+-------------+
    
    Above/Total and Below/Total usage percentages:
    +------------------------+-----------+---------+
    | Metric                 | Baseline  | Patched |
    +------------------------+-----------+---------+
    | Above % (Above/Total)  | 89.56%    | 11.49%  |
    | Below % (Below/Total)  | 0.16%     | 5.05%   |
    | Total cpuidle miss (%) | 89.72%    | 16.54%  |
    +------------------------+-----------+---------+
    
    The results indicate that restricting CEDE selection to cases where
    its residency matches the predicted idle time reduces mispredictions,
    lowers unnecessary state transitions, and improves overall throughput.
    
    Reviewed-by: Christian Loehle <[email protected]>
    Signed-off-by: Aboorva Devarajan <[email protected]>
    [ rjw: Changelog edits, rebase ]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
crash: let architecture decide crash memory export to iomem_resource [+ + +]
Author: Sourabh Jain <[email protected]>
Date:   Thu Oct 16 19:58:31 2025 +0530

    crash: let architecture decide crash memory export to iomem_resource
    
    commit adc15829fb73e402903b7030729263b6ee4a7232 upstream.
    
    With the generic crashkernel reservation, the kernel emits the following
    warning on powerpc:
    
    WARNING: CPU: 0 PID: 1 at arch/powerpc/mm/mem.c:341 add_system_ram_resources+0xfc/0x180
    Modules linked in:
    CPU: 0 UID: 0 PID: 1 Comm: swapper/0 Not tainted 6.17.0-auto-12607-g5472d60c129f #1 VOLUNTARY
    Hardware name: IBM,9080-HEX Power11 (architected) 0x820200 0xf000007 of:IBM,FW1110.01 (NH1110_069) hv:phyp pSeries
    NIP:  c00000000201de3c LR: c00000000201de34 CTR: 0000000000000000
    REGS: c000000127cef8a0 TRAP: 0700   Not tainted (6.17.0-auto-12607-g5472d60c129f)
    MSR:  8000000002029033 <SF,VEC,EE,ME,IR,DR,RI,LE>  CR: 84000840  XER: 20040010
    CFAR: c00000000017eed0 IRQMASK: 0
    GPR00: c00000000201de34 c000000127cefb40 c0000000016a8100 0000000000000001
    GPR04: c00000012005aa00 0000000020000000 c000000002b705c8 0000000000000000
    GPR08: 000000007fffffff fffffffffffffff0 c000000002db8100 000000011fffffff
    GPR12: c00000000201dd40 c000000002ff0000 c0000000000112bc 0000000000000000
    GPR16: 0000000000000000 0000000000000000 0000000000000000 0000000000000000
    GPR20: 0000000000000000 0000000000000000 0000000000000000 c0000000015a3808
    GPR24: c00000000200468c c000000001699888 0000000000000106 c0000000020d1950
    GPR28: c0000000014683f8 0000000081000200 c0000000015c1868 c000000002b9f710
    NIP [c00000000201de3c] add_system_ram_resources+0xfc/0x180
    LR [c00000000201de34] add_system_ram_resources+0xf4/0x180
    Call Trace:
    add_system_ram_resources+0xf4/0x180 (unreliable)
    do_one_initcall+0x60/0x36c
    do_initcalls+0x120/0x220
    kernel_init_freeable+0x23c/0x390
    kernel_init+0x34/0x26c
    ret_from_kernel_user_thread+0x14/0x1c
    
    This warning occurs due to a conflict between crashkernel and System RAM
    iomem resources.
    
    The generic crashkernel reservation adds the crashkernel memory range to
    /proc/iomem during early initialization. Later, all memblock ranges are
    added to /proc/iomem as System RAM. If the crashkernel region overlaps
    with any memblock range, it causes a conflict while adding those memblock
    regions as iomem resources, triggering the above warning. The conflicting
    memblock regions are then omitted from /proc/iomem.
    
    For example, if the following crashkernel region is added to /proc/iomem:
    20000000-11fffffff : Crash kernel
    
    then the following memblock regions System RAM regions fail to be inserted:
    00000000-7fffffff : System RAM
    80000000-257fffffff : System RAM
    
    Fix this by not adding the crashkernel memory to /proc/iomem on powerpc.
    Introduce an architecture hook to let each architecture decide whether to
    export the crashkernel region to /proc/iomem.
    
    For more info checkout commit c40dd2f766440 ("powerpc: Add System RAM
    to /proc/iomem") and commit bce074bdbc36 ("powerpc: insert System RAM
    resource to prevent crashkernel conflict")
    
    Note: Before switching to the generic crashkernel reservation, powerpc
    never exported the crashkernel region to /proc/iomem.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: e3185ee438c2 ("powerpc/crash: use generic crashkernel reservation").
    Signed-off-by: Sourabh Jain <[email protected]>
    Reported-by: Venkat Rao Bagalkote <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Tested-by: Venkat Rao Bagalkote <[email protected]>
    Cc: Baoquan he <[email protected]>
    Cc: Hari Bathini <[email protected]>
    Cc: Madhavan Srinivasan <[email protected]>
    Cc: Mahesh Salgaonkar <[email protected]>
    Cc: Michael Ellerman <[email protected]>
    Cc: Ritesh Harjani (IBM) <[email protected]>
    Cc: Vivek Goyal <[email protected]>
    Cc: Dave Young <[email protected]>
    Cc: Mike Rapoport <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
crypto: af_alg - zero initialize memory allocated via sock_kmalloc [+ + +]
Author: Shivani Agarwal <[email protected]>
Date:   Tue Sep 23 23:01:48 2025 -0700

    crypto: af_alg - zero initialize memory allocated via sock_kmalloc
    
    commit 6f6e309328d53a10c0fe1f77dec2db73373179b6 upstream.
    
    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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: arm64/ghash - Fix incorrect output from ghash-neon [+ + +]
Author: Eric Biggers <[email protected]>
Date:   Tue Dec 9 14:34:17 2025 -0800

    crypto: arm64/ghash - Fix incorrect output from ghash-neon
    
    commit f6a458746f905adb7d70e50e8b9383dc9e3fd75f upstream.
    
    Commit 9a7c987fb92b ("crypto: arm64/ghash - Use API partial block
    handling") made ghash_finup() pass the wrong buffer to
    ghash_do_simd_update().  As a result, ghash-neon now produces incorrect
    outputs when the message length isn't divisible by 16 bytes.  Fix this.
    
    (I didn't notice this earlier because this code is reached only on CPUs
    that support NEON but not PMULL.  I haven't yet found a way to get
    qemu-system-aarch64 to emulate that configuration.)
    
    Fixes: 9a7c987fb92b ("crypto: arm64/ghash - Use API partial block handling")
    Cc: [email protected]
    Reported-by: Diederik de Haas <[email protected]>
    Closes: https://lore.kernel.org/linux-crypto/[email protected]/
    Tested-by: Diederik de Haas <[email protected]>
    Acked-by: Herbert Xu <[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]>

crypto: caam - Add check for kcalloc() in test_len() [+ + +]
Author: Guangshuo Li <[email protected]>
Date:   Tue Sep 23 20:44:18 2025 +0800

    crypto: caam - Add check for kcalloc() in test_len()
    
    commit 7cf6e0b69b0d90ab042163e5bbddda0dfcf8b6a7 upstream.
    
    As kcalloc() may fail, check its return value to avoid a NULL pointer
    dereference when passing the buffer to rng->read(). On allocation
    failure, log the error and return since test_len() returns void.
    
    Fixes: 2be0d806e25e ("crypto: caam - add a test for the RNG")
    Cc: [email protected]
    Signed-off-by: Guangshuo Li <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: ccp - Add support for PCI device 0x115A [+ + +]
Author: Mario Limonciello (AMD) <[email protected]>
Date:   Wed Oct 29 11:15:01 2025 -0500

    crypto: ccp - Add support for PCI device 0x115A
    
    [ Upstream commit 9fc6290117259a8dbf8247cb54559df62fd1550f ]
    
    PCI device 0x115A is similar to pspv5, except it doesn't have platform
    access mailbox support.
    
    Signed-off-by: Mario Limonciello (AMD) <[email protected]>
    Acked-by: Tom Lendacky <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: scatterwalk - Fix memcpy_sglist() to always succeed [+ + +]
Author: Eric Biggers <[email protected]>
Date:   Sat Nov 15 15:08:16 2025 -0800

    crypto: scatterwalk - Fix memcpy_sglist() to always succeed
    
    commit 4dffc9bbffb9ccfcda730d899c97c553599e7ca8 upstream.
    
    The original implementation of memcpy_sglist() was broken because it
    didn't handle scatterlists that describe exactly the same memory, which
    is a case that many callers rely on.  The current implementation is
    broken too because it calls the skcipher_walk functions which can fail.
    It ignores any errors from those functions.
    
    Fix it by replacing it with a new implementation written from scratch.
    It always succeeds.  It's also a bit faster, since it avoids the
    overhead of skcipher_walk.  skcipher_walk includes a lot of
    functionality (such as alignmask handling) that's irrelevant here.
    
    Reported-by: Colin Ian King <[email protected]>
    Closes: https://lore.kernel.org/r/[email protected]
    Fixes: 131bdceca1f0 ("crypto: scatterwalk - Add memcpy_sglist")
    Fixes: 0f8d42bf128d ("crypto: scatterwalk - Move skcipher walk and use it for memcpy_sglist")
    Cc: [email protected]
    Signed-off-by: Eric Biggers <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dm-pcache: advance slot index before writing slot [+ + +]
Author: Dongsheng Yang <[email protected]>
Date:   Fri Dec 5 05:46:18 2025 +0000

    dm-pcache: advance slot index before writing slot
    
    commit ebbb90344a7da2421e4b54668b94e81828b8b308 upstream.
    
    In dm-pcache, in order to ensure crash-consistency, a dual-copy scheme
    is used to alternately update metadata, and there is a slot index that
    records the current slot. However, in the write path the current
    implementation writes directly to the current slot indexed by slot
    index, and then advances the slot — which ends up overwriting the
    existing slot, violating the crash-consistency guarantee.
    
    This patch fixes that behavior, preventing metadata from being
    overwritten incorrectly.
    
    In addition, this patch add a missing pmem_wmb() after memcpy_flushcache().
    
    Signed-off-by: Dongsheng Yang <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Reviewed-by: Zheng Gu <[email protected]>
    Cc: [email protected]      # 6.18
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dma-mapping: Fix DMA_BIT_MASK() macro being broken [+ + +]
Author: Hans de Goede <[email protected]>
Date:   Sun Dec 7 19:47:56 2025 +0100

    dma-mapping: Fix DMA_BIT_MASK() macro being broken
    
    commit 31b931bebd11a0f00967114f62c8c38952f483e5 upstream.
    
    After commit a50f7456f853 ("dma-mapping: Allow use of DMA_BIT_MASK(64) in
    global scope"), the DMA_BIT_MASK() macro is broken when passed non trivial
    statements for the value of 'n'. This is caused by the new version missing
    parenthesis around 'n' when evaluating 'n'.
    
    One example of this breakage is the IPU6 driver now crashing due to
    it getting DMA-addresses with address bit 32 set even though it has
    tried to set a 32 bit DMA mask.
    
    The IPU6 CSI2 engine has a DMA mask of either 31 or 32 bits depending
    on if it is in secure mode or not and it sets this masks like this:
    
            mmu_info->aperture_end =
                    (dma_addr_t)DMA_BIT_MASK(isp->secure_mode ?
                                             IPU6_MMU_ADDR_BITS :
                                             IPU6_MMU_ADDR_BITS_NON_SECURE);
    
    So the 'n' argument here is "isp->secure_mode ? IPU6_MMU_ADDR_BITS :
    IPU6_MMU_ADDR_BITS_NON_SECURE" which gets expanded into:
    
    isp->secure_mode ? IPU6_MMU_ADDR_BITS : IPU6_MMU_ADDR_BITS_NON_SECURE - 1
    
    With the -1 only being applied in the non secure case, causing
    the secure mode mask to be one 1 bit too large.
    
    Fixes: a50f7456f853 ("dma-mapping: Allow use of DMA_BIT_MASK(64) in global scope")
    Cc: Sakari Ailus <[email protected]>
    Cc: James Clark <[email protected]>
    Cc: Nathan Chancellor <[email protected]>
    Cc: [email protected]
    Signed-off-by: Hans de Goede <[email protected]>
    Reviewed-by: Nathan Chancellor <[email protected]>
    Signed-off-by: Marek Szyprowski <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amd/display: Fix scratch registers offsets for DCN35 [+ + +]
Author: Ray Wu <[email protected]>
Date:   Fri Nov 28 08:58:13 2025 +0800

    drm/amd/display: Fix scratch registers offsets for DCN35
    
    commit 69741d9ccc7222e6b6f138db67b012ecc0d72542 upstream.
    
    [Why]
    Different platforms use differnet NBIO header files,
    causing display code to use differnt offset and read
    wrong accelerated status.
    
    [How]
    - Unified NBIO offset header file across platform.
    - Correct scratch registers offsets to proper locations.
    
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4667
    Cc: Mario Limonciello <[email protected]>
    Cc: Alex Deucher <[email protected]>
    Reviewed-by: Mario Limonciello <[email protected]>
    Signed-off-by: Ray Wu <[email protected]>
    Signed-off-by: Chenyu Chen <[email protected]>
    Tested-by: Daniel Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 49a63bc8eda0304ba307f5ba68305f936174f72d)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amd/display: Fix scratch registers offsets for DCN351 [+ + +]
Author: Ray Wu <[email protected]>
Date:   Fri Nov 28 09:14:09 2025 +0800

    drm/amd/display: Fix scratch registers offsets for DCN351
    
    commit fd62aa13d3ee0f21c756a40a7c2f900f98992d6a upstream.
    
    [Why]
    Different platforms use different NBIO header files,
    causing display code to use differnt offset and read
    wrong accelerated status.
    
    [How]
    - Unified NBIO offset header file across platform.
    - Correct scratch registers offsets to proper locations.
    
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4667
    Cc: Mario Limonciello <[email protected]>
    Cc: Alex Deucher <[email protected]>
    Reviewed-by: Mario Limonciello <[email protected]>
    Signed-off-by: Ray Wu <[email protected]>
    Signed-off-by: Chenyu Chen <[email protected]>
    Tested-by: Daniel Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 576e032e909c8a6bb3d907b4ef5f6abe0f644199)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[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: fix a job->pasid access race in gpu recovery [+ + +]
Author: Alex Deucher <[email protected]>
Date:   Wed Dec 10 11:02:30 2025 -0500

    drm/amdgpu: fix a job->pasid access race in gpu recovery
    
    [ Upstream commit 77f73253015cbc7893fca1821ac3eae9eb4bc943 ]
    
    Avoid a possible UAF in GPU recovery due to a race between
    the sched timeout callback and the tdr work queue.
    
    The gpu recovery function calls drm_sched_stop() and
    later drm_sched_start().  drm_sched_start() restarts
    the tdr queue which will eventually free the job.  If
    the tdr queue frees the job before time out callback
    completes, the job will be freed and we'll get a UAF
    when accessing the pasid.  Cache it early to avoid the
    UAF.
    
    Example KASAN trace:
    [  493.058141] BUG: KASAN: slab-use-after-free in amdgpu_device_gpu_recover+0x968/0x990 [amdgpu]
    [  493.067530] Read of size 4 at addr ffff88b0ce3f794c by task kworker/u128:1/323
    [  493.074892]
    [  493.076485] CPU: 9 UID: 0 PID: 323 Comm: kworker/u128:1 Tainted: G            E       6.16.0-1289896.2.zuul.bf4f11df81c1410bbe901c4373305a31 #1 PREEMPT(voluntary)
    [  493.076493] Tainted: [E]=UNSIGNED_MODULE
    [  493.076495] Hardware name: TYAN B8021G88V2HR-2T/S8021GM2NR-2T, BIOS V1.03.B10 04/01/2019
    [  493.076500] Workqueue: amdgpu-reset-dev drm_sched_job_timedout [gpu_sched]
    [  493.076512] Call Trace:
    [  493.076515]  <TASK>
    [  493.076518]  dump_stack_lvl+0x64/0x80
    [  493.076529]  print_report+0xce/0x630
    [  493.076536]  ? _raw_spin_lock_irqsave+0x86/0xd0
    [  493.076541]  ? __pfx__raw_spin_lock_irqsave+0x10/0x10
    [  493.076545]  ? amdgpu_device_gpu_recover+0x968/0x990 [amdgpu]
    [  493.077253]  kasan_report+0xb8/0xf0
    [  493.077258]  ? amdgpu_device_gpu_recover+0x968/0x990 [amdgpu]
    [  493.077965]  amdgpu_device_gpu_recover+0x968/0x990 [amdgpu]
    [  493.078672]  ? __pfx_amdgpu_device_gpu_recover+0x10/0x10 [amdgpu]
    [  493.079378]  ? amdgpu_coredump+0x1fd/0x4c0 [amdgpu]
    [  493.080111]  amdgpu_job_timedout+0x642/0x1400 [amdgpu]
    [  493.080903]  ? pick_task_fair+0x24e/0x330
    [  493.080910]  ? __pfx_amdgpu_job_timedout+0x10/0x10 [amdgpu]
    [  493.081702]  ? _raw_spin_lock+0x75/0xc0
    [  493.081708]  ? __pfx__raw_spin_lock+0x10/0x10
    [  493.081712]  drm_sched_job_timedout+0x1b0/0x4b0 [gpu_sched]
    [  493.081721]  ? __pfx__raw_spin_lock_irq+0x10/0x10
    [  493.081725]  process_one_work+0x679/0xff0
    [  493.081732]  worker_thread+0x6ce/0xfd0
    [  493.081736]  ? __pfx_worker_thread+0x10/0x10
    [  493.081739]  kthread+0x376/0x730
    [  493.081744]  ? __pfx_kthread+0x10/0x10
    [  493.081748]  ? __pfx__raw_spin_lock_irq+0x10/0x10
    [  493.081751]  ? __pfx_kthread+0x10/0x10
    [  493.081755]  ret_from_fork+0x247/0x330
    [  493.081761]  ? __pfx_kthread+0x10/0x10
    [  493.081764]  ret_from_fork_asm+0x1a/0x30
    [  493.081771]  </TASK>
    
    Fixes: a72002cb181f ("drm/amdgpu: Make use of drm_wedge_task_info")
    Link: https://github.com/HansKristian-Work/vkd3d-proton/pull/2670
    Cc: [email protected]
    Cc: [email protected]
    Cc: [email protected]
    Suggested-by: Matthew Brost <[email protected]>
    Reviewed-by: Srinivasan Shanmugam <[email protected]>
    Reviewed-by: Lijo Lazar <[email protected]>
    Reviewed-by: Christian König <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 20880a3fd5dd7bca1a079534cf6596bda92e107d)
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/displayid: pass iter to drm_find_displayid_extension() [+ + +]
Author: Jani Nikula <[email protected]>
Date:   Tue Oct 28 22:07:25 2025 +0200

    drm/displayid: pass iter to drm_find_displayid_extension()
    
    commit 520f37c30992fd0c212a34fbe99c062b7a3dc52e upstream.
    
    It's more convenient to pass iter than a handful of its members to
    drm_find_displayid_extension(), especially as we're about to add another
    member.
    
    Rename the function find_next_displayid_extension() while at it, to be
    more descriptive.
    
    Cc: Tiago Martins Araújo <[email protected]>
    Acked-by: Alex Deucher <[email protected]>
    Tested-by: Tiago Martins Araújo <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/3837ae7f095e77a082ac2422ce2fac96c4f9373d.1761681968.git.jani.nikula@intel.com
    Signed-off-by: Jani Nikula <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/me/gsc: mei interrupt top half should be in irq disabled context [+ + +]
Author: Junxiao Chang <[email protected]>
Date:   Fri Nov 7 11:31:52 2025 +0800

    drm/me/gsc: mei interrupt top half should be in irq disabled context
    
    [ Upstream commit 17445af7dcc7d645b6fb8951fd10c8b72cc7f23f ]
    
    MEI GSC interrupt comes from i915 or xe driver. It has top half and
    bottom half. Top half is called from i915/xe interrupt handler. It
    should be in irq disabled context.
    
    With RT kernel(PREEMPT_RT enabled), by default IRQ handler is in
    threaded IRQ. MEI GSC top half might be in threaded IRQ context.
    generic_handle_irq_safe API could be called from either IRQ or
    process context, it disables local IRQ then calls MEI GSC interrupt
    top half.
    
    This change fixes B580 GPU boot issue with RT enabled.
    
    Fixes: e02cea83d32d ("drm/xe/gsc: add Battlemage support")
    Tested-by: Baoli Zhang <[email protected]>
    Signed-off-by: Junxiao Chang <[email protected]>
    Reviewed-by: Sebastian Andrzej Siewior <[email protected]>
    Reviewed-by: Matthew Brost <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Maarten Lankhorst <[email protected]>
    (cherry picked from commit 3efadf028783a49ab2941294187c8b6dd86bf7da)
    Signed-off-by: Thomas Hellström <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/msm/a6xx: move preempt_prepare_postamble after error check [+ + +]
Author: Alok Tiwari <[email protected]>
Date:   Thu Nov 13 00:28:31 2025 -0800

    drm/msm/a6xx: move preempt_prepare_postamble after error check
    
    [ Upstream commit ef3b04091fd8bc737dc45312375df8625b8318e2 ]
    
    Move the call to preempt_prepare_postamble() after verifying that
    preempt_postamble_ptr is valid. If preempt_postamble_ptr is NULL,
    dereferencing it in preempt_prepare_postamble() would lead to a crash.
    
    This change avoids calling the preparation function when the
    postamble allocation has failed, preventing potential NULL pointer
    dereference and ensuring proper error handling.
    
    Fixes: 50117cad0c50 ("drm/msm/a6xx: Use posamble to reset counters on preemption")
    Signed-off-by: Alok Tiwari <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/687659/
    Message-ID: <[email protected]>
    Signed-off-by: Rob Clark <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/msm: adreno: fix deferencing ifpc_reglist when not declared [+ + +]
Author: Neil Armstrong <[email protected]>
Date:   Mon Nov 17 15:51:35 2025 +0100

    drm/msm: adreno: fix deferencing ifpc_reglist when not declared
    
    [ Upstream commit 129049d4fe22c998ae9fd1ec479fbb4ed5338c15 ]
    
    On plaforms with an a7xx GPU not supporting IFPC, the ifpc_reglist
    if still deferenced in a7xx_patch_pwrup_reglist() which causes
    a kernel crash:
    Unable to handle kernel NULL pointer dereference at virtual address 0000000000000008
    ...
    pc : a6xx_hw_init+0x155c/0x1e4c [msm]
    lr : a6xx_hw_init+0x9a8/0x1e4c [msm]
    ...
    Call trace:
      a6xx_hw_init+0x155c/0x1e4c [msm] (P)
      msm_gpu_hw_init+0x58/0x88 [msm]
      adreno_load_gpu+0x94/0x1fc [msm]
      msm_open+0xe4/0xf4 [msm]
      drm_file_alloc+0x1a0/0x2e4 [drm]
      drm_client_init+0x7c/0x104 [drm]
      drm_fbdev_client_setup+0x94/0xcf0 [drm_client_lib]
      drm_client_setup+0xb4/0xd8 [drm_client_lib]
      msm_drm_kms_post_init+0x2c/0x3c [msm]
      msm_drm_init+0x1a4/0x228 [msm]
      msm_drm_bind+0x30/0x3c [msm]
    ...
    
    Check the validity of ifpc_reglist before deferencing the table
    to setup the register values.
    
    Fixes: a6a0157cc68e ("drm/msm/a6xx: Enable IFPC on Adreno X1-85")
    Signed-off-by: Neil Armstrong <[email protected]>
    Reviewed-by: Akhil P Oommen <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/688944/
    Message-ID: <20251117-topic-sm8x50-fix-a6xx-non-ifpc-v1-1-e4473cbf5903@linaro.org>
    Signed-off-by: Rob Clark <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/panel: sony-td4353-jdi: Enable prepare_prev_first [+ + +]
Author: Marijn Suijten <[email protected]>
Date:   Sun Nov 30 23:40:05 2025 +0100

    drm/panel: sony-td4353-jdi: Enable prepare_prev_first
    
    [ Upstream commit 2b973ca48ff3ef1952091c8f988d7796781836c8 ]
    
    The DSI host must be enabled before our prepare function can run, which
    has to send its init sequence over DSI.  Without enabling the host first
    the panel will not probe.
    
    Fixes: 9e15123eca79 ("drm/msm/dsi: Stop unconditionally powering up DSI hosts at modeset")
    Signed-off-by: Marijn Suijten <[email protected]>
    Reviewed-by: Douglas Anderson <[email protected]>
    Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
    Reviewed-by: Martin Botka <[email protected]>
    Signed-off-by: Douglas Anderson <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/tests: Handle EDEADLK in drm_test_check_valid_clones() [+ + +]
Author: José Expósito <[email protected]>
Date:   Tue Nov 4 11:25:21 2025 +0100

    drm/tests: Handle EDEADLK in drm_test_check_valid_clones()
    
    [ Upstream commit 141d95e42884628314f5ad9394657b0b35424300 ]
    
    Fedora/CentOS/RHEL CI is reporting intermittent failures while running
    the drm_test_check_valid_clones() KUnit test.
    
    The error log can be either [1]:
    
        # drm_test_check_valid_clones: ASSERTION FAILED at
        # drivers/gpu/drm/tests/drm_atomic_state_test.c:295
        Expected ret == param->expected_result, but
            ret == -35 (0xffffffffffffffdd)
            param->expected_result == 0 (0x0)
    
    Or [2] depending on the test case:
    
        # drm_test_check_valid_clones: ASSERTION FAILED at
        # drivers/gpu/drm/tests/drm_atomic_state_test.c:295
        Expected ret == param->expected_result, but
            ret == -35 (0xffffffffffffffdd)
            param->expected_result == -22 (0xffffffffffffffea)
    
    Restart the atomic sequence when EDEADLK is returned.
    
    [1] https://s3.amazonaws.com/arr-cki-prod-trusted-artifacts/trusted-artifacts/2113057246/test_x86_64/11802139999/artifacts/jobwatch/logs/recipes/19824965/tasks/204347800/results/946112713/logs/dmesg.log
    [2] https://s3.amazonaws.com/arr-cki-prod-trusted-artifacts/trusted-artifacts/2106744297/test_aarch64/11762450907/artifacts/jobwatch/logs/recipes/19797942/tasks/204139727/results/945094561/logs/dmesg.log
    
    Fixes: 88849f24e2ab ("drm/tests: Add test for drm_atomic_helper_check_modeset()")
    Closes: https://datawarehouse.cki-project.org/issue/4004
    Reviewed-by: Maxime Ripard <[email protected]>
    Signed-off-by: José Expósito <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

drm/tests: Handle EDEADLK in set_up_atomic_state() [+ + +]
Author: José Expósito <[email protected]>
Date:   Tue Nov 4 11:25:22 2025 +0100

    drm/tests: Handle EDEADLK in set_up_atomic_state()
    
    [ Upstream commit 526aafabd756cc56401b383d6ae554af3e21dcdd ]
    
    Fedora/CentOS/RHEL CI is reporting intermittent failures while running
    the drm_validate_modeset test [1]:
    
        # drm_test_check_connector_changed_modeset: EXPECTATION FAILED at
        # drivers/gpu/drm/tests/drm_atomic_state_test.c:162
        Expected ret == 0, but
            ret == -35 (0xffffffffffffffdd)
    
    Change the set_up_atomic_state() helper function to return on error and
    restart the atomic sequence when the returned error is EDEADLK.
    
    [1] https://s3.amazonaws.com/arr-cki-prod-trusted-artifacts/trusted-artifacts/2106744096/test_x86_64/11762450343/artifacts/jobwatch/logs/recipes/19797909/tasks/204139142/results/945095586/logs/dmesg.log
    
    Fixes: 73d934d7b6e3 ("drm/tests: Add test for drm_atomic_helper_commit_modeset_disables()")
    Closes: https://datawarehouse.cki-project.org/issue/4004
    Reviewed-by: Maxime Ripard <[email protected]>
    Signed-off-by: José Expósito <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

drm/tests: hdmi: Handle drm_kunit_helper_enable_crtc_connector() returning EDEADLK [+ + +]
Author: José Expósito <[email protected]>
Date:   Tue Nov 4 11:22:35 2025 +0100

    drm/tests: hdmi: Handle drm_kunit_helper_enable_crtc_connector() returning EDEADLK
    
    [ Upstream commit fe27e709d91fb645182751b602cb88966b4a1bb6 ]
    
    Fedora/CentOS/RHEL CI is reporting intermittent failures while running
    the KUnit tests present in drm_hdmi_state_helper_test.c [1].
    
    While the specific test causing the failure change between runs, all of
    them are caused by drm_kunit_helper_enable_crtc_connector() returning
    -EDEADLK. The error trace always follow this structure:
    
        # <test name>: ASSERTION FAILED at
        # drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c:<line>
        Expected ret == 0, but
            ret == -35 (0xffffffffffffffdd)
    
    As documented, if the drm_kunit_helper_enable_crtc_connector() function
    returns -EDEADLK (-35), the entire atomic sequence must be restarted.
    
    Handle this error code for all function calls.
    
    Closes: https://datawarehouse.cki-project.org/issue/4039  [1]
    Fixes: 6a5c0ad7e08e ("drm/tests: hdmi_state_helpers: Switch to new helper")
    Reviewed-by: Maxime Ripard <[email protected]>
    Signed-off-by: José Expósito <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/xe/oa: Always set OAG_OAGLBCTXCTRL_COUNTER_RESUME [+ + +]
Author: Ashutosh Dixit <[email protected]>
Date:   Fri Dec 5 13:26:13 2025 -0800

    drm/xe/oa: Always set OAG_OAGLBCTXCTRL_COUNTER_RESUME
    
    [ Upstream commit 256edb267a9d0b5aef70e408e9fba4f930f9926e ]
    
    Reports can be written out to the OA buffer using ways other than periodic
    sampling. These include mmio trigger and context switches. To support these
    use cases, when periodic sampling is not enabled,
    OAG_OAGLBCTXCTRL_COUNTER_RESUME must be set.
    
    Fixes: 1db9a9dc90ae ("drm/xe/oa: OA stream initialization (OAG)")
    Signed-off-by: Ashutosh Dixit <[email protected]>
    Reviewed-by: Umesh Nerlige Ramappa <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    (cherry picked from commit 88d98e74adf3e20f678bb89581a5c3149fdbdeaa)
    Signed-off-by: Thomas Hellström <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/xe/oa: Limit num_syncs to prevent oversized allocations [+ + +]
Author: Shuicheng Lin <[email protected]>
Date:   Fri Dec 5 23:47:18 2025 +0000

    drm/xe/oa: Limit num_syncs to prevent oversized allocations
    
    [ Upstream commit f8dd66bfb4e184c71bd26418a00546ebe7f5c17a ]
    
    The OA open parameters did not validate num_syncs, allowing
    userspace to pass arbitrarily large values, potentially
    leading to excessive allocations.
    
    Add check to ensure that num_syncs does not exceed DRM_XE_MAX_SYNCS,
    returning -EINVAL when the limit is violated.
    
    v2: use XE_IOCTL_DBG() and drop duplicated check. (Ashutosh)
    
    Fixes: c8507a25cebd ("drm/xe/oa/uapi: Define and parse OA sync properties")
    Cc: Matthew Brost <[email protected]>
    Cc: Ashutosh Dixit <[email protected]>
    Signed-off-by: Shuicheng Lin <[email protected]>
    Reviewed-by: Ashutosh Dixit <[email protected]>
    Signed-off-by: Matthew Brost <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    (cherry picked from commit e057b2d2b8d815df3858a87dffafa2af37e5945b)
    Signed-off-by: Thomas Hellström <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/xe: Apply Wa_14020316580 in xe_gt_idle_enable_pg() [+ + +]
Author: Vinay Belgaumkar <[email protected]>
Date:   Fri Nov 28 21:25:48 2025 -0800

    drm/xe: Apply Wa_14020316580 in xe_gt_idle_enable_pg()
    
    [ Upstream commit c88a0731ed95f9705deb127a7f1927fa59aa742b ]
    
    Wa_14020316580 was getting clobbered by power gating init code
    later in the driver load sequence. Move the Wa so that
    it applies correctly.
    
    Fixes: 7cd05ef89c9d ("drm/xe/xe2hpm: Add initial set of workarounds")
    Suggested-by: Matt Roper <[email protected]>
    Signed-off-by: Vinay Belgaumkar <[email protected]>
    Reviewed-by: Riana Tauro <[email protected]>
    Reviewed-by: Matt Roper <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Matt Roper <[email protected]>
    (cherry picked from commit 8b5502145351bde87f522df082b9e41356898ba3)
    Signed-off-by: Thomas Hellström <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/xe: fix drm_gpusvm_init() arguments [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Thu Dec 4 10:46:58 2025 +0100

    drm/xe: fix drm_gpusvm_init() arguments
    
    [ Upstream commit 9acc3295813b9b846791fd3eab0a78a3144af560 ]
    
    The Xe driver fails to build when CONFIG_DRM_XE_GPUSVM is disabled
    but CONFIG_DRM_GPUSVM is turned on, due to the clash of two commits:
    
    In file included from drivers/gpu/drm/xe/xe_vm_madvise.c:8:
    drivers/gpu/drm/xe/xe_svm.h: In function 'xe_svm_init':
    include/linux/stddef.h:8:14: error: passing argument 5 of 'drm_gpusvm_init' makes integer from pointer without a cast [-Wint-conversion]
    drivers/gpu/drm/xe/xe_svm.h:217:38: note: in expansion of macro 'NULL'
      217 |                                NULL, NULL, 0, 0, 0, NULL, NULL, 0);
          |                                      ^~~~
    In file included from drivers/gpu/drm/xe/xe_bo_types.h:11,
                     from drivers/gpu/drm/xe/xe_bo.h:11,
                     from drivers/gpu/drm/xe/xe_vm_madvise.c:11:
    include/drm/drm_gpusvm.h:254:35: note: expected 'long unsigned int' but argument is of type 'void *'
      254 |                     unsigned long mm_start, unsigned long mm_range,
          |                     ~~~~~~~~~~~~~~^~~~~~~~
    In file included from drivers/gpu/drm/xe/xe_vm_madvise.c:14:
    drivers/gpu/drm/xe/xe_svm.h:216:16: error: too many arguments to function 'drm_gpusvm_init'; expected 10, have 11
      216 |         return drm_gpusvm_init(&vm->svm.gpusvm, "Xe SVM (simple)", &vm->xe->drm,
          |                ^~~~~~~~~~~~~~~
      217 |                                NULL, NULL, 0, 0, 0, NULL, NULL, 0);
          |                                                                 ~
    include/drm/drm_gpusvm.h:251:5: note: declared here
    
    Adapt the caller to the new argument list by removing the extraneous
    NULL argument.
    
    Fixes: 9e9787414882 ("drm/xe/userptr: replace xe_hmm with gpusvm")
    Fixes: 10aa5c806030 ("drm/gpusvm, drm/xe: Fix userptr to not allow device private pages")
    Signed-off-by: Arnd Bergmann <[email protected]>
    Reviewed-by: Thomas Hellström <[email protected]>
    Signed-off-by: Thomas Hellström <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    (cherry picked from commit 29bce9c8b41d5c378263a927acb9a9074d0e7a0e)
    Signed-off-by: Thomas Hellström <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/xe: Fix freq kobject leak on sysfs_create_files failure [+ + +]
Author: Shuicheng Lin <[email protected]>
Date:   Fri Nov 14 20:56:39 2025 +0000

    drm/xe: Fix freq kobject leak on sysfs_create_files failure
    
    [ Upstream commit b32045d73bb4333a2cebc5d3c005807adb03ab58 ]
    
    Ensure gt->freq is released when sysfs_create_files() fails
    in xe_gt_freq_init(). Without this, the kobject would leak.
    Add kobject_put() before returning the error.
    
    Fixes: fdc81c43f0c1 ("drm/xe: use devm_add_action_or_reset() helper")
    Signed-off-by: Shuicheng Lin <[email protected]>
    Reviewed-by: Alex Zuo <[email protected]>
    Reviewed-by: Xin Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Matt Roper <[email protected]>
    (cherry picked from commit 251be5fb4982ebb0f5a81b62d975bd770f3ad5c2)
    Signed-off-by: Thomas Hellström <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/xe: Increase TDF timeout [+ + +]
Author: Jagmeet Randhawa <[email protected]>
Date:   Fri Dec 12 05:21:46 2025 +0800

    drm/xe: Increase TDF timeout
    
    [ Upstream commit eafb6f62093f756535a7be1fc4559374a511e460 ]
    
    There are some corner cases where flushing transient
    data may take slightly longer than the 150us timeout
    we currently allow.  Update the driver to use a 300us
    timeout instead based on the latest guidance from
    the hardware team. An update to the bspec to formally
    document this is expected to arrive soon.
    
    Fixes: c01c6066e6fa ("drm/xe/device: implement transient flush")
    Signed-off-by: Jagmeet Randhawa <[email protected]>
    Reviewed-by: Jonathan Cavitt <[email protected]>
    Reviewed-by: Matt Roper <[email protected]>
    Link: https://patch.msgid.link/0201b1d6ec64d3651fcbff1ea21026efa915126a.1765487866.git.jagmeet.randhawa@intel.com
    Signed-off-by: Matt Roper <[email protected]>
    (cherry picked from commit d69d3636f5f7a84bae7cd43473b3701ad9b7d544)
    Signed-off-by: Thomas Hellström <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/xe: Limit num_syncs to prevent oversized allocations [+ + +]
Author: Shuicheng Lin <[email protected]>
Date:   Fri Dec 5 23:47:17 2025 +0000

    drm/xe: Limit num_syncs to prevent oversized allocations
    
    [ Upstream commit 8e461304009135270e9ccf2d7e2dfe29daec9b60 ]
    
    The exec and vm_bind ioctl allow userspace to specify an arbitrary
    num_syncs value. Without bounds checking, a very large num_syncs
    can force an excessively large allocation, leading to kernel warnings
    from the page allocator as below.
    
    Introduce DRM_XE_MAX_SYNCS (set to 1024) and reject any request
    exceeding this limit.
    
    "
    ------------[ cut here ]------------
    WARNING: CPU: 0 PID: 1217 at mm/page_alloc.c:5124 __alloc_frozen_pages_noprof+0x2f8/0x2180 mm/page_alloc.c:5124
    ...
    Call Trace:
     <TASK>
     alloc_pages_mpol+0xe4/0x330 mm/mempolicy.c:2416
     ___kmalloc_large_node+0xd8/0x110 mm/slub.c:4317
     __kmalloc_large_node_noprof+0x18/0xe0 mm/slub.c:4348
     __do_kmalloc_node mm/slub.c:4364 [inline]
     __kmalloc_noprof+0x3d4/0x4b0 mm/slub.c:4388
     kmalloc_noprof include/linux/slab.h:909 [inline]
     kmalloc_array_noprof include/linux/slab.h:948 [inline]
     xe_exec_ioctl+0xa47/0x1e70 drivers/gpu/drm/xe/xe_exec.c:158
     drm_ioctl_kernel+0x1f1/0x3e0 drivers/gpu/drm/drm_ioctl.c:797
     drm_ioctl+0x5e7/0xc50 drivers/gpu/drm/drm_ioctl.c:894
     xe_drm_ioctl+0x10b/0x170 drivers/gpu/drm/xe/xe_device.c:224
     vfs_ioctl fs/ioctl.c:51 [inline]
     __do_sys_ioctl fs/ioctl.c:598 [inline]
     __se_sys_ioctl fs/ioctl.c:584 [inline]
     __x64_sys_ioctl+0x18b/0x210 fs/ioctl.c:584
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xbb/0x380 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    ...
    "
    
    v2: Add "Reported-by" and Cc stable kernels.
    v3: Change XE_MAX_SYNCS from 64 to 1024. (Matt & Ashutosh)
    v4: s/XE_MAX_SYNCS/DRM_XE_MAX_SYNCS/ (Matt)
    v5: Do the check at the top of the exec func. (Matt)
    
    Fixes: dd08ebf6c352 ("drm/xe: Introduce a new DRM driver for Intel GPUs")
    Reported-by: Koen Koning <[email protected]>
    Reported-by: Peter Senna Tschudin <[email protected]>
    Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/6450
    Cc: <[email protected]> # v6.12+
    Cc: Matthew Brost <[email protected]>
    Cc: Michal Mrozek <[email protected]>
    Cc: Carl Zhang <[email protected]>
    Cc: José Roberto de Souza <[email protected]>
    Cc: Lionel Landwerlin <[email protected]>
    Cc: Ivan Briano <[email protected]>
    Cc: Thomas Hellström <[email protected]>
    Cc: Ashutosh Dixit <[email protected]>
    Signed-off-by: Shuicheng Lin <[email protected]>
    Reviewed-by: Matthew Brost <[email protected]>
    Signed-off-by: Matthew Brost <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    (cherry picked from commit b07bac9bd708ec468cd1b8a5fe70ae2ac9b0a11c)
    Signed-off-by: Thomas Hellström <[email protected]>
    Stable-dep-of: f8dd66bfb4e1 ("drm/xe/oa: Limit num_syncs to prevent oversized allocations")
    Signed-off-by: Sasha Levin <[email protected]>

drm/xe: Restore engine registers before restarting schedulers after GT reset [+ + +]
Author: Jan Maslak <[email protected]>
Date:   Wed Dec 10 15:56:18 2025 +0100

    drm/xe: Restore engine registers before restarting schedulers after GT reset
    
    [ Upstream commit eed5b815fa49c17d513202f54e980eb91955d3ed ]
    
    During GT reset recovery in do_gt_restart(), xe_uc_start() was called
    before xe_reg_sr_apply_mmio() restored engine-specific registers. This
    created a race window where the scheduler could run jobs before hardware
    state was fully restored.
    
    This caused failures in eudebug tests (xe_exec_sip_eudebug@breakpoint-
    waitsip-*) where TD_CTL register (containing TD_CTL_GLOBAL_DEBUG_ENABLE)
    wasn't restored before jobs started executing. Breakpoints would fail to
    trigger SIP entry because the debug enable bit wasn't set yet.
    
    Fix by moving xe_uc_start() after all MMIO register restoration,
    including engine registers and CCS mode configuration, ensuring all
    hardware state is fully restored before any jobs can be scheduled.
    
    Fixes: dd08ebf6c352 ("drm/xe: Introduce a new DRM driver for Intel GPUs")
    Signed-off-by: Jan Maslak <[email protected]>
    Reviewed-by: Jonathan Cavitt <[email protected]>
    Reviewed-by: Matthew Brost <[email protected]>
    Signed-off-by: Matthew Brost <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    (cherry picked from commit 825aed0328588b2837636c1c5a0c48795d724617)
    Signed-off-by: Thomas Hellström <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dt-bindings: clock: mmcc-sdm660: Add missing MDSS reset [+ + +]
Author: Alexey Minnekhanov <[email protected]>
Date:   Sun Nov 16 04:12:33 2025 +0300

    dt-bindings: clock: mmcc-sdm660: Add missing MDSS reset
    
    commit c57210bc15371caa06a5d4040e7d8aaeed4cb661 upstream.
    
    Add definition for display subsystem reset control, so display
    driver can reset display controller properly, clearing any
    configuration left there by bootloader. Since 6.17 after
    PM domains rework it became necessary for display to function.
    
    Fixes: 0e789b491ba0 ("pmdomain: core: Leave powered-on genpds on until sync_state")
    Cc: [email protected] # 6.17
    Signed-off-by: Alexey Minnekhanov <[email protected]>
    Acked-by: Krzysztof Kozlowski <[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]>

dt-bindings: mmc: sdhci-of-aspeed: Switch ref to sdhci-common.yaml [+ + +]
Author: Andrew Jeffery <[email protected]>
Date:   Thu Dec 11 17:45:48 2025 +0900

    dt-bindings: mmc: sdhci-of-aspeed: Switch ref to sdhci-common.yaml
    
    commit ed724ea1b82a800af4704311cb89e5ef1b4ea7ac upstream.
    
    Enable use of common SDHCI-related properties such as sdhci-caps-mask as
    found in the AST2600 EVB DTS.
    
    Cc: [email protected] # v6.2+
    Signed-off-by: Andrew Jeffery <[email protected]>
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dt-bindings: PCI: qcom,pcie-sc7280: Add missing required power-domains and resets [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Thu Oct 30 09:50:45 2025 +0100

    dt-bindings: PCI: qcom,pcie-sc7280: Add missing required power-domains and resets
    
    commit ef99c2efeacac7758cc8c2d00e3200100a4da16c upstream.
    
    Commit 756485bfbb85 ("dt-bindings: PCI: qcom,pcie-sc7280: Move SC7280 to
    dedicated schema") move the device schema to separate file, but it
    missed a "if:not:...then:" clause in the original binding which was
    requiring power-domains and resets for this particular chip.
    
    Fixes: 756485bfbb85 ("dt-bindings: PCI: qcom,pcie-sc7280: Move SC7280 to dedicated schema")
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Reviewed-by: Rob Herring (Arm) <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/20251030-dt-bindings-pci-qcom-fixes-power-domains-v2-2-28c1f11599fe@linaro.org
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dt-bindings: PCI: qcom,pcie-sc8280xp: Add missing required power-domains and resets [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Thu Oct 30 09:50:46 2025 +0100

    dt-bindings: PCI: qcom,pcie-sc8280xp: Add missing required power-domains and resets
    
    commit ea551601404d286813aef6819ddf0bf1d7d69a24 upstream.
    
    Commit c007a5505504 ("dt-bindings: PCI: qcom,pcie-sc8280xp: Move
    SC8280XP to dedicated schema") move the device schema to separate file,
    but it missed a "if:not:...then:" clause in the original binding which
    was requiring power-domains and resets for this particular chip.
    
    Fixes: c007a5505504 ("dt-bindings: PCI: qcom,pcie-sc8280xp: Move SC8280XP to dedicated schema")
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Reviewed-by: Rob Herring (Arm) <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/20251030-dt-bindings-pci-qcom-fixes-power-domains-v2-3-28c1f11599fe@linaro.org
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dt-bindings: PCI: qcom,pcie-sm8150: Add missing required power-domains and resets [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Thu Oct 30 09:50:47 2025 +0100

    dt-bindings: PCI: qcom,pcie-sm8150: Add missing required power-domains and resets
    
    commit 31cb432b62fb796e0c1084542ba39311d2f716d5 upstream.
    
    Commit 51bc04d5b49d ("dt-bindings: PCI: qcom,pcie-sm8150: Move SM8150 to
    dedicated schema") move the device schema to separate file, but it
    missed a "if:not:...then:" clause in the original binding which was
    requiring power-domains and resets for this particular chip.
    
    Fixes: 51bc04d5b49d ("dt-bindings: PCI: qcom,pcie-sm8150: Move SM8150 to dedicated schema")
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Reviewed-by: Rob Herring (Arm) <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/20251030-dt-bindings-pci-qcom-fixes-power-domains-v2-4-28c1f11599fe@linaro.org
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dt-bindings: PCI: qcom,pcie-sm8250: Add missing required power-domains and resets [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Thu Oct 30 09:50:48 2025 +0100

    dt-bindings: PCI: qcom,pcie-sm8250: Add missing required power-domains and resets
    
    commit 2620c6bcd8c141b79ff2afe95dc814dfab644f63 upstream.
    
    Commit 4891b66185c1 ("dt-bindings: PCI: qcom,pcie-sm8250: Move SM8250 to
    dedicated schema") move the device schema to separate file, but it
    missed a "if:not:...then:" clause in the original binding which was
    requiring power-domains and resets for this particular chip.
    
    Fixes: 4891b66185c1 ("dt-bindings: PCI: qcom,pcie-sm8250: Move SM8250 to dedicated schema")
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Reviewed-by: Rob Herring (Arm) <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/20251030-dt-bindings-pci-qcom-fixes-power-domains-v2-5-28c1f11599fe@linaro.org
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dt-bindings: PCI: qcom,pcie-sm8350: Add missing required power-domains and resets [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Thu Oct 30 09:50:49 2025 +0100

    dt-bindings: PCI: qcom,pcie-sm8350: Add missing required power-domains and resets
    
    commit 012ba0d5f02e1f192eda263b5f9f826e47d607bb upstream.
    
    Commit 2278b8b54773 ("dt-bindings: PCI: qcom,pcie-sm8350: Move SM8350 to
    dedicated schema") move the device schema to separate file, but it
    missed a "if:not:...then:" clause in the original binding which was
    requiring power-domains and resets for this particular chip.
    
    Fixes: 2278b8b54773 ("dt-bindings: PCI: qcom,pcie-sm8350: Move SM8350 to dedicated schema")
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Reviewed-by: Rob Herring (Arm) <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/20251030-dt-bindings-pci-qcom-fixes-power-domains-v2-6-28c1f11599fe@linaro.org
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dt-bindings: PCI: qcom,pcie-sm8450: Add missing required power-domains and resets [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Thu Oct 30 09:50:50 2025 +0100

    dt-bindings: PCI: qcom,pcie-sm8450: Add missing required power-domains and resets
    
    commit 667facc4000c49a7c280097ef6638f133bcb1e59 upstream.
    
    Commit 88c9b3af4e31 ("dt-bindings: PCI: qcom,pcie-sm8450: Move SM8450 to
    dedicated schema") move the device schema to separate file, but it
    missed a "if:not:...then:" clause in the original binding which was
    requiring power-domains and resets for this particular chip.
    
    Fixes: 88c9b3af4e31 ("dt-bindings: PCI: qcom,pcie-sm8450: Move SM8450 to dedicated schema")
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Reviewed-by: Rob Herring (Arm) <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/20251030-dt-bindings-pci-qcom-fixes-power-domains-v2-7-28c1f11599fe@linaro.org
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dt-bindings: PCI: qcom,pcie-sm8550: Add missing required power-domains and resets [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Thu Oct 30 09:50:51 2025 +0100

    dt-bindings: PCI: qcom,pcie-sm8550: Add missing required power-domains and resets
    
    commit e60c6f34b9f3a83f96006243c0ef96c134520257 upstream.
    
    Commit b8d3404058a6 ("dt-bindings: PCI: qcom,pcie-sm8550: Move SM8550 to
    dedicated schema") move the device schema to separate file, but it
    missed a "if:not:...then:" clause in the original binding which was
    requiring power-domains and resets for this particular chip.
    
    Fixes: b8d3404058a6 ("dt-bindings: PCI: qcom,pcie-sm8550: Move SM8550 to dedicated schema")
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Reviewed-by: Rob Herring (Arm) <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/20251030-dt-bindings-pci-qcom-fixes-power-domains-v2-8-28c1f11599fe@linaro.org
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dt-bindings: slimbus: fix warning from example [+ + +]
Author: Srinivas Kandagatla <[email protected]>
Date:   Fri Nov 14 11:05:05 2025 +0000

    dt-bindings: slimbus: fix warning from example
    
    commit 4d4e746aa9f0f07261dcb41e4f51edb98723dcaa upstream.
    
    Fix below warnings generated dt_bindings_check for examples in the
    bindings.
    
    Documentation/devicetree/bindings/slimbus/slimbus.example.dtb:
    slim@28080000 (qcom,slim-ngd-v1.5.0): 'audio-codec@1,0' does not match
    any of the regexes: '^pinctrl-[0-9]+$', '^slim@[0-9a-f]+$'
            from schema $id:
    http://devicetree.org/schemas/slimbus/qcom,slim-ngd.yaml#
    Documentation/devicetree/bindings/slimbus/slimbus.example.dtb:
    slim@28080000 (qcom,slim-ngd-v1.5.0): #address-cells: 1 was expected
            from schema $id:
    http://devicetree.org/schemas/slimbus/qcom,slim-ngd.yaml#
    Documentation/devicetree/bindings/slimbus/slimbus.example.dtb:
    slim@28080000 (qcom,slim-ngd-v1.5.0): 'dmas' is a required property
            from schema $id:
    http://devicetree.org/schemas/slimbus/qcom,slim-ngd.yaml#
    Documentation/devicetree/bindings/slimbus/slimbus.example.dtb:
    slim@28080000 (qcom,slim-ngd-v1.5.0): 'dma-names' is a required
    property
            from schema $id:
    http://devicetree.org/schemas/slimbus/qcom,slim-ngd.yaml#
    
    Fixes: 7cbba32a2d62 ("slimbus: qcom: remove unused qcom controller driver")
    Cc: stable <[email protected]>
    Reported-by: Rob Herring <[email protected]>
    Signed-off-by: Srinivas Kandagatla <[email protected]>
    Acked-by: Rob Herring (Arm) <[email protected]>
    Signed-off-by: Srinivas Kandagatla <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
efi: Add missing static initializer for efi_mm::cpus_allowed_lock [+ + +]
Author: Ard Biesheuvel <[email protected]>
Date:   Wed Oct 15 22:56:36 2025 +0200

    efi: Add missing static initializer for efi_mm::cpus_allowed_lock
    
    commit 40374d308e4e456048d83991e937f13fc8bda8bf upstream.
    
    Initialize the cpus_allowed_lock struct member of efi_mm.
    
    Cc: [email protected]
    Signed-off-by: Ard Biesheuvel <[email protected]>
    Acked-by: Catalin Marinas <[email protected]>
    Signed-off-by: Catalin Marinas <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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]>

exfat: zero out post-EOF page cache on file extension [+ + +]
Author: Yuezhang Mo <[email protected]>
Date:   Mon Oct 27 17:03:41 2025 +0800

    exfat: zero out post-EOF page cache on file extension
    
    [ Upstream commit 4e163c39dd4e70fcdce948b8774d96e0482b4a11 ]
    
    xfstests generic/363 was failing due to unzeroed post-EOF page
    cache that allowed mmap writes beyond EOF to become visible
    after file extension.
    
    For example, in following xfs_io sequence, 0x22 should not be
    written to the file but would become visible after the extension:
    
      xfs_io -f -t -c "pwrite -S 0x11 0 8" \
        -c "mmap 0 4096" \
        -c "mwrite -S 0x22 32 32" \
        -c "munmap" \
        -c "pwrite -S 0x33 512 32" \
        $testfile
    
    This violates the expected behavior where writes beyond EOF via
    mmap should not persist after the file is extended. Instead, the
    extended region should contain zeros.
    
    Fix this by using truncate_pagecache() to truncate the page cache
    after the current EOF when extending the file.
    
    Signed-off-by: Yuezhang Mo <[email protected]>
    Signed-off-by: Namjae Jeon <[email protected]>
    Signed-off-by: Sasha Levin <[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: check if mount_opts is NUL-terminated in ext4_ioctl_set_tune_sb() [+ + +]
Author: Fedor Pchelkin <[email protected]>
Date:   Sat Nov 1 19:04:29 2025 +0300

    ext4: check if mount_opts is NUL-terminated in ext4_ioctl_set_tune_sb()
    
    commit 3db63d2c2d1d1e78615dd742568c5a2d55291ad1 upstream.
    
    params.mount_opts may come as potentially non-NUL-term string.  Userspace
    is expected to pass a NUL-term string.  Add an extra check to ensure this
    holds true.  Note that further code utilizes strscpy_pad() so this is just
    for proper informing the user of incorrect data being provided.
    
    Found by Linux Verification Center (linuxtesting.org).
    
    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]>
    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: 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:   Sat Nov 1 19:04:28 2025 +0300

    ext4: fix string copying in parse_apply_sb_mount_options()
    
    commit ee5a977b4e771cc181f39d504426dbd31ed701cc upstream.
    
    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]>
    Signed-off-by: Greg Kroah-Hartman <[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: ensure node page reads complete before f2fs_put_super() finishes [+ + +]
Author: Jan Prusakowski <[email protected]>
Date:   Mon Oct 6 10:46:15 2025 +0200

    f2fs: ensure node page reads complete before f2fs_put_super() finishes
    
    commit 297baa4aa263ff8f5b3d246ee16a660d76aa82c4 upstream.
    
    Xfstests generic/335, generic/336 sometimes crash with the following message:
    
    F2FS-fs (dm-0): detect filesystem reference count leak during umount, type: 9, count: 1
    ------------[ cut here ]------------
    kernel BUG at fs/f2fs/super.c:1939!
    Oops: invalid opcode: 0000 [#1] SMP NOPTI
    CPU: 1 UID: 0 PID: 609351 Comm: umount Tainted: G        W           6.17.0-rc5-xfstests-g9dd1835ecda5 #1 PREEMPT(none)
    Tainted: [W]=WARN
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    RIP: 0010:f2fs_put_super+0x3b3/0x3c0
    Call Trace:
     <TASK>
     generic_shutdown_super+0x7e/0x190
     kill_block_super+0x1a/0x40
     kill_f2fs_super+0x9d/0x190
     deactivate_locked_super+0x30/0xb0
     cleanup_mnt+0xba/0x150
     task_work_run+0x5c/0xa0
     exit_to_user_mode_loop+0xb7/0xc0
     do_syscall_64+0x1ae/0x1c0
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
     </TASK>
    ---[ end trace 0000000000000000 ]---
    
    It appears that sometimes it is possible that f2fs_put_super() is called before
    all node page reads are completed.
    Adding a call to f2fs_wait_on_all_pages() for F2FS_RD_NODE fixes the problem.
    
    Cc: [email protected]
    Fixes: 20872584b8c0b ("f2fs: fix to drop all dirty meta/node pages during umount()")
    Signed-off-by: Jan Prusakowski <[email protected]>
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: fix age extent cache insertion skip on counter overflow [+ + +]
Author: Xiaole He <[email protected]>
Date:   Mon Oct 27 17:23:41 2025 +0800

    f2fs: fix age extent cache insertion skip on counter overflow
    
    commit 27bf6a637b7613fc85fa6af468b7d612d78cd5c0 upstream.
    
    The age extent cache uses last_blocks (derived from
    allocated_data_blocks) to determine data age. However, there's a
    conflict between the deletion
    marker (last_blocks=0) and legitimate last_blocks=0 cases when
    allocated_data_blocks overflows to 0 after reaching ULLONG_MAX.
    
    In this case, valid extents are incorrectly skipped due to the
    "if (!tei->last_blocks)" check in __update_extent_tree_range().
    
    This patch fixes the issue by:
    1. Reserving ULLONG_MAX as an invalid/deletion marker
    2. Limiting allocated_data_blocks to range [0, ULLONG_MAX-1]
    3. Using F2FS_EXTENT_AGE_INVALID for deletion scenarios
    4. Adjusting overflow age calculation from ULLONG_MAX to (ULLONG_MAX-1)
    
    Reproducer (using a patched kernel with allocated_data_blocks
    initialized to ULLONG_MAX - 3 for quick testing):
    
    Step 1: Mount and check initial state
      # dd if=/dev/zero of=/tmp/test.img bs=1M count=100
      # mkfs.f2fs -f /tmp/test.img
      # mkdir -p /mnt/f2fs_test
      # mount -t f2fs -o loop,age_extent_cache /tmp/test.img /mnt/f2fs_test
      # cat /sys/kernel/debug/f2fs/status | grep -A 4 "Block Age"
      Allocated Data Blocks: 18446744073709551612 # ULLONG_MAX - 3
      Inner Struct Count: tree: 1(0), node: 0
    
    Step 2: Create files and write data to trigger overflow
      # touch /mnt/f2fs_test/{1,2,3,4}.txt; sync
      # cat /sys/kernel/debug/f2fs/status | grep -A 4 "Block Age"
      Allocated Data Blocks: 18446744073709551613 # ULLONG_MAX - 2
      Inner Struct Count: tree: 5(0), node: 1
    
      # dd if=/dev/urandom of=/mnt/f2fs_test/1.txt bs=4K count=1; sync
      # cat /sys/kernel/debug/f2fs/status | grep -A 4 "Block Age"
      Allocated Data Blocks: 18446744073709551614 # ULLONG_MAX - 1
      Inner Struct Count: tree: 5(0), node: 2
    
      # dd if=/dev/urandom of=/mnt/f2fs_test/2.txt bs=4K count=1; sync
      # cat /sys/kernel/debug/f2fs/status | grep -A 4 "Block Age"
      Allocated Data Blocks: 18446744073709551615 # ULLONG_MAX
      Inner Struct Count: tree: 5(0), node: 3
    
      # dd if=/dev/urandom of=/mnt/f2fs_test/3.txt bs=4K count=1; sync
      # cat /sys/kernel/debug/f2fs/status | grep -A 4 "Block Age"
      Allocated Data Blocks: 0 # Counter overflowed!
      Inner Struct Count: tree: 5(0), node: 4
    
    Step 3: Trigger the bug - next write should create node but gets skipped
      # dd if=/dev/urandom of=/mnt/f2fs_test/4.txt bs=4K count=1; sync
      # cat /sys/kernel/debug/f2fs/status | grep -A 4 "Block Age"
      Allocated Data Blocks: 1
      Inner Struct Count: tree: 5(0), node: 4
    
      Expected: node: 5 (new extent node for 4.txt)
      Actual: node: 4 (extent insertion was incorrectly skipped due to
      last_blocks = allocated_data_blocks = 0 in __get_new_block_age)
    
    After this fix, the extent node is correctly inserted and node count
    becomes 5 as expected.
    
    Fixes: 71644dff4811 ("f2fs: add block_age-based extent cache")
    Cc: [email protected]
    Signed-off-by: Xiaole He <[email protected]>
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[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 potential deadlock [+ + +]
Author: Chao Yu <[email protected]>
Date:   Tue Oct 14 19:47:35 2025 +0800

    f2fs: fix to avoid potential deadlock
    
    commit ca8b201f28547e28343a6f00a6e91fa8c09572fe upstream.
    
    As Jiaming Zhang and syzbot reported, there is potential deadlock in
    f2fs as below:
    
    Chain exists of:
      &sbi->cp_rwsem --> fs_reclaim --> sb_internal#2
    
     Possible unsafe locking scenario:
    
           CPU0                    CPU1
           ----                    ----
      rlock(sb_internal#2);
                                   lock(fs_reclaim);
                                   lock(sb_internal#2);
      rlock(&sbi->cp_rwsem);
    
     *** DEADLOCK ***
    
    3 locks held by kswapd0/73:
     #0: ffffffff8e247a40 (fs_reclaim){+.+.}-{0:0}, at: balance_pgdat mm/vmscan.c:7015 [inline]
     #0: ffffffff8e247a40 (fs_reclaim){+.+.}-{0:0}, at: kswapd+0x951/0x2800 mm/vmscan.c:7389
     #1: ffff8880118400e0 (&type->s_umount_key#50){.+.+}-{4:4}, at: super_trylock_shared fs/super.c:562 [inline]
     #1: ffff8880118400e0 (&type->s_umount_key#50){.+.+}-{4:4}, at: super_cache_scan+0x91/0x4b0 fs/super.c:197
     #2: ffff888011840610 (sb_internal#2){.+.+}-{0:0}, at: f2fs_evict_inode+0x8d9/0x1b60 fs/f2fs/inode.c:890
    
    stack backtrace:
    CPU: 0 UID: 0 PID: 73 Comm: kswapd0 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
    Call Trace:
     <TASK>
     dump_stack_lvl+0x189/0x250 lib/dump_stack.c:120
     print_circular_bug+0x2ee/0x310 kernel/locking/lockdep.c:2043
     check_noncircular+0x134/0x160 kernel/locking/lockdep.c:2175
     check_prev_add kernel/locking/lockdep.c:3165 [inline]
     check_prevs_add kernel/locking/lockdep.c:3284 [inline]
     validate_chain+0xb9b/0x2140 kernel/locking/lockdep.c:3908
     __lock_acquire+0xab9/0xd20 kernel/locking/lockdep.c:5237
     lock_acquire+0x120/0x360 kernel/locking/lockdep.c:5868
     down_read+0x46/0x2e0 kernel/locking/rwsem.c:1537
     f2fs_down_read fs/f2fs/f2fs.h:2278 [inline]
     f2fs_lock_op fs/f2fs/f2fs.h:2357 [inline]
     f2fs_do_truncate_blocks+0x21c/0x10c0 fs/f2fs/file.c:791
     f2fs_truncate_blocks+0x10a/0x300 fs/f2fs/file.c:867
     f2fs_truncate+0x489/0x7c0 fs/f2fs/file.c:925
     f2fs_evict_inode+0x9f2/0x1b60 fs/f2fs/inode.c:897
     evict+0x504/0x9c0 fs/inode.c:810
     f2fs_evict_inode+0x1dc/0x1b60 fs/f2fs/inode.c:853
     evict+0x504/0x9c0 fs/inode.c:810
     dispose_list fs/inode.c:852 [inline]
     prune_icache_sb+0x21b/0x2c0 fs/inode.c:1000
     super_cache_scan+0x39b/0x4b0 fs/super.c:224
     do_shrink_slab+0x6ef/0x1110 mm/shrinker.c:437
     shrink_slab_memcg mm/shrinker.c:550 [inline]
     shrink_slab+0x7ef/0x10d0 mm/shrinker.c:628
     shrink_one+0x28a/0x7c0 mm/vmscan.c:4955
     shrink_many mm/vmscan.c:5016 [inline]
     lru_gen_shrink_node mm/vmscan.c:5094 [inline]
     shrink_node+0x315d/0x3780 mm/vmscan.c:6081
     kswapd_shrink_node mm/vmscan.c:6941 [inline]
     balance_pgdat mm/vmscan.c:7124 [inline]
     kswapd+0x147c/0x2800 mm/vmscan.c:7389
     kthread+0x70e/0x8a0 kernel/kthread.c:463
     ret_from_fork+0x4bc/0x870 arch/x86/kernel/process.c:158
     ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:245
     </TASK>
    
    The root cause is deadlock among four locks as below:
    
    kswapd
    - fs_reclaim                            --- Lock A
     - shrink_one
      - evict
       - f2fs_evict_inode
        - sb_start_intwrite                 --- Lock B
    
    - iput
     - evict
      - f2fs_evict_inode
       - sb_start_intwrite                  --- Lock B
       - f2fs_truncate
        - f2fs_truncate_blocks
         - f2fs_do_truncate_blocks
          - f2fs_lock_op                    --- Lock C
    
    ioctl
    - f2fs_ioc_commit_atomic_write
     - f2fs_lock_op                         --- Lock C
      - __f2fs_commit_atomic_write
       - __replace_atomic_write_block
        - f2fs_get_dnode_of_data
         - __get_node_folio
          - f2fs_check_nid_range
           - f2fs_handle_error
            - f2fs_record_errors
             - f2fs_down_write              --- Lock D
    
    open
    - do_open
     - do_truncate
      - security_inode_need_killpriv
       - f2fs_getxattr
        - lookup_all_xattrs
         - f2fs_handle_error
          - f2fs_record_errors
           - f2fs_down_write                --- Lock D
            - f2fs_commit_super
             - read_mapping_folio
              - filemap_alloc_folio_noprof
               - prepare_alloc_pages
                - fs_reclaim_acquire        --- Lock A
    
    In order to avoid such deadlock, we need to avoid grabbing sb_lock in
    f2fs_handle_error(), so, let's use asynchronous method instead:
    - remove f2fs_handle_error() implementation
    - rename f2fs_handle_error_async() to f2fs_handle_error()
    - spread f2fs_handle_error()
    
    Fixes: 95fa90c9e5a7 ("f2fs: support recording errors into superblock")
    Cc: [email protected]
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/linux-f2fs-devel/[email protected]
    Reported-by: Jiaming Zhang <[email protected]>
    Closes: https://lore.kernel.org/lkml/CANypQFa-Gy9sD-N35o3PC+FystOWkNuN8pv6S75HLT0ga-Tzgw@mail.gmail.com
    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:   Wed Oct 22 11:06:36 2025 +0800

    f2fs: fix to avoid updating compression context during writeback
    
    commit 10b591e7fb7cdc8c1e53e9c000dc0ef7069aaa76 upstream.
    
    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]>
    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:   Mon Oct 20 10:42:12 2025 +0800

    f2fs: fix to avoid updating zero-sized extent in extent cache
    
    commit 7c37c79510329cd951a4dedf3f7bf7e2b18dccec upstream.
    
    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]>
    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:   Wed Nov 5 14:50:23 2025 +0800

    f2fs: fix to detect recoverable inode during dryrun of find_fsync_dnodes()
    
    commit 68d05693f8c031257a0822464366e1c2a239a512 upstream.
    
    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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: fix to not account invalid blocks in get_left_section_blocks() [+ + +]
Author: Chao Yu <[email protected]>
Date:   Fri Nov 28 17:25:07 2025 +0800

    f2fs: fix to not account invalid blocks in get_left_section_blocks()
    
    commit 37345eae9deaa2e4f372eeb98f6594cd0ee0916e upstream.
    
    w/ LFS mode, in get_left_section_blocks(), we should not account the
    blocks which were used before and now are invalided, otherwise those
    blocks will be counted as freed one in has_curseg_enough_space(), result
    in missing to trigger GC in time.
    
    Cc: [email protected]
    Fixes: 249ad438e1d9 ("f2fs: add a method for calculating the remaining blocks in the current segment in LFS mode.")
    Fixes: bf34c93d2645 ("f2fs: check curseg space before foreground GC")
    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 propagate error from f2fs_enable_checkpoint() [+ + +]
Author: Chao Yu <[email protected]>
Date:   Mon Oct 27 14:35:33 2025 +0800

    f2fs: fix to propagate error from f2fs_enable_checkpoint()
    
    commit be112e7449a6e1b54aa9feac618825d154b3a5c7 upstream.
    
    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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: fix uninitialized one_time_gc in victim_sel_policy [+ + +]
Author: Xiaole He <[email protected]>
Date:   Wed Oct 29 13:18:07 2025 +0800

    f2fs: fix uninitialized one_time_gc in victim_sel_policy
    
    commit 392711ef18bff524a873b9c239a73148c5432262 upstream.
    
    The one_time_gc field in struct victim_sel_policy is conditionally
    initialized but unconditionally read, leading to undefined behavior
    that triggers UBSAN warnings.
    
    In f2fs_get_victim() at fs/f2fs/gc.c:774, the victim_sel_policy
    structure is declared without initialization:
    
        struct victim_sel_policy p;
    
    The field p.one_time_gc is only assigned when the 'one_time' parameter
    is true (line 789):
    
        if (one_time) {
            p.one_time_gc = one_time;
            ...
        }
    
    However, this field is unconditionally read in subsequent get_gc_cost()
    at line 395:
    
        if (p->one_time_gc && (valid_thresh_ratio < 100) && ...)
    
    When one_time is false, p.one_time_gc contains uninitialized stack
    memory. Hence p.one_time_gc is an invalid bool value.
    
    UBSAN detects this invalid bool value:
    
        UBSAN: invalid-load in fs/f2fs/gc.c:395:7
        load of value 77 is not a valid value for type '_Bool'
        CPU: 3 UID: 0 PID: 1297 Comm: f2fs_gc-252:16 Not tainted 6.18.0-rc3
        #5 PREEMPT(voluntary)
        Hardware name: OpenStack Foundation OpenStack Nova,
        BIOS 1.13.0-1ubuntu1.1 04/01/2014
        Call Trace:
         <TASK>
         dump_stack_lvl+0x70/0x90
         dump_stack+0x14/0x20
         __ubsan_handle_load_invalid_value+0xb3/0xf0
         ? dl_server_update+0x2e/0x40
         ? update_curr+0x147/0x170
         f2fs_get_victim.cold+0x66/0x134 [f2fs]
         ? sched_balance_newidle+0x2ca/0x470
         ? finish_task_switch.isra.0+0x8d/0x2a0
         f2fs_gc+0x2ba/0x8e0 [f2fs]
         ? _raw_spin_unlock_irqrestore+0x12/0x40
         ? __timer_delete_sync+0x80/0xe0
         ? timer_delete_sync+0x14/0x20
         ? schedule_timeout+0x82/0x100
         gc_thread_func+0x38b/0x860 [f2fs]
         ? gc_thread_func+0x38b/0x860 [f2fs]
         ? __pfx_autoremove_wake_function+0x10/0x10
         kthread+0x10b/0x220
         ? __pfx_gc_thread_func+0x10/0x10 [f2fs]
         ? _raw_spin_unlock_irq+0x12/0x40
         ? __pfx_kthread+0x10/0x10
         ret_from_fork+0x11a/0x160
         ? __pfx_kthread+0x10/0x10
         ret_from_fork_asm+0x1a/0x30
         </TASK>
    
    This issue is reliably reproducible with the following steps on a
    100GB SSD /dev/vdb:
    
        mkfs.f2fs -f /dev/vdb
        mount /dev/vdb /mnt/f2fs_test
        fio --name=gc --directory=/mnt/f2fs_test --rw=randwrite \
            --bs=4k --size=8G --numjobs=12 --fsync=4 --runtime=10 \
            --time_based
        echo 1 > /sys/fs/f2fs/vdb/gc_urgent
    
    The uninitialized value causes incorrect GC victim selection, leading
    to unpredictable garbage collection behavior.
    
    Fix by zero-initializing the entire victim_sel_policy structure to
    ensure all fields have defined values.
    
    Fixes: e791d00bd06c ("f2fs: add valid block ratio not to do excessive GC for one time GC")
    Cc: [email protected]
    Signed-off-by: Xiaole He <[email protected]>
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[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: use global inline_xattr_slab instead of per-sb slab cache [+ + +]
Author: Chao Yu <[email protected]>
Date:   Tue Oct 21 11:48:56 2025 +0800

    f2fs: use global inline_xattr_slab instead of per-sb slab cache
    
    commit 1f27ef42bb0b7c0740c5616ec577ec188b8a1d05 upstream.
    
    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]>
    Signed-off-by: Greg Kroah-Hartman <[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]>

 
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/ntfs3: check for shutdown in fsync [+ + +]
Author: Konstantin Komarov <[email protected]>
Date:   Thu Nov 6 16:17:19 2025 +0300

    fs/ntfs3: check for shutdown in fsync
    
    [ Upstream commit 1b2ae190ea43bebb8c73d21f076addc8a8c71849 ]
    
    Ensure fsync() returns -EIO when the ntfs3 filesystem is in forced
    shutdown, instead of silently succeeding via generic_file_fsync().
    
    Signed-off-by: Konstantin Komarov <[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: 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: PM: Fix reverse check in filesystems_freeze_callback() [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Tue Dec 2 19:27:29 2025 +0100

    fs: PM: Fix reverse check in filesystems_freeze_callback()
    
    commit 222047f68e8565c558728f792f6fef152a1d4d51 upstream.
    
    The freeze_all_ptr check in filesystems_freeze_callback() introduced by
    commit a3f8f8662771 ("power: always freeze efivarfs") is reverse which
    quite confusingly causes all file systems to be frozen when
    filesystem_freeze_enabled is false.
    
    On my systems it causes the WARN_ON_ONCE() in __set_task_frozen() to
    trigger, most likely due to an attempt to freeze a file system that is
    not ready for that.
    
    Add a logical negation to the check in question to reverse it as
    appropriate.
    
    Fixes: a3f8f8662771 ("power: always freeze efivarfs")
    Cc: 6.18+ <[email protected]> # 6.18+
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Christian Brauner <[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]>

 
functionfs: fix the open/removal races [+ + +]
Author: Al Viro <[email protected]>
Date:   Fri Nov 14 02:18:22 2025 -0500

    functionfs: fix the open/removal races
    
    [ Upstream commit e5bf5ee266633cb18fff6f98f0b7d59a62819eee ]
    
    ffs_epfile_open() can race with removal, ending up with file->private_data
    pointing to freed object.
    
    There is a total count of opened files on functionfs (both ep0 and
    dynamic ones) and when it hits zero, dynamic files get removed.
    Unfortunately, that removal can happen while another thread is
    in ffs_epfile_open(), but has not incremented the count yet.
    In that case open will succeed, leaving us with UAF on any subsequent
    read() or write().
    
    The root cause is that ffs->opened is misused; atomic_dec_and_test() vs.
    atomic_add_return() is not a good idea, when object remains visible all
    along.
    
    To untangle that
            * serialize openers on ffs->mutex (both for ep0 and for dynamic files)
            * have dynamic ones use atomic_inc_not_zero() and fail if we had
    zero ->opened; in that case the file we are opening is doomed.
            * have the inodes of dynamic files marked on removal (from the
    callback of simple_recursive_removal()) - clear ->i_private there.
            * have open of dynamic ones verify they hadn't been already removed,
    along with checking that state is FFS_ACTIVE.
    
    Reviewed-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Al Viro <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
fuse: Always flush the page cache before FOPEN_DIRECT_IO write [+ + +]
Author: Bernd Schubert <[email protected]>
Date:   Thu Oct 23 00:21:18 2025 +0200

    fuse: Always flush the page cache before FOPEN_DIRECT_IO write
    
    [ Upstream commit 1ce120dcefc056ce8af2486cebbb77a458aad4c3 ]
    
    This was done as condition on direct_io_allow_mmap, but I believe
    this is not right, as a file might be open two times - once with
    write-back enabled another time with FOPEN_DIRECT_IO.
    
    Signed-off-by: Bernd Schubert <[email protected]>
    Signed-off-by: Miklos Szeredi <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

fuse: fix io-uring list corruption for terminated non-committed requests [+ + +]
Author: Joanne Koong <[email protected]>
Date:   Tue Nov 25 10:13:47 2025 -0800

    fuse: fix io-uring list corruption for terminated non-committed requests
    
    commit 95c39eef7c2b666026c69ab5b30471da94ea2874 upstream.
    
    When a request is terminated before it has been committed, the request
    is not removed from the queue's list. This leaves a dangling list entry
    that leads to list corruption and use-after-free issues.
    
    Remove the request from the queue's list for terminated non-committed
    requests.
    
    Signed-off-by: Joanne Koong <[email protected]>
    Fixes: c090c8abae4b ("fuse: Add io-uring sqe commit and fetch support")
    Cc: [email protected]
    Reviewed-by: Bernd Schubert <[email protected]>
    Signed-off-by: Miklos Szeredi <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

fuse: fix readahead reclaim deadlock [+ + +]
Author: Joanne Koong <[email protected]>
Date:   Fri Oct 10 15:07:38 2025 -0700

    fuse: fix readahead reclaim deadlock
    
    commit bd5603eaae0aabf527bfb3ce1bb07e979ce5bd50 upstream.
    
    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: Greg Kroah-Hartman <[email protected]>

fuse: Invalidate the page cache after FOPEN_DIRECT_IO write [+ + +]
Author: Bernd Schubert <[email protected]>
Date:   Thu Oct 23 00:21:17 2025 +0200

    fuse: Invalidate the page cache after FOPEN_DIRECT_IO write
    
    [ Upstream commit b359af8275a982a458e8df6c6beab1415be1f795 ]
    
    generic_file_direct_write() also does this and has a large
    comment about.
    
    Reproducer here is xfstest's generic/209, which is exactly to
    have competing DIO write and cached IO read.
    
    Signed-off-by: Bernd Schubert <[email protected]>
    Signed-off-by: Miklos Szeredi <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

fuse: missing copy_finish in fuse-over-io-uring argument copies [+ + +]
Author: Cheng Ding <[email protected]>
Date:   Tue Oct 21 22:46:42 2025 +0200

    fuse: missing copy_finish in fuse-over-io-uring argument copies
    
    commit 6e0d7f7f4a43ac8868e98c87ecf48805aa8c24dd upstream.
    
    Fix a possible reference count leak of payload pages during
    fuse argument copies.
    
    [Joanne: simplified error cleanup]
    
    Fixes: c090c8abae4b ("fuse: Add io-uring sqe commit and fetch support")
    Cc: [email protected] # v6.14
    Signed-off-by: Cheng Ding <[email protected]>
    Signed-off-by: Bernd Schubert <[email protected]>
    Reviewed-by: Joanne Koong <[email protected]>
    Signed-off-by: Miklos Szeredi <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
gfs2: Fix "gfs2: Switch to wait_event in gfs2_quotad" [+ + +]
Author: Andreas Gruenbacher <[email protected]>
Date:   Wed Nov 26 23:27:14 2025 +0000

    gfs2: Fix "gfs2: Switch to wait_event in gfs2_quotad"
    
    [ Upstream commit dff1fb6d8b7abe5b1119fa060f5d6b3370bf10ac ]
    
    Commit e4a8b5481c59a ("gfs2: Switch to wait_event in gfs2_quotad") broke
    cyclic statfs syncing, so the numbers reported by "df" could easily get
    completely out of sync with reality.  Fix this by reverting part of
    commit e4a8b5481c59a for now.
    
    A follow-up commit will clean this code up later.
    
    Signed-off-by: Andreas Gruenbacher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

gfs2: fix freeze error handling [+ + +]
Author: Alexey Velichayshiy <[email protected]>
Date:   Mon Nov 17 12:05:18 2025 +0300

    gfs2: fix freeze error handling
    
    commit 4cfc7d5a4a01d2133b278cdbb1371fba1b419174 upstream.
    
    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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

gfs2: fix remote evict for read-only filesystems [+ + +]
Author: Andreas Gruenbacher <[email protected]>
Date:   Wed Nov 19 12:14:24 2025 +0000

    gfs2: fix remote evict for read-only filesystems
    
    [ Upstream commit 64c10ed9274bc46416f502afea48b4ae11279669 ]
    
    When a node tries to delete an inode, it first requests exclusive access
    to the iopen glock.  This triggers demote requests on all remote nodes
    currently holding the iopen glock.  To satisfy those requests, the
    remote nodes evict the inode in question, or they poke the corresponding
    inode glock to signal that the inode is still in active use.
    
    This behavior doesn't depend on whether or not a filesystem is
    read-only, so remove the incorrect read-only check.
    
    Signed-off-by: Andreas Gruenbacher <[email protected]>
    Signed-off-by: Sasha Levin <[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]>

 
gpio: loongson: Switch 2K2000/3000 GPIO to BYTE_CTRL_MODE [+ + +]
Author: Xi Ruoyao <[email protected]>
Date:   Fri Nov 28 15:50:32 2025 +0800

    gpio: loongson: Switch 2K2000/3000 GPIO to BYTE_CTRL_MODE
    
    commit dae9750105cf93ac1e156ef91f4beeb53bd64777 upstream.
    
    The manuals of 2K2000 says both BIT_CTRL_MODE and BYTE_CTRL_MODE are
    supported but the latter is recommended.  Also on 2K3000, per the ACPI
    DSDT the GPIO controller is compatible with 2K2000, but it fails to
    operate GPIOs 62 and 63 (and maybe others) using BIT_CTRL_MODE.
    Using BYTE_CTRL_MODE also makes those 2K3000 GPIOs work.
    
    Fixes: 3feb70a61740 ("gpio: loongson: add more gpio chip support")
    Cc: [email protected]
    Signed-off-by: Xi Ruoyao <[email protected]>
    Reviewed-by: Huacai Chen <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

gpio: regmap: Fix memleak in error path in gpio_regmap_register() [+ + +]
Author: Wentao Guan <[email protected]>
Date:   Thu Dec 4 18:13:04 2025 +0800

    gpio: regmap: Fix memleak in error path in gpio_regmap_register()
    
    commit 52721cfc78c76b09c66e092b52617006390ae96a upstream.
    
    Call gpiochip_remove() to free the resources allocated by
    gpiochip_add_data() in error path.
    
    Fixes: 553b75d4bfe9 ("gpio: regmap: Allow to allocate regmap-irq device")
    Fixes: ae495810cffe ("gpio: regmap: add the .fixed_direction_output configuration parameter")
    CC: [email protected]
    Co-developed-by: WangYuli <[email protected]>
    Signed-off-by: WangYuli <[email protected]>
    Signed-off-by: Wentao Guan <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    [Bartosz: reworked the commit message]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
gpiolib: acpi: Add quirk for Dell Precision 7780 [+ + +]
Author: Askar Safin <[email protected]>
Date:   Sat Dec 6 18:04:13 2025 +0000

    gpiolib: acpi: Add quirk for Dell Precision 7780
    
    commit 2d967310c49ed93ac11cef408a55ddf15c3dd52e upstream.
    
    Dell Precision 7780 often wakes up on its own from suspend. Sometimes
    wake up happens immediately (i. e. within 7 seconds), sometimes it happens
    after, say, 30 minutes.
    
    Fixes: 1796f808e4bb ("HID: i2c-hid: acpi: Stop setting wakeup_capable")
    Link: https://lore.kernel.org/linux-i2c/[email protected]/
    Cc: [email protected]
    Reviewed-by: Andy Shevchenko <[email protected]>
    Signed-off-by: Askar Safin <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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: fix volume corruption issue for generic/101 [+ + +]
Author: Viacheslav Dubeyko <[email protected]>
Date:   Wed Nov 19 14:32:20 2025 -0800

    hfsplus: fix volume corruption issue for generic/101
    
    [ Upstream commit 3f04ee216bc1406cb6214ceaa7e544114108e0fa ]
    
    The xfstests' test-case generic/101 leaves HFS+ volume
    in corrupted state:
    
    sudo ./check generic/101
    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/101 _check_generic_filesystem: filesystem on /dev/loop51 is inconsistent
    (see XFSTESTS-2/xfstests-dev/results//generic/101.full for details)
    
    Ran: generic/101
    Failures: generic/101
    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.
    ** Checking extended attributes file.
    ** Checking volume bitmap.
    ** Checking volume information.
    Invalid volume free block count
    (It should be 2614350 instead of 2614382)
    Verify Status: VIStat = 0x8000, ABTStat = 0x0000 EBTStat = 0x0000
    CBTStat = 0x0000 CatStat = 0x00000000
    ** 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.
    
    This test executes such steps: "Test that if we truncate a file
    to a smaller size, then truncate it to its original size or
    a larger size, then fsyncing it and a power failure happens,
    the file will have the range [first_truncate_size, last_size[ with
    all bytes having a value of 0x00 if we read it the next time
    the filesystem is mounted.".
    
    HFS+ keeps volume's free block count in the superblock.
    However, hfsplus_file_fsync() doesn't store superblock's
    content. As a result, superblock contains not correct
    value of free blocks if a power failure happens.
    
    This patch adds functionality of saving superblock's
    content during hfsplus_file_fsync() call.
    
    sudo ./check generic/101
    FSTYP         -- hfsplus
    PLATFORM      -- Linux/x86_64 hfsplus-testing-0001 6.18.0-rc3+ #96 SMP PREEMPT_DYNAMIC Wed Nov 19 12:47:37 PST 2025
    MKFS_OPTIONS  -- /dev/loop51
    MOUNT_OPTIONS -- /dev/loop51 /mnt/scratch
    
    generic/101 32s ...  30s
    Ran: generic/101
    Passed all 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.
    ** Checking extended attributes file.
    ** Checking volume bitmap.
    ** Checking volume information.
    ** The volume untitled appears to be OK.
    
    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: 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]>

 
hwmon: (dell-smm) Limit fan multiplier to avoid overflow [+ + +]
Author: Denis Sergeev <[email protected]>
Date:   Tue Dec 9 09:37:06 2025 +0300

    hwmon: (dell-smm) Limit fan multiplier to avoid overflow
    
    [ Upstream commit 46c28bbbb150b80827e4bcbea231560af9d16854 ]
    
    The fan nominal speed returned by SMM is limited to 16 bits, but the
    driver allows the fan multiplier to be set via a module parameter.
    
    Clamp the computed fan multiplier so that fan_nominal_speed *
    i8k_fan_mult always fits into a signed 32-bit integer and refuse to
    initialize the driver if the value is too large.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 20bdeebc88269 ("hwmon: (dell-smm) Introduce helper function for data init")
    Signed-off-by: Denis Sergeev <[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: (emc2305) fix device node refcount leak in error path [+ + +]
Author: Pei Xiao <[email protected]>
Date:   Fri Dec 5 11:15:13 2025 +0800

    hwmon: (emc2305) fix device node refcount leak in error path
    
    [ Upstream commit 4910da6b36b122db50a27fabf6ab7f8611b60bf8 ]
    
    The for_each_child_of_node() macro automatically manages device node
    reference counts during normal iteration. However, when breaking out
    of the loop early with return, the current iteration's node is not
    automatically released, leading to a reference count leak.
    
    Fix this by adding of_node_put(child) before returning from the loop
    when emc2305_set_single_tz() fails.
    
    This issue could lead to memory leaks over multiple probe cycles.
    
    Signed-off-by: Pei Xiao <[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: (emc2305) fix double put in emc2305_probe_childs_from_dt [+ + +]
Author: Pei Xiao <[email protected]>
Date:   Fri Dec 5 10:02:41 2025 +0800

    hwmon: (emc2305) fix double put in emc2305_probe_childs_from_dt
    
    [ Upstream commit 541dfb49dcb80c2509e030842de77adfb77820f5 ]
    
    ./drivers/hwmon/emc2305.c:597:4-15: ERROR: probable double put
    
    Device node iterators put the previous value of the index variable, so an
    explicit put causes a double put.
    
    Signed-off-by: Pei Xiao <[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: (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: (ltc4282): Fix reset_history file permissions [+ + +]
Author: Nuno Sá <[email protected]>
Date:   Fri Dec 19 16:11:05 2025 +0000

    hwmon: (ltc4282): Fix reset_history file permissions
    
    [ Upstream commit b3db91c3bfea69a6c6258fea508f25a59c0feb1a ]
    
    The reset_history attributes are write only. Hence don't report them as
    readable just to return -EOPNOTSUPP later on.
    
    Fixes: cbc29538dbf7 ("hwmon: Add driver for LTC4282")
    Signed-off-by: Nuno Sá <[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: (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: (max6697) fix regmap leak on probe failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Thu Nov 27 14:43:51 2025 +0100

    hwmon: (max6697) fix regmap leak on probe failure
    
    commit 02f0ad8e8de8cf5344f8f0fa26d9529b8339da47 upstream.
    
    The i2c regmap allocated during probe is never freed.
    
    Switch to using the device managed allocator so that the regmap is
    released on probe failures (e.g. probe deferral) and on driver unbind.
    
    Fixes: 3a2a8cc3fe24 ("hwmon: (max6697) Convert to use regmap")
    Cc: [email protected]      # 6.12
    Cc: Guenter Roeck <[email protected]>
    Signed-off-by: Johan Hovold <[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]>

 
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]>

i2c: designware: Disable SMBus interrupts to prevent storms from mis-configured firmware [+ + +]
Author: Jinhui Guo <[email protected]>
Date:   Tue Oct 21 15:57:14 2025 +0800

    i2c: designware: Disable SMBus interrupts to prevent storms from mis-configured firmware
    
    [ Upstream commit d3429178ee51dd7155445d15a5ab87a45fae3c73 ]
    
    When probing the I2C master, disable SMBus interrupts to prevent
    storms caused by broken firmware mis-configuring IC_SMBUS=1; the
    handler never services them and a mis-configured SMBUS Master
    extend-clock timeout or SMBUS Slave extend-clock timeout can
    flood the CPU.
    
    Signed-off-by: Jinhui Guo <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Acked-by: Mika Westerberg <[email protected]>
    Signed-off-by: Andi Shyti <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[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]>

 
inet: frags: add inet_frag_queue_flush() [+ + +]
Author: Jakub Kicinski <[email protected]>
Date:   Sat Dec 6 17:09:40 2025 -0800

    inet: frags: add inet_frag_queue_flush()
    
    [ Upstream commit 1231eec6994be29d6bb5c303dfa54731ed9fc0e6 ]
    
    Instead of exporting inet_frag_rbtree_purge() which requires that
    caller takes care of memory accounting, add a new helper. We will
    need to call it from a few places in the next patch.
    
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 006a5035b495 ("inet: frags: flush pending skbs in fqdir_pre_exit()")
    Signed-off-by: Sasha Levin <[email protected]>

inet: frags: avoid theoretical race in ip_frag_reinit() [+ + +]
Author: Jakub Kicinski <[email protected]>
Date:   Sat Dec 6 17:09:39 2025 -0800

    inet: frags: avoid theoretical race in ip_frag_reinit()
    
    [ Upstream commit 8ef522c8a59a048117f7e05eb5213043c02f986f ]
    
    In ip_frag_reinit() we want to move the frag timeout timer into
    the future. If the timer fires in the meantime we inadvertently
    scheduled it again, and since the timer assumes a ref on frag_queue
    we need to acquire one to balance things out.
    
    This is technically racy, we should have acquired the reference
    _before_ we touch the timer, it may fire again before we take the ref.
    Avoid this entire dance by using mod_timer_pending() which only modifies
    the timer if its pending (and which exists since Linux v2.6.30)
    
    Note that this was the only place we ever took a ref on frag_queue
    since Eric's conversion to RCU. So we could potentially replace
    the whole refcnt field with an atomic flag and a bit more RCU.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    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]>

inet: frags: flush pending skbs in fqdir_pre_exit() [+ + +]
Author: Jakub Kicinski <[email protected]>
Date:   Sat Dec 6 17:09:41 2025 -0800

    inet: frags: flush pending skbs in fqdir_pre_exit()
    
    [ Upstream commit 006a5035b495dec008805df249f92c22c89c3d2e ]
    
    We have been seeing occasional deadlocks on pernet_ops_rwsem since
    September in NIPA. The stuck task was usually modprobe (often loading
    a driver like ipvlan), trying to take the lock as a Writer.
    lockdep does not track readers for rwsems so the read wasn't obvious
    from the reports.
    
    On closer inspection the Reader holding the lock was conntrack looping
    forever in nf_conntrack_cleanup_net_list(). Based on past experience
    with occasional NIPA crashes I looked thru the tests which run before
    the crash and noticed that the crash follows ip_defrag.sh. An immediate
    red flag. Scouring thru (de)fragmentation queues reveals skbs sitting
    around, holding conntrack references.
    
    The problem is that since conntrack depends on nf_defrag_ipv6,
    nf_defrag_ipv6 will load first. Since nf_defrag_ipv6 loads first its
    netns exit hooks run _after_ conntrack's netns exit hook.
    
    Flush all fragment queue SKBs during fqdir_pre_exit() to release
    conntrack references before conntrack cleanup runs. Also flush
    the queues in timer expiry handlers when they discover fqdir->dead
    is set, in case packet sneaks in while we're running the pre_exit
    flush.
    
    The commit under Fixes is not exactly the culprit, but I think
    previously the timer firing would eventually unblock the spinning
    conntrack.
    
    Fixes: d5dd88794a13 ("inet: fix various use-after-free in defrags units")
    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: alps - fix use-after-free bugs caused by dev3_register_work [+ + +]
Author: Duoming Zhou <[email protected]>
Date:   Wed Dec 17 11:00:17 2025 +0800

    Input: alps - fix use-after-free bugs caused by dev3_register_work
    
    commit bf40644ef8c8a288742fa45580897ed0e0289474 upstream.
    
    The dev3_register_work delayed work item is initialized within
    alps_reconnect() and scheduled upon receipt of the first bare
    PS/2 packet from an external PS/2 device connected to the ALPS
    touchpad. During device detachment, the original implementation
    calls flush_workqueue() in psmouse_disconnect() to ensure
    completion of dev3_register_work. However, the flush_workqueue()
    in psmouse_disconnect() only blocks and waits for work items that
    were already queued to the workqueue prior to its invocation. Any
    work items submitted after flush_workqueue() is called are not
    included in the set of tasks that the flush operation awaits.
    This means that after flush_workqueue() has finished executing,
    the dev3_register_work could still be scheduled. Although the
    psmouse state is set to PSMOUSE_CMD_MODE in psmouse_disconnect(),
    the scheduling of dev3_register_work remains unaffected.
    
    The race condition can occur as follows:
    
    CPU 0 (cleanup path)     | CPU 1 (delayed work)
    psmouse_disconnect()     |
      psmouse_set_state()    |
      flush_workqueue()      | alps_report_bare_ps2_packet()
      alps_disconnect()      |   psmouse_queue_work()
        kfree(priv); // FREE | alps_register_bare_ps2_mouse()
                             |   priv = container_of(work...); // USE
                             |   priv->dev3 // USE
    
    Add disable_delayed_work_sync() in alps_disconnect() to ensure
    that dev3_register_work is properly canceled and prevented from
    executing after the alps_data structure has been deallocated.
    
    This bug is identified by static analysis.
    
    Fixes: 04aae283ba6a ("Input: ALPS - do not mix trackstick and external PS/2 mouse data")
    Cc: [email protected]
    Signed-off-by: Duoming Zhou <[email protected]>
    Link: https://patch.msgid.link/b57b0a9ccca51a3f06be141bfc02b9ffe69d1845.1765939397.git.duoming@zju.edu.cn
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: apple_z2 - fix reading incorrect reports after exiting sleep [+ + +]
Author: Sasha Finkelstein <[email protected]>
Date:   Thu Dec 18 10:15:23 2025 -0800

    Input: apple_z2 - fix reading incorrect reports after exiting sleep
    
    commit d579478cee228bdc0029a0c12a1f6a63ea9d1c77 upstream.
    
    Under certain conditions (more prevalent after a suspend/resume cycle),
    the touchscreen controller can send the "boot complete" interrupt before
    it actually finished booting. In those cases, attempting to read touch
    data resuls in a stream of "not ready" messages being read and
    interpreted as a touch report. Check that the response is in fact a
    touch report and discard it otherwise.
    
    Reported-by: pitust <[email protected]>
    Closes: https://oftc.catirclogs.org/asahi/2025-12-17#34878715;
    Fixes: 471a92f8a21a ("Input: apple_z2 - add a driver for Apple Z2 touchscreens")
    Signed-off-by: Sasha Finkelstein <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: [email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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: lkkbd - disable pending work before freeing device [+ + +]
Author: Minseong Kim <[email protected]>
Date:   Fri Dec 12 00:29:23 2025 -0800

    Input: lkkbd - disable pending work before freeing device
    
    commit e58c88f0cb2d8ed89de78f6f17409d29cfab6c5c upstream.
    
    lkkbd_interrupt() schedules lk->tq via schedule_work(), and the work
    handler lkkbd_reinit() dereferences the lkkbd structure and its
    serio/input_dev fields.
    
    lkkbd_disconnect() and error paths in lkkbd_connect() free the lkkbd
    structure without preventing the reinit work from being queued again
    until serio_close() returns. This can allow the work handler to run
    after the structure has been freed, leading to a potential use-after-free.
    
    Use disable_work_sync() instead of cancel_work_sync() to ensure the
    reinit work cannot be re-queued, and call it both in lkkbd_disconnect()
    and in lkkbd_connect() error paths after serio_open().
    
    Signed-off-by: Minseong Kim <[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]>

Input: xpad - add support for CRKD Guitars [+ + +]
Author: Sanjay Govind <[email protected]>
Date:   Sat Nov 29 20:37:11 2025 +1300

    Input: xpad - add support for CRKD Guitars
    
    commit 806ec7b797adc1cc9b11535307638a55ddfb873c upstream.
    
    Add support for various CRKD Guitar Controllers.
    
    Signed-off-by: Sanjay Govind <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    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: sdx75: Drop QPIC interconnect and BCM nodes [+ + +]
Author: Raviteja Laggyshetty <[email protected]>
Date:   Fri Sep 26 12:12:09 2025 +0530

    interconnect: qcom: sdx75: Drop QPIC interconnect and BCM nodes
    
    commit 295f58fdccd05b2d6da1f4a4f81952ccb565c4dc upstream.
    
    As like other SDX SoCs, SDX75 SoC's QPIC BCM resource was modeled as a
    RPMh clock in clk-rpmh driver. However, for SDX75, this resource was also
    described as an interconnect and BCM node mistakenly. It is incorrect to
    describe the same resource in two different providers, as it will lead to
    votes from clients overriding each other.
    
    Hence, drop the QPIC interconnect and BCM nodes and let the clients use
    clk-rpmh driver to vote for this resource.
    
    Without this change, the NAND driver fails to probe on SDX75, as the
    interconnect sync state disables the QPIC nodes as there were no clients
    voting for this ICC resource. However, the NAND driver had already voted
    for this BCM resource through the clk-rpmh driver. Since both votes come
    from Linux, RPMh was unable to distinguish between these two and ends up
    disabling the QPIC resource during sync state.
    
    Cc: [email protected]
    Fixes: 3642b4e5cbfe ("interconnect: qcom: Add SDX75 interconnect provider driver")
    Signed-off-by: Raviteja Laggyshetty <[email protected]>
    [mani: dropped the reference to bcm_qp0, reworded description]
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Tested-by: Lakshmi Sowjanya D <[email protected]>  # on SDX75
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Georgi Djakov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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/rsrc: fix lost entries after cloned range [+ + +]
Author: Joanne Koong <[email protected]>
Date:   Thu Dec 4 13:51:16 2025 -0800

    io_uring/rsrc: fix lost entries after cloned range
    
    commit 525916ce496615f531091855604eab9ca573b195 upstream.
    
    When cloning with node replacements (IORING_REGISTER_DST_REPLACE),
    destination entries after the cloned range are not copied over.
    
    Add logic to copy them over to the new destination table.
    
    Fixes: c1329532d5aa ("io_uring/rsrc: allow cloning with node replacements")
    Cc: [email protected]
    Signed-off-by: Joanne Koong <[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]>

io_uring: fix min_wait wakeups for SQPOLL [+ + +]
Author: Jens Axboe <[email protected]>
Date:   Tue Dec 9 13:25:23 2025 -0700

    io_uring: fix min_wait wakeups for SQPOLL
    
    commit e15cb2200b934e507273510ba6bc747d5cde24a3 upstream.
    
    Using min_wait, two timeouts are given:
    
    1) The min_wait timeout, within which up to 'wait_nr' events are
       waited for.
    2) The overall long timeout, which is entered if no events are generated
       in the min_wait window.
    
    If the min_wait has expired, any event being posted must wake the task.
    For SQPOLL, that isn't the case, as it won't trigger the io_has_work()
    condition, as it will have already processed the task_work that happened
    when an event was posted. This causes any event to trigger post the
    min_wait to not always cause the waiting application to wakeup, and
    instead it will wait until the overall timeout has expired. This can be
    shown in a test case that has a 1 second min_wait, with a 5 second
    overall wait, even if an event triggers after 1.5 seconds:
    
    axboe@m2max-kvm /d/iouring-mre (master)> zig-out/bin/iouring
    info: MIN_TIMEOUT supported: true, features: 0x3ffff
    info: Testing: min_wait=1000ms, timeout=5s, wait_nr=4
    info: 1 cqes in 5000.2ms
    
    where the expected result should be:
    
    axboe@m2max-kvm /d/iouring-mre (master)> zig-out/bin/iouring
    info: MIN_TIMEOUT supported: true, features: 0x3ffff
    info: Testing: min_wait=1000ms, timeout=5s, wait_nr=4
    info: 1 cqes in 1500.3ms
    
    When the min_wait timeout triggers, reset the number of completions
    needed to wake the task. This should ensure that any future events will
    wake the task, regardless of how many events it originally wanted to
    wait for.
    
    Reported-by: Tip ten Brink <[email protected]>
    Cc: [email protected]
    Fixes: 1100c4a2656d ("io_uring: add support for batch wait timeout")
    Link: https://github.com/axboe/liburing/issues/1477
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

io_uring: fix nr_segs calculation in io_import_kbuf [+ + +]
Author: huang-jl <[email protected]>
Date:   Wed Dec 17 14:26:32 2025 +0800

    io_uring: fix nr_segs calculation in io_import_kbuf
    
    [ Upstream commit 114ea9bbaf7681c4d363e13b7916e6fef6a4963a ]
    
    io_import_kbuf() calculates nr_segs incorrectly when iov_offset is
    non-zero after iov_iter_advance(). It doesn't account for the partial
    consumption of the first bvec.
    
    The problem comes when meet the following conditions:
    1. Use UBLK_F_AUTO_BUF_REG feature of ublk.
    2. The kernel will help to register the buffer, into the io uring.
    3. Later, the ublk server try to send IO request using the registered
       buffer in the io uring, to read/write to fuse-based filesystem, with
    O_DIRECT.
    
    >From a userspace perspective, the ublk server thread is blocked in the
    kernel, and will see "soft lockup" in the kernel dmesg.
    
    When ublk registers a buffer with mixed-size bvecs like [4K]*6 + [12K]
    and a request partially consumes a bvec, the next request's nr_segs
    calculation uses bvec->bv_len instead of (bv_len - iov_offset).
    
    This causes fuse_get_user_pages() to loop forever because nr_segs
    indicates fewer pages than actually needed.
    
    Specifically, the infinite loop happens at:
    fuse_get_user_pages()
      -> iov_iter_extract_pages()
        -> iov_iter_extract_bvec_pages()
    Since the nr_segs is miscalculated, the iov_iter_extract_bvec_pages
    returns when finding that i->nr_segs is zero. Then
    iov_iter_extract_pages returns zero. However, fuse_get_user_pages does
    still not get enough data/pages, causing infinite loop.
    
    Example:
      - Bvecs: [4K, 4K, 4K, 4K, 4K, 4K, 12K, ...]
      - Request 1: 32K at offset 0, uses 6*4K + 8K of the 12K bvec
      - Request 2: 32K at offset 32K
        - iov_offset = 8K (8K already consumed from 12K bvec)
        - Bug: calculates using 12K, not (12K - 8K) = 4K
        - Result: nr_segs too small, infinite loop in fuse_get_user_pages.
    
    Fix by accounting for iov_offset when calculating the first segment's
    available length.
    
    Fixes: b419bed4f0a6 ("io_uring/rsrc: ensure segments counts are correct on kbuf buffers")
    Signed-off-by: huang-jl <[email protected]>
    Reviewed-by: Ming Lei <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
iomap: account for unaligned end offsets when truncating read range [+ + +]
Author: Joanne Koong <[email protected]>
Date:   Tue Nov 11 11:36:51 2025 -0800

    iomap: account for unaligned end offsets when truncating read range
    
    [ Upstream commit 9d875e0eef8ec15b6b1da0cb9a0f8ed13efee89e ]
    
    The end position to start truncating from may be at an offset into a
    block, which under the current logic would result in overtruncation.
    
    Adjust the calculation to account for unaligned end offsets.
    
    Signed-off-by: Joanne Koong <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Darrick J. Wong <[email protected]>
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

iomap: adjust read range correctly for non-block-aligned positions [+ + +]
Author: Joanne Koong <[email protected]>
Date:   Mon Sep 22 11:00:42 2025 -0700

    iomap: adjust read range correctly for non-block-aligned positions
    
    [ Upstream commit 7aa6bc3e8766990824f66ca76c19596ce10daf3e ]
    
    iomap_adjust_read_range() assumes that the position and length passed in
    are block-aligned. This is not always the case however, as shown in the
    syzbot generated case for erofs. This causes too many bytes to be
    skipped for uptodate blocks, which results in returning the incorrect
    position and length to read in. If all the blocks are uptodate, this
    underflows length and returns a position beyond the folio.
    
    Fix the calculation to also take into account the block offset when
    calculating how many bytes can be skipped for uptodate blocks.
    
    Signed-off-by: Joanne Koong <[email protected]>
    Tested-by: [email protected]
    Reviewed-by: Brian Foster <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
iommu/mediatek: fix use-after-free on probe deferral [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Oct 20 06:53:10 2025 +0200

    iommu/mediatek: fix use-after-free on probe deferral
    
    commit de83d4617f9fe059623e97acf7e1e10d209625b5 upstream.
    
    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: Greg Kroah-Hartman <[email protected]>

 
iommufd/selftest: Check for overflow in IOMMU_TEST_OP_ADD_RESERVED [+ + +]
Author: Jason Gunthorpe <[email protected]>
Date:   Tue Dec 16 11:53:40 2025 -0400

    iommufd/selftest: Check for overflow in IOMMU_TEST_OP_ADD_RESERVED
    
    [ Upstream commit e6a973af11135439de32ece3b9cbe3bfc043bea8 ]
    
    syzkaller found it could overflow math in the test infrastructure and
    cause a WARN_ON by corrupting the reserved interval tree. This only
    effects test kernels with CONFIG_IOMMUFD_TEST.
    
    Validate the user input length in the test ioctl.
    
    Fixes: f4b20bb34c83 ("iommufd: Add kernel support for testing iommufd")
    Link: https://patch.msgid.link/r/[email protected]
    Reviewed-by: Samiullah Khawaja <[email protected]>
    Reviewed-by: Kevin Tian <[email protected]>
    Tested-by: Yi Liu <[email protected]>
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/all/[email protected]
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

iommufd/selftest: Make it clearer to gcc that the access is not out of bounds [+ + +]
Author: Jason Gunthorpe <[email protected]>
Date:   Fri Dec 5 14:56:12 2025 -0400

    iommufd/selftest: Make it clearer to gcc that the access is not out of bounds
    
    [ Upstream commit 5b244b077c0b0e76573fbb9542cf038e42368901 ]
    
    GCC gets a bit confused and reports:
    
       In function '_test_cmd_get_hw_info',
           inlined from 'iommufd_ioas_get_hw_info' at iommufd.c:779:3,
           inlined from 'wrapper_iommufd_ioas_get_hw_info' at iommufd.c:752:1:
    >> iommufd_utils.h:804:37: warning: array subscript 'struct iommu_test_hw_info[0]' is partly outside array bounds of 'struct iommu_test_hw_info_buffer_smaller[1]' [-Warray-bounds=]
         804 |                         assert(!info->flags);
             |                                 ~~~~^~~~~~~
       iommufd.c: In function 'wrapper_iommufd_ioas_get_hw_info':
       iommufd.c:761:11: note: object 'buffer_smaller' of size 4
         761 |         } buffer_smaller;
             |           ^~~~~~~~~~~~~~
    
    While it is true that "struct iommu_test_hw_info[0]" is partly out of
    bounds of the input pointer, it is not true that info->flags is out of
    bounds. Unclear why it warns on this.
    
    Reuse an existing properly sized stack buffer and pass a truncated length
    instead to test the same thing.
    
    Fixes: af4fde93c319 ("iommufd/selftest: Add coverage for IOMMU_GET_HW_INFO ioctl")
    Link: https://patch.msgid.link/r/[email protected]
    Reviewed-by: Kevin Tian <[email protected]>
    Reviewed-by: Nicolin Chen <[email protected]>
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Signed-off-by: Jason Gunthorpe <[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]>

 
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]>

 
jbd2: fix the inconsistency between checksum and data in memory for journal sb [+ + +]
Author: Ye Bin <[email protected]>
Date:   Mon Nov 3 09:01:23 2025 +0800

    jbd2: fix the inconsistency between checksum and data in memory for journal sb
    
    commit 6abfe107894af7e8ce3a2e120c619d81ee764ad5 upstream.
    
    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]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

jbd2: use a per-journal lock_class_key for jbd2_trans_commit_key [+ + +]
Author: Tetsuo Handa <[email protected]>
Date:   Wed Oct 22 20:11:37 2025 +0900

    jbd2: use a per-journal lock_class_key for jbd2_trans_commit_key
    
    commit 524c3853831cf4f7e1db579e487c757c3065165c upstream.
    
    syzbot is reporting possibility of deadlock due to sharing lock_class_key
    for jbd2_handle across ext4 and ocfs2. But this is a false positive, for
    one disk partition can't have two filesystems at the same time.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=6e493c165d26d6fcbf72
    Signed-off-by: Tetsuo Handa <[email protected]>
    Tested-by: [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: 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]>

 
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]>

 
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 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: 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]>

ksmbd: vfs: fix race on m_flags in vfs_cache [+ + +]
Author: Qianchang Zhao <[email protected]>
Date:   Mon Nov 24 16:05:09 2025 +0900

    ksmbd: vfs: fix race on m_flags in vfs_cache
    
    [ Upstream commit 991f8a79db99b14c48d20d2052c82d65b9186cad ]
    
    ksmbd maintains delete-on-close and pending-delete state in
    ksmbd_inode->m_flags. In vfs_cache.c this field is accessed under
    inconsistent locking: some paths read and modify m_flags under
    ci->m_lock while others do so without taking the lock at all.
    
    Examples:
    
     - ksmbd_query_inode_status() and __ksmbd_inode_close() use
       ci->m_lock when checking or updating m_flags.
     - ksmbd_inode_pending_delete(), ksmbd_set_inode_pending_delete(),
       ksmbd_clear_inode_pending_delete() and ksmbd_fd_set_delete_on_close()
       used to read and modify m_flags without ci->m_lock.
    
    This creates a potential data race on m_flags when multiple threads
    open, close and delete the same file concurrently. In the worst case
    delete-on-close and pending-delete bits can be lost or observed in an
    inconsistent state, leading to confusing delete semantics (files that
    stay on disk after delete-on-close, or files that disappear while still
    in use).
    
    Fix it by:
    
     - Making ksmbd_query_inode_status() look at m_flags under ci->m_lock
       after dropping inode_hash_lock.
     - Adding ci->m_lock protection to all helpers that read or modify
       m_flags (ksmbd_inode_pending_delete(), ksmbd_set_inode_pending_delete(),
       ksmbd_clear_inode_pending_delete(), ksmbd_fd_set_delete_on_close()).
     - Keeping the existing ci->m_lock protection in __ksmbd_inode_close(),
       and moving the actual unlink/xattr removal outside the lock.
    
    This unifies the locking around m_flags and removes the data race while
    preserving the existing delete-on-close behaviour.
    
    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: Sasha Levin <[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: Disallow toggling KVM_MEM_GUEST_MEMFD on an existing memslot [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Mon Dec 1 18:03:33 2025 -0800

    KVM: Disallow toggling KVM_MEM_GUEST_MEMFD on an existing memslot
    
    commit 9935df5333aa503a18de5071f53762b65c783c4c upstream.
    
    Reject attempts to disable KVM_MEM_GUEST_MEMFD on a memslot that was
    initially created with a guest_memfd binding, as KVM doesn't support
    toggling KVM_MEM_GUEST_MEMFD on existing memslots.  KVM prevents enabling
    KVM_MEM_GUEST_MEMFD, but doesn't prevent clearing the flag.
    
    Failure to reject the new memslot results in a use-after-free due to KVM
    not unbinding from the guest_memfd instance.  Unbinding on a FLAGS_ONLY
    change is easy enough, and can/will be done as a hardening measure (in
    anticipation of KVM supporting dirty logging on guest_memfd at some point),
    but fixing the use-after-free would only address the immediate symptom.
    
      ==================================================================
      BUG: KASAN: slab-use-after-free in kvm_gmem_release+0x362/0x400 [kvm]
      Write of size 8 at addr ffff8881111ae908 by task repro/745
    
      CPU: 7 UID: 1000 PID: 745 Comm: repro Not tainted 6.18.0-rc6-115d5de2eef3-next-kasan #3 NONE
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015
      Call Trace:
       <TASK>
       dump_stack_lvl+0x51/0x60
       print_report+0xcb/0x5c0
       kasan_report+0xb4/0xe0
       kvm_gmem_release+0x362/0x400 [kvm]
       __fput+0x2fa/0x9d0
       task_work_run+0x12c/0x200
       do_exit+0x6ae/0x2100
       do_group_exit+0xa8/0x230
       __x64_sys_exit_group+0x3a/0x50
       x64_sys_call+0x737/0x740
       do_syscall_64+0x5b/0x900
       entry_SYSCALL_64_after_hwframe+0x4b/0x53
      RIP: 0033:0x7f581f2eac31
       </TASK>
    
      Allocated by task 745 on cpu 6 at 9.746971s:
       kasan_save_stack+0x20/0x40
       kasan_save_track+0x13/0x50
       __kasan_kmalloc+0x77/0x90
       kvm_set_memory_region.part.0+0x652/0x1110 [kvm]
       kvm_vm_ioctl+0x14b0/0x3290 [kvm]
       __x64_sys_ioctl+0x129/0x1a0
       do_syscall_64+0x5b/0x900
       entry_SYSCALL_64_after_hwframe+0x4b/0x53
    
      Freed by task 745 on cpu 6 at 9.747467s:
       kasan_save_stack+0x20/0x40
       kasan_save_track+0x13/0x50
       __kasan_save_free_info+0x37/0x50
       __kasan_slab_free+0x3b/0x60
       kfree+0xf5/0x440
       kvm_set_memslot+0x3c2/0x1160 [kvm]
       kvm_set_memory_region.part.0+0x86a/0x1110 [kvm]
       kvm_vm_ioctl+0x14b0/0x3290 [kvm]
       __x64_sys_ioctl+0x129/0x1a0
       do_syscall_64+0x5b/0x900
       entry_SYSCALL_64_after_hwframe+0x4b/0x53
    
    Reported-by: Alexander Potapenko <[email protected]>
    Fixes: a7800aa80ea4 ("KVM: Add KVM_CREATE_GUEST_MEMFD ioctl() for guest-specific backing memory")
    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]>

KVM: Fix last_boosted_vcpu index assignment bug [+ + +]
Author: Wanpeng Li <[email protected]>
Date:   Mon Nov 10 11:32:27 2025 +0800

    KVM: Fix last_boosted_vcpu index assignment bug
    
    commit 32bd348be3fa07b26c5ea6b818a161c142dcc2f2 upstream.
    
    In kvm_vcpu_on_spin(), the loop counter 'i' is incorrectly written to
    last_boosted_vcpu instead of the actual vCPU index 'idx'. This causes
    last_boosted_vcpu to store the loop iteration count rather than the
    vCPU index, leading to incorrect round-robin behavior in subsequent
    directed yield operations.
    
    Fix this by using 'idx' instead of 'i' in the assignment.
    
    Signed-off-by: Wanpeng Li <[email protected]>
    Reviewed-by: Sean Christopherson <[email protected]>
    Message-ID: <[email protected]>
    Cc: [email protected]
    Signed-off-by: Paolo Bonzini <[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:   Fri Dec 5 15:19:05 2025 -0800

    KVM: nVMX: Immediately refresh APICv controls as needed on nested VM-Exit
    
    commit 29763138830916f46daaa50e83e7f4f907a3236b upstream.
    
    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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: selftests: Add missing "break" in rseq_test's param parsing [+ + +]
Author: Gavin Shan <[email protected]>
Date:   Mon Nov 24 15:04:27 2025 +1000

    KVM: selftests: Add missing "break" in rseq_test's param parsing
    
    commit 1b9439c933b500cb24710bbd81fe56e9b0025b6f upstream.
    
    In commit 0297cdc12a87 ("KVM: selftests: Add option to rseq test to
    override /dev/cpu_dma_latency"), a 'break' is missed before the option
    'l' in the argument parsing loop, which leads to an unexpected core
    dump in atoi_paranoid(). It tries to get the latency from non-existent
    argument.
    
      host$ ./rseq_test -u
      Random seed: 0x6b8b4567
      Segmentation fault (core dumped)
    
    Add a 'break' before the option 'l' in the argument parsing loop to avoid
    the unexpected core dump.
    
    Fixes: 0297cdc12a87 ("KVM: selftests: Add option to rseq test to override /dev/cpu_dma_latency")
    Cc: [email protected] # v6.15+
    Signed-off-by: Gavin Shan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [sean: describe code change in shortlog]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: selftests: Forcefully override ARCH from x86_64 to x86 [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Tue Oct 7 15:30:57 2025 -0700

    KVM: selftests: Forcefully override ARCH from x86_64 to x86
    
    commit 17e5a9b77716564540d81f0c1e6082d28cf305c9 upstream.
    
    Forcefully override ARCH from x86_64 to x86 to handle the scenario where
    the user specifies ARCH=x86_64 on the command line.
    
    Fixes: 9af04539d474 ("KVM: selftests: Override ARCH for x86_64 instead of using ARCH_DIR")
    Cc: [email protected]
    Reported-by: David Matlack <[email protected]>
    Closes: https://lore.kernel.org/all/[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_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: TDX: Explicitly set user-return MSRs that *may* be clobbered by the TDX-Module [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Thu Oct 30 12:15:25 2025 -0700

    KVM: TDX: Explicitly set user-return MSRs that *may* be clobbered by the TDX-Module
    
    commit c0711f8c610e1634ed54fb04da1e82252730306a upstream.
    
    Set all user-return MSRs to their post-TD-exit value when preparing to run
    a TDX vCPU to ensure the value that KVM expects to be loaded after running
    the vCPU is indeed the value that's loaded in hardware.  If the TDX-Module
    doesn't actually enter the guest, i.e. doesn't do VM-Enter, then it won't
    "restore" VMM state, i.e. won't clobber user-return MSRs to their expected
    post-run values, in which case simply updating KVM's "cached" value will
    effectively corrupt the cache due to hardware still holding the original
    value.
    
    In theory, KVM could conditionally update the current user-return value if
    and only if tdh_vp_enter() succeeds, but in practice "success" doesn't
    guarantee the TDX-Module actually entered the guest, e.g. if the TDX-Module
    synthesizes an EPT Violation because it suspects a zero-step attack.
    
    Force-load the expected values instead of trying to decipher whether or
    not the TDX-Module restored/clobbered MSRs, as the risk doesn't justify
    the benefits.  Effectively avoiding four WRMSRs once per run loop (even if
    the vCPU is scheduled out, user-return MSRs only need to be reloaded if
    the CPU exits to userspace or runs a non-TDX vCPU) is likely in the noise
    when amortized over all entries, given the cost of running a TDX vCPU.
    E.g. the cost of the WRMSRs is somewhere between ~300 and ~500 cycles,
    whereas the cost of a _single_ roundtrip to/from a TDX guest is thousands
    of cycles.
    
    Fixes: e0b4f31a3c65 ("KVM: TDX: restore user ret MSRs")
    Cc: [email protected]
    Cc: Yan Zhao <[email protected]>
    Cc: Xiaoyao Li <[email protected]>
    Cc: Rick Edgecombe <[email protected]>
    Reviewed-by: Xiaoyao Li <[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: x86: Apply runtime updates to current CPUID during KVM_SET_CPUID{,2} [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Mon Dec 1 17:50:48 2025 -0800

    KVM: x86: Apply runtime updates to current CPUID during KVM_SET_CPUID{,2}
    
    commit e2b43fb25243d502ad36b07bab9de09f4b76fff9 upstream.
    
    When handling KVM_SET_CPUID{,2}, do runtime CPUID updates on the vCPU's
    current CPUID (and caps) prior to swapping in the incoming CPUID state so
    that KVM doesn't lose pending updates if the incoming CPUID is rejected,
    and to prevent a false failure on the equality check.
    
    Note, runtime updates are unconditionally performed on the incoming/new
    CPUID (and associated caps), i.e. clearing the dirty flag won't negatively
    affect the new CPUID.
    
    Fixes: 93da6af3ae56 ("KVM: x86: Defer runtime updates of dynamic CPUID bits until CPUID emulation")
    Reported-by: Igor Mammedov <[email protected]>
    Closes: https://lore.kernel.org/all/20251128123202.68424a95@imammedo
    Cc: [email protected]
    Acked-by: Igor Mammedov <[email protected]>
    Tested-by: Igor Mammedov <[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: 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]>

 
lib/crypto: riscv/chacha: Avoid s0/fp register [+ + +]
Author: Vivian Wang <[email protected]>
Date:   Tue Dec 2 13:25:07 2025 +0800

    lib/crypto: riscv/chacha: Avoid s0/fp register
    
    commit 43169328c7b4623b54b7713ec68479cebda5465f upstream.
    
    In chacha_zvkb, avoid using the s0 register, which is the frame pointer,
    by reallocating KEY0 to t5. This makes stack traces available if e.g. a
    crash happens in chacha_zvkb.
    
    No frame pointer maintenance is otherwise required since this is a leaf
    function.
    
    Signed-off-by: Vivian Wang <[email protected]>
    Fixes: bb54668837a0 ("crypto: riscv - add vector crypto accelerated ChaCha20")
    Cc: [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/crypto: riscv: Add poly1305-core.S to .gitignore [+ + +]
Author: Charles Mirabile <[email protected]>
Date:   Fri Dec 12 13:47:17 2025 -0500

    lib/crypto: riscv: Add poly1305-core.S to .gitignore
    
    commit 5a0b1882506858b12cc77f0e2439a5f3c5052761 upstream.
    
    poly1305-core.S is an auto-generated file, so it should be ignored.
    
    Fixes: bef9c7559869 ("lib/crypto: riscv/poly1305: Import OpenSSL/CRYPTOGAMS implementation")
    Cc: [email protected]
    Signed-off-by: Charles Mirabile <[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/crypto: riscv: Depend on RISCV_EFFICIENT_VECTOR_UNALIGNED_ACCESS [+ + +]
Author: Eric Biggers <[email protected]>
Date:   Sat Dec 6 13:37:50 2025 -0800

    lib/crypto: riscv: Depend on RISCV_EFFICIENT_VECTOR_UNALIGNED_ACCESS
    
    commit 1cd5bb6e9e027bab33aafd58fe8340124869ba62 upstream.
    
    Replace the RISCV_ISA_V dependency of the RISC-V crypto code with
    RISCV_EFFICIENT_VECTOR_UNALIGNED_ACCESS, which implies RISCV_ISA_V as
    well as vector unaligned accesses being efficient.
    
    This is necessary because this code assumes that vector unaligned
    accesses are supported and are efficient.  (It does so to avoid having
    to use lots of extra vsetvli instructions to switch the element width
    back and forth between 8 and either 32 or 64.)
    
    This was omitted from the code originally just because the RISC-V kernel
    support for detecting this feature didn't exist yet.  Support has now
    been added, but it's fragmented into per-CPU runtime detection, a
    command-line parameter, and a kconfig option.  The kconfig option is the
    only reasonable way to do it, though, so let's just rely on that.
    
    Fixes: eb24af5d7a05 ("crypto: riscv - add vector crypto accelerated AES-{ECB,CBC,CTR,XTS}")
    Fixes: bb54668837a0 ("crypto: riscv - add vector crypto accelerated ChaCha20")
    Fixes: 600a3853dfa0 ("crypto: riscv - add vector crypto accelerated GHASH")
    Fixes: 8c8e40470ffe ("crypto: riscv - add vector crypto accelerated SHA-{256,224}")
    Fixes: b3415925a08b ("crypto: riscv - add vector crypto accelerated SHA-{512,384}")
    Fixes: 563a5255afa2 ("crypto: riscv - add vector crypto accelerated SM3")
    Fixes: b8d06352bbf3 ("crypto: riscv - add vector crypto accelerated SM4")
    Cc: [email protected]
    Reported-by: Vivian Wang <[email protected]>
    Closes: https://lore.kernel.org/r/[email protected]/
    Reviewed-by: Jerry Shih <[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/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]>

 
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]>

 
libperf cpumap: Fix perf_cpu_map__max for an empty/NULL map [+ + +]
Author: Ian Rogers <[email protected]>
Date:   Wed Dec 3 13:47:01 2025 -0800

    libperf cpumap: Fix perf_cpu_map__max for an empty/NULL map
    
    [ Upstream commit a0a4173631bfcfd3520192c0a61cf911d6a52c3a ]
    
    Passing an empty map to perf_cpu_map__max triggered a SEGV. Explicitly
    test for the empty map.
    
    Reported-by: Ingo Molnar <[email protected]>
    Closes: https://lore.kernel.org/linux-perf-users/[email protected]/
    Tested-by: Ingo Molnar <[email protected]>
    Signed-off-by: Ian Rogers <[email protected]>
    Tested-by: Thomas Richter <[email protected]>
    Signed-off-by: Namhyung Kim <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Linux: Linux 6.18.3 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Fri Jan 2 12:57:31 2026 +0100

    Linux 6.18.3
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Brett A C Sheffield <[email protected]>
    Tested-by: Salvatore Bonaccorso <[email protected]>
    Tested-by: Ronald Warsow <[email protected]>
    Tested-by: Takeshi Ogasawara <[email protected]>
    Tested-by: Ron Economos <[email protected]>
    Tested-by: Peter Schneider <[email protected]>
    Tested-by: Justin M. Forbes <[email protected]>
    Tested-by: Linux Kernel Functional Testing <[email protected]>
    Tested-by: Jeffrin Jose T <[email protected]>
    Tested-by: Dileep Malepu [email protected]
    Tested-by: Miguel Ojeda <[email protected]>
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Jon Hunter <[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]>

 
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: iris: Add sanity check for stop streaming [+ + +]
Author: Wangao Wang <[email protected]>
Date:   Mon Oct 27 17:35:59 2025 +0800

    media: iris: Add sanity check for stop streaming
    
    commit ad699fa78b59241c9d71a8cafb51525f3dab04d4 upstream.
    
    Add sanity check in iris_vb2_stop_streaming. If inst->state is
    already IRIS_INST_ERROR, we should skip the stream_off operation
    because it would still send packets to the firmware.
    
    In iris_kill_session, inst->state is set to IRIS_INST_ERROR and
    session_close is executed, which will kfree(inst_hfi_gen2->packet).
    If stop_streaming is called afterward, it will cause a crash.
    
    Fixes: 11712ce70f8e5 ("media: iris: implement vb2 streaming ops")
    Cc: [email protected]
    Reviewed-by: Bryan O'Donoghue <[email protected]>
    Reviewed-by: Dikshita Agarwal <[email protected]>
    Signed-off-by: Wangao Wang <[email protected]>
    Reviewed-by: Vikash Garodia <[email protected]>
    [bod: remove qcom from patch title]
    Signed-off-by: Bryan O'Donoghue <[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: 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: 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]>

 
mei: Fix error handling in mei_register [+ + +]
Author: Ma Ke <[email protected]>
Date:   Tue Nov 4 10:01:33 2025 +0800

    mei: Fix error handling in mei_register
    
    commit a6dab2f61d23c1eb32f1d08fa7b4919a2478950b upstream.
    
    mei_register() fails to release the device reference in error paths
    after device_initialize(). During normal device registration, the
    reference is properly handled through mei_deregister() which calls
    device_destroy(). However, in error handling paths (such as cdev_alloc
    failure, cdev_add failure, etc.), missing put_device() calls cause
    reference count leaks, preventing the device's release function
    (mei_device_release) from being called and resulting in memory leaks
    of mei_device.
    
    Found by code review.
    
    Cc: stable <[email protected]>
    Fixes: 7704e6be4ed2 ("mei: hook mei_device on class device")
    Signed-off-by: Ma Ke <[email protected]>
    Acked-by: Alexander Usyskin <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mei: gsc: add dependency on Xe driver [+ + +]
Author: Junxiao Chang <[email protected]>
Date:   Sun Nov 9 17:35:33 2025 +0200

    mei: gsc: add dependency on Xe driver
    
    commit 5d92c3b41f0bddfa416130c6e1b424414f3d2acf upstream.
    
    INTEL_MEI_GSC depends on either i915 or Xe
    and can be present when either of above is present.
    
    Cc: stable <[email protected]>
    Fixes: 87a4c85d3a3e ("drm/xe/gsc: add gsc device support")
    Tested-by: Baoli Zhang <[email protected]>
    Signed-off-by: Junxiao Chang <[email protected]>
    Signed-off-by: Alexander Usyskin <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[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]>

MIPS: ftrace: Fix memory corruption when kernel is located beyond 32 bits [+ + +]
Author: Gregory CLEMENT <[email protected]>
Date:   Fri Nov 28 09:30:06 2025 +0100

    MIPS: ftrace: Fix memory corruption when kernel is located beyond 32 bits
    
    [ Upstream commit 36dac9a3dda1f2bae343191bc16b910c603cac25 ]
    
    Since commit e424054000878 ("MIPS: Tracing: Reduce the overhead of
    dynamic Function Tracer"), the macro UASM_i_LA_mostly has been used,
    and this macro can generate more than 2 instructions. At the same
    time, the code in ftrace assumes that no more than 2 instructions can
    be generated, which is why it stores them in an int[2] array. However,
    as previously noted, the macro UASM_i_LA_mostly (and now UASM_i_LA)
    causes a buffer overflow when _mcount is beyond 32 bits. This leads to
    corruption of the variables located in the __read_mostly section.
    
    This corruption was observed because the variable
    __cpu_primary_thread_mask was corrupted, causing a hang very early
    during boot.
    
    This fix prevents the corruption by avoiding the generation of
    instructions if they could exceed 2 instructions in
    length. Fortunately, insn_la_mcount is only used if the instrumented
    code is located outside the kernel code section, so dynamic ftrace can
    still be used, albeit in a more limited scope. This is still
    preferable to corrupting memory and/or crashing the kernel.
    
    Signed-off-by: Gregory CLEMENT <[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]>

mlxsw: spectrum_router: Fix possible neighbour reference count leak [+ + +]
Author: Ido Schimmel <[email protected]>
Date:   Tue Dec 2 18:44:11 2025 +0100

    mlxsw: spectrum_router: Fix possible neighbour reference count leak
    
    [ Upstream commit b6b638bda240395dff49a87403b2e32493e56d2a ]
    
    mlxsw_sp_router_schedule_work() takes a reference on a neighbour,
    expecting a work item to release it later on. However, we might fail to
    schedule the work item, in which case the neighbour reference count will
    be leaked.
    
    Fix by taking the reference just before scheduling the work item. Note
    that mlxsw_sp_router_schedule_work() can receive a NULL neighbour
    pointer, but neigh_clone() handles that correctly.
    
    Spotted during code review, did not actually observe the reference count
    leak.
    
    Fixes: 151b89f6025a ("mlxsw: spectrum_router: Reuse work neighbor initialization in work scheduler")
    Reviewed-by: Petr Machata <[email protected]>
    Signed-off-by: Ido Schimmel <[email protected]>
    Signed-off-by: Petr Machata <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/ec2934ae4aca187a8d8c9329a08ce93cca411378.1764695650.git.petrm@nvidia.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mm/huge_memory: add pmd folio to ds_queue in do_huge_zero_wp_pmd() [+ + +]
Author: Wei Yang <[email protected]>
Date:   Wed Oct 8 09:54:52 2025 +0000

    mm/huge_memory: add pmd folio to ds_queue in do_huge_zero_wp_pmd()
    
    commit 2a1351cd4176ee1809b0900d386919d03b7652f8 upstream.
    
    We add pmd folio into ds_queue on the first page fault in
    __do_huge_pmd_anonymous_page(), so that we can split it in case of memory
    pressure.  This should be the same for a pmd folio during wp page fault.
    
    Commit 1ced09e0331f ("mm: allocate THP on hugezeropage wp-fault") miss to
    add it to ds_queue, which means system may not reclaim enough memory in
    case of memory pressure even the pmd folio is under used.
    
    Move deferred_split_folio() into map_anon_folio_pmd() to make the pmd
    folio installation consistent.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 1ced09e0331f ("mm: allocate THP on hugezeropage wp-fault")
    Signed-off-by: Wei Yang <[email protected]>
    Acked-by: David Hildenbrand <[email protected]>
    Reviewed-by: Lance Yang <[email protected]>
    Reviewed-by: Dev Jain <[email protected]>
    Acked-by: Usama Arif <[email protected]>
    Reviewed-by: Zi Yan <[email protected]>
    Reviewed-by: Baolin Wang <[email protected]>
    Cc: Matthew Wilcox <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/ksm: fix exec/fork inheritance support for prctl [+ + +]
Author: xu xin <[email protected]>
Date:   Tue Oct 7 18:28:21 2025 +0800

    mm/ksm: fix exec/fork inheritance support for prctl
    
    commit 590c03ca6a3fbb114396673314e2aa483839608b upstream.
    
    Patch series "ksm: fix exec/fork inheritance", v2.
    
    This series fixes exec/fork inheritance.  See the detailed description of
    the issue below.
    
    
    This patch (of 2):
    
    Background
    ==========
    
    commit d7597f59d1d33 ("mm: add new api to enable ksm per process")
    introduced MMF_VM_MERGE_ANY for mm->flags, and allowed user to set it by
    prctl() so that the process's VMAs are forcibly scanned by ksmd.
    
    Subsequently, the 3c6f33b7273a ("mm/ksm: support fork/exec for prctl")
    supported inheriting the MMF_VM_MERGE_ANY flag when a task calls execve().
    
    Finally, commit 3a9e567ca45fb ("mm/ksm: fix ksm exec support for prctl")
    fixed the issue that ksmd doesn't scan the mm_struct with MMF_VM_MERGE_ANY
    by adding the mm_slot to ksm_mm_head in __bprm_mm_init().
    
    Problem
    =======
    
    In some extreme scenarios, however, this inheritance of MMF_VM_MERGE_ANY
    during exec/fork can fail.  For example, when the scanning frequency of
    ksmd is tuned extremely high, a process carrying MMF_VM_MERGE_ANY may
    still fail to pass it to the newly exec'd process.  This happens because
    ksm_execve() is executed too early in the do_execve flow (prematurely
    adding the new mm_struct to the ksm_mm_slot list).
    
    As a result, before do_execve completes, ksmd may have already performed a
    scan and found that this new mm_struct has no VM_MERGEABLE VMAs, thus
    clearing its MMF_VM_MERGE_ANY flag.  Consequently, when the new program
    executes, the flag MMF_VM_MERGE_ANY inheritance missed.
    
    Root reason
    ===========
    
    commit d7597f59d1d33 ("mm: add new api to enable ksm per process") clear
    the flag MMF_VM_MERGE_ANY when ksmd found no VM_MERGEABLE VMAs.
    
    Solution
    ========
    
    Firstly, Don't clear MMF_VM_MERGE_ANY when ksmd found no VM_MERGEABLE
    VMAs, because perhaps their mm_struct has just been added to ksm_mm_slot
    list, and its process has not yet officially started running or has not
    yet performed mmap/brk to allocate anonymous VMAS.
    
    Secondly, recheck MMF_VM_MERGEABLE again if a process takes
    MMF_VM_MERGE_ANY, and create a mm_slot and join it into ksm_scan_list
    again.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 3c6f33b7273a ("mm/ksm: support fork/exec for prctl")
    Fixes: d7597f59d1d3 ("mm: add new api to enable ksm per process")
    Signed-off-by: xu xin <[email protected]>
    Cc: Stefan Roesch <[email protected]>
    Cc: David Hildenbrand <[email protected]>
    Cc: Jinjiang Tu <[email protected]>
    Cc: Wang Yaxin <[email protected]>
    Cc: Yang Yang <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/slab: introduce kvfree_rcu_barrier_on_cache() for cache destruction [+ + +]
Author: Harry Yoo <[email protected]>
Date:   Mon Dec 8 00:41:47 2025 +0900

    mm/slab: introduce kvfree_rcu_barrier_on_cache() for cache destruction
    
    commit 0f35040de59371ad542b915d7b91176c9910dadc upstream.
    
    Currently, kvfree_rcu_barrier() flushes RCU sheaves across all slab
    caches when a cache is destroyed. This is unnecessary; only the RCU
    sheaves belonging to the cache being destroyed need to be flushed.
    
    As suggested by Vlastimil Babka, introduce a weaker form of
    kvfree_rcu_barrier() that operates on a specific slab cache.
    
    Factor out flush_rcu_sheaves_on_cache() from flush_all_rcu_sheaves() and
    call it from flush_all_rcu_sheaves() and kvfree_rcu_barrier_on_cache().
    
    Call kvfree_rcu_barrier_on_cache() instead of kvfree_rcu_barrier() on
    cache destruction.
    
    The performance benefit is evaluated on a 12 core 24 threads AMD Ryzen
    5900X machine (1 socket), by loading slub_kunit module.
    
    Before:
      Total calls: 19
      Average latency (us): 18127
      Total time (us): 344414
    
    After:
      Total calls: 19
      Average latency (us): 10066
      Total time (us): 191264
    
    Two performance regression have been reported:
      - stress module loader test's runtime increases by 50-60% (Daniel)
      - internal graphics test's runtime on Tegra234 increases by 35% (Jon)
    
    They are fixed by this change.
    
    Suggested-by: Vlastimil Babka <[email protected]>
    Fixes: ec66e0d59952 ("slab: add sheaf support for batching kfree_rcu() operations")
    Cc: [email protected]
    Link: https://lore.kernel.org/linux-mm/[email protected]
    Reported-and-tested-by: Daniel Gomez <[email protected]>
    Closes: https://lore.kernel.org/linux-mm/[email protected]
    Reported-and-tested-by: Jon Hunter <[email protected]>
    Closes: https://lore.kernel.org/linux-mm/[email protected]
    Signed-off-by: Harry Yoo <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vlastimil Babka <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/slub: reset KASAN tag in defer_free() before accessing freed memory [+ + +]
Author: Deepanshu Kartikey <[email protected]>
Date:   Wed Dec 10 07:50:24 2025 +0530

    mm/slub: reset KASAN tag in defer_free() before accessing freed memory
    
    commit 53ca00a19d345197a37a1bf552e8d1e7b091666c upstream.
    
    When CONFIG_SLUB_TINY is enabled, kfree_nolock() calls kasan_slab_free()
    before defer_free(). On ARM64 with MTE (Memory Tagging Extension),
    kasan_slab_free() poisons the memory and changes the tag from the
    original (e.g., 0xf3) to a poison tag (0xfe).
    
    When defer_free() then tries to write to the freed object to build the
    deferred free list via llist_add(), the pointer still has the old tag,
    causing a tag mismatch and triggering a KASAN use-after-free report:
    
      BUG: KASAN: slab-use-after-free in defer_free+0x3c/0xbc mm/slub.c:6537
      Write at addr f3f000000854f020 by task kworker/u8:6/983
      Pointer tag: [f3], memory tag: [fe]
    
    Fix this by calling kasan_reset_tag() before accessing the freed memory.
    This is safe because defer_free() is part of the allocator itself and is
    expected to manipulate freed memory for bookkeeping purposes.
    
    Fixes: af92793e52c3 ("slab: Introduce kmalloc_nolock() and kfree_nolock().")
    Cc: [email protected]
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=7a25305a76d872abcfa1
    Tested-by: [email protected]
    Signed-off-by: Deepanshu Kartikey <[email protected]>
    Acked-by: Alexei Starovoitov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vlastimil Babka <[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]>

mmc: sdhci-of-arasan: Increase CD stable timeout to 2 seconds [+ + +]
Author: Sai Krishna Potthuri <[email protected]>
Date:   Fri Dec 12 12:05:09 2025 +0530

    mmc: sdhci-of-arasan: Increase CD stable timeout to 2 seconds
    
    commit a9c4c9085ec8ce3ce01be21b75184789e74f5f19 upstream.
    
    On Xilinx/AMD platforms, the CD stable bit take slightly longer than
    one second(about an additional 100ms) to assert after a host
    controller reset. Although no functional failure observed with the
    existing one second delay but to ensure reliable initialization, increase
    the CD stable timeout to 2 seconds.
    
    Fixes: e251709aaddb ("mmc: sdhci-of-arasan: Ensure CD logic stabilization before power-up")
    Cc: [email protected]
    Signed-off-by: Sai Krishna Potthuri <[email protected]>
    Acked-by: Adrian Hunter <[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:   Fri Dec 5 19:55:17 2025 +0100

    mptcp: avoid deadlock on fallback while reinjecting
    
    commit ffb8c27b0539dd90262d1021488e7817fae57c42 upstream.
    
    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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: pm: ignore unknown endpoint flags [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Fri Dec 5 19:55:14 2025 +0100

    mptcp: pm: ignore unknown endpoint flags
    
    commit 0ace3297a7301911e52d8195cb1006414897c859 upstream.
    
    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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: schedule rtx timer only after pushing data [+ + +]
Author: Paolo Abeni <[email protected]>
Date:   Fri Dec 5 19:55:16 2025 +0100

    mptcp: schedule rtx timer only after pushing data
    
    commit 2ea6190f42d0416a4310e60a7fcb0b49fcbbd4fb upstream.
    
    The MPTCP protocol usually schedule the retransmission timer only
    when there is some chances for such retransmissions to happen.
    
    With a notable exception: __mptcp_push_pending() currently schedule
    such timer unconditionally, potentially leading to unnecessary rtx
    timer expiration.
    
    The issue is present since the blamed commit below but become easily
    reproducible after commit 27b0e701d387 ("mptcp: drop bogus optimization
    in __mptcp_check_push()")
    
    Fixes: 33d41c9cd74c ("mptcp: more accurate timeout")
    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-3-9e4781a6c1b8@kernel.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net/handshake: duplicate handshake cancellations leak socket [+ + +]
Author: Scott Mayhew <[email protected]>
Date:   Tue Dec 9 14:30:15 2025 -0500

    net/handshake: duplicate handshake cancellations leak socket
    
    [ Upstream commit 15564bd67e2975002f2a8e9defee33e321d3183f ]
    
    When a handshake request is cancelled it is removed from the
    handshake_net->hn_requests list, but it is still present in the
    handshake_rhashtbl until it is destroyed.
    
    If a second cancellation request arrives for the same handshake request,
    then remove_pending() will return false... and assuming
    HANDSHAKE_F_REQ_COMPLETED isn't set in req->hr_flags, we'll continue
    processing through the out_true label, where we put another reference on
    the sock and a refcount underflow occurs.
    
    This can happen for example if a handshake times out - particularly if
    the SUNRPC client sends the AUTH_TLS probe to the server but doesn't
    follow it up with the ClientHello due to a problem with tlshd.  When the
    timeout is hit on the server, the server will send a FIN, which triggers
    a cancellation request via xs_reset_transport().  When the timeout is
    hit on the client, another cancellation request happens via
    xs_tls_handshake_sync().
    
    Add a test_and_set_bit(HANDSHAKE_F_REQ_COMPLETED) in the pending cancel
    path so duplicate cancels can be detected.
    
    Fixes: 3b3009ea8abb ("net/handshake: Create a NETLINK service for handling handshake requests")
    Suggested-by: Chuck Lever <[email protected]>
    Signed-off-by: Scott Mayhew <[email protected]>
    Reviewed-by: Chuck Lever <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/handshake: restore destructor on submit failure [+ + +]
Author: caoping <[email protected]>
Date:   Thu Dec 4 01:10:58 2025 -0800

    net/handshake: restore destructor on submit failure
    
    commit 6af2a01d65f89e73c1cbb9267f8880d83a88cee4 upstream.
    
    handshake_req_submit() replaces sk->sk_destruct but never restores it when
    submission fails before the request is hashed. handshake_sk_destruct() then
    returns early and the original destructor never runs, leaking the socket.
    Restore sk_destruct on the error path.
    
    Fixes: 3b3009ea8abb ("net/handshake: Create a NETLINK service for handling handshake requests")
    Reviewed-by: Chuck Lever <[email protected]>
    Cc: [email protected]
    Signed-off-by: caoping <[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/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: 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: Fix double unregister of HCA_PORTS component [+ + +]
Author: Gerd Bayer <[email protected]>
Date:   Tue Dec 2 12:12:57 2025 +0100

    net/mlx5: Fix double unregister of HCA_PORTS component
    
    [ Upstream commit 6a107cfe9c99a079e578a4c5eb70038101a3599f ]
    
    Clear hca_devcom_comp in device's private data after unregistering it in
    LAG teardown. Otherwise a slightly lagging second pass through
    mlx5_unload_one() might try to unregister it again and trip over
    use-after-free.
    
    On s390 almost all PCI level recovery events trigger two passes through
    mxl5_unload_one() - one through the poll_health() method and one through
    mlx5_pci_err_detected() as callback from generic PCI error recovery.
    While testing PCI error recovery paths with more kernel debug features
    enabled, this issue reproducibly led to kernel panics with the following
    call chain:
    
     Unable to handle kernel pointer dereference in virtual kernel address space
     Failing address: 6b6b6b6b6b6b6000 TEID: 6b6b6b6b6b6b6803 ESOP-2 FSI
     Fault in home space mode while using kernel ASCE.
     AS:00000000705c4007 R3:0000000000000024
     Oops: 0038 ilc:3 [#1]SMP
    
     CPU: 14 UID: 0 PID: 156 Comm: kmcheck Kdump: loaded Not tainted
          6.18.0-20251130.rc7.git0.16131a59cab1.300.fc43.s390x+debug #1 PREEMPT
    
     Krnl PSW : 0404e00180000000 0000020fc86aa1dc (__lock_acquire+0x5c/0x15f0)
                R:0 T:1 IO:0 EX:0 Key:0 M:1 W:0 P:0 AS:3 CC:2 PM:0 RI:0 EA:3
     Krnl GPRS: 0000000000000000 0000020f00000001 6b6b6b6b6b6b6c33 0000000000000000
                0000000000000000 0000000000000000 0000000000000001 0000000000000000
                0000000000000000 0000020fca28b820 0000000000000000 0000010a1ced8100
                0000010a1ced8100 0000020fc9775068 0000018fce14f8b8 0000018fce14f7f8
     Krnl Code: 0000020fc86aa1cc: e3b003400004        lg      %r11,832
                0000020fc86aa1d2: a7840211           brc     8,0000020fc86aa5f4
               *0000020fc86aa1d6: c09000df0b25       larl    %r9,0000020fca28b820
               >0000020fc86aa1dc: d50790002000       clc     0(8,%r9),0(%r2)
                0000020fc86aa1e2: a7840209           brc     8,0000020fc86aa5f4
                0000020fc86aa1e6: c0e001100401       larl    %r14,0000020fca8aa9e8
                0000020fc86aa1ec: c01000e25a00       larl    %r1,0000020fca2f55ec
                0000020fc86aa1f2: a7eb00e8           aghi    %r14,232
    
     Call Trace:
      __lock_acquire+0x5c/0x15f0
      lock_acquire.part.0+0xf8/0x270
      lock_acquire+0xb0/0x1b0
      down_write+0x5a/0x250
      mlx5_detach_device+0x42/0x110 [mlx5_core]
      mlx5_unload_one_devl_locked+0x50/0xc0 [mlx5_core]
      mlx5_unload_one+0x42/0x60 [mlx5_core]
      mlx5_pci_err_detected+0x94/0x150 [mlx5_core]
      zpci_event_attempt_error_recovery+0xcc/0x388
    
    Fixes: 5a977b5833b7 ("net/mlx5: Lag, move devcom registration to LAG layer")
    Signed-off-by: Gerd Bayer <[email protected]>
    Reviewed-by: Moshe Shemesh <[email protected]>
    Acked-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, 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/mlx5: make enable_mpesw idempotent [+ + +]
Author: Moshe Shemesh <[email protected]>
Date:   Mon Dec 1 17:13:27 2025 +0200

    net/mlx5: make enable_mpesw idempotent
    
    [ Upstream commit cd7671ef4cf2edf73cd2a3dca3a2f522a4525bf5 ]
    
    The enable_mpesw() function returns -EINVAL if ldev->mode is not
    MLX5_LAG_MODE_NONE. This means attempting to enable MPESW mode when it's
    already enabled will fail. In contrast, disable_mpesw() properly checks
    if the mode is MLX5_LAG_MODE_MPESW before proceeding, making it
    naturally idempotent and safe to call multiple times.
    
    Fix enable_mpesw() to return success if mpesw is already enabled.
    
    Fixes: a32327a3a02c ("net/mlx5: Lag, Control MultiPort E-Switch single FDB mode")
    Signed-off-by: Moshe Shemesh <[email protected]>
    Reviewed-by: Shay Drori <[email protected]>
    Signed-off-by: Tariq Toukan <[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/mlx5: Serialize firmware reset with devlink [+ + +]
Author: Shay Drory <[email protected]>
Date:   Tue Dec 9 14:56:13 2025 +0200

    net/mlx5: Serialize firmware reset with devlink
    
    [ Upstream commit 367e501f8b095eca08d2eb0ba4ccea5b5e82c169 ]
    
    The firmware reset mechanism can be triggered by asynchronous events,
    which may race with other devlink operations like devlink reload or
    devlink dev eswitch set, potentially leading to inconsistent states.
    
    This patch addresses the race by using the devl_lock to serialize the
    firmware reset against other devlink operations. When a reset is
    requested, the driver attempts to acquire the lock. If successful, it
    sets a flag to block devlink reload or eswitch changes, ACKs the reset
    to firmware and then releases the lock. If the lock is already held by
    another operation, the driver NACKs the firmware reset request,
    indicating that the reset cannot proceed.
    
    Firmware reset does not keep the devl_lock and instead uses an internal
    firmware reset bit. This is because firmware resets can be triggered by
    asynchronous events, and processed in different threads. It is illegal
    and unsafe to acquire a lock in one thread and attempt to release it in
    another, as lock ownership is intrinsically thread-specific.
    
    This change ensures that firmware resets and other devlink operations
    are mutually exclusive during the critical reset request phase,
    preventing race conditions.
    
    Fixes: 38b9f903f22b ("net/mlx5: Handle sync reset request event")
    Signed-off-by: Shay Drory <[email protected]>
    Reviewed-by: Mateusz Berezecki <[email protected]>
    Reviewed-by: Moshe Shemesh <[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/mlx5e: Avoid unregistering PSP twice [+ + +]
Author: Cosmin Ratiu <[email protected]>
Date:   Mon Dec 1 17:13:28 2025 +0200

    net/mlx5e: Avoid unregistering PSP twice
    
    [ Upstream commit 35e93736f69963337912594eb3951ab320b77521 ]
    
    PSP is unregistered twice in:
    _mlx5e_remove -> mlx5e_psp_unregister
    mlx5e_nic_cleanup -> mlx5e_psp_unregister
    
    This leads to a refcount underflow in some conditions:
    ------------[ cut here ]------------
    refcount_t: underflow; use-after-free.
    WARNING: CPU: 2 PID: 1694 at lib/refcount.c:28 refcount_warn_saturate+0xd8/0xe0
    [...]
     mlx5e_psp_unregister+0x26/0x50 [mlx5_core]
     mlx5e_nic_cleanup+0x26/0x90 [mlx5_core]
     mlx5e_remove+0xe6/0x1f0 [mlx5_core]
     auxiliary_bus_remove+0x18/0x30
     device_release_driver_internal+0x194/0x1f0
     bus_remove_device+0xc6/0x130
     device_del+0x159/0x3c0
     mlx5_rescan_drivers_locked+0xbc/0x2a0 [mlx5_core]
    [...]
    
    Do not directly remove psp from the _mlx5e_remove path, the PSP cleanup
    happens as part of profile cleanup.
    
    Fixes: 89ee2d92f66c ("net/mlx5e: Support PSP offload functionality")
    Signed-off-by: Cosmin Ratiu <[email protected]>
    Reviewed-by: Dragos Tatulea <[email protected]>
    Signed-off-by: Tariq Toukan <[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/mlx5e: Don't include PSP in the hard MTU calculations [+ + +]
Author: Cosmin Ratiu <[email protected]>
Date:   Tue Dec 9 14:56:17 2025 +0200

    net/mlx5e: Don't include PSP in the hard MTU calculations
    
    [ Upstream commit 4198a14c8c6252fd1191afaa742dd515dcaf3487 ]
    
    Commit [1] added the 40 bytes required by the PSP header+trailer and the
    UDP header to MLX5E_ETH_HARD_MTU, which limits the device-wide max
    software MTU that could be set. This is not okay, because most packets
    are not PSP packets and it doesn't make sense to always reserve space
    for headers which won't get added in most cases.
    
    As it turns out, for TCP connections, PSP overhead is already taken into
    account in the TCP MSS calculations via inet_csk(sk)->icsk_ext_hdr_len.
    This was added in commit [2]. This means that the extra space reserved
    in the hard MTU for mlx5 ends up unused and wasted.
    
    Remove the unnecessary 40 byte reservation from hard MTU.
    
    [1] commit e5a1861a298e ("net/mlx5e: Implement PSP Tx data path")
    [2] commit e97269257fe4 ("net: psp: update the TCP MSS to reflect PSP
    packet overhead")
    
    Fixes: e5a1861a298e ("net/mlx5e: Implement PSP Tx data path")
    Signed-off-by: Cosmin Ratiu <[email protected]>
    Reviewed-by: Shahar Shitrit <[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/mlx5e: Trigger neighbor resolution for unresolved destinations [+ + +]
Author: Jianbo Liu <[email protected]>
Date:   Tue Dec 9 14:56:15 2025 +0200

    net/mlx5e: Trigger neighbor resolution for unresolved destinations
    
    [ Upstream commit 9ab89bde13e5251e1d0507e1cc426edcdfe19142 ]
    
    When initializing the MAC addresses for an outbound IPsec packet offload
    rule in mlx5e_ipsec_init_macs, the call to dst_neigh_lookup is used to
    find the next-hop neighbor (typically the gateway in tunnel mode).
    This call might create a new neighbor entry if one doesn't already
    exist. This newly created entry starts in the INCOMPLETE state, as the
    kernel hasn't yet sent an ARP or NDISC probe to resolve the MAC
    address. In this case, neigh_ha_snapshot will correctly return an
    all-zero MAC address.
    
    IPsec packet offload requires the actual next-hop MAC address to
    program the rule correctly. If the neighbor state is INCOMPLETE when
    the rule is created, the hardware rule is programmed with an all-zero
    destination MAC address. Packets sent using this rule will be
    subsequently dropped by the receiving network infrastructure or host.
    
    This patch adds a check specifically for the outbound offload path. If
    neigh_ha_snapshot returns an all-zero MAC address, it proactively
    calls neigh_event_send(n, NULL). This ensures the kernel immediately
    sends the initial ARP or NDISC probe if one isn't already pending,
    accelerating the resolution process. This helps prevent the hardware
    rule from being programmed with an invalid MAC address and avoids
    packet drops due to unresolved neighbors.
    
    Fixes: 71670f766b8f ("net/mlx5e: Support routed networks during IPsec MACs initialization")
    Signed-off-by: Jianbo Liu <[email protected]>
    Reviewed-by: Leon Romanovsky <[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/mlx5e: Use ip6_dst_lookup instead of ipv6_dst_lookup_flow for MAC init [+ + +]
Author: Jianbo Liu <[email protected]>
Date:   Tue Dec 9 14:56:14 2025 +0200

    net/mlx5e: Use ip6_dst_lookup instead of ipv6_dst_lookup_flow for MAC init
    
    [ Upstream commit e35d7da8dd9e55b37c3e8ab548f6793af0c2ab49 ]
    
    Replace ipv6_stub->ipv6_dst_lookup_flow() with ip6_dst_lookup() in
    mlx5e_ipsec_init_macs() since IPsec transformations are not needed
    during Security Association setup - only basic routing information is
    required for nexthop MAC address resolution.
    
    This resolves an issue where XfrmOutNoStates error counter would be
    incremented when xfrm policy is configured before xfrm state, as the
    IPsec-aware routing function would attempt policy checks during SA
    initialization.
    
    Fixes: 71670f766b8f ("net/mlx5e: Support routed networks during IPsec MACs initialization")
    Signed-off-by: Jianbo Liu <[email protected]>
    Reviewed-by: Leon Romanovsky <[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/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: enetc: do not transmit redirected XDP frames when the link is down [+ + +]
Author: Wei Fang <[email protected]>
Date:   Thu Dec 11 10:09:19 2025 +0800

    net: enetc: do not transmit redirected XDP frames when the link is down
    
    [ Upstream commit 2939203ffee818f1e5ebd60bbb85a174d63aab9c ]
    
    In the current implementation, the enetc_xdp_xmit() always transmits
    redirected XDP frames even if the link is down, but the frames cannot
    be transmitted from TX BD rings when the link is down, so the frames
    are still kept in the TX BD rings. If the XDP program is uninstalled,
    users will see the following warning logs.
    
    fsl_enetc 0000:00:00.0 eno0: timeout for tx ring #6 clear
    
    More worse, the TX BD ring cannot work properly anymore, because the
    HW PIR and CIR are not equal after the re-initialization of the TX
    BD ring. At this point, the BDs between CIR and PIR are invalid,
    which will cause a hardware malfunction.
    
    Another reason is that there is internal context in the ring prefetch
    logic that will retain the state from the first incarnation of the ring
    and continue prefetching from the stale location when we re-initialize
    the ring. The internal context is only reset by an FLR. That is to say,
    for LS1028A ENETC, software cannot set the HW CIR and PIR when
    initializing the TX BD ring.
    
    It does not make sense to transmit redirected XDP frames when the link is
    down. Add a link status check to prevent transmission in this condition.
    This fixes part of the issue, but more complex cases remain. For example,
    the TX BD ring may still contain unsent frames when the link goes down.
    Those situations require additional patches, which will build on this
    one.
    
    Fixes: 9d2b68cc108d ("net: enetc: add support for XDP_REDIRECT")
    Signed-off-by: Wei Fang <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Reviewed-by: Hariprasad Kelam <[email protected]>
    Reviewed-by: Vladimir Oltean <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: fec: ERR007885 Workaround for XDP TX path [+ + +]
Author: Wei Fang <[email protected]>
Date:   Fri Nov 28 10:59:15 2025 +0800

    net: fec: ERR007885 Workaround for XDP TX path
    
    [ Upstream commit e8e032cd24dda7cceaa27bc2eb627f82843f0466 ]
    
    The ERR007885 will lead to a TDAR race condition for mutliQ when the
    driver sets TDAR and the UDMA clears TDAR simultaneously or in a small
    window (2-4 cycles). And it will cause the udma_tx and udma_tx_arbiter
    state machines to hang. Therefore, the commit 53bb20d1faba ("net: fec:
    add variable reg_desc_active to speed things up") and the commit
    a179aad12bad ("net: fec: ERR007885 Workaround for conventional TX") have
    added the workaround to fix the potential issue for the conventional TX
    path. Similarly, the XDP TX path should also have the potential hang
    issue, so add the workaround for XDP TX path.
    
    Fixes: 6d6b39f180b8 ("net: fec: add initial XDP support")
    Signed-off-by: Wei Fang <[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: 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: 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: marvell-88q2xxx: Fix clamped value in mv88q2xxx_hwmon_write [+ + +]
Author: Thorsten Blum <[email protected]>
Date:   Tue Dec 2 18:27:44 2025 +0100

    net: phy: marvell-88q2xxx: Fix clamped value in mv88q2xxx_hwmon_write
    
    commit c4cdf7376271bce5714c06d79ec67759b18910eb upstream.
    
    The local variable 'val' was never clamped to -75000 or 180000 because
    the return value of clamp_val() was not used. Fix this by assigning the
    clamped value back to 'val', and use clamp() instead of clamp_val().
    
    Cc: [email protected]
    Fixes: a557a92e6881 ("net: phy: marvell-88q2xxx: add support for temperature sensor")
    Signed-off-by: Thorsten Blum <[email protected]>
    Reviewed-by: Dimitri Fedrau <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: phy: realtek: allow CLKOUT to be disabled on RTL8211F(D)(I)-VD-CG [+ + +]
Author: Vladimir Oltean <[email protected]>
Date:   Tue Nov 18 01:40:31 2025 +0200

    net: phy: realtek: allow CLKOUT to be disabled on RTL8211F(D)(I)-VD-CG
    
    [ Upstream commit e1a31c41bef678afe0d99b7f0dc3711a80c68447 ]
    
    Add CLKOUT disable support for RTL8211F(D)(I)-VD-CG. Like with other PHY
    variants, this feature might be requested by customers when the clock
    output is not used, in order to reduce electromagnetic interference (EMI).
    
    In the common driver, the CLKOUT configuration is done through PHYCR2.
    The RTL_8211FVD_PHYID is singled out as not having that register, and
    execution in rtl8211f_config_init() returns early after commit
    2c67301584f2 ("net: phy: realtek: Avoid PHYCR2 access if PHYCR2 not
    present").
    
    But actually CLKOUT is configured through a different register for this
    PHY. Instead of pretending this is PHYCR2 (which it is not), just add
    some code for modifying this register inside the rtl8211f_disable_clk_out()
    function, and move that outside the code portion that runs only if
    PHYCR2 exists.
    
    In practice this reorders the PHYCR2 writes to disable PHY-mode EEE and
    to disable the CLKOUT for the normal RTL8211F variants, but this should
    be perfectly fine.
    
    It was not noted that RTL8211F(D)(I)-VD-CG would need a genphy_soft_reset()
    call after disabling the CLKOUT. Despite that, we do it out of caution
    and for symmetry with the other RTL8211F models.
    
    Co-developed-by: Clark Wang <[email protected]>
    Signed-off-by: Clark Wang <[email protected]>
    Signed-off-by: Vladimir Oltean <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 4f0638b12451 ("net: phy: RTL8211FVD: Restore disabling of PHY-mode EEE")
    Signed-off-by: Sasha Levin <[email protected]>

net: phy: realtek: create rtl8211f_config_phy_eee() helper [+ + +]
Author: Vladimir Oltean <[email protected]>
Date:   Tue Nov 18 01:40:33 2025 +0200

    net: phy: realtek: create rtl8211f_config_phy_eee() helper
    
    [ Upstream commit 4465ae435ddc0162d5033a543658449d53d46d08 ]
    
    To simplify the rtl8211f_config_init() control flow and get rid of
    "early" returns for PHYs where the PHYCR2 register is absent, move the
    entire logic sub-block that deals with disabling PHY-mode EEE to a
    separate function. There, it is much more obvious what the early
    "return 0" skips, and it becomes more difficult to accidentally skip
    unintended stuff.
    
    Signed-off-by: Vladimir Oltean <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 4f0638b12451 ("net: phy: RTL8211FVD: Restore disabling of PHY-mode EEE")
    Signed-off-by: Sasha Levin <[email protected]>

net: phy: realtek: eliminate has_phycr2 variable [+ + +]
Author: Vladimir Oltean <[email protected]>
Date:   Tue Nov 18 01:40:30 2025 +0200

    net: phy: realtek: eliminate has_phycr2 variable
    
    [ Upstream commit 910ac7bfb1af1ae4cd141ef80e03a6729213c189 ]
    
    This variable is assigned in rtl821x_probe() and used in
    rtl8211f_config_init(), which is more complex than it needs to be.
    Simply testing the same condition from rtl821x_probe() in
    rtl8211f_config_init() yields the same result (the PHY driver ID is a
    runtime invariant), but with one temporary variable less.
    
    Signed-off-by: Vladimir Oltean <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 4f0638b12451 ("net: phy: RTL8211FVD: Restore disabling of PHY-mode EEE")
    Signed-off-by: Sasha Levin <[email protected]>

net: phy: realtek: eliminate priv->phycr1 variable [+ + +]
Author: Vladimir Oltean <[email protected]>
Date:   Tue Nov 18 01:40:32 2025 +0200

    net: phy: realtek: eliminate priv->phycr1 variable
    
    [ Upstream commit bb78b71faf60d11a15f07e3390fcfd31e5e523bb ]
    
    Previous changes have replaced the machine-level priv->phycr2 with a
    high-level priv->disable_clk_out. This created a discrepancy with
    priv->phycr1 which is resolved here, for uniformity.
    
    One advantage of this new implementation is that we don't read
    priv->phycr1 in rtl821x_probe() if we're never going to modify it.
    
    We never test the positive return code from phy_modify_mmd_changed(), so
    we could just as well use phy_modify_mmd().
    
    I took the ALDPS feature description from commit d90db36a9e74 ("net:
    phy: realtek: add dt property to enable ALDPS mode") and transformed it
    into a function comment - the feature is sufficiently non-obvious to
    deserve that.
    
    Signed-off-by: Vladimir Oltean <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 4f0638b12451 ("net: phy: RTL8211FVD: Restore disabling of PHY-mode EEE")
    Signed-off-by: Sasha Levin <[email protected]>

net: phy: realtek: eliminate priv->phycr2 variable [+ + +]
Author: Vladimir Oltean <[email protected]>
Date:   Tue Nov 18 01:40:29 2025 +0200

    net: phy: realtek: eliminate priv->phycr2 variable
    
    [ Upstream commit 27033d06917758d47162581da7e9de8004049dee ]
    
    The RTL8211F(D)(I)-VD-CG PHY also has support for disabling the CLKOUT,
    and we'd like to introduce the "realtek,clkout-disable" property for
    that.
    
    But it isn't done through the PHYCR2 register, and it becomes awkward to
    have the driver pretend that it is. So just replace the machine-level
    "u16 phycr2" variable with a logical "bool disable_clk_out", which
    scales better to the other PHY as well.
    
    The change is a complete functional equivalent. Before, if the device
    tree property was absent, priv->phycr2 would contain the RTL8211F_CLKOUT_EN
    bit as read from hardware. Now, we don't save priv->phycr2, but we just
    don't call phy_modify_paged() on it. Also, we can simply call
    phy_modify_paged() with the "set" argument to 0.
    
    Signed-off-by: Vladimir Oltean <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 4f0638b12451 ("net: phy: RTL8211FVD: Restore disabling of PHY-mode EEE")
    Signed-off-by: Sasha Levin <[email protected]>

net: phy: RTL8211FVD: Restore disabling of PHY-mode EEE [+ + +]
Author: Ivan Galkin <[email protected]>
Date:   Tue Dec 2 10:07:42 2025 +0100

    net: phy: RTL8211FVD: Restore disabling of PHY-mode EEE
    
    [ Upstream commit 4f0638b12451112de4138689fa679315c8d388dc ]
    
    When support for RTL8211F(D)(I)-VD-CG was introduced in commit
    bb726b753f75 ("net: phy: realtek: add support for RTL8211F(D)(I)-VD-CG")
    the implementation assumed that this PHY model doesn't have the
    control register PHYCR2 (Page 0xa43 Address 0x19). This
    assumption was based on the differences in CLKOUT configurations
    between RTL8211FVD and the remaining RTL8211F PHYs. In the latter
    commit 2c67301584f2
    ("net: phy: realtek: Avoid PHYCR2 access if PHYCR2 not present")
    this assumption was expanded to the PHY-mode EEE.
    
    I performed tests on RTL8211FI-VD-CG and confirmed that disabling
    PHY-mode EEE works correctly and is uniform with other PHYs
    supported by the driver. To validate the correctness,
    I contacted Realtek support. Realtek confirmed that PHY-mode EEE on
    RTL8211F(D)(I)-VD-CG is configured via Page 0xa43 Address 0x19 bit 5.
    
    Moreover, Realtek informed me that the most recent datasheet
    for RTL8211F(D)(I)-VD-CG v1.1 is incomplete and the naming of
    control registers is partly inconsistent. The errata I
    received from Realtek corrects the naming as follows:
    
    | Register                | Datasheet v1.1 | Errata |
    |-------------------------|----------------|--------|
    | Page 0xa44 Address 0x11 | PHYCR2         | PHYCR3 |
    | Page 0xa43 Address 0x19 | N/A            | PHYCR2 |
    
    This information confirms that the supposedly missing control register,
    PHYCR2, exists in the RTL8211F(D)(I)-VD-CG under the same address and
    the same name. It controls widely the same configs as other PHYs from
    the RTL8211F series (e.g. PHY-mode EEE). Clock out configuration is an
    exception.
    
    Given all this information, restore disabling of the PHY-mode EEE.
    
    Fixes: 2c67301584f2 ("net: phy: realtek: Avoid PHYCR2 access if PHYCR2 not present")
    Signed-off-by: Ivan Galkin <[email protected]>
    Reviewed-by: Vladimir Oltean <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: ti: icssg-prueth: add PTP_1588_CLOCK_OPTIONAL dependency [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Thu Dec 4 11:01:28 2025 +0100

    net: ti: icssg-prueth: add PTP_1588_CLOCK_OPTIONAL dependency
    
    [ Upstream commit 9e7477a427449a8a3cd00c188e20a880e3d94638 ]
    
    The new icssg-prueth driver needs the same dependency as the other parts
    that use the ptp-1588:
    
    WARNING: unmet direct dependencies detected for TI_ICSS_IEP
      Depends on [m]: NETDEVICES [=y] && ETHERNET [=y] && NET_VENDOR_TI [=y] && PTP_1588_CLOCK_OPTIONAL [=m] && TI_PRUSS [=y]
      Selected by [y]:
      - TI_PRUETH [=y] && NETDEVICES [=y] && ETHERNET [=y] && NET_VENDOR_TI [=y] && PRU_REMOTEPROC [=y] && NET_SWITCHDEV [=y]
    
    Add the correct dependency on the two drivers missing it, and remove
    the pointless 'imply' in the process.
    
    Fixes: e654b85a693e ("net: ti: icssg-prueth: Add ICSSG Ethernet driver for AM65x SR1.0 platforms")
    Fixes: 511f6c1ae093 ("net: ti: icssm-prueth: Adds ICSSM Ethernet driver")
    Signed-off-by: Arnd Bergmann <[email protected]>
    Reviewed-by: Vadim Fedorenko <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[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_nat: remove bogus direction check [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Mon Dec 8 16:00:34 2025 +0100

    netfilter: nf_nat: remove bogus direction check
    
    [ Upstream commit 5ec8ca26fe93103577c904644b0957f069d0051a ]
    
    Jakub reports spurious failures of the 'conntrack_reverse_clash.sh'
    selftest.  A bogus test makes nat core resort to port rewrite even
    though there is no need for this.
    
    When the test is made, nf_nat_used_tuple() would already have caused us
    to return if no other CPU had added a colliding entry.
    Moreover, nf_nat_used_tuple() would have ignored the colliding entry if
    their origin tuples had been the same.
    
    All that is left to check is if the colliding entry in the hash table
    is subject to NAT, and, if its not, if our entry matches in the reverse
    direction, e.g. hash table has
    
    addr1:1234 -> addr2:80, and we want to commit
    addr2:80   -> addr1:1234.
    
    Because we already checked that neither the new nor the committed entry is
    subject to NAT we only have to check origin vs. reply tuple:
    for non-nat entries, the reply tuple is always the inverted original.
    
    Just in case there are more problems extend the error reporting
    in the selftest while at it and dump conntrack table/stats on error.
    
    Reported-by: Jakub Kicinski <[email protected]>
    Closes: https://lore.kernel.org/netdev/[email protected]/
    Fixes: d8f84a9bc7c4 ("netfilter: nf_nat: don't try nat source port reallocation for reverse dir clash")
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nf_tables: remove redundant chain validation on register store [+ + +]
Author: Pablo Neira Ayuso <[email protected]>
Date:   Wed Nov 19 13:42:05 2025 +0100

    netfilter: nf_tables: remove redundant chain validation on register store
    
    [ Upstream commit a67fd55f6a09f4119b7232c19e0f348fe31ab0db ]
    
    This validation predates the introduction of the state machine that
    determines when to enter slow path validation for error reporting.
    
    Currently, table validation is perform when:
    
    - new rule contains expressions that need validation.
    - new set element with jump/goto verdict.
    
    Validation on register store skips most checks with no basechains, still
    this walks the graph searching for loops and ensuring expressions are
    called from the right hook. Remove this.
    
    Fixes: a654de8fdc18 ("netfilter: nf_tables: fix chain dependency validation")
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Florian Westphal <[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]>

 
NFSD: Clear SECLABEL in the suppattr_exclcreat bitmap [+ + +]
Author: Chuck Lever <[email protected]>
Date:   Mon Nov 17 11:00:49 2025 -0500

    NFSD: Clear SECLABEL in the suppattr_exclcreat bitmap
    
    commit 27d17641cacfedd816789b75d342430f6b912bd2 upstream.
    
    >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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

NFSD: Clear TIME_DELEG in the suppattr_exclcreat bitmap [+ + +]
Author: Chuck Lever <[email protected]>
Date:   Mon Nov 17 11:00:50 2025 -0500

    NFSD: Clear TIME_DELEG in the suppattr_exclcreat bitmap
    
    commit ad3cbbb0c1892c48919727fcb8dec5965da8bacb upstream.
    
    >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.
    
    The FATTR4_WORD2_TIME_DELEG attributes are also not to be allowed
    for OPEN(create) with EXCLUSIVE4_1. It doesn't make sense to set
    a delegated timestamp on a new file.
    
    Fixes: 7e13f4f8d27d ("nfsd: handle delegated timestamps in SETATTR")
    Cc: [email protected]
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nfsd: fix memory leak in nfsd_create_serv error paths [+ + +]
Author: Shardul Bankar <[email protected]>
Date:   Mon Nov 17 17:41:21 2025 +0530

    nfsd: fix memory leak in nfsd_create_serv error paths
    
    [ Upstream commit df8d829bba3adcf3cc744c01d933b6fd7cf06e91 ]
    
    When nfsd_create_serv() calls percpu_ref_init() to initialize
    nn->nfsd_net_ref, it allocates both a percpu reference counter
    and a percpu_ref_data structure (64 bytes). However, if the
    function fails later due to svc_create_pooled() returning NULL
    or svc_bind() returning an error, these allocations are not
    cleaned up, resulting in a memory leak.
    
    The leak manifests as:
    - Unreferenced percpu allocation (8 bytes per CPU)
    - Unreferenced percpu_ref_data structure (64 bytes)
    
    Fix this by adding percpu_ref_exit() calls in both error paths
    to properly clean up the percpu_ref_init() allocations.
    
    This patch fixes the percpu_ref leak in nfsd_create_serv() seen
    as an auxiliary leak in syzbot report 099461f8558eb0a1f4f3; the
    prepare_creds() and vsock-related leaks in the same report
    remain to be addressed separately.
    
    Reported-by: [email protected]
    Link: https://syzkaller.appspot.com/bug?extid=099461f8558eb0a1f4f3
    Fixes: 47e988147f40 ("nfsd: add nfsd_serv_try_get and nfsd_serv_put")
    Signed-off-by: Shardul Bankar <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Sasha Levin <[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:   Tue Nov 18 19:51:19 2025 -0500

    NFSD: NFSv4 file creation neglects setting ACL
    
    commit 913f7cf77bf14c13cfea70e89bcb6d0b22239562 upstream.
    
    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(), which calls
    nfsd_attrs_valid() to determine whether to call nfsd_setattr().
    However, nfsd_attrs_valid() checks only for iattr changes and
    security labels, but not POSIX ACLs. When only an ACL is present,
    the function returns false, 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: Aurélien Couderc <[email protected]>
    Fixes: c0cbe70742f4 ("NFSD: add posix ACLs to struct nfsd_attrs")
    Cc: Roland Mainz <[email protected]>
    Cc: [email protected]
    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]>

 
ntfs: set dummy blocksize to read boot_block when mounting [+ + +]
Author: Pedro Demarchi Gomes <[email protected]>
Date:   Fri Oct 3 12:38:50 2025 -0300

    ntfs: set dummy blocksize to read boot_block when mounting
    
    [ Upstream commit d1693a7d5a38acf6424235a6070bcf5b186a360d ]
    
    When mounting, sb->s_blocksize is used to read the boot_block without
    being defined or validated. Set a dummy blocksize before attempting to
    read the boot_block.
    
    The issue can be triggered with the following syz reproducer:
    
      mkdirat(0xffffffffffffff9c, &(0x7f0000000080)='./file1\x00', 0x0)
      r4 = openat$nullb(0xffffffffffffff9c, &(0x7f0000000040), 0x121403, 0x0)
      ioctl$FS_IOC_SETFLAGS(r4, 0x40081271, &(0x7f0000000980)=0x4000)
      mount(&(0x7f0000000140)=@nullb, &(0x7f0000000040)='./cgroup\x00',
            &(0x7f0000000000)='ntfs3\x00', 0x2208004, 0x0)
      syz_clone(0x88200200, 0x0, 0x0, 0x0, 0x0, 0x0)
    
    Here, the ioctl sets the bdev block size to 16384. During mount,
    get_tree_bdev_flags() calls sb_set_blocksize(sb, block_size(bdev)),
    but since block_size(bdev) > PAGE_SIZE, sb_set_blocksize() leaves
    sb->s_blocksize at zero.
    
    Later, ntfs_init_from_boot() attempts to read the boot_block while
    sb->s_blocksize is still zero, which triggers the bug.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=f4f84b57a01d6b8364ad
    Signed-off-by: Pedro Demarchi Gomes <[email protected]>
    [[email protected]: changed comment style, added
    return value handling]
    Signed-off-by: Konstantin Komarov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nvme-fabrics: add ENOKEY to no retry criteria for authentication failures [+ + +]
Author: Justin Tee <[email protected]>
Date:   Mon Nov 17 10:43:43 2025 -0800

    nvme-fabrics: add ENOKEY to no retry criteria for authentication failures
    
    [ Upstream commit 13989207ee29c40501e719512e8dc90768325895 ]
    
    With authentication, in addition to EKEYREJECTED there is also no point in
    retrying reconnects when status is ENOKEY.  Thus, add -ENOKEY as another
    criteria to determine when to stop retries.
    
    Cc: Daniel Wagner <[email protected]>
    Cc: Hannes Reinecke <[email protected]>
    Closes: https://lore.kernel.org/linux-nvme/[email protected]/
    Signed-off-by: Justin Tee <[email protected]>
    Tested-by: Daniel Wagner <[email protected]>
    Reviewed-by: Daniel Wagner <[email protected]>
    Reviewed-by: Hannes Reinecke <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[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]>

 
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]>

 
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]>

 
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: arm_cspmu: fix error handling in arm_cspmu_impl_unregister() [+ + +]
Author: Ma Ke <[email protected]>
Date:   Wed Oct 22 19:53:25 2025 +0800

    perf: arm_cspmu: fix error handling in arm_cspmu_impl_unregister()
    
    commit 970e1e41805f0bd49dc234330a9390f4708d097d upstream.
    
    driver_find_device() calls get_device() to increment the reference
    count once a matching device is found. device_release_driver()
    releases the driver, but it does not decrease the reference count that
    was incremented by driver_find_device(). At the end of the loop, there
    is no put_device() to balance the reference count. To avoid reference
    count leakage, add put_device() to decrease the reference count.
    
    Found by code review.
    
    Cc: [email protected]
    Fixes: bfc653aa89cb ("perf: arm_cspmu: Separate Arm and vendor module")
    Signed-off-by: Ma Ke <[email protected]>
    Signed-off-by: Will Deacon <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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: exynos5-usbdrd: fix clock prepare imbalance [+ + +]
Author: André Draszik <[email protected]>
Date:   Mon Oct 6 09:07:12 2025 +0100

    phy: exynos5-usbdrd: fix clock prepare imbalance
    
    commit 5e428e45bf17a8f3784099ca5ded16e3b5d59766 upstream.
    
    Commit f4fb9c4d7f94 ("phy: exynos5-usbdrd: allow DWC3 runtime suspend
    with UDC bound (E850+)") incorrectly added clk_bulk_disable() as the
    inverse of clk_bulk_prepare_enable() while it should have of course
    used clk_bulk_disable_unprepare(). This means incorrect reference
    counts to the CMU driver remain.
    
    Update the code accordingly.
    
    Fixes: f4fb9c4d7f94 ("phy: exynos5-usbdrd: allow DWC3 runtime suspend with UDC bound (E850+)")
    CC: [email protected]
    Signed-off-by: André Draszik <[email protected]>
    Reviewed-by: Sam Protsenko <[email protected]>
    Reviewed-by: Peter Griffin <[email protected]>
    Link: https://patch.msgid.link/20251006-gs101-usb-phy-clk-imbalance-v1-1-205b206126cf@linaro.org
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
pinctrl: renesas: rzg2l: Fix ISEL restore on resume [+ + +]
Author: Claudiu Beznea <[email protected]>
Date:   Fri Sep 12 12:53:08 2025 +0300

    pinctrl: renesas: rzg2l: Fix ISEL restore on resume
    
    commit 44bf66122c12ef6d3382a9b84b9be1802e5f0e95 upstream.
    
    Commit 1d2da79708cb ("pinctrl: renesas: rzg2l: Avoid configuring ISEL in
    gpio_irq_{en,dis}able*()") dropped the configuration of ISEL from
    struct irq_chip::{irq_enable, irq_disable} APIs and moved it to
    struct gpio_chip::irq::{child_to_parent_hwirq,
    child_irq_domain_ops::free} APIs to fix spurious IRQs.
    
    After commit 1d2da79708cb ("pinctrl: renesas: rzg2l: Avoid configuring ISEL
    in gpio_irq_{en,dis}able*()"), ISEL was no longer configured properly on
    resume. This is because the pinctrl resume code used
    struct irq_chip::irq_enable  (called from rzg2l_gpio_irq_restore()) to
    reconfigure the wakeup interrupts. Some drivers (e.g. Ethernet) may also
    reconfigure non-wakeup interrupts on resume through their own code,
    eventually calling struct irq_chip::irq_enable.
    
    Fix this by adding ISEL configuration back into the
    struct irq_chip::irq_enable API and on resume path for wakeup interrupts.
    
    As struct irq_chip::irq_enable needs now to lock to update the ISEL,
    convert the struct rzg2l_pinctrl::lock to a raw spinlock and replace the
    locking API calls with the raw variants. Otherwise the lockdep reports
    invalid wait context when probing the adv7511 module on RZ/G2L:
    
     [ BUG: Invalid wait context ]
     6.17.0-rc5-next-20250911-00001-gfcfac22533c9 #18 Not tainted
     -----------------------------
     (udev-worker)/165 is trying to lock:
     ffff00000e3664a8 (&pctrl->lock){....}-{3:3}, at: rzg2l_gpio_irq_enable+0x38/0x78
     other info that might help us debug this:
     context-{5:5}
     3 locks held by (udev-worker)/165:
     #0: ffff00000e890108 (&dev->mutex){....}-{4:4}, at: __driver_attach+0x90/0x1ac
     #1: ffff000011c07240 (request_class){+.+.}-{4:4}, at: __setup_irq+0xb4/0x6dc
     #2: ffff000011c070c8 (lock_class){....}-{2:2}, at: __setup_irq+0xdc/0x6dc
     stack backtrace:
     CPU: 1 UID: 0 PID: 165 Comm: (udev-worker) Not tainted 6.17.0-rc5-next-20250911-00001-gfcfac22533c9 #18 PREEMPT
     Hardware name: Renesas SMARC EVK based on r9a07g044l2 (DT)
     Call trace:
     show_stack+0x18/0x24 (C)
     dump_stack_lvl+0x90/0xd0
     dump_stack+0x18/0x24
     __lock_acquire+0xa14/0x20b4
     lock_acquire+0x1c8/0x354
     _raw_spin_lock_irqsave+0x60/0x88
     rzg2l_gpio_irq_enable+0x38/0x78
     irq_enable+0x40/0x8c
     __irq_startup+0x78/0xa4
     irq_startup+0x108/0x16c
     __setup_irq+0x3c0/0x6dc
     request_threaded_irq+0xec/0x1ac
     devm_request_threaded_irq+0x80/0x134
     adv7511_probe+0x928/0x9a4 [adv7511]
     i2c_device_probe+0x22c/0x3dc
     really_probe+0xbc/0x2a0
     __driver_probe_device+0x78/0x12c
     driver_probe_device+0x40/0x164
     __driver_attach+0x9c/0x1ac
     bus_for_each_dev+0x74/0xd0
     driver_attach+0x24/0x30
     bus_add_driver+0xe4/0x208
     driver_register+0x60/0x128
     i2c_register_driver+0x48/0xd0
     adv7511_init+0x5c/0x1000 [adv7511]
     do_one_initcall+0x64/0x30c
     do_init_module+0x58/0x23c
     load_module+0x1bcc/0x1d40
     init_module_from_file+0x88/0xc4
     idempotent_init_module+0x188/0x27c
     __arm64_sys_finit_module+0x68/0xac
     invoke_syscall+0x48/0x110
     el0_svc_common.constprop.0+0xc0/0xe0
     do_el0_svc+0x1c/0x28
     el0_svc+0x4c/0x160
     el0t_64_sync_handler+0xa0/0xe4
     el0t_64_sync+0x198/0x19c
    
    Having ISEL configuration back into the struct irq_chip::irq_enable API
    should be safe with respect to spurious IRQs, as in the probe case IRQs
    are enabled anyway in struct gpio_chip::irq::child_to_parent_hwirq. No
    spurious IRQs were detected on suspend/resume, boot, ethernet link
    insert/remove tests (executed on RZ/G3S). Boot, ethernet link
    insert/remove tests were also executed successfully on RZ/G2L.
    
    Fixes: 1d2da79708cb ("pinctrl: renesas: rzg2l: Avoid configuring ISEL in gpio_irq_{en,dis}able*(")
    Cc: [email protected]
    Signed-off-by: Claudiu Beznea <[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: Greg Kroah-Hartman <[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: 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: intel_pmc_ipc: fix ACPI buffer memory leak [+ + +]
Author: Yongxin Liu <[email protected]>
Date:   Fri Nov 28 18:24:38 2025 +0800

    platform/x86: intel_pmc_ipc: fix ACPI buffer memory leak
    
    commit 611cf41ef6ac8301d23daadd8e78b013db0c5071 upstream.
    
    The intel_pmc_ipc() function uses ACPI_ALLOCATE_BUFFER to allocate memory
    for the ACPI evaluation result but never frees it, causing a 192-byte
    memory leak on each call.
    
    This leak is triggered during network interface initialization when the
    stmmac driver calls intel_mac_finish() -> intel_pmc_ipc().
    
      unreferenced object 0xffff96a848d6ea80 (size 192):
        comm "dhcpcd", pid 541, jiffies 4294684345
        hex dump (first 32 bytes):
          04 00 00 00 05 00 00 00 98 ea d6 48 a8 96 ff ff  ...........H....
          00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00  ................
        backtrace (crc b1564374):
          kmemleak_alloc+0x2d/0x40
          __kmalloc_noprof+0x2fa/0x730
          acpi_ut_initialize_buffer+0x83/0xc0
          acpi_evaluate_object+0x29a/0x2f0
          intel_pmc_ipc+0xfd/0x170
          intel_mac_finish+0x168/0x230
          stmmac_mac_finish+0x3d/0x50
          phylink_major_config+0x22b/0x5b0
          phylink_mac_initial_config.constprop.0+0xf1/0x1b0
          phylink_start+0x8e/0x210
          __stmmac_open+0x12c/0x2b0
          stmmac_open+0x23c/0x380
          __dev_open+0x11d/0x2c0
          __dev_change_flags+0x1d2/0x250
          netif_change_flags+0x2b/0x70
          dev_change_flags+0x40/0xb0
    
    Add __free(kfree) for ACPI object to properly release the allocated buffer.
    
    Cc: [email protected]
    Fixes: 7e2f7e25f6ff ("arch: x86: add IPC mailbox accessor function and add SoC register access")
    Signed-off-by: Yongxin Liu <[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: Greg Kroah-Hartman <[email protected]>

platform/x86: wmi-gamezone: Add Legion Go 2 Quirks [+ + +]
Author: Derek J. Clark <[email protected]>
Date:   Thu Nov 27 07:16:05 2025 -0800

    platform/x86: wmi-gamezone: Add Legion Go 2 Quirks
    
    [ Upstream commit 55715d7ad5e772d621c3201da3895f250591bce8 ]
    
    Add Legion Go 2 SKU's to the Extreme Mode quirks table.
    
    Signed-off-by: Derek J. Clark <[email protected]>
    Reviewed-by: Armin Wolf <[email protected]>
    Reviewed-by: Mark Pearson <[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]>

 
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: Add reloc_offset() to font bitmap pointer used for bootx_printf() [+ + +]
Author: Finn Thain <[email protected]>
Date:   Mon Nov 10 10:30:22 2025 +1100

    powerpc: Add reloc_offset() to font bitmap pointer used for bootx_printf()
    
    commit b94b73567561642323617155bf4ee24ef0d258fe upstream.
    
    Since Linux v6.7, booting using BootX on an Old World PowerMac produces
    an early crash. Stan Johnson writes, "the symptoms are that the screen
    goes blank and the backlight stays on, and the system freezes (Linux
    doesn't boot)."
    
    Further testing revealed that the failure can be avoided by disabling
    CONFIG_BOOTX_TEXT. Bisection revealed that the regression was caused by
    a change to the font bitmap pointer that's used when btext_init() begins
    painting characters on the display, early in the boot process.
    
    Christophe Leroy explains, "before kernel text is relocated to its final
    location ... data is addressed with an offset which is added to the
    Global Offset Table (GOT) entries at the start of bootx_init()
    by function reloc_got2(). But the pointers that are located inside a
    structure are not referenced in the GOT and are therefore not updated by
    reloc_got2(). It is therefore needed to apply the offset manually by using
    PTRRELOC() macro."
    
    Cc: [email protected]
    Link: https://lists.debian.org/debian-powerpc/2025/10/msg00111.html
    Link: https://lore.kernel.org/linuxppc-dev/[email protected]/
    Reported-by: Cedar Maxwell <[email protected]>
    Closes: https://lists.debian.org/debian-powerpc/2025/09/msg00031.html
    Bisected-by: Stan Johnson <[email protected]>
    Tested-by: Stan Johnson <[email protected]>
    Fixes: 0ebc7feae79a ("powerpc: Use shared font data")
    Suggested-by: Christophe Leroy <[email protected]>
    Signed-off-by: Finn Thain <[email protected]>
    Reviewed-by: Christophe Leroy <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/22b3b247425a052b079ab84da926706b3702c2c7.1762731022.git.fthain@linux-m68k.org
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
printk: Allow printk_trigger_flush() to flush all types [+ + +]
Author: John Ogness <[email protected]>
Date:   Thu Nov 13 17:09:47 2025 +0106

    printk: Allow printk_trigger_flush() to flush all types
    
    commit d01ff281bd9b1bfeac9ab98ec8a9ee41da900d5e upstream.
    
    Currently printk_trigger_flush() only triggers legacy offloaded
    flushing, even if that may not be the appropriate method to flush
    for currently registered consoles. (The function predates the
    NBCON consoles.)
    
    Since commit 6690d6b52726 ("printk: Add helper for flush type
    logic") there is printk_get_console_flush_type(), which also
    considers NBCON consoles and reports all the methods of flushing
    appropriate based on the system state and consoles available.
    
    Update printk_trigger_flush() to use
    printk_get_console_flush_type() to appropriately flush registered
    consoles.
    
    Suggested-by: Petr Mladek <[email protected]>
    Signed-off-by: John Ogness <[email protected]>
    Reviewed-by: Petr Mladek <[email protected]>
    Link: https://lore.kernel.org/stable/20251113160351.113031-2-john.ogness%40linutronix.de
    Tested-by: Sherry Sun <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Petr Mladek <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

printk: Avoid irq_work for printk_deferred() on suspend [+ + +]
Author: John Ogness <[email protected]>
Date:   Fri Nov 21 11:26:00 2025 +0106

    printk: Avoid irq_work for printk_deferred() on suspend
    
    commit 66e7c1e0ee08cfb6db64f8f3f6e5a3cc930145c8 upstream.
    
    With commit ("printk: Avoid scheduling irq_work on suspend") the
    implementation of printk_get_console_flush_type() was modified to
    avoid offloading when irq_work should be blocked during suspend.
    Since printk uses the returned flush type to determine what
    flushing methods are used, this was thought to be sufficient for
    avoiding irq_work usage during the suspend phase.
    
    However, vprintk_emit() implements a hack to support
    printk_deferred(). In this hack, the returned flush type is
    adjusted to make sure no legacy direct printing occurs when
    printk_deferred() was used.
    
    Because of this hack, the legacy offloading flushing method can
    still be used, causing irq_work to be queued when it should not
    be.
    
    Adjust the vprintk_emit() hack to also consider
    @console_irqwork_blocked so that legacy offloading will not be
    chosen when irq_work should be blocked.
    
    Link: https://lore.kernel.org/lkml/[email protected]
    Signed-off-by: John Ogness <[email protected]>
    Fixes: 26873e3e7f0c ("printk: Avoid scheduling irq_work on suspend")
    Reviewed-by: Petr Mladek <[email protected]>
    Signed-off-by: Petr Mladek <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

printk: Avoid scheduling irq_work on suspend [+ + +]
Author: John Ogness <[email protected]>
Date:   Thu Nov 13 17:09:48 2025 +0106

    printk: Avoid scheduling irq_work on suspend
    
    commit 26873e3e7f0cb26c45e6ad63656f9fe36b2aa31b upstream.
    
    Allowing irq_work to be scheduled while trying to suspend has shown
    to cause problems as some architectures interpret the pending
    interrupts as a reason to not suspend. This became a problem for
    printk() with the introduction of NBCON consoles. With every
    printk() call, NBCON console printing kthreads are woken by queueing
    irq_work. This means that irq_work continues to be queued due to
    printk() calls late in the suspend procedure.
    
    Avoid this problem by preventing printk() from queueing irq_work
    once console suspending has begun. This applies to triggering NBCON
    and legacy deferred printing as well as klogd waiters.
    
    Since triggering of NBCON threaded printing relies on irq_work, the
    pr_flush() within console_suspend_all() is used to perform the final
    flushing before suspending consoles and blocking irq_work queueing.
    NBCON consoles that are not suspended (due to the usage of the
    "no_console_suspend" boot argument) transition to atomic flushing.
    
    Introduce a new global variable @console_irqwork_blocked to flag
    when irq_work queueing is to be avoided. The flag is used by
    printk_get_console_flush_type() to avoid allowing deferred printing
    and switch NBCON consoles to atomic flushing. It is also used by
    vprintk_emit() to avoid klogd waking.
    
    Add WARN_ON_ONCE(console_irqwork_blocked) to the irq_work queuing
    functions to catch any code that attempts to queue printk irq_work
    during the suspending/resuming procedure.
    
    Cc: [email protected] # 6.13.x because no drivers in 6.12.x
    Fixes: 6b93bb41f6ea ("printk: Add non-BKL (nbcon) console basic infrastructure")
    Closes: https://lore.kernel.org/lkml/DB9PR04MB8429E7DDF2D93C2695DE401D92C4A@DB9PR04MB8429.eurprd04.prod.outlook.com
    Signed-off-by: John Ogness <[email protected]>
    Reviewed-by: Petr Mladek <[email protected]>
    Tested-by: Sherry Sun <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Petr Mladek <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
pwm: rzg2l-gpt: Allow checking period_tick cache value only if sibling channel is enabled [+ + +]
Author: Biju Das <[email protected]>
Date:   Wed Nov 26 10:42:48 2025 +0000

    pwm: rzg2l-gpt: Allow checking period_tick cache value only if sibling channel is enabled
    
    commit fae00ea9f00367771003ace78f29549dead58fc7 upstream.
    
    The rzg2l_gpt_config() tests the rzg2l_gpt->period_tick variable when
    both channels of a hardware channel are in use. This check is not valid
    if rzg2l_gpt_config() is called after disabling all the channels, as it
    tests against the cached value. Hence, allow checking and setting the
    cached value only if the sibling channel is enabled.
    
    While at it, drop else after return statement to fix the check patch
    warning.
    
    Cc: [email protected]
    Fixes: 061f087f5d0b ("pwm: Add support for RZ/G2L GPT")
    Signed-off-by: Biju Das <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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]>

 
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]>

 
Revert "drm/amd/display: Fix pbn to kbps Conversion" [+ + +]
Author: Mario Limonciello <[email protected]>
Date:   Tue Dec 9 11:14:47 2025 -0600

    Revert "drm/amd/display: Fix pbn to kbps Conversion"
    
    commit 72e24456a54fe04710d89626cc5a88703e2f6202 upstream.
    
    Deeply daisy chained DP/MST displays are no longer able to light
    up. This reverts commit e0dec00f3d05 ("drm/amd/display: Fix pbn
    to kbps Conversion")
    
    Cc: Jerry Zuo <[email protected]>
    Reported-by: [email protected]
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4756
    Signed-off-by: Mario Limonciello <[email protected]>
    Acked-by: Alex Deucher <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit e1c94109c76e8a77a21531bd53f6c63356c81158)
    Cc: [email protected] # 6.17+
    Signed-off-by: Greg Kroah-Hartman <[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]>

 
rtla/timerlat_bpf: Stop tracing on user latency [+ + +]
Author: Tomas Glozar <[email protected]>
Date:   Mon Oct 6 16:31:00 2025 +0200

    rtla/timerlat_bpf: Stop tracing on user latency
    
    commit e4240db9336c25826a2d6634adcca86d5ee01bde upstream.
    
    rtla-timerlat allows a *thread* latency threshold to be set via the
    -T/--thread option. However, the timerlat tracer calls this *total*
    latency (stop_tracing_total_us), and stops tracing also when the
    return-to-user latency is over the threshold.
    
    Change the behavior of the timerlat BPF program to reflect what the
    timerlat tracer is doing, to avoid discrepancy between stopping
    collecting data in the BPF program and stopping tracing in the timerlat
    tracer.
    
    Cc: [email protected]
    Fixes: e34293ddcebd ("rtla/timerlat: Add BPF skeleton to collect samples")
    Reviewed-by: Wander Lairson Costa <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Tomas Glozar <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
rust/drm/gem: Fix missing header in `Object` rustdoc [+ + +]
Author: Lyude Paul <[email protected]>
Date:   Fri Nov 7 15:25:56 2025 -0500

    rust/drm/gem: Fix missing header in `Object` rustdoc
    
    commit e54ad0cd3673c93cdafda58505eaa81610fe3aef upstream.
    
    Invariants should be prefixed with a # to turn it into a header.
    
    There are no functional changes in this patch.
    
    Cc: [email protected]
    Fixes: c284d3e42338 ("rust: drm: gem: Add GEM object abstraction")
    Signed-off-by: Lyude Paul <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Alice Ryhl <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
rust: dma: add helpers for architectures without CONFIG_HAS_DMA [+ + +]
Author: FUJITA Tomonori <[email protected]>
Date:   Fri Dec 5 01:06:39 2025 +0900

    rust: dma: add helpers for architectures without CONFIG_HAS_DMA
    
    commit d8932355f8c5673106eca49abd142f8fe0c1fe8b upstream.
    
    Add dma_set_mask(), dma_set_coherent_mask(), dma_map_sgtable(), and
    dma_max_mapping_size() helpers to fix a build error when
    CONFIG_HAS_DMA is not enabled.
    
    Note that when CONFIG_HAS_DMA is enabled, they are included in both
    bindings_generated.rs and bindings_helpers_generated.rs. The former
    takes precedence so behavior remains unchanged in that case.
    
    This fixes the following build error on UML:
    
    error[E0425]: cannot find function `dma_set_mask` in crate `bindings`
         --> rust/kernel/dma.rs:46:38
          |
       46 |         to_result(unsafe { bindings::dma_set_mask(self.as_ref().as_raw(), mask.value()) })
          |                                      ^^^^^^^^^^^^ help: a function with a similar name exists: `xa_set_mark`
          |
         ::: rust/bindings/bindings_generated.rs:24690:5
          |
    24690 |     pub fn xa_set_mark(arg1: *mut xarray, index: ffi::c_ulong, arg2: xa_mark_t);
          |     ---------------------------------------------------------------------------- similarly named function `xa_set_mark` defined here
    
    error[E0425]: cannot find function `dma_set_coherent_mask` in crate `bindings`
         --> rust/kernel/dma.rs:63:38
          |
       63 |         to_result(unsafe { bindings::dma_set_coherent_mask(self.as_ref().as_raw(), mask.value()) })
          |                                      ^^^^^^^^^^^^^^^^^^^^^ help: a function with a similar name exists: `dma_coherent_ok`
          |
         ::: rust/bindings/bindings_generated.rs:52745:5
          |
    52745 |     pub fn dma_coherent_ok(dev: *mut device, phys: phys_addr_t, size: usize) -> bool_;
          |     ---------------------------------------------------------------------------------- similarly named function `dma_coherent_ok` defined here
    
    error[E0425]: cannot find function `dma_map_sgtable` in crate `bindings`
        --> rust/kernel/scatterlist.rs:212:23
         |
     212 |               bindings::dma_map_sgtable(dev.as_raw(), sgt.as_ptr(), dir.into(), 0)
         |                         ^^^^^^^^^^^^^^^ help: a function with a similar name exists: `dma_unmap_sgtable`
         |
        ::: rust/bindings/bindings_helpers_generated.rs:1351:5
         |
    1351 | /     pub fn dma_unmap_sgtable(
    1352 | |         dev: *mut device,
    1353 | |         sgt: *mut sg_table,
    1354 | |         dir: dma_data_direction,
    1355 | |         attrs: ffi::c_ulong,
    1356 | |     );
         | |______- similarly named function `dma_unmap_sgtable` defined here
    
    error[E0425]: cannot find function `dma_max_mapping_size` in crate `bindings`
       --> rust/kernel/scatterlist.rs:356:52
        |
    356 |         let max_segment = match unsafe { bindings::dma_max_mapping_size(dev.as_raw()) } {
        |                                                    ^^^^^^^^^^^^^^^^^^^^ not found in `bindings`
    
    error: aborting due to 4 previous errors
    
    Cc: [email protected] # v6.17+
    Fixes: 101d66828a4ee ("rust: dma: add DMA addressing capabilities")
    Signed-off-by: FUJITA Tomonori <[email protected]>
    Reviewed-by: David Gow <[email protected]>
    Reviewed-by: Alice Ryhl <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [ Use relative paths in the error splat; add 'dma' prefix. - Danilo ]
    Signed-off-by: Danilo Krummrich <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

rust: io: add typedef for phys_addr_t [+ + +]
Author: Alice Ryhl <[email protected]>
Date:   Wed Nov 12 09:48:35 2025 +0000

    rust: io: add typedef for phys_addr_t
    
    commit dd6ff5cf56fb183fce605ca6a5bfce228cd8888b upstream.
    
    The C typedef phys_addr_t is missing an analogue in Rust, meaning that
    we end up using bindings::phys_addr_t or ResourceSize as a replacement
    in various places throughout the kernel. Fix that by introducing a new
    typedef on the Rust side. Place it next to the existing ResourceSize
    typedef since they're quite related to each other.
    
    Cc: [email protected] # for v6.18 [1]
    Signed-off-by: Alice Ryhl <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Link: https://lore.kernel.org/all/[email protected]/ [1]
    Signed-off-by: Danilo Krummrich <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

rust: io: define ResourceSize as resource_size_t [+ + +]
Author: Alice Ryhl <[email protected]>
Date:   Wed Nov 12 09:48:32 2025 +0000

    rust: io: define ResourceSize as resource_size_t
    
    commit 919b72922717e396be9435c83916b9969505bd23 upstream.
    
    These typedefs are always equivalent so this should not change anything,
    but the code makes a lot more sense like this.
    
    Cc: [email protected]
    Signed-off-by: Alice Ryhl <[email protected]>
    Fixes: 493fc33ec252 ("rust: io: add resource abstraction")
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Danilo Krummrich <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

rust: io: move ResourceSize to top-level io module [+ + +]
Author: Alice Ryhl <[email protected]>
Date:   Wed Nov 12 09:48:33 2025 +0000

    rust: io: move ResourceSize to top-level io module
    
    commit dfd67993044f507ba8fd6ee9956f923ba4b7e851 upstream.
    
    Resource sizes are a general concept for dealing with physical
    addresses, and not specific to the Resource type, which is just one way
    to access physical addresses. Thus, move the typedef to the io module.
    
    Still keep a re-export under resource. This avoids this commit from
    being a flag-day, but I also think it's a useful re-export in general so
    that you can import
    
            use kernel::io::resource::{Resource, ResourceSize};
    
    instead of having to write
    
            use kernel::io::{
                resource::Resource,
                ResourceSize,
            };
    
    in the specific cases where you need ResourceSize because you are using
    the Resource type. Therefore I think it makes sense to keep this
    re-export indefinitely and it is *not* intended as a temporary re-export
    for migration purposes.
    
    Cc: [email protected] # for v6.18 [1]
    Signed-off-by: Alice Ryhl <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Link: https://lore.kernel.org/all/[email protected]/ [1]
    Signed-off-by: Danilo Krummrich <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
rust_binder: avoid mem::take on delivered_deaths [+ + +]
Author: Alice Ryhl <[email protected]>
Date:   Tue Nov 11 14:23:33 2025 +0000

    rust_binder: avoid mem::take on delivered_deaths
    
    commit 6c37bebd8c926ad01ef157c0d123633a203e5c0d upstream.
    
    Similar to the previous commit, List::remove is used on
    delivered_deaths, so do not use mem::take on it as that may result in
    violations of the List::remove safety requirements.
    
    I don't think this particular case can be triggered because it requires
    fd close to run in parallel with an ioctl on the same fd. But let's not
    tempt fate.
    
    Cc: [email protected]
    Fixes: eafedbc7c050 ("rust_binder: add Rust Binder driver")
    Signed-off-by: Alice Ryhl <[email protected]>
    Acked-by: Miguel Ojeda <[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]>

 
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/ipl: Clear SBP flag when bootprog is set [+ + +]
Author: Sven Schnelle <[email protected]>
Date:   Fri Dec 5 10:58:57 2025 +0100

    s390/ipl: Clear SBP flag when bootprog is set
    
    commit b1aa01d31249bd116b18c7f512d3e46b4b4ad83b upstream.
    
    With z16 a new flag 'search boot program' was introduced for
    list-directed IPL (SCSI, NVMe, ECKD DASD). If this flag is set,
    e.g. via selecting the "Automatic" value for the "Boot program
    selector" control on an HMC load panel, it is copied to the reipl
    structure from the initial ipl structure. When a user now sets a
    boot prog via sysfs, the flag is not cleared and the bootloader
    will again automatically select the boot program, ignoring user
    configuration.
    
    To avoid that, clear the SBP flag when a bootprog sysfs file is
    written.
    
    Cc: [email protected]
    Reviewed-by: Peter Oberparleiter <[email protected]>
    Reviewed-by: Heiko Carstens <[email protected]>
    Signed-off-by: Sven Schnelle <[email protected]>
    Signed-off-by: Heiko Carstens <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
samples: rust: fix endianness issue in rust_driver_pci [+ + +]
Author: Marko Turk <[email protected]>
Date:   Wed Dec 10 12:25:51 2025 +0100

    samples: rust: fix endianness issue in rust_driver_pci
    
    commit e2f1081ca8f18c146e8f928486deac61eca2b517 upstream.
    
    MMIO backend of PCI Bar always assumes little-endian devices and
    will convert to CPU endianness automatically. Remove the u32::from_le
    conversion which would cause a bug on big-endian machines.
    
    Cc: [email protected]
    Reviewed-by: Dirk Behme <[email protected]>
    Signed-off-by: Marko Turk <[email protected]>
    Fixes: 685376d18e9a ("samples: rust: add Rust PCI sample driver")
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Danilo Krummrich <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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: 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_ext: Factor out local_dsq_post_enq() from dispatch_enqueue() [+ + +]
Author: Tejun Heo <[email protected]>
Date:   Thu Dec 11 15:45:03 2025 -1000

    sched_ext: Factor out local_dsq_post_enq() from dispatch_enqueue()
    
    commit 530b6637c79e728d58f1d9b66bd4acf4b735b86d upstream.
    
    Factor out local_dsq_post_enq() which performs post-enqueue handling for
    local DSQs - triggering resched_curr() if SCX_ENQ_PREEMPT is specified or if
    the current CPU is idle. No functional change.
    
    This will be used by the next patch to fix move_local_task_to_local_dsq().
    
    Cc: [email protected] # v6.12+
    Reviewed-by: Andrea Righi <[email protected]>
    Reviewed-by: Emil Tsalapatis <[email protected]>
    Signed-off-by: Tejun Heo <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

sched_ext: Fix bypass depth leak on scx_enable() failure [+ + +]
Author: Tejun Heo <[email protected]>
Date:   Tue Dec 9 11:04:33 2025 -1000

    sched_ext: Fix bypass depth leak on scx_enable() failure
    
    commit 9f769637a93fac81689b80df6855f545839cf999 upstream.
    
    scx_enable() calls scx_bypass(true) to initialize in bypass mode and then
    scx_bypass(false) on success to exit. If scx_enable() fails during task
    initialization - e.g. scx_cgroup_init() or scx_init_task() returns an error -
    it jumps to err_disable while bypass is still active. scx_disable_workfn()
    then calls scx_bypass(true/false) for its own bypass, leaving the bypass depth
    at 1 instead of 0. This causes the system to remain permanently in bypass mode
    after a failed scx_enable().
    
    Failures after task initialization is complete - e.g. scx_tryset_enable_state()
    at the end - already call scx_bypass(false) before reaching the error path and
    are not affected. This only affects a subset of failure modes.
    
    Fix it by tracking whether scx_enable() called scx_bypass(true) in a bool and
    having scx_disable_workfn() call an extra scx_bypass(false) to clear it. This
    is a temporary measure as the bypass depth will be moved into the sched
    instance, which will make this tracking unnecessary.
    
    Fixes: 8c2090c504e9 ("sched_ext: Initialize in bypass mode")
    Cc: [email protected] # v6.12+
    Reported-by: Chris Mason <[email protected]>
    Reviewed-by: Emil Tsalapatis <[email protected]>
    Link: https://lore.kernel.org/stable/286e6f7787a81239e1ce2989b52391ce%40kernel.org
    Signed-off-by: Tejun Heo <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

sched_ext: Fix missing post-enqueue handling in move_local_task_to_local_dsq() [+ + +]
Author: Tejun Heo <[email protected]>
Date:   Thu Dec 11 15:45:04 2025 -1000

    sched_ext: Fix missing post-enqueue handling in move_local_task_to_local_dsq()
    
    commit f5e1e5ec204da11fa87fdf006d451d80ce06e118 upstream.
    
    move_local_task_to_local_dsq() is used when moving a task from a non-local
    DSQ to a local DSQ on the same CPU. It directly manipulates the local DSQ
    without going through dispatch_enqueue() and was missing the post-enqueue
    handling that triggers preemption when SCX_ENQ_PREEMPT is set or the idle
    task is running.
    
    The function is used by move_task_between_dsqs() which backs
    scx_bpf_dsq_move() and may be called while the CPU is busy.
    
    Add local_dsq_post_enq() call to move_local_task_to_local_dsq(). As the
    dispatch path doesn't need post-enqueue handling, add SCX_RQ_IN_BALANCE
    early exit to keep consume_dispatch_q() behavior unchanged and avoid
    triggering unnecessary resched when scx_bpf_dsq_move() is used from the
    dispatch path.
    
    Fixes: 4c30f5ce4f7a ("sched_ext: Implement scx_bpf_dispatch[_vtime]_from_dsq()")
    Cc: [email protected] # v6.12+
    Reviewed-by: Andrea Righi <[email protected]>
    Reviewed-by: Emil Tsalapatis <[email protected]>
    Signed-off-by: Tejun Heo <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

sched_ext: Fix the memleak for sch->helper objects [+ + +]
Author: Zqiang <[email protected]>
Date:   Mon Dec 8 19:23:19 2025 +0800

    sched_ext: Fix the memleak for sch->helper objects
    
    commit 517a44d18537ef8ab888f71197c80116c14cee0a upstream.
    
    This commit use kthread_destroy_worker() to release sch->helper
    objects to fix the following kmemleak:
    
    unreferenced object 0xffff888121ec7b00 (size 128):
      comm "scx_simple", pid 1197, jiffies 4295884415
      hex dump (first 32 bytes):
        00 00 00 00 00 00 00 00 00 00 00 00 ad 4e ad de  .............N..
        ff ff ff ff 00 00 00 00 ff ff ff ff ff ff ff ff  ................
      backtrace (crc 587b3352):
        kmemleak_alloc+0x62/0xa0
        __kmalloc_cache_noprof+0x28d/0x3e0
        kthread_create_worker_on_node+0xd5/0x1f0
        scx_enable.isra.210+0x6c2/0x25b0
        bpf_scx_reg+0x12/0x20
        bpf_struct_ops_link_create+0x2c3/0x3b0
        __sys_bpf+0x3102/0x4b00
        __x64_sys_bpf+0x79/0xc0
        x64_sys_call+0x15d9/0x1dd0
        do_syscall_64+0xf0/0x470
        entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Fixes: bff3b5aec1b7 ("sched_ext: Move disable machinery into scx_sched")
    Cc: [email protected] # v6.16+
    Signed-off-by: Zqiang <[email protected]>
    Signed-off-by: Tejun Heo <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
scripts/faddr2line: Fix "Argument list too long" error [+ + +]
Author: Pankaj Raghav <[email protected]>
Date:   Sun Sep 21 12:03:58 2025 +0200

    scripts/faddr2line: Fix "Argument list too long" error
    
    [ Upstream commit ff5c0466486ba8d07ab2700380e8fd6d5344b4e9 ]
    
    The run_readelf() function reads the entire output of readelf into a
    single shell variable. For large object files with extensive debug
    information, the size of this variable can exceed the system's
    command-line argument length limit.
    
    When this variable is subsequently passed to sed via `echo "${out}"`, it
    triggers an "Argument list too long" error, causing the script to fail.
    
    Fix this by redirecting the output of readelf to a temporary file
    instead of a variable. The sed commands are then modified to read from
    this file, avoiding the argument length limitation entirely.
    
    Signed-off-by: Pankaj Raghav <[email protected]>
    Signed-off-by: Josh Poimboeuf <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
scripts: kdoc_parser.py: warn about Python version only once [+ + +]
Author: Mauro Carvalho Chehab <[email protected]>
Date:   Thu Sep 18 13:54:55 2025 +0200

    scripts: kdoc_parser.py: warn about Python version only once
    
    [ Upstream commit ade9b9576e2f000fb2ef0ac3bcd26e1167fd813b ]
    
    When running kernel-doc over multiple documents, it emits
    one error message per file with is not what we want:
    
            $ python3.6 scripts/kernel-doc.py . --none
            ...
            Warning: ./include/trace/events/swiotlb.h:0 Python 3.7 or later is required for correct results
            Warning: ./include/trace/events/iommu.h:0 Python 3.7 or later is required for correct results
            Warning: ./include/trace/events/sock.h:0 Python 3.7 or later is required for correct results
            ...
    
    Change the logic to warn it only once at the library:
    
            $ python3.6 scripts/kernel-doc.py . --none
            Warning: Python 3.7 or later is required for correct results
            Warning: ./include/cxl/features.h:0 Python 3.7 or later is required for correct results
    
    When running from command line, it warns twice, but that sounds
    ok.
    
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    Message-ID: <68e54cf8b1201d1f683aad9bc710a99421910356.1758196090.git.mchehab+huawei@kernel.org>
    Signed-off-by: Jonathan Corbet <[email protected]>
    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: lpfc: Fix reusing an ndlp that is marked NLP_DROPPED during FLOGI [+ + +]
Author: Justin Tee <[email protected]>
Date:   Thu Nov 6 14:46:36 2025 -0800

    scsi: lpfc: Fix reusing an ndlp that is marked NLP_DROPPED during FLOGI
    
    [ Upstream commit 07caedc6a3887938813727beafea40f07c497705 ]
    
    It's possible for an unstable link to repeatedly bounce allowing a FLOGI
    retry, but then bounce again forcing an abort of the FLOGI.  Ensure that
    the initial reference count on the FLOGI ndlp is restored in this faulty
    link scenario.
    
    Signed-off-by: Justin Tee <[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: mpi3mr: Read missing IOCFacts flag for reply queue full overflow [+ + +]
Author: Chandrakanth Patil <[email protected]>
Date:   Thu Dec 11 05:59:29 2025 +0530

    scsi: mpi3mr: Read missing IOCFacts flag for reply queue full overflow
    
    commit d373163194982f43b92c552c138c29d9f0b79553 upstream.
    
    The driver was not reading the MAX_REQ_PER_REPLY_QUEUE_LIMIT IOCFacts
    flag, so the reply-queue-full handling was never enabled, even on
    firmware that supports it. Reading this flag enables the feature and
    prevents reply queue overflow.
    
    Fixes: f08b24d82749 ("scsi: mpi3mr: Avoid reply queue full condition")
    Cc: [email protected]
    Signed-off-by: Chandrakanth Patil <[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: 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: scsi_debug: Fix atomic write enable module param description [+ + +]
Author: John Garry <[email protected]>
Date:   Thu Dec 11 10:06:51 2025 +0000

    scsi: scsi_debug: Fix atomic write enable module param description
    
    [ Upstream commit 1f7d6e2efeedd8f545d3e0e9bf338023bf4ea584 ]
    
    The atomic write enable module param is "atomic_wr", and not
    "atomic_write", so fix the module param description.
    
    Fixes: 84f3a3c01d70 ("scsi: scsi_debug: Atomic write support")
    Signed-off-by: John Garry <[email protected]>
    Reviewed-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: smartpqi: Add support for Hurray Data new controller PCI device [+ + +]
Author: David Strahan <[email protected]>
Date:   Thu Nov 6 10:38:21 2025 -0600

    scsi: smartpqi: Add support for Hurray Data new controller PCI device
    
    [ Upstream commit 48e6b7e708029cea451e53a8c16fc8c16039ecdc ]
    
    Add support for new Hurray Data controller.
    
    All entries are in HEX.
    
    Add PCI IDs for Hurray Data controllers:
                                             VID  / DID  / SVID / SDID
                                             ----   ----   ----   ----
                                             9005   028f   207d   4840
    
    Reviewed-by: Scott Benesh <[email protected]>
    Reviewed-by: Scott Teel <[email protected]>
    Reviewed-by: Mike McGowen <[email protected]>
    Signed-off-by: David Strahan <[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: 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:   Wed Dec 10 15:38:54 2025 +0900

    scsi: ufs: core: Add ufshcd_update_evt_hist() for UFS suspend error
    
    commit c9f36f04a8a2725172cdf2b5e32363e4addcb14c upstream.
    
    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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: ufs: host: mediatek: Fix shutdown/suspend race condition [+ + +]
Author: Peter Wang <[email protected]>
Date:   Wed Sep 24 17:43:27 2025 +0800

    scsi: ufs: host: mediatek: Fix shutdown/suspend race condition
    
    [ Upstream commit 014de20bb36ba03e0e0b0a7e0a1406ab900c9fda ]
    
    Address a race condition between shutdown and suspend operations in the
    UFS Mediatek driver. Before entering suspend, check if a shutdown is in
    progress to prevent conflicts and ensure system stability.
    
    Signed-off-by: Peter Wang <[email protected]>
    Acked-by: Chun-Hung Wu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
selftest: af_unix: Support compilers without flex-array-member-not-at-end support [+ + +]
Author: Guenter Roeck <[email protected]>
Date:   Fri Dec 5 09:10:00 2025 -0800

    selftest: af_unix: Support compilers without flex-array-member-not-at-end support
    
    [ Upstream commit 06f7cae92fe346fa49a8a9b161124b26cc5c3ed1 ]
    
    Fix:
    
    gcc: error: unrecognized command-line option ‘-Wflex-array-member-not-at-end’
    
    by making the compiler option dependent on its support.
    
    Fixes: 1838731f1072c ("selftest: af_unix: Add -Wall and -Wflex-array-member-not-at-end to CFLAGS.")
    Cc: Kuniyuki Iwashima <[email protected]>
    Signed-off-by: Guenter Roeck <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
selftests: mptcp: pm: ensure unknown flags are ignored [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Fri Dec 5 19:55:15 2025 +0100

    selftests: mptcp: pm: ensure unknown flags are ignored
    
    commit 29f4801e9c8dfd12bdcb33b61a6ac479c7162bd7 upstream.
    
    This validates the previous commit: the userspace can set unknown flags
    -- the 7th bit is currently unused -- without errors, but only the
    supported ones are printed in the endpoints dumps.
    
    The 'Fixes' tag here below is the same as the one from the previous
    commit: this patch here is not fixing anything wrong in the selftests,
    but it validates the previous fix for an issue introduced by this commit
    ID.
    
    Fixes: 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-2-9e4781a6c1b8@kernel.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

selftests: net: Fix build warnings [+ + +]
Author: Guenter Roeck <[email protected]>
Date:   Fri Dec 5 09:10:04 2025 -0800

    selftests: net: Fix build warnings
    
    [ Upstream commit 59546e874403c1dd0cbc42df06fdf8c113f72022 ]
    
    Fix
    
    ksft.h: In function ‘ksft_ready’:
    ksft.h:27:9: warning: ignoring return value of ‘write’ declared with attribute ‘warn_unused_result’
    
    ksft.h: In function ‘ksft_wait’:
    ksft.h:51:9: warning: ignoring return value of ‘read’ declared with attribute ‘warn_unused_result’
    
    by checking the return value of the affected functions and displaying
    an error message if an error is seen.
    
    Fixes: 2b6d490b82668 ("selftests: drv-net: Factor out ksft C helpers")
    Cc: Joe Damato <[email protected]>
    Signed-off-by: Guenter Roeck <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

selftests: net: tfo: Fix build warning [+ + +]
Author: Guenter Roeck <[email protected]>
Date:   Fri Dec 5 09:10:07 2025 -0800

    selftests: net: tfo: Fix build warning
    
    [ Upstream commit 91dc09a609d9443e6b34bdb355a18d579a95e132 ]
    
    Fix
    
    tfo.c: In function ‘run_server’:
    tfo.c:84:9: warning: ignoring return value of ‘read’ declared with attribute ‘warn_unused_result’
    
    by evaluating the return value from read() and displaying an error message
    if it reports an error.
    
    Fixes: c65b5bb2329e3 ("selftests: net: add passive TFO test binary")
    Cc: David Wei <[email protected]>
    Signed-off-by: Guenter Roeck <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

selftests: netfilter: packetdrill: avoid failure on HZ=100 kernel [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Thu Dec 11 13:16:49 2025 +0100

    selftests: netfilter: packetdrill: avoid failure on HZ=100 kernel
    
    [ Upstream commit fec7b0795548b43e2c3c46e3143c34ef6070341c ]
    
    packetdrill --ip_version=ipv4 --mtu=1500 --tolerance_usecs=1000000 --non_fatal packet conntrack_syn_challenge_ack.pkt
    conntrack v1.4.8 (conntrack-tools): 1 flow entries have been shown.
    conntrack_syn_challenge_ack.pkt:32: error executing `conntrack -f $NFCT_IP_VERSION \
    -L -p tcp --dport 8080 | grep UNREPLIED | grep -q SYN_SENT` command: non-zero status 1
    
    Affected kernel had CONFIG_HZ=100; reset packet was still sitting in
    backlog.
    
    Reported-by: Yi Chen <[email protected]>
    Fixes: a8a388c2aae4 ("selftests: netfilter: add packetdrill based conntrack tests")
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

selftests: netfilter: prefer xfail in case race wasn't triggered [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Tue Dec 9 00:03:36 2025 +0100

    selftests: netfilter: prefer xfail in case race wasn't triggered
    
    [ Upstream commit b8a81b0ce539e021ac72825238aea1eb657000f0 ]
    
    Jakub says: "We try to reserve SKIP for tests skipped because tool is
    missing in env, something isn't built into the kernel etc."
    
    use xfail, we can't force the race condition to appear at will
    so its expected that the test 'fails' occasionally.
    
    Fixes: 78a588363587 ("selftests: netfilter: add conntrack clash resolution test case")
    Reported-by: Jakub Kicinski <[email protected]>
    Closes: https://lore.kernel.org/netdev/[email protected]/
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

selftests: ublk: fix overflow in ublk_queue_auto_zc_fallback() [+ + +]
Author: Ming Lei <[email protected]>
Date:   Fri Dec 12 10:16:59 2025 -0700

    selftests: ublk: fix overflow in ublk_queue_auto_zc_fallback()
    
    [ Upstream commit 9637fc3bdd10c8e073f71897bd35babbd21e9b29 ]
    
    The functions ublk_queue_use_zc(), ublk_queue_use_auto_zc(), and
    ublk_queue_auto_zc_fallback() were returning int, but performing
    bitwise AND on q->flags which is __u64.
    
    When a flag bit is set in the upper 32 bits (beyond INT_MAX), the
    result of the bitwise AND operation could overflow when cast to int,
    leading to incorrect boolean evaluation.
    
    For example, if UBLKS_Q_AUTO_BUF_REG_FALLBACK is 0x8000000000000000:
      - (u64)flags & 0x8000000000000000 = 0x8000000000000000
      - Cast to int: undefined behavior / incorrect value
      - Used in if(): may evaluate incorrectly
    
    Fix by:
    1. Changing return type from int to bool for semantic correctness
    2. Using !! to explicitly convert to boolean (0 or 1)
    
    This ensures the functions return proper boolean values regardless
    of which bit position the flags occupy in the 64-bit field.
    
    Fixes: c3a6d48f86da ("selftests: ublk: remove ublk queue self-defined flags")
    Signed-off-by: Ming Lei <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
serial: core: Fix serial device initialization [+ + +]
Author: Alexander Stein <[email protected]>
Date:   Fri Dec 19 16:28:12 2025 +0100

    serial: core: Fix serial device initialization
    
    commit f54151148b969fb4b62bec8093d255306d20df30 upstream.
    
    During restoring sysfs fwnode information the information of_node_reused
    was dropped. This was previously set by device_set_of_node_from_dev().
    Add it back manually
    
    Fixes: 24ec03cc5512 ("serial: core: Restore sysfs fwnode information")
    Cc: stable <[email protected]>
    Suggested-by: Cosmin Tanislav <[email protected]>
    Signed-off-by: Alexander Stein <[email protected]>
    Tested-by: Michael Walle <[email protected]>
    Tested-by: Marek Szyprowski <[email protected]>
    Tested-by: Cosmin Tanislav <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

serial: core: Restore sysfs fwnode information [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Thu Nov 27 17:36:50 2025 +0100

    serial: core: Restore sysfs fwnode information
    
    commit 24ec03cc55126b7b3adf102f4b3d9f716532b329 upstream.
    
    The change that restores sysfs fwnode information does it only for OF cases.
    Update the fix to cover all possible types of fwnodes.
    
    Fixes: d36f0e9a0002 ("serial: core: restore of_node information in sysfs")
    Cc: stable <[email protected]>
    Signed-off-by: Andy Shevchenko <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

serial: sh-sci: Check that the DMA cookie is valid [+ + +]
Author: Claudiu Beznea <[email protected]>
Date:   Wed Dec 17 15:57:59 2025 +0200

    serial: sh-sci: Check that the DMA cookie is valid
    
    commit c3ca8a0aac832fe8047608bb2ae2cca314c6d717 upstream.
    
    The driver updates struct sci_port::tx_cookie to zero right before the TX
    work is scheduled, or to -EINVAL when DMA is disabled.
    dma_async_is_complete(), called through dma_cookie_status() (and possibly
    through dmaengine_tx_status()), considers cookies valid only if they have
    values greater than or equal to 1.
    
    Passing zero or -EINVAL to dmaengine_tx_status() before any TX DMA
    transfer has started leads to an incorrect TX status being reported, as the
    cookie is invalid for the DMA subsystem. This may cause long wait times
    when the serial device is opened for configuration before any TX activity
    has occurred.
    
    Check that the TX cookie is valid before passing it to
    dmaengine_tx_status().
    
    Fixes: 7cc0e0a43a91 ("serial: sh-sci: Check if TX data was written to device in .tx_empty()")
    Cc: stable <[email protected]>
    Signed-off-by: Claudiu Beznea <[email protected]>
    Link: https://patch.msgid.link/[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]>

serial: xilinx_uartps: fix rs485 delay_rts_after_send [+ + +]
Author: j.turek <[email protected]>
Date:   Sun Dec 21 11:32:21 2025 +0100

    serial: xilinx_uartps: fix rs485 delay_rts_after_send
    
    commit 267ee93c417e685d9f8e079e41c70ba6ee4df5a5 upstream.
    
    RTS line control with delay should be triggered when there is no more
    bytes in kfifo and hardware buffer is empty. Without this patch RTS
    control is scheduled right after feeding hardware buffer and this is too
    early.
    
    RTS line may change state before hardware buffer is empty.
    
    With this patch delayed RTS state change is triggered when function
    cdns_uart_handle_tx is called from cdns_uart_isr on
    CDNS_UART_IXR_TXEMPTY exactly when hardware completed transmission
    
    Fixes: fccc9d9233f9 ("tty: serial: uartps: Add rs485 support to uartps driver")
    Cc: stable <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Turek  <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
shmem: fix recovery on rename failures [+ + +]
Author: Al Viro <[email protected]>
Date:   Sat Dec 13 17:50:23 2025 -0500

    shmem: fix recovery on rename failures
    
    [ Upstream commit e1b4c6a58304fd490124cc2b454d80edc786665c ]
    
    maple_tree insertions can fail if we are seriously short on memory;
    simple_offset_rename() does not recover well if it runs into that.
    The same goes for simple_offset_rename_exchange().
    
    Moreover, shmem_whiteout() expects that if it succeeds, the caller will
    progress to d_move(), i.e. that shmem_rename2() won't fail past the
    successful call of shmem_whiteout().
    
    Not hard to fix, fortunately - mtree_store() can't fail if the index we
    are trying to store into is already present in the tree as a singleton.
    
    For simple_offset_rename_exchange() that's enough - we just need to be
    careful about the order of operations.
    
    For simple_offset_rename() solution is to preinsert the target into the
    tree for new_dir; the rest can be done without any potentially failing
    operations.
    
    That preinsertion has to be done in shmem_rename2() rather than in
    simple_offset_rename() itself - otherwise we'd need to deal with the
    possibility of failure after successful shmem_whiteout().
    
    Fixes: a2e459555c5f ("shmem: stable directory offsets")
    Reviewed-by: Christian Brauner <[email protected]>
    Reviewed-by: Chuck Lever <[email protected]>
    Signed-off-by: Al Viro <[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]>

 
soc/tegra: fuse: Do not register SoC device on ACPI boot [+ + +]
Author: Kartik Rajput <[email protected]>
Date:   Wed Oct 8 16:46:18 2025 +0530

    soc/tegra: fuse: Do not register SoC device on ACPI boot
    
    commit c87f820bc4748fdd4d50969e8930cd88d1b61582 upstream.
    
    On Tegra platforms using ACPI, the SMCCC driver already registers the
    SoC device. This makes the registration performed by the Tegra fuse
    driver redundant.
    
    When booted via ACPI, skip registering the SoC device and suppress
    printing SKU information from the Tegra fuse driver, as this information
    is already provided by the SMCCC driver.
    
    Fixes: 972167c69080 ("soc/tegra: fuse: Add ACPI support for Tegra194 and Tegra234")
    Cc: [email protected]
    Signed-off-by: Kartik Rajput <[email protected]>
    Signed-off-by: Thierry Reding <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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: apple: mailbox: fix device leak on lookup [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Sep 26 16:31:31 2025 +0200

    soc: apple: mailbox: fix device leak on lookup
    
    commit f401671e90ccc26b3022f177c4156a429c024f6c upstream.
    
    Make sure to drop the reference taken to the mbox 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.
    
    Fixes: 6e1457fcad3f ("soc: apple: mailbox: Add ASC/M3 mailbox driver")
    Cc: [email protected]      # 6.8
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Neal Gompa <[email protected]>
    Signed-off-by: Sven Peter <[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: pbs: fix device leak on lookup [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Sep 26 16:35:11 2025 +0200

    soc: qcom: pbs: fix device leak on lookup
    
    commit 94124bf253d24b13e89c45618a168d5a1d8a61e7 upstream.
    
    Make sure to drop the reference taken to the pbs 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.
    
    Fixes: 5b2dd77be1d8 ("soc: qcom: add QCOM PBS driver")
    Cc: [email protected]      # 6.9
    Cc: Anjelique Melendez <[email protected]>
    Signed-off-by: Johan Hovold <[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: samsung: exynos-pmu: fix device leak on regmap lookup [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Nov 21 13:18:52 2025 +0100

    soc: samsung: exynos-pmu: fix device leak on regmap lookup
    
    commit 990eb9a8eb4540ab90c7b34bb07b87ff13881cad upstream.
    
    Make sure to drop the reference taken when looking up the PMU device and
    its regmap.
    
    Note that holding a reference to a device does not prevent its regmap
    from going away so there is no point in keeping the reference.
    
    Fixes: 0b7c6075022c ("soc: samsung: exynos-pmu: Add regmap support for SoCs that protect PMU regs")
    Cc: [email protected]      # 6.9
    Cc: Peter Griffin <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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: microchip: rename driver file and internal identifiers [+ + +]
Author: Prajna Rajendra Kumar <[email protected]>
Date:   Fri Nov 14 10:45:43 2025 +0000

    spi: microchip: rename driver file and internal identifiers
    
    [ Upstream commit 71c814e98696f2cd53e9e6cef7501c2d667d4c5a ]
    
    The spi-microchip-core.c driver provides support for the Microchip
    PolarFire SoC (MPFS) "hard" SPI controller. It was originally named
    "core" with the expectation that it might also cover Microchip's
    CoreSPI "soft" IP, but that never materialized.
    
    The CoreSPI IP cannot be supported by this driver because its register
    layout differs substantially from the MPFS SPI controller. In practice
    most of the code would need to be replaced to handle those differences
    so keeping the drivers separate is the simpler approach.
    
    The file and internal symbols are renamed to reflect MPFS support and
    to free up "spi-microchip-core.c" for CoreSPI driver.
    
    Fixes: 9ac8d17694b6 ("spi: add support for microchip fpga spi controllers")
    Signed-off-by: Prajna Rajendra Kumar <[email protected]>
    Acked-by: Conor Dooley <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Stable-dep-of: a8a313612af7 ("spi: mpfs: Fix an error handling path in mpfs_spi_probe()")
    Signed-off-by: Sasha Levin <[email protected]>

spi: mpfs: Fix an error handling path in mpfs_spi_probe() [+ + +]
Author: Christophe JAILLET <[email protected]>
Date:   Sat Dec 13 08:48:51 2025 +0100

    spi: mpfs: Fix an error handling path in mpfs_spi_probe()
    
    [ Upstream commit a8a313612af7a55083ba5720f14f1835319debee ]
    
    mpfs_spi_init() calls mpfs_spi_enable_ints(), so mpfs_spi_disable_ints()
    should be called if an error occurs after calling mpfs_spi_init(), as
    already done in the remove function.
    
    Fixes: 9ac8d17694b6 ("spi: add support for microchip fpga spi controllers")
    Signed-off-by: Christophe JAILLET <[email protected]>
    Link: https://patch.msgid.link/eb35f168517cc402ef7e78f26da02863e2f45c03.1765612110.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
SUNRPC: svcauth_gss: avoid NULL deref on zero length gss_token in gss_read_proxy_verf [+ + +]
Author: Joshua Rogers <[email protected]>
Date:   Fri Nov 7 10:05:33 2025 -0500

    SUNRPC: svcauth_gss: avoid NULL deref on zero length gss_token in gss_read_proxy_verf
    
    commit d4b69a6186b215d2dc1ebcab965ed88e8d41768d upstream.
    
    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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
svcrdma: bound check rq_pages index in inline path [+ + +]
Author: Joshua Rogers <[email protected]>
Date:   Fri Nov 7 10:09:49 2025 -0500

    svcrdma: bound check rq_pages index in inline path
    
    commit d1bea0ce35b6095544ee82bb54156fc62c067e58 upstream.
    
    svc_rdma_copy_inline_range indexed rqstp->rq_pages[rc_curpage] without
    verifying rc_curpage stays within the allocated page array. Add guards
    before the first use and after advancing to a new page.
    
    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]>

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]>

svcrdma: use rc_pageoff for memcpy byte offset [+ + +]
Author: Joshua Rogers <[email protected]>
Date:   Fri Nov 7 10:09:47 2025 -0500

    svcrdma: use rc_pageoff for memcpy byte offset
    
    commit a8ee9099f30654917aa68f55d707b5627e1dbf77 upstream.
    
    svc_rdma_copy_inline_range added rc_curpage (page index) to the page
    base instead of the byte offset rc_pageoff. Use rc_pageoff so copies
    land within the current page.
    
    Found by ZeroPath (https://zeropath.com)
    
    Fixes: 8e122582680c ("svcrdma: Move svc_rdma_read_info::ri_pageno to struct svc_rdma_recv_ctxt")
    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]>

 
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/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]>

 
tpm2-sessions: Fix out of range indexing in name_size [+ + +]
Author: Jarkko Sakkinen <[email protected]>
Date:   Sun Nov 30 21:07:12 2025 +0200

    tpm2-sessions: Fix out of range indexing in name_size
    
    commit 6e9722e9a7bfe1bbad649937c811076acf86e1fd upstream.
    
    'name_size' does not have any range checks, and it just directly indexes
    with TPM_ALG_ID, which could lead into memory corruption at worst.
    
    Address the issue by only processing known values and returning -EINVAL for
    unrecognized values.
    
    Make also 'tpm_buf_append_name' and 'tpm_buf_fill_hmac_session' fallible so
    that errors are detected before causing any spurious TPM traffic.
    
    End also the authorization session on failure in both of the functions, as
    the session state would be then by definition corrupted.
    
    Cc: [email protected] # v6.10+
    Fixes: 1085b8276bb4 ("tpm: Add the rest of the session HMAC API")
    Reviewed-by: Jonathan McDowell <[email protected]>
    Signed-off-by: Jarkko Sakkinen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

tpm2-sessions: Fix tpm2_read_public range checks [+ + +]
Author: Jarkko Sakkinen <[email protected]>
Date:   Mon Dec 1 15:38:02 2025 +0200

    tpm2-sessions: Fix tpm2_read_public range checks
    
    commit bda1cbf73c6e241267c286427f2ed52b5735d872 upstream.
    
    tpm2_read_public() has some rudimentary range checks but the function does
    not ensure that the response buffer has enough bytes for the full TPMT_HA
    payload.
    
    Re-implement the function with necessary checks and validation, and return
    name and name size for all handle types back to the caller.
    
    Cc: [email protected] # v6.10+
    Fixes: d0a25bb961e6 ("tpm: Add HMAC session name/handle append")
    Signed-off-by: Jarkko Sakkinen <[email protected]>
    Reviewed-by: Jonathan McDowell <[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]>

tracing: Fix fixed array of synthetic event [+ + +]
Author: Steven Rostedt <[email protected]>
Date:   Thu Dec 4 15:19:35 2025 -0500

    tracing: Fix fixed array of synthetic event
    
    commit 47ef834209e5981f443240d8a8b45bf680df22aa upstream.
    
    The commit 4d38328eb442d ("tracing: Fix synth event printk format for str
    fields") replaced "%.*s" with "%s" but missed removing the number size of
    the dynamic and static strings. The commit e1a453a57bc7 ("tracing: Do not
    add length to print format in synthetic events") fixed the dynamic part
    but did not fix the static part. That is, with the commands:
    
      # echo 's:wake_lat char[] wakee; u64 delta;' >> /sys/kernel/tracing/dynamic_events
      # echo 'hist:keys=pid:ts=common_timestamp.usecs if !(common_flags & 0x18)' > /sys/kernel/tracing/events/sched/sched_waking/trigger
      # echo 'hist:keys=next_pid:delta=common_timestamp.usecs-$ts:onmatch(sched.sched_waking).trace(wake_lat,next_comm,$delta)' > /sys/kernel/tracing/events/sched/sched_switch/trigger
    
    That caused the output of:
    
              <idle>-0       [001] d..5.   193.428167: wake_lat: wakee=(efault)sshd-sessiondelta=155
        sshd-session-879     [001] d..5.   193.811080: wake_lat: wakee=(efault)kworker/u34:5delta=58
              <idle>-0       [002] d..5.   193.811198: wake_lat: wakee=(efault)bashdelta=91
    
    The commit e1a453a57bc7 fixed the part where the synthetic event had
    "char[] wakee". But if one were to replace that with a static size string:
    
      # echo 's:wake_lat char[16] wakee; u64 delta;' >> /sys/kernel/tracing/dynamic_events
    
    Where "wakee" is defined as "char[16]" and not "char[]" making it a static
    size, the code triggered the "(efaul)" again.
    
    Remove the added STR_VAR_LEN_MAX size as the string is still going to be
    nul terminated.
    
    Cc: [email protected]
    Cc: Masami Hiramatsu <[email protected]>
    Cc: Mathieu Desnoyers <[email protected]>
    Cc: Douglas Raillard <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Fixes: e1a453a57bc7 ("tracing: Do not add length to print format in synthetic events")
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ublk: add `union ublk_io_buf` with improved naming [+ + +]
Author: Ming Lei <[email protected]>
Date:   Fri Nov 21 09:58:25 2025 +0800

    ublk: add `union ublk_io_buf` with improved naming
    
    [ Upstream commit 8d61ece156bd4f2b9e7d3b2a374a26d42c7a4a06 ]
    
    Add `union ublk_io_buf` for naming the anonymous union of struct ublk_io's
    addr and buf fields, meantime apply it to `struct ublk_io` for storing either
    ublk auto buffer register data or ublk server io buffer address.
    
    The union uses clear field names:
    - `addr`: for regular ublk server io buffer addresses
    - `auto_reg`: for ublk auto buffer registration data
    
    This eliminates confusing access patterns and improves code readability.
    
    Reviewed-by: Caleb Sander Mateos <[email protected]>
    Signed-off-by: Ming Lei <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Stable-dep-of: c258f5c4502c ("ublk: fix deadlock when reading partition table")
    Signed-off-by: Sasha Levin <[email protected]>

ublk: add parameter `struct io_uring_cmd *` to ublk_prep_auto_buf_reg() [+ + +]
Author: Ming Lei <[email protected]>
Date:   Fri Nov 21 09:58:24 2025 +0800

    ublk: add parameter `struct io_uring_cmd *` to ublk_prep_auto_buf_reg()
    
    [ Upstream commit 3035b9b46b0611898babc0b96ede65790d3566f7 ]
    
    Add parameter `struct io_uring_cmd *` to ublk_prep_auto_buf_reg() and
    prepare for reusing this helper for the coming UBLK_BATCH_IO feature,
    which can fetch & commit one batch of io commands via single uring_cmd.
    
    Reviewed-by: Caleb Sander Mateos <[email protected]>
    Signed-off-by: Ming Lei <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Stable-dep-of: c258f5c4502c ("ublk: fix deadlock when reading partition table")
    Signed-off-by: Sasha Levin <[email protected]>

ublk: clean up user copy references on ublk server exit [+ + +]
Author: Caleb Sander Mateos <[email protected]>
Date:   Fri Dec 12 17:19:49 2025 -0700

    ublk: clean up user copy references on ublk server exit
    
    [ Upstream commit daa24603d9f0808929514ee62ced30052ca7221c ]
    
    If a ublk server process releases a ublk char device file, any requests
    dispatched to the ublk server but not yet completed will retain a ref
    value of UBLK_REFCOUNT_INIT. Before commit e63d2228ef83 ("ublk: simplify
    aborting ublk request"), __ublk_fail_req() would decrement the reference
    count before completing the failed request. However, that commit
    optimized __ublk_fail_req() to call __ublk_complete_rq() directly
    without decrementing the request reference count.
    The leaked reference count incorrectly allows user copy and zero copy
    operations on the completed ublk request. It also triggers the
    WARN_ON_ONCE(refcount_read(&io->ref)) warnings in ublk_queue_reinit()
    and ublk_deinit_queue().
    Commit c5c5eb24ed61 ("ublk: avoid ublk_io_release() called after ublk
    char dev is closed") already fixed the issue for ublk devices using
    UBLK_F_SUPPORT_ZERO_COPY or UBLK_F_AUTO_BUF_REG. However, the reference
    count leak also affects UBLK_F_USER_COPY, the other reference-counted
    data copy mode. Fix the condition in ublk_check_and_reset_active_ref()
    to include all reference-counted data copy modes. This ensures that any
    ublk requests still owned by the ublk server when it exits have their
    reference counts reset to 0.
    
    Signed-off-by: Caleb Sander Mateos <[email protected]>
    Fixes: e63d2228ef83 ("ublk: simplify aborting ublk request")
    Reviewed-by: Ming Lei <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ublk: fix deadlock when reading partition table [+ + +]
Author: Ming Lei <[email protected]>
Date:   Fri Dec 12 22:34:15 2025 +0800

    ublk: fix deadlock when reading partition table
    
    [ Upstream commit c258f5c4502c9667bccf5d76fa731ab9c96687c1 ]
    
    When one process(such as udev) opens ublk block device (e.g., to read
    the partition table via bdev_open()), a deadlock[1] can occur:
    
    1. bdev_open() grabs disk->open_mutex
    2. The process issues read I/O to ublk backend to read partition table
    3. In __ublk_complete_rq(), blk_update_request() or blk_mq_end_request()
       runs bio->bi_end_io() callbacks
    4. If this triggers fput() on file descriptor of ublk block device, the
       work may be deferred to current task's task work (see fput() implementation)
    5. This eventually calls blkdev_release() from the same context
    6. blkdev_release() tries to grab disk->open_mutex again
    7. Deadlock: same task waiting for a mutex it already holds
    
    The fix is to run blk_update_request() and blk_mq_end_request() with bottom
    halves disabled. This forces blkdev_release() to run in kernel work-queue
    context instead of current task work context, and allows ublk server to make
    forward progress, and avoids the deadlock.
    
    Fixes: 71f28f3136af ("ublk_drv: add io_uring based userspace block driver")
    Link: https://github.com/ublk-org/ublksrv/issues/170 [1]
    Signed-off-by: Ming Lei <[email protected]>
    Reviewed-by: Caleb Sander Mateos <[email protected]>
    [axboe: rewrite comment in ublk]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ublk: refactor auto buffer register in ublk_dispatch_req() [+ + +]
Author: Ming Lei <[email protected]>
Date:   Fri Nov 21 09:58:26 2025 +0800

    ublk: refactor auto buffer register in ublk_dispatch_req()
    
    [ Upstream commit 0a9beafa7c633e6ff66b05b81eea78231b7e6520 ]
    
    Refactor auto buffer register code and prepare for supporting batch IO
    feature, and the main motivation is to put 'ublk_io' operation code
    together, so that per-io lock can be applied for the code block.
    
    The key changes are:
    - Rename ublk_auto_buf_reg() as ublk_do_auto_buf_reg()
    - Introduce an enum `auto_buf_reg_res` to represent the result of
      the buffer registration attempt (FAIL, FALLBACK, OK).
    - Split the existing `ublk_do_auto_buf_reg` function into two:
      - `__ublk_do_auto_buf_reg`: Performs the actual buffer registration
        and returns the `auto_buf_reg_res` status.
      - `ublk_do_auto_buf_reg`: A wrapper that calls the internal function
        and handles the I/O preparation based on the result.
    - Introduce `ublk_prep_auto_buf_reg_io` to encapsulate the logic for
      preparing the I/O for completion after buffer registration.
    - Pass the `tag` directly to `ublk_auto_buf_reg_fallback` to avoid
      recalculating it.
    
    This refactoring makes the control flow clearer and isolates the different
    stages of the auto buffer registration process.
    
    Reviewed-by: Caleb Sander Mateos <[email protected]>
    Signed-off-by: Ming Lei <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Stable-dep-of: c258f5c4502c ("ublk: fix deadlock when reading partition table")
    Signed-off-by: Sasha Levin <[email protected]>

 
um: init cpu_tasks[] earlier [+ + +]
Author: Johannes Berg <[email protected]>
Date:   Wed Sep 24 11:32:13 2025 +0200

    um: init cpu_tasks[] earlier
    
    [ Upstream commit 7b5d4416964c07c902163822a30a622111172b01 ]
    
    This is currently done in uml_finishsetup(), but e.g. with
    KCOV enabled we'll crash because some init code can call
    into e.g. memparse(), which has coverage annotations, and
    then the checks in check_kcov_mode() crash because current
    is NULL.
    
    Simply initialize the cpu_tasks[] array statically, which
    fixes the crash. For the later SMP work, it seems to have
    not really caused any problems yet, but initialize all of
    the entries anyway.
    
    Link: https://patch.msgid.link/20250924113214.c76cd74d0583.I974f691ebb1a2b47915bd2b04cc38e5263b9447f@changeid
    Signed-off-by: Johannes Berg <[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:   Wed Nov 26 11:12:21 2025 +0530

    usb: dwc3: keep susphy enabled during exit to avoid controller faults
    
    commit e1003aa7ec9eccdde4c926bd64ef42816ad55f25 upstream.
    
    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]>
    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: 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: 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:   Thu Dec 18 16:35:17 2025 +0100

    usb: ohci-nxp: fix device leak on probe failure
    
    commit b4c61e542faf8c9131d69ecfc3ad6de96d1b2ab8 upstream.
    
    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]>

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: 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: 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: typec: altmodes/displayport: Drop the device reference in dp_altmode_probe() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Sat Dec 6 15:04:45 2025 +0800

    usb: typec: altmodes/displayport: Drop the device reference in dp_altmode_probe()
    
    commit 128bb7fab342546352603bde8b49ff54e3af0529 upstream.
    
    In error paths, call typec_altmode_put_plug() to drop the device reference
    obtained by typec_altmode_get_plug().
    
    Fixes: 71ba4fe56656 ("usb: typec: altmodes/displayport: add SOP' support")
    Cc: stable <[email protected]>
    Signed-off-by: Haoxiang Li <[email protected]>
    Reviewed-by: Heikki Krogerus <[email protected]>
    Link: https://patch.msgid.link/[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: typec: ucsi: huawei-gaokin: add DRM dependency [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Thu Dec 4 11:11:07 2025 +0100

    usb: typec: ucsi: huawei-gaokin: add DRM dependency
    
    commit d14cd998e67ba8f1cca52a260a1ce1a60954fd8b upstream.
    
    Selecting DRM_AUX_HPD_BRIDGE is not possible from a built-in driver when
    CONFIG_DRM=m:
    
    WARNING: unmet direct dependencies detected for DRM_AUX_HPD_BRIDGE
      Depends on [m]: HAS_IOMEM [=y] && DRM [=m] && DRM_BRIDGE [=y] && OF [=y]
      Selected by [y]:
      - UCSI_HUAWEI_GAOKUN [=y] && USB_SUPPORT [=y] && TYPEC [=y] && TYPEC_UCSI [=y] && EC_HUAWEI_GAOKUN [=y] && DRM_BRIDGE [=y] && OF [=y]
    
    Add the same dependency we have in similar drivers to work around this.
    
    Fixes: 00327d7f2c8c ("usb: typec: ucsi: add Huawei Matebook E Go ucsi driver")
    Cc: stable <[email protected]>
    Signed-off-by: Arnd Bergmann <[email protected]>
    Reviewed-by: Heikki Krogerus <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[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: Don't unchain link TRBs on quirky HCs [+ + +]
Author: Michal Pecio <[email protected]>
Date:   Wed Nov 19 16:24:04 2025 +0200

    usb: xhci: Don't unchain link TRBs on quirky HCs
    
    [ Upstream commit e6aec6d9f5794e85d2312497a5d81296d885090e ]
    
    Some old HCs ignore transfer ring link TRBs whose chain bit is unset.
    This breaks endpoint operation and sometimes makes it execute other
    ring's TDs, which may corrupt their buffers or cause unwanted device
    action. We avoid this by chaining all link TRBs on affected rings.
    
    Fix an omission which allows them to be unchained by cancelling TDs.
    
    The patch was tested by reproducing this condition on an isochronous
    endpoint (non-power-of-two TDs are sometimes split not to cross 64K)
    and printing link TRBs in trb_to_noop() on good and buggy HCs.
    
    Actual hardware malfunction is rare since it requires Missed Service
    Error shortly before the unchained link TRB, at least on NEC and AMD.
    I have never seen it after commit bb0ba4cb1065 ("usb: xhci: Apply the
    link chain quirk on NEC isoc endpoints"), but it's Russian roulette
    and I can't test all affected hosts and workloads. Fairly often MSEs
    happen after cancellation because the endpoint was stopped.
    
    Signed-off-by: Michal Pecio <[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: 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]>

 
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]>

 
vfio: Fix ksize arg while copying user struct in vfio_df_ioctl_bind_iommufd() [+ + +]
Author: Raghavendra Rao Ananta <[email protected]>
Date:   Fri Oct 31 17:06:02 2025 +0000

    vfio: Fix ksize arg while copying user struct in vfio_df_ioctl_bind_iommufd()
    
    commit 2f03f21fe7516902283b135de272d3c7b10672de upstream.
    
    For the cases where user includes a non-zero value in 'token_uuid_ptr'
    field of 'struct vfio_device_bind_iommufd', the copy_struct_from_user()
    in vfio_df_ioctl_bind_iommufd() fails with -E2BIG. For the 'minsz' passed,
    copy_struct_from_user() expects the newly introduced field to be zero-ed,
    which would be incorrect in this case.
    
    Fix this by passing the actual size of the kernel struct. If working
    with a newer userspace, copy_struct_from_user() would copy the
    'token_uuid_ptr' field, and if working with an old userspace, it would
    zero out this field, thus still retaining backward compatibility.
    
    Fixes: 86624ba3b522 ("vfio/pci: Do vf_token checks for VFIO_DEVICE_BIND_IOMMUFD")
    Cc: [email protected]
    Signed-off-by: Raghavendra Rao Ananta <[email protected]>
    Reviewed-by: Jason Gunthorpe <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alex Williamson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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: vdpa: Fix reference count leak in octep_sriov_enable() [+ + +]
Author: Miaoqian Lin <[email protected]>
Date:   Mon Oct 27 14:07:35 2025 +0800

    virtio: vdpa: Fix reference count leak in octep_sriov_enable()
    
    commit b41ca62c0019de1321d75f2b2f274a28784a41ed upstream.
    
    pci_get_device() will increase the reference count for the returned
    pci_dev, and also decrease the reference count for the input parameter
    from if it is not NULL.
    
    If we break the loop in  with 'vf_pdev' not NULL. We
    need to call pci_dev_put() to decrease the reference count.
    
    Found via static anlaysis and this is similar to commit c508eb042d97
    ("perf/x86/intel/uncore: Fix reference count leak in sad_cfg_iio_topology()")
    
    Fixes: 8b6c724cdab8 ("virtio: vdpa: vDPA driver for Marvell OCTEON DPU devices")
    Cc: [email protected]
    Signed-off-by: Miaoqian Lin <[email protected]>
    Signed-off-by: Michael S. Tsirkin <[email protected]>
    Message-Id: <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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: stop radar detection in cfg80211_leave() [+ + +]
Author: Johannes Berg <[email protected]>
Date:   Fri Nov 21 17:40:21 2025 +0100

    wifi: cfg80211: stop radar detection in cfg80211_leave()
    
    [ Upstream commit 9f33477b9a31a1edfe2df9f1a0359cccb0e16b4c ]
    
    If an interface is set down or, per the previous patch, changes
    type, radar detection for it should be cancelled. This is done
    for AP mode in mac80211 (somewhat needlessly, since cfg80211 can
    do it, but didn't until now), but wasn't handled for mesh, so if
    radar detection was started and then the interface set down or
    its type switched (the latter sometimes happning in the hwsim
    test 'mesh_peer_connected_dfs'), radar detection would be around
    with the interface unknown to the driver, later leading to some
    warnings around chanctx usage.
    
    Link: https://patch.msgid.link/20251121174021.290120e419e3.I2a5650c9062e29c988992dd8ce0d8eb570d23267@changeid
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: cfg80211: use cfg80211_leave() in iftype change [+ + +]
Author: Johannes Berg <[email protected]>
Date:   Fri Nov 21 17:40:20 2025 +0100

    wifi: cfg80211: use cfg80211_leave() in iftype change
    
    [ Upstream commit 7a27b73943a70ee226fa125327101fb18e94701d ]
    
    When changing the interface type, all activity on the interface has
    to be stopped first. This was done independent of existing code in
    cfg80211_leave(), so didn't handle e.g. background radar detection.
    Use cfg80211_leave() to handle it the same way.
    
    Note that cfg80211_leave() behaves slightly differently for IBSS in
    wireless extensions, it won't send an event in that case. We could
    handle that, but since nl80211 was used to change the type, IBSS is
    rare, and wext is already a corner case, it doesn't seem worth it.
    
    Link: https://patch.msgid.link/20251121174021.922ef48ce007.I970c8514252ef8a864a7fbdab9591b71031dee03@changeid
    Signed-off-by: Johannes Berg <[email protected]>
    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:   Fri Sep 26 11:32:54 2025 +0200

    wifi: mt76: Fix DTS power-limits on little endian systems
    
    commit 38b845e1f9e810869b0a0b69f202b877b7b7fb12 upstream.
    
    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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

wifi: mt76: mt792x: fix wifi init fail by setting MCU_RUNNING after CLC load [+ + +]
Author: Quan Zhou <[email protected]>
Date:   Tue Nov 18 19:54:54 2025 +0800

    wifi: mt76: mt792x: fix wifi init fail by setting MCU_RUNNING after CLC load
    
    [ Upstream commit 066f417be5fd8c7fe581c5550206364735dad7a3 ]
    
    Set the MT76_STATE_MCU_RUNNING bit only after mt7921_load_clc()
    has successfully completed. Previously, the MCU_RUNNING state
    was set before loading CLC, which could cause conflict between
    chip mcu_init retry and mac_reset flow, result in chip init fail
    and chip abnormal status. By moving the state set after CLC load,
    firmware initialization becomes robust and resolves init fail issue.
    
    Signed-off-by: Quan Zhou <[email protected]>
    Reviewed-by: [email protected]
    Link: https://patch.msgid.link/19ec8e4465142e774f17801025accd0ae2214092.1763465933.git.quan.zhou@mediatek.com
    Signed-off-by: Felix Fietkau <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: rtl8xxxu: Fix HT40 channel config for RTL8192CU, RTL8723AU [+ + +]
Author: Bitterblue Smith <[email protected]>
Date:   Thu Nov 20 16:10:01 2025 +0200

    wifi: rtl8xxxu: Fix HT40 channel config for RTL8192CU, RTL8723AU
    
    [ Upstream commit 5511ba3de434892e5ef3594d6eabbd12b1629356 ]
    
    Flip the response rate subchannel. It was backwards, causing low
    speeds when using 40 MHz channel width. "iw dev ... station dump"
    showed a low RX rate, 11M or less.
    
    Also fix the channel width field of RF6052_REG_MODE_AG.
    
    Tested only with RTL8192CU, but these settings are identical for
    RTL8723AU.
    
    Signed-off-by: Bitterblue Smith <[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]>

 
x86/bug: Fix old GCC compile fails [+ + +]
Author: Peter Zijlstra <[email protected]>
Date:   Thu Dec 18 11:47:38 2025 +0100

    x86/bug: Fix old GCC compile fails
    
    commit c56a12c71ad38f381105f6e5036dede64ad2dfee upstream.
    
    For some mysterious reasons the GCC 8 and 9 preprocessor manages to
    sporadically fumble _ASM_BYTES(0x0f, 0x0b):
    
    $ grep ".byte[ ]*0x0f" defconfig-build/drivers/net/wireless/realtek/rtlwifi/base.s
            1:       .byte0x0f,0x0b ;
            1:       .byte 0x0f,0x0b ;
    
    which makes the assembler upset and all that. While there are more
    _ASM_BYTES() users (notably the NOP instructions), those don't seem
    affected. Therefore replace the offending ASM_UD2 with one using the
    ud2 mnemonic.
    
    Reported-by: Jean Delvare <[email protected]>
    Suggested-by: Uros Bizjak <[email protected]>
    Fixes: 85a2d4a890dc ("x86,ibt: Use UDB instead of 0xEA")
    Cc: [email protected]
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86/fpu: Fix FPU state core dump truncation on CPUs with no extended xfeatures [+ + +]
Author: Yongxin Liu <[email protected]>
Date:   Wed Dec 10 08:02:20 2025 +0800

    x86/fpu: Fix FPU state core dump truncation on CPUs with no extended xfeatures
    
    [ Upstream commit c8161e5304abb26e6c0bec6efc947992500fa6c5 ]
    
    Zero can be a valid value of num_records. For example, on Intel Atom x6425RE,
    only x87 and SSE are supported (features 0, 1), and fpu_user_cfg.max_features
    is 3. The for_each_extended_xfeature() loop only iterates feature 2, which is
    not enabled, so num_records = 0. This is valid and should not cause core dump
    failure.
    
    The issue is that dump_xsave_layout_desc() returns 0 for both genuine errors
    (dump_emit() failure) and valid cases (no extended features). Use negative
    return values for errors and only abort on genuine failures.
    
    Fixes: ba386777a30b ("x86/elf: Add a new FPU buffer layout info to x86 core files")
    Signed-off-by: Yongxin Liu <[email protected]>
    Signed-off-by: Ingo Molnar <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
x86/mce: Do not clear bank's poll bit in mce_poll_banks on AMD SMCA systems [+ + +]
Author: Avadhut Naik <[email protected]>
Date:   Fri Nov 21 19:04:04 2025 +0000

    x86/mce: Do not clear bank's poll bit in mce_poll_banks on AMD SMCA systems
    
    commit d7ac083f095d894a0b8ac0573516bfd035e6b25a upstream.
    
    Currently, when a CMCI storm detected on a Machine Check bank, subsides, the
    bank's corresponding bit in the mce_poll_banks per-CPU variable is cleared
    unconditionally by cmci_storm_end().
    
    On AMD SMCA systems, this essentially disables polling on that particular bank
    on that CPU. Consequently, any subsequent correctable errors or storms will not
    be logged.
    
    Since AMD SMCA systems allow banks to be managed by both polling and
    interrupts, the polling banks bitmap for a CPU, i.e., mce_poll_banks, should
    not be modified when a storm subsides.
    
    Fixes: 7eae17c4add5 ("x86/mce: Add per-bank CMCI storm mitigation")
    Signed-off-by: Avadhut Naik <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86/microcode: Mark early_parse_cmdline() as __init [+ + +]
Author: Yu Peng <[email protected]>
Date:   Thu Oct 30 20:37:57 2025 +0800

    x86/microcode: Mark early_parse_cmdline() as __init
    
    [ Upstream commit ca8313fd83399ea1d18e695c2ae9b259985c9e1f ]
    
    Fix section mismatch warning reported by modpost:
    
      .text:early_parse_cmdline() -> .init.data:boot_command_line
    
    The function early_parse_cmdline() is only called during init and accesses
    init data, so mark it __init to match its usage.
    
      [ bp: This happens only when the toolchain fails to inline the function and
        I haven't been able to reproduce it with any toolchain I'm using. Patch is
        obviously correct regardless. ]
    
    Signed-off-by: Yu Peng <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Link: https://patch.msgid.link/all/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
x86/mm/tlb/trace: Export the TLB_REMOTE_WRONG_CPU enum in [+ + +]
Author: Tal Zussman <[email protected]>
Date:   Fri Dec 12 04:08:07 2025 -0500

    x86/mm/tlb/trace: Export the TLB_REMOTE_WRONG_CPU enum in <trace/events/tlb.h>
    
    [ Upstream commit 8b62e64e6d30fa047b3aefb1a36e1f80c8acb3d2 ]
    
    When the TLB_REMOTE_WRONG_CPU enum was introduced for the tlb_flush
    tracepoint, the enum was not exported to user-space. Add it to the
    appropriate macro definition to enable parsing by userspace tools, as
    per:
    
      Link: https://lore.kernel.org/all/[email protected]
    
    [ mingo: Capitalize IPI, etc. ]
    
    Fixes: 2815a56e4b72 ("x86/mm/tlb: Add tracepoint for TLB flush IPI to stale CPU")
    Signed-off-by: Tal Zussman <[email protected]>
    Signed-off-by: Ingo Molnar <[email protected]>
    Reviewed-by: Steven Rostedt (Google) <[email protected]>
    Reviewed-by: David Hildenbrand <[email protected]>
    Reviewed-by: Rik van Riel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
x86/msi: Make irq_retrigger() functional for posted MSI [+ + +]
Author: Thomas Gleixner <[email protected]>
Date:   Tue Nov 25 22:50:45 2025 +0100

    x86/msi: Make irq_retrigger() functional for posted MSI
    
    commit 0edc78b82bea85e1b2165d8e870a5c3535919695 upstream.
    
    Luigi reported that retriggering a posted MSI interrupt does not work
    correctly.
    
    The reason is that the retrigger happens at the vector domain by sending an
    IPI to the actual vector on the target CPU. That works correctly exactly
    once because the posted MSI interrupt chip does not issue an EOI as that's
    only required for the posted MSI notification vector itself.
    
    As a consequence the vector becomes stale in the ISR, which not only
    affects this vector but also any lower priority vector in the affected
    APIC because the ISR bit is not cleared.
    
    Luigi proposed to set the vector in the remap PIR bitmap and raise the
    posted MSI notification vector. That works, but that still does not cure a
    related problem:
    
      If there is ever a stray interrupt on such a vector, then the related
      APIC ISR bit becomes stale due to the lack of EOI as described above.
      Unlikely to happen, but if it happens it's not debuggable at all.
    
    So instead of playing games with the PIR, this can be actually solved
    for both cases by:
    
     1) Keeping track of the posted interrupt vector handler state
    
     2) Implementing a posted MSI specific irq_ack() callback which checks that
        state. If the posted vector handler is inactive it issues an EOI,
        otherwise it delegates that to the posted handler.
    
    This is correct versus affinity changes and concurrent events on the posted
    vector as the actual handler invocation is serialized through the interrupt
    descriptor lock.
    
    Fixes: ed1e48ea4370 ("iommu/vt-d: Enable posted mode for device MSIs")
    Reported-by: Luigi Rizzo <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Tested-by: Luigi Rizzo <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Closes: https://lore.kernel.org/lkml/[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]>

 
xfs: don't leak a locked dquot when xfs_dquot_attach_buf fails [+ + +]
Author: Christoph Hellwig <[email protected]>
Date:   Mon Nov 10 14:22:53 2025 +0100

    xfs: don't leak a locked dquot when xfs_dquot_attach_buf fails
    
    commit 204c8f77e8d4a3006f8abe40331f221a597ce608 upstream.
    
    xfs_qm_quotacheck_dqadjust acquired the dquot through xfs_qm_dqget,
    which means it owns a reference and holds q_qlock.  Both need to
    be dropped on an error exit.
    
    Cc: <[email protected]> # v6.13
    Fixes: ca378189fdfa ("xfs: convert quotacheck to attach dquot buffers")
    Reported-by: kernel test robot <[email protected]>
    Reported-by: Dan Carpenter <[email protected]>
    Signed-off-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Darrick J. Wong <[email protected]>
    Signed-off-by: Carlos Maiolino <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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]>

xfs: fix a UAF problem in xattr repair [+ + +]
Author: Darrick J. Wong <[email protected]>
Date:   Thu Dec 4 13:43:50 2025 -0800

    xfs: fix a UAF problem in xattr repair
    
    commit 5990fd756943836978ad184aac980e2b36ab7e01 upstream.
    
    The xchk_setup_xattr_buf function can allocate a new value buffer, which
    means that any reference to ab->value before the call could become a
    dangling pointer.  Fix this by moving an assignment to after the buffer
    setup.
    
    Cc: [email protected] # v6.10
    Fixes: e47dcf113ae348 ("xfs: repair extended attributes")
    Signed-off-by: Darrick J. Wong <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Carlos Maiolino <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

xfs: fix stupid compiler warning [+ + +]
Author: Darrick J. Wong <[email protected]>
Date:   Thu Dec 4 13:44:15 2025 -0800

    xfs: fix stupid compiler warning
    
    commit f06725052098d7b1133ac3846d693c383dc427a2 upstream.
    
    gcc 14.2 warns about:
    
    xfs_attr_item.c: In function ‘xfs_attr_recover_work’:
    xfs_attr_item.c:785:9: warning: ‘ip’ may be used uninitialized [-Wmaybe-uninitialized]
      785 |         xfs_trans_ijoin(tp, ip, 0);
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~
    xfs_attr_item.c:740:42: note: ‘ip’ was declared here
      740 |         struct xfs_inode                *ip;
          |                                          ^~
    
    I think this is bogus since xfs_attri_recover_work either returns a real
    pointer having initialized ip or an ERR_PTR having not touched it, but
    the tools are smarter than me so let's just null-init the variable
    anyway.
    
    Cc: [email protected] # v6.8
    Fixes: e70fb328d52772 ("xfs: recreate work items when recovering intent items")
    Signed-off-by: Darrick J. Wong <[email protected]>
    Reviewed-by: Carlos Maiolino <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Carlos Maiolino <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

xfs: fix the zoned RT growfs check for zone alignment [+ + +]
Author: Christoph Hellwig <[email protected]>
Date:   Tue Dec 16 18:30:09 2025 +0100

    xfs: fix the zoned RT growfs check for zone alignment
    
    commit dc68c0f601691010dd5ae53442f8523f41a53131 upstream.
    
    The grofs code for zoned RT subvolums already tries to check for zone
    alignment, but gets it wrong by using the old instead of the new mount
    structure.
    
    Fixes: 01b71e64bb87 ("xfs: support growfs on zoned file systems")
    Signed-off-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Darrick J. Wong <[email protected]>
    Cc: [email protected] # v6.15
    Signed-off-by: Carlos Maiolino <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

xfs: validate that zoned RT devices are zone aligned [+ + +]
Author: Christoph Hellwig <[email protected]>
Date:   Tue Dec 16 18:30:08 2025 +0100

    xfs: validate that zoned RT devices are zone aligned
    
    commit 982d2616a2906113e433fdc0cfcc122f8d1bb60a upstream.
    
    Garbage collection assumes all zones contain the full amount of blocks.
    Mkfs already ensures this happens, but make the kernel check it as well
    to avoid getting into trouble due to fuzzers or mkfs bugs.
    
    Fixes: 2167eaabe2fa ("xfs: define the zoned on-disk format")
    Signed-off-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Darrick J. Wong <[email protected]>
    Cc: [email protected] # v6.15
    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:   Thu Nov 27 11:16:44 2025 +0000

    xhci: dbgtty: fix device unregister: fixup
    
    commit 74098cc06e753d3ffd8398b040a3a1dfb65260c0 upstream.
    
    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]>

 
zloop: fail zone append operations that are targeting full zones [+ + +]
Author: Damien Le Moal <[email protected]>
Date:   Sat Nov 15 21:15:52 2025 +0900

    zloop: fail zone append operations that are targeting full zones
    
    commit cf28f6f923cb1dd2765b5c3d7697bb4dcf2096a0 upstream.
    
    zloop_rw() will fail any regular write operation that targets a full
    sequential zone. The check for this is indirect and achieved by checking
    the write pointer alignment of the write operation. But this check is
    ineffective for zone append operations since these are alwasy
    automatically directed at a zone write pointer.
    
    Prevent zone append operations from being executed in a full zone with
    an explicit check of the zone condition.
    
    Fixes: eb0570c7df23 ("block: new zoned loop block device driver")
    Cc: [email protected]
    Signed-off-by: Damien Le Moal <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

zloop: make the write pointer of full zones invalid [+ + +]
Author: Damien Le Moal <[email protected]>
Date:   Sat Nov 15 21:15:51 2025 +0900

    zloop: make the write pointer of full zones invalid
    
    commit 866d65745b635927c3d1343ab67e6fd4a99d116d upstream.
    
    The write pointer of zones that are in the full condition is always
    invalid. Reflect that fact by setting the write pointer of full zones
    to ULLONG_MAX.
    
    Fixes: eb0570c7df23 ("block: new zoned loop block device driver")
    Cc: [email protected]
    Signed-off-by: Damien Le Moal <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>