Changelog in Linux kernel 5.15.198

 
ACPI: CPPC: Fix missing PCC check for guaranteed_perf [+ + +]
Author: Pengjie Zhang <zhangpengjie2@huawei.com>
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 <zhangpengjie2@huawei.com>
    Cc: 4.20+ <stable@vger.kernel.org> # 4.20+
    [ rjw: Subject and changelog edits ]
    Link: https://patch.msgid.link/20251210132227.1988380-1-zhangpengjie2@huawei.com
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

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

ACPI: property: Fix fwnode refcount leak in acpi_fwnode_graph_parse_endpoint() [+ + +]
Author: Haotian Zhang <vulab@iscas.ac.cn>
Date:   Tue Nov 11 15:50:00 2025 +0800

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

ACPI: property: Use ACPI functions in acpi_graph_get_next_endpoint() only [+ + +]
Author: Sakari Ailus <sakari.ailus@linux.intel.com>
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 <sakari.ailus@linux.intel.com>
    Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
    Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
    Link: https://patch.msgid.link/20251001104320.1272752-3-sakari.ailus@linux.intel.com
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ACPICA: Avoid walking the Namespace if start_node is NULL [+ + +]
Author: Cryolitia PukNgae <cryolitia.pukngae@linux.dev>
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 <cryolitia.pukngae@linux.dev>
    Reviewed-by: WangYuli <wangyl5933@chinaunicom.cn>
    [ rjw: Subject adjustment, changelog edits ]
    Link: https://patch.msgid.link/20251125-acpica-v1-1-99e63b1b25f8@linux.dev
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
alpha: don't reference obsolete termio struct for TC* constants [+ + +]
Author: Sam James <sam@gentoo.org>
Date:   Fri Dec 5 08:14:57 2025 +0000

    alpha: don't reference obsolete termio struct for TC* constants
    
    [ Upstream commit 9aeed9041929812a10a6d693af050846942a1d16 ]
    
    Similar in nature to ab107276607af90b13a5994997e19b7b9731e251. glibc-2.42
    drops the legacy termio struct, but the ioctls.h header still defines some
    TC* constants in terms of termio (via sizeof). Hardcode the values instead.
    
    This fixes building Python for example, which falls over like:
      ./Modules/termios.c:1119:16: error: invalid application of 'sizeof' to incomplete type 'struct termio'
    
    Link: https://bugs.gentoo.org/961769
    Link: https://bugs.gentoo.org/962600
    Signed-off-by: Sam James <sam@gentoo.org>
    Reviewed-by: Magnus Lindholm <linmag7@gmail.com>
    Link: https://lore.kernel.org/r/6ebd3451908785cad53b50ca6bc46cfe9d6bc03c.1764922497.git.sam@gentoo.org
    Signed-off-by: Magnus Lindholm <linmag7@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ALSA: dice: fix buffer overflow in detect_stream_formats() [+ + +]
Author: Junrui Luo <moonafterrain@outlook.com>
Date:   Fri Nov 28 12:06:31 2025 +0800

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

ALSA: pcmcia: Fix resource leak in snd_pdacf_probe error path [+ + +]
Author: Haotian Zhang <vulab@iscas.ac.cn>
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 <tiwai@suse.de>
    Signed-off-by: Haotian Zhang <vulab@iscas.ac.cn>
    Link: https://patch.msgid.link/20251215090433.211-1-vulab@iscas.ac.cn
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

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

    ALSA: uapi: Fix typo in asound.h comment
    
    [ Upstream commit 9a97857db0c5655b8932f86b5d18bb959079b0ee ]
    
    Fix 'level-shit' to 'level-shift' in struct snd_cea_861_aud_if comment.
    
    Fixes: 7ba1c40b536e ("ALSA: Add definitions for CEA-861 Audio InfoFrames")
    Signed-off-by: Andres J Rosa <andyrosa@gmail.com>
    Link: https://patch.msgid.link/20251203162509.1822-1-andyrosa@gmail.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: usb-mixer: us16x08: validate meter packet indices [+ + +]
Author: Shipei Qu <qu@darknavy.com>
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) <vr@darknavy.com>
    Closes: https://lore.kernel.org/tencent_21C112743C44C1A2517FF219@qq.com
    Signed-off-by: Shipei Qu <qu@darknavy.com>
    Link: https://patch.msgid.link/20251217024630.59576-1-qu@darknavy.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: vxpocket: Fix resource leak in vxpocket_probe error path [+ + +]
Author: Haotian Zhang <vulab@iscas.ac.cn>
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 <vulab@iscas.ac.cn>
    Link: https://patch.msgid.link/20251215042652.695-1-vulab@iscas.ac.cn
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: wavefront: Clear substream pointers on close [+ + +]
Author: Junrui Luo <moonafterrain@outlook.com>
Date:   Tue Dec 16 07:03:55 2025 -0500

    ALSA: wavefront: Clear substream pointers on close
    
    [ Upstream commit e11c5c13ce0ab2325d38fe63500be1dd88b81e38 ]
    
    Clear substream pointers in close functions to avoid leaving dangling
    pointers, helping to improve code safety and
    prevents potential issues.
    
    Reported-by: Yuhao Jiang <danisjiang@gmail.com>
    Reported-by: Junrui Luo <moonafterrain@outlook.com>
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable@vger.kernel.org
    Signed-off-by: Junrui Luo <moonafterrain@outlook.com>
    Link: https://patch.msgid.link/SYBPR01MB7881DF762CAB45EE42F6D812AFC2A@SYBPR01MB7881.ausprd01.prod.outlook.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    [ No guard() in older trees ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: wavefront: Fix integer overflow in sample size validation [+ + +]
Author: Junrui Luo <moonafterrain@outlook.com>
Date:   Tue Dec 16 06:06:27 2025 -0500

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

ALSA: wavefront: Use standard print API [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Tue Dec 16 06:06:26 2025 -0500

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

 
amba: tegra-ahb: Fix device leak on SMMU enable [+ + +]
Author: Johan Hovold <johan@kernel.org>
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: stable@vger.kernel.org      # 3.5
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Thierry Reding <treding@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
arm64: dts: add off-on-delay-us for usdhc2 regulator [+ + +]
Author: Haibo Chen <haibo.chen@nxp.com>
Date:   Wed Nov 19 11:22:40 2025 +0800

    arm64: dts: add off-on-delay-us for usdhc2 regulator
    
    [ Upstream commit ca643894a37a25713029b36cfe7d1bae515cac08 ]
    
    For SD card, according to the spec requirement, for sd card power reset
    operation, it need sd card supply voltage to be lower than 0.5v and keep
    over 1ms, otherwise, next time power back the sd card supply voltage to
    3.3v, sd card can't support SD3.0 mode again.
    
    To match such requirement on imx8qm-mek board, add 4.8ms delay between
    sd power off and power on.
    
    Fixes: 307fd14d4b14 ("arm64: dts: imx: add imx8qm mek support")
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Signed-off-by: Haibo Chen <haibo.chen@nxp.com>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

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

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

 
ARM: 9461/1: Disable HIGHPTE on PREEMPT_RT kernels [+ + +]
Author: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date:   Tue Nov 11 16:54:37 2025 +0100

    ARM: 9461/1: Disable HIGHPTE on PREEMPT_RT kernels
    
    [ Upstream commit fedadc4137234c3d00c4785eeed3e747fe9036ae ]
    
    gup_pgd_range() is invoked with disabled interrupts and invokes
    __kmap_local_page_prot() via pte_offset_map(), gup_p4d_range().
    With HIGHPTE enabled, __kmap_local_page_prot() invokes kmap_high_get()
    which uses a spinlock_t via lock_kmap_any(). This leads to an
    sleeping-while-atomic error on PREEMPT_RT because spinlock_t becomes a
    sleeping lock and must not be acquired in atomic context.
    
    The loop in map_new_virtual() uses wait_queue_head_t for wake up which
    also is using a spinlock_t.
    
    Since HIGHPTE is rarely needed at all, turn it off for PREEMPT_RT
    to allow the use of get_user_pages_fast().
    
    [arnd: rework patch to turn off HIGHPTE instead of HAVE_PAST_GUP]
    
    Co-developed-by: Arnd Bergmann <arnd@arndb.de>
    
    Acked-by: Linus Walleij <linus.walleij@linaro.org>
    Reviewed-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

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

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

ARM: dts: imx6q-ba16: fix RTC interrupt level [+ + +]
Author: Ian Ray <ian.ray@gehealthcare.com>
Date:   Mon Dec 1 11:56:05 2025 +0200

    ARM: dts: imx6q-ba16: fix RTC interrupt level
    
    [ Upstream commit e6a4eedd49ce27c16a80506c66a04707e0ee0116 ]
    
    RTC interrupt level should be set to "LOW". This was revealed by the
    introduction of commit:
    
      f181987ef477 ("rtc: m41t80: use IRQ flags obtained from fwnode")
    
    which changed the way IRQ type is obtained.
    
    Fixes: 56c27310c1b4 ("ARM: dts: imx: Add Advantech BA-16 Qseven module")
    Signed-off-by: Ian Ray <ian.ray@gehealthcare.com>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: microchip: sama7g5: fix uart fifo size to 32 [+ + +]
Author: Nicolas Ferre <nicolas.ferre@microchip.com>
Date:   Wed Dec 31 17:44:27 2025 -0500

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

 
arp: do not assume dev_hard_header() does not change skb->head [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jan 7 21:22:50 2026 +0000

    arp: do not assume dev_hard_header() does not change skb->head
    
    [ Upstream commit c92510f5e3f82ba11c95991824a41e59a9c5ed81 ]
    
    arp_create() is the only dev_hard_header() caller
    making assumption about skb->head being unchanged.
    
    A recent commit broke this assumption.
    
    Initialize @arp pointer after dev_hard_header() call.
    
    Fixes: db5b4e39c4e6 ("ip6_gre: make ip6gre_header() robust")
    Reported-by: syzbot+58b44a770a1585795351@syzkaller.appspotmail.com
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20260107212250.384552-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ASoC: ak4458: Disable regulator when error happens [+ + +]
Author: Shengjiu Wang <shengjiu.wang@nxp.com>
Date:   Wed Dec 3 18:05:28 2025 +0800

    ASoC: ak4458: Disable regulator when error happens
    
    [ Upstream commit ae585fabb9713a43e358cf606451386757225c95 ]
    
    Disable regulator in runtime resume when error happens to balance
    the reference count of regulator.
    
    Fixes: 7e3096e8f823 ("ASoC: ak4458: Add regulator support")
    Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
    Link: https://patch.msgid.link/20251203100529.3841203-2-shengjiu.wang@nxp.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: ak5558: Disable regulator when error happens [+ + +]
Author: Shengjiu Wang <shengjiu.wang@nxp.com>
Date:   Wed Dec 3 18:05:29 2025 +0800

    ASoC: ak5558: Disable regulator when error happens
    
    [ Upstream commit 1f8f726a2a29c28f65b30880335a1610c5e63594 ]
    
    Disable regulator in runtime resume when error happens to balance
    the reference count of regulator.
    
    Fixes: 2ff6d5a108c6 ("ASoC: ak5558: Add regulator support")
    Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
    Link: https://patch.msgid.link/20251203100529.3841203-3-shengjiu.wang@nxp.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: bcm: bcm63xx-pcm-whistler: Check return value of of_dma_configure() [+ + +]
Author: Haotian Zhang <vulab@iscas.ac.cn>
Date:   Tue Dec 2 18:16:42 2025 +0800

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

ASoC: fsl_sai: Add missing registers to cache default [+ + +]
Author: Alexander Stein <alexander.stein@ew.tq-group.com>
Date:   Tue Dec 16 11:22:45 2025 +0100

    ASoC: fsl_sai: Add missing registers to cache default
    
    [ Upstream commit 90ed688792a6b7012b3e8a2f858bc3fe7454d0eb ]
    
    Drivers does cache sync during runtime resume, setting all writable
    registers. Not all writable registers are set in cache default, resulting
    in the erorr message:
      fsl-sai 30c30000.sai: using zero-initialized flat cache, this may cause
      unexpected behavior
    
    Fix this by adding missing writable register defaults.
    
    Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
    Link: https://patch.msgid.link/20251216102246.676181-1-alexander.stein@ew.tq-group.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: fsl_xcvr: Add Counter registers [+ + +]
Author: Shengjiu Wang <shengjiu.wang@nxp.com>
Date:   Fri Oct 28 15:03:47 2022 +0800

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

ASoC: fsl_xcvr: Add support for i.MX93 platform [+ + +]
Author: Chancel Liu <chancel.liu@nxp.com>
Date:   Wed Jan 4 10:39:52 2023 +0800

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

ASoC: fsl_xcvr: clear the channel status control memory [+ + +]
Author: Shengjiu Wang <shengjiu.wang@nxp.com>
Date:   Wed Nov 26 14:45:09 2025 +0800

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

ASoC: fsl_xcvr: get channel status data when PHY is not exists [+ + +]
Author: Shengjiu Wang <shengjiu.wang@nxp.com>
Date:   Thu Jul 10 11:04:04 2025 +0800

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

ASoC: Intel: catpt: Fix error path in hw_params() [+ + +]
Author: Cezary Rojewski <cezary.rojewski@intel.com>
Date:   Wed Nov 26 10:55:20 2025 +0100

    ASoC: Intel: catpt: Fix error path in hw_params()
    
    [ Upstream commit 86a5b621be658fc8fe594ca6db317d64de30cce1 ]
    
    Do not leave any resources hanging on the DSP side if
    applying user settings fails.
    
    Fixes: 768a3a3b327d ("ASoC: Intel: catpt: Optimize applying user settings")
    Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://patch.msgid.link/20251126095523.3925364-4-cezary.rojewski@intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: qcom: q6adm: the the copp device only during last instance [+ + +]
Author: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Date:   Thu Oct 23 11:24:26 2025 +0100

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

ASoC: qcom: q6asm-dai: perform correct state check before closing [+ + +]
Author: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Date:   Thu Oct 23 11:24:28 2025 +0100

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

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

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

ASoC: stm32: sai: fix clk prepare imbalance on probe failure [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Jan 5 09:27:28 2026 -0500

    ASoC: stm32: sai: fix clk prepare imbalance on probe failure
    
    [ Upstream commit 312ec2f0d9d1a5656f76d770bbf1d967e9289aa7 ]
    
    Make sure to unprepare the parent clock also on probe failures (e.g.
    probe deferral).
    
    Fixes: a14bf98c045b ("ASoC: stm32: sai: fix possible circular locking")
    Cc: stable@vger.kernel.org      # 5.5
    Cc: Olivier Moysan <olivier.moysan@st.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: olivier moysan <olivier.moysan@foss.st.com>
    Link: https://patch.msgid.link/20251124104908.15754-3-johan@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: stm32: sai: fix device leak on probe [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Nov 24 11:49:05 2025 +0100

    ASoC: stm32: sai: fix device leak on probe
    
    commit e26ff429eaf10c4ef1bc3dabd9bf27eb54b7e1f4 upstream.
    
    Make sure to drop the reference taken when looking up the sync provider
    device and its driver data during DAI probe on probe failures and on
    unbind.
    
    Note that holding a reference to a device does not prevent its driver
    data from going away so there is no point in keeping the reference.
    
    Fixes: 7dd0d835582f ("ASoC: stm32: sai: simplify sync modes management")
    Fixes: 1c3816a19487 ("ASoC: stm32: sai: add missing put_device()")
    Cc: stable@vger.kernel.org      # 4.16: 1c3816a19487
    Cc: olivier moysan <olivier.moysan@st.com>
    Cc: Wen Yang <yellowriver2010@hotmail.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: olivier moysan <olivier.moysan@foss.st.com>
    Link: https://patch.msgid.link/20251124104908.15754-2-johan@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: stm32: sai: fix OF node leak on probe [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Jan 5 10:10:33 2026 -0500

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

ASoC: stm32: sai: Use the devm_clk_get_optional() helper [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Mon Jan 5 09:27:27 2026 -0500

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

ASoC: stm: Use dev_err_probe() helper [+ + +]
Author: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Date:   Mon Jan 5 09:27:26 2026 -0500

    ASoC: stm: Use dev_err_probe() helper
    
    [ Upstream commit efc162cbd480f1fb47d439c193ec9731bcc6c749 ]
    
    Use the dev_err_probe() helper, instead of open-coding the same
    operation.
    
    Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
    Link: https://lore.kernel.org/r/20211214020843.2225831-22-kuninori.morimoto.gx@renesas.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: 312ec2f0d9d1 ("ASoC: stm32: sai: fix clk prepare imbalance on probe failure")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
atm: Fix dma_free_coherent() size [+ + +]
Author: Thomas Fourier <fourier.thomas@gmail.com>
Date:   Wed Jan 7 10:01:36 2026 +0100

    atm: Fix dma_free_coherent() size
    
    commit 4d984b0574ff708e66152763fbfdef24ea40933f upstream.
    
    The size of the buffer is not the same when alloc'd with
    dma_alloc_coherent() in he_init_tpdrq() and freed.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Thomas Fourier <fourier.thomas@gmail.com>
    Link: https://patch.msgid.link/20260107090141.80900-2-fourier.thomas@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
backlight: led-bl: Add devlink to supplier LEDs [+ + +]
Author: Luca Ceresoli <luca.ceresoli@bootlin.com>
Date:   Mon May 19 22:19:11 2025 +0200

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

backlight: led_bl: Take led_access lock when required [+ + +]
Author: Mans Rullgard <mans@mansr.com>
Date:   Mon Jun 19 17:02:49 2023 +0100

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

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

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

 
bfs: Reconstruct file type when loading from disk [+ + +]
Author: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Date:   Thu Oct 23 22:25:49 2025 +0900

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

 
blk-mq: Abort suspend when wakeup events are pending [+ + +]
Author: Cong Zhang <cong.zhang@oss.qualcomm.com>
Date:   Wed Dec 3 11:34:21 2025 +0800

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

 
blk-throttle: Set BIO_THROTTLED when bio has been throttled [+ + +]
Author: Laibin Qiu <qiulaibin@huawei.com>
Date:   Mon Jan 12 11:39:36 2026 +0000

    blk-throttle: Set BIO_THROTTLED when bio has been throttled
    
    [ Upstream commit 5a011f889b4832aa80c2a872a5aade5c48d2756f ]
    
    1.In current process, all bio will set the BIO_THROTTLED flag
    after __blk_throtl_bio().
    
    2.If bio needs to be throttled, it will start the timer and
    stop submit bio directly. Bio will submit in
    blk_throtl_dispatch_work_fn() when the timer expires.But in
    the current process, if bio is throttled. The BIO_THROTTLED
    will be set to bio after timer start. If the bio has been
    completed, it may cause use-after-free blow.
    
    BUG: KASAN: use-after-free in blk_throtl_bio+0x12f0/0x2c70
    Read of size 2 at addr ffff88801b8902d4 by task fio/26380
    
     dump_stack+0x9b/0xce
     print_address_description.constprop.6+0x3e/0x60
     kasan_report.cold.9+0x22/0x3a
     blk_throtl_bio+0x12f0/0x2c70
     submit_bio_checks+0x701/0x1550
     submit_bio_noacct+0x83/0xc80
     submit_bio+0xa7/0x330
     mpage_readahead+0x380/0x500
     read_pages+0x1c1/0xbf0
     page_cache_ra_unbounded+0x471/0x6f0
     do_page_cache_ra+0xda/0x110
     ondemand_readahead+0x442/0xae0
     page_cache_async_ra+0x210/0x300
     generic_file_buffered_read+0x4d9/0x2130
     generic_file_read_iter+0x315/0x490
     blkdev_read_iter+0x113/0x1b0
     aio_read+0x2ad/0x450
     io_submit_one+0xc8e/0x1d60
     __se_sys_io_submit+0x125/0x350
     do_syscall_64+0x2d/0x40
     entry_SYSCALL_64_after_hwframe+0x44/0xa9
    
    Allocated by task 26380:
     kasan_save_stack+0x19/0x40
     __kasan_kmalloc.constprop.2+0xc1/0xd0
     kmem_cache_alloc+0x146/0x440
     mempool_alloc+0x125/0x2f0
     bio_alloc_bioset+0x353/0x590
     mpage_alloc+0x3b/0x240
     do_mpage_readpage+0xddf/0x1ef0
     mpage_readahead+0x264/0x500
     read_pages+0x1c1/0xbf0
     page_cache_ra_unbounded+0x471/0x6f0
     do_page_cache_ra+0xda/0x110
     ondemand_readahead+0x442/0xae0
     page_cache_async_ra+0x210/0x300
     generic_file_buffered_read+0x4d9/0x2130
     generic_file_read_iter+0x315/0x490
     blkdev_read_iter+0x113/0x1b0
     aio_read+0x2ad/0x450
     io_submit_one+0xc8e/0x1d60
     __se_sys_io_submit+0x125/0x350
     do_syscall_64+0x2d/0x40
     entry_SYSCALL_64_after_hwframe+0x44/0xa9
    
    Freed by task 0:
     kasan_save_stack+0x19/0x40
     kasan_set_track+0x1c/0x30
     kasan_set_free_info+0x1b/0x30
     __kasan_slab_free+0x111/0x160
     kmem_cache_free+0x94/0x460
     mempool_free+0xd6/0x320
     bio_free+0xe0/0x130
     bio_put+0xab/0xe0
     bio_endio+0x3a6/0x5d0
     blk_update_request+0x590/0x1370
     scsi_end_request+0x7d/0x400
     scsi_io_completion+0x1aa/0xe50
     scsi_softirq_done+0x11b/0x240
     blk_mq_complete_request+0xd4/0x120
     scsi_mq_done+0xf0/0x200
     virtscsi_vq_done+0xbc/0x150
     vring_interrupt+0x179/0x390
     __handle_irq_event_percpu+0xf7/0x490
     handle_irq_event_percpu+0x7b/0x160
     handle_irq_event+0xcc/0x170
     handle_edge_irq+0x215/0xb20
     common_interrupt+0x60/0x120
     asm_common_interrupt+0x1e/0x40
    
    Fix this by move BIO_THROTTLED set into the queue_lock.
    
    Signed-off-by: Laibin Qiu <qiulaibin@huawei.com>
    Reviewed-by: Ming Lei <ming.lei@redhat.com>
    Link: https://lore.kernel.org/r/20220301123919.2381579-1-qiulaibin@huawei.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    [ Keerthana: Remove 'out' and handle return with reference to commit 81c7a63 ]
    Signed-off-by: Keerthana K <keerthana.kalyanasundaram@broadcom.com>
    Signed-off-by: Shivani Agarwal <shivani.agarwal@broadcom.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

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

block: rate-limit capacity change info log [+ + +]
Author: Li Chen <chenl311@chinatelecom.cn>
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: stable@vger.kernel.org
    Signed-off-by: Li Chen <chenl311@chinatelecom.cn>
    Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Bluetooth: btusb: Add new VID/PID 13d3/3533 for RTL8821CE [+ + +]
Author: Gongwei Li <ligongwei@kylinos.cn>
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 <ligongwei@kylinos.cn>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: btusb: revert use of devm_kzalloc in btusb [+ + +]
Author: Raphael Pinsonneault-Thibeault <rpthibeault@gmail.com>
Date:   Wed Dec 10 11:02:28 2025 -0500

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

 
bnxt_en: Fix potential data corruption with HW GRO/LRO [+ + +]
Author: Srijit Bose <srijit.bose@broadcom.com>
Date:   Wed Dec 31 00:36:25 2025 -0800

    bnxt_en: Fix potential data corruption with HW GRO/LRO
    
    [ Upstream commit ffeafa65b2b26df2f5b5a6118d3174f17bd12ec5 ]
    
    Fix the max number of bits passed to find_first_zero_bit() in
    bnxt_alloc_agg_idx().  We were incorrectly passing the number of
    long words.  find_first_zero_bit() may fail to find a zero bit and
    cause a wrong ID to be used.  If the wrong ID is already in use, this
    can cause data corruption.  Sometimes an error like this can also be
    seen:
    
    bnxt_en 0000:83:00.0 enp131s0np0: TPA end agg_buf 2 != expected agg_bufs 1
    
    Fix it by passing the correct number of bits MAX_TPA_P5.  Use
    DECLARE_BITMAP() to more cleanly define the bitmap.  Add a sanity
    check to warn if a bit cannot be found and reset the ring [MChan].
    
    Fixes: ec4d8e7cf024 ("bnxt_en: Add TPA ID mapping logic for 57500 chips.")
    Reviewed-by: Ray Jui <ray.jui@broadcom.com>
    Signed-off-by: Srijit Bose <srijit.bose@broadcom.com>
    Signed-off-by: Michael Chan <michael.chan@broadcom.com>
    Reviewed-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
    Link: https://patch.msgid.link/20251231083625.3911652-1-michael.chan@broadcom.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf, arm64: Do not audit capability check in do_jit() [+ + +]
Author: Ondrej Mosnacek <omosnace@redhat.com>
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 <omosnace@redhat.com>
    Link: https://lore.kernel.org/r/20251204125916.441021-1-omosnace@redhat.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bridge: fix C-VLAN preservation in 802.1ad vlan_tunnel egress [+ + +]
Author: Alexandre Knecht <knecht.alexandre@gmail.com>
Date:   Sun Dec 28 03:00:57 2025 +0100

    bridge: fix C-VLAN preservation in 802.1ad vlan_tunnel egress
    
    [ Upstream commit 3128df6be147768fe536986fbb85db1d37806a9f ]
    
    When using an 802.1ad bridge with vlan_tunnel, the C-VLAN tag is
    incorrectly stripped from frames during egress processing.
    
    br_handle_egress_vlan_tunnel() uses skb_vlan_pop() to remove the S-VLAN
    from hwaccel before VXLAN encapsulation. However, skb_vlan_pop() also
    moves any "next" VLAN from the payload into hwaccel:
    
        /* move next vlan tag to hw accel tag */
        __skb_vlan_pop(skb, &vlan_tci);
        __vlan_hwaccel_put_tag(skb, vlan_proto, vlan_tci);
    
    For QinQ frames where the C-VLAN sits in the payload, this moves it to
    hwaccel where it gets lost during VXLAN encapsulation.
    
    Fix by calling __vlan_hwaccel_clear_tag() directly, which clears only
    the hwaccel S-VLAN and leaves the payload untouched.
    
    This path is only taken when vlan_tunnel is enabled and tunnel_info
    is configured, so 802.1Q bridges are unaffected.
    
    Tested with 802.1ad bridge + VXLAN vlan_tunnel, verified C-VLAN
    preserved in VXLAN payload via tcpdump.
    
    Fixes: 11538d039ac6 ("bridge: vlan dst_metadata hooks in ingress and egress paths")
    Signed-off-by: Alexandre Knecht <knecht.alexandre@gmail.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
    Link: https://patch.msgid.link/20251228020057.2788865-1-knecht.alexandre@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
broadcom: b44: prevent uninitialized value usage [+ + +]
Author: Alexey Simakov <bigalex934@gmail.com>
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 <jonas.gorski@gmail.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Alexey Simakov <bigalex934@gmail.com>
    Reviewed-by: Michael Chan <michael.chan@broadcom.com>
    Link: https://patch.msgid.link/20251205155815.4348-1-bigalex934@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
btrfs: don't rewrite ret from inode_permission [+ + +]
Author: Josef Bacik <josef@toxicpanda.com>
Date:   Mon Dec 29 17:12:38 2025 -0500

    btrfs: don't rewrite ret from inode_permission
    
    [ Upstream commit 0185c2292c600993199bc6b1f342ad47a9e8c678 ]
    
    In our user safe ino resolve ioctl we'll just turn any ret into -EACCES
    from inode_permission().  This is redundant, and could potentially be
    wrong if we had an ENOMEM in the security layer or some such other
    error, so simply return the actual return value.
    
    Note: The patch was taken from v5 of fscrypt patchset
    (https://lore.kernel.org/linux-btrfs/cover.1706116485.git.josef@toxicpanda.com/)
    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: stable@vger.kernel.org # 5.4+
    Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Signed-off-by: Josef Bacik <josef@toxicpanda.com>
    Signed-off-by: Daniel Vacek <neelx@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    [ add note ]
    Signed-off-by: David Sterba <dsterba@suse.com>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: fix memory leak of fs_devices in degraded seed device path [+ + +]
Author: Deepanshu Kartikey <kartikey406@gmail.com>
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: syzbot+eadd98df8bceb15d7fed@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=eadd98df8bceb15d7fed
    Tested-by: syzbot+eadd98df8bceb15d7fed@syzkaller.appspotmail.com
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Deepanshu Kartikey <kartikey406@gmail.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: scrub: always update btrfs_scrub_progress::last_physical [+ + +]
Author: Qu Wenruo <wqu@suse.com>
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 <wqu@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
caif: fix integer underflow in cffrml_receive() [+ + +]
Author: Junrui Luo <moonafterrain@outlook.com>
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 <danisjiang@gmail.com>
    Reported-by: Junrui Luo <moonafterrain@outlook.com>
    Fixes: b482cd2053e3 ("net-caif: add CAIF core protocol stack")
    Signed-off-by: Junrui Luo <moonafterrain@outlook.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/SYBPR01MB7881511122BAFEA8212A1608AFA6A@SYBPR01MB7881.ausprd01.prod.outlook.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
can: j1939: make j1939_session_activate() fail if device is no longer registered [+ + +]
Author: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Date:   Tue Nov 25 22:39:59 2025 +0900

    can: j1939: make j1939_session_activate() fail if device is no longer registered
    
    [ Upstream commit 5d5602236f5db19e8b337a2cd87a90ace5ea776d ]
    
    syzbot is still reporting
    
      unregister_netdevice: waiting for vcan0 to become free. Usage count = 2
    
    even after commit 93a27b5891b8 ("can: j1939: add missing calls in
    NETDEV_UNREGISTER notification handler") was added. A debug printk() patch
    found that j1939_session_activate() can succeed even after
    j1939_cancel_active_session() from j1939_netdev_notify(NETDEV_UNREGISTER)
    has completed.
    
    Since j1939_cancel_active_session() is processed with the session list lock
    held, checking ndev->reg_state in j1939_session_activate() with the session
    list lock held can reliably close the race window.
    
    Reported-by: syzbot <syzbot+881d65229ca4f9ae8c84@syzkaller.appspotmail.com>
    Closes: https://syzkaller.appspot.com/bug?extid=881d65229ca4f9ae8c84
    Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Acked-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Link: https://patch.msgid.link/b9653191-d479-4c8b-8536-1326d028db5c@I-love.SAKURA.ne.jp
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
char: applicom: fix NULL pointer dereference in ac_ioctl [+ + +]
Author: Tianchu Chen <flynnnchen@tencent.com>
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 <flynnnchen@tencent.com>
    Acked-by: Arnd Bergmann <arnd@arndb.de>
    Cc: stable <stable@kernel.org>
    Link: https://patch.msgid.link/20251128155323.a786fde92ebb926cbe96fcb1@linux.dev
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
clk: mvebu: cp110 add CLK_IGNORE_UNUSED to pcie_x10, pcie_x11 & pcie_x4 [+ + +]
Author: Josua Mayer <josua@solid-run.com>
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/b71596c7-461b-44b6-89ab-3cfbd492639f@solid-run.com
    Signed-off-by: Josua Mayer <josua@solid-run.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: renesas: r9a06g032: Fix memory leak in error path [+ + +]
Author: Haotian Zhang <vulab@iscas.ac.cn>
Date:   Thu Oct 30 14:16:03 2025 +0800

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

 
comedi: c6xdigio: Fix invalid PNP driver unregistration [+ + +]
Author: Ian Abbott <abbotti@mev.co.uk>
Date:   Thu Oct 23 13:31:41 2025 +0100

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

comedi: check device's attached status in compat ioctls [+ + +]
Author: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Date:   Thu Oct 23 16:22:32 2025 +0300

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

comedi: multiq3: sanitize config options in multiq3_attach() [+ + +]
Author: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Date:   Thu Oct 23 16:22:04 2025 +0300

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

comedi: pcl818: fix null-ptr-deref in pcl818_ai_cancel() [+ + +]
Author: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Date:   Thu Oct 23 17:14:56 2025 +0300

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

 
compiler-gcc.h: Define __SANITIZE_ADDRESS__ under hwaddress sanitizer [+ + +]
Author: Kees Cook <kees@kernel.org>
Date:   Wed Oct 20 13:00:39 2021 -0700

    compiler-gcc.h: Define __SANITIZE_ADDRESS__ under hwaddress sanitizer
    
    [ Upstream commit 9a48e7564ac83fb0f1d5b0eac5fe8a7af62da398 ]
    
    When Clang is using the hwaddress sanitizer, it sets __SANITIZE_ADDRESS__
    explicitly:
    
     #if __has_feature(address_sanitizer) || __has_feature(hwaddress_sanitizer)
     /* Emulate GCC's __SANITIZE_ADDRESS__ flag */
     #define __SANITIZE_ADDRESS__
     #endif
    
    Once hwaddress sanitizer was added to GCC, however, a separate define
    was created, __SANITIZE_HWADDRESS__. The kernel is expecting to find
    __SANITIZE_ADDRESS__ in either case, though, and the existing string
    macros break on supported architectures:
    
     #if (defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KASAN_SW_TAGS)) && \
              !defined(__SANITIZE_ADDRESS__)
    
    where as other architectures (like arm32) have no idea about hwaddress
    sanitizer and just check for __SANITIZE_ADDRESS__:
    
     #if defined(CONFIG_KASAN) && !defined(__SANITIZE_ADDRESS__)
    
    This would lead to compiler foritfy self-test warnings when building
    with CONFIG_KASAN_SW_TAGS=y:
    
    warning: unsafe memmove() usage lacked '__read_overflow2' symbol in lib/test_fortify/read_overflow2-memmove.c
    warning: unsafe memcpy() usage lacked '__write_overflow' symbol in lib/test_fortify/write_overflow-memcpy.c
    ...
    
    Sort this out by also defining __SANITIZE_ADDRESS__ in GCC under the
    hwaddress sanitizer.
    
    Suggested-by: Arnd Bergmann <arnd@arndb.de>
    Cc: Nick Desaulniers <ndesaulniers@google.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Will Deacon <will@kernel.org>
    Cc: Arvind Sankar <nivedita@alum.mit.edu>
    Cc: Masahiro Yamada <masahiroy@kernel.org>
    Cc: llvm@lists.linux.dev
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Reviewed-by: Nathan Chancellor <nathan@kernel.org>
    Acked-by: Miguel Ojeda <ojeda@kernel.org>
    Reviewed-by: Marco Elver <elver@google.com>
    Link: https://lore.kernel.org/r/20211020200039.170424-1-keescook@chromium.org
    Stable-dep-of: ced37e9ceae5 ("x86/dumpstack: Prevent KASAN false positive warnings in __show_regs()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
coresight-etm4x: add isb() before reading the TRCSTATR [+ + +]
Author: Yuanfang Zhang <quic_yuanfang@quicinc.com>
Date:   Thu Jan 16 17:04:20 2025 +0800

    coresight-etm4x: add isb() before reading the TRCSTATR
    
    [ Upstream commit 4ff6039ffb79a4a8a44b63810a8a2f2b43264856 ]
    
    As recommended by section 4.3.7 ("Synchronization when using system
    instructions to progrom the trace unit") of ARM IHI 0064H.b, the
    self-hosted trace analyzer must perform a Context synchronization
    event between writing to the TRCPRGCTLR and reading the TRCSTATR.
    Additionally, add an ISB between the each read of TRCSTATR on
    coresight_timeout() when using system instructions to program the
    trace unit.
    
    Fixes: 1ab3bb9df5e3 ("coresight: etm4x: Add necessary synchronization for sysreg access")
    Signed-off-by: Yuanfang Zhang <quic_yuanfang@quicinc.com>
    Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
    Link: https://lore.kernel.org/r/20250116-etm_sync-v4-1-39f2b05e9514@quicinc.com
    Stable-dep-of: 64eb04ae5452 ("coresight: etm4x: Add context synchronization before enabling trace")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
coresight: etm4x: Add context synchronization before enabling trace [+ + +]
Author: Leo Yan <leo.yan@arm.com>
Date:   Tue Nov 11 18:58:39 2025 +0000

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

coresight: etm4x: Correct polling IDLE bit [+ + +]
Author: Leo Yan <leo.yan@arm.com>
Date:   Tue Nov 11 18:58:38 2025 +0000

    coresight: etm4x: Correct polling IDLE bit
    
    commit 4dc4e22f9536341255f5de6047977a80ff47eaef upstream.
    
    Since commit 4ff6039ffb79 ("coresight-etm4x: add isb() before reading
    the TRCSTATR"), the code has incorrectly been polling the PMSTABLE bit
    instead of the IDLE bit.
    
    This commit corrects the typo.
    
    Fixes: 4ff6039ffb79 ("coresight-etm4x: add isb() before reading the TRCSTATR")
    Reviewed-by: Yeoreum Yun <yeoreum.yun@arm.com>
    Reviewed-by: Mike Leach <mike.leach@linaro.org>
    Tested-by: James Clark <james.clark@linaro.org>
    Signed-off-by: Leo Yan <leo.yan@arm.com>
    Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
    Link: https://lore.kernel.org/r/20251111-arm_coresight_power_management_fix-v6-4-f55553b6c8b3@arm.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

coresight: etm4x: Extract the trace unit controlling [+ + +]
Author: Leo Yan <leo.yan@arm.com>
Date:   Tue Apr 1 19:07:02 2025 +0100

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

coresight: etm4x: Save restore TRFCR_EL1 [+ + +]
Author: Suzuki K Poulose <suzuki.poulose@arm.com>
Date:   Tue Sep 14 11:26:32 2021 +0100

    coresight: etm4x: Save restore TRFCR_EL1
    
    [ Upstream commit 937d3f58cacf377cab7c32e475e1ffa91d611dce ]
    
    When the CPU enters a low power mode, the TRFCR_EL1 contents could be
    reset. Thus we need to save/restore the TRFCR_EL1 along with the ETM4x
    registers to allow the tracing.
    
    The TRFCR related helpers are in a new header file, as we need to use
    them for TRBE in the later patches.
    
    Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
    Cc: Anshuman Khandual <anshuman.khandual@arm.com>
    Cc: Mike Leach <mike.leach@linaro.org>
    Cc: Leo Yan <leo.yan@linaro.org>
    Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com>
    Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
    Link: https://lore.kernel.org/r/20210914102641.1852544-2-suzuki.poulose@arm.com
    [Fixed cosmetic details]
    Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
    Stable-dep-of: 64eb04ae5452 ("coresight: etm4x: Add context synchronization before enabling trace")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

coresight: etm4x: Use Trace Filtering controls dynamically [+ + +]
Author: Suzuki K Poulose <suzuki.poulose@arm.com>
Date:   Tue Sep 14 11:26:33 2021 +0100

    coresight: etm4x: Use Trace Filtering controls dynamically
    
    [ Upstream commit 5f6fd1aa8cc147b111af1a833574487a87237dc0 ]
    
    The Trace Filtering support (FEAT_TRF) ensures that the ETM
    can be prohibited from generating any trace for a given EL.
    This is much stricter knob, than the TRCVICTLR exception level
    masks, which doesn't prevent the ETM from generating Context
    packets for an "excluded" EL. At the moment, we do a onetime
    enable trace at user and kernel and leave it untouched for the
    kernel life time. This implies that the ETM could potentially
    generate trace packets containing the kernel addresses, and
    thus leaking the kernel virtual address in the trace.
    
    This patch makes the switch dynamic, by honoring the filters
    set by the user and enforcing them in the TRFCR controls.
    We also rename the cpu_enable_tracing() appropriately to
    cpu_detect_trace_filtering() and the drvdata member
    trfc => trfcr to indicate the "value" of the TRFCR_EL1.
    
    Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
    Cc: Al Grant <al.grant@arm.com>
    Cc: Mike Leach <mike.leach@linaro.org>
    Cc: Leo Yan <leo.yan@linaro.org>
    Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
    Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com>
    Link: https://lore.kernel.org/r/20210914102641.1852544-3-suzuki.poulose@arm.com
    Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
    Stable-dep-of: 64eb04ae5452 ("coresight: etm4x: Add context synchronization before enabling trace")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
counter: interrupt-cnt: Drop IRQF_NO_THREAD flag [+ + +]
Author: Alexander Sverdlin <alexander.sverdlin@gmail.com>
Date:   Mon Jan 12 12:26:24 2026 -0500

    counter: interrupt-cnt: Drop IRQF_NO_THREAD flag
    
    [ Upstream commit 23f9485510c338476b9735d516c1d4aacb810d46 ]
    
    An IRQ handler can either be IRQF_NO_THREAD or acquire spinlock_t, as
    CONFIG_PROVE_RAW_LOCK_NESTING warns:
    =============================
    [ BUG: Invalid wait context ]
    6.18.0-rc1+git... #1
    -----------------------------
    some-user-space-process/1251 is trying to lock:
    (&counter->events_list_lock){....}-{3:3}, at: counter_push_event [counter]
    other info that might help us debug this:
    context-{2:2}
    no locks held by some-user-space-process/....
    stack backtrace:
    CPU: 0 UID: 0 PID: 1251 Comm: some-user-space-process 6.18.0-rc1+git... #1 PREEMPT
    Call trace:
     show_stack (C)
     dump_stack_lvl
     dump_stack
     __lock_acquire
     lock_acquire
     _raw_spin_lock_irqsave
     counter_push_event [counter]
     interrupt_cnt_isr [interrupt_cnt]
     __handle_irq_event_percpu
     handle_irq_event
     handle_simple_irq
     handle_irq_desc
     generic_handle_domain_irq
     gpio_irq_handler
     handle_irq_desc
     generic_handle_domain_irq
     gic_handle_irq
     call_on_irq_stack
     do_interrupt_handler
     el0_interrupt
     __el0_irq_handler_common
     el0t_64_irq_handler
     el0t_64_irq
    
    ... and Sebastian correctly points out. Remove IRQF_NO_THREAD as an
    alternative to switching to raw_spinlock_t, because the latter would limit
    all potential nested locks to raw_spinlock_t only.
    
    Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/20251117151314.xwLAZrWY@linutronix.de/
    Fixes: a55ebd47f21f ("counter: add IRQ or GPIO based counter")
    Signed-off-by: Alexander Sverdlin <alexander.sverdlin@siemens.com>
    Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Reviewed-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Link: https://lore.kernel.org/r/20251118083603.778626-1-alexander.sverdlin@siemens.com
    Signed-off-by: William Breathitt Gray <wbg@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
cpufreq: nforce2: fix reference count leak in nforce2 [+ + +]
Author: Miaoqian Lin <linmq006@gmail.com>
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: stable@vger.kernel.org
    Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
    Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

cpufreq: s5pv210: fix refcount leak [+ + +]
Author: Shuhao Fu <sfual@cse.ust.hk>
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 <sfual@cse.ust.hk>
    Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
crypto: af_alg - zero initialize memory allocated via sock_kmalloc [+ + +]
Author: Shivani Agarwal <shivani.agarwal@broadcom.com>
Date:   Wed Dec 31 13:47:27 2025 -0500

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

crypto: asymmetric_keys - prevent overflow in asymmetric_key_generate_id [+ + +]
Author: Thorsten Blum <thorsten.blum@linux.dev>
Date:   Mon Oct 13 13:40:10 2025 +0200

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

crypto: ccree - Correctly handle return of sg_nents_for_len [+ + +]
Author: Haotian Zhang <vulab@iscas.ac.cn>
Date:   Mon Nov 10 15:20:41 2025 +0800

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

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

    crypto: hisilicon/qm - restore original qos values
    
    [ Upstream commit e7066160f5b4187ad9869b712fa7a35d3d5be6b9 ]
    
    When the new qos valus setting fails, restore to
    the original qos values.
    
    Fixes: 72b010dc33b9 ("crypto: hisilicon/qm - supports writing QoS int the host")
    Signed-off-by: nieweiqiang <nieweiqiang@huawei.com>
    Signed-off-by: Chenghai Huang <huangchenghai2@huawei.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

crypto: seqiv - Do not use req->iv after crypto_aead_encrypt [+ + +]
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Wed Dec 17 14:15:41 2025 +0800

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

 
csky: fix csky_cmpxchg_fixup not working [+ + +]
Author: Yang Li <yang.li85200@gmail.com>
Date:   Wed Oct 16 17:56:26 2024 +0800

    csky: fix csky_cmpxchg_fixup not working
    
    [ Upstream commit 809ef03d6d21d5fea016bbf6babeec462e37e68c ]
    
    In the csky_cmpxchg_fixup function, it is incorrect to use the global
    variable csky_cmpxchg_stw to determine the address where the exception
    occurred.The global variable csky_cmpxchg_stw stores the opcode at the
    time of the exception, while &csky_cmpxchg_stw shows the address where
    the exception occurred.
    
    Signed-off-by: Yang Li <yang.li85200@gmail.com>
    Signed-off-by: Guo Ren <guoren@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dm log-writes: Add missing set_freezable() for freezable kthread [+ + +]
Author: Haotian Zhang <vulab@iscas.ac.cn>
Date:   Mon Dec 1 15:41:03 2025 +0800

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

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

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

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

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

 
dma/pool: eliminate alloc_pages warning in atomic_pool_expand [+ + +]
Author: Dave Kleikamp <dave.kleikamp@oracle.com>
Date:   Tue Dec 2 09:28:10 2025 -0600

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

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

    Documentation: process: Also mention Sasha Levin as stable tree maintainer
    
    commit ba2457109d5b47a90fe565b39524f7225fc23e60 upstream.
    
    Sasha has also maintaining stable branch in conjunction with Greg
    since cb5d21946d2a2f ("MAINTAINERS: Add Sasha as a stable branch
    maintainer"). Mention him in 2.Process.rst.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Bagas Sanjaya <bagasdotme@gmail.com>
    Reviewed-by: Randy Dunlap <rdunlap@infradead.org>
    Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Jonathan Corbet <corbet@lwn.net>
    Message-ID: <20251022034336.22839-1-bagasdotme@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dpaa2-mac: bail if the dpmacs fwnode is not found [+ + +]
Author: Robert-Ionut Alexa <robert-ionut.alexa@nxp.com>
Date:   Thu Jan 6 15:59:03 2022 +0200

    dpaa2-mac: bail if the dpmacs fwnode is not found
    
    [ Upstream commit 5b1e38c0792cc7a44997328de37d393f81b2501a ]
    
    The parent pointer node handler must be declared with a NULL
    initializer. Before using it, a check must be performed to make
    sure that a valid address has been assigned to it.
    
    Signed-off-by: Robert-Ionut Alexa <robert-ionut.alexa@nxp.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amd/display: Fix logical vs bitwise bug in get_embedded_panel_info_v2_1() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Fri Oct 31 16:02:25 2025 +0300

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

drm/amd/display: Use GFP_ATOMIC in dc_create_plane_state() [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
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 <harry.wentland@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 8acdad9344cc7b4e7bc01f0dfea80093eb3768db)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/gma500: Remove unused helper psb_fbdev_fb_setcolreg() [+ + +]
Author: Thomas Zimmermann <tzimmermann@suse.de>
Date:   Wed Jan 7 10:57:33 2026 -0500

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

 
drm/i915/selftests: Fix inconsistent IS_ERR and PTR_ERR [+ + +]
Author: Kai Song <songkai01@inspur.com>
Date:   Fri Oct 22 20:06:55 2021 +0800

    drm/i915/selftests: Fix inconsistent IS_ERR and PTR_ERR
    
    [ Upstream commit fc7bf4c0d65a342b29fe38c332db3fe900b481b9 ]
    
    Fix inconsistent IS_ERR and PTR_ERR in i915_gem_dmabuf.c
    
    Signed-off-by: Kai Song <songkai01@inspur.com>
    Reviewed-by: Matthew Auld <matthew.auld@intel.com>
    Signed-off-by: Matthew Auld <matthew.auld@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20211022120655.22173-1-songkai01@inspur.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/i915/selftests: fix subtraction overflow bug [+ + +]
Author: Andrzej Hajda <andrzej.hajda@intel.com>
Date:   Fri Dec 12 13:46:33 2025 +0800

    drm/i915/selftests: fix subtraction overflow bug
    
    [ Upstream commit ab3edc679c552a466e4bf0b11af3666008bd65a2 ]
    
    On some machines hole_end can be small enough to cause subtraction
    overflow. On the other side (addr + 2 * min_alignment) can overflow
    in case of mock tests. This patch should handle both cases.
    
    Fixes: e1c5f754067b59 ("drm/i915: Avoid overflow in computing pot_hole loop termination")
    Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/3674
    Signed-off-by: Andrzej Hajda <andrzej.hajda@intel.com>
    Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com>
    Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20220624113528.2159210-1-andrzej.hajda@intel.com
    Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
    [ Using I915_GTT_PAGE_SIZE instead of min_alignment due to 5.15 missing commit:87bd701ee268 ("drm/i915: enforce min GTT alignment for discrete cards")]
    Signed-off-by: Rajani Kantha <681739313@139.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/mediatek: Fix CCORR mtk_ctm_s31_32_to_s1_n function issue [+ + +]
Author: Jay Liu <jay.liu@mediatek.com>
Date:   Sun Sep 21 13:53:05 2025 +0800

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

 
drm/msm/a6xx: Fix out of bound IO access in a6xx_get_gmu_registers [+ + +]
Author: Akhil P Oommen <akhilpo@oss.qualcomm.com>
Date:   Tue Nov 18 14:20:28 2025 +0530

    drm/msm/a6xx: Fix out of bound IO access in a6xx_get_gmu_registers
    
    commit 779b68a5bf2764c8ed3aa800e41ba0d5d007e1e7 upstream.
    
    REG_A6XX_GMU_AO_AHB_FENCE_CTRL register falls under GMU's register
    range. So, use gmu_write() routines to write to this register.
    
    Fixes: 1707add81551 ("drm/msm/a6xx: Add a6xx gpu state")
    Cc: stable@vger.kernel.org
    Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
    Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
    Patchwork: https://patchwork.freedesktop.org/patch/688993/
    Message-ID: <20251118-kaana-gpu-support-v4-1-86eeb8e93fb6@oss.qualcomm.com>
    Signed-off-by: Rob Clark <robin.clark@oss.qualcomm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

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

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

    drm/panel: visionox-rm69299: Don't clear all mode flags
    
    [ Upstream commit 39144b611e9cd4f5814f4098c891b545dd70c536 ]
    
    Don't clear all mode flags. We only want to maek sure we use HS mode
    during unprepare.
    
    Fixes: c7f66d32dd431 ("drm/panel: add support for rm69299 visionox panel")
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Signed-off-by: Guido Günther <agx@sigxcpu.org>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://lore.kernel.org/r/20250910-shift6mq-panel-v3-2-a7729911afb9@sigxcpu.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/pl111: Fix error handling in pl111_amba_probe [+ + +]
Author: Miaoqian Lin <linmq006@gmail.com>
Date:   Thu Dec 11 16:33:44 2025 +0400

    drm/pl111: Fix error handling in pl111_amba_probe
    
    commit 0ddd3bb4b14c9102c0267b3fd916c81fe5ab89c1 upstream.
    
    Jump to the existing dev_put label when devm_request_irq() fails
    so drm_dev_put() and of_reserved_mem_device_release() run
    instead of returning early and leaking resources.
    
    Found via static analysis and code review.
    
    Fixes: bed41005e617 ("drm/pl111: Initial drm/kms driver for pl111")
    Cc: stable@vger.kernel.org
    Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
    Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
    Signed-off-by: Linus Walleij <linusw@kernel.org>
    Link: https://patch.msgid.link/20251211123345.2392065-1-linmq006@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

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

 
drm/vgem-fence: Fix potential deadlock on release [+ + +]
Author: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
Date:   Fri Sep 26 17:26:27 2025 +0200

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

 
drm/vmwgfx: Fix a null-ptr access in the cursor snooper [+ + +]
Author: Zack Rusin <zack.rusin@broadcom.com>
Date:   Wed Dec 24 00:36:52 2025 -0800

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

 
dt-bindings: PCI: amlogic: Fix the register name of the DBI region [+ + +]
Author: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
Date:   Sat Nov 1 09:59:40 2025 +0530

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

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

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

 
e1000: fix OOB in e1000_tbi_should_accept() [+ + +]
Author: Guangshuo Li <lgs201920130244@gmail.com>
Date:   Mon Dec 1 11:40:58 2025 +0800

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

 
efi/cper: Add a new helper function to print bitmasks [+ + +]
Author: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Date:   Thu Aug 14 09:52:54 2025 -0700

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

efi/cper: Adjust infopfx size to accept an extra space [+ + +]
Author: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Date:   Thu Aug 14 09:52:53 2025 -0700

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

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

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

efi/cper: Fix cper_bits_to_str buffer handling and return value [+ + +]
Author: Morduan Zang <zhangdandan@uniontech.com>
Date:   Wed Jan 14 13:30:33 2026 +0800

    efi/cper: Fix cper_bits_to_str buffer handling and return value
    
    commit d7f1b4bdc7108be1b178e1617b5f45c8918e88d7 upstream.
    
    The return value calculation was incorrect: `return len - buf_size;`
    Initially `len = buf_size`, then `len` decreases with each operation.
    This results in a negative return value on success.
    
    Fix by returning `buf_size - len` which correctly calculates the actual
    number of bytes written.
    
    Fixes: a976d790f494 ("efi/cper: Add a new helper function to print bitmasks")
    Signed-off-by: Morduan Zang <zhangdandan@uniontech.com>
    Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
eth: bnxt: move and rename reset helpers [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Wed Jul 19 18:04:38 2023 -0700

    eth: bnxt: move and rename reset helpers
    
    [ Upstream commit fea2993aecd74d5d11ede1ebbd60e478ebfed996 ]
    
    Move the reset helpers, subsequent patches will need some
    of them on the Tx path.
    
    While at it rename bnxt_sched_reset(), on more recent chips
    it schedules a queue reset, instead of a fuller reset.
    
    Link: https://lore.kernel.org/r/20230720010440.1967136-2-kuba@kernel.org
    Reviewed-by: Michael Chan <michael.chan@broadcom.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: ffeafa65b2b2 ("bnxt_en: Fix potential data corruption with HW GRO/LRO")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ethtool: Avoid overflowing userspace buffer on stats query [+ + +]
Author: Gal Pressman <gal@nvidia.com>
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 <dtatulea@nvidia.com>
    Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
    Signed-off-by: Gal Pressman <gal@nvidia.com>
    Link: https://patch.msgid.link/20251208121901.3203692-1-gal@nvidia.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ethtool: use phydev variable [+ + +]
Author: Tom Rix <trix@redhat.com>
Date:   Wed Jan 5 06:10:20 2022 -0800

    ethtool: use phydev variable
    
    [ Upstream commit ccd21ec5b8dd9b8a528a70315cee95fc1dd79d20 ]
    
    In ethtool_get_phy_stats(), the phydev varaible is set to
    dev->phydev but dev->phydev is still used.  Replace
    dev->phydev uses with phydev.
    
    Signed-off-by: Tom Rix <trix@redhat.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 7b07be1ff1cb ("ethtool: Avoid overflowing userspace buffer on stats query")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
exfat: fix remount failure in different process environments [+ + +]
Author: Yuezhang Mo <Yuezhang.Mo@sony.com>
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 <oliver.sang@intel.com>
    Closes: https://lore.kernel.org/oe-lkp/202511251637.81670f5c-lkp@intel.com
    Signed-off-by: Yuezhang Mo <Yuezhang.Mo@sony.com>
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ext4: add i_data_sem protection in ext4_destroy_inline_data_nolock() [+ + +]
Author: Alexey Nepomnyashih <sdl@nppct.ru>
Date:   Tue Nov 4 09:33:25 2025 +0000

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

ext4: align max orphan file size with e2fsprogs limit [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
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 <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Message-ID: <20251120134233.2994147-1-libaokun@huaweicloud.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: clear i_state_flags when alloc inode [+ + +]
Author: Haibo Chen <haibo.chen@nxp.com>
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 <haibo.chen@nxp.com>
    Reviewed-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Zhang Yi <yi.zhang@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Message-ID: <20251104-ext4-v1-1-73691a0800f9@nxp.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: correct the checking of quota files before moving extents [+ + +]
Author: Zhang Yi <yi.zhang@huawei.com>
Date:   Mon Oct 13 09:51:17 2025 +0800

    ext4: correct the checking of quota files before moving extents
    
    [ Upstream commit a2e5a3cea4b18f6e2575acc444a5e8cce1fc8260 ]
    
    The move extent operation should return -EOPNOTSUPP if any of the inodes
    is a quota inode, rather than requiring both to be quota inodes.
    
    Fixes: 02749a4c2082 ("ext4: add ext4_is_quota_file()")
    Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Message-ID: <20251013015128.499308-2-yi.zhang@huaweicloud.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: factor out ext4_hash_info_init() [+ + +]
Author: Jason Yan <yanaijie@huawei.com>
Date:   Thu Jan 8 12:04:28 2026 -0300

    ext4: factor out ext4_hash_info_init()
    
    commit db9345d9e6f075e1ec26afadf744078ead935fec upstream.
    
    Factor out ext4_hash_info_init() to simplify __ext4_fill_super(). No
    functional change.
    
    Signed-off-by: Jason Yan <yanaijie@huawei.com>
    Link: https://lore.kernel.org/r/20230323140517.1070239-2-yanaijie@huawei.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: a2187431c395 ("ext4: fix error message when rejecting the default hash")
    [cascardo: conflicts due to other parts of ext4_fill_super having been factored out]
    Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: filesystems without casefold feature cannot be mounted with siphash [+ + +]
Author: Lizhi Xu <lizhi.xu@windriver.com>
Date:   Thu Jan 8 12:04:27 2026 -0300

    ext4: filesystems without casefold feature cannot be mounted with siphash
    
    commit 985b67cd86392310d9e9326de941c22fc9340eec upstream.
    
    When mounting the ext4 filesystem, if the default hash version is set to
    DX_HASH_SIPHASH but the casefold feature is not set, exit the mounting.
    
    Reported-by: syzbot+340581ba9dceb7e06fb3@syzkaller.appspotmail.com
    Signed-off-by: Lizhi Xu <lizhi.xu@windriver.com>
    Link: https://patch.msgid.link/20240605012335.44086-1-lizhi.xu@windriver.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    [cascardo: small conflict fixup]
    Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: fix error message when rejecting the default hash [+ + +]
Author: Gabriel Krisman Bertazi <krisman@suse.de>
Date:   Thu Jan 8 12:04:29 2026 -0300

    ext4: fix error message when rejecting the default hash
    
    commit a2187431c395cdfbf144e3536f25468c64fc7cfa upstream.
    
    Commit 985b67cd8639 ("ext4: filesystems without casefold feature cannot
    be mounted with siphash") properly rejects volumes where
    s_def_hash_version is set to DX_HASH_SIPHASH, but the check and the
    error message should not look into casefold setup - a filesystem should
    never have DX_HASH_SIPHASH as the default hash.  Fix it and, since we
    are there, move the check to ext4_hash_info_init.
    
    Fixes:985b67cd8639 ("ext4: filesystems without casefold feature cannot
    be mounted with siphash")
    
    Signed-off-by: Gabriel Krisman Bertazi <krisman@suse.de>
    Link: https://patch.msgid.link/87jzg1en6j.fsf_-_@mailhost.krisman.be
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    [cascardo: conflicts due to other parts of ext4_fill_super having been factored out]
    Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: fix incorrect group number assertion in mb_check_buddy [+ + +]
Author: Yongjian Sun <sunyongjian1@huawei.com>
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 <sunyongjian1@huawei.com>
    Reviewed-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Message-ID: <20251106060614.631382-2-sunyongjian@huaweicloud.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: fix out-of-bound read in ext4_xattr_inode_dec_ref_all() [+ + +]
Author: Ye Bin <yebin10@huawei.com>
Date:   Fri Jan 9 16:23:14 2026 +0100

    ext4: fix out-of-bound read in ext4_xattr_inode_dec_ref_all()
    
    [ Upstream commit 5701875f9609b000d91351eaa6bfd97fe2f157f4 ]
    
    There's issue as follows:
    BUG: KASAN: use-after-free in ext4_xattr_inode_dec_ref_all+0x6ff/0x790
    Read of size 4 at addr ffff88807b003000 by task syz-executor.0/15172
    
    CPU: 3 PID: 15172 Comm: syz-executor.0
    Call Trace:
     __dump_stack lib/dump_stack.c:82 [inline]
     dump_stack+0xbe/0xfd lib/dump_stack.c:123
     print_address_description.constprop.0+0x1e/0x280 mm/kasan/report.c:400
     __kasan_report.cold+0x6c/0x84 mm/kasan/report.c:560
     kasan_report+0x3a/0x50 mm/kasan/report.c:585
     ext4_xattr_inode_dec_ref_all+0x6ff/0x790 fs/ext4/xattr.c:1137
     ext4_xattr_delete_inode+0x4c7/0xda0 fs/ext4/xattr.c:2896
     ext4_evict_inode+0xb3b/0x1670 fs/ext4/inode.c:323
     evict+0x39f/0x880 fs/inode.c:622
     iput_final fs/inode.c:1746 [inline]
     iput fs/inode.c:1772 [inline]
     iput+0x525/0x6c0 fs/inode.c:1758
     ext4_orphan_cleanup fs/ext4/super.c:3298 [inline]
     ext4_fill_super+0x8c57/0xba40 fs/ext4/super.c:5300
     mount_bdev+0x355/0x410 fs/super.c:1446
     legacy_get_tree+0xfe/0x220 fs/fs_context.c:611
     vfs_get_tree+0x8d/0x2f0 fs/super.c:1576
     do_new_mount fs/namespace.c:2983 [inline]
     path_mount+0x119a/0x1ad0 fs/namespace.c:3316
     do_mount+0xfc/0x110 fs/namespace.c:3329
     __do_sys_mount fs/namespace.c:3540 [inline]
     __se_sys_mount+0x219/0x2e0 fs/namespace.c:3514
     do_syscall_64+0x33/0x40 arch/x86/entry/common.c:46
     entry_SYSCALL_64_after_hwframe+0x67/0xd1
    
    Memory state around the buggy address:
     ffff88807b002f00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     ffff88807b002f80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    >ffff88807b003000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
                       ^
     ffff88807b003080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
     ffff88807b003100: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    
    Above issue happens as ext4_xattr_delete_inode() isn't check xattr
    is valid if xattr is in inode.
    To solve above issue call xattr_check_inode() check if xattr if valid
    in inode. In fact, we can directly verify in ext4_iget_extra_inode(),
    so that there is no divergent verification.
    
    Fixes: e50e5129f384 ("ext4: xattr-in-inode support")
    Signed-off-by: Ye Bin <yebin10@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20250208063141.1539283-3-yebin@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: David Nyström <david.nystrom@est.tech>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

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

ext4: introduce ITAIL helper [+ + +]
Author: Ye Bin <yebin10@huawei.com>
Date:   Fri Jan 9 16:23:13 2026 +0100

    ext4: introduce ITAIL helper
    
    [ Upstream commit 69f3a3039b0d0003de008659cafd5a1eaaa0a7a4 ]
    
    Introduce ITAIL helper to get the bound of xattr in inode.
    
    Signed-off-by: Ye Bin <yebin10@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20250208063141.1539283-2-yebin@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: David Nyström <david.nystrom@est.tech>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: minor defrag code improvements [+ + +]
Author: Eric Whitney <enwlinux@gmail.com>
Date:   Fri Jul 22 12:39:10 2022 -0400

    ext4: minor defrag code improvements
    
    [ Upstream commit d412df530f77d0f61c41b83f925997452fc3944c ]
    
    Modify the error returns for two file types that can't be defragged to
    more clearly communicate those restrictions to a caller.  When the
    defrag code is applied to swap files, return -ETXTBSY, and when applied
    to quota files, return -EOPNOTSUPP.  Move an extent tree search whose
    results are only occasionally required to the site always requiring them
    for improved efficiency.  Address a few typos.
    
    Signed-off-by: Eric Whitney <enwlinux@gmail.com>
    Link: https://lore.kernel.org/r/20220722163910.268564-1-enwlinux@gmail.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: a2e5a3cea4b1 ("ext4: correct the checking of quota files before moving extents")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: refresh inline data size before write operations [+ + +]
Author: Deepanshu Kartikey <kartikey406@gmail.com>
Date:   Mon Oct 20 11:39:36 2025 +0530

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

ext4: remove unused return value of __mb_check_buddy [+ + +]
Author: Kemeng Shi <shikemeng@huaweicloud.com>
Date:   Fri Jan 5 17:20:54 2024 +0800

    ext4: remove unused return value of __mb_check_buddy
    
    [ Upstream commit 133de5a0d8f8e32b34feaa8beae7a189482f1856 ]
    
    Remove unused return value of __mb_check_buddy.
    
    Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20240105092102.496631-2-shikemeng@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: d9ee3ff810f1 ("ext4: improve integrity checking in __mb_check_buddy by enhancing order-0 validation")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: xattr: fix null pointer deref in ext4_raw_inode() [+ + +]
Author: Karina Yankevich <k.yankevich@omp.ru>
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: stable@kernel.org
    Signed-off-by: Karina Yankevich <k.yankevich@omp.ru>
    Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
    Reviewed-by: Baokun Li <libaokun1@huawei.com>
    Message-ID: <20251022093253.3546296-1-k.yankevich@omp.ru>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
f2fs: fix return value of f2fs_recover_fsync_data() [+ + +]
Author: Chao Yu <chao@kernel.org>
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: stable@kernel.org
    Fixes: 6781eabba1bd ("f2fs: give -EINVAL for norecovery and rw mount")
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

f2fs: fix to avoid updating zero-sized extent in extent cache [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Tue Dec 30 12:26:36 2025 -0500

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

f2fs: fix to detect recoverable inode during dryrun of find_fsync_dnodes() [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Tue Dec 30 15:08:41 2025 -0500

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

f2fs: fix to propagate error from f2fs_enable_checkpoint() [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Tue Dec 30 12:34:52 2025 -0500

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

f2fs: invalidate dentry cache on failed whiteout creation [+ + +]
Author: Deepanshu Kartikey <kartikey406@gmail.com>
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: syzbot+632cf32276a9a564188d@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=632cf32276a9a564188d
    Suggested-by: Chao Yu <chao@kernel.org>
    Link: https://lore.kernel.org/all/20251022233349.102728-1-kartikey406@gmail.com/ [v1]
    Cc: stable@vger.kernel.org
    Signed-off-by: Deepanshu Kartikey <kartikey406@gmail.com>
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

f2fs: use global inline_xattr_slab instead of per-sb slab cache [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Tue Dec 30 14:55:17 2025 -0500

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

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

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

fbdev: pxafb: Fix multiple clamped values in pxafb_adjust_timing [+ + +]
Author: Thorsten Blum <thorsten.blum@linux.dev>
Date:   Tue Dec 2 19:15:32 2025 +0100

    fbdev: pxafb: Fix multiple clamped values in pxafb_adjust_timing
    
    commit 0155e868cbc111846cc2809c1546ea53810a56ae upstream.
    
    The variables were never clamped because the return value of clamp_val()
    was not used. Fix this by assigning the clamped values, and use clamp()
    instead of clamp_val().
    
    Cc: stable@vger.kernel.org
    Fixes: 3f16ff608a75 ("[ARM] pxafb: cleanup of the timing checking code")
    Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

fbdev: ssd1307fb: fix potential page leak in ssd1307fb_probe() [+ + +]
Author: Abdun Nihaal <nihaal@cse.iitm.ac.in>
Date:   Wed Dec 3 09:25:44 2025 +0530

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

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

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

 
firewire: nosy: Fix dma_free_coherent() size [+ + +]
Author: Thomas Fourier <fourier.thomas@gmail.com>
Date:   Tue Dec 16 17:54:18 2025 +0100

    firewire: nosy: Fix dma_free_coherent() size
    
    [ Upstream commit c48c0fd0e19684b6ecdb4108a429e3a4e73f5e21 ]
    
    It looks like the buffer allocated and mapped in add_card() is done
    with size RCV_BUFFER_SIZE which is 16 KB and 4KB.
    
    Fixes: 286468210d83 ("firewire: new driver: nosy - IEEE 1394 traffic sniffer")
    Co-developed-by: Thomas Fourier <fourier.thomas@gmail.com>
    Signed-off-by: Thomas Fourier <fourier.thomas@gmail.com>
    Co-developed-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Link: https://lore.kernel.org/r/20251216165420.38355-2-fourier.thomas@gmail.com
    Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
firmware: arm_scmi: Fix unused notifier-block in unregister [+ + +]
Author: Amitai Gottlieb <amitaig@hailo.ai>
Date:   Tue Dec 16 13:50:09 2025 +0200

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

firmware: imx: scu-irq: fix OF node leak in [+ + +]
Author: Peng Fan <peng.fan@nxp.com>
Date:   Fri Oct 17 09:56:24 2025 +0800

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

firmware: imx: scu-irq: Init workqueue before request mbox channel [+ + +]
Author: Peng Fan <peng.fan@nxp.com>
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 <Frank.Li@nxp.com>
    Signed-off-by: Peng Fan <peng.fan@nxp.com>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

firmware: imx: scu-irq: Set mu_resource_id before get handle [+ + +]
Author: Peng Fan <peng.fan@nxp.com>
Date:   Fri Oct 17 09:56:27 2025 +0800

    firmware: imx: scu-irq: Set mu_resource_id before get handle
    
    commit ff3f9913bc0749364fbfd86ea62ba2d31c6136c8 upstream.
    
    mu_resource_id is referenced in imx_scu_irq_get_status() and
    imx_scu_irq_group_enable() which could be used by other modules, so
    need to set correct value before using imx_sc_irq_ipc_handle in
    SCU API call.
    
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Signed-off-by: Peng Fan <peng.fan@nxp.com>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Fixes: 81fb53feb66a ("firmware: imx: scu-irq: Init workqueue before request mbox channel")
    Cc: Ben Hutchings <ben@decadent.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fjes: Add missing iounmap in fjes_hw_init() [+ + +]
Author: Haoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
Date:   Thu Dec 11 15:37:56 2025 +0800

    fjes: Add missing iounmap in fjes_hw_init()
    
    commit 15ef641a0c6728d25a400df73922e80ab2cf029c upstream.
    
    In error paths, add fjes_hw_iounmap() to release the
    resource acquired by fjes_hw_iomap(). Add a goto label
    to do so.
    
    Fixes: 8cdc3f6c5d22 ("fjes: Hardware initialization routine")
    Cc: stable@vger.kernel.org
    Signed-off-by: Haoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
    Signed-off-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20251211073756.101824-1-lihaoxiang@isrc.iscas.ac.cn
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
floppy: fix for PAGE_SIZE != 4KB [+ + +]
Author: Rene Rebe <rene@exactco.de>
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: stable@vger.kernel.org
    Signed-off-by: René Rebe <rene@exactco.de>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

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

fs/nls: Fix utf16 to utf8 conversion [+ + +]
Author: Armin Wolf <W_Armin@gmx.de>
Date:   Tue Nov 11 14:11:22 2025 +0100

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

 
fs/ntfs3: Add new argument is_mft to ntfs_mark_rec_free [+ + +]
Author: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Date:   Thu Jun 30 19:14:43 2022 +0300

    fs/ntfs3: Add new argument is_mft to ntfs_mark_rec_free
    
    [ Upstream commit 071100ea0e6c353258f322cb2f8dde9be62d6808 ]
    
    This argument helps in avoiding double locking
    
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Stable-dep-of: 4d78d1173a65 ("fs/ntfs3: out1 also needs to put mi")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fs/ntfs3: fix mount failure for sparse runs in run_unpack() [+ + +]
Author: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
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: stable@vger.kernel.org
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

fs/ntfs3: Make ni_ins_new_attr return error [+ + +]
Author: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Date:   Wed Jul 13 19:18:19 2022 +0300

    fs/ntfs3: Make ni_ins_new_attr return error
    
    [ Upstream commit 451e45a0e6df21e63acfd493feb5194f4697ce11 ]
    
    Function ni_ins_new_attr now returns ERR_PTR(err),
    so we check it now in other functions like ni_expand_mft_list
    
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Stable-dep-of: 4d78d1173a65 ("fs/ntfs3: out1 also needs to put mi")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

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

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

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

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

fs/ntfs3: Remove unused mi_mark_free [+ + +]
Author: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Date:   Thu Jun 30 18:49:24 2022 +0300

    fs/ntfs3: Remove unused mi_mark_free
    
    [ Upstream commit 6700eabb90d50c50be21ecbb71131cd6ecf91ded ]
    
    Cleaning up dead code
    Fix wrong comments
    
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Stable-dep-of: 4d78d1173a65 ("fs/ntfs3: out1 also needs to put mi")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fs/ntfs3: Support timestamps prior to epoch [+ + +]
Author: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
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 <almaz.alexandrovich@paragon-software.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fs_context: drop the unused lsm_flags member [+ + +]
Author: Ondrej Mosnacek <omosnace@redhat.com>
Date:   Thu Mar 16 14:07:51 2023 +0100

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

 
fsnotify: do not generate ACCESS/MODIFY events on child for special files [+ + +]
Author: Amir Goldstein <amir73il@gmail.com>
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 <sneela@tugraz.at>
    CC: stable@vger.kernel.org
    Signed-off-by: Amir Goldstein <amir73il@gmail.com>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fuse: fix readahead reclaim deadlock [+ + +]
Author: Joanne Koong <joannelkoong@gmail.com>
Date:   Thu Jan 1 10:57:31 2026 -0500

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

 
genalloc.h: fix htmldocs warning [+ + +]
Author: Andrew Morton <akpm@linux-foundation.org>
Date:   Thu Nov 27 10:39:24 2025 -0800

    genalloc.h: fix htmldocs warning
    
    [ Upstream commit 5393802c94e0ab1295c04c94c57bcb00222d4674 ]
    
    WARNING: include/linux/genalloc.h:52 function parameter 'start_addr' not described in 'genpool_algo_t'
    
    Fixes: 52fbf1134d47 ("lib/genalloc.c: fix allocation of aligned buffer from non-aligned chunk")
    Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
    Closes: https://lkml.kernel.org/r/20251127130624.563597e3@canb.auug.org.au
    Acked-by: Randy Dunlap <rdunlap@infradead.org>
    Tested-by: Randy Dunlap <rdunlap@infradead.org>
    Cc: Alexey Skidanov <alexey.skidanov@intel.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gpu: host1x: Fix race in syncpt alloc/free [+ + +]
Author: Mainak Sen <msen@nvidia.com>
Date:   Mon Jul 7 18:17:39 2025 +0900

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

 
hfsplus: fix missing hfs_bnode_get() in __hfs_bnode_create [+ + +]
Author: Yang Chenzhi <yang.chenzhi@vivo.com>
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: syzbot+005d2a9ecd9fbf525f6a@syzkaller.appspotmail.com
    Signed-off-by: Yang Chenzhi <yang.chenzhi@vivo.com>
    Signed-off-by: Viacheslav Dubeyko <slava@dubeyko.com>
    Link: https://lore.kernel.org/r/20250829093912.611853-1-yang.chenzhi@vivo.com
    Signed-off-by: Viacheslav Dubeyko <slava@dubeyko.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hfsplus: fix volume corruption issue for generic/070 [+ + +]
Author: Viacheslav Dubeyko <slava@dubeyko.com>
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 <slava@dubeyko.com>
    cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    cc: Yangtao Li <frank.li@vivo.com>
    cc: linux-fsdevel@vger.kernel.org
    Link: https://lore.kernel.org/r/20251101001229.247432-1-slava@dubeyko.com
    Signed-off-by: Viacheslav Dubeyko <slava@dubeyko.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hfsplus: fix volume corruption issue for generic/073 [+ + +]
Author: Viacheslav Dubeyko <slava@dubeyko.com>
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 <slava@dubeyko.com>
    cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    cc: Yangtao Li <frank.li@vivo.com>
    cc: linux-fsdevel@vger.kernel.org
    Link: https://lore.kernel.org/r/20251112232522.814038-1-slava@dubeyko.com
    Signed-off-by: Viacheslav Dubeyko <slava@dubeyko.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hfsplus: Verify inode mode when loading from disk [+ + +]
Author: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
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 <syzbot+895c23f6917da440ed0d@syzkaller.appspotmail.com>
    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 <penguin-kernel@I-love.SAKURA.ne.jp>
    Reviewed-by: Viacheslav Dubeyko <slava@dubeyko.com>
    Signed-off-by: Viacheslav Dubeyko <slava@dubeyko.com>
    Link: https://lore.kernel.org/r/04ded9f9-73fb-496c-bfa5-89c4f5d1d7bb@I-love.SAKURA.ne.jp
    Signed-off-by: Viacheslav Dubeyko <slava@dubeyko.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
HID: core: Harden s32ton() against conversion to 0 bits [+ + +]
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Thu Dec 4 12:39:01 2025 +0000

    HID: core: Harden s32ton() against conversion to 0 bits
    
    [ Upstream commit a6b87bfc2ab5bccb7ad953693c85d9062aef3fdd ]
    
    Testing by the syzbot fuzzer showed that the HID core gets a
    shift-out-of-bounds exception when it tries to convert a 32-bit
    quantity to a 0-bit quantity.  Ideally this should never occur, but
    there are buggy devices and some might have a report field with size
    set to zero; we shouldn't reject the report or the device just because
    of that.
    
    Instead, harden the s32ton() routine so that it returns a reasonable
    result instead of crashing when it is called with the number of bits
    set to 0 -- the same as what snto32() does.
    
    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    Reported-by: syzbot+b63d677d63bcac06cf90@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/linux-usb/68753a08.050a0220.33d347.0008.GAE@google.com/
    Tested-by: syzbot+b63d677d63bcac06cf90@syzkaller.appspotmail.com
    Fixes: dde5845a529f ("[PATCH] Generic HID layer - code split")
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/613a66cd-4309-4bce-a4f7-2905f9bce0c9@rowland.harvard.edu
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    [ s32ton() was moved by c653ffc28340 ("HID: stop exporting hid_snto32()").
      Minor context change fixed. ]
    Signed-off-by: Wenshan Lan <jetlan9@163.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

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

HID: input: map HID_GD_Z to ABS_DISTANCE for stylus/pen [+ + +]
Author: Ping Cheng <pinglinux@gmail.com>
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 <ping.cheng@wacom.com>
    Cc: stable@kernel.org
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

HID: logitech-dj: Remove duplicate error logging [+ + +]
Author: Hans de Goede <johannes.goede@oss.qualcomm.com>
Date:   Sat Nov 8 22:03:18 2025 +0100

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

HID: quirks: work around VID/PID conflict for appledisplay [+ + +]
Author: René Rebe <rene@exactco.de>
Date:   Fri Nov 28 13:46:41 2025 +0100

    HID: quirks: work around VID/PID conflict for appledisplay
    
    [ Upstream commit c7fabe4ad9219866c203164a214c474c95b36bf2 ]
    
    For years I wondered why the Apple Cinema Display driver would not
    just work for me. Turns out the hidraw driver instantly takes it
    over. Fix by adding appledisplay VID/PIDs to hid_have_special_driver.
    
    Fixes: 069e8a65cd79 ("Driver for Apple Cinema Display")
    Signed-off-by: René Rebe <rene@exactco.de>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
hwmon: (max16065) Use local variable to avoid TOCTOU [+ + +]
Author: Gui-Dong Han <hanguidong02@gmail.com>
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: stable@vger.kernel.org
    Signed-off-by: Gui-Dong Han <hanguidong02@gmail.com>
    Link: https://lore.kernel.org/r/20251128124709.3876-1-hanguidong02@gmail.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

hwmon: (w83791d) Convert macros to functions to avoid TOCTOU [+ + +]
Author: Gui-Dong Han <hanguidong02@gmail.com>
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: stable@vger.kernel.org
    Signed-off-by: Gui-Dong Han <hanguidong02@gmail.com>
    Link: https://lore.kernel.org/r/20251202180105.12842-1-hanguidong02@gmail.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

hwmon: (w83l786ng) Convert macros to functions to avoid TOCTOU [+ + +]
Author: Gui-Dong Han <hanguidong02@gmail.com>
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: stable@vger.kernel.org
    Signed-off-by: Gui-Dong Han <hanguidong02@gmail.com>
    Link: https://lore.kernel.org/r/20251128123816.3670-1-hanguidong02@gmail.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
i2c: amd-mp2: fix reference leak in MP2 PCI device [+ + +]
Author: Ma Ke <make24@iscas.ac.cn>
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: stable@vger.kernel.org
    Fixes: 529766e0a011 ("i2c: Add drivers for the AMD PCIe MP2 I2C controller")
    Signed-off-by: Ma Ke <make24@iscas.ac.cn>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Link: https://lore.kernel.org/r/20251022095402.8846-1-make24@iscas.ac.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

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

i3c: master: svc: Prevent incomplete IBI transaction [+ + +]
Author: Stanley Chu <yschu@nuvoton.com>
Date:   Mon Oct 27 11:47:15 2025 +0800

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

 
i40e: fix scheduling in set_rx_mode [+ + +]
Author: Przemyslaw Korba <przemyslaw.korba@intel.com>
Date:   Thu Nov 20 13:07:28 2025 +0100

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

i40e: Refactor argument of i40e_detect_recover_hung() [+ + +]
Author: Ivan Vecera <ivecera@redhat.com>
Date:   Sat Apr 27 09:26:04 2024 +0200

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

i40e: Refactor argument of several client notification functions [+ + +]
Author: Ivan Vecera <ivecera@redhat.com>
Date:   Sat Apr 27 09:26:03 2024 +0200

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

i40e: validate ring_len parameter against hardware-specific values [+ + +]
Author: Gregory Herrero <gregory.herrero@oracle.com>
Date:   Fri Dec 12 22:06:43 2025 +0100

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

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

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

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

    idr: fix idr_alloc() returning an ID out of range
    
    commit c6e8e595a0798ad67da0f7bebaf69c31ef70dfff upstream.
    
    If you use an IDR with a non-zero base, and specify a range that lies
    entirely below the base, 'max - base' becomes very large and
    idr_get_free() can return an ID that lies outside of the requested range.
    
    Link: https://lkml.kernel.org/r/20251128161853.3200058-1-willy@infradead.org
    Fixes: 6ce711f27500 ("idr: Make 1-based IDRs more efficient")
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reported-by: Jan Sokolowski <jan.sokolowski@intel.com>
    Reported-by: Koen Koning <koen.koning@intel.com>
    Reported-by: Peter Senna Tschudin <peter.senna@linux.intel.com>
    Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/6449
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
iio: imu: st_lsm6dsx: discard samples during filters settling time [+ + +]
Author: Lorenzo Bianconi <lorenzo@kernel.org>
Date:   Mon Feb 27 12:14:56 2023 +0100

    iio: imu: st_lsm6dsx: discard samples during filters settling time
    
    [ Upstream commit db3c490503bee4d0611f9fc17fcd8cfe6fcdbcad ]
    
    During digital filters settling time the driver is expected to drop
    samples since they can be corrupted. Introduce the capability to drop
    a given number of samples according to the configured ODR.
    Add sample_to_discard for LSM6DSM-like sensors since new generation
    devices (e.g. LSM6DSO) support DRDY mask where corrupted samples are
    masked in hw with values greather than 0x7ffd so the driver can easily
    discard them.
    I have not added sample_to_discard support for LSM6DS3 or LSM6DS3H since
    I do not have any sample for testing at the moment.
    
    Reported-by: Philippe De Muyter <phdm@macqel.be>
    Tested-by: Philippe De Muyter <phdm@macqel.be>
    Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
    Link: https://lore.kernel.org/r/21dcd94935c147ef9b1da4984b3da6264ee9609e.1677496295.git.lorenzo@kernel.org
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Stable-dep-of: c6d702f2b771 ("iio: imu: st_lsm6dsx: Fix measurement unit for odr struct member")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

iio: imu: st_lsm6dsx: Fix measurement unit for odr struct member [+ + +]
Author: Francesco Lavra <flavra@baylibre.com>
Date:   Fri Oct 17 18:42:54 2025 +0200

    iio: imu: st_lsm6dsx: Fix measurement unit for odr struct member
    
    [ Upstream commit c6d702f2b77194b62fb2098c63bb7f2a87da142d ]
    
    The `odr` field in struct st_lsm6dsx_sensor contains a data rate
    value expressed in mHz, not in Hz.
    
    Fixes: f8710f0357bc3 ("iio: imu: st_lsm6dsx: express odr in mHZ")
    Signed-off-by: Francesco Lavra <flavra@baylibre.com>
    Acked-by: Lorenzo Bianconi <lorenzo@kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

iio: imu: st_lsm6dsx: introduce st_lsm6dsx_device_set_enable routine [+ + +]
Author: Lorenzo Bianconi <lorenzo@kernel.org>
Date:   Mon Oct 10 13:07:26 2022 +0200

    iio: imu: st_lsm6dsx: introduce st_lsm6dsx_device_set_enable routine
    
    [ Upstream commit cd83c5c10036a2a156d725725daf3409832c8a24 ]
    
    Introduce st_lsm6dsx_device_set_enable utility routine and remove
    duplicated code used to enable/disable sensors
    
    Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
    Link: https://lore.kernel.org/r/e3fbe5d4a3bed41130908669f745f78c8505cf47.1665399959.git.lorenzo@kernel.org
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Stable-dep-of: c6d702f2b771 ("iio: imu: st_lsm6dsx: Fix measurement unit for odr struct member")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ima: Handle error code returned by ima_filter_rule_match() [+ + +]
Author: Zhao Yipeng <zhaoyipeng5@huawei.com>
Date:   Thu Nov 20 15:18:05 2025 +0800

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

 
inet: Avoid ehash lookup race in inet_ehash_insert() [+ + +]
Author: Xuanqiang Luo <luoxuanqiang@kylinos.cn>
Date:   Wed Oct 15 10:02:35 2025 +0800

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

inet: ping: Fix icmp out counting [+ + +]
Author: yuan.gao <yuan.gao@ucloud.cn>
Date:   Wed Dec 24 14:31:45 2025 +0800

    inet: ping: Fix icmp out counting
    
    [ Upstream commit 4c0856c225b39b1def6c9a6bc56faca79550da13 ]
    
    When the ping program uses an IPPROTO_ICMP socket to send ICMP_ECHO
    messages, ICMP_MIB_OUTMSGS is counted twice.
    
        ping_v4_sendmsg
          ping_v4_push_pending_frames
            ip_push_pending_frames
              ip_finish_skb
                __ip_make_skb
                  icmp_out_count(net, icmp_type); // first count
          icmp_out_count(sock_net(sk), user_icmph.type); // second count
    
    However, when the ping program uses an IPPROTO_RAW socket,
    ICMP_MIB_OUTMSGS is counted correctly only once.
    
    Therefore, the first count should be removed.
    
    Fixes: c319b4d76b9e ("net: ipv4: add IPPROTO_ICMP socket kind")
    Signed-off-by: yuan.gao <yuan.gao@ucloud.cn>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Tested-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://patch.msgid.link/20251224063145.3615282-1-yuan.gao@ucloud.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Input: i8042 - add TUXEDO InfinityBook Max Gen10 AMD to i8042 quirk table [+ + +]
Author: Christoffer Sandberg <cs@tuxedo.de>
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 <cs@tuxedo.de>
    Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20251124203336.64072-1-wse@tuxedocomputers.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: ti_am335x_tsc - fix off-by-one error in wire_order validation [+ + +]
Author: Junjie Cao <junjie.cao@intel.com>
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 <junjie.cao@intel.com>
    Link: https://patch.msgid.link/20251114062817.852698-1-junjie.cao@intel.com
    Fixes: bb76dc09ddfc ("input: ti_am33x_tsc: Order of TSC wires, made configurable")
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
intel_th: Fix error handling in intel_th_output_open [+ + +]
Author: Ma Ke <make24@iscas.ac.cn>
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 <stable@kernel.org>
    Fixes: 39f4034693b7 ("intel_th: Add driver infrastructure for Intel(R) Trace Hub devices")
    Signed-off-by: Ma Ke <make24@iscas.ac.cn>
    Link: https://patch.msgid.link/20251112091723.35963-1-make24@iscas.ac.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
io_uring: fix filename leak in __io_openat_prep() [+ + +]
Author: Prithvi Tambewagh <activprithvi@gmail.com>
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: syzbot+00e61c43eb5e4740438f@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=00e61c43eb5e4740438f
    Tested-by: syzbot+00e61c43eb5e4740438f@syzkaller.appspotmail.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Prithvi Tambewagh <activprithvi@gmail.com>
    Fixes: b9445598d8c6 ("io_uring: openat directly into fixed fd table")
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

    iommu/apple-dart: fix device leak on of_xlate()
    
    commit a6eaa872c52a181ae9a290fd4e40c9df91166d7a upstream.
    
    Make sure to drop the reference taken to the iommu platform device when
    looking up its driver data during of_xlate().
    
    Fixes: 46d1fb072e76 ("iommu/dart: Add DART iommu driver")
    Cc: stable@vger.kernel.org      # 5.15
    Cc: Sven Peter <sven@kernel.org>
    Acked-by: Robin Murphy <robin.murphy@arm.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

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

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

    iommu/exynos: fix device leak on of_xlate()
    
    commit 05913cc43cb122f9afecdbe775115c058b906e1b upstream.
    
    Make sure to drop the reference taken to the iommu platform device when
    looking up its driver data during of_xlate().
    
    Note that commit 1a26044954a6 ("iommu/exynos: add missing put_device()
    call in exynos_iommu_of_xlate()") fixed the leak in a couple of error
    paths, but the reference is still leaking on success.
    
    Fixes: aa759fd376fb ("iommu/exynos: Add callback for initializing devices from device tree")
    Cc: stable@vger.kernel.org      # 4.2: 1a26044954a6
    Cc: Yu Kuai <yukuai3@huawei.com>
    Acked-by: Robin Murphy <robin.murphy@arm.com>
    Acked-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

    iommu/ipmmu-vmsa: fix device leak on of_xlate()
    
    commit 80aa518452c4aceb9459f9a8e3184db657d1b441 upstream.
    
    Make sure to drop the reference taken to the iommu platform device when
    looking up its driver data during of_xlate().
    
    Fixes: 7b2d59611fef ("iommu/ipmmu-vmsa: Replace local utlb code with fwspec ids")
    Cc: stable@vger.kernel.org      # 4.14
    Cc: Magnus Damm <damm+renesas@opensource.se>
    Acked-by: Robin Murphy <robin.murphy@arm.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

    iommu/mediatek-v1: fix device leak on probe_device()
    
    commit c77ad28bfee0df9cbc719eb5adc9864462cfb65b upstream.
    
    Make sure to drop the reference taken to the iommu platform device when
    looking up its driver data during probe_device().
    
    Fixes: b17336c55d89 ("iommu/mediatek: add support for mtk iommu generation one HW")
    Cc: stable@vger.kernel.org      # 4.8
    Cc: Honghui Zhang <honghui.zhang@mediatek.com>
    Acked-by: Robin Murphy <robin.murphy@arm.com>
    Reviewed-by: Yong Wu <yong.wu@mediatek.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

    iommu/mediatek: fix device leak on of_xlate()
    
    commit b3f1ee18280363ef17f82b564fc379ceba9ec86f upstream.
    
    Make sure to drop the reference taken to the iommu platform device when
    looking up its driver data during of_xlate().
    
    Fixes: 0df4fabe208d ("iommu/mediatek: Add mt8173 IOMMU driver")
    Cc: stable@vger.kernel.org      # 4.6
    Acked-by: Robin Murphy <robin.murphy@arm.com>
    Reviewed-by: Yong Wu <yong.wu@mediatek.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

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

 
iommu/qcom: fix device leak on of_xlate() [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Jan 5 11:09:11 2026 -0500

    iommu/qcom: fix device leak on of_xlate()
    
    [ Upstream commit 6a3908ce56e6879920b44ef136252b2f0c954194 ]
    
    Make sure to drop the reference taken to the iommu platform device when
    looking up its driver data during of_xlate().
    
    Note that commit e2eae09939a8 ("iommu/qcom: add missing put_device()
    call in qcom_iommu_of_xlate()") fixed the leak in a couple of error
    paths, but the reference is still leaking on success and late failures.
    
    Fixes: 0ae349a0f33f ("iommu/qcom: Add qcom_iommu")
    Cc: stable@vger.kernel.org      # 4.14: e2eae09939a8
    Cc: Rob Clark <robin.clark@oss.qualcomm.com>
    Cc: Yu Kuai <yukuai3@huawei.com>
    Acked-by: Robin Murphy <robin.murphy@arm.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
    [ adapted validation logic from max_asid to num_ctxs ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

    iommu/sun50i: fix device leak on of_xlate()
    
    commit f916109bf53864605d10bf6f4215afa023a80406 upstream.
    
    Make sure to drop the reference taken to the iommu platform device when
    looking up its driver data during of_xlate().
    
    Fixes: 4100b8c229b3 ("iommu: Add Allwinner H6 IOMMU driver")
    Cc: stable@vger.kernel.org      # 5.8
    Cc: Maxime Ripard <mripard@kernel.org>
    Acked-by: Robin Murphy <robin.murphy@arm.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

    iommu/tegra: fix device leak on probe_device()
    
    commit c08934a61201db8f1d1c66fcc63fb2eb526b656d upstream.
    
    Make sure to drop the reference taken to the iommu platform device when
    looking up its driver data during probe_device().
    
    Note that commit 9826e393e4a8 ("iommu/tegra-smmu: Fix missing
    put_device() call in tegra_smmu_find") fixed the leak in an error path,
    but the reference is still leaking on success.
    
    Fixes: 891846516317 ("memory: Add NVIDIA Tegra memory controller support")
    Cc: stable@vger.kernel.org      # 3.19: 9826e393e4a8
    Cc: Miaoqian Lin <linmq006@gmail.com>
    Acked-by: Robin Murphy <robin.murphy@arm.com>
    Acked-by: Thierry Reding <treding@nvidia.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ip6_gre: make ip6gre_header() robust [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Dec 11 17:35:50 2025 +0000

    ip6_gre: make ip6gre_header() robust
    
    [ Upstream commit db5b4e39c4e63700c68a7e65fc4e1f1375273476 ]
    
    Over the years, syzbot found many ways to crash the kernel
    in ip6gre_header() [1].
    
    This involves team or bonding drivers ability to dynamically
    change their dev->needed_headroom and/or dev->hard_header_len
    
    In this particular crash mld_newpack() allocated an skb
    with a too small reserve/headroom, and by the time mld_sendpack()
    was called, syzbot managed to attach an ip6gre device.
    
    [1]
    skbuff: skb_under_panic: text:ffffffff8a1d69a8 len:136 put:40 head:ffff888059bc7000 data:ffff888059bc6fe8 tail:0x70 end:0x6c0 dev:team0
    ------------[ cut here ]------------
     kernel BUG at net/core/skbuff.c:213 !
     <TASK>
      skb_under_panic net/core/skbuff.c:223 [inline]
      skb_push+0xc3/0xe0 net/core/skbuff.c:2641
      ip6gre_header+0xc8/0x790 net/ipv6/ip6_gre.c:1371
      dev_hard_header include/linux/netdevice.h:3436 [inline]
      neigh_connected_output+0x286/0x460 net/core/neighbour.c:1618
      neigh_output include/net/neighbour.h:556 [inline]
      ip6_finish_output2+0xfb3/0x1480 net/ipv6/ip6_output.c:136
     __ip6_finish_output net/ipv6/ip6_output.c:-1 [inline]
      ip6_finish_output+0x234/0x7d0 net/ipv6/ip6_output.c:220
      NF_HOOK_COND include/linux/netfilter.h:307 [inline]
      ip6_output+0x340/0x550 net/ipv6/ip6_output.c:247
      NF_HOOK+0x9e/0x380 include/linux/netfilter.h:318
      mld_sendpack+0x8d4/0xe60 net/ipv6/mcast.c:1855
      mld_send_cr net/ipv6/mcast.c:2154 [inline]
      mld_ifc_work+0x83e/0xd60 net/ipv6/mcast.c:2693
    
    Fixes: c12b395a4664 ("gre: Support GRE over IPv6")
    Reported-by: syzbot+43a2ebcf2a64b1102d64@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/693b002c.a70a0220.33cd7b.0033.GAE@google.com/T/#u
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20251211173550.2032674-1-edumazet@google.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipmi: Fix __scan_channels() failing to rescan channels [+ + +]
Author: Jinhui Guo <guojinhui.liam@bytedance.com>
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 <guojinhui.liam@bytedance.com>
    Message-ID: <20250930074239.2353-3-guojinhui.liam@bytedance.com>
    Signed-off-by: Corey Minyard <corey@minyard.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipmi: Fix the race between __scan_channels() and deliver_response() [+ + +]
Author: Jinhui Guo <guojinhui.liam@bytedance.com>
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 <guojinhui.liam@bytedance.com>
    Message-ID: <20250930074239.2353-2-guojinhui.liam@bytedance.com>
    Signed-off-by: Corey Minyard <corey@minyard.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

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

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

ipv4: Fix uninit-value access in __ip_make_skb() [+ + +]
Author: Shigeru Yoshida <syoshida@redhat.com>
Date:   Thu Dec 25 21:22:37 2025 +0530

    ipv4: Fix uninit-value access in __ip_make_skb()
    
    commit fc1092f51567277509563800a3c56732070b6aa4 upstream.
    
    KMSAN reported uninit-value access in __ip_make_skb() [1].  __ip_make_skb()
    tests HDRINCL to know if the skb has icmphdr. However, HDRINCL can cause a
    race condition. If calling setsockopt(2) with IP_HDRINCL changes HDRINCL
    while __ip_make_skb() is running, the function will access icmphdr in the
    skb even if it is not included. This causes the issue reported by KMSAN.
    
    Check FLOWI_FLAG_KNOWN_NH on fl4->flowi4_flags instead of testing HDRINCL
    on the socket.
    
    Also, fl4->fl4_icmp_type and fl4->fl4_icmp_code are not initialized. These
    are union in struct flowi4 and are implicitly initialized by
    flowi4_init_output(), but we should not rely on specific union layout.
    
    Initialize these explicitly in raw_sendmsg().
    
    [1]
    BUG: KMSAN: uninit-value in __ip_make_skb+0x2b74/0x2d20 net/ipv4/ip_output.c:1481
     __ip_make_skb+0x2b74/0x2d20 net/ipv4/ip_output.c:1481
     ip_finish_skb include/net/ip.h:243 [inline]
     ip_push_pending_frames+0x4c/0x5c0 net/ipv4/ip_output.c:1508
     raw_sendmsg+0x2381/0x2690 net/ipv4/raw.c:654
     inet_sendmsg+0x27b/0x2a0 net/ipv4/af_inet.c:851
     sock_sendmsg_nosec net/socket.c:730 [inline]
     __sock_sendmsg+0x274/0x3c0 net/socket.c:745
     __sys_sendto+0x62c/0x7b0 net/socket.c:2191
     __do_sys_sendto net/socket.c:2203 [inline]
     __se_sys_sendto net/socket.c:2199 [inline]
     __x64_sys_sendto+0x130/0x200 net/socket.c:2199
     do_syscall_64+0xd8/0x1f0 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x6d/0x75
    
    Uninit was created at:
     slab_post_alloc_hook mm/slub.c:3804 [inline]
     slab_alloc_node mm/slub.c:3845 [inline]
     kmem_cache_alloc_node+0x5f6/0xc50 mm/slub.c:3888
     kmalloc_reserve+0x13c/0x4a0 net/core/skbuff.c:577
     __alloc_skb+0x35a/0x7c0 net/core/skbuff.c:668
     alloc_skb include/linux/skbuff.h:1318 [inline]
     __ip_append_data+0x49ab/0x68c0 net/ipv4/ip_output.c:1128
     ip_append_data+0x1e7/0x260 net/ipv4/ip_output.c:1365
     raw_sendmsg+0x22b1/0x2690 net/ipv4/raw.c:648
     inet_sendmsg+0x27b/0x2a0 net/ipv4/af_inet.c:851
     sock_sendmsg_nosec net/socket.c:730 [inline]
     __sock_sendmsg+0x274/0x3c0 net/socket.c:745
     __sys_sendto+0x62c/0x7b0 net/socket.c:2191
     __do_sys_sendto net/socket.c:2203 [inline]
     __se_sys_sendto net/socket.c:2199 [inline]
     __x64_sys_sendto+0x130/0x200 net/socket.c:2199
     do_syscall_64+0xd8/0x1f0 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x6d/0x75
    
    CPU: 1 PID: 15709 Comm: syz-executor.7 Not tainted 6.8.0-11567-gb3603fcb79b1 #25
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-1.fc39 04/01/2014
    
    Fixes: 99e5acae193e ("ipv4: Fix potential uninit variable access bug in __ip_make_skb()")
    Reported-by: syzkaller <syzkaller@googlegroups.com>
    Signed-off-by: Shigeru Yoshida <syoshida@redhat.com>
    Link: https://lore.kernel.org/r/20240430123945.2057348-1-syoshida@redhat.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    [ Referred stable v6.1.y version of the patch to generate this one
      v6.1 link: https://github.com/gregkh/linux/commit/55bf541e018b76b3750cb6c6ea18c46e1ac5562e ]
    Signed-off-by: Shubham Kulkarni <skulkarni@mvista.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

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

ipv6: Fix potential uninit-value access in __ip6_make_skb() [+ + +]
Author: Shigeru Yoshida <syoshida@redhat.com>
Date:   Wed Dec 24 00:23:41 2025 +0530

    ipv6: Fix potential uninit-value access in __ip6_make_skb()
    
    commit 4e13d3a9c25b7080f8a619f961e943fe08c2672c upstream.
    
    As it was done in commit fc1092f51567 ("ipv4: Fix uninit-value access in
    __ip_make_skb()") for IPv4, check FLOWI_FLAG_KNOWN_NH on fl6->flowi6_flags
    instead of testing HDRINCL on the socket to avoid a race condition which
    causes uninit-value access.
    
    Fixes: ea30388baebc ("ipv6: Fix an uninit variable access bug in __ip6_make_skb()")
    Signed-off-by: Shigeru Yoshida <syoshida@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    [ Referred stable v6.1.y version of the patch to generate this one
     v6.1 link: https://github.com/gregkh/linux/commit/a05c1ede50e9656f0752e523c7b54f3a3489e9a8 ]
    Signed-off-by: Shubham Kulkarni <skulkarni@mvista.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ipvlan: Ignore PACKET_LOOPBACK in handle_mode_l2() [+ + +]
Author: Dmitry Skorodumov <skorodumov.dmitry@huawei.com>
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 <skorodumov.dmitry@huawei.com>
    Link: https://patch.msgid.link/20251202103906.4087675-1-skorodumov.dmitry@huawei.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipvs: fix ipv4 null-ptr-deref in route error path [+ + +]
Author: Slavin Liu <slavin452@gmail.com>
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 <slavin452@gmail.com>
    Acked-by: Julian Anastasov <ja@ssi.bg>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
irqchip/qcom-irq-combiner: Fix section mismatch [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Oct 13 11:46:09 2025 +0200

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

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

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

jbd2: fix the inconsistency between checksum and data in memory for journal sb [+ + +]
Author: Ye Bin <yebin10@huawei.com>
Date:   Mon Dec 29 20:01:02 2025 -0500

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

jbd2: use a weaker annotation in journal handling [+ + +]
Author: Byungchul Park <byungchul@sk.com>
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 <byungchul@sk.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Cc: stable@kernel.org
    Message-ID: <20251024073940.1063-1-byungchul@sk.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

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

 
KEYS: trusted: Fix a memory leak in tpm2_load_cmd [+ + +]
Author: Jarkko Sakkinen <jarkko@kernel.org>
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: stable@vger.kernel.org # v5.13+
    Fixes: f2219745250f ("security: keys: trusted: use ASN.1 TPM2 key format for the blobs")
    Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
kmsan: introduce __no_sanitize_memory and __no_kmsan_checks [+ + +]
Author: Alexander Potapenko <glider@google.com>
Date:   Thu Sep 15 17:03:41 2022 +0200

    kmsan: introduce __no_sanitize_memory and __no_kmsan_checks
    
    [ Upstream commit 9b448bc25b776daab3215393c3ce6953dd3bb8ad ]
    
    __no_sanitize_memory is a function attribute that instructs KMSAN to skip
    a function during instrumentation.  This is needed to e.g.  implement the
    noinstr functions.
    
    __no_kmsan_checks is a function attribute that makes KMSAN ignore the
    uninitialized values coming from the function's inputs, and initialize the
    function's outputs.
    
    Functions marked with this attribute can't be inlined into functions not
    marked with it, and vice versa.  This behavior is overridden by
    __always_inline.
    
    __SANITIZE_MEMORY__ is a macro that's defined iff the file is instrumented
    with KMSAN.  This is not the same as CONFIG_KMSAN, which is defined for
    every file.
    
    Link: https://lkml.kernel.org/r/20220915150417.722975-8-glider@google.com
    Signed-off-by: Alexander Potapenko <glider@google.com>
    Reviewed-by: Marco Elver <elver@google.com>
    Cc: Alexander Viro <viro@zeniv.linux.org.uk>
    Cc: Alexei Starovoitov <ast@kernel.org>
    Cc: Andrey Konovalov <andreyknvl@gmail.com>
    Cc: Andrey Konovalov <andreyknvl@google.com>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Eric Biggers <ebiggers@google.com>
    Cc: Eric Biggers <ebiggers@kernel.org>
    Cc: Eric Dumazet <edumazet@google.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: Ilya Leoshkevich <iii@linux.ibm.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Jens Axboe <axboe@kernel.dk>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Michael S. Tsirkin <mst@redhat.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Petr Mladek <pmladek@suse.com>
    Cc: Stephen Rothwell <sfr@canb.auug.org.au>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Vasily Gorbik <gor@linux.ibm.com>
    Cc: Vegard Nossum <vegard.nossum@oracle.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: ced37e9ceae5 ("x86/dumpstack: Prevent KASAN false positive warnings in __show_regs()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ktest.pl: Fix uninitialized var in config-bisect.pl [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
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: stable@vger.kernel.org
    Cc: John 'Warthog9' Hawley <warthog9@kernel.org>
    Fixes: 0f0db065999cf ("ktest: Add standalone config-bisect.pl program")
    Link: https://patch.msgid.link/20251203180924.6862bd26@gandalf.local.home
    Reported-by: "John W. Krahn" <jwkrahn@shaw.ca>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
KVM: arm64: sys_regs: disable -Wuninitialized-const-pointer warning [+ + +]
Author: Justin Stitt <justinstitt@google.com>
Date:   Thu Dec 4 12:44:48 2025 -0800

    KVM: arm64: sys_regs: disable -Wuninitialized-const-pointer warning
    
    A new warning in Clang 22 [1] complains that @clidr passed to
    get_clidr_el1() is an uninitialized const pointer. get_clidr_el1()
    doesn't really care since it casts away the const-ness anyways -- it is
    a false positive.
    
    |  ../arch/arm64/kvm/sys_regs.c:2838:23: warning: variable 'clidr' is uninitialized when passed as a const pointer argument here [-Wuninitialized-const-pointer]
    |   2838 |         get_clidr_el1(NULL, &clidr); /* Ugly... */
    |        |                              ^~~~~
    
    This patch isn't needed for anything past 6.1 as this code section was
    reworked in Commit 7af0c2534f4c ("KVM: arm64: Normalize cache
    configuration"). Since there is no upstream equivalent, this patch just
    needs to be applied to 5.15.
    
    Disable this warning for sys_regs.o with an iron fist as it doesn't make
    sense to waste maintainer's time or potentially break builds by
    backporting large changelists from 6.2+.
    
    Cc: stable@vger.kernel.org
    Fixes: 7c8c5e6a9101e ("arm64: KVM: system register handling")
    Link: https://github.com/llvm/llvm-project/commit/00dacf8c22f065cb52efb14cd091d441f19b319e [1]
    Reviewed-by: Nathan Chancellor <nathan@kernel.org>
    Signed-off-by: Justin Stitt <justinstitt@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: nSVM: Clear exit_code_hi in VMCB when synthesizing nested VM-Exits [+ + +]
Author: Sean Christopherson <seanjc@google.com>
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 <jmattson@google.com>
    Cc: Yosry Ahmed <yosry.ahmed@linux.dev>
    Cc: stable@vger.kernel.org
    Reviewed-by: Yosry Ahmed <yosry.ahmed@linux.dev>
    Link: https://patch.msgid.link/20251113225621.1688428-2-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: nSVM: Propagate SVM_EXIT_CR0_SEL_WRITE correctly for LMSW emulation [+ + +]
Author: Yosry Ahmed <yosry.ahmed@linux.dev>
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: stable@vger.kernel.org
    Reported-by: Matteo Rizzo <matteorizzo@google.com>
    Signed-off-by: Yosry Ahmed <yosry.ahmed@linux.dev>
    Link: https://patch.msgid.link/20251024192918.3191141-3-yosry.ahmed@linux.dev
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: nSVM: Set exit_code_hi to -1 when synthesizing SVM_EXIT_ERR (failed VMRUN) [+ + +]
Author: Sean Christopherson <seanjc@google.com>
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 <jmattson@google.com>
    Cc: Yosry Ahmed <yosry.ahmed@linux.dev>
    Cc: stable@vger.kernel.org
    Reviewed-by: Yosry Ahmed <yosry.ahmed@linux.dev>
    Link: https://patch.msgid.link/20251113225621.1688428-3-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: nVMX: Immediately refresh APICv controls as needed on nested VM-Exit [+ + +]
Author: Dongli Zhang <dongli.zhang@oracle.com>
Date:   Tue Dec 30 22:17:17 2025 -0500

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

KVM: SVM: Mark VMCB_NPT as dirty on nested VMRUN [+ + +]
Author: Jim Mattson <jmattson@google.com>
Date:   Wed Dec 31 09:39:17 2025 -0500

    KVM: SVM: Mark VMCB_NPT as dirty on nested VMRUN
    
    [ Upstream commit 7c8b465a1c91f674655ea9cec5083744ec5f796a ]
    
    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: stable@vger.kernel.org
    Signed-off-by: Jim Mattson <jmattson@google.com>
    Link: https://lore.kernel.org/r/20250922162935.621409-3-jmattson@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    [ adapted vmcb02 local variable to svm->vmcb direct access pattern ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: x86: Acquire kvm->srcu when handling KVM_SET_VCPU_EVENTS [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Thu Dec 4 16:19:31 2025 +0800

    KVM: x86: Acquire kvm->srcu when handling KVM_SET_VCPU_EVENTS
    
    commit 4bcdd831d9d01e0fb64faea50732b59b2ee88da1 upstream.
    
    Grab kvm->srcu when processing KVM_SET_VCPU_EVENTS, as KVM will forcibly
    leave nested VMX/SVM if SMM mode is being toggled, and leaving nested VMX
    reads guest memory.
    
    Note, kvm_vcpu_ioctl_x86_set_vcpu_events() can also be called from KVM_RUN
    via sync_regs(), which already holds SRCU.  I.e. trying to precisely use
    kvm_vcpu_srcu_read_lock() around the problematic SMM code would cause
    problems.  Acquiring SRCU isn't all that expensive, so for simplicity,
    grab it unconditionally for KVM_SET_VCPU_EVENTS.
    
     =============================
     WARNING: suspicious RCU usage
     6.10.0-rc7-332d2c1d713e-next-vm #552 Not tainted
     -----------------------------
     include/linux/kvm_host.h:1027 suspicious rcu_dereference_check() usage!
    
     other info that might help us debug this:
    
     rcu_scheduler_active = 2, debug_locks = 1
     1 lock held by repro/1071:
      #0: ffff88811e424430 (&vcpu->mutex){+.+.}-{3:3}, at: kvm_vcpu_ioctl+0x7d/0x970 [kvm]
    
     stack backtrace:
     CPU: 15 PID: 1071 Comm: repro Not tainted 6.10.0-rc7-332d2c1d713e-next-vm #552
     Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015
     Call Trace:
      <TASK>
      dump_stack_lvl+0x7f/0x90
      lockdep_rcu_suspicious+0x13f/0x1a0
      kvm_vcpu_gfn_to_memslot+0x168/0x190 [kvm]
      kvm_vcpu_read_guest+0x3e/0x90 [kvm]
      nested_vmx_load_msr+0x6b/0x1d0 [kvm_intel]
      load_vmcs12_host_state+0x432/0xb40 [kvm_intel]
      vmx_leave_nested+0x30/0x40 [kvm_intel]
      kvm_vcpu_ioctl_x86_set_vcpu_events+0x15d/0x2b0 [kvm]
      kvm_arch_vcpu_ioctl+0x1107/0x1750 [kvm]
      ? mark_held_locks+0x49/0x70
      ? kvm_vcpu_ioctl+0x7d/0x970 [kvm]
      ? kvm_vcpu_ioctl+0x497/0x970 [kvm]
      kvm_vcpu_ioctl+0x497/0x970 [kvm]
      ? lock_acquire+0xba/0x2d0
      ? find_held_lock+0x2b/0x80
      ? do_user_addr_fault+0x40c/0x6f0
      ? lock_release+0xb7/0x270
      __x64_sys_ioctl+0x82/0xb0
      do_syscall_64+0x6c/0x170
      entry_SYSCALL_64_after_hwframe+0x4b/0x53
     RIP: 0033:0x7ff11eb1b539
      </TASK>
    
    Fixes: f7e570780efc ("KVM: x86: Forcibly leave nested virt when SMM state is toggled")
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240723232055.3643811-1-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    [ Based on kernel 5.15 available functions, using srcu_read_lock/srcu_read_unlock instead of
    kvm_vcpu_srcu_read_lock/kvm_vcpu_srcu_read_unlock ]
    Signed-off-by: Rajani Kantha <681739313@139.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: x86: Explicitly set new periodic hrtimer expiration in apic_timer_fn() [+ + +]
Author: fuqiang wang <fuqiang.wng@gmail.com>
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: stable@vger.kernel.org
    Signed-off-by: fuqiang wang <fuqiang.wng@gmail.com>
    [sean: split to separate patch, write changelog]
    Link: https://patch.msgid.link/20251113205114.1647493-3-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: x86: Fix VM hard lockup after prolonged inactivity with periodic HV timer [+ + +]
Author: fuqiang wang <fuqiang.wng@gmail.com>
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: stable@vger.kernel.org
    Signed-off-by: fuqiang wang <fuqiang.wng@gmail.com>
    [sean: massage comments and changelog]
    Link: https://patch.msgid.link/20251113205114.1647493-4-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: x86: WARN if hrtimer callback for periodic APIC timer fires with period=0 [+ + +]
Author: Sean Christopherson <seanjc@google.com>
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: stable@vger.kernel.org
    Link: https://patch.msgid.link/20251113205114.1647493-2-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
leds: leds-lp50xx: Allow LED 0 to be added to module bank [+ + +]
Author: Christian Hitz <christian.hitz@bbv.ch>
Date:   Wed Oct 8 14:32:21 2025 +0200

    leds: leds-lp50xx: Allow LED 0 to be added to module bank
    
    commit 26fe74d598c32e7bc6f150edfc4aa43e1bee55db upstream.
    
    led_banks contains LED module number(s) that should be grouped into the
    module bank. led_banks is 0-initialized.
    By checking the led_banks entries for 0, un-set entries are detected.
    But a 0-entry also indicates that LED module 0 should be grouped into the
    module bank.
    
    By only iterating over the available entries no check for unused entries
    is required and LED module 0 can be added to bank.
    
    Cc: stable@vger.kernel.org
    Fixes: 242b81170fb8 ("leds: lp50xx: Add the LP50XX family of the RGB LED driver")
    Signed-off-by: Christian Hitz <christian.hitz@bbv.ch>
    Reviewed-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
    Link: https://patch.msgid.link/20251008123222.1117331-1-christian@klarinett.li
    Signed-off-by: Lee Jones <lee@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

leds: leds-lp50xx: LP5009 supports 3 modules for a total of 9 LEDs [+ + +]
Author: Christian Hitz <christian.hitz@bbv.ch>
Date:   Wed Oct 22 08:33:04 2025 +0200

    leds: leds-lp50xx: LP5009 supports 3 modules for a total of 9 LEDs
    
    commit 5246e3673eeeccb4f5bf4f42375dd495d465ac15 upstream.
    
    LP5009 supports 9 LED outputs that are grouped into 3 modules.
    
    Cc: stable@vger.kernel.org
    Fixes: 242b81170fb8 ("leds: lp50xx: Add the LP50XX family of the RGB LED driver")
    Signed-off-by: Christian Hitz <christian.hitz@bbv.ch>
    Link: https://patch.msgid.link/20251022063305.972190-1-christian@klarinett.li
    Signed-off-by: Lee Jones <lee@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

leds: netxbig: Fix GPIO descriptor leak in error paths [+ + +]
Author: Haotian Zhang <vulab@iscas.ac.cn>
Date:   Fri Oct 31 10:16:20 2025 +0800

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

leds: Replace all non-returning strlcpy with strscpy [+ + +]
Author: Azeem Shaikh <azeemshaikh38@gmail.com>
Date:   Tue May 23 02:14:51 2023 +0000

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

leds: spi-byte: Use devm_led_classdev_register_ext() [+ + +]
Author: Stefan Kalscheuer <stefan@stklcode.de>
Date:   Sun Feb 4 16:07:26 2024 +0100

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

 
lib/crypto: aes: Fix missing MMU protection for AES S-box [+ + +]
Author: Eric Biggers <ebiggers@kernel.org>
Date:   Tue Jan 6 21:20:23 2026 -0800

    lib/crypto: aes: Fix missing MMU protection for AES S-box
    
    commit 74d74bb78aeccc9edc10db216d6be121cf7ec176 upstream.
    
    __cacheline_aligned puts the data in the ".data..cacheline_aligned"
    section, which isn't marked read-only i.e. it doesn't receive MMU
    protection.  Replace it with ____cacheline_aligned which does the right
    thing and just aligns the data while keeping it in ".rodata".
    
    Fixes: b5e0b032b6c3 ("crypto: aes - add generic time invariant AES cipher")
    Cc: stable@vger.kernel.org
    Reported-by: Qingfang Deng <dqfext@gmail.com>
    Closes: https://lore.kernel.org/r/20260105074712.498-1-dqfext@gmail.com/
    Acked-by: Ard Biesheuvel <ardb@kernel.org>
    Link: https://lore.kernel.org/r/20260107052023.174620-1-ebiggers@kernel.org
    Signed-off-by: Eric Biggers <ebiggers@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

lib/crypto: x86/blake2s: Fix 32-bit arg treated as 64-bit [+ + +]
Author: Eric Biggers <ebiggers@kernel.org>
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: stable@vger.kernel.org
    Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
    Link: https://lore.kernel.org/r/20251102234209.62133-2-ebiggers@kernel.org
    Signed-off-by: Eric Biggers <ebiggers@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
lib/vsprintf: Check pointer before dereferencing in time_and_date() [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Mon Nov 10 14:21:18 2025 +0100

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

 
libceph: make calc_target() set t->paused, not just clear it [+ + +]
Author: Ilya Dryomov <idryomov@gmail.com>
Date:   Mon Jan 5 19:23:19 2026 +0100

    libceph: make calc_target() set t->paused, not just clear it
    
    commit c0fe2994f9a9d0a2ec9e42441ea5ba74b6a16176 upstream.
    
    Currently calc_target() clears t->paused if the request shouldn't be
    paused anymore, but doesn't ever set t->paused even though it's able to
    determine when the request should be paused.  Setting t->paused is left
    to __submit_request() which is fine for regular requests but doesn't
    work for linger requests -- since __submit_request() doesn't operate
    on linger requests, there is nowhere for lreq->t.paused to be set.
    One consequence of this is that watches don't get reestablished on
    paused -> unpaused transitions in cases where requests have been paused
    long enough for the (paused) unwatch request to time out and for the
    subsequent (re)watch request to enter the paused state.  On top of the
    watch not getting reestablished, rbd_reregister_watch() gets stuck with
    rbd_dev->watch_mutex held:
    
      rbd_register_watch
        __rbd_register_watch
          ceph_osdc_watch
            linger_reg_commit_wait
    
    It's waiting for lreq->reg_commit_wait to be completed, but for that to
    happen the respective request needs to end up on need_resend_linger list
    and be kicked when requests are unpaused.  There is no chance for that
    if the request in question is never marked paused in the first place.
    
    The fact that rbd_dev->watch_mutex remains taken out forever then
    prevents the image from getting unmapped -- "rbd unmap" would inevitably
    hang in D state on an attempt to grab the mutex.
    
    Cc: stable@vger.kernel.org
    Reported-by: Raphael Zimmer <raphael.zimmer@tu-ilmenau.de>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Reviewed-by: Viacheslav Dubeyko <Slava.Dubeyko@ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

libceph: make decode_pool() more resilient against corrupted osdmaps [+ + +]
Author: Ilya Dryomov <idryomov@gmail.com>
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: stable@vger.kernel.org
    Reported-by: ziming zhang <ezrakiez@gmail.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Reviewed-by: Xiubo Li <xiubli@redhat.com>
    Tested-by: ziming zhang <ezrakiez@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

libceph: make free_choose_arg_map() resilient to partial allocation [+ + +]
Author: Tuo Li <islituo@gmail.com>
Date:   Sun Dec 21 02:11:49 2025 +0800

    libceph: make free_choose_arg_map() resilient to partial allocation
    
    commit e3fe30e57649c551757a02e1cad073c47e1e075e upstream.
    
    free_choose_arg_map() may dereference a NULL pointer if its caller fails
    after a partial allocation.
    
    For example, in decode_choose_args(), if allocation of arg_map->args
    fails, execution jumps to the fail label and free_choose_arg_map() is
    called. Since arg_map->size is updated to a non-zero value before memory
    allocation, free_choose_arg_map() will iterate over arg_map->args and
    dereference a NULL pointer.
    
    To prevent this potential NULL pointer dereference and make
    free_choose_arg_map() more resilient, add checks for pointers before
    iterating.
    
    Cc: stable@vger.kernel.org
    Co-authored-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Tuo Li <islituo@gmail.com>
    Reviewed-by: Viacheslav Dubeyko <Slava.Dubeyko@ibm.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

libceph: prevent potential out-of-bounds reads in handle_auth_done() [+ + +]
Author: ziming zhang <ezrakiez@gmail.com>
Date:   Thu Dec 11 16:52:58 2025 +0800

    libceph: prevent potential out-of-bounds reads in handle_auth_done()
    
    commit 818156caffbf55cb4d368f9c3cac64e458fb49c9 upstream.
    
    Perform an explicit bounds check on payload_len to avoid a possible
    out-of-bounds access in the callout.
    
    [ idryomov: changelog ]
    
    Cc: stable@vger.kernel.org
    Signed-off-by: ziming zhang <ezrakiez@gmail.com>
    Reviewed-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

libceph: replace overzealous BUG_ON in osdmap_apply_incremental() [+ + +]
Author: Ilya Dryomov <idryomov@gmail.com>
Date:   Mon Dec 15 11:53:31 2025 +0100

    libceph: replace overzealous BUG_ON in osdmap_apply_incremental()
    
    commit e00c3f71b5cf75681dbd74ee3f982a99cb690c2b upstream.
    
    If the osdmap is (maliciously) corrupted such that the incremental
    osdmap epoch is different from what is expected, there is no need to
    BUG.  Instead, just declare the incremental osdmap to be invalid.
    
    Cc: stable@vger.kernel.org
    Reported-by: ziming zhang <ezrakiez@gmail.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

libceph: return the handler error from mon_handle_auth_done() [+ + +]
Author: Ilya Dryomov <idryomov@gmail.com>
Date:   Mon Dec 29 15:14:48 2025 +0100

    libceph: return the handler error from mon_handle_auth_done()
    
    commit e84b48d31b5008932c0a0902982809fbaa1d3b70 upstream.
    
    Currently any error from ceph_auth_handle_reply_done() is propagated
    via finish_auth() but isn't returned from mon_handle_auth_done().  This
    results in higher layers learning that (despite the monitor considering
    us to be successfully authenticated) something went wrong in the
    authentication phase and reacting accordingly, but msgr2 still trying
    to proceed with establishing the session in the background.  In the
    case of secure mode this can trigger a WARN in setup_crypto() and later
    lead to a NULL pointer dereference inside of prepare_auth_signature().
    
    Cc: stable@vger.kernel.org
    Fixes: cd1a677cad99 ("libceph, ceph: implement msgr2.1 protocol (crc and secure modes)")
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Reviewed-by: Viacheslav Dubeyko <Slava.Dubeyko@ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: Linux 5.15.198 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon Jan 19 13:10:20 2026 +0100

    Linux 5.15.198
    
    Link: https://lore.kernel.org/r/20260115164246.225995385@linuxfoundation.org
    Tested-by: Brett A C Sheffield <bacs@librecast.net>
    Tested-by: Slade Watkins <sr@sladewatkins.com>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Hardik Garg <hargar@linux.microsoft.com>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Link: https://lore.kernel.org/r/20260116111040.672107150@linuxfoundation.org
    Tested-by: Brett A C Sheffield <bacs@librecast.net>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Hardik Garg <hargar@linux.microsoft.com>
    Tested-by: Jeffrin Jose T <jeffrin@rajagiritech.edu.in>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
livepatch: Match old_sympos 0 and 1 in klp_find_func() [+ + +]
Author: Song Liu <song@kernel.org>
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 <song@kernel.org>
    Acked-by: Josh Poimboeuf <jpoimboe@kernel.org>
    [pmladek@suse.com: Fixed some typos.]
    Reviewed-by: Petr Mladek <pmladek@suse.com>
    Tested-by: Petr Mladek <pmladek@suse.com>
    Signed-off-by: Petr Mladek <pmladek@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
lockd: fix vfs_test_lock() calls [+ + +]
Author: NeilBrown <neil@brown.name>
Date:   Tue Jan 6 18:28:35 2026 -0500

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

 
locking/spinlock/debug: Fix data-race in do_raw_write_lock [+ + +]
Author: Alexander Sverdlin <alexander.sverdlin@gmail.com>
Date:   Fri Sep 19 11:12:38 2025 +0200

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

 
macintosh/mac_hid: fix race condition in mac_hid_toggle_emumouse [+ + +]
Author: Long Li <leo.lilong@huawei.com>
Date:   Tue Aug 19 17:10:35 2025 +0800

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

 
media: adv7842: Avoid possible out-of-bounds array accesses in adv7842_cp_log_status() [+ + +]
Author: Ivan Abramov <i.abramov@mt-integration.ru>
Date:   Wed Sep 3 02:23:31 2025 +0300

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

media: cec: Fix debugfs leak on bus_register() failure [+ + +]
Author: Haotian Zhang <vulab@iscas.ac.cn>
Date:   Mon Sep 29 19:12:29 2025 +0800

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

media: dvb-usb: dtv5100: fix out-of-bounds in dtv5100_i2c_msg() [+ + +]
Author: Jeongjun Park <aha310510@gmail.com>
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: stable@vger.kernel.org
    Signed-off-by: Jeongjun Park <aha310510@gmail.com>
    Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: i2c: ADV7604: Remove redundant cancel_delayed_work in probe [+ + +]
Author: Duoming Zhou <duoming@zju.edu.cn>
Date:   Tue Sep 2 09:53:37 2025 +0800

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

media: i2c: adv7842: Remove redundant cancel_delayed_work in probe [+ + +]
Author: Duoming Zhou <duoming@zju.edu.cn>
Date:   Tue Sep 2 09:10:31 2025 +0800

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

media: mediatek: vcodec: Fix a reference leak in mtk_vcodec_fw_vpu_init() [+ + +]
Author: Haoxiang Li <haoxiang_li2024@163.com>
Date:   Mon Jan 5 19:31:47 2026 -0500

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

media: msp3400: Avoid possible out-of-bounds array accesses in msp3400c_thread() [+ + +]
Author: Ivan Abramov <i.abramov@mt-integration.ru>
Date:   Wed Sep 3 02:28:14 2025 +0300

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

media: pvrusb2: Fix incorrect variable used in trace message [+ + +]
Author: Colin Ian King <colin.i.king@gmail.com>
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: stable@vger.kernel.org
    Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
    Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: rc: st_rc: Fix reset control resource leak [+ + +]
Author: Haotian Zhang <vulab@iscas.ac.cn>
Date:   Fri Oct 31 14:03:32 2025 +0800

    media: rc: st_rc: Fix reset control resource leak
    
    commit 1240abf4b71f632f0117b056e22488e4d9808938 upstream.
    
    The driver calls reset_control_get_optional_exclusive() but never calls
    reset_control_put() in error paths or in the remove function. This causes
    a resource leak when probe fails after successfully acquiring the reset
    control, or when the driver is unloaded.
    
    Switch to devm_reset_control_get_optional_exclusive() to automatically
    manage the reset control resource.
    
    Fixes: a4b80242d046 ("media: st-rc: explicitly request exclusive reset control")
    Cc: stable@vger.kernel.org
    Signed-off-by: Haotian Zhang <vulab@iscas.ac.cn>
    Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
    Signed-off-by: Sean Young <sean@mess.org>
    Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: renesas: rcar_drif: fix device node reference leak in rcar_drif_bond_enabled [+ + +]
Author: Miaoqian Lin <linmq006@gmail.com>
Date:   Mon Jan 5 15:13:35 2026 -0500

    media: renesas: rcar_drif: fix device node reference leak in rcar_drif_bond_enabled
    
    [ Upstream commit 445e1658894fd74eab7e53071fa16233887574ed ]
    
    The function calls of_parse_phandle() which returns
    a device node with an incremented reference count. When the bonded device
    is not available, the function
    returns NULL without releasing the reference, causing a reference leak.
    
    Add of_node_put(np) to release the device node reference.
    The of_node_put function handles NULL pointers.
    
    Found through static analysis by reviewing the doc of of_parse_phandle()
    and cross-checking its usage patterns across the codebase.
    
    Fixes: 7625ee981af1 ("[media] media: platform: rcar_drif: Add DRIF support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
    Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Reviewed-by: Fabrizio Castro <fabrizio.castro.jz@renesas.com>
    Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: samsung: exynos4-is: fix potential ABBA deadlock on init [+ + +]
Author: Marek Szyprowski <m.szyprowski@samsung.com>
Date:   Mon Jan 5 15:31:36 2026 -0500

    media: samsung: exynos4-is: fix potential ABBA deadlock on init
    
    [ Upstream commit 17dc8ccd6dd5ffe30aa9b0d36e2af1389344ce2b ]
    
    v4l2_device_register_subdev_nodes() must called without taking
    media_dev->graph_mutex to avoid potential AB-BA deadlock on further
    subdevice driver initialization.
    
    Fixes: fa91f1056f17 ("[media] exynos4-is: Add support for asynchronous subdevices registration")
    Cc: stable@vger.kernel.org
    Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Acked-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
    Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: TDA1997x: Remove redundant cancel_delayed_work in probe [+ + +]
Author: Duoming Zhou <duoming@zju.edu.cn>
Date:   Mon Sep 1 21:26:17 2025 +0800

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

media: v4l2-mem2mem: Fix outdated documentation [+ + +]
Author: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
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: stable@vger.kernel.org
    Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: verisilicon: Protect G2 HEVC decoder against invalid DPB index [+ + +]
Author: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Date:   Mon Jan 5 15:54:26 2026 -0500

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

media: vidtv: initialize local pointers upon transfer of memory ownership [+ + +]
Author: Jeongjun Park <aha310510@gmail.com>
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: <stable@vger.kernel.org>
    Reported-by: syzbot+1d9c0edea5907af239e0@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=1d9c0edea5907af239e0
    Fixes: 3be8037960bc ("media: vidtv: add error checks")
    Signed-off-by: Jeongjun Park <aha310510@gmail.com>
    Reviewed-by: Daniel Almeida <daniel.almeida@collabora.com>
    Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: vpif_capture: fix section mismatch [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Jan 5 16:05:09 2026 -0500

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

 
mei: me: add nova lake point S DID [+ + +]
Author: Alexander Usyskin <alexander.usyskin@intel.com>
Date:   Mon Dec 15 12:59:15 2025 +0200

    mei: me: add nova lake point S DID
    
    commit 420f423defcf6d0af2263d38da870ca4a20c0990 upstream.
    
    Add Nova Lake S device id.
    
    Cc: stable <stable@kernel.org>
    Co-developed-by: Tomas Winkler <tomasw@gmail.com>
    Signed-off-by: Tomas Winkler <tomasw@gmail.com>
    Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com>
    Link: https://patch.msgid.link/20251215105915.1672659-1-alexander.usyskin@intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

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

mfd: da9055: Fix missing regmap_del_irq_chip() in error path [+ + +]
Author: Haotian Zhang <vulab@iscas.ac.cn>
Date:   Fri Oct 10 09:17:36 2025 +0800

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

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

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

mfd: mt6358-irq: Fix missing irq_domain_remove() in error path [+ + +]
Author: Haotian Zhang <vulab@iscas.ac.cn>
Date:   Tue Nov 18 20:14:27 2025 +0800

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

mfd: mt6397-irq: Fix missing irq_domain_remove() in error path [+ + +]
Author: Haotian Zhang <vulab@iscas.ac.cn>
Date:   Tue Nov 18 20:15:00 2025 +0800

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

 
mlxsw: spectrum_mr: Fix use-after-free when updating multicast route stats [+ + +]
Author: Ido Schimmel <idosch@nvidia.com>
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 <idosch@nvidia.com>
    Reviewed-by: Petr Machata <petrm@nvidia.com>
    Signed-off-by: Petr Machata <petrm@nvidia.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/f996feecfd59fde297964bfc85040b6d83ec6089.1764695650.git.petrm@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mlxsw: spectrum_router: Fix neighbour use-after-free [+ + +]
Author: Ido Schimmel <idosch@nvidia.com>
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 <idosch@nvidia.com>
    Reviewed-by: Petr Machata <petrm@nvidia.com>
    Signed-off-by: Petr Machata <petrm@nvidia.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/92d75e21d95d163a41b5cea67a15cd33f547cba6.1764695650.git.petrm@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mm/balloon_compaction: convert balloon_page_delete() to balloon_page_finalize() [+ + +]
Author: David Hildenbrand <david@kernel.org>
Date:   Mon Jan 5 14:28:25 2026 -0500

    mm/balloon_compaction: convert balloon_page_delete() to balloon_page_finalize()
    
    [ Upstream commit 15504b1163007bbfbd9a63460d5c14737c16e96d ]
    
    Let's move the removal of the page from the balloon list into the single
    caller, to remove the dependency on the PG_isolated flag and clarify
    locking requirements.
    
    Note that for now, balloon_page_delete() was used on two paths:
    
    (1) Removing a page from the balloon for deflation through
        balloon_page_list_dequeue()
    (2) Removing an isolated page from the balloon for migration in the
        per-driver migration handlers. Isolated pages were already removed from
        the balloon list during isolation.
    
    So instead of relying on the flag, we can just distinguish both cases
    directly and handle it accordingly in the caller.
    
    We'll shuffle the operations a bit such that they logically make more
    sense (e.g., remove from the list before clearing flags).
    
    In balloon migration functions we can now move the balloon_page_finalize()
    out of the balloon lock and perform the finalization just before dropping
    the balloon reference.
    
    Document that the page lock is currently required when modifying the
    movability aspects of a page; hopefully we can soon decouple this from the
    page lock.
    
    Link: https://lkml.kernel.org/r/20250704102524.326966-3-david@redhat.com
    Signed-off-by: David Hildenbrand <david@redhat.com>
    Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
    Cc: Alistair Popple <apopple@nvidia.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Brendan Jackman <jackmanb@google.com>
    Cc: Byungchul Park <byungchul@sk.com>
    Cc: Chengming Zhou <chengming.zhou@linux.dev>
    Cc: Christian Brauner <brauner@kernel.org>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Cc: Eugenio Pé rez <eperezma@redhat.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Gregory Price <gourry@gourry.net>
    Cc: Harry Yoo <harry.yoo@oracle.com>
    Cc: "Huang, Ying" <ying.huang@linux.alibaba.com>
    Cc: Jan Kara <jack@suse.cz>
    Cc: Jason Gunthorpe <jgg@ziepe.ca>
    Cc: Jason Wang <jasowang@redhat.com>
    Cc: Jerrin Shaji George <jerrin.shaji-george@broadcom.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: John Hubbard <jhubbard@nvidia.com>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Joshua Hahn <joshua.hahnjy@gmail.com>
    Cc: Liam Howlett <liam.howlett@oracle.com>
    Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
    Cc: Mathew Brost <matthew.brost@intel.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Miaohe Lin <linmiaohe@huawei.com>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: "Michael S. Tsirkin" <mst@redhat.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Mike Rapoport <rppt@kernel.org>
    Cc: Minchan Kim <minchan@kernel.org>
    Cc: Naoya Horiguchi <nao.horiguchi@gmail.com>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Oscar Salvador <osalvador@suse.de>
    Cc: Peter Xu <peterx@redhat.com>
    Cc: Qi Zheng <zhengqi.arch@bytedance.com>
    Cc: Rakie Kim <rakie.kim@sk.com>
    Cc: Rik van Riel <riel@surriel.com>
    Cc: Sergey Senozhatsky <senozhatsky@chromium.org>
    Cc: Shakeel Butt <shakeel.butt@linux.dev>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
    Cc: xu xin <xu.xin16@zte.com.cn>
    Cc: Zi Yan <ziy@nvidia.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: 0da2ba35c0d5 ("powerpc/pseries/cmm: adjust BALLOON_MIGRATE when migrating pages")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mm/balloon_compaction: make balloon page compaction callbacks static [+ + +]
Author: Miaohe Lin <linmiaohe@huawei.com>
Date:   Mon Jan 5 14:28:23 2026 -0500

    mm/balloon_compaction: make balloon page compaction callbacks static
    
    [ Upstream commit 504c1cabe325df65c18ef38365ddd1a41c6b591b ]
    
    Since commit b1123ea6d3b3 ("mm: balloon: use general non-lru movable page
    feature"), these functions are called via balloon_aops callbacks. They're
    not called directly outside this file. So make them static and clean up
    the relevant code.
    
    Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
    Link: https://lore.kernel.org/r/20220125132221.2220-1-linmiaohe@huawei.com
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Reviewed-by: Muchun Song <songmuchun@bytedance.com>
    Stable-dep-of: 0da2ba35c0d5 ("powerpc/pseries/cmm: adjust BALLOON_MIGRATE when migrating pages")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mm/balloon_compaction: we cannot have isolated pages in the balloon list [+ + +]
Author: David Hildenbrand <david@kernel.org>
Date:   Mon Jan 5 14:28:24 2026 -0500

    mm/balloon_compaction: we cannot have isolated pages in the balloon list
    
    [ Upstream commit fb05f992b6bbb4702307d96f00703ee637b24dbf ]
    
    Patch series "mm/migration: rework movable_ops page migration (part 1)",
    v2.
    
    In the future, as we decouple "struct page" from "struct folio", pages
    that support "non-lru page migration" -- movable_ops page migration such
    as memory balloons and zsmalloc -- will no longer be folios.  They will
    not have ->mapping, ->lru, and likely no refcount and no page lock.  But
    they will have a type and flags 🙂
    
    This is the first part (other parts not written yet) of decoupling
    movable_ops page migration from folio migration.
    
    In this series, we get rid of the ->mapping usage, and start cleaning up
    the code + separating it from folio migration.
    
    Migration core will have to be further reworked to not treat movable_ops
    pages like folios.  This is the first step into that direction.
    
    This patch (of 29):
    
    The core will set PG_isolated only after mops->isolate_page() was called.
    In case of the balloon, that is where we will remove it from the balloon
    list.  So we cannot have isolated pages in the balloon list.
    
    Let's drop this unnecessary check.
    
    Link: https://lkml.kernel.org/r/20250704102524.326966-2-david@redhat.com
    Signed-off-by: David Hildenbrand <david@redhat.com>
    Acked-by: Zi Yan <ziy@nvidia.com>
    Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
    Cc: Alistair Popple <apopple@nvidia.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Brendan Jackman <jackmanb@google.com>
    Cc: Byungchul Park <byungchul@sk.com>
    Cc: Chengming Zhou <chengming.zhou@linux.dev>
    Cc: Christian Brauner <brauner@kernel.org>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Cc: Eugenio Pé rez <eperezma@redhat.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Gregory Price <gourry@gourry.net>
    Cc: "Huang, Ying" <ying.huang@linux.alibaba.com>
    Cc: Jan Kara <jack@suse.cz>
    Cc: Jason Gunthorpe <jgg@ziepe.ca>
    Cc: Jason Wang <jasowang@redhat.com>
    Cc: Jerrin Shaji George <jerrin.shaji-george@broadcom.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: John Hubbard <jhubbard@nvidia.com>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Joshua Hahn <joshua.hahnjy@gmail.com>
    Cc: Liam Howlett <liam.howlett@oracle.com>
    Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
    Cc: Mathew Brost <matthew.brost@intel.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Miaohe Lin <linmiaohe@huawei.com>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: "Michael S. Tsirkin" <mst@redhat.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Mike Rapoport <rppt@kernel.org>
    Cc: Minchan Kim <minchan@kernel.org>
    Cc: Naoya Horiguchi <nao.horiguchi@gmail.com>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Oscar Salvador <osalvador@suse.de>
    Cc: Peter Xu <peterx@redhat.com>
    Cc: Qi Zheng <zhengqi.arch@bytedance.com>
    Cc: Rakie Kim <rakie.kim@sk.com>
    Cc: Rik van Riel <riel@surriel.com>
    Cc: Sergey Senozhatsky <senozhatsky@chromium.org>
    Cc: Shakeel Butt <shakeel.butt@linux.dev>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
    Cc: xu xin <xu.xin16@zte.com.cn>
    Cc: Harry Yoo <harry.yoo@oracle.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: 0da2ba35c0d5 ("powerpc/pseries/cmm: adjust BALLOON_MIGRATE when migrating pages")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 
mmc: core: use sysfs_emit() instead of sprintf() [+ + +]
Author: Sergey Shtylyov <s.shtylyov@omp.ru>
Date:   Fri Dec 12 16:19:59 2025 +0800

    mmc: core: use sysfs_emit() instead of sprintf()
    
    [ Upstream commit f5d8a5fe77ce933f53eb8f2e22bb7a1a2019ea11 ]
    
    sprintf() (still used in the MMC core for the sysfs output) is vulnerable
    to the buffer overflow.  Use the new-fangled sysfs_emit() instead.
    
    Found by Linux Verification Center (linuxtesting.org) with the SVACE static
    analysis tool.
    
    Signed-off-by: Sergey Shtylyov <s.shtylyov@omp.ru>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/717729b2-d65b-c72e-9fac-471d28d00b5a@omp.ru
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Chen Yu <xnguchen@sina.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: sdhci-esdhc-imx: add alternate ARCH_S32 dependency to Kconfig [+ + +]
Author: Jared Kangas <jkangas@redhat.com>
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: stable@bvger.kernel.org
    Signed-off-by: Jared Kangas <jkangas@redhat.com>
    Reviewed-by: Haibo Chen <haibo.chen@nxp.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: sdhci-msm: Avoid early clock doubling during HS400 transition [+ + +]
Author: Sarthak Garg <sarthak.garg@oss.qualcomm.com>
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 <sarthak.garg@oss.qualcomm.com>
    Reviewed-by: Bjorn Andersson <andersson@kernel.org>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mptcp: pm: ignore unknown endpoint flags [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Tue Dec 30 09:07:01 2025 -0500

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

 
mt76: mt7615: Fix memory leak in mt7615_mcu_wtbl_sta_add() [+ + +]
Author: Zilin Guan <zilin@seu.edu.cn>
Date:   Thu Nov 13 06:24:15 2025 +0000

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

 
mtd: lpddr_cmds: fix signed shifts in lpddr_cmds [+ + +]
Author: Ivan Stepchenko <sid@itb.spb.ru>
Date:   Fri Nov 21 14:54:46 2025 +0300

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

 
nbd: clean up return value checking of sock_xmit() [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Thu Sep 16 17:33:48 2021 +0800

    nbd: clean up return value checking of sock_xmit()
    
    [ Upstream commit f52c0e08237e7864a44311fc78bc9bf2e045611b ]
    
    Check if sock_xmit() return 0 is useless because it'll never return
    0, comment it and remove such checkings.
    
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Reviewed-by: Ming Lei <ming.lei@redhat.com>
    Reviewed-by: Josef Bacik <josef@toxicpanda.com>
    Link: https://lore.kernel.org/r/20210916093350.1410403-6-yukuai3@huawei.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Stable-dep-of: 9517b82d8d42 ("nbd: defer config put in recv_work")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nbd: defer config put in recv_work [+ + +]
Author: Zheng Qixing <zhengqixing@huawei.com>
Date:   Sat Nov 8 15:02:02 2025 +0800

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

nbd: defer config unlock in nbd_genl_connect [+ + +]
Author: Zheng Qixing <zhengqixing@huawei.com>
Date:   Mon Nov 10 20:49:20 2025 +0800

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

nbd: partition nbd_read_stat() into nbd_read_reply() and nbd_handle_reply() [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Thu Sep 16 17:33:49 2021 +0800

    nbd: partition nbd_read_stat() into nbd_read_reply() and nbd_handle_reply()
    
    [ Upstream commit 3fe1db626a56cdf259c348404f2c5429e2f065a1 ]
    
    Prepare to fix uaf in nbd_read_stat(), no functional changes.
    
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Reviewed-by: Ming Lei <ming.lei@redhat.com>
    Reviewed-by: Josef Bacik <josef@toxicpanda.com>
    Link: https://lore.kernel.org/r/20210916093350.1410403-7-yukuai3@huawei.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Stable-dep-of: 9517b82d8d42 ("nbd: defer config put in recv_work")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/ethtool/ioctl: remove if n_stats checks from ethtool_get_phy_stats [+ + +]
Author: Daniil Tatianin <d-tatianin@yandex-team.ru>
Date:   Mon Dec 26 14:48:24 2022 +0300

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

net/ethtool/ioctl: split ethtool_get_phy_stats into multiple helpers [+ + +]
Author: Daniil Tatianin <d-tatianin@yandex-team.ru>
Date:   Mon Dec 26 14:48:25 2022 +0300

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

 
net/hsr: fix NULL pointer dereference in prp_get_untagged_frame() [+ + +]
Author: Shaurya Rane <ssrane_b23@ee.vjti.ac.in>
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: syzbot+2fa344348a579b779e05@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=2fa344348a579b779e05
    Fixes: f266a683a480 ("net/hsr: Better frame dispatch")
    Cc: stable@vger.kernel.org
    Signed-off-by: Shaurya Rane <ssrane_b23@ee.vjti.ac.in>
    Reviewed-by: Felix Maurer <fmaurer@redhat.com>
    Tested-by: Felix Maurer <fmaurer@redhat.com>
    Link: https://patch.msgid.link/20251129093718.25320-1-ssrane_b23@ee.vjti.ac.in
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

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

net/mlx5: fw_tracer, Handle escaped percent properly [+ + +]
Author: Shay Drory <shayd@nvidia.com>
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 <shayd@nvidia.com>
    Reported-by: Breno Leitao <leitao@debian.org>
    Reviewed-by: Moshe Shemesh <moshe@nvidia.com>
    Closes: https://lore.kernel.org/netdev/hanz6rzrb2bqbplryjrakvkbmv4y5jlmtthnvi3thg5slqvelp@t3s3erottr6s/
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/1765284977-1363052-5-git-send-email-tariqt@nvidia.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5: fw_tracer, Validate format string parameters [+ + +]
Author: Shay Drory <shayd@nvidia.com>
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 <shayd@nvidia.com>
    Reviewed-by: Moshe Shemesh <moshe@nvidia.com>
    Reported-by: Breno Leitao <leitao@debian.org>
    Closes: https://lore.kernel.org/netdev/hanz6rzrb2bqbplryjrakvkbmv4y5jlmtthnvi3thg5slqvelp@t3s3erottr6s/
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/1765284977-1363052-4-git-send-email-tariqt@nvidia.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/mlx5e: Don't print error message due to invalid module [+ + +]
Author: Gal Pressman <gal@nvidia.com>
Date:   Thu Dec 25 15:27:16 2025 +0200

    net/mlx5e: Don't print error message due to invalid module
    
    [ Upstream commit 144297e2a24e3e54aee1180ec21120ea38822b97 ]
    
    Dumping module EEPROM on newer modules is supported through the netlink
    interface only.
    
    Querying with old userspace ethtool (or other tools, such as 'lshw')
    which still uses the ioctl interface results in an error message that
    could flood dmesg (in addition to the expected error return value).
    The original message was added under the assumption that the driver
    should be able to handle all module types, but now that such flows are
    easily triggered from userspace, it doesn't serve its purpose.
    
    Change the log level of the print in mlx5_query_module_eeprom() to
    debug.
    
    Fixes: bb64143eee8c ("net/mlx5e: Add ethtool support for dump module EEPROM")
    Signed-off-by: Gal Pressman <gal@nvidia.com>
    Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
    Signed-off-by: Mark Bloch <mbloch@nvidia.com>
    Link: https://patch.msgid.link/20251225132717.358820-5-mbloch@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/sched: ets: Always remove class from active list before deleting in ets_qdisc_change [+ + +]
Author: Jamal Hadi Salim <jhs@mojatatu.com>
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 ]
    
    zdi-disclosures@trendmicro.com 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 zdi-disclosures@trendmicro.com)
    
    ```
    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 zdi-disclosures@trendmicro.com
    
    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 zdi-disclosures@trendmicro.com
    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(tglx@linutronix.de) 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: zdi-disclosures@trendmicro.com
    Tested-by: Victor Nogueira <victor@mojatatu.com>
    Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Reviewed-by: Davide Caratti <dcaratti@redhat.com>
    Link: https://patch.msgid.link/20251128151919.576920-1-jhs@mojatatu.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/sched: ets: Remove drr class from the active list if it changes to strict [+ + +]
Author: Victor Nogueira <victor@mojatatu.com>
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 <jhs@mojatatu.com>
    Signed-off-by: Victor Nogueira <victor@mojatatu.com>
    Reviewed-by: Petr Machata <petrm@nvidia.com>
    Link: https://patch.msgid.link/20251208190125.1868423-1-victor@mojatatu.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

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

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

net/sched: sch_qfq: Fix NULL deref when deactivating inactive aggregate in qfq_reset [+ + +]
Author: Xiang Mei <xmei5@asu.edu>
Date:   Mon Jan 5 20:41:00 2026 -0700

    net/sched: sch_qfq: Fix NULL deref when deactivating inactive aggregate in qfq_reset
    
    [ Upstream commit c1d73b1480235731e35c81df70b08f4714a7d095 ]
    
    `qfq_class->leaf_qdisc->q.qlen > 0` does not imply that the class
    itself is active.
    
    Two qfq_class objects may point to the same leaf_qdisc. This happens
    when:
    
    1. one QFQ qdisc is attached to the dev as the root qdisc, and
    
    2. another QFQ qdisc is temporarily referenced (e.g., via qdisc_get()
    / qdisc_put()) and is pending to be destroyed, as in function
    tc_new_tfilter.
    
    When packets are enqueued through the root QFQ qdisc, the shared
    leaf_qdisc->q.qlen increases. At the same time, the second QFQ
    qdisc triggers qdisc_put and qdisc_destroy: the qdisc enters
    qfq_reset() with its own q->q.qlen == 0, but its class's leaf
    qdisc->q.qlen > 0. Therefore, the qfq_reset would wrongly deactivate
    an inactive aggregate and trigger a null-deref in qfq_deactivate_agg:
    
    [    0.903172] BUG: kernel NULL pointer dereference, address: 0000000000000000
    [    0.903571] #PF: supervisor write access in kernel mode
    [    0.903860] #PF: error_code(0x0002) - not-present page
    [    0.904177] PGD 10299b067 P4D 10299b067 PUD 10299c067 PMD 0
    [    0.904502] Oops: Oops: 0002 [#1] SMP NOPTI
    [    0.904737] CPU: 0 UID: 0 PID: 135 Comm: exploit Not tainted 6.19.0-rc3+ #2 NONE
    [    0.905157] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.17.0-0-gb52ca86e094d-prebuilt.qemu.org 04/01/2014
    [    0.905754] RIP: 0010:qfq_deactivate_agg (include/linux/list.h:992 (discriminator 2) include/linux/list.h:1006 (discriminator 2) net/sched/sch_qfq.c:1367 (discriminator 2) net/sched/sch_qfq.c:1393 (discriminator 2))
    [    0.906046] Code: 0f 84 4d 01 00 00 48 89 70 18 8b 4b 10 48 c7 c2 ff ff ff ff 48 8b 78 08 48 d3 e2 48 21 f2 48 2b 13 48 8b 30 48 d3 ea 8b 4b 18 0
    
    Code starting with the faulting instruction
    ===========================================
       0:   0f 84 4d 01 00 00       je     0x153
       6:   48 89 70 18             mov    %rsi,0x18(%rax)
       a:   8b 4b 10                mov    0x10(%rbx),%ecx
       d:   48 c7 c2 ff ff ff ff    mov    $0xffffffffffffffff,%rdx
      14:   48 8b 78 08             mov    0x8(%rax),%rdi
      18:   48 d3 e2                shl    %cl,%rdx
      1b:   48 21 f2                and    %rsi,%rdx
      1e:   48 2b 13                sub    (%rbx),%rdx
      21:   48 8b 30                mov    (%rax),%rsi
      24:   48 d3 ea                shr    %cl,%rdx
      27:   8b 4b 18                mov    0x18(%rbx),%ecx
            ...
    [    0.907095] RSP: 0018:ffffc900004a39a0 EFLAGS: 00010246
    [    0.907368] RAX: ffff8881043a0880 RBX: ffff888102953340 RCX: 0000000000000000
    [    0.907723] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
    [    0.908100] RBP: ffff888102952180 R08: 0000000000000000 R09: 0000000000000000
    [    0.908451] R10: ffff8881043a0000 R11: 0000000000000000 R12: ffff888102952000
    [    0.908804] R13: ffff888102952180 R14: ffff8881043a0ad8 R15: ffff8881043a0880
    [    0.909179] FS:  000000002a1a0380(0000) GS:ffff888196d8d000(0000) knlGS:0000000000000000
    [    0.909572] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [    0.909857] CR2: 0000000000000000 CR3: 0000000102993002 CR4: 0000000000772ef0
    [    0.910247] PKRU: 55555554
    [    0.910391] Call Trace:
    [    0.910527]  <TASK>
    [    0.910638]  qfq_reset_qdisc (net/sched/sch_qfq.c:357 net/sched/sch_qfq.c:1485)
    [    0.910826]  qdisc_reset (include/linux/skbuff.h:2195 include/linux/skbuff.h:2501 include/linux/skbuff.h:3424 include/linux/skbuff.h:3430 net/sched/sch_generic.c:1036)
    [    0.911040]  __qdisc_destroy (net/sched/sch_generic.c:1076)
    [    0.911236]  tc_new_tfilter (net/sched/cls_api.c:2447)
    [    0.911447]  rtnetlink_rcv_msg (net/core/rtnetlink.c:6958)
    [    0.911663]  ? __pfx_rtnetlink_rcv_msg (net/core/rtnetlink.c:6861)
    [    0.911894]  netlink_rcv_skb (net/netlink/af_netlink.c:2550)
    [    0.912100]  netlink_unicast (net/netlink/af_netlink.c:1319 net/netlink/af_netlink.c:1344)
    [    0.912296]  ? __alloc_skb (net/core/skbuff.c:706)
    [    0.912484]  netlink_sendmsg (net/netlink/af_netlink.c:1894)
    [    0.912682]  sock_write_iter (net/socket.c:727 (discriminator 1) net/socket.c:742 (discriminator 1) net/socket.c:1195 (discriminator 1))
    [    0.912880]  vfs_write (fs/read_write.c:593 fs/read_write.c:686)
    [    0.913077]  ksys_write (fs/read_write.c:738)
    [    0.913252]  do_syscall_64 (arch/x86/entry/syscall_64.c:63 (discriminator 1) arch/x86/entry/syscall_64.c:94 (discriminator 1))
    [    0.913438]  entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:131)
    [    0.913687] RIP: 0033:0x424c34
    [    0.913844] Code: 89 02 48 c7 c0 ff ff ff ff eb bd 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 80 3d 2d 44 09 00 00 74 13 b8 01 00 00 00 0f 05 9
    
    Code starting with the faulting instruction
    ===========================================
       0:   89 02                   mov    %eax,(%rdx)
       2:   48 c7 c0 ff ff ff ff    mov    $0xffffffffffffffff,%rax
       9:   eb bd                   jmp    0xffffffffffffffc8
       b:   66 2e 0f 1f 84 00 00    cs nopw 0x0(%rax,%rax,1)
      12:   00 00 00
      15:   90                      nop
      16:   f3 0f 1e fa             endbr64
      1a:   80 3d 2d 44 09 00 00    cmpb   $0x0,0x9442d(%rip)        # 0x9444e
      21:   74 13                   je     0x36
      23:   b8 01 00 00 00          mov    $0x1,%eax
      28:   0f 05                   syscall
      2a:   09                      .byte 0x9
    [    0.914807] RSP: 002b:00007ffea1938b78 EFLAGS: 00000202 ORIG_RAX: 0000000000000001
    [    0.915197] RAX: ffffffffffffffda RBX: 0000000000000001 RCX: 0000000000424c34
    [    0.915556] RDX: 000000000000003c RSI: 000000002af378c0 RDI: 0000000000000003
    [    0.915912] RBP: 00007ffea1938bc0 R08: 00000000004b8820 R09: 0000000000000000
    [    0.916297] R10: 0000000000000001 R11: 0000000000000202 R12: 00007ffea1938d28
    [    0.916652] R13: 00007ffea1938d38 R14: 00000000004b3828 R15: 0000000000000001
    [    0.917039]  </TASK>
    [    0.917158] Modules linked in:
    [    0.917316] CR2: 0000000000000000
    [    0.917484] ---[ end trace 0000000000000000 ]---
    [    0.917717] RIP: 0010:qfq_deactivate_agg (include/linux/list.h:992 (discriminator 2) include/linux/list.h:1006 (discriminator 2) net/sched/sch_qfq.c:1367 (discriminator 2) net/sched/sch_qfq.c:1393 (discriminator 2))
    [    0.917978] Code: 0f 84 4d 01 00 00 48 89 70 18 8b 4b 10 48 c7 c2 ff ff ff ff 48 8b 78 08 48 d3 e2 48 21 f2 48 2b 13 48 8b 30 48 d3 ea 8b 4b 18 0
    
    Code starting with the faulting instruction
    ===========================================
       0:   0f 84 4d 01 00 00       je     0x153
       6:   48 89 70 18             mov    %rsi,0x18(%rax)
       a:   8b 4b 10                mov    0x10(%rbx),%ecx
       d:   48 c7 c2 ff ff ff ff    mov    $0xffffffffffffffff,%rdx
      14:   48 8b 78 08             mov    0x8(%rax),%rdi
      18:   48 d3 e2                shl    %cl,%rdx
      1b:   48 21 f2                and    %rsi,%rdx
      1e:   48 2b 13                sub    (%rbx),%rdx
      21:   48 8b 30                mov    (%rax),%rsi
      24:   48 d3 ea                shr    %cl,%rdx
      27:   8b 4b 18                mov    0x18(%rbx),%ecx
            ...
    [    0.918902] RSP: 0018:ffffc900004a39a0 EFLAGS: 00010246
    [    0.919198] RAX: ffff8881043a0880 RBX: ffff888102953340 RCX: 0000000000000000
    [    0.919559] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
    [    0.919908] RBP: ffff888102952180 R08: 0000000000000000 R09: 0000000000000000
    [    0.920289] R10: ffff8881043a0000 R11: 0000000000000000 R12: ffff888102952000
    [    0.920648] R13: ffff888102952180 R14: ffff8881043a0ad8 R15: ffff8881043a0880
    [    0.921014] FS:  000000002a1a0380(0000) GS:ffff888196d8d000(0000) knlGS:0000000000000000
    [    0.921424] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [    0.921710] CR2: 0000000000000000 CR3: 0000000102993002 CR4: 0000000000772ef0
    [    0.922097] PKRU: 55555554
    [    0.922240] Kernel panic - not syncing: Fatal exception
    [    0.922590] Kernel Offset: disabled
    
    Fixes: 0545a3037773 ("pkt_sched: QFQ - quick fair queue scheduler")
    Signed-off-by: Xiang Mei <xmei5@asu.edu>
    Link: https://patch.msgid.link/20260106034100.1780779-1-xmei5@asu.edu
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net: 3com: 3c59x: fix possible null dereference in vortex_probe1() [+ + +]
Author: Thomas Fourier <fourier.thomas@gmail.com>
Date:   Tue Jan 6 10:47:21 2026 +0100

    net: 3com: 3c59x: fix possible null dereference in vortex_probe1()
    
    commit a4e305ed60f7c41bbf9aabc16dd75267194e0de3 upstream.
    
    pdev can be null and free_ring: can be called in 1297 with a null
    pdev.
    
    Fixes: 55c82617c3e8 ("3c59x: convert to generic DMA API")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Thomas Fourier <fourier.thomas@gmail.com>
    Link: https://patch.msgid.link/20260106094731.25819-2-fourier.thomas@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

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

net: dsa: b53: skip multicast entries for fdb_dump() [+ + +]
Author: Jonas Gorski <jonas.gorski@gmail.com>
Date:   Wed Dec 17 21:57:56 2025 +0100

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

net: enetc: fix build warning when PAGE_SIZE is greater than 128K [+ + +]
Author: Wei Fang <wei.fang@nxp.com>
Date:   Wed Jan 7 17:12:04 2026 +0800

    net: enetc: fix build warning when PAGE_SIZE is greater than 128K
    
    [ Upstream commit 4b5bdabb5449b652122e43f507f73789041d4abe ]
    
    The max buffer size of ENETC RX BD is 0xFFFF bytes, so if the PAGE_SIZE
    is greater than 128K, ENETC_RXB_DMA_SIZE and ENETC_RXB_DMA_SIZE_XDP will
    be greater than 0xFFFF, thus causing a build warning.
    
    This will not cause any practical issues because ENETC is currently only
    used on the ARM64 platform, and the max PAGE_SIZE is 64K. So this patch
    is only for fixing the build warning that occurs when compiling ENETC
    drivers for other platforms.
    
    Reported-by: kernel test robot <lkp@intel.com>
    Closes: https://lore.kernel.org/oe-kbuild-all/202601050637.kHEKKOG7-lkp@intel.com/
    Fixes: e59bc32df2e9 ("net: enetc: correct the value of ENETC_RXB_TRUESIZE")
    Signed-off-by: Wei Fang <wei.fang@nxp.com>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Link: https://patch.msgid.link/20260107091204.1980222-1-wei.fang@nxp.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

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

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

net: hns3: add VLAN id validation before using [+ + +]
Author: Jian Shen <shenjian15@huawei.com>
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 <shenjian15@huawei.com>
    Signed-off-by: Jijie Shao <shaojijie@huawei.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20251211023737.2327018-4-shaojijie@huawei.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: hns3: Align type of some variables with their print type [+ + +]
Author: Hao Chen <chenhao288@hisilicon.com>
Date:   Fri Dec 3 17:20:52 2021 +0800

    net: hns3: Align type of some variables with their print type
    
    [ Upstream commit 0cc25c6a14efd709f2cfcde345e3d5c6aa20f80e ]
    
    The c language has a set of implicit type conversions, when
    two variables perform bitwise or arithmetic operations.
    
    For example, variable A (type u16/u8) -1, its output is int type variable.
    u16/u8 will convert to int type implicitly before it does arithmetic
    operations. So, change 1 to unsigned type.
    
    Signed-off-by: Hao Chen <chenhao288@hisilicon.com>
    Signed-off-by: Guangbin Huang <huangguangbin2@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: d180c11aa8a6 ("net: hns3: using the num_tqps to check whether tqp_index is out of range when vf get ring info from mbx")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: hns3: using the num_tqps in the vf driver to apply for resources [+ + +]
Author: Jian Shen <shenjian15@huawei.com>
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 <shenjian15@huawei.com>
    Signed-off-by: Jijie Shao <shaojijie@huawei.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20251211023737.2327018-2-shaojijie@huawei.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

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 <shenjian15@huawei.com>
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 <shenjian15@huawei.com>
    Signed-off-by: Jijie Shao <shaojijie@huawei.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20251211023737.2327018-3-shaojijie@huawei.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: marvell: prestera: fix NULL dereference on devlink_alloc() failure [+ + +]
Author: Alok Tiwari <alok.a.tiwari@oracle.com>
Date:   Mon Dec 29 21:21:18 2025 -0800

    net: marvell: prestera: fix NULL dereference on devlink_alloc() failure
    
    [ Upstream commit a428e0da1248c353557970848994f35fd3f005e2 ]
    
    devlink_alloc() may return NULL on allocation failure, but
    prestera_devlink_alloc() unconditionally calls devlink_priv() on
    the returned pointer.
    
    This leads to a NULL pointer dereference if devlink allocation fails.
    Add a check for a NULL devlink pointer and return NULL early to avoid
    the crash.
    
    Fixes: 34dd1710f5a3 ("net: marvell: prestera: Add basic devlink support")
    Signed-off-by: Alok Tiwari <alok.a.tiwari@oracle.com>
    Acked-by: Elad Nachman <enachman@marvell.com>
    Link: https://patch.msgid.link/20251230052124.897012-1-alok.a.tiwari@oracle.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

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

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

net: mdio: aspeed: move reg accessing part into separate functions [+ + +]
Author: Potin Lai <potin.lai@quantatw.com>
Date:   Thu Apr 7 09:17:36 2022 +0800

    net: mdio: aspeed: move reg accessing part into separate functions
    
    [ Upstream commit 737ca352569e744bf753b4522a6f91b120a734f1 ]
    
    Add aspeed_mdio_op() and aseed_mdio_get_data() for register accessing.
    
    aspeed_mdio_op() handles operations, write command to control register,
    then check and wait operations is finished (bit 31 is cleared).
    
    aseed_mdio_get_data() fetchs the result value of operation from data
    register.
    
    Signed-off-by: Potin Lai <potin.lai@quantatw.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: d1a1a4bade4b ("net: mdio: aspeed: add dummy read to avoid read-after-write issue")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: mscc: ocelot: Fix crash when adding interface under a lag [+ + +]
Author: Jerry Wu <w.7erry@foxmail.com>
Date:   Thu Dec 25 20:36:17 2025 +0000

    net: mscc: ocelot: Fix crash when adding interface under a lag
    
    [ Upstream commit 34f3ff52cb9fa7dbf04f5c734fcc4cb6ed5d1a95 ]
    
    Commit 15faa1f67ab4 ("lan966x: Fix crash when adding interface under a lag")
    fixed a similar issue in the lan966x driver caused by a NULL pointer dereference.
    The ocelot_set_aggr_pgids() function in the ocelot driver has similar logic
    and is susceptible to the same crash.
    
    This issue specifically affects the ocelot_vsc7514.c frontend, which leaves
    unused ports as NULL pointers. The felix_vsc9959.c frontend is unaffected as
    it uses the DSA framework which registers all ports.
    
    Fix this by checking if the port pointer is valid before accessing it.
    
    Fixes: 528d3f190c98 ("net: mscc: ocelot: drop the use of the "lags" array")
    Signed-off-by: Jerry Wu <w.7erry@foxmail.com>
    Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Link: https://patch.msgid.link/tencent_75EF812B305E26B0869C673DD1160866C90A@qq.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: nfc: fix deadlock between nfc_unregister_device and rfkill_fop_write [+ + +]
Author: Deepanshu Kartikey <kartikey406@gmail.com>
Date:   Thu Dec 18 06:53:54 2025 +0530

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

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

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

net: openvswitch: fix middle attribute validation in push_nsh() action [+ + +]
Author: Ilya Maximets <i.maximets@ovn.org>
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 <zhuque@tencent.com>
    Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
    Acked-by: Eelco Chaudron echaudro@redhat.com
    Reviewed-by: Aaron Conole <aconole@redhat.com>
    Link: https://patch.msgid.link/20251204105334.900379-1-i.maximets@ovn.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: Remove RTNL dance for SIOCBRADDIF and SIOCBRDELIF. [+ + +]
Author: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
Date:   Wed Jan 7 14:21:29 2026 -0300

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

net: rose: fix invalid array index in rose_kill_by_device() [+ + +]
Author: Pwnverse <stanksal@purdue.edu>
Date:   Mon Dec 22 21:22:27 2025 +0000

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

net: sock: fix hardened usercopy panic in sock_recv_errqueue [+ + +]
Author: Weiming Shi <bestswngs@gmail.com>
Date:   Wed Dec 24 04:35:35 2025 +0800

    net: sock: fix hardened usercopy panic in sock_recv_errqueue
    
    [ Upstream commit 2a71a1a8d0ed718b1c7a9ac61f07e5755c47ae20 ]
    
    skbuff_fclone_cache was created without defining a usercopy region,
    [1] unlike skbuff_head_cache which properly whitelists the cb[] field.
    [2] This causes a usercopy BUG() when CONFIG_HARDENED_USERCOPY is
    enabled and the kernel attempts to copy sk_buff.cb data to userspace
    via sock_recv_errqueue() -> put_cmsg().
    
    The crash occurs when: 1. TCP allocates an skb using alloc_skb_fclone()
       (from skbuff_fclone_cache) [1]
    2. The skb is cloned via skb_clone() using the pre-allocated fclone
    [3] 3. The cloned skb is queued to sk_error_queue for timestamp
    reporting 4. Userspace reads the error queue via recvmsg(MSG_ERRQUEUE)
    5. sock_recv_errqueue() calls put_cmsg() to copy serr->ee from skb->cb
    [4] 6. __check_heap_object() fails because skbuff_fclone_cache has no
       usercopy whitelist [5]
    
    When cloned skbs allocated from skbuff_fclone_cache are used in the
    socket error queue, accessing the sock_exterr_skb structure in skb->cb
    via put_cmsg() triggers a usercopy hardening violation:
    
    [    5.379589] usercopy: Kernel memory exposure attempt detected from SLUB object 'skbuff_fclone_cache' (offset 296, size 16)!
    [    5.382796] kernel BUG at mm/usercopy.c:102!
    [    5.383923] Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTI
    [    5.384903] CPU: 1 UID: 0 PID: 138 Comm: poc_put_cmsg Not tainted 6.12.57 #7
    [    5.384903] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014
    [    5.384903] RIP: 0010:usercopy_abort+0x6c/0x80
    [    5.384903] Code: 1a 86 51 48 c7 c2 40 15 1a 86 41 52 48 c7 c7 c0 15 1a 86 48 0f 45 d6 48 c7 c6 80 15 1a 86 48 89 c1 49 0f 45 f3 e8 84 27 88 ff <0f> 0b 490
    [    5.384903] RSP: 0018:ffffc900006f77a8 EFLAGS: 00010246
    [    5.384903] RAX: 000000000000006f RBX: ffff88800f0ad2a8 RCX: 1ffffffff0f72e74
    [    5.384903] RDX: 0000000000000000 RSI: 0000000000000004 RDI: ffffffff87b973a0
    [    5.384903] RBP: 0000000000000010 R08: 0000000000000000 R09: fffffbfff0f72e74
    [    5.384903] R10: 0000000000000003 R11: 79706f6372657375 R12: 0000000000000001
    [    5.384903] R13: ffff88800f0ad2b8 R14: ffffea00003c2b40 R15: ffffea00003c2b00
    [    5.384903] FS:  0000000011bc4380(0000) GS:ffff8880bf100000(0000) knlGS:0000000000000000
    [    5.384903] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [    5.384903] CR2: 000056aa3b8e5fe4 CR3: 000000000ea26004 CR4: 0000000000770ef0
    [    5.384903] PKRU: 55555554
    [    5.384903] Call Trace:
    [    5.384903]  <TASK>
    [    5.384903]  __check_heap_object+0x9a/0xd0
    [    5.384903]  __check_object_size+0x46c/0x690
    [    5.384903]  put_cmsg+0x129/0x5e0
    [    5.384903]  sock_recv_errqueue+0x22f/0x380
    [    5.384903]  tls_sw_recvmsg+0x7ed/0x1960
    [    5.384903]  ? srso_alias_return_thunk+0x5/0xfbef5
    [    5.384903]  ? schedule+0x6d/0x270
    [    5.384903]  ? srso_alias_return_thunk+0x5/0xfbef5
    [    5.384903]  ? mutex_unlock+0x81/0xd0
    [    5.384903]  ? __pfx_mutex_unlock+0x10/0x10
    [    5.384903]  ? __pfx_tls_sw_recvmsg+0x10/0x10
    [    5.384903]  ? _raw_spin_lock_irqsave+0x8f/0xf0
    [    5.384903]  ? _raw_read_unlock_irqrestore+0x20/0x40
    [    5.384903]  ? srso_alias_return_thunk+0x5/0xfbef5
    
    The crash offset 296 corresponds to skb2->cb within skbuff_fclones:
      - sizeof(struct sk_buff) = 232 - offsetof(struct sk_buff, cb) = 40 -
      offset of skb2.cb in fclones = 232 + 40 = 272 - crash offset 296 =
      272 + 24 (inside sock_exterr_skb.ee)
    
    This patch uses a local stack variable as a bounce buffer to avoid the hardened usercopy check failure.
    
    [1] https://elixir.bootlin.com/linux/v6.12.62/source/net/ipv4/tcp.c#L885
    [2] https://elixir.bootlin.com/linux/v6.12.62/source/net/core/skbuff.c#L5104
    [3] https://elixir.bootlin.com/linux/v6.12.62/source/net/core/skbuff.c#L5566
    [4] https://elixir.bootlin.com/linux/v6.12.62/source/net/core/skbuff.c#L5491
    [5] https://elixir.bootlin.com/linux/v6.12.62/source/mm/slub.c#L5719
    
    Fixes: 6d07d1cd300f ("usercopy: Restrict non-usercopy caches to size 0")
    Reported-by: Xiang Mei <xmei5@asu.edu>
    Signed-off-by: Weiming Shi <bestswngs@gmail.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20251223203534.1392218-2-bestswngs@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: stmmac: fix rx limit check in stmmac_rx_zc() [+ + +]
Author: Alexey Kodanev <aleksei.kodanev@bell-sw.com>
Date:   Wed Nov 26 10:43:27 2025 +0000

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

net: usb: asix: validate PHY address before use [+ + +]
Author: Deepanshu Kartikey <kartikey406@gmail.com>
Date:   Thu Dec 18 06:41:56 2025 +0530

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

net: usb: pegasus: fix memory leak in update_eth_regs_async() [+ + +]
Author: Petko Manolov <petkan@nucleusys.com>
Date:   Tue Jan 6 10:48:21 2026 +0200

    net: usb: pegasus: fix memory leak in update_eth_regs_async()
    
    [ Upstream commit afa27621a28af317523e0836dad430bec551eb54 ]
    
    When asynchronously writing to the device registers and if usb_submit_urb()
    fail, the code fail to release allocated to this point resources.
    
    Fixes: 323b34963d11 ("drivers: net: usb: pegasus: fix control urb submission")
    Signed-off-by: Petko Manolov <petkan@nucleusys.com>
    Link: https://patch.msgid.link/20260106084821.3746677-1-petko.manolov@konsulko.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

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

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

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

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

 
netdev: preserve NETIF_F_ALL_FOR_ALL across TSO updates [+ + +]
Author: Di Zhu <zhud@hygon.cn>
Date:   Wed Dec 24 09:22:24 2025 +0800

    netdev: preserve NETIF_F_ALL_FOR_ALL across TSO updates
    
    [ Upstream commit 02d1e1a3f9239cdb3ecf2c6d365fb959d1bf39df ]
    
    Directly increment the TSO features incurs a side effect: it will also
    directly clear the flags in NETIF_F_ALL_FOR_ALL on the master device,
    which can cause issues such as the inability to enable the nocache copy
    feature on the bonding driver.
    
    The fix is to include NETIF_F_ALL_FOR_ALL in the update mask, thereby
    preventing it from being cleared.
    
    Fixes: b0ce3508b25e ("bonding: allow TSO being set on bonding master")
    Signed-off-by: Di Zhu <zhud@hygon.cn>
    Link: https://patch.msgid.link/20251224012224.56185-1-zhud@hygon.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

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

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

netfilter: nf_conncount: fix leaked ct in error paths [+ + +]
Author: Fernando Fernandez Mancera <fmancera@suse.de>
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 <fmancera@suse.de>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_conncount: garbage collection is not skipped when jiffies wrap around [+ + +]
Author: Nicklas Bo Jensen <njensen@akamai.com>
Date:   Thu Feb 27 13:32:34 2025 +0000

    netfilter: nf_conncount: garbage collection is not skipped when jiffies wrap around
    
    commit df08c94baafb001de6cf44bb7098bb557f36c335 upstream.
    
    nf_conncount is supposed to skip garbage collection if it has already
    run garbage collection in the same jiffy. Unfortunately, this is broken
    when jiffies wrap around which this patch fixes.
    
    The problem is that last_gc in the nf_conncount_list struct is an u32,
    but jiffies is an unsigned long which is 8 bytes on my systems. When
    those two are compared it only works until last_gc wraps around.
    
    See bug report: https://bugzilla.netfilter.org/show_bug.cgi?id=1778
    for more details.
    
    Fixes: d265929930e2 ("netfilter: nf_conncount: reduce unnecessary GC")
    Signed-off-by: Nicklas Bo Jensen <njensen@akamai.com>
    Reviewed-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_conncount: reduce unnecessary GC [+ + +]
Author: William Tu <u9012063@gmail.com>
Date:   Wed May 4 08:35:59 2022 -0700

    netfilter: nf_conncount: reduce unnecessary GC
    
    [ Upstream commit d265929930e2ffafc744c0ae05fb70acd53be1ee ]
    
    Currently nf_conncount can trigger garbage collection (GC)
    at multiple places. Each GC process takes a spin_lock_bh
    to traverse the nf_conncount_list. We found that when testing
    port scanning use two parallel nmap, because the number of
    connection increase fast, the nf_conncount_count and its
    subsequent call to __nf_conncount_add take too much time,
    causing several CPU lockup. This happens when user set the
    conntrack limit to +20,000, because the larger the limit,
    the longer the list that GC has to traverse.
    
    The patch mitigate the performance issue by avoiding unnecessary
    GC with a timestamp. Whenever nf_conncount has done a GC,
    a timestamp is updated, and beforce the next time GC is
    triggered, we make sure it's more than a jiffies.
    By doin this we can greatly reduce the CPU cycles and
    avoid the softirq lockup.
    
    To reproduce it in OVS,
    $ ovs-appctl dpctl/ct-set-limits zone=1,limit=20000
    $ ovs-appctl dpctl/ct-get-limits
    
    At another machine, runs two nmap
    $ nmap -p1- <IP>
    $ nmap -p1- <IP>
    
    Signed-off-by: William Tu <u9012063@gmail.com>
    Co-authored-by: Yifeng Sun <pkusunyifeng@gmail.com>
    Reported-by: Greg Rose <gvrose8192@gmail.com>
    Suggested-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Stable-dep-of: 69894e5b4c5e ("netfilter: nft_connlimit: update the count if add was skipped")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_conncount: rework API to use sk_buff directly [+ + +]
Author: Fernando Fernandez Mancera <fmancera@suse.de>
Date:   Fri Nov 21 01:14:30 2025 +0100

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

netfilter: nf_conncount: update last_gc only when GC has been performed [+ + +]
Author: Fernando Fernandez Mancera <fmancera@suse.de>
Date:   Wed Dec 17 15:46:40 2025 +0100

    netfilter: nf_conncount: update last_gc only when GC has been performed
    
    [ Upstream commit 7811ba452402d58628e68faedf38745b3d485e3c ]
    
    Currently last_gc is being updated everytime a new connection is
    tracked, that means that it is updated even if a GC wasn't performed.
    With a sufficiently high packet rate, it is possible to always bypass
    the GC, causing the list to grow infinitely.
    
    Update the last_gc value only when a GC has been actually performed.
    
    Fixes: d265929930e2 ("netfilter: nf_conncount: reduce unnecessary GC")
    Signed-off-by: Fernando Fernandez Mancera <fmancera@suse.de>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: fix memory leak in nf_tables_newrule() [+ + +]
Author: Zilin Guan <zilin@seu.edu.cn>
Date:   Wed Dec 24 12:48:26 2025 +0000

    netfilter: nf_tables: fix memory leak in nf_tables_newrule()
    
    [ Upstream commit d077e8119ddbb4fca67540f1a52453631a47f221 ]
    
    In nf_tables_newrule(), if nft_use_inc() fails, the function jumps to
    the err_release_rule label without freeing the allocated flow, leading
    to a memory leak.
    
    Fix this by adding a new label err_destroy_flow and jumping to it when
    nft_use_inc() fails. This ensures that the flow is properly released
    in this error case.
    
    Fixes: 1689f25924ada ("netfilter: nf_tables: report use refcount overflow")
    Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

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

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

netfilter: nft_synproxy: avoid possible data-race on update operation [+ + +]
Author: Fernando Fernandez Mancera <fmancera@suse.de>
Date:   Wed Dec 17 21:21:59 2025 +0100

    netfilter: nft_synproxy: avoid possible data-race on update operation
    
    [ Upstream commit 36a3200575642846a96436d503d46544533bb943 ]
    
    During nft_synproxy eval we are reading nf_synproxy_info struct which
    can be modified on update operation concurrently. As nf_synproxy_info
    struct fits in 32 bits, use READ_ONCE/WRITE_ONCE annotations.
    
    Fixes: ee394f96ad75 ("netfilter: nft_synproxy: add synproxy stateful object support")
    Signed-off-by: Fernando Fernandez Mancera <fmancera@suse.de>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netrom: Fix memory leak in nr_sendmsg() [+ + +]
Author: Wang Liang <wangliang74@huawei.com>
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: syzbot+d7abc36bbbb6d7d40b58@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=d7abc36bbbb6d7d40b58
    Tested-by: syzbot+d7abc36bbbb6d7d40b58@syzkaller.appspotmail.com
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Wang Liang <wangliang74@huawei.com>
    Link: https://patch.msgid.link/20251129041315.1550766-1-wangliang74@huawei.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfc: pn533: Fix error code in pn533_acr122_poweron_rdr() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
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 <dan.carpenter@linaro.org>
    Link: https://patch.msgid.link/aTfIJ9tZPmeUF4W1@stanley.mountain
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
NFS: add barriers when testing for NFS_FSDATA_BLOCKED [+ + +]
Author: NeilBrown <neil@brown.name>
Date:   Tue May 28 13:27:17 2024 +1000

    NFS: add barriers when testing for NFS_FSDATA_BLOCKED
    
    commit 99bc9f2eb3f79a2b4296d9bf43153e1d10ca50d3 upstream.
    
    dentry->d_fsdata is set to NFS_FSDATA_BLOCKED while unlinking or
    renaming-over a file to ensure that no open succeeds while the NFS
    operation progressed on the server.
    
    Setting dentry->d_fsdata to NFS_FSDATA_BLOCKED is done under ->d_lock
    after checking the refcount is not elevated.  Any attempt to open the
    file (through that name) will go through lookp_open() which will take
    ->d_lock while incrementing the refcount, we can be sure that once the
    new value is set, __nfs_lookup_revalidate() *will* see the new value and
    will block.
    
    We don't have any locking guarantee that when we set ->d_fsdata to NULL,
    the wait_var_event() in __nfs_lookup_revalidate() will notice.
    wait/wake primitives do NOT provide barriers to guarantee order.  We
    must use smp_load_acquire() in wait_var_event() to ensure we look at an
    up-to-date value, and must use smp_store_release() before wake_up_var().
    
    This patch adds those barrier functions and factors out
    block_revalidate() and unblock_revalidate() far clarity.
    
    There is also a hypothetical bug in that if memory allocation fails
    (which never happens in practice) we might leave ->d_fsdata locked.
    This patch adds the missing call to unblock_revalidate().
    
    Reported-and-tested-by: Richard Kojedzinszky <richard+debian+bugreport@kojedz.in>
    Closes: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1071501
    Fixes: 3c59366c207e ("NFS: don't unhash dentry during unlink/rename")
    Signed-off-by: NeilBrown <neilb@suse.de>
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

NFS: Automounted filesystems should inherit ro,noexec,nodev,sync flags [+ + +]
Author: Trond Myklebust <trond.myklebust@hammerspace.com>
Date:   Fri Nov 28 14:22:44 2025 -0500

    NFS: Automounted filesystems should inherit ro,noexec,nodev,sync flags
    
    [ Upstream commit 8675c69816e4276b979ff475ee5fac4688f80125 ]
    
    When a filesystem is being automounted, it needs to preserve the
    user-set superblock mount options, such as the "ro" flag.
    
    Reported-by: Li Lingfeng <lilingfeng3@huawei.com>
    Link: https://lore.kernel.org/all/20240604112636.236517-3-lilingfeng@huaweicloud.com/
    Fixes: f2aedb713c28 ("NFS: Add fs_context support.")
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

NFS: Avoid changing nlink when file removes and attribute updates race [+ + +]
Author: Trond Myklebust <trond.myklebust@hammerspace.com>
Date:   Mon Nov 17 15:28:17 2025 -0500

    NFS: Avoid changing nlink when file removes and attribute updates race
    
    [ Upstream commit bd4928ec799b31c492eb63f9f4a0c1e0bb4bb3f7 ]
    
    If a file removal races with another operation that updates its
    attributes, then skip the change to nlink, and just mark the attributes
    as being stale.
    
    Reported-by: Aiden Lambert <alambert48@gatech.edu>
    Fixes: 59a707b0d42e ("NFS: Ensure we revalidate the inode correctly after remove or rename")
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

NFS: don't unhash dentry during unlink/rename [+ + +]
Author: NeilBrown <neil@brown.name>
Date:   Mon Aug 1 10:33:34 2022 +1000

    NFS: don't unhash dentry during unlink/rename
    
    [ Upstream commit 3c59366c207e4c6c6569524af606baf017a55c61 ]
    
    NFS unlink() (and rename over existing target) must determine if the
    file is open, and must perform a "silly rename" instead of an unlink (or
    before rename) if it is.  Otherwise the client might hold a file open
    which has been removed on the server.
    
    Consequently if it determines that the file isn't open, it must block
    any subsequent opens until the unlink/rename has been completed on the
    server.
    
    This is currently achieved by unhashing the dentry.  This forces any
    open attempt to the slow-path for lookup which will block on i_rwsem on
    the directory until the unlink/rename completes.  A future patch will
    change the VFS to only get a shared lock on i_rwsem for unlink, so this
    will no longer work.
    
    Instead we introduce an explicit interlock.  A special value is stored
    in dentry->d_fsdata while the unlink/rename is running and
    ->d_revalidate blocks while that value is present.  When ->d_revalidate
    unblocks, the dentry will be invalid.  This closes the race
    without requiring exclusion on i_rwsem.
    
    d_fsdata is already used in two different ways.
    1/ an IS_ROOT directory dentry might have a "devname" stored in
       d_fsdata.  Such a dentry doesn't have a name and so cannot be the
       target of unlink or rename.  For safety we check if an old devname
       is still stored, and remove it if it is.
    2/ a dentry with DCACHE_NFSFS_RENAMED set will have a 'struct
       nfs_unlinkdata' stored in d_fsdata.  While this is set maydelete()
       will fail, so an unlink or rename will never proceed on such
       a dentry.
    
    Neither of these can be in effect when a dentry is the target of unlink
    or rename.  So we can expect d_fsdata to be NULL, and store a special
    value ((void*)1) which is given the name NFS_FSDATA_BLOCKED to indicate
    that any lookup will be blocked.
    
    The d_count() is incremented under d_lock() when a lookup finds the
    dentry, so we check d_count() is low, and set NFS_FSDATA_BLOCKED under
    the same lock to avoid any races.
    
    Signed-off-by: NeilBrown <neilb@suse.de>
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Stable-dep-of: bd4928ec799b ("NFS: Avoid changing nlink when file removes and attribute updates race")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

NFS: Fix missing unlock in nfs_unlink() [+ + +]
Author: Sun Ke <sunke32@huawei.com>
Date:   Fri Aug 12 09:14:40 2022 +0800

    NFS: Fix missing unlock in nfs_unlink()
    
    commit 2067231a9e2cbbcae0a4aca6ac36ff2dd6a7b701 upstream.
    
    Add the missing unlock before goto.
    
    Fixes: 3c59366c207e ("NFS: don't unhash dentry during unlink/rename")
    Signed-off-by: Sun Ke <sunke32@huawei.com>
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

NFS: Fix the verifier for case sensitive filesystem in nfs_atomic_open() [+ + +]
Author: Trond Myklebust <trond.myklebust@hammerspace.com>
Date:   Fri Dec 17 15:36:58 2021 -0500

    NFS: Fix the verifier for case sensitive filesystem in nfs_atomic_open()
    
    [ Upstream commit 68eaba4ca924a97a863c5c81c0b23a11dcb6db90 ]
    
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
    Stable-dep-of: 518c32a1bc4f ("NFS: Initialise verifiers for visible dentries in nfs_atomic_open()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

NFS: Fix up the automount fs_context to use the correct cred [+ + +]
Author: Trond Myklebust <trond.myklebust@hammerspace.com>
Date:   Fri Nov 28 18:56:46 2025 -0500

    NFS: Fix up the automount fs_context to use the correct cred
    
    [ Upstream commit a2a8fc27dd668e7562b5326b5ed2f1604cb1e2e9 ]
    
    When automounting, the fs_context should be fixed up to use the cred
    from the parent filesystem, since the operation is just extending the
    namespace. Authorisation to enter that namespace will already have been
    provided by the preceding lookup.
    
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

NFS: Initialise verifiers for visible dentries in nfs_atomic_open() [+ + +]
Author: Trond Myklebust <trond.myklebust@hammerspace.com>
Date:   Wed Nov 19 08:39:50 2025 -0500

    NFS: Initialise verifiers for visible dentries in nfs_atomic_open()
    
    [ Upstream commit 518c32a1bc4f8df1a8442ee8cdfea3e2fcff20a0 ]
    
    Ensure that the verifiers are initialised before calling
    d_splice_alias() in nfs_atomic_open().
    
    Reported-by: Michael Stoler <michael.stoler@vastdata.com>
    Fixes: 809fd143de88 ("NFSv4: Ensure nfs_atomic_open set the dentry verifier on ENOENT")
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

NFS: Label the dentry with a verifier in nfs_rmdir() and nfs_unlink() [+ + +]
Author: Trond Myklebust <trond.myklebust@hammerspace.com>
Date:   Wed Jul 7 21:43:09 2021 -0400

    NFS: Label the dentry with a verifier in nfs_rmdir() and nfs_unlink()
    
    [ Upstream commit 9019fb391de02cbff422090768b73afe9f6174df ]
    
    After the success of an operation such as rmdir() or unlink(), we expect
    to add the dentry back to the dcache as an ordinary negative dentry.
    However in NFS, unless it is labelled with the appropriate verifier for
    the parent directory state, then nfs_lookup_revalidate will end up
    discarding that dentry and forcing a new lookup.
    
    The fix is to ensure that we relabel the dentry appropriately on
    success.
    
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Stable-dep-of: bd4928ec799b ("NFS: Avoid changing nlink when file removes and attribute updates race")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

NFS: trace: show TIMEDOUT instead of 0x6e [+ + +]
Author: Chen Hanxiao <chenhx.fnst@fujitsu.com>
Date:   Mon Jan 12 09:49:37 2026 -0500

    NFS: trace: show TIMEDOUT instead of 0x6e
    
    [ Upstream commit cef48236dfe55fa266d505e8a497963a7bc5ef2a ]
    
    __nfs_revalidate_inode may return ETIMEDOUT.
    
    print symbol of ETIMEDOUT in nfs trace:
    
    before:
    cat-5191 [005] 119.331127: nfs_revalidate_inode_exit: error=-110 (0x6e)
    
    after:
    cat-1738 [004] 44.365509: nfs_revalidate_inode_exit: error=-110 (TIMEDOUT)
    
    Signed-off-by: Chen Hanxiao <chenhx.fnst@fujitsu.com>
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Stable-dep-of: c6c209ceb87f ("NFSD: Remove NFSERR_EAGAIN")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

NFS: unlink/rmdir shouldn't call d_delete() twice on ENOENT [+ + +]
Author: NeilBrown <neil@brown.name>
Date:   Fri Aug 19 09:55:59 2022 +1000

    NFS: unlink/rmdir shouldn't call d_delete() twice on ENOENT
    
    commit f16857e62bac60786104c020ad7c86e2163b2c5b upstream.
    
    nfs_unlink() calls d_delete() twice if it receives ENOENT from the
    server - once in nfs_dentry_handle_enoent() from nfs_safe_remove and
    once in nfs_dentry_remove_handle_error().
    
    nfs_rmddir() also calls it twice - the nfs_dentry_handle_enoent() call
    is direct and inside a region locked with ->rmdir_sem
    
    It is safe to call d_delete() twice if the refcount > 1 as the dentry is
    simply unhashed.
    If the refcount is 1, the first call sets d_inode to NULL and the second
    call crashes.
    
    This patch guards the d_delete() call from nfs_dentry_handle_enoent()
    leaving the one under ->remdir_sem in case that is important.
    
    In mainline it would be safe to remove the d_delete() call.  However in
    older kernels to which this might be backported, that would change the
    behaviour of nfs_unlink().  nfs_unlink() used to unhash the dentry which
    resulted in nfs_dentry_handle_enoent() not calling d_delete().  So in
    older kernels we need the d_delete() in nfs_dentry_remove_handle_error()
    when called from nfs_unlink() but not when called from nfs_rmdir().
    
    To make the code work correctly for old and new kernels, and from both
    nfs_unlink() and nfs_rmdir(), we protect the d_delete() call with
    simple_positive().  This ensures it is never called in a circumstance
    where it could crash.
    
    Fixes: 3c59366c207e ("NFS: don't unhash dentry during unlink/rename")
    Fixes: 9019fb391de0 ("NFS: Label the dentry with a verifier in nfs_rmdir() and nfs_unlink()")
    Signed-off-by: NeilBrown <neilb@suse.de>
    Tested-by: Olga Kornievskaia <aglo@umich.edu>
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nfs_common: factor out nfs_errtbl and nfs_stat_to_errno [+ + +]
Author: Mike Snitzer <snitzer@kernel.org>
Date:   Mon Jan 12 09:49:38 2026 -0500

    nfs_common: factor out nfs_errtbl and nfs_stat_to_errno
    
    [ Upstream commit 4806ded4c14c5e8fdc6ce885d83221a78c06a428 ]
    
    Common nfs_stat_to_errno() is used by both fs/nfs/nfs2xdr.c and
    fs/nfs/nfs3xdr.c
    
    Will also be used by fs/nfsd/localio.c
    
    Signed-off-by: Mike Snitzer <snitzer@kernel.org>
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Reviewed-by: NeilBrown <neilb@suse.de>
    Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
    Stable-dep-of: c6c209ceb87f ("NFSD: Remove NFSERR_EAGAIN")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
NFSD/blocklayout: Fix minlength check in proc_layoutget [+ + +]
Author: Sergey Bashirov <sergeybashirov@gmail.com>
Date:   Fri Oct 3 12:11:03 2025 +0300

    NFSD/blocklayout: Fix minlength check in proc_layoutget
    
    [ Upstream commit 3524b021b0ec620a76c89aee78e9d4b4130fb711 ]
    
    The extent returned by the file system may have a smaller offset than
    the segment offset requested by the client. In this case, the minimum
    segment length must be checked against the requested range. Otherwise,
    the client may not be able to continue the read/write operation.
    
    Fixes: 8650b8a05850 ("nfsd: pNFS block layout driver")
    Signed-off-by: Sergey Bashirov <sergeybashirov@gmail.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
NFSD: Clear SECLABEL in the suppattr_exclcreat bitmap [+ + +]
Author: Chuck Lever <chuck.lever@oracle.com>
Date:   Wed Dec 31 08:46:15 2025 -0500

    NFSD: Clear SECLABEL in the suppattr_exclcreat bitmap
    
    [ Upstream commit 27d17641cacfedd816789b75d342430f6b912bd2 ]
    
    >>From RFC 8881:
    
    5.8.1.14. Attribute 75: suppattr_exclcreat
    
    > The bit vector that would set all REQUIRED and RECOMMENDED
    > attributes that are supported by the EXCLUSIVE4_1 method of file
    > creation via the OPEN operation. The scope of this attribute
    > applies to all objects with a matching fsid.
    
    There's nothing in RFC 8881 that states that suppattr_exclcreat is
    or is not allowed to contain bits for attributes that are clear in
    the reported supported_attrs bitmask. But it doesn't make sense for
    an NFS server to indicate that it /doesn't/ implement an attribute,
    but then also indicate that clients /are/ allowed to set that
    attribute using OPEN(create) with EXCLUSIVE4_1.
    
    Ensure that the SECURITY_LABEL and ACL bits are not set in the
    suppattr_exclcreat bitmask when they are also not set in the
    supported_attrs bitmask.
    
    Fixes: 8c18f2052e75 ("nfsd41: SUPPATTR_EXCLCREAT attribute")
    Cc: stable@vger.kernel.org
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nfsd: Drop the client reference in client_states_open() [+ + +]
Author: Haoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
Date:   Sat Dec 6 15:38:42 2025 +0800

    nfsd: Drop the client reference in client_states_open()
    
    commit 1f941b2c23fd34c6f3b76d36f9d0a2528fa92b8f upstream.
    
    In error path, call drop_client() to drop the reference
    obtained by get_nfsdfs_clp().
    
    Fixes: 78599c42ae3c ("nfsd4: add file to display list of client's opens")
    Cc: stable@vger.kernel.org
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Haoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

nfsd: Mark variable __maybe_unused to avoid W=1 build break [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
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: stable@vger.kernel.org
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
NFSD: NFSv4 file creation neglects setting ACL [+ + +]
Author: Chuck Lever <chuck.lever@oracle.com>
Date:   Mon Jan 5 15:34:59 2026 -0500

    NFSD: NFSv4 file creation neglects setting ACL
    
    [ Upstream commit 913f7cf77bf14c13cfea70e89bcb6d0b22239562 ]
    
    An NFSv4 client that sets an ACL with a named principal during file
    creation retrieves the ACL afterwards, and finds that it is only a
    default ACL (based on the mode bits) and not the ACL that was
    requested during file creation. This violates RFC 8881 section
    6.4.1.3: "the ACL attribute is set as given".
    
    The issue occurs in nfsd_create_setattr(). On 6.1.y, the check to
    determine whether nfsd_setattr() should be called is simply
    "iap->ia_valid", which only accounts for iattr changes. When only
    an ACL is present (and no iattr fields are set), nfsd_setattr() is
    skipped and the POSIX ACL is never applied to the inode.
    
    Subsequently, when the client retrieves the ACL, the server finds
    no POSIX ACL on the inode and returns one generated from the file's
    mode bits rather than returning the originally-specified ACL.
    
    Reported-by: Aurelien Couderc <aurelien.couderc2002@gmail.com>
    Fixes: c0cbe70742f4 ("NFSD: add posix ACLs to struct nfsd_attrs")
    Cc: stable@vger.kernel.org
    [ cel: Adjust nfsd_create_setattr() instead of nfsd_attrs_valid() ]
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nfsd: provide locking for v4_end_grace [+ + +]
Author: NeilBrown <neil@brown.name>
Date:   Mon Jan 12 10:46:42 2026 -0500

    nfsd: provide locking for v4_end_grace
    
    [ Upstream commit 2857bd59feb63fcf40fe4baf55401baea6b4feb4 ]
    
    Writing to v4_end_grace can race with server shutdown and result in
    memory being accessed after it was freed - reclaim_str_hashtbl in
    particularly.
    
    We cannot hold nfsd_mutex across the nfsd4_end_grace() call as that is
    held while client_tracking_op->init() is called and that can wait for
    an upcall to nfsdcltrack which can write to v4_end_grace, resulting in a
    deadlock.
    
    nfsd4_end_grace() is also called by the landromat work queue and this
    doesn't require locking as server shutdown will stop the work and wait
    for it before freeing anything that nfsd4_end_grace() might access.
    
    However, we must be sure that writing to v4_end_grace doesn't restart
    the work item after shutdown has already waited for it.  For this we
    add a new flag protected with nn->client_lock.  It is set only while it
    is safe to make client tracking calls, and v4_end_grace only schedules
    work while the flag is set with the spinlock held.
    
    So this patch adds a nfsd_net field "client_tracking_active" which is
    set as described.  Another field "grace_end_forced", is set when
    v4_end_grace is written.  After this is set, and providing
    client_tracking_active is set, the laundromat is scheduled.
    This "grace_end_forced" field bypasses other checks for whether the
    grace period has finished.
    
    This resolves a race which can result in use-after-free.
    
    Reported-by: Li Lingfeng <lilingfeng3@huawei.com>
    Closes: https://lore.kernel.org/linux-nfs/20250623030015.2353515-1-neil@brown.name/T/#t
    Fixes: 7f5ef2e900d9 ("nfsd: add a v4_end_grace file to /proc/fs/nfsd")
    Cc: stable@vger.kernel.org
    Signed-off-by: NeilBrown <neil@brown.name>
    Tested-by: Li Lingfeng <lilingfeng3@huawei.com>
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
NFSD: Remove NFSERR_EAGAIN [+ + +]
Author: Chuck Lever <chuck.lever@oracle.com>
Date:   Mon Jan 12 09:49:39 2026 -0500

    NFSD: Remove NFSERR_EAGAIN
    
    [ Upstream commit c6c209ceb87f64a6ceebe61761951dcbbf4a0baa ]
    
    I haven't found an NFSERR_EAGAIN in RFCs 1094, 1813, 7530, or 8881.
    None of these RFCs have an NFS status code that match the numeric
    value "11".
    
    Based on the meaning of the EAGAIN errno, I presume the use of this
    status in NFSD means NFS4ERR_DELAY. So replace the one usage of
    nfserr_eagain, and remove it from NFSD's NFS status conversion
    tables.
    
    As far as I can tell, NFSERR_EAGAIN has existed since the pre-git
    era, but was not actually used by any code until commit f4e44b393389
    ("NFSD: delay unmount source's export after inter-server copy
    completed."), at which time it become possible for NFSD to return
    a status code of 11 (which is not valid NFS protocol).
    
    Fixes: f4e44b393389 ("NFSD: delay unmount source's export after inter-server copy completed.")
    Cc: stable@vger.kernel.org
    Reviewed-by: NeilBrown <neil@brown.name>
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

NFSD: use correct reservation type in nfsd4_scsi_fence_client [+ + +]
Author: Dai Ngo <dai.ngo@oracle.com>
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: stable@vger.kernel.org
    Signed-off-by: Dai Ngo <dai.ngo@oracle.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
NFSv4/pNFS: Clear NFS_INO_LAYOUTCOMMIT in pnfs_mark_layout_stateid_invalid [+ + +]
Author: Jonathan Curley <jcurley@purestorage.com>
Date:   Wed Nov 12 18:02:42 2025 +0000

    NFSv4/pNFS: Clear NFS_INO_LAYOUTCOMMIT in pnfs_mark_layout_stateid_invalid
    
    [ Upstream commit e0f8058f2cb56de0b7572f51cd563ca5debce746 ]
    
    Fixes a crash when layout is null during this call stack:
    
    write_inode
        -> nfs4_write_inode
            -> pnfs_layoutcommit_inode
    
    pnfs_set_layoutcommit relies on the lseg refcount to keep the layout
    around. Need to clear NFS_INO_LAYOUTCOMMIT otherwise we might attempt
    to reference a null layout.
    
    Fixes: fe1cf9469d7bc ("pNFS: Clear all layout segment state in pnfs_mark_layout_stateid_invalid")
    Signed-off-by: Jonathan Curley <jcurley@purestorage.com>
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
NFSv4: Add some support for case insensitive filesystems [+ + +]
Author: Trond Myklebust <trond.myklebust@primarydata.com>
Date:   Fri Dec 17 15:36:54 2021 -0500

    NFSv4: Add some support for case insensitive filesystems
    
    [ Upstream commit 1ab5be4ac5b1c9ce39ce1037c45b68d2ce6eede0 ]
    
    Add capabilities to allow the NFS client to recognise when it is dealing
    with case insensitive and case preserving filesystems.
    
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
    Stable-dep-of: 518c32a1bc4f ("NFS: Initialise verifiers for visible dentries in nfs_atomic_open()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

NFSv4: ensure the open stateid seqid doesn't go backwards [+ + +]
Author: Scott Mayhew <smayhew@redhat.com>
Date:   Mon Nov 3 10:44:15 2025 -0500

    NFSv4: ensure the open stateid seqid doesn't go backwards
    
    [ Upstream commit 2e47c3cc64b44b0b06cd68c2801db92ff143f2b2 ]
    
    We have observed an NFSv4 client receiving a LOCK reply with a status of
    NFS4ERR_OLD_STATEID and subsequently retrying the LOCK request with an
    earlier seqid value in the stateid.  As this was for a new lockowner,
    that would imply that nfs_set_open_stateid_locked() had updated the open
    stateid seqid with an earlier value.
    
    Looking at nfs_set_open_stateid_locked(), if the incoming seqid is out
    of sequence, the task will sleep on the state->waitq for up to 5
    seconds.  If the task waits for the full 5 seconds, then after finishing
    the wait it'll update the open stateid seqid with whatever value the
    incoming seqid has.  If there are multiple waiters in this scenario,
    then the last one to perform said update may not be the one with the
    highest seqid.
    
    Add a check to ensure that the seqid can only be incremented, and add a
    tracepoint to indicate when old seqids are skipped.
    
    Signed-off-by: Scott Mayhew <smayhew@redhat.com>
    Reviewed-by: Benjamin Coddington <bcodding@hammerspace.com>
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ntfs3: Fix uninit buffer allocated by __getname() [+ + +]
Author: Sidharth Seela <sidharthseela@gmail.com>
Date:   Tue Sep 23 12:10:16 2025 +0530

    ntfs3: Fix uninit buffer allocated by __getname()
    
    [ Upstream commit 9948dcb2f7b5a1bf8e8710eafaf6016e00be3ad6 ]
    
    Fix uninit errors caused after buffer allocation given to 'de'; by
    initializing the buffer with zeroes. The fix was found by using KMSAN.
    
    Reported-by: syzbot+332bd4e9d148f11a87dc@syzkaller.appspotmail.com
    Fixes: 78ab59fee07f2 ("fs/ntfs3: Rework file operations")
    Signed-off-by: Sidharth Seela <sidharthseela@gmail.com>
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ntfs3: fix uninit memory after failed mi_read in mi_format_new [+ + +]
Author: Raphael Pinsonneault-Thibeault <rpthibeault@gmail.com>
Date:   Sun Oct 12 16:16:34 2025 -0400

    ntfs3: fix uninit memory after failed mi_read in mi_format_new
    
    [ Upstream commit 73e6b9dacf72a1e7a4265eacca46f8f33e0997d6 ]
    
    Fix a KMSAN un-init bug found by syzkaller.
    
    ntfs_get_bh() expects a buffer from sb_getblk(), that buffer may not be
    uptodate. We do not bring the buffer uptodate before setting it as
    uptodate. If the buffer were to not be uptodate, it could mean adding a
    buffer with un-init data to the mi record. Attempting to load that record
    will trigger KMSAN.
    
    Avoid this by setting the buffer as uptodate, if it’s not already, by
    overwriting it.
    
    Reported-by: syzbot+7a2ba6b7b66340cff225@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=7a2ba6b7b66340cff225
    Tested-by: syzbot+7a2ba6b7b66340cff225@syzkaller.appspotmail.com
    Fixes: 4342306f0f0d5 ("fs/ntfs3: Add file operations and implementation")
    Signed-off-by: Raphael Pinsonneault-Thibeault <rpthibeault@gmail.com>
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ntfs3: init run lock for extend inode [+ + +]
Author: Edward Adam Davis <eadavis@qq.com>
Date:   Tue Sep 16 13:50:13 2025 +0800

    ntfs3: init run lock for extend inode
    
    [ Upstream commit be99c62ac7e7af514e4b13f83c891a3cccefaa48 ]
    
    After setting the inode mode of $Extend to a regular file, executing the
    truncate system call will enter the do_truncate() routine, causing the
    run_lock uninitialized error reported by syzbot.
    
    Prior to patch 4e8011ffec79, if the inode mode of $Extend was not set to
    a regular file, the do_truncate() routine would not be entered.
    
    Add the run_lock initialization when loading $Extend.
    
    syzbot reported:
    INFO: trying to register non-static key.
    Call Trace:
     dump_stack_lvl+0x189/0x250 lib/dump_stack.c:120
     assign_lock_key+0x133/0x150 kernel/locking/lockdep.c:984
     register_lock_class+0x105/0x320 kernel/locking/lockdep.c:1299
     __lock_acquire+0x99/0xd20 kernel/locking/lockdep.c:5112
     lock_acquire+0x120/0x360 kernel/locking/lockdep.c:5868
     down_write+0x96/0x1f0 kernel/locking/rwsem.c:1590
     ntfs_set_size+0x140/0x200 fs/ntfs3/inode.c:860
     ntfs_extend+0x1d9/0x970 fs/ntfs3/file.c:387
     ntfs_setattr+0x2e8/0xbe0 fs/ntfs3/file.c:808
    
    Fixes: 4e8011ffec79 ("ntfs3: pretend $Extend records as regular files")
    Reported-by: syzbot+bdeb22a4b9a09ab9aa45@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=bdeb22a4b9a09ab9aa45
    Tested-by: syzbot+bdeb22a4b9a09ab9aa45@syzkaller.appspotmail.com
    Signed-off-by: Edward Adam Davis <eadavis@qq.com>
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvme-fc: don't hold rport lock when putting ctrl [+ + +]
Author: Daniel Wagner <wagi@kernel.org>
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 <justin.tee@broadcom.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Daniel Wagner <wagi@kernel.org>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ocfs2: fix kernel BUG in ocfs2_find_victim_chain [+ + +]
Author: Prithvi Tambewagh <activprithvi@gmail.com>
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/20251201130711.143900-1-activprithvi@gmail.com
    Signed-off-by: Prithvi Tambewagh <activprithvi@gmail.com>
    Reported-by: syzbot+96d38c6e1655c1420a72@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=96d38c6e1655c1420a72
    Tested-by: syzbot+96d38c6e1655c1420a72@syzkaller.appspotmail.com
    Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Cc: Mark Fasheh <mark@fasheh.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: Jun Piao <piaojun@huawei.com>
    Cc: Heming Zhao <heming.zhao@suse.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ocfs2: fix memory leak in ocfs2_merge_rec_left() [+ + +]
Author: Dmitry Antipov <dmantipov@yandex.ru>
Date:   Fri Dec 5 09:51:59 2025 +0300

    ocfs2: fix memory leak in ocfs2_merge_rec_left()
    
    [ Upstream commit 2214ec4bf89d0fd27717322d3983a2f3b469c7f3 ]
    
    In 'ocfs2_merge_rec_left()', do not reset 'left_path' to NULL after
    move, thus allowing 'ocfs2_free_path()' to free it before return.
    
    Link: https://lkml.kernel.org/r/20251205065159.392749-1-dmantipov@yandex.ru
    Fixes: 677b975282e4 ("ocfs2: Add support for cross extent block")
    Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
    Reported-by: syzbot+cfc7cab3bb6eaa7c4de2@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=cfc7cab3bb6eaa7c4de2
    Reviewed-by: Heming Zhao <heming.zhao@suse.com>
    Acked-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Cc: Mark Fasheh <mark@fasheh.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: Jun Piao <piaojun@huawei.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ocfs2: relax BUG() to ocfs2_error() in __ocfs2_move_extent() [+ + +]
Author: Dmitry Antipov <dmantipov@yandex.ru>
Date:   Thu Oct 9 13:23:49 2025 +0300

    ocfs2: relax BUG() to ocfs2_error() in __ocfs2_move_extent()
    
    [ Upstream commit 8a7d58845fae061c62b50bc5eeb9bae4a1dedc3d ]
    
    In '__ocfs2_move_extent()', relax 'BUG()' to 'ocfs2_error()' just
    to avoid crashing the whole kernel due to a filesystem corruption.
    
    Fixes: 8f603e567aa7 ("Ocfs2/move_extents: move a range of extent.")
    Link: https://lkml.kernel.org/r/20251009102349.181126-2-dmantipov@yandex.ru
    Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
    Closes: https://syzkaller.appspot.com/bug?extid=727d161855d11d81e411
    Reported-by: syzbot+727d161855d11d81e411@syzkaller.appspotmail.com
    Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Cc: Mark Fasheh <mark@fasheh.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: Jun Piao <piaojun@huawei.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
octeontx2-pf: fix "UBSAN: shift-out-of-bounds error" [+ + +]
Author: Anshumali Gaur <agaur@marvell.com>
Date:   Fri Dec 19 11:52:26 2025 +0530

    octeontx2-pf: fix "UBSAN: shift-out-of-bounds error"
    
    [ Upstream commit 85f4b0c650d9f9db10bda8d3acfa1af83bf78cf7 ]
    
    This patch ensures that the RX ring size (rx_pending) is not
    set below the permitted length. This avoids UBSAN
    shift-out-of-bounds errors when users passes small or zero
    ring sizes via ethtool -G.
    
    Fixes: d45d8979840d ("octeontx2-pf: Add basic ethtool support")
    Signed-off-by: Anshumali Gaur <agaur@marvell.com>
    Link: https://patch.msgid.link/20251219062226.524844-1-agaur@marvell.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
page_pool: Fix use-after-free in page_pool_recycle_in_ring [+ + +]
Author: Dong Chenchen <dongchenchen2@huawei.com>
Date:   Thu Dec 11 10:01:10 2025 +0000

    page_pool: Fix use-after-free in page_pool_recycle_in_ring
    
    [ Upstream commit 271683bb2cf32e5126c592b5d5e6a756fa374fd9 ]
    
    syzbot reported a uaf in page_pool_recycle_in_ring:
    
    BUG: KASAN: slab-use-after-free in lock_release+0x151/0xa30 kernel/locking/lockdep.c:5862
    Read of size 8 at addr ffff8880286045a0 by task syz.0.284/6943
    
    CPU: 0 UID: 0 PID: 6943 Comm: syz.0.284 Not tainted 6.13.0-rc3-syzkaller-gdfa94ce54f41 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:94 [inline]
     dump_stack_lvl+0x241/0x360 lib/dump_stack.c:120
     print_address_description mm/kasan/report.c:378 [inline]
     print_report+0x169/0x550 mm/kasan/report.c:489
     kasan_report+0x143/0x180 mm/kasan/report.c:602
     lock_release+0x151/0xa30 kernel/locking/lockdep.c:5862
     __raw_spin_unlock_bh include/linux/spinlock_api_smp.h:165 [inline]
     _raw_spin_unlock_bh+0x1b/0x40 kernel/locking/spinlock.c:210
     spin_unlock_bh include/linux/spinlock.h:396 [inline]
     ptr_ring_produce_bh include/linux/ptr_ring.h:164 [inline]
     page_pool_recycle_in_ring net/core/page_pool.c:707 [inline]
     page_pool_put_unrefed_netmem+0x748/0xb00 net/core/page_pool.c:826
     page_pool_put_netmem include/net/page_pool/helpers.h:323 [inline]
     page_pool_put_full_netmem include/net/page_pool/helpers.h:353 [inline]
     napi_pp_put_page+0x149/0x2b0 net/core/skbuff.c:1036
     skb_pp_recycle net/core/skbuff.c:1047 [inline]
     skb_free_head net/core/skbuff.c:1094 [inline]
     skb_release_data+0x6c4/0x8a0 net/core/skbuff.c:1125
     skb_release_all net/core/skbuff.c:1190 [inline]
     __kfree_skb net/core/skbuff.c:1204 [inline]
     sk_skb_reason_drop+0x1c9/0x380 net/core/skbuff.c:1242
     kfree_skb_reason include/linux/skbuff.h:1263 [inline]
     __skb_queue_purge_reason include/linux/skbuff.h:3343 [inline]
    
    root cause is:
    
    page_pool_recycle_in_ring
      ptr_ring_produce
        spin_lock(&r->producer_lock);
        WRITE_ONCE(r->queue[r->producer++], ptr)
          //recycle last page to pool
                                    page_pool_release
                                      page_pool_scrub
                                        page_pool_empty_ring
                                          ptr_ring_consume
                                          page_pool_return_page  //release all page
                                      __page_pool_destroy
                                         free_percpu(pool->recycle_stats);
                                         free(pool) //free
    
         spin_unlock(&r->producer_lock); //pool->ring uaf read
      recycle_stat_inc(pool, ring);
    
    page_pool can be free while page pool recycle the last page in ring.
    Add producer-lock barrier to page_pool_release to prevent the page
    pool from being free before all pages have been recycled.
    
    recycle_stat_inc() is empty when CONFIG_PAGE_POOL_STATS is not
    enabled, which will trigger Wempty-body build warning. Add definition
    for pool stat macro to fix warning.
    
    Suggested-by: Jakub Kicinski <kuba@kernel.org>
    Link: https://lore.kernel.org/netdev/20250513083123.3514193-1-dongchenchen2@huawei.com
    Fixes: ff7d6b27f894 ("page_pool: refurbish version of page_pool code")
    Reported-by: syzbot+204a4382fcb3311f3858@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=204a4382fcb3311f3858
    Signed-off-by: Dong Chenchen <dongchenchen2@huawei.com>
    Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Reviewed-by: Mina Almasry <almasrymina@google.com>
    Link: https://patch.msgid.link/20250527114152.3119109-1-dongchenchen2@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ Linux 5.15.y does not support page pool statistics
      (CONFIG_PAGE_POOL_STATS), so remove the related source code
      changes from the patch. ]
    Signed-off-by: Ruohan Lan <ruohanlan@aliyun.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
parisc: Do not reprogram affinitiy on ASP chip [+ + +]
Author: Helge Deller <deller@gmx.de>
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 <deller@gmx.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

parisc: entry.S: fix space adjustment on interruption for 64-bit userspace [+ + +]
Author: Sven Schnelle <svens@stackframe.org>
Date:   Thu Oct 30 08:56:05 2025 +0100

    parisc: entry.S: fix space adjustment on interruption for 64-bit userspace
    
    commit 1aa4524c0c1b54842c4c0a370171d11b12d0709b upstream.
    
    In wide mode, the IASQ contain the upper part of the GVA
    during interruption. This needs to be reversed before
    the space is used - otherwise it contains parts of IAOQ.
    See Page 2-13 "Processing Resources / Interruption Instruction
    Address Queues" in the Parisc 2.0 Architecture Manual page 2-13
    for an explanation.
    
    The IAOQ/IASQ space_adjust was skipped for other interruptions
    than itlb misses. However, the code in handle_interruption()
    checks whether iasq[0] contains a valid space. Due to the not
    masked out bits this match failed and the process was killed.
    
    Also add space_adjust for IAOQ1/IASQ1 so ptregs contains sane values.
    
    Signed-off-by: Sven Schnelle <svens@stackframe.org>
    Cc: stable@vger.kernel.org # v6.0+
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

parisc: entry: set W bit for !compat tasks in syscall_restore_rfi() [+ + +]
Author: Sven Schnelle <svens@stackframe.org>
Date:   Wed Oct 15 23:21:41 2025 +0200

    parisc: entry: set W bit for !compat tasks in syscall_restore_rfi()
    
    commit 5fb1d3ce3e74a4530042795e1e065422295f1371 upstream.
    
    When the kernel leaves to userspace via syscall_restore_rfi(), the
    W bit is not set in the new PSW. This doesn't cause any problems
    because there's no 64 bit userspace for parisc. Simple static binaries
    are usually loaded at addresses way below the 32 bit limit so the W bit
    doesn't matter.
    
    Fix this by setting the W bit when TIF_32BIT is not set.
    
    Signed-off-by: Sven Schnelle <svens@stackframe.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
PCI/PM: Reinstate clearing state_saved in legacy and !PM codepaths [+ + +]
Author: Lukas Wunner <lukas@wunner.de>
Date:   Wed Nov 19 09:50:01 2025 +0100

    PCI/PM: Reinstate clearing state_saved in legacy and !PM codepaths
    
    commit 894f475f88e06c0f352c829849560790dbdedbe5 upstream.
    
    When a PCI device is suspended, it is normally the PCI core's job to save
    Config Space and put the device into a low power state.  However drivers
    are allowed to assume these responsibilities.  When they do, the PCI core
    can tell by looking at the state_saved flag in struct pci_dev:  The flag
    is cleared before commencing the suspend sequence and it is set when
    pci_save_state() is called.  If the PCI core finds the flag set late in
    the suspend sequence, it refrains from calling pci_save_state() itself.
    
    But there are two corner cases where the PCI core neglects to clear the
    flag before commencing the suspend sequence:
    
    * If a driver has legacy PCI PM callbacks, pci_legacy_suspend() neglects
      to clear the flag.  The (stale) flag is subsequently queried by
      pci_legacy_suspend() itself and pci_legacy_suspend_late().
    
    * If a device has no driver or its driver has no PCI PM callbacks,
      pci_pm_freeze() neglects to clear the flag.  The (stale) flag is
      subsequently queried by pci_pm_freeze_noirq().
    
    The flag may be set prior to suspend if the device went through error
    recovery:  Drivers commonly invoke pci_restore_state() + pci_save_state()
    to restore Config Space after reset.
    
    The flag may also be set if drivers call pci_save_state() on probe to
    allow for recovery from subsequent errors.
    
    The result is that pci_legacy_suspend_late() and pci_pm_freeze_noirq()
    don't call pci_save_state() and so the state that will be restored on
    resume is the one recorded on last error recovery or on probe, not the one
    that the device had on suspend.  If the two states happen to be identical,
    there's no problem.
    
    Reinstate clearing the flag in pci_legacy_suspend() and pci_pm_freeze().
    The two functions used to do that until commit 4b77b0a2ba27 ("PCI: Clear
    saved_state after the state has been restored") deemed it unnecessary
    because it assumed that it's sufficient to clear the flag on resume in
    pci_restore_state().  The commit seemingly did not take into account that
    pci_save_state() and pci_restore_state() are not only used by power
    management code, but also for error recovery.
    
    Devices without driver or whose driver has no PCI PM callbacks may be in
    runtime suspend when pci_pm_freeze() is called.  Their state has already
    been saved, so don't clear the flag to skip a pointless pci_save_state()
    in pci_pm_freeze_noirq().
    
    None of the drivers with legacy PCI PM callbacks seem to use runtime PM,
    so clear the flag unconditionally in their case.
    
    Fixes: 4b77b0a2ba27 ("PCI: Clear saved_state after the state has been restored")
    Signed-off-by: Lukas Wunner <lukas@wunner.de>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Rafael J. Wysocki (Intel) <rafael@kernel.org>
    Cc: stable@vger.kernel.org # v2.6.32+
    Link: https://patch.msgid.link/094f2aad64418710daf0940112abe5a0afdc6bce.1763483367.git.lukas@wunner.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
PCI: brcmstb: Fix disabling L0s capability [+ + +]
Author: Jim Quinlan <james.quinlan@broadcom.com>
Date:   Mon Jan 5 14:41:45 2026 -0500

    PCI: brcmstb: Fix disabling L0s capability
    
    [ Upstream commit 9583f9d22991d2cfb5cc59a2552040c4ae98d998 ]
    
    caab002d5069 ("PCI: brcmstb: Disable L0s component of ASPM if requested")
    set PCI_EXP_LNKCAP_ASPM_L1 and (optionally) PCI_EXP_LNKCAP_ASPM_L0S in
    PCI_EXP_LNKCAP (aka PCIE_RC_CFG_PRIV1_LINK_CAPABILITY in brcmstb).
    
    But instead of using PCI_EXP_LNKCAP_ASPM_L1 and PCI_EXP_LNKCAP_ASPM_L0S
    directly, it used PCIE_LINK_STATE_L1 and PCIE_LINK_STATE_L0S, which are
    Linux-created values that only coincidentally matched the PCIe spec.
    b478e162f227 ("PCI/ASPM: Consolidate link state defines") later changed
    them so they no longer matched the PCIe spec, so the bits ended up in the
    wrong place in PCI_EXP_LNKCAP.
    
    Use PCI_EXP_LNKCAP_ASPM_L0S to clear L0s support when there's an
    'aspm-no-l0s' property.  Rely on brcmstb hardware to advertise L0s and/or
    L1 support otherwise.
    
    Fixes: caab002d5069 ("PCI: brcmstb: Disable L0s component of ASPM if requested")
    Reported-by: Bjorn Helgaas <bhelgaas@google.com>
    Closes: https://lore.kernel.org/linux-pci/20250925194424.GA2197200@bhelgaas
    Signed-off-by: Jim Quinlan <james.quinlan@broadcom.com>
    [mani: reworded subject and description, added closes tag and CCed stable]
    Signed-off-by: Manivannan Sadhasivam <mani@kernel.org>
    [bhelgaas: commit log]
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20251003170436.1446030-1-james.quinlan@broadcom.com
    [ Adjust context in variable declaration ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

PCI: dwc: Fix wrong PORT_LOGIC_LTSSM_STATE_MASK definition [+ + +]
Author: Shawn Lin <shawn.lin@rock-chips.com>
Date:   Fri Nov 14 20:09:00 2025 +0800

    PCI: dwc: Fix wrong PORT_LOGIC_LTSSM_STATE_MASK definition
    
    [ Upstream commit bcc9a4a0bca3aee4303fa4a20302e57b24ac8f68 ]
    
    As per DesignWare Cores PCI Express Controller Databook, section 5.50,
    SII: Debug Signals, cxpl_debug_info[63:0]:
    
      [5:0] smlh_ltssm_state: LTSSM current state. Encoding is same as the
      dedicated smlh_ltssm_state output.
    
    The mask should be 6 bits, from 0 to 5. Hence, fix the mask definition.
    
    Fixes: 23fe5bd4be90 ("PCI: keystone: Cleanup ks_pcie_link_up()")
    Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
    [mani: reworded description]
    Signed-off-by: Manivannan Sadhasivam <mani@kernel.org>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Link: https://patch.msgid.link/1763122140-203068-1-git-send-email-shawn.lin@rock-chips.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: keystone: Exit ks_pcie_probe() for invalid mode [+ + +]
Author: Siddharth Vadapalli <s-vadapalli@ti.com>
Date:   Wed Oct 29 13:34:51 2025 +0530

    PCI: keystone: Exit ks_pcie_probe() for invalid mode
    
    [ Upstream commit 95d9c3f0e4546eaec0977f3b387549a8463cd49f ]
    
    Commit under Fixes introduced support for PCIe EP mode on AM654x platforms.
    When the mode happens to be either "DW_PCIE_RC_TYPE" or "DW_PCIE_EP_TYPE",
    the PCIe Controller is configured accordingly. However, when the mode is
    neither of them, an error message is displayed, but the driver probe
    succeeds. Since this "invalid" mode is not associated with a functional
    PCIe Controller, the probe should fail.
    
    Fix the behavior by exiting "ks_pcie_probe()" with the return value of
    "-EINVAL" in addition to displaying the existing error message when the
    mode is invalid.
    
    Fixes: 23284ad677a9 ("PCI: keystone: Add support for PCIe EP in AM654x Platforms")
    Signed-off-by: Siddharth Vadapalli <s-vadapalli@ti.com>
    Signed-off-by: Manivannan Sadhasivam <mani@kernel.org>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Link: https://patch.msgid.link/20251029080547.1253757-4-s-vadapalli@ti.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf tools: Fix split kallsyms DSO counting [+ + +]
Author: Namhyung Kim <namhyung@kernel.org>
Date:   Tue Dec 2 15:57:15 2025 -0800

    perf tools: Fix split kallsyms DSO counting
    
    [ Upstream commit ad0b9c4865b98dc37f4d606d26b1c19808796805 ]
    
    It's counted twice as it's increased after calling maps__insert().  I
    guess we want to increase it only after it's added properly.
    
    Reviewed-by: Ian Rogers <irogers@google.com>
    Fixes: 2e538c4a1847291cf ("perf tools: Improve kernel/modules symbol lookup")
    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf/x86/intel: Correct large PEBS flag check [+ + +]
Author: Dapeng Mi <dapeng1.mi@linux.intel.com>
Date:   Wed Oct 29 18:21:28 2025 +0800

    perf/x86/intel: Correct large PEBS flag check
    
    [ Upstream commit 5e4e355ae7cdeb0fef5dbe908866e1f895abfacc ]
    
    current large PEBS flag check only checks if sample_regs_user contains
    unsupported GPRs but doesn't check if sample_regs_intr contains
    unsupported GPRs.
    
    Of course, currently PEBS HW supports to sample all perf supported GPRs,
    the missed check doesn't cause real issue. But it won't be true any more
    after the subsequent patches support to sample SSP register. SSP
    sampling is not supported by adaptive PEBS HW and it would be supported
    until arch-PEBS HW. So correct this issue.
    
    Fixes: a47ba4d77e12 ("perf/x86: Enable free running PEBS for REGS_USER/INTR")
    Signed-off-by: Dapeng Mi <dapeng1.mi@linux.intel.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://patch.msgid.link/20251029102136.61364-5-dapeng1.mi@linux.intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
phy: broadcom: bcm63xx-usbh: fix section mismatches [+ + +]
Author: Johan Hovold <johan@kernel.org>
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: stable@vger.kernel.org      # 5.9
    Cc: Álvaro Fernández Rojas <noltari@gmail.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://patch.msgid.link/20251017054537.6884-1-johan@kernel.org
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

phy: mscc: Fix PTP for VSC8574 and VSC8572 [+ + +]
Author: Horatiu Vultur <horatiu.vultur@microchip.com>
Date:   Thu Oct 23 21:13:50 2025 +0200

    phy: mscc: Fix PTP for VSC8574 and VSC8572
    
    [ Upstream commit ea5df88aeca112aac69e6c32e3dd1433a113b0c9 ]
    
    The PTP initialization is two-step. First part are the function
    vsc8584_ptp_probe_once() and vsc8584_ptp_probe() at probe time which
    initialize the locks, queues, creates the PTP device. The second part is
    the function vsc8584_ptp_init() at config_init() time which initialize
    PTP in the HW.
    
    For VSC8574 and VSC8572, the PTP initialization is incomplete. It is
    missing the first part but it makes the second part. Meaning that the
    ptp_clock_register() is never called.
    
    There is no crash without the first part when enabling PTP but this is
    unexpected because some PHys have PTP functionality exposed by the
    driver and some don't even though they share the same PTP clock PTP.
    
    Fixes: 774626fa440e ("net: phy: mscc: Add PTP support for 2 more VSC PHYs")
    Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
    Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
    Link: https://patch.msgid.link/20251023191350.190940-3-horatiu.vultur@microchip.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pinctrl: qcom: lpass-lpi: mark the GPIO controller as sleeping [+ + +]
Author: Bartosz Golaszewski <brgl@kernel.org>
Date:   Mon Jan 12 13:24:00 2026 -0500

    pinctrl: qcom: lpass-lpi: mark the GPIO controller as sleeping
    
    [ Upstream commit ebc18e9854e5a2b62a041fb57b216a903af45b85 ]
    
    The gpio_chip settings in this driver say the controller can't sleep
    but it actually uses a mutex for synchronization. This triggers the
    following BUG():
    
    [    9.233659] BUG: sleeping function called from invalid context at kernel/locking/mutex.c:281
    [    9.233665] in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 554, name: (udev-worker)
    [    9.233669] preempt_count: 1, expected: 0
    [    9.233673] RCU nest depth: 0, expected: 0
    [    9.233688] Tainted: [W]=WARN
    [    9.233690] Hardware name: Dell Inc. Latitude 7455/0FK7MX, BIOS 2.10.1 05/20/2025
    [    9.233694] Call trace:
    [    9.233696]  show_stack+0x24/0x38 (C)
    [    9.233709]  dump_stack_lvl+0x40/0x88
    [    9.233716]  dump_stack+0x18/0x24
    [    9.233722]  __might_resched+0x148/0x160
    [    9.233731]  __might_sleep+0x38/0x98
    [    9.233736]  mutex_lock+0x30/0xd8
    [    9.233749]  lpi_config_set+0x2e8/0x3c8 [pinctrl_lpass_lpi]
    [    9.233757]  lpi_gpio_direction_output+0x58/0x90 [pinctrl_lpass_lpi]
    [    9.233761]  gpiod_direction_output_raw_commit+0x110/0x428
    [    9.233772]  gpiod_direction_output_nonotify+0x234/0x358
    [    9.233779]  gpiod_direction_output+0x38/0xd0
    [    9.233786]  gpio_shared_proxy_direction_output+0xb8/0x2a8 [gpio_shared_proxy]
    [    9.233792]  gpiod_direction_output_raw_commit+0x110/0x428
    [    9.233799]  gpiod_direction_output_nonotify+0x234/0x358
    [    9.233806]  gpiod_configure_flags+0x2c0/0x580
    [    9.233812]  gpiod_find_and_request+0x358/0x4f8
    [    9.233819]  gpiod_get_index+0x7c/0x98
    [    9.233826]  devm_gpiod_get+0x34/0xb0
    [    9.233829]  reset_gpio_probe+0x58/0x128 [reset_gpio]
    [    9.233836]  auxiliary_bus_probe+0xb0/0xf0
    [    9.233845]  really_probe+0x14c/0x450
    [    9.233853]  __driver_probe_device+0xb0/0x188
    [    9.233858]  driver_probe_device+0x4c/0x250
    [    9.233863]  __driver_attach+0xf8/0x2a0
    [    9.233868]  bus_for_each_dev+0xf8/0x158
    [    9.233872]  driver_attach+0x30/0x48
    [    9.233876]  bus_add_driver+0x158/0x2b8
    [    9.233880]  driver_register+0x74/0x118
    [    9.233886]  __auxiliary_driver_register+0x94/0xe8
    [    9.233893]  init_module+0x34/0xfd0 [reset_gpio]
    [    9.233898]  do_one_initcall+0xec/0x300
    [    9.233903]  do_init_module+0x64/0x260
    [    9.233910]  load_module+0x16c4/0x1900
    [    9.233915]  __arm64_sys_finit_module+0x24c/0x378
    [    9.233919]  invoke_syscall+0x4c/0xe8
    [    9.233925]  el0_svc_common+0x8c/0xf0
    [    9.233929]  do_el0_svc+0x28/0x40
    [    9.233934]  el0_svc+0x38/0x100
    [    9.233938]  el0t_64_sync_handler+0x84/0x130
    [    9.233943]  el0t_64_sync+0x17c/0x180
    
    Mark the controller as sleeping.
    
    Fixes: 6e261d1090d6 ("pinctrl: qcom: Add sm8250 lpass lpi pinctrl driver")
    Cc: stable@vger.kernel.org
    Reported-by: Val Packett <val@packett.cool>
    Closes: https://lore.kernel.org/all/98c0f185-b0e0-49ea-896c-f3972dd011ca@packett.cool/
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Reviewed-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Linus Walleij <linusw@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

pinctrl: qcom: lpass-lpi: Remove duplicate assignment of of_gpio_n_cells [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Mon Jan 12 13:23:59 2026 -0500

    pinctrl: qcom: lpass-lpi: Remove duplicate assignment of of_gpio_n_cells
    
    [ Upstream commit a3fc976a2d68cb74ae4234314002e4e398e4c337 ]
    
    The of_gpio_n_cells default is 2 when ->of_xlate() callback is
    not defined. No need to assign it explicitly in the driver.
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20230112184923.80442-1-andriy.shevchenko@linux.intel.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Stable-dep-of: ebc18e9854e5 ("pinctrl: qcom: lpass-lpi: mark the GPIO controller as sleeping")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

pinctrl: qcom: msm: Fix deadlock in pinmux configuration [+ + +]
Author: Praveen Talari <praveen.talari@oss.qualcomm.com>
Date:   Mon Nov 10 15:40:41 2025 +0530

    pinctrl: qcom: msm: Fix deadlock in pinmux configuration
    
    [ Upstream commit 1c2e70397b4125022dba80f6111271a37fb36bae ]
    
    Replace disable_irq() with disable_irq_nosync() in msm_pinmux_set_mux()
    to prevent deadlock when wakeup IRQ is triggered on the same
    GPIO being reconfigured.
    
    The issue occurs when a wakeup IRQ is triggered on a GPIO and the IRQ
    handler attempts to reconfigure the same GPIO's pinmux. In this scenario,
    msm_pinmux_set_mux() calls disable_irq() which waits for the currently
    running IRQ handler to complete, creating a circular dependency that
    results in deadlock.
    
    Using disable_irq_nosync() avoids waiting for the IRQ handler to
    complete, preventing the deadlock condition while still properly
    disabling the interrupt during pinmux reconfiguration.
    
    Suggested-by: Prasad Sodagudi <prasad.sodagudi@oss.qualcomm.com>
    Signed-off-by: Praveen Talari <praveen.talari@oss.qualcomm.com>
    Reviewed-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: single: Fix incorrect type for error return variable [+ + +]
Author: Haotian Zhang <vulab@iscas.ac.cn>
Date:   Wed Dec 3 14:13:47 2025 +0800

    pinctrl: single: Fix incorrect type for error return variable
    
    [ Upstream commit 61d1bb53547d42c6bdaec9da4496beb3a1a05264 ]
    
    pcs_pinconf_get() and pcs_pinconf_set() declare ret as unsigned int,
    but assign it the return values of pcs_get_function() that may return
    negative error codes. This causes negative error codes to be
    converted to large positive values.
    
    Change ret from unsigned int to int in both functions.
    
    Fixes: 9dddb4df90d1 ("pinctrl: single: support generic pinconf")
    Signed-off-by: Haotian Zhang <vulab@iscas.ac.cn>
    Signed-off-by: Linus Walleij <linusw@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: single: Fix PIN_CONFIG_BIAS_DISABLE handling [+ + +]
Author: Matthijs Kooijman <matthijs@stdin.nl>
Date:   Tue Mar 19 12:06:34 2024 +0100

    pinctrl: single: Fix PIN_CONFIG_BIAS_DISABLE handling
    
    [ Upstream commit b5fe46efc147516a908d2d31bf40eb858ab76d51 ]
    
    The pinctrl-single driver handles pin_config_set by looking up the
    requested setting in a DT-defined lookup table, which defines what bits
    correspond to each setting. There is no way to add
    PIN_CONFIG_BIAS_DISABLE entries to the table, since there is instead
    code to disable the bias by applying the disable values of both the
    pullup and pulldown entries in the table.
    
    However, this code is inside the table-lookup loop, so it would only
    execute if there is an entry for PIN_CONFIG_BIAS_DISABLE in the table,
    which can never exist, so this code never runs.
    
    This commit lifts the offending code out of the loop, so it just
    executes directly whenever PIN_CONFIG_BIAS_DISABLE is requested,
    skippipng the table lookup loop.
    
    This also introduces a new `param` variable to make the code slightly
    more readable.
    
    This bug seems to have existed when this code was first merged in commit
    9dddb4df90d13 ("pinctrl: single: support generic pinconf"). Earlier
    versions of this patch did have an entry for PIN_CONFIG_BIAS_DISABLE in
    the lookup table, but that was removed, which is probably how this bug
    was introduced.
    
    Signed-off-by: Matthijs Kooijman <matthijs@stdin.nl>
    Reviewed-by: Haojian Zhuang <haojian.zhuang@linaro.org>
    Reviewed-by: Tony Lindgren <tony@atomide.com>
    Message-ID: <20240319110633.230329-1-matthijs@stdin.nl>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Stable-dep-of: 61d1bb53547d ("pinctrl: single: Fix incorrect type for error return variable")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pinctrl: stm32: fix hwspinlock resource leak in probe function [+ + +]
Author: Haotian Zhang <vulab@iscas.ac.cn>
Date:   Wed Oct 29 09:42:52 2025 +0800

    pinctrl: stm32: fix hwspinlock resource leak in probe function
    
    [ Upstream commit 002679f79ed605e543fbace465557317cd307c9a ]
    
    In stm32_pctl_probe(), hwspin_lock_request_specific() is called to
    request a hwspinlock, but the acquired lock is not freed on multiple
    error paths after this call. This causes resource leakage when the
    function fails to initialize properly.
    
    Use devm_hwspin_lock_request_specific() instead of
    hwspin_lock_request_specific() to automatically manage the hwspinlock
    resource lifecycle.
    
    Fixes: 97cfb6cd34f2 ("pinctrl: stm32: protect configuration registers with a hwspinlock")
    Signed-off-by: Haotian Zhang <vulab@iscas.ac.cn>
    Reviewed-by: Antonio Borneo <antonio.borneo@foss.st.com>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
platform/chrome: cros_ec_ishtp: Fix UAF after unbinding driver [+ + +]
Author: Tzung-Bi Shih <tzungbi@kernel.org>
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: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20251031033900.3577394-1-tzungbi@kernel.org
    Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
platform/x86/intel/hid: Add Dell Pro Rugged 10/12 tablet to VGBS DMI quirks [+ + +]
Author: Chia-Lin Kao (AceLan) <acelan.kao@canonical.com>
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) <acelan.kao@canonical.com>
    Reviewed-by: Hans de Goede <johannes.goede@oss.qualcomm.com>
    Link: https://patch.msgid.link/20251127070407.656463-1-acelan.kao@canonical.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
platform/x86: acer-wmi: Ignore backlight event [+ + +]
Author: Armin Wolf <W_Armin@gmx.de>
Date:   Mon Nov 17 16:59:38 2025 +0100

    platform/x86: acer-wmi: Ignore backlight event
    
    [ Upstream commit 444a9256f8d106e08a6bc2dc8ef28a8699e4b3ba ]
    
    On the Acer Nitro AN515-58, the event 4 - 0 is send by the ACPI
    firmware when the backlight up/down keys are pressed. Ignore this
    event to avoid spamming the kernel log with error messages, as the
    acpi-video driver already handles brightness up/down events.
    
    Reported-by: Bugaddr <Bugaddr@protonmail.com>
    Closes: https://bugaddr.tech/posts/2025-11-16-debugging-the-acer-nitro-5-an515-58-fn-f10-keyboard-backlight-bug-on-linux/#wmi-interface-issues
    Tested-by: Bugaddr <Bugaddr@protonmail.com>
    Signed-off-by: Armin Wolf <W_Armin@gmx.de>
    Link: https://patch.msgid.link/20251117155938.3030-1-W_Armin@gmx.de
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

platform/x86: asus-wmi: use brightness_set_blocking() for kbd led [+ + +]
Author: Anton Khirnov <anton@khirnov.net>
Date:   Sat Nov 29 11:13:08 2025 +0100

    platform/x86: asus-wmi: use brightness_set_blocking() for kbd led
    
    [ Upstream commit ccb61a328321ba3f8567e350664c9ca7a42b6c70 ]
    
    kbd_led_set() can sleep, and so may not be used as the brightness_set()
    callback.
    
    Otherwise using this led with a trigger leads to system hangs
    accompanied by:
    BUG: scheduling while atomic: acpi_fakekeyd/2588/0x00000003
    CPU: 4 UID: 0 PID: 2588 Comm: acpi_fakekeyd Not tainted 6.17.9+deb14-amd64 #1 PREEMPT(lazy)  Debian 6.17.9-1
    Hardware name: ASUSTeK COMPUTER INC. ASUS EXPERTBOOK B9403CVAR/B9403CVAR, BIOS B9403CVAR.311 12/24/2024
    Call Trace:
     <TASK>
     [...]
     schedule_timeout+0xbd/0x100
     __down_common+0x175/0x290
     down_timeout+0x67/0x70
     acpi_os_wait_semaphore+0x57/0x90
     [...]
     asus_wmi_evaluate_method3+0x87/0x190 [asus_wmi]
     led_trigger_event+0x3f/0x60
     [...]
    
    Fixes: 9fe44fc98ce4 ("platform/x86: asus-wmi: Simplify the keyboard brightness updating process")
    Signed-off-by: Anton Khirnov <anton@khirnov.net>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Reviewed-by: Denis Benato <benato.denis96@gmail.com>
    Link: https://patch.msgid.link/20251129101307.18085-3-anton@khirnov.net
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

platform/x86: huawei-wmi: add keys for HONOR models [+ + +]
Author: Jia Ston <ston.jia@outlook.com>
Date:   Wed Oct 29 05:18:38 2025 +0000

    platform/x86: huawei-wmi: add keys for HONOR models
    
    [ Upstream commit 5c72329716d0858621021193330594d5d26bf44d ]
    
    HONOR MagicBook X16/X14 models produced in 2025 cannot use the Print
    Screen and YOYO keys properly, with the system reporting them as
    unknown key presses (codes: 0x028b and 0x028e).
    
    To resolve this, a key_entry is added for both the HONOR Print Screen
    key and the HONOR YOYO key, ensuring they function correctly on these
    models.
    
    Signed-off-by: Ston Jia <ston.jia@outlook.com>
    Link: https://patch.msgid.link/20251029051804.220111-1-ston.jia@outlook.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

platform/x86: ibm_rtl: fix EBDA signature search pointer arithmetic [+ + +]
Author: Junrui Luo <moonafterrain@outlook.com>
Date:   Fri Dec 19 16:30:29 2025 +0800

    platform/x86: ibm_rtl: fix EBDA signature search pointer arithmetic
    
    [ Upstream commit 15dd100349b8526cbdf2de0ce3e72e700eb6c208 ]
    
    The ibm_rtl_init() function searches for the signature but has a pointer
    arithmetic error. The loop counter suggests searching at 4-byte intervals
    but the implementation only advances by 1 byte per iteration.
    
    Fix by properly advancing the pointer by sizeof(unsigned int) bytes
    each iteration.
    
    Reported-by: Yuhao Jiang <danisjiang@gmail.com>
    Reported-by: Junrui Luo <moonafterrain@outlook.com>
    Fixes: 35f0ce032b0f ("IBM Real-Time "SMI Free" mode driver -v7")
    Signed-off-by: Junrui Luo <moonafterrain@outlook.com>
    Link: https://patch.msgid.link/SYBPR01MB78812D887A92DE3802D0D06EAFA9A@SYBPR01MB7881.ausprd01.prod.outlook.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

platform/x86: msi-laptop: add missing sysfs_remove_group() [+ + +]
Author: Thomas Fourier <fourier.thomas@gmail.com>
Date:   Wed Dec 17 11:36:13 2025 +0100

    platform/x86: msi-laptop: add missing sysfs_remove_group()
    
    [ Upstream commit 1461209cf813b6ee6d40f29b96b544587df6d2b1 ]
    
    A sysfs group is created in msi_init() when old_ec_model is enabled, but
    never removed. Remove the msipf_old_attribute_group in that case.
    
    Fixes: 03696e51d75a ("msi-laptop: Disable brightness control for new EC")
    Signed-off-by: Thomas Fourier <fourier.thomas@gmail.com>
    Link: https://patch.msgid.link/20251217103617.27668-2-fourier.thomas@gmail.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
PM: runtime: Do not clear needs_force_resume with enabled runtime PM [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
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 <ed.tsai@mediatek.com>
    Closes: https://lore.kernel.org/linux-pm/20251215122154.3180001-1-ed.tsai@mediatek.com/ [1]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Cc: 6.17+ <stable@vger.kernel.org> # 6.17+
    Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>
    Link: https://patch.msgid.link/12807571.O9o76ZdvQC@rafael.j.wysocki
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
power: supply: apm_power: only unset own apm_get_power_status [+ + +]
Author: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
Date:   Fri Oct 17 00:05:18 2025 +0200

    power: supply: apm_power: only unset own apm_get_power_status
    
    [ Upstream commit bd44ea12919ac4e83c9f3997240fe58266aa8799 ]
    
    Mirroring drivers/macintosh/apm_emu.c, this means that
      modprobe apm_power && modprobe $anotherdriver && modprobe -r apm_power
    leaves $anotherdriver's apm_get_power_status instead of deleting it.
    
    Fixes: 3788ec932bfd ("[BATTERY] APM emulation driver for class batteries")
    Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
    Link: https://patch.msgid.link/xczpgox57hxbunkcbdl5fxhc4gnsajsipldfidi7355afezk64@tarta.nabijaczleweli.xyz
    Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

power: supply: wm831x: Check wm831x_set_bits() return value [+ + +]
Author: Ivan Abramov <i.abramov@mt-integration.ru>
Date:   Thu Oct 9 20:05:52 2025 +0300

    power: supply: wm831x: Check wm831x_set_bits() return value
    
    [ Upstream commit ea14bae6df18942bccb467fcf5ff33ca677b8253 ]
    
    Since wm831x_set_bits() may return error, log failure and exit from
    wm831x_usb_limit_change() in such case.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 626b6cd5f52e ("power: wm831x_power: Support USB charger current limit management")
    Signed-off-by: Ivan Abramov <i.abramov@mt-integration.ru>
    Link: https://patch.msgid.link/20251009170553.566561-1-i.abramov@mt-integration.ru
    Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powercap: fix race condition in register_control_type() [+ + +]
Author: Sumeet Pawnikar <sumeet4linux@gmail.com>
Date:   Sat Dec 6 00:32:16 2025 +0530

    powercap: fix race condition in register_control_type()
    
    [ Upstream commit 7bda1910c4bccd4b8d4726620bb3d6bbfb62286e ]
    
    The device becomes visible to userspace via device_register()
    even before it fully initialized by idr_init(). If userspace
    or another thread tries to register a zone immediately after
    device_register(), the control_type_valid() will fail because
    the control_type is not yet in the list. The IDR is not yet
    initialized, so this race condition causes zone registration
    failure.
    
    Move idr_init() and list addition before device_register()
    fix the race condition.
    
    Signed-off-by: Sumeet Pawnikar <sumeet4linux@gmail.com>
    [ rjw: Subject adjustment, empty line added ]
    Link: https://patch.msgid.link/20251205190216.5032-1-sumeet4linux@gmail.com
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

powercap: fix sscanf() error return value handling [+ + +]
Author: Sumeet Pawnikar <sumeet4linux@gmail.com>
Date:   Sun Dec 7 20:45:48 2025 +0530

    powercap: fix sscanf() error return value handling
    
    [ Upstream commit efc4c35b741af973de90f6826bf35d3b3ac36bf1 ]
    
    Fix inconsistent error handling for sscanf() return value check.
    
    Implicit boolean conversion is used instead of explicit return
    value checks. The code checks if (!sscanf(...)) which is incorrect
    because:
     1. sscanf returns the number of successfully parsed items
     2. On success, it returns 1 (one item passed)
     3. On failure, it returns 0 or EOF
     4. The check 'if (!sscanf(...))' is wrong because it treats
        success (1) as failure
    
    All occurrences of sscanf() now uses explicit return value check.
    With this behavior it returns '-EINVAL' when parsing fails (returns
    0 or EOF), and continues when parsing succeeds (returns 1).
    
    Signed-off-by: Sumeet Pawnikar <sumeet4linux@gmail.com>
    [ rjw: Subject and changelog edits ]
    Link: https://patch.msgid.link/20251207151549.202452-1-sumeet4linux@gmail.com
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/32: Fix unpaired stwcx. on interrupt exit [+ + +]
Author: Christophe Leroy <chleroy@kernel.org>
Date:   Fri Sep 12 10:37:34 2025 +0200

    powerpc/32: Fix unpaired stwcx. on interrupt exit
    
    [ Upstream commit 10e1c77c3636d815db802ceef588522c2d2d947c ]
    
    Commit b96bae3ae2cb ("powerpc/32: Replace ASM exception exit by C
    exception exit from ppc64") erroneouly copied to powerpc/32 the logic
    from powerpc/64 based on feature CPU_FTR_STCX_CHECKS_ADDRESS which is
    always 0 on powerpc/32.
    
    Re-instate the logic implemented by commit b64f87c16f3c ("[POWERPC]
    Avoid unpaired stwcx. on some processors") which is based on
    CPU_FTR_NEED_PAIRED_STWCX feature.
    
    Fixes: b96bae3ae2cb ("powerpc/32: Replace ASM exception exit by C exception exit from ppc64")
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
    Link: https://patch.msgid.link/6040b5dbcf5cdaa1cd919fcf0790f12974ea6e5a.1757666244.git.christophe.leroy@csgroup.eu
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/64s/ptdump: Fix kernel_hash_pagetable dump for ISA v3.00 HPTE format [+ + +]
Author: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
Date:   Thu Oct 30 20:27:28 2025 +0530

    powerpc/64s/ptdump: Fix kernel_hash_pagetable dump for ISA v3.00 HPTE format
    
    [ Upstream commit eae40a6da63faa9fb63ff61f8fa2b3b57da78a84 ]
    
    HPTE format was changed since Power9 (ISA 3.0) onwards. While dumping
    kernel hash page tables, nothing gets printed on powernv P9+. This patch
    utilizes the helpers added in the patch tagged as fixes, to convert new
    format to old format and dump the hptes. This fix is only needed for
    native_find() (powernv), since pseries continues to work fine with the
    old format.
    
    Fixes: 6b243fcfb5f1e ("powerpc/64: Simplify adaptation to new ISA v3.00 HPTE format")
    Signed-off-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
    Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
    Link: https://patch.msgid.link/4c2bb9e5b3cfbc0dd80b61b67cdd3ccfc632684c.1761834163.git.ritesh.list@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/64s/slb: Fix SLB multihit issue during SLB preload [+ + +]
Author: Donet Tom <donettom@linux.ibm.com>
Date:   Mon Jan 5 12:12:35 2026 -0500

    powerpc/64s/slb: Fix SLB multihit issue during SLB preload
    
    [ Upstream commit 00312419f0863964625d6dcda8183f96849412c6 ]
    
    On systems using the hash MMU, there is a software SLB preload cache that
    mirrors the entries loaded into the hardware SLB buffer. This preload
    cache is subject to periodic eviction — typically after every 256 context
    switches — to remove old entry.
    
    To optimize performance, the kernel skips switch_mmu_context() in
    switch_mm_irqs_off() when the prev and next mm_struct are the same.
    However, on hash MMU systems, this can lead to inconsistencies between
    the hardware SLB and the software preload cache.
    
    If an SLB entry for a process is evicted from the software cache on one
    CPU, and the same process later runs on another CPU without executing
    switch_mmu_context(), the hardware SLB may retain stale entries. If the
    kernel then attempts to reload that entry, it can trigger an SLB
    multi-hit error.
    
    The following timeline shows how stale SLB entries are created and can
    cause a multi-hit error when a process moves between CPUs without a
    MMU context switch.
    
    CPU 0                                   CPU 1
    -----                                    -----
    Process P
    exec                                    swapper/1
     load_elf_binary
      begin_new_exc
        activate_mm
         switch_mm_irqs_off
          switch_mmu_context
           switch_slb
           /*
            * This invalidates all
            * the entries in the HW
            * and setup the new HW
            * SLB entries as per the
            * preload cache.
            */
    context_switch
    sched_migrate_task migrates process P to cpu-1
    
    Process swapper/0                       context switch (to process P)
    (uses mm_struct of Process P)           switch_mm_irqs_off()
                                             switch_slb
                                               load_slb++
                                                /*
                                                * load_slb becomes 0 here
                                                * and we evict an entry from
                                                * the preload cache with
                                                * preload_age(). We still
                                                * keep HW SLB and preload
                                                * cache in sync, that is
                                                * because all HW SLB entries
                                                * anyways gets evicted in
                                                * switch_slb during SLBIA.
                                                * We then only add those
                                                * entries back in HW SLB,
                                                * which are currently
                                                * present in preload_cache
                                                * (after eviction).
                                                */
                                            load_elf_binary continues...
                                             setup_new_exec()
                                              slb_setup_new_exec()
    
                                            sched_switch event
                                            sched_migrate_task migrates
                                            process P to cpu-0
    
    context_switch from swapper/0 to Process P
     switch_mm_irqs_off()
      /*
       * Since both prev and next mm struct are same we don't call
       * switch_mmu_context(). This will cause the HW SLB and SW preload
       * cache to go out of sync in preload_new_slb_context. Because there
       * was an SLB entry which was evicted from both HW and preload cache
       * on cpu-1. Now later in preload_new_slb_context(), when we will try
       * to add the same preload entry again, we will add this to the SW
       * preload cache and then will add it to the HW SLB. Since on cpu-0
       * this entry was never invalidated, hence adding this entry to the HW
       * SLB will cause a SLB multi-hit error.
       */
    load_elf_binary continues...
     START_THREAD
      start_thread
       preload_new_slb_context
       /*
        * This tries to add a new EA to preload cache which was earlier
        * evicted from both cpu-1 HW SLB and preload cache. This caused the
        * HW SLB of cpu-0 to go out of sync with the SW preload cache. The
        * reason for this was, that when we context switched back on CPU-0,
        * we should have ideally called switch_mmu_context() which will
        * bring the HW SLB entries on CPU-0 in sync with SW preload cache
        * entries by setting up the mmu context properly. But we didn't do
        * that since the prev mm_struct running on cpu-0 was same as the
        * next mm_struct (which is true for swapper / kernel threads). So
        * now when we try to add this new entry into the HW SLB of cpu-0,
        * we hit a SLB multi-hit error.
        */
    
    WARNING: CPU: 0 PID: 1810970 at arch/powerpc/mm/book3s64/slb.c:62
    assert_slb_presence+0x2c/0x50(48 results) 02:47:29 [20157/42149]
    Modules linked in:
    CPU: 0 UID: 0 PID: 1810970 Comm: dd Not tainted 6.16.0-rc3-dirty #12
    VOLUNTARY
    Hardware name: IBM pSeries (emulated by qemu) POWER8 (architected)
    0x4d0200 0xf000004 of:SLOF,HEAD hv:linux,kvm pSeries
    NIP:  c00000000015426c LR: c0000000001543b4 CTR: 0000000000000000
    REGS: c0000000497c77e0 TRAP: 0700   Not tainted  (6.16.0-rc3-dirty)
    MSR:  8000000002823033 <SF,VEC,VSX,FP,ME,IR,DR,RI,LE>  CR: 28888482  XER: 00000000
    CFAR: c0000000001543b0 IRQMASK: 3
    <...>
    NIP [c00000000015426c] assert_slb_presence+0x2c/0x50
    LR [c0000000001543b4] slb_insert_entry+0x124/0x390
    Call Trace:
      0x7fffceb5ffff (unreliable)
      preload_new_slb_context+0x100/0x1a0
      start_thread+0x26c/0x420
      load_elf_binary+0x1b04/0x1c40
      bprm_execve+0x358/0x680
      do_execveat_common+0x1f8/0x240
      sys_execve+0x58/0x70
      system_call_exception+0x114/0x300
      system_call_common+0x160/0x2c4
    
    >>From the above analysis, during early exec the hardware SLB is cleared,
    and entries from the software preload cache are reloaded into hardware
    by switch_slb. However, preload_new_slb_context and slb_setup_new_exec
    also attempt to load some of the same entries, which can trigger a
    multi-hit. In most cases, these additional preloads simply hit existing
    entries and add nothing new. Removing these functions avoids redundant
    preloads and eliminates the multi-hit issue. This patch removes these
    two functions.
    
    We tested process switching performance using the context_switch
    benchmark on POWER9/hash, and observed no regression.
    
    Without this patch: 129041 ops/sec
    With this patch:    129341 ops/sec
    
    We also measured SLB faults during boot, and the counts are essentially
    the same with and without this patch.
    
    SLB faults without this patch: 19727
    SLB faults with this patch:    19786
    
    Fixes: 5434ae74629a ("powerpc/64s/hash: Add a SLB preload cache")
    cc: stable@vger.kernel.org
    Suggested-by: Nicholas Piggin <npiggin@gmail.com>
    Signed-off-by: Donet Tom <donettom@linux.ibm.com>
    Signed-off-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
    Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
    Link: https://patch.msgid.link/0ac694ae683494fe8cadbd911a1a5018d5d3c541.1761834163.git.ritesh.list@gmail.com
    [ Adjust context ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
powerpc/addnote: Fix overflow on 32-bit builds [+ + +]
Author: Ben Collins <bcollins@kernel.org>
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 <bcollins@kernel.org>
    Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
    Link: https://patch.msgid.link/2025042122-mustard-wrasse-694572@boujee-and-buff
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/pseries/cmm: adjust BALLOON_MIGRATE when migrating pages [+ + +]
Author: David Hildenbrand <david@kernel.org>
Date:   Mon Jan 5 14:28:26 2026 -0500

    powerpc/pseries/cmm: adjust BALLOON_MIGRATE when migrating pages
    
    [ Upstream commit 0da2ba35c0d532ca0fe7af698b17d74c4d084b9a ]
    
    Let's properly adjust BALLOON_MIGRATE like the other drivers.
    
    Note that the INFLATE/DEFLATE events are triggered from the core when
    enqueueing/dequeueing pages.
    
    This was found by code inspection.
    
    Link: https://lkml.kernel.org/r/20251021100606.148294-3-david@redhat.com
    Fixes: fe030c9b85e6 ("powerpc/pseries/cmm: Implement balloon compaction")
    Signed-off-by: David Hildenbrand <david@redhat.com>
    Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

powerpc/pseries/cmm: call balloon_devinfo_init() also without CONFIG_BALLOON_COMPACTION [+ + +]
Author: David Hildenbrand <david@kernel.org>
Date:   Mon Jan 5 15:01:20 2026 -0500

    powerpc/pseries/cmm: call balloon_devinfo_init() also without CONFIG_BALLOON_COMPACTION
    
    [ Upstream commit fc6bcf9ac4de76f5e7bcd020b3c0a86faff3f2d5 ]
    
    Patch series "powerpc/pseries/cmm: two smaller fixes".
    
    Two smaller fixes identified while doing a bigger rework.
    
    This patch (of 2):
    
    We always have to initialize the balloon_dev_info, even when compaction is
    not configured in: otherwise the containing list and the lock are left
    uninitialized.
    
    Likely not many such configs exist in practice, but let's CC stable to
    be sure.
    
    This was found by code inspection.
    
    Link: https://lkml.kernel.org/r/20251021100606.148294-1-david@redhat.com
    Link: https://lkml.kernel.org/r/20251021100606.148294-2-david@redhat.com
    Fixes: fe030c9b85e6 ("powerpc/pseries/cmm: Implement balloon compaction")
    Signed-off-by: David Hildenbrand <david@redhat.com>
    Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    [ moved balloon_devinfo_init() call from inside cmm_balloon_compaction_init() to cmm_init() ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ps3disk: use memcpy_{from,to}_bvec index [+ + +]
Author: Rene Rebe <rene@exactco.de>
Date:   Fri Nov 14 15:30:33 2025 +0100

    ps3disk: use memcpy_{from,to}_bvec index
    
    [ Upstream commit 79bd8c9814a273fa7ba43399e1c07adec3fc95db ]
    
    With 6e0a48552b8c (ps3disk: use memcpy_{from,to}_bvec) converting
    ps3disk to new bvec helpers, incrementing the offset was accidently
    lost, corrupting consecutive buffers. Restore index for non-corrupted
    data transfers.
    
    Fixes: 6e0a48552b8c (ps3disk: use memcpy_{from,to}_bvec)
    Signed-off-by: René Rebe <rene@exactco.de>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pwm: bcm2835: Make sure the channel is enabled after pwm_request() [+ + +]
Author: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
Date:   Tue Nov 18 18:43:02 2025 +0100

    pwm: bcm2835: Make sure the channel is enabled after pwm_request()
    
    [ Upstream commit cda323dbda76600bf9761970d58517648f0de67d ]
    
    The .free callback cleared among others the enable bit PWENx in the
    control register. When the PWM is requested later again this bit isn't
    restored but the core assumes the PWM is enabled and thus skips a
    request to configure the same state as before.
    
    To fix that don't touch the hardware configuration in .free(). For
    symmetry also drop .request() and configure the mode completely in
    .apply().
    
    Fixes: e5a06dc5ac1f ("pwm: Add BCM2835 PWM driver")
    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://patch.msgid.link/20251118174303.1761577-2-u.kleine-koenig@baylibre.com
    Signed-off-by: Uwe Kleine-König <ukleinek@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pwm: stm32: Always program polarity [+ + +]
Author: Sean Nyekjaer <sean@geanix.com>
Date:   Thu Jan 8 13:45:23 2026 +0100

    pwm: stm32: Always program polarity
    
    Commit 7346e7a058a2 ("pwm: stm32: Always do lazy disabling") triggered a
    regression where PWM polarity changes could be ignored.
    
    stm32_pwm_set_polarity() was skipped due to a mismatch between the
    cached pwm->state.polarity and the actual hardware state, leaving the
    hardware polarity unchanged.
    
    Fixes: 7edf7369205b ("pwm: Add driver for STM32 plaftorm")
    Cc: stable@vger.kernel.org # <= 6.12
    Signed-off-by: Sean Nyekjaer <sean@geanix.com>
    Co-developed-by: Uwe Kleine-König <ukleinek@kernel.org>
    Signed-off-by: Uwe Kleine-König <ukleinek@kernel.org>

 
r8169: fix RTL8117 Wake-on-Lan in DASH mode [+ + +]
Author: René Rebe <rene@exactco.de>
Date:   Wed Dec 31 08:46:42 2025 -0500

    r8169: fix RTL8117 Wake-on-Lan in DASH mode
    
    [ Upstream commit dd75c723ef566f7f009c047f47e0eee95fe348ab ]
    
    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 <rene@exactco.de>
    Cc: stable@vger.kernel.org
    Reviewed-by: Heiner Kallweit <hkallweit1@gmail.com>
    Link: https://patch.msgid.link/20251202.194137.1647877804487085954.rene@exactco.de
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ adapted tp->dash_enabled check to tp->dash_type != RTL_DASH_NONE comparison ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rculist: Add hlist_nulls_replace_rcu() and hlist_nulls_replace_init_rcu() [+ + +]
Author: Xuanqiang Luo <luoxuanqiang@kylinos.cn>
Date:   Wed Oct 15 10:02:34 2025 +0800

    rculist: Add hlist_nulls_replace_rcu() and hlist_nulls_replace_init_rcu()
    
    [ Upstream commit 9c4609225ec1cb551006d6a03c7c4ad8cb5584c0 ]
    
    Add two functions to atomically replace RCU-protected hlist_nulls entries.
    
    Keep using WRITE_ONCE() to assign values to ->next and ->pprev, as
    mentioned in the patch below:
    commit efd04f8a8b45 ("rcu: Use WRITE_ONCE() for assignments to ->next for
    rculist_nulls")
    commit 860c8802ace1 ("rcu: Use WRITE_ONCE() for assignments to ->pprev for
    hlist_nulls")
    
    Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
    Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Xuanqiang Luo <luoxuanqiang@kylinos.cn>
    Link: https://patch.msgid.link/20251015020236.431822-2-xuanqiang.luo@linux.dev
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 1532ed0d0753 ("inet: Avoid ehash lookup race in inet_ehash_insert()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/bnxt_re: fix dma_free_coherent() pointer [+ + +]
Author: Thomas Fourier <fourier.thomas@gmail.com>
Date:   Tue Dec 30 09:51:21 2025 +0100

    RDMA/bnxt_re: fix dma_free_coherent() pointer
    
    [ Upstream commit fcd431a9627f272b4c0bec445eba365fe2232a94 ]
    
    The dma_alloc_coherent() allocates a dma-mapped buffer, pbl->pg_arr[i].
    The dma_free_coherent() should pass the same buffer to
    dma_free_coherent() and not page-aligned.
    
    Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver")
    Signed-off-by: Thomas Fourier <fourier.thomas@gmail.com>
    Link: https://patch.msgid.link/20251230085121.8023-2-fourier.thomas@gmail.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Fix IB_SEND_IP_CSUM handling in post_send [+ + +]
Author: Alok Tiwari <alok.a.tiwari@oracle.com>
Date:   Fri Dec 19 01:32:57 2025 -0800

    RDMA/bnxt_re: Fix IB_SEND_IP_CSUM handling in post_send
    
    [ Upstream commit f01765a2361323e78e3d91b1cb1d5527a83c5cf7 ]
    
    The bnxt_re SEND path checks wr->send_flags to enable features such as
    IP checksum offload. However, send_flags is a bitmask and may contain
    multiple flags (e.g. IB_SEND_SIGNALED | IB_SEND_IP_CSUM), while the
    existing code uses a switch() statement that only matches when
    send_flags is exactly IB_SEND_IP_CSUM.
    
    As a result, checksum offload is not enabled when additional SEND
    flags are present.
    
    Replace the switch() with a bitmask test:
    
        if (wr->send_flags & IB_SEND_IP_CSUM)
    
    This ensures IP checksum offload is enabled correctly when multiple
    SEND flags are used.
    
    Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver")
    Signed-off-by: Alok Tiwari <alok.a.tiwari@oracle.com>
    Link: https://patch.msgid.link/20251219093308.2415620-1-alok.a.tiwari@oracle.com
    Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Fix incorrect BAR check in bnxt_qplib_map_creq_db() [+ + +]
Author: Alok Tiwari <alok.a.tiwari@oracle.com>
Date:   Wed Dec 17 02:01:41 2025 -0800

    RDMA/bnxt_re: Fix incorrect BAR check in bnxt_qplib_map_creq_db()
    
    [ Upstream commit 145a417a39d7efbc881f52e829817376972b278c ]
    
    RCFW_COMM_CONS_PCI_BAR_REGION is defined as BAR 2, so checking
    !creq_db->reg.bar_id is incorrect and always false.
    
    pci_resource_start() returns the BAR base address, and a value of 0
    indicates that the BAR is unassigned. Update the condition to test
    bar_base == 0 instead.
    
    This ensures the driver detects and logs an error for an unassigned
    RCFW communication BAR.
    
    Fixes: cee0c7bba486 ("RDMA/bnxt_re: Refactor command queue management code")
    Signed-off-by: Alok Tiwari <alok.a.tiwari@oracle.com>
    Link: https://patch.msgid.link/20251217100158.752504-1-alok.a.tiwari@oracle.com
    Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Fix to use correct page size for PDE table [+ + +]
Author: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Date:   Tue Dec 23 18:48:55 2025 +0530

    RDMA/bnxt_re: Fix to use correct page size for PDE table
    
    [ Upstream commit 3d70e0fb0f289b0c778041c5bb04d099e1aa7c1c ]
    
    In bnxt_qplib_alloc_init_hwq(), while allocating memory for PDE table
    driver incorrectly is using the "pg_size" value passed to the function.
    Fixed to use the right value 4K. Also, fixed the allocation size for
    PBL table.
    
    Fixes: 0c4dcd602817 ("RDMA/bnxt_re: Refactor hardware queue memory allocation")
    Signed-off-by: Damodharam Ammepalli <damodharam.ammepalli@broadcom.com>
    Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Link: https://patch.msgid.link/20251223131855.145955-1-kalesh-anakkur.purayil@broadcom.com
    Reviewed-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/cm: Fix leaking the multicast GID table reference [+ + +]
Author: Jason Gunthorpe <jgg@ziepe.ca>
Date:   Fri Nov 28 20:53:21 2025 -0400

    RDMA/cm: Fix leaking the multicast GID table reference
    
    commit 57f3cb6c84159d12ba343574df2115fb18dd83ca upstream.
    
    If the CM ID is destroyed while the CM event for multicast creating is
    still queued the cancel_work_sync() will prevent the work from running
    which also prevents destroying the ah_attr. This leaks a refcount and
    triggers a WARN:
    
       GID entry ref leak for dev syz1 index 2 ref=573
       WARNING: CPU: 1 PID: 655 at drivers/infiniband/core/cache.c:809 release_gid_table drivers/infiniband/core/cache.c:806 [inline]
       WARNING: CPU: 1 PID: 655 at drivers/infiniband/core/cache.c:809 gid_table_release_one+0x284/0x3cc drivers/infiniband/core/cache.c:886
    
    Destroy the ah_attr after canceling the work, it is safe to call this
    twice.
    
    Link: https://patch.msgid.link/r/0-v1-4285d070a6b2+20a-rdma_mc_gid_leak_syz_jgg@nvidia.com
    Cc: stable@vger.kernel.org
    Fixes: fe454dc31e84 ("RDMA/ucma: Fix use-after-free bug in ucma_create_uevent")
    Reported-by: syzbot+b0da83a6c0e2e2bddbd4@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/all/68232e7b.050a0220.f2294.09f6.GAE@google.com
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
RDMA/core: Check for the presence of LS_NLA_TYPE_DGID correctly [+ + +]
Author: Jason Gunthorpe <jgg@ziepe.ca>
Date:   Fri Nov 28 13:37:28 2025 -0400

    RDMA/core: Check for the presence of LS_NLA_TYPE_DGID correctly
    
    commit a7b8e876e0ef0232b8076972c57ce9a7286b47ca upstream.
    
    The netlink response for RDMA_NL_LS_OP_IP_RESOLVE should always have a
    LS_NLA_TYPE_DGID attribute, it is invalid if it does not.
    
    Use the nl parsing logic properly and call nla_parse_deprecated() to fill
    the nlattrs array and then directly index that array to get the data for
    the DGID. Just fail if it is NULL.
    
    Remove the for loop searching for the nla, and squash the validation and
    parsing into one function.
    
    Fixes an uninitialized read from the stack triggered by userspace if it
    does not provide the DGID to a kernel initiated RDMA_NL_LS_OP_IP_RESOLVE
    query.
    
        BUG: KMSAN: uninit-value in hex_byte_pack include/linux/hex.h:13 [inline]
        BUG: KMSAN: uninit-value in ip6_string+0xef4/0x13a0 lib/vsprintf.c:1490
         hex_byte_pack include/linux/hex.h:13 [inline]
         ip6_string+0xef4/0x13a0 lib/vsprintf.c:1490
         ip6_addr_string+0x18a/0x3e0 lib/vsprintf.c:1509
         ip_addr_string+0x245/0xee0 lib/vsprintf.c:1633
         pointer+0xc09/0x1bd0 lib/vsprintf.c:2542
         vsnprintf+0xf8a/0x1bd0 lib/vsprintf.c:2930
         vprintk_store+0x3ae/0x1530 kernel/printk/printk.c:2279
         vprintk_emit+0x307/0xcd0 kernel/printk/printk.c:2426
         vprintk_default+0x3f/0x50 kernel/printk/printk.c:2465
         vprintk+0x36/0x50 kernel/printk/printk_safe.c:82
         _printk+0x17e/0x1b0 kernel/printk/printk.c:2475
         ib_nl_process_good_ip_rsep drivers/infiniband/core/addr.c:128 [inline]
         ib_nl_handle_ip_res_resp+0x963/0x9d0 drivers/infiniband/core/addr.c:141
         rdma_nl_rcv_msg drivers/infiniband/core/netlink.c:-1 [inline]
         rdma_nl_rcv_skb drivers/infiniband/core/netlink.c:239 [inline]
         rdma_nl_rcv+0xefa/0x11c0 drivers/infiniband/core/netlink.c:259
         netlink_unicast_kernel net/netlink/af_netlink.c:1320 [inline]
         netlink_unicast+0xf04/0x12b0 net/netlink/af_netlink.c:1346
         netlink_sendmsg+0x10b3/0x1250 net/netlink/af_netlink.c:1896
         sock_sendmsg_nosec net/socket.c:714 [inline]
         __sock_sendmsg+0x333/0x3d0 net/socket.c:729
         ____sys_sendmsg+0x7e0/0xd80 net/socket.c:2617
         ___sys_sendmsg+0x271/0x3b0 net/socket.c:2671
         __sys_sendmsg+0x1aa/0x300 net/socket.c:2703
         __compat_sys_sendmsg net/compat.c:346 [inline]
         __do_compat_sys_sendmsg net/compat.c:353 [inline]
         __se_compat_sys_sendmsg net/compat.c:350 [inline]
         __ia32_compat_sys_sendmsg+0xa4/0x100 net/compat.c:350
         ia32_sys_call+0x3f6c/0x4310 arch/x86/include/generated/asm/syscalls_32.h:371
         do_syscall_32_irqs_on arch/x86/entry/syscall_32.c:83 [inline]
         __do_fast_syscall_32+0xb0/0x150 arch/x86/entry/syscall_32.c:306
         do_fast_syscall_32+0x38/0x80 arch/x86/entry/syscall_32.c:331
         do_SYSENTER_32+0x1f/0x30 arch/x86/entry/syscall_32.c:3
    
    Link: https://patch.msgid.link/r/0-v1-3fbaef094271+2cf-rdma_op_ip_rslv_syz_jgg@nvidia.com
    Cc: stable@vger.kernel.org
    Fixes: ae43f8286730 ("IB/core: Add IP to GID netlink offload")
    Reported-by: syzbot+938fcd548c303fe33c1a@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/r/68dc3dac.a00a0220.102ee.004f.GAE@google.com
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

RDMA/core: Fix "KASAN: slab-use-after-free Read in ib_register_device" problem [+ + +]
Author: Zhu Yanjun <yanjun.zhu@linux.dev>
Date:   Tue May 6 17:10:08 2025 +0200

    RDMA/core: Fix "KASAN: slab-use-after-free Read in ib_register_device" problem
    
    commit d0706bfd3ee40923c001c6827b786a309e2a8713 upstream.
    
    Call Trace:
    
     __dump_stack lib/dump_stack.c:94 [inline]
     dump_stack_lvl+0x116/0x1f0 lib/dump_stack.c:120
     print_address_description mm/kasan/report.c:408 [inline]
     print_report+0xc3/0x670 mm/kasan/report.c:521
     kasan_report+0xe0/0x110 mm/kasan/report.c:634
     strlen+0x93/0xa0 lib/string.c:420
     __fortify_strlen include/linux/fortify-string.h:268 [inline]
     get_kobj_path_length lib/kobject.c:118 [inline]
     kobject_get_path+0x3f/0x2a0 lib/kobject.c:158
     kobject_uevent_env+0x289/0x1870 lib/kobject_uevent.c:545
     ib_register_device drivers/infiniband/core/device.c:1472 [inline]
     ib_register_device+0x8cf/0xe00 drivers/infiniband/core/device.c:1393
     rxe_register_device+0x275/0x320 drivers/infiniband/sw/rxe/rxe_verbs.c:1552
     rxe_net_add+0x8e/0xe0 drivers/infiniband/sw/rxe/rxe_net.c:550
     rxe_newlink+0x70/0x190 drivers/infiniband/sw/rxe/rxe.c:225
     nldev_newlink+0x3a3/0x680 drivers/infiniband/core/nldev.c:1796
     rdma_nl_rcv_msg+0x387/0x6e0 drivers/infiniband/core/netlink.c:195
     rdma_nl_rcv_skb.constprop.0.isra.0+0x2e5/0x450
     netlink_unicast_kernel net/netlink/af_netlink.c:1313 [inline]
     netlink_unicast+0x53a/0x7f0 net/netlink/af_netlink.c:1339
     netlink_sendmsg+0x8d1/0xdd0 net/netlink/af_netlink.c:1883
     sock_sendmsg_nosec net/socket.c:712 [inline]
     __sock_sendmsg net/socket.c:727 [inline]
     ____sys_sendmsg+0xa95/0xc70 net/socket.c:2566
     ___sys_sendmsg+0x134/0x1d0 net/socket.c:2620
     __sys_sendmsg+0x16d/0x220 net/socket.c:2652
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xcd/0x260 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    This problem is similar to the problem that the
    commit 1d6a9e7449e2 ("RDMA/core: Fix use-after-free when rename device name")
    fixes.
    
    The root cause is: the function ib_device_rename() renames the name with
    lock. But in the function kobject_uevent(), this name is accessed without
    lock protection at the same time.
    
    The solution is to add the lock protection when this name is accessed in
    the function kobject_uevent().
    
    Fixes: 779e0bf47632 ("RDMA/core: Do not indicate device ready when device enablement fails")
    Link: https://patch.msgid.link/r/20250506151008.75701-1-yanjun.zhu@linux.dev
    Reported-by: syzbot+e2ce9e275ecc70a30b72@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=e2ce9e275ecc70a30b72
    Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    [ Ajay: Modified to apply on v5.10.y-v6.6.y
            ib_device_notify_register() not present in v5.10.y-v6.6.y,
            so directly added lock for kobject_uevent() ]
    Signed-off-by: Ajay Kaher <ajay.kaher@broadcom.com>
    Signed-off-by: Shivani Agarwal <shivani.agarwal@broadcom.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

RDMA/core: Fix logic error in ib_get_gids_from_rdma_hdr() [+ + +]
Author: Jang Ingyu <ingyujang25@korea.ac.kr>
Date:   Fri Dec 19 13:15:08 2025 +0900

    RDMA/core: Fix logic error in ib_get_gids_from_rdma_hdr()
    
    [ Upstream commit 8aaa848eaddd9ef8680fc6aafbd3a0646da5df40 ]
    
    Fix missing comparison operator for RDMA_NETWORK_ROCE_V1 in the
    conditional statement. The constant was used directly instead of
    being compared with net_type, causing the condition to always
    evaluate to true.
    
    Fixes: 1c15b4f2a42f ("RDMA/core: Modify enum ib_gid_type and enum rdma_network_type")
    Signed-off-by: Jang Ingyu <ingyujang25@korea.ac.kr>
    Link: https://patch.msgid.link/20251219041508.1725947-1-ingyujang25@korea.ac.kr
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/efa: Remove possible negative shift [+ + +]
Author: Michael Margolin <mrgolin@amazon.com>
Date:   Wed Dec 10 17:36:56 2025 +0000

    RDMA/efa: Remove possible negative shift
    
    [ Upstream commit 85463eb6a46caf2f1e0e1a6d0731f2f3bab17780 ]
    
    The page size used for device might in some cases be smaller than
    PAGE_SIZE what results in a negative shift when calculating the number of
    host pages in PAGE_SIZE for a debug log. Remove the debug line together
    with the calculation.
    
    Fixes: 40909f664d27 ("RDMA/efa: Add EFA verbs implementation")
    Link: https://patch.msgid.link/r/20251210173656.8180-1-mrgolin@amazon.com
    Reviewed-by: Tom Sela <tomsela@amazon.com>
    Reviewed-by: Yonatan Nachum <ynachum@amazon.com>
    Signed-off-by: Michael Margolin <mrgolin@amazon.com>
    Reviewed-by: Gal Pressman <gal.pressman@linux.dev>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/irdma: avoid invalid read in irdma_net_event [+ + +]
Author: Michal Schmidt <mschmidt@redhat.com>
Date:   Thu Nov 27 15:31:50 2025 +0100

    RDMA/irdma: avoid invalid read in irdma_net_event
    
    [ Upstream commit 6f05611728e9d0ab024832a4f1abb74a5f5d0bb0 ]
    
    irdma_net_event() should not dereference anything from "neigh" (alias
    "ptr") until it has checked that the event is NETEVENT_NEIGH_UPDATE.
    Other events come with different structures pointed to by "ptr" and they
    may be smaller than struct neighbour.
    
    Move the read of neigh->dev under the NETEVENT_NEIGH_UPDATE case.
    
    The bug is mostly harmless, but it triggers KASAN on debug kernels:
    
     BUG: KASAN: stack-out-of-bounds in irdma_net_event+0x32e/0x3b0 [irdma]
     Read of size 8 at addr ffffc900075e07f0 by task kworker/27:2/542554
    
     CPU: 27 PID: 542554 Comm: kworker/27:2 Kdump: loaded Not tainted 5.14.0-630.el9.x86_64+debug #1
     Hardware name: [...]
     Workqueue: events rt6_probe_deferred
     Call Trace:
      <IRQ>
      dump_stack_lvl+0x60/0xb0
      print_address_description.constprop.0+0x2c/0x3f0
      print_report+0xb4/0x270
      kasan_report+0x92/0xc0
      irdma_net_event+0x32e/0x3b0 [irdma]
      notifier_call_chain+0x9e/0x180
      atomic_notifier_call_chain+0x5c/0x110
      rt6_do_redirect+0xb91/0x1080
      tcp_v6_err+0xe9b/0x13e0
      icmpv6_notify+0x2b2/0x630
      ndisc_redirect_rcv+0x328/0x530
      icmpv6_rcv+0xc16/0x1360
      ip6_protocol_deliver_rcu+0xb84/0x12e0
      ip6_input_finish+0x117/0x240
      ip6_input+0xc4/0x370
      ipv6_rcv+0x420/0x7d0
      __netif_receive_skb_one_core+0x118/0x1b0
      process_backlog+0xd1/0x5d0
      __napi_poll.constprop.0+0xa3/0x440
      net_rx_action+0x78a/0xba0
      handle_softirqs+0x2d4/0x9c0
      do_softirq+0xad/0xe0
      </IRQ>
    
    Fixes: 915cc7ac0f8e ("RDMA/irdma: Add miscellaneous utility definitions")
    Link: https://patch.msgid.link/r/20251127143150.121099-1-mschmidt@redhat.com
    Signed-off-by: Michal Schmidt <mschmidt@redhat.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/irdma: Fix data race in irdma_free_pble [+ + +]
Author: Krzysztof Czurylo <krzysztof.czurylo@intel.com>
Date:   Mon Nov 24 20:53:43 2025 -0600

    RDMA/irdma: Fix data race in irdma_free_pble
    
    [ Upstream commit 81f44409fb4f027d1e6d54edbeba5156ad94b214 ]
    
    Protects pble_rsrc counters with mutex to prevent data race.
    Fixes the following data race in irdma_free_pble reported by KCSAN:
    
    BUG: KCSAN: data-race in irdma_free_pble [irdma] / irdma_free_pble [irdma]
    
    write to 0xffff91430baa0078 of 8 bytes by task 16956 on cpu 5:
     irdma_free_pble+0x3b/0xb0 [irdma]
     irdma_dereg_mr+0x108/0x110 [irdma]
     ib_dereg_mr_user+0x74/0x160 [ib_core]
     uverbs_free_mr+0x26/0x30 [ib_uverbs]
     destroy_hw_idr_uobject+0x4a/0x90 [ib_uverbs]
     uverbs_destroy_uobject+0x7b/0x330 [ib_uverbs]
     uobj_destroy+0x61/0xb0 [ib_uverbs]
     ib_uverbs_run_method+0x1f2/0x380 [ib_uverbs]
     ib_uverbs_cmd_verbs+0x365/0x440 [ib_uverbs]
     ib_uverbs_ioctl+0x111/0x190 [ib_uverbs]
     __x64_sys_ioctl+0xc9/0x100
     do_syscall_64+0x44/0xa0
     entry_SYSCALL_64_after_hwframe+0x6e/0xd8
    
    read to 0xffff91430baa0078 of 8 bytes by task 16953 on cpu 2:
     irdma_free_pble+0x23/0xb0 [irdma]
     irdma_dereg_mr+0x108/0x110 [irdma]
     ib_dereg_mr_user+0x74/0x160 [ib_core]
     uverbs_free_mr+0x26/0x30 [ib_uverbs]
     destroy_hw_idr_uobject+0x4a/0x90 [ib_uverbs]
     uverbs_destroy_uobject+0x7b/0x330 [ib_uverbs]
     uobj_destroy+0x61/0xb0 [ib_uverbs]
     ib_uverbs_run_method+0x1f2/0x380 [ib_uverbs]
     ib_uverbs_cmd_verbs+0x365/0x440 [ib_uverbs]
     ib_uverbs_ioctl+0x111/0x190 [ib_uverbs]
     __x64_sys_ioctl+0xc9/0x100
     do_syscall_64+0x44/0xa0
     entry_SYSCALL_64_after_hwframe+0x6e/0xd8
    
    value changed: 0x0000000000005a62 -> 0x0000000000005a68
    
    Fixes: e8c4dbc2fcac ("RDMA/irdma: Add PBLE resource manager")
    Signed-off-by: Krzysztof Czurylo <krzysztof.czurylo@intel.com>
    Signed-off-by: Tatyana Nikolova <tatyana.e.nikolova@intel.com>
    Link: https://patch.msgid.link/20251125025350.180-3-tatyana.e.nikolova@intel.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/irdma: Fix data race in irdma_sc_ccq_arm [+ + +]
Author: Krzysztof Czurylo <krzysztof.czurylo@intel.com>
Date:   Mon Nov 24 20:53:42 2025 -0600

    RDMA/irdma: Fix data race in irdma_sc_ccq_arm
    
    [ Upstream commit a521928164433de44fed5aaf5f49aeb3f1fb96f5 ]
    
    Adds a lock around irdma_sc_ccq_arm body to prevent inter-thread data race.
    Fixes data race in irdma_sc_ccq_arm() reported by KCSAN:
    
    BUG: KCSAN: data-race in irdma_sc_ccq_arm [irdma] / irdma_sc_ccq_arm [irdma]
    
    read to 0xffff9d51b4034220 of 8 bytes by task 255 on cpu 11:
     irdma_sc_ccq_arm+0x36/0xd0 [irdma]
     irdma_cqp_ce_handler+0x300/0x310 [irdma]
     cqp_compl_worker+0x2a/0x40 [irdma]
     process_one_work+0x402/0x7e0
     worker_thread+0xb3/0x6d0
     kthread+0x178/0x1a0
     ret_from_fork+0x2c/0x50
    
    write to 0xffff9d51b4034220 of 8 bytes by task 89 on cpu 3:
     irdma_sc_ccq_arm+0x7e/0xd0 [irdma]
     irdma_cqp_ce_handler+0x300/0x310 [irdma]
     irdma_wait_event+0xd4/0x3e0 [irdma]
     irdma_handle_cqp_op+0xa5/0x220 [irdma]
     irdma_hw_flush_wqes+0xb1/0x300 [irdma]
     irdma_flush_wqes+0x22e/0x3a0 [irdma]
     irdma_cm_disconn_true+0x4c7/0x5d0 [irdma]
     irdma_disconnect_worker+0x35/0x50 [irdma]
     process_one_work+0x402/0x7e0
     worker_thread+0xb3/0x6d0
     kthread+0x178/0x1a0
     ret_from_fork+0x2c/0x50
    
    value changed: 0x0000000000024000 -> 0x0000000000034000
    
    Fixes: 3f49d6842569 ("RDMA/irdma: Implement HW Admin Queue OPs")
    Signed-off-by: Krzysztof Czurylo <krzysztof.czurylo@intel.com>
    Signed-off-by: Tatyana Nikolova <tatyana.e.nikolova@intel.com>
    Link: https://patch.msgid.link/20251125025350.180-2-tatyana.e.nikolova@intel.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/rtrs: Fix clt_path::max_pages_per_mr calculation [+ + +]
Author: Honggang LI <honggangli@163.com>
Date:   Mon Dec 29 10:56:17 2025 +0800

    RDMA/rtrs: Fix clt_path::max_pages_per_mr calculation
    
    [ Upstream commit 43bd09d5b750f700499ae8ec45fd41a4c48673e6 ]
    
    If device max_mr_size bits in the range [mr_page_shift+31:mr_page_shift]
    are zero, the `min3` function will set clt_path::max_pages_per_mr to
    zero.
    
    `alloc_path_reqs` will pass zero, which is invalid, as the third parameter
    to `ib_alloc_mr`.
    
    Fixes: 6a98d71daea1 ("RDMA/rtrs: client: main functionality")
    Signed-off-by: Honggang LI <honggangli@163.com>
    Link: https://patch.msgid.link/20251229025617.13241-1-honggangli@163.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/rtrs: server: Fix error handling in get_or_create_srv [+ + +]
Author: Ma Ke <make24@iscas.ac.cn>
Date:   Mon Nov 10 08:51:58 2025 +0800

    RDMA/rtrs: server: Fix error handling in get_or_create_srv
    
    [ Upstream commit a338d6e849ab31f32c08b4fcac11c0c72afbb150 ]
    
    After device_initialize() is called, use put_device() to release the
    device according to kernel device management rules. While direct
    kfree() work in this case, using put_device() is more correct.
    
    Found by code review.
    
    Fixes: 9cb837480424 ("RDMA/rtrs: server: main functionality")
    Signed-off-by: Ma Ke <make24@iscas.ac.cn>
    Link: https://patch.msgid.link/20251110005158.13394-1-make24@iscas.ac.cn
    Acked-by: Jack Wang <jinpu.wang@ionos.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
regulator: core: disable supply if enabling main regulator fails [+ + +]
Author: Gabor Juhos <j4g8y7@gmail.com>
Date:   Fri Nov 7 18:10:08 2025 +0100

    regulator: core: disable supply if enabling main regulator fails
    
    [ Upstream commit fb1ebb10468da414d57153ddebaab29c38ef1a78 ]
    
    For 'always-on' and 'boot-on' regulators, the set_machine_constraints()
    may enable supply before enabling the main regulator, however if the
    latter fails, the function returns with an error but the supply remains
    enabled.
    
    When this happens, the regulator_register() function continues on the
    error path where it puts the supply regulator. Since enabling the supply
    is not balanced with a disable call, a warning similar to the following
    gets issued from _regulator_put():
    
        [    1.603889] WARNING: CPU: 2 PID: 44 at _regulator_put+0x8c/0xa0
        [    1.603908] Modules linked in:
        [    1.603926] CPU: 2 UID: 0 PID: 44 Comm: kworker/u16:3 Not tainted 6.18.0-rc4 #0 NONE
        [    1.603938] Hardware name: Qualcomm Technologies, Inc. IPQ9574/AP-AL02-C7 (DT)
        [    1.603945] Workqueue: async async_run_entry_fn
        [    1.603958] pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
        [    1.603967] pc : _regulator_put+0x8c/0xa0
        [    1.603976] lr : _regulator_put+0x7c/0xa0
        ...
        [    1.604140] Call trace:
        [    1.604145]  _regulator_put+0x8c/0xa0 (P)
        [    1.604156]  regulator_register+0x2ec/0xbf0
        [    1.604166]  devm_regulator_register+0x60/0xb0
        [    1.604178]  rpm_reg_probe+0x120/0x208
        [    1.604187]  platform_probe+0x64/0xa8
        ...
    
    In order to avoid this, change the set_machine_constraints() function to
    disable the supply if enabling the main regulator fails.
    
    Fixes: 05f224ca6693 ("regulator: core: Clean enabling always-on regulators + their supplies")
    Signed-off-by: Gabor Juhos <j4g8y7@gmail.com>
    Link: https://patch.msgid.link/20251107-regulator-disable-supply-v1-1-c95f0536f1b5@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

regulator: core: Protect regulator_supply_alias_list with regulator_list_mutex [+ + +]
Author: sparkhuang <huangshaobo3@xiaomi.com>
Date:   Thu Nov 27 10:57:16 2025 +0800

    regulator: core: Protect regulator_supply_alias_list with regulator_list_mutex
    
    [ Upstream commit 0cc15a10c3b4ab14cd71b779fd5c9ca0cb2bc30d ]
    
    regulator_supply_alias_list was accessed without any locking in
    regulator_supply_alias(), regulator_register_supply_alias(), and
    regulator_unregister_supply_alias(). Concurrent registration,
    unregistration and lookups can race, leading to:
    
    1 use-after-free if an alias entry is removed while being read,
    2 duplicate entries when two threads register the same alias,
    3 inconsistent alias mappings observed by consumers.
    
    Protect all traversals, insertions and deletions on
    regulator_supply_alias_list with the existing regulator_list_mutex.
    
    Fixes: a06ccd9c3785f ("regulator: core: Add ability to create a lookup alias for supply")
    Signed-off-by: sparkhuang <huangshaobo3@xiaomi.com>
    Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
    Link: https://patch.msgid.link/20251127025716.5440-1-huangshaobo3@xiaomi.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
remoteproc: qcom_q6v5_wcss: fix parsing of qcom,halt-regs [+ + +]
Author: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Date:   Fri Nov 28 19:32:05 2025 -0600

    remoteproc: qcom_q6v5_wcss: fix parsing of qcom,halt-regs
    
    [ Upstream commit 7e81fa8d809ed1e67ae9ecd52d20a20c2c65d877 ]
    
    The "qcom,halt-regs" consists of a phandle reference followed by the
    three offsets within syscon for halt registers. Thus, we need to
    request 4 integers from of_property_read_variable_u32_array(), with
    the halt_reg ofsets at indexes 1, 2, and 3. Offset 0 is the phandle.
    
    With MAX_HALT_REG at 3, of_property_read_variable_u32_array() returns
    -EOVERFLOW, causing .probe() to fail.
    
    Increase MAX_HALT_REG to 4, and update the indexes accordingly.
    
    Fixes: 0af65b9b915e ("remoteproc: qcom: wcss: Add non pas wcss Q6 support for QCS404")
    Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
    Link: https://lore.kernel.org/r/20251129013207.3981517-1-mr.nuke.me@gmail.com
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Revert "iommu/amd: Skip enabling command/event buffers for kdump" [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Fri Jan 9 11:48:34 2026 +0100

    Revert "iommu/amd: Skip enabling command/event buffers for kdump"
    
    This reverts commit bb8f9de71c9bd442ec5e1d52ce830428860892f0 which is
    commit 9be15fbfc6c5c89c22cf6e209f66ea43ee0e58bb upstream.
    
    This causes problems in older kernel trees as SNP host kdump is not
    supported in them, so drop it from the stable branches.
    
    Reported-by: Ashish Kalra <ashish.kalra@amd.com>
    Link: https://lore.kernel.org/r/dacdff7f-0606-4ed5-b056-2de564404d51@amd.com
    Cc: Vasant Hegde <vasant.hegde@amd.com>
    Cc: Sairaj Kodilkar <sarunkod@amd.com>
    Cc: Joerg Roedel <joerg.roedel@amd.com>
    Cc: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "nfs: clear SB_RDONLY before getting superblock" [+ + +]
Author: Trond Myklebust <trond.myklebust@hammerspace.com>
Date:   Fri Nov 28 13:39:38 2025 -0500

    Revert "nfs: clear SB_RDONLY before getting superblock"
    
    [ Upstream commit d216b698d44e33417ad4cc796cb04ccddbb8c0ee ]
    
    This reverts commit 8cd9b785943c57a136536250da80ba1eb6f8eb18.
    
    Silently ignoring the "ro" and "rw" mount options causes user confusion,
    and regressions.
    
    Reported-by: Alkis Georgopoulos<alkisg@gmail.com>
    Cc: Li Lingfeng <lilingfeng3@huawei.com>
    Fixes: 8cd9b785943c ("nfs: clear SB_RDONLY before getting superblock")
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Revert "nfs: ignore SB_RDONLY when mounting nfs" [+ + +]
Author: Trond Myklebust <trond.myklebust@hammerspace.com>
Date:   Fri Nov 28 13:39:45 2025 -0500

    Revert "nfs: ignore SB_RDONLY when mounting nfs"
    
    [ Upstream commit d4a26d34f1946142f9d32e540490e4926ae9a46b ]
    
    This reverts commit 52cb7f8f177878b4f22397b9c4d2c8f743766be3.
    
    Silently ignoring the "ro" and "rw" mount options causes user confusion,
    and regressions.
    
    Reported-by: Alkis Georgopoulos<alkisg@gmail.com>
    Cc: Li Lingfeng <lilingfeng3@huawei.com>
    Fixes: 52cb7f8f1778 ("nfs: ignore SB_RDONLY when mounting nfs")
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Revert "nfs: ignore SB_RDONLY when remounting nfs" [+ + +]
Author: Trond Myklebust <trond.myklebust@hammerspace.com>
Date:   Fri Nov 28 13:39:07 2025 -0500

    Revert "nfs: ignore SB_RDONLY when remounting nfs"
    
    [ Upstream commit 400fa37afbb11a601c204b72af0f0e5bc2db695c ]
    
    This reverts commit 80c4de6ab44c14e910117a02f2f8241ffc6ec54a.
    
    Silently ignoring the "ro" and "rw" mount options causes user confusion,
    and regressions.
    
    Reported-by: Alkis Georgopoulos<alkisg@gmail.com>
    Cc: Li Lingfeng <lilingfeng3@huawei.com>
    Fixes: 80c4de6ab44c ("nfs: ignore SB_RDONLY when remounting nfs")
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Revert "xfrm: destroy xfrm_state synchronously on net exit path" [+ + +]
Author: Sabrina Dubroca <sd@queasysnail.net>
Date:   Tue Jul 29 17:11:53 2025 -0400

    Revert "xfrm: destroy xfrm_state synchronously on net exit path"
    
    [ Upstream commit 2a198bbec6913ae1c90ec963750003c6213668c7 ]
    
    This reverts commit f75a2804da391571563c4b6b29e7797787332673.
    
    With all states (whether user or kern) removed from the hashtables
    during deletion, there's no need for synchronous destruction of
    states. xfrm6_tunnel states still need to have been destroyed (which
    will be the case when its last user is deleted (not destroyed)) so
    that xfrm6_tunnel_free_spi removes it from the per-netns hashtable
    before the netns is destroyed.
    
    This has the benefit of skipping one synchronize_rcu per state (in
    __xfrm_state_destroy(sync=true)) when we exit a netns.
    
    Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rpmsg: glink: fix rpmsg device leak [+ + +]
Author: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
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: Stable@vger.kernel.org
    Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
    Link: https://lore.kernel.org/r/20250822100043.2604794-2-srinivas.kandagatla@oss.qualcomm.com
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
s390/ap: Don't leak debug feature files if AP instructions are not available [+ + +]
Author: Heiko Carstens <hca@linux.ibm.com>
Date:   Fri Oct 24 12:24:33 2025 +0200

    s390/ap: Don't leak debug feature files if AP instructions are not available
    
    [ Upstream commit 020d5dc57874e58d3ebae398f3fe258f029e3d06 ]
    
    If no AP instructions are available the AP bus module leaks registered
    debug feature files. Change function call order to fix this.
    
    Fixes: cccd85bfb7bf ("s390/zcrypt: Rework debug feature invocations.")
    Reviewed-by: Harald Freudenberger <freude@linux.ibm.com>
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/smp: Fix fallback CPU detection [+ + +]
Author: Heiko Carstens <hca@linux.ibm.com>
Date:   Mon Oct 20 16:17:54 2025 +0200

    s390/smp: Fix fallback CPU detection
    
    [ Upstream commit 07a75d08cfa1b883a6e1256666e5f0617ee99231 ]
    
    In case SCLP CPU detection does not work a fallback mechanism using SIGP is
    in place. Since a cleanup this does not work correctly anymore: new CPUs
    are only considered if their type matches the boot CPU.
    
    Before the cleanup the information if a CPU type should be considered was
    also part of a structure generated by the fallback mechanism and indicated
    that a CPU type should not be considered when adding CPUs.
    
    Since the rework a global SCLP state is used instead. If the global SCLP
    state indicates that the CPU type should be considered and the fallback
    mechanism is used, there may be a mismatch with CPU types if CPUs are
    added. This can lead to a system with only a single CPU even tough there
    are many more CPUs.
    
    Address this by simply copying the boot cpu type into the generated data
    structure from the fallback mechanism.
    
    Reported-by: Alexander Egorenkov <egorenar@linux.ibm.com>
    Fixes: d08d94306e90 ("s390/smp: cleanup core vs. cpu in the SCLP interface")
    Reviewed-by: Mete Durlu <meted@linux.ibm.com>
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sched/deadline: only set free_cpus for online runqueues [+ + +]
Author: Doug Berger <opendmb@gmail.com>
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/20250110233010.2339521-1-opendmb@gmail.com
    
    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 <opendmb@gmail.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
scs: fix a wrong parameter in __scs_magic [+ + +]
Author: Zhichi Lin <zhichi.lin@vivo.com>
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/20251011082222.12965-1-zhichi.lin@vivo.com
    Fixes: 5bbaf9d1fcb9 ("scs: Add support for stack usage debugging")
    Signed-off-by: Jiyuan Xie <xiejiyuan@vivo.com>
    Signed-off-by: Zhichi Lin <zhichi.lin@vivo.com>
    Reviewed-by: Sami Tolvanen <samitolvanen@google.com>
    Acked-by: Will Deacon <will@kernel.org>
    Cc: Andrey Konovalov <andreyknvl@gmail.com>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Marco Elver <elver@google.com>
    Cc: Will Deacon <will@kernel.org>
    Cc: Yee Lee <yee.lee@mediatek.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
scsi: aic94xx: fix use-after-free in device removal path [+ + +]
Author: Junrui Luo <moonafterrain@outlook.com>
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 <danisjiang@gmail.com>
    Reported-by: Junrui Luo <moonafterrain@outlook.com>
    Fixes: 2908d778ab3e ("[SCSI] aic94xx: new driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Junrui Luo <moonafterrain@outlook.com>
    Link: https://patch.msgid.link/ME2PR01MB3156AB7DCACA206C845FC7E8AFFDA@ME2PR01MB3156.ausprd01.prod.outlook.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: ipr: Enable/disable IRQD_NO_BALANCING during reset [+ + +]
Author: Wen Xiong <wenxiong@linux.ibm.com>
Date:   Tue Oct 28 09:24:26 2025 -0500

    scsi: ipr: Enable/disable IRQD_NO_BALANCING during reset
    
    [ Upstream commit 6ac3484fb13b2fc7f31cfc7f56093e7d0ce646a5 ]
    
    A dynamic remove/add storage adapter test hits EEH on PowerPC:
    
      EEH: [c00000000004f75c] __eeh_send_failure_event+0x7c/0x160
      EEH: [c000000000048444] eeh_dev_check_failure.part.0+0x254/0x650
      EEH: [c008000001650678] eeh_readl+0x60/0x90 [ipr]
      EEH: [c00800000166746c] ipr_cancel_op+0x2b8/0x524 [ipr]
      EEH: [c008000001656524] ipr_eh_abort+0x6c/0x130 [ipr]
      EEH: [c000000000ab0d20] scmd_eh_abort_handler+0x140/0x440
      EEH: [c00000000017e558] process_one_work+0x298/0x590
      EEH: [c00000000017eef8] worker_thread+0xa8/0x620
      EEH: [c00000000018be34] kthread+0x124/0x130
      EEH: [c00000000000cd64] ret_from_kernel_thread+0x5c/0x64
    
    A PCIe bus trace reveals that a vector of MSI-X is cleared to 0 by
    irqbalance daemon. If we disable irqbalance daemon, we won't see the
    issue.
    
    With debug enabled in ipr driver:
    
      [   44.103071] ipr: Entering __ipr_remove
      [   44.103083] ipr: Entering ipr_initiate_ioa_bringdown
      [   44.103091] ipr: Entering ipr_reset_shutdown_ioa
      [   44.103099] ipr: Leaving ipr_reset_shutdown_ioa
      [   44.103105] ipr: Leaving ipr_initiate_ioa_bringdown
      [   44.149918] ipr: Entering ipr_reset_ucode_download
      [   44.149935] ipr: Entering ipr_reset_alert
      [   44.150032] ipr: Entering ipr_reset_start_timer
      [   44.150038] ipr: Leaving ipr_reset_alert
      [   44.244343] scsi 1:2:3:0: alua: Detached
      [   44.254300] ipr: Entering ipr_reset_start_bist
      [   44.254320] ipr: Entering ipr_reset_start_timer
      [   44.254325] ipr: Leaving ipr_reset_start_bist
      [   44.364329] scsi 1:2:4:0: alua: Detached
      [   45.134341] scsi 1:2:5:0: alua: Detached
      [   45.860949] ipr: Entering ipr_reset_shutdown_ioa
      [   45.860962] ipr: Leaving ipr_reset_shutdown_ioa
      [   45.860966] ipr: Entering ipr_reset_alert
      [   45.861028] ipr: Entering ipr_reset_start_timer
      [   45.861035] ipr: Leaving ipr_reset_alert
      [   45.964302] ipr: Entering ipr_reset_start_bist
      [   45.964309] ipr: Entering ipr_reset_start_timer
      [   45.964313] ipr: Leaving ipr_reset_start_bist
      [   46.264301] ipr: Entering ipr_reset_bist_done
      [   46.264309] ipr: Leaving ipr_reset_bist_done
    
    During adapter reset, ipr device driver blocks config space access but
    can't block MMIO access for MSI-X entries.  There is very small window:
    irqbalance daemon kicks in during adapter reset before ipr driver calls
    pci_restore_state(pdev) to restore MSI-X table.
    
    irqbalance daemon reads back all 0 for that MSI-X vector in
    __pci_read_msi_msg().
    
    irqbalance daemon:
    
      msi_domain_set_affinity()
      ->irq_chip_set_affinity_patent()
      ->xive_irq_set_affinity()
      ->irq_chip_compose_msi_msg()
        ->pseries_msi_compose_msg()
        ->__pci_read_msi_msg(): read all 0 since didn't call pci_restore_state
      ->irq_chip_write_msi_msg()
        -> pci_write_msg_msi(): write 0 to the msix vector entry
    
    When ipr driver calls pci_restore_state(pdev) in
    ipr_reset_restore_cfg_space(), the MSI-X vector entry has been cleared
    by irqbalance daemon in pci_write_msg_msix().
    
      pci_restore_state()
      ->__pci_restore_msix_state()
    
    Below is the MSI-X table for ipr adapter after irqbalance daemon kicked
    in during adapter reset:
    
      Dump MSIx table: index=0 address_lo=c800 address_hi=10000000 msg_data=0
      Dump MSIx table: index=1 address_lo=c810 address_hi=10000000 msg_data=0
      Dump MSIx table: index=2 address_lo=c820 address_hi=10000000 msg_data=0
      Dump MSIx table: index=3 address_lo=c830 address_hi=10000000 msg_data=0
      Dump MSIx table: index=4 address_lo=c840 address_hi=10000000 msg_data=0
      Dump MSIx table: index=5 address_lo=c850 address_hi=10000000 msg_data=0
      Dump MSIx table: index=6 address_lo=c860 address_hi=10000000 msg_data=0
      Dump MSIx table: index=7 address_lo=c870 address_hi=10000000 msg_data=0
      Dump MSIx table: index=8 address_lo=0 address_hi=0 msg_data=0
      ---------> Hit EEH since msix vector of index=8 are 0
      Dump MSIx table: index=9 address_lo=c890 address_hi=10000000 msg_data=0
      Dump MSIx table: index=10 address_lo=c8a0 address_hi=10000000 msg_data=0
      Dump MSIx table: index=11 address_lo=c8b0 address_hi=10000000 msg_data=0
      Dump MSIx table: index=12 address_lo=c8c0 address_hi=10000000 msg_data=0
      Dump MSIx table: index=13 address_lo=c8d0 address_hi=10000000 msg_data=0
      Dump MSIx table: index=14 address_lo=c8e0 address_hi=10000000 msg_data=0
      Dump MSIx table: index=15 address_lo=c8f0 address_hi=10000000 msg_data=0
    
      [   46.264312] ipr: Entering ipr_reset_restore_cfg_space
      [   46.267439] ipr: Entering ipr_fail_all_ops
      [   46.267447] ipr: Leaving ipr_fail_all_ops
      [   46.267451] ipr: Leaving ipr_reset_restore_cfg_space
      [   46.267454] ipr: Entering ipr_ioa_bringdown_done
      [   46.267458] ipr: Leaving ipr_ioa_bringdown_done
      [   46.267467] ipr: Entering ipr_worker_thread
      [   46.267470] ipr: Leaving ipr_worker_thread
    
    IRQ balancing is not required during adapter reset.
    
    Enable "IRQ_NO_BALANCING" flag before starting adapter reset and disable
    it after calling pci_restore_state(). The irqbalance daemon is disabled
    for this short period of time (~2s).
    
    Co-developed-by: Kyle Mahlkuch <Kyle.Mahlkuch@ibm.com>
    Signed-off-by: Kyle Mahlkuch <Kyle.Mahlkuch@ibm.com>
    Signed-off-by: Wen Xiong <wenxiong@linux.ibm.com>
    Link: https://patch.msgid.link/20251028142427.3969819-2-wenxiong@linux.ibm.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: qla2xxx: Fix initiator mode with qlini_mode=exclusive [+ + +]
Author: Tony Battersby <tonyb@cybernetics.com>
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 <tonyb@cybernetics.com>
    Link: https://patch.msgid.link/1715ec14-ba9a-45dc-9cf2-d41aa6b81b5e@cybernetics.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: qla2xxx: Fix lost interrupts with qlini_mode=disabled [+ + +]
Author: Tony Battersby <tonyb@cybernetics.com>
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 <tonyb@cybernetics.com>
    Link: https://patch.msgid.link/56d378eb-14ad-49c7-bae9-c649b6c7691e@cybernetics.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: qla2xxx: Use reinit_completion on mbx_intr_comp [+ + +]
Author: Tony Battersby <tonyb@cybernetics.com>
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 <tonyb@cybernetics.com>
    Link: https://patch.msgid.link/11b6485e-0bfd-4784-8f99-c06a196dad94@cybernetics.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: Revert "scsi: libsas: Fix exp-attached device scan after probe failure scanned in again after probe failed" [+ + +]
Author: Xingui Yang <yangxingui@huawei.com>
Date:   Tue Dec 2 14:56:27 2025 +0800

    scsi: Revert "scsi: libsas: Fix exp-attached device scan after probe failure scanned in again after probe failed"
    
    [ Upstream commit 278712d20bc8ec29d1ad6ef9bdae9000ef2c220c ]
    
    This reverts commit ab2068a6fb84751836a84c26ca72b3beb349619d.
    
    When probing the exp-attached sata device, libsas/libata will issue a
    hard reset in sas_probe_sata() -> ata_sas_async_probe(), then a
    broadcast event will be received after the disk probe fails, and this
    commit causes the probe will be re-executed on the disk, and a faulty
    disk may get into an indefinite loop of probe.
    
    Therefore, revert this commit, although it can fix some temporary issues
    with disk probe failure.
    
    Signed-off-by: Xingui Yang <yangxingui@huawei.com>
    Reviewed-by: Jason Yan <yanaijie@huawei.com>
    Reviewed-by: John Garry <john.g.garry@oracle.com>
    Link: https://patch.msgid.link/20251202065627.140361-1-yangxingui@huawei.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: Revert "scsi: qla2xxx: Perform lockless command completion in abort path" [+ + +]
Author: Tony Battersby <tonyb@cybernetics.com>
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: stable@vger.kernel.org
    Signed-off-by: Tony Battersby <tonyb@cybernetics.com>
    Link: https://patch.msgid.link/3a8022dc-bcfd-4b01-9f9b-7a9ec61fa2a3@cybernetics.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: sg: Fix occasional bogus elapsed time that exceeds timeout [+ + +]
Author: Michal Rábek <mrabek@redhat.com>
Date:   Fri Dec 12 17:08:23 2025 +0100

    scsi: sg: Fix occasional bogus elapsed time that exceeds timeout
    
    [ Upstream commit 0e1677654259a2f3ccf728de1edde922a3c4ba57 ]
    
    A race condition was found in sg_proc_debug_helper(). It was observed on
    a system using an IBM LTO-9 SAS Tape Drive (ULTRIUM-TD9) and monitoring
    /proc/scsi/sg/debug every second. A very large elapsed time would
    sometimes appear. This is caused by two race conditions.
    
    We reproduced the issue with an IBM ULTRIUM-HH9 tape drive on an x86_64
    architecture. A patched kernel was built, and the race condition could
    not be observed anymore after the application of this patch. A
    reproducer C program utilising the scsi_debug module was also built by
    Changhui Zhong and can be viewed here:
    
    https://github.com/MichaelRabek/linux-tests/blob/master/drivers/scsi/sg/sg_race_trigger.c
    
    The first race happens between the reading of hp->duration in
    sg_proc_debug_helper() and request completion in sg_rq_end_io().  The
    hp->duration member variable may hold either of two types of
    information:
    
     #1 - The start time of the request. This value is present while
          the request is not yet finished.
    
     #2 - The total execution time of the request (end_time - start_time).
    
    If sg_proc_debug_helper() executes *after* the value of hp->duration was
    changed from #1 to #2, but *before* srp->done is set to 1 in
    sg_rq_end_io(), a fresh timestamp is taken in the else branch, and the
    elapsed time (value type #2) is subtracted from a timestamp, which
    cannot yield a valid elapsed time (which is a type #2 value as well).
    
    To fix this issue, the value of hp->duration must change under the
    protection of the sfp->rq_list_lock in sg_rq_end_io().  Since
    sg_proc_debug_helper() takes this read lock, the change to srp->done and
    srp->header.duration will happen atomically from the perspective of
    sg_proc_debug_helper() and the race condition is thus eliminated.
    
    The second race condition happens between sg_proc_debug_helper() and
    sg_new_write(). Even though hp->duration is set to the current time
    stamp in sg_add_request() under the write lock's protection, it gets
    overwritten by a call to get_sg_io_hdr(), which calls copy_from_user()
    to copy struct sg_io_hdr from userspace into kernel space. hp->duration
    is set to the start time again in sg_common_write(). If
    sg_proc_debug_helper() is called between these two calls, an arbitrary
    value set by userspace (usually zero) is used to compute the elapsed
    time.
    
    To fix this issue, hp->duration must be set to the current timestamp
    again after get_sg_io_hdr() returns successfully. A small race window
    still exists between get_sg_io_hdr() and setting hp->duration, but this
    window is only a few instructions wide and does not result in observable
    issues in practice, as confirmed by testing.
    
    Additionally, we fix the format specifier from %d to %u for printing
    unsigned int values in sg_proc_debug_helper().
    
    Signed-off-by: Michal Rábek <mrabek@redhat.com>
    Suggested-by: Tomas Henzl <thenzl@redhat.com>
    Tested-by: Changhui Zhong <czhong@redhat.com>
    Reviewed-by: Ewan D. Milne <emilne@redhat.com>
    Reviewed-by: John Meneghini <jmeneghi@redhat.com>
    Reviewed-by: Tomas Henzl <thenzl@redhat.com>
    Link: https://patch.msgid.link/20251212160900.64924-1-mrabek@redhat.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: sim710: Fix resource leak by adding missing ioport_unmap() calls [+ + +]
Author: Haotian Zhang <vulab@iscas.ac.cn>
Date:   Wed Oct 29 11:25:55 2025 +0800

    scsi: sim710: Fix resource leak by adding missing ioport_unmap() calls
    
    [ Upstream commit acd194d9b5bac419e04968ffa44351afabb50bac ]
    
    The driver calls ioport_map() to map I/O ports in sim710_probe_common()
    but never calls ioport_unmap() to release the mapping. This causes
    resource leaks in both the error path when request_irq() fails and in
    the normal device removal path via sim710_device_remove().
    
    Add ioport_unmap() calls in the out_release error path and in
    sim710_device_remove().
    
    Fixes: 56fece20086e ("[PATCH] finally fix 53c700 to use the generic iomem infrastructure")
    Signed-off-by: Haotian Zhang <vulab@iscas.ac.cn>
    Link: https://patch.msgid.link/20251029032555.1476-1-vulab@iscas.ac.cn
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: stex: Fix reboot_notifier leak in probe error path [+ + +]
Author: Haotian Zhang <vulab@iscas.ac.cn>
Date:   Tue Nov 4 17:48:47 2025 +0800

    scsi: stex: Fix reboot_notifier leak in probe error path
    
    [ Upstream commit 20da637eb545b04753e20c675cfe97b04c7b600b ]
    
    In stex_probe(), register_reboot_notifier() is called at the beginning,
    but if any subsequent initialization step fails, the function returns
    without unregistering the notifier, resulting in a resource leak.
    
    Add unregister_reboot_notifier() in the out_disable error path to ensure
    proper cleanup on all failure paths.
    
    Fixes: 61b745fa63db ("scsi: stex: Add S6 support")
    Signed-off-by: Haotian Zhang <vulab@iscas.ac.cn>
    Link: https://patch.msgid.link/20251104094847.270-1-vulab@iscas.ac.cn
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: target: Do not write NUL characters into ASCII configfs output [+ + +]
Author: Bart Van Assche <bvanassche@acm.org>
Date:   Mon Oct 27 11:46:38 2025 -0700

    scsi: target: Do not write NUL characters into ASCII configfs output
    
    [ Upstream commit c03b55f235e283cae49c88b9602fd11096b92eba ]
    
    NUL characters are not allowed in ASCII configfs output. Hence this
    patch.
    
    Fixes: c66ac9db8d4a ("[SCSI] target: Add LIO target core v4.0.0-rc6")
    Signed-off-by: Bart Van Assche <bvanassche@acm.org>
    Link: https://patch.msgid.link/20251027184639.3501254-2-bvanassche@acm.org
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: target: Reset t_task_cdb pointer in error case [+ + +]
Author: Andrey Vatoropin <a.vatoropin@crpt.ru>
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: stable@vger.kernel.org
    Signed-off-by: Andrey Vatoropin <a.vatoropin@crpt.ru>
    Reviewed-by: Mike Christie <michael.christie@oracle.com>
    Link: https://patch.msgid.link/20251118084014.324940-1-a.vatoropin@crpt.ru
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sctp: Defer SCTP_DBG_OBJCNT_DEC() to sctp_destroy_sock(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@google.com>
Date:   Thu Oct 23 23:16:50 2025 +0000

    sctp: Defer SCTP_DBG_OBJCNT_DEC() to sctp_destroy_sock().
    
    [ Upstream commit 622e8838a29845316668ec2e7648428878df7f9a ]
    
    SCTP_DBG_OBJCNT_INC() is called only when sctp_init_sock()
    returns 0 after successfully allocating sctp_sk(sk)->ep.
    
    OTOH, SCTP_DBG_OBJCNT_DEC() is called in sctp_close().
    
    The code seems to expect that the socket is always exposed
    to userspace once SCTP_DBG_OBJCNT_INC() is incremented, but
    there is a path where the assumption is not true.
    
    In sctp_accept(), sctp_sock_migrate() could fail after
    sctp_init_sock().
    
    Then, sk_common_release() does not call inet_release() nor
    sctp_close().  Instead, it calls sk->sk_prot->destroy().
    
    Let's move SCTP_DBG_OBJCNT_DEC() from sctp_close() to
    sctp_destroy_sock().
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
    Acked-by: Xin Long <lucien.xin@gmail.com>
    Link: https://patch.msgid.link/20251023231751.4168390-2-kuniyu@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests/bpf: Fix failure paths in send_signal test [+ + +]
Author: Alexei Starovoitov <ast@kernel.org>
Date:   Thu Nov 13 09:11:53 2025 -0800

    selftests/bpf: Fix failure paths in send_signal test
    
    [ Upstream commit c13339039891dbdfa6c1972f0483bd07f610b776 ]
    
    When test_send_signal_kern__open_and_load() fails parent closes the
    pipe which cases ASSERT_EQ(read(pipe_p2c...)) to fail, but child
    continues and enters infinite loop, while parent is stuck in wait(NULL).
    Other error paths have similar issue, so kill the child before waiting on it.
    
    The bug was discovered while compiling all of selftests with -O1 instead of -O2
    which caused progs/test_send_signal_kern.c to fail to load.
    
    Fixes: ab8b7f0cb358 ("tools/bpf: Add self tests for bpf_send_signal_thread()")
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Eduard Zingerman <eddyz87@gmail.com>
    Link: https://lore.kernel.org/bpf/20251113171153.2583-1-alexei.starovoitov@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests/bpf: Improve reliability of test_perf_branches_no_hw() [+ + +]
Author: Matt Bobrowski <mattbobrowski@google.com>
Date:   Wed Nov 19 14:35:40 2025 +0000

    selftests/bpf: Improve reliability of test_perf_branches_no_hw()
    
    [ Upstream commit ae24fc8a16b0481ea8c5acbc66453c49ec0431c4 ]
    
    Currently, test_perf_branches_no_hw() relies on the busy loop within
    test_perf_branches_common() being slow enough to allow at least one
    perf event sample tick to occur before starting to tear down the
    backing perf event BPF program. With a relatively small fixed
    iteration count of 1,000,000, this is not guaranteed on modern fast
    CPUs, resulting in the test run to subsequently fail with the
    following:
    
    bpf_testmod.ko is already unloaded.
    Loading bpf_testmod.ko...
    Successfully loaded bpf_testmod.ko.
    test_perf_branches_common:PASS:test_perf_branches_load 0 nsec
    test_perf_branches_common:PASS:attach_perf_event 0 nsec
    test_perf_branches_common:PASS:set_affinity 0 nsec
    check_good_sample:PASS:output not valid 0 nsec
    check_good_sample:PASS:read_branches_size 0 nsec
    check_good_sample:PASS:read_branches_stack 0 nsec
    check_good_sample:PASS:read_branches_stack 0 nsec
    check_good_sample:PASS:read_branches_global 0 nsec
    check_good_sample:PASS:read_branches_global 0 nsec
    check_good_sample:PASS:read_branches_size 0 nsec
    test_perf_branches_no_hw:PASS:perf_event_open 0 nsec
    test_perf_branches_common:PASS:test_perf_branches_load 0 nsec
    test_perf_branches_common:PASS:attach_perf_event 0 nsec
    test_perf_branches_common:PASS:set_affinity 0 nsec
    check_bad_sample:FAIL:output not valid no valid sample from prog
    Summary: 0/1 PASSED, 0 SKIPPED, 1 FAILED
    Successfully unloaded bpf_testmod.ko.
    
    On a modern CPU (i.e. one with a 3.5 GHz clock rate), executing 1
    million increments of a volatile integer can take significantly less
    than 1 millisecond. If the spin loop and detachment of the perf event
    BPF program elapses before the first 1 ms sampling interval elapses,
    the perf event will never end up firing. Fix this by bumping the loop
    iteration counter a little within test_perf_branches_common(), along
    with ensuring adding another loop termination condition which is
    directly influenced by the backing perf event BPF program
    executing. Notably, a concious decision was made to not adjust the
    sample_freq value as that is just not a reliable way to go about
    fixing the problem. It effectively still leaves the race window open.
    
    Fixes: 67306f84ca78c ("selftests/bpf: Add bpf_read_branch_records() selftest")
    Signed-off-by: Matt Bobrowski <mattbobrowski@google.com>
    Reviewed-by: Jiri Olsa <jolsa@kernel.org>
    Link: https://lore.kernel.org/r/20251119143540.2911424-1-mattbobrowski@google.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests/bpf: skip test_perf_branches_hw() on unsupported platforms [+ + +]
Author: Matt Bobrowski <mattbobrowski@google.com>
Date:   Thu Nov 20 14:20:59 2025 +0000

    selftests/bpf: skip test_perf_branches_hw() on unsupported platforms
    
    [ Upstream commit 27746aaf1b20172f0859546c4a3e82eca459f680 ]
    
    Gracefully skip the test_perf_branches_hw subtest on platforms that
    do not support LBR or require specialized perf event attributes
    to enable branch sampling.
    
    For example, AMD's Milan (Zen 3) supports BRS rather than traditional
    LBR. This requires specific configurations (attr.type = PERF_TYPE_RAW,
    attr.config = RETIRED_TAKEN_BRANCH_INSTRUCTIONS) that differ from the
    generic setup used within this test. Notably, it also probably doesn't
    hold much value to special case perf event configurations for selected
    micro architectures.
    
    Fixes: 67306f84ca78c ("selftests/bpf: Add bpf_read_branch_records() selftest")
    Signed-off-by: Matt Bobrowski <mattbobrowski@google.com>
    Acked-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20251120142059.2836181-1-mattbobrowski@google.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests/ftrace: traceonoff_triggers: strip off names [+ + +]
Author: Yipeng Zou <zouyipeng@huawei.com>
Date:   Fri Aug 18 09:32:26 2023 +0800

    selftests/ftrace: traceonoff_triggers: strip off names
    
    [ Upstream commit b889b4fb4cbea3ca7eb9814075d6a51936394bd9 ]
    
    The func_traceonoff_triggers.tc sometimes goes to fail
    on my board, Kunpeng-920.
    
    [root@localhost]# ./ftracetest ./test.d/ftrace/func_traceonoff_triggers.tc -l fail.log
    === Ftrace unit tests ===
    [1] ftrace - test for function traceon/off triggers     [FAIL]
    [2] (instance)  ftrace - test for function traceon/off triggers [UNSUPPORTED]
    
    I look up the log, and it shows that the md5sum is different between csum1 and csum2.
    
    ++ cnt=611
    ++ sleep .1
    +++ cnt_trace
    +++ grep -v '^#' trace
    +++ wc -l
    ++ cnt2=611
    ++ '[' 611 -ne 611 ']'
    +++ cat tracing_on
    ++ on=0
    ++ '[' 0 '!=' 0 ']'
    +++ md5sum trace
    ++ csum1='76896aa74362fff66a6a5f3cf8a8a500  trace'
    ++ sleep .1
    +++ md5sum trace
    ++ csum2='ee8625a21c058818fc26e45c1ed3f6de  trace'
    ++ '[' '76896aa74362fff66a6a5f3cf8a8a500  trace' '!=' 'ee8625a21c058818fc26e45c1ed3f6de  trace' ']'
    ++ fail 'Tracing file is still changing'
    ++ echo Tracing file is still changing
    Tracing file is still changing
    ++ exit_fail
    ++ exit 1
    
    So I directly dump the trace file before md5sum, the diff shows that:
    
    [root@localhost]# diff trace_1.log trace_2.log -y --suppress-common-lines
    dockerd-12285   [036] d.... 18385.510290: sched_stat | <...>-12285   [036] d.... 18385.510290: sched_stat
    dockerd-12285   [036] d.... 18385.510291: sched_swit | <...>-12285   [036] d.... 18385.510291: sched_swit
    <...>-740       [044] d.... 18385.602859: sched_stat | kworker/44:1-740 [044] d.... 18385.602859: sched_stat
    <...>-740       [044] d.... 18385.602860: sched_swit | kworker/44:1-740 [044] d.... 18385.602860: sched_swit
    
    And we can see that <...> filed be filled with names.
    
    We can strip off the names there to fix that.
    
    After strip off the names:
    
    kworker/u257:0-12 [019] d..2.  2528.758910: sched_stat | -12 [019] d..2.  2528.758910: sched_stat_runtime: comm=k
    kworker/u257:0-12 [019] d..2.  2528.758912: sched_swit | -12 [019] d..2.  2528.758912: sched_switch: prev_comm=kw
    <idle>-0          [000] d.s5.  2528.762318: sched_waki | -0  [000] d.s5.  2528.762318: sched_waking: comm=sshd pi
    <idle>-0          [037] dNh2.  2528.762326: sched_wake | -0  [037] dNh2.  2528.762326: sched_wakeup: comm=sshd pi
    <idle>-0          [037] d..2.  2528.762334: sched_swit | -0  [037] d..2.  2528.762334: sched_switch: prev_comm=sw
    
    Link: https://lore.kernel.org/r/20230818013226.2182299-1-zouyipeng@huawei.com
    Fixes: d87b29179aa0 ("selftests: ftrace: Use md5sum to take less time of checking logs")
    Suggested-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Yipeng Zou <zouyipeng@huawei.com>
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests: net: test_vxlan_under_vrf: fix HV connectivity test [+ + +]
Author: Andrea Righi <andrea.righi@canonical.com>
Date:   Mon Jan 5 18:52:51 2026 +0800

    selftests: net: test_vxlan_under_vrf: fix HV connectivity test
    
    [ Upstream commit e7e4785fa30f9b5d1b60ed2d8e221891325dfc5f ]
    
    It looks like test_vxlan_under_vrf.sh is always failing to verify the
    connectivity test during the ping between the two simulated VMs.
    
    This is due to the fact that veth-hv in each VM should have a distinct
    MAC address.
    
    Fix by setting a unique MAC address on each simulated VM interface.
    
    Without this fix:
    
     $ sudo ./tools/testing/selftests/net/test_vxlan_under_vrf.sh
     Checking HV connectivity                                           [ OK ]
     Check VM connectivity through VXLAN (underlay in the default VRF)  [FAIL]
    
    With this fix applied:
    
     $ sudo ./tools/testing/selftests/net/test_vxlan_under_vrf.sh
     Checking HV connectivity                                           [ OK ]
     Check VM connectivity through VXLAN (underlay in the default VRF)  [ OK ]
     Check VM connectivity through VXLAN (underlay in a VRF)            [FAIL]
    
    NOTE: the connectivity test with the underlay VRF is still failing; it
    seems that ARP requests are blocked at the simulated hypervisor level,
    probably due to some missing ARP forwarding rules. This requires more
    investigation (in the meantime we may consider to set that test as
    expected failure - XFAIL).
    
    Signed-off-by: Andrea Righi <andrea.righi@canonical.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Cao Jiaqiang <caojiaqiang@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
serial: add support of CPCI cards [+ + +]
Author: Magne Bruno <magne.bruno@addi-data.com>
Date:   Mon Nov 10 17:24:56 2025 +0100

    serial: add support of CPCI cards
    
    commit 0e5a99e0e5f50353b86939ff6e424800d769c818 upstream.
    
    Addi-Data GmbH is manufacturing multi-serial ports cards supporting CompactPCI (known as CPCI).
    Those cards are identified with different DeviceIds. Those cards integrating standard UARTs
    work the same way as PCI/PCIe models already supported in the serial driver.
    
    Signed-off-by: Magne Bruno <magne.bruno@addi-data.com>
    Link: https://patch.msgid.link/20251110162456.341029-1-magne.bruno@addi-data.com
    Cc: stable <stable@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

serial: sprd: Return -EPROBE_DEFER when uart clock is not ready [+ + +]
Author: Wenhua Lin <Wenhua.Lin@unisoc.com>
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 <Wenhua.Lin@unisoc.com>
    Link: https://patch.msgid.link/20251022030840.956589-1-Wenhua.Lin@unisoc.com
    Reviewed-by: Cixi Geng <cixi.geng@linux.dev>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
smack: fix bug: unprivileged task can create labels [+ + +]
Author: Konstantin Andreev <andreev@swemel.ru>
Date:   Tue Jun 17 00:32:16 2025 +0300

    smack: fix bug: unprivileged task can create labels
    
    [ Upstream commit c147e13ea7fe9f118f8c9ba5e96cbd644b00d6b3 ]
    
    If an unprivileged task is allowed to relabel itself
    (/smack/relabel-self is not empty),
    it can freely create new labels by writing their
    names into own /proc/PID/attr/smack/current
    
    This occurs because do_setattr() imports
    the provided label in advance,
    before checking "relabel-self" list.
    
    This change ensures that the "relabel-self" list
    is checked before importing the label.
    
    Fixes: 38416e53936e ("Smack: limited capability for changing process label")
    Signed-off-by: Konstantin Andreev <andreev@swemel.ru>
    Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
smc91x: fix broken irq-context in PREEMPT_RT [+ + +]
Author: Yeoreum Yun <yeoreum.yun@arm.com>
Date:   Wed Dec 17 08:51:15 2025 +0000

    smc91x: fix broken irq-context in PREEMPT_RT
    
    [ Upstream commit 6402078bd9d1ed46e79465e1faaa42e3458f8a33 ]
    
    When smc91x.c is built with PREEMPT_RT, the following splat occurs
    in FVP_RevC:
    
    [   13.055000] smc91x LNRO0003:00 eth0: link up, 10Mbps, half-duplex, lpa 0x0000
    [   13.062137] BUG: workqueue leaked atomic, lock or RCU: kworker/2:1[106]
    [   13.062137]      preempt=0x00000000 lock=0->0 RCU=0->1 workfn=mld_ifc_work
    [   13.062266] C
    ** replaying previous printk message **
    [   13.062266] CPU: 2 UID: 0 PID: 106 Comm: kworker/2:1 Not tainted 6.18.0-dirty #179 PREEMPT_{RT,(full)}
    [   13.062353] Hardware name:  , BIOS
    [   13.062382] Workqueue: mld mld_ifc_work
    [   13.062469] Call trace:
    [   13.062494]  show_stack+0x24/0x40 (C)
    [   13.062602]  __dump_stack+0x28/0x48
    [   13.062710]  dump_stack_lvl+0x7c/0xb0
    [   13.062818]  dump_stack+0x18/0x34
    [   13.062926]  process_scheduled_works+0x294/0x450
    [   13.063043]  worker_thread+0x260/0x3d8
    [   13.063124]  kthread+0x1c4/0x228
    [   13.063235]  ret_from_fork+0x10/0x20
    
    This happens because smc_special_trylock() disables IRQs even on PREEMPT_RT,
    but smc_special_unlock() does not restore IRQs on PREEMPT_RT.
    The reason is that smc_special_unlock() calls spin_unlock_irqrestore(),
    and rcu_read_unlock_bh() in __dev_queue_xmit() cannot invoke
    rcu_read_unlock() through __local_bh_enable_ip() when current->softirq_disable_cnt becomes zero.
    
    To address this issue, replace smc_special_trylock() with spin_trylock_irqsave().
    
    Fixes: 342a93247e08 ("locking/spinlock: Provide RT variant header: <linux/spinlock_rt.h>")
    Signed-off-by: Yeoreum Yun <yeoreum.yun@arm.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20251217085115.1730036-1-yeoreum.yun@arm.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
soc: amlogic: canvas: fix device leak on lookup [+ + +]
Author: Johan Hovold <johan@kernel.org>
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: stable@vger.kernel.org      # 4.20: 28f851e6afa8
    Cc: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
    Link: https://patch.msgid.link/20250926142454.5929-2-johan@kernel.org
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

soc: qcom: ocmem: fix device leak on lookup [+ + +]
Author: Johan Hovold <johan@kernel.org>
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: stable@vger.kernel.org      # 5.5: 0ff027027e05
    Cc: Brian Masney <bmasney@redhat.com>
    Cc: Miaoqian Lin <linmq006@gmail.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: Brian Masney <bmasney@redhat.com>
    Link: https://lore.kernel.org/r/20250926143511.6715-2-johan@kernel.org
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
spi: fsl-cpm: Check length parity before switching to 16 bit mode [+ + +]
Author: Christophe Leroy <chleroy@kernel.org>
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: stable@vger.kernel.org
    Closes: https://lore.kernel.org/all/638496dd-ec60-4e53-bad7-eb657f67d580@csgroup.eu/
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Reviewed-by: Sverdlin Alexander <alexander.sverdlin@siemens.com>
    Link: https://patch.msgid.link/3c4d81c3923c93f95ec56702a454744a4bad3cfc.1763627618.git.christophe.leroy@csgroup.eu
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

spi: imx: keep dma request disabled before dma transfer setup [+ + +]
Author: Robin Gong <yibin.gong@nxp.com>
Date:   Fri Oct 24 13:53:20 2025 +0800

    spi: imx: keep dma request disabled before dma transfer setup
    
    [ Upstream commit 86d57d9c07d54e8cb385ffe800930816ccdba0c1 ]
    
    Since sdma hardware configure postpone to transfer phase, have to disable
    dma request before dma transfer setup because there is a hardware
    limitation on sdma event enable(ENBLn) as below:
    
    "It is thus essential for the Arm platform to program them before any DMA
     request is triggered to the SDMA, otherwise an unpredictable combination
     of channels may be started."
    
    Signed-off-by: Carlos Song <carlos.song@nxp.com>
    Signed-off-by: Robin Gong <yibin.gong@nxp.com>
    Link: https://patch.msgid.link/20251024055320.408482-1-carlos.song@nxp.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: tegra210-quad: add new chips to compatible [+ + +]
Author: Krishna Yarlagadda <kyarlagadda@nvidia.com>
Date:   Tue Feb 22 23:26:09 2022 +0530

    spi: tegra210-quad: add new chips to compatible
    
    [ Upstream commit ea23f0e148b82e5bcbc6c814926f53133552f0f3 ]
    
    Add support for Tegra234 and soc data to select capabilities.
    
    Signed-off-by: Krishna Yarlagadda <kyarlagadda@nvidia.com>
    Link: https://lore.kernel.org/r/20220222175611.58051-4-kyarlagadda@nvidia.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: b4e002d8a7ce ("spi: tegra210-quad: Fix timeout handling")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: tegra210-quad: combined sequence mode [+ + +]
Author: Krishna Yarlagadda <kyarlagadda@nvidia.com>
Date:   Mon Mar 7 22:25:18 2022 +0530

    spi: tegra210-quad: combined sequence mode
    
    [ Upstream commit 1b8342cc4a387933780c50f0cf51c94455be7d11 ]
    
    Add combined sequence mode supported by Tegra QSPI controller.
    For commands which contain cmd, addr, data parts to it, controller
    can accept all 3 transfers at once and avoid interrupt for each
    transfer. This would improve read & write performance.
    
    Signed-off-by: Krishna Yarlagadda <kyarlagadda@nvidia.com>
    Reported-by: kernel test robot <lkp@intel.com>
    Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
    Link: https://lore.kernel.org/r/20220307165519.38380-3-kyarlagadda@nvidia.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: b4e002d8a7ce ("spi: tegra210-quad: Fix timeout handling")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: tegra210-quad: Fix timeout handling [+ + +]
Author: Vishwaroop A <va@nvidia.com>
Date:   Tue Oct 28 15:57:01 2025 +0000

    spi: tegra210-quad: Fix timeout handling
    
    [ Upstream commit b4e002d8a7cee3b1d70efad0e222567f92a73000 ]
    
    When the CPU that the QSPI interrupt handler runs on (typically CPU 0)
    is excessively busy, it can lead to rare cases of the IRQ thread not
    running before the transfer timeout is reached.
    
    While handling the timeouts, any pending transfers are cleaned up and
    the message that they correspond to is marked as failed, which leaves
    the curr_xfer field pointing at stale memory.
    
    To avoid this, clear curr_xfer to NULL upon timeout and check for this
    condition when the IRQ thread is finally run.
    
    While at it, also make sure to clear interrupts on failure so that new
    interrupts can be run.
    
    A better, more involved, fix would move the interrupt clearing into a
    hard IRQ handler. Ideally we would also want to signal that the IRQ
    thread no longer needs to be run after the timeout is hit to avoid the
    extra check for a valid transfer.
    
    Fixes: 921fc1838fb0 ("spi: tegra210-quad: Add support for Tegra210 QSPI controller")
    Signed-off-by: Thierry Reding <treding@nvidia.com>
    Signed-off-by: Vishwaroop A <va@nvidia.com>
    Link: https://patch.msgid.link/20251028155703.4151791-2-va@nvidia.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: tegra210-quad: Fix validate combined sequence [+ + +]
Author: Krishna Yarlagadda <kyarlagadda@nvidia.com>
Date:   Fri Feb 24 22:10:34 2023 +0530

    spi: tegra210-quad: Fix validate combined sequence
    
    commit 047ee71ae4f412d8819e39e4b08c588fa299cfc2 upstream.
    
    Check for non dma transfers that do not fit in FIFO has issue and skips
    combined sequence for Tegra234 & Tegra241 which does not have GPCDMA.
    
    Fixes: 1b8342cc4a38 ("spi: tegra210-quad: combined sequence mode")
    
    Signed-off-by: Krishna Yarlagadda <kyarlagadda@nvidia.com>
    Link: https://lore.kernel.org/r/20230224164034.56933-1-kyarlagadda@nvidia.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

spi: tegra210-quad: Fix X1_X2_X4 encoding and support x4 transfers [+ + +]
Author: Vishwaroop A <va@nvidia.com>
Date:   Wed Apr 16 11:06:01 2025 +0000

    spi: tegra210-quad: Fix X1_X2_X4 encoding and support x4 transfers
    
    commit dcb06c638a1174008a985849fa30fc0da7d08904 upstream.
    
    This patch corrects the QSPI_COMMAND_X1_X2_X4 and QSPI_ADDRESS_X1_X2_X4
    macros to properly encode the bus width for x1, x2, and x4 transfers.
    Although these macros were previously incorrect, they were not being
    used in the driver, so no functionality was affected.
    
    The patch updates tegra_qspi_cmd_config() and tegra_qspi_addr_config()
    function calls to use the actual bus width from the transfer, instead of
    hardcoding it to 0 (which implied x1 mode). This change enables proper
    support for x1, x2, and x4 data transfers by correctly configuring the
    interface width for commands and addresses.
    
    These modifications improve the QSPI driver's flexibility and prepare it
    for future use cases that may require different bus widths for commands
    and addresses.
    
    Fixes: 1b8342cc4a38 ("spi: tegra210-quad: combined sequence mode")
    Signed-off-by: Vishwaroop A <va@nvidia.com>
    Link: https://patch.msgid.link/20250416110606.2737315-2-va@nvidia.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

spi: tegra210-quad: modify chip select (CS) deactivation [+ + +]
Author: Vishwaroop A <va@nvidia.com>
Date:   Wed Apr 16 11:06:03 2025 +0000

    spi: tegra210-quad: modify chip select (CS) deactivation
    
    [ Upstream commit d8966b65413390d1b5b706886987caac05fbe024 ]
    
    Modify the chip select (CS) deactivation and inter-transfer delay
    execution only during the DATA_TRANSFER phase when the cs_change
    flag is not set. This ensures proper CS handling and timing between
    transfers while eliminating redundant operations.
    
    Fixes: 1b8342cc4a38 ("spi: tegra210-quad: combined sequence mode")
    Signed-off-by: Vishwaroop A <va@nvidia.com>
    Link: https://patch.msgid.link/20250416110606.2737315-4-va@nvidia.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: b4e002d8a7ce ("spi: tegra210-quad: Fix timeout handling")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: tegra210-quad: use device_reset method [+ + +]
Author: Krishna Yarlagadda <kyarlagadda@nvidia.com>
Date:   Tue Feb 22 23:26:07 2022 +0530

    spi: tegra210-quad: use device_reset method
    
    [ Upstream commit ac982578e7d340dc4f4fd243f4a4b24787d28c3f ]
    
    Use device_reset api to replace duplicate code in driver to call
    reset_control_get api with reset handle.
    
    Signed-off-by: Krishna Yarlagadda <kyarlagadda@nvidia.com>
    Link: https://lore.kernel.org/r/20220222175611.58051-2-kyarlagadda@nvidia.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: b4e002d8a7ce ("spi: tegra210-quad: Fix timeout handling")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: xilinx: increase number of retries before declaring stall [+ + +]
Author: Alvaro Gamez Machado <alvaro.gamez@hazent.com>
Date:   Thu Nov 6 14:45:35 2025 +0100

    spi: xilinx: increase number of retries before declaring stall
    
    [ Upstream commit 939edfaa10f1d22e6af6a84bf4bd96dc49c67302 ]
    
    SPI devices using a (relative) slow frequency need a larger time.
    
    For instance, microblaze running at 83.25MHz and performing a
    3 bytes transaction using a 10MHz/16 = 625kHz needed this stall
    value increased to at least 20. The SPI device is quite slow, but
    also is the microblaze, so set this value to 32 to give it even
    more margin.
    
    Signed-off-by: Alvaro Gamez Machado <alvaro.gamez@hazent.com>
    Reviewed-by: Ricardo Ribalda <ribalda@chromium.org>
    Link: https://patch.msgid.link/20251106134545.31942-1-alvaro.gamez@hazent.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
staging: fbtft: core: fix potential memory leak in fbtft_probe_common() [+ + +]
Author: Jianglei Nie <niejianglei2021@163.com>
Date:   Wed Nov 12 20:22:07 2025 +0100

    staging: fbtft: core: fix potential memory leak in fbtft_probe_common()
    
    [ Upstream commit 47d3949a9b04cbcb0e10abae30c2b53e98706e11 ]
    
    fbtft_probe_common() allocates a memory chunk for "info" with
    fbtft_framebuffer_alloc(). When "display->buswidth == 0" is true, the
    function returns without releasing the "info", which will lead to a
    memory leak.
    
    Fix it by calling fbtft_framebuffer_release() when "display->buswidth
    == 0" is true.
    
    Fixes: c296d5f9957c ("staging: fbtft: core support")
    Signed-off-by: Jianglei Nie <niejianglei2021@163.com>
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Acked-by: Abdun Nihaal <abdun.nihaal@gmail.com>
    Link: https://patch.msgid.link/20251112192235.2088654-1-andriy.shevchenko@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

staging: rtl8723bs: fix out-of-bounds read in OnBeacon ESR IE parsing [+ + +]
Author: Navaneeth K <knavaneeth786@gmail.com>
Date:   Thu Nov 20 16:35:20 2025 +0000

    staging: rtl8723bs: fix out-of-bounds read in OnBeacon ESR IE parsing
    
    commit 502ddcc405b69fa92e0add6c1714d654504f6fd7 upstream.
    
    The Extended Supported Rates (ESR) IE handling in OnBeacon accessed
    *(p + 1 + ielen) and *(p + 2 + ielen) without verifying that these
    offsets lie within the received frame buffer. A malformed beacon with
    an ESR IE positioned at the end of the buffer could cause an
    out-of-bounds read, potentially triggering a kernel panic.
    
    Add a boundary check to ensure that the ESR IE body and the subsequent
    bytes are within the limits of the frame before attempting to access
    them.
    
    This prevents OOB reads caused by malformed beacon frames.
    
    Signed-off-by: Navaneeth K <knavaneeth786@gmail.com>
    Cc: stable <stable@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

staging: rtl8723bs: fix stack buffer overflow in OnAssocReq IE parsing [+ + +]
Author: Navaneeth K <knavaneeth786@gmail.com>
Date:   Thu Nov 20 16:33:08 2025 +0000

    staging: rtl8723bs: fix stack buffer overflow in OnAssocReq IE parsing
    
    commit 6ef0e1c10455927867cac8f0ed6b49f328f8cf95 upstream.
    
    The Supported Rates IE length from an incoming Association Request frame
    was used directly as the memcpy() length when copying into a fixed-size
    16-byte stack buffer (supportRate). A malicious station can advertise an
    IE length larger than 16 bytes, causing a stack buffer overflow.
    
    Clamp ie_len to the buffer size before copying the Supported Rates IE,
    and correct the bounds check when merging Extended Supported Rates to
    prevent a second potential overflow.
    
    This prevents kernel stack corruption triggered by malformed association
    requests.
    
    Signed-off-by: Navaneeth K <knavaneeth786@gmail.com>
    Cc: stable <stable@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
SUNRPC: svcauth_gss: avoid NULL deref on zero length gss_token in gss_read_proxy_verf [+ + +]
Author: Joshua Rogers <linux@joshua.hu>
Date:   Wed Dec 31 09:38:53 2025 -0500

    SUNRPC: svcauth_gss: avoid NULL deref on zero length gss_token in gss_read_proxy_verf
    
    [ Upstream commit d4b69a6186b215d2dc1ebcab965ed88e8d41768d ]
    
    A zero length gss_token results in pages == 0 and in_token->pages[0]
    is NULL. The code unconditionally evaluates
    page_address(in_token->pages[0]) for the initial memcpy, which can
    dereference NULL even when the copy length is 0. Guard the first
    memcpy so it only runs when length > 0.
    
    Fixes: 5866efa8cbfb ("SUNRPC: Fix svcauth_gss_proxy_init()")
    Cc: stable@vger.kernel.org
    Signed-off-by: Joshua Rogers <linux@joshua.hu>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    [ adapted xdr buffer pointer API to older argv iov_base/iov_len API ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
svcrdma: bound check rq_pages index in inline path [+ + +]
Author: Joshua Rogers <linux@joshua.hu>
Date:   Wed Dec 31 17:44:24 2025 -0500

    svcrdma: bound check rq_pages index in inline path
    
    [ Upstream commit d1bea0ce35b6095544ee82bb54156fc62c067e58 ]
    
    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: stable@vger.kernel.org
    Signed-off-by: Joshua Rogers <linux@joshua.hu>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    [ adapted rc_curpage and rq_maxpages fields to ri_pageno and RPCSVC_MAXPAGES constant ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

svcrdma: return 0 on success from svc_rdma_copy_inline_range [+ + +]
Author: Joshua Rogers <linux@joshua.hu>
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: stable@vger.kernel.org
    Signed-off-by: Joshua Rogers <linux@joshua.hu>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
team: fix check for port enabled in team_queue_override_port_prio_changed() [+ + +]
Author: Jiri Pirko <jiri@resnulli.us>
Date:   Fri Dec 12 11:29:53 2025 +0100

    team: fix check for port enabled in team_queue_override_port_prio_changed()
    
    [ Upstream commit 932ac51d9953eaf77a1252f79b656d4ca86163c6 ]
    
    There has been a syzkaller bug reported recently with the following
    trace:
    
    list_del corruption, ffff888058bea080->prev is LIST_POISON2 (dead000000000122)
    ------------[ cut here ]------------
    kernel BUG at lib/list_debug.c:59!
    Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTI
    CPU: 3 UID: 0 PID: 21246 Comm: syz.0.2928 Not tainted syzkaller #0 PREEMPT(full)
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014
    RIP: 0010:__list_del_entry_valid_or_report+0x13e/0x200 lib/list_debug.c:59
    Code: 48 c7 c7 e0 71 f0 8b e8 30 08 ef fc 90 0f 0b 48 89 ef e8 a5 02 55 fd 48 89 ea 48 89 de 48 c7 c7 40 72 f0 8b e8 13 08 ef fc 90 <0f> 0b 48 89 ef e8 88 02 55 fd 48 89 ea 48 b8 00 00 00 00 00 fc ff
    RSP: 0018:ffffc9000d49f370 EFLAGS: 00010286
    RAX: 000000000000004e RBX: ffff888058bea080 RCX: ffffc9002817d000
    RDX: 0000000000000000 RSI: ffffffff819becc6 RDI: 0000000000000005
    RBP: dead000000000122 R08: 0000000000000005 R09: 0000000000000000
    R10: 0000000080000000 R11: 0000000000000001 R12: ffff888039e9c230
    R13: ffff888058bea088 R14: ffff888058bea080 R15: ffff888055461480
    FS:  00007fbbcfe6f6c0(0000) GS:ffff8880d6d0a000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 000000110c3afcb0 CR3: 00000000382c7000 CR4: 0000000000352ef0
    Call Trace:
     <TASK>
     __list_del_entry_valid include/linux/list.h:132 [inline]
     __list_del_entry include/linux/list.h:223 [inline]
     list_del_rcu include/linux/rculist.h:178 [inline]
     __team_queue_override_port_del drivers/net/team/team_core.c:826 [inline]
     __team_queue_override_port_del drivers/net/team/team_core.c:821 [inline]
     team_queue_override_port_prio_changed drivers/net/team/team_core.c:883 [inline]
     team_priority_option_set+0x171/0x2f0 drivers/net/team/team_core.c:1534
     team_option_set drivers/net/team/team_core.c:376 [inline]
     team_nl_options_set_doit+0x8ae/0xe60 drivers/net/team/team_core.c:2653
     genl_family_rcv_msg_doit+0x209/0x2f0 net/netlink/genetlink.c:1115
     genl_family_rcv_msg net/netlink/genetlink.c:1195 [inline]
     genl_rcv_msg+0x55c/0x800 net/netlink/genetlink.c:1210
     netlink_rcv_skb+0x158/0x420 net/netlink/af_netlink.c:2552
     genl_rcv+0x28/0x40 net/netlink/genetlink.c:1219
     netlink_unicast_kernel net/netlink/af_netlink.c:1320 [inline]
     netlink_unicast+0x5aa/0x870 net/netlink/af_netlink.c:1346
     netlink_sendmsg+0x8c8/0xdd0 net/netlink/af_netlink.c:1896
     sock_sendmsg_nosec net/socket.c:727 [inline]
     __sock_sendmsg net/socket.c:742 [inline]
     ____sys_sendmsg+0xa98/0xc70 net/socket.c:2630
     ___sys_sendmsg+0x134/0x1d0 net/socket.c:2684
     __sys_sendmsg+0x16d/0x220 net/socket.c:2716
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xcd/0xfa0 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    The problem is in this flow:
    1) Port is enabled, queue_id != 0, in qom_list
    2) Port gets disabled
            -> team_port_disable()
            -> team_queue_override_port_del()
            -> del (removed from list)
    3) Port is disabled, queue_id != 0, not in any list
    4) Priority changes
            -> team_queue_override_port_prio_changed()
            -> checks: port disabled && queue_id != 0
            -> calls del - hits the BUG as it is removed already
    
    To fix this, change the check in team_queue_override_port_prio_changed()
    so it returns early if port is not enabled.
    
    Reported-by: syzbot+422806e5f4cce722a71f@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=422806e5f4cce722a71f
    Fixes: 6c31ff366c11 ("team: remove synchronize_rcu() called during queue override change")
    Signed-off-by: Jiri Pirko <jiri@nvidia.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20251212102953.167287-1-jiri@resnulli.us
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ti-sysc: allow OMAP2 and OMAP4 timers to be reserved on AM33xx [+ + +]
Author: Matthias Schiffer <matthias.schiffer@tq-group.com>
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 <matthias.schiffer@tq-group.com>
    Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
    Link: https://lore.kernel.org/r/20250825131114.2206804-1-alexander.stein@ew.tq-group.com
    Signed-off-by: Kevin Hilman <khilman@baylibre.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tools/testing/nvdimm: Use per-DIMM device handle [+ + +]
Author: Alison Schofield <alison.schofield@intel.com>
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: stable@vger.kernel.org
    Signed-off-by: Alison Schofield <alison.schofield@intel.com>
    Reviewed-by: Dave Jiang <dave.jiang@intel.com>> ---
    Link: https://patch.msgid.link/20251031234227.1303113-1-alison.schofield@intel.com
    Signed-off-by: Ira Weiny <ira.weiny@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tpm: Cap the number of PCR banks [+ + +]
Author: Jarkko Sakkinen <jarkko@kernel.org>
Date:   Mon Dec 29 19:12:57 2025 -0500

    tpm: Cap the number of PCR banks
    
    [ Upstream commit faf07e611dfa464b201223a7253e9dc5ee0f3c9e ]
    
    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: stable@vger.kernel.org # v5.10+
    Fixes: bcfff8384f6c ("tpm: dynamically allocate the allocated_banks array")
    Tested-by: Lai Yi <yi1.lai@linux.intel.com>
    Reviewed-by: Jonathan McDowell <noodles@meta.com>
    Reviewed-by: Roberto Sassu <roberto.sassu@huawei.com>
    Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@opinsys.com>
    [ added backward-compatible define for TPM_MAX_DIGEST_SIZE to support older ima_init.c code still using that macro name ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tracing: Do not register unsupported perf events [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
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: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Link: https://patch.msgid.link/20251216182440.147e4453@gandalf.local.home
    Fixes: 4b147936fa509 ("tracing: Add support for 'synthetic' events")
    Reported-by: Ian Rogers <irogers@google.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
uio: uio_fsl_elbc_gpcm:: Add null pointer check to uio_fsl_elbc_gpcm_probe [+ + +]
Author: Li Qiang <liqiang01@kylinos.cn>
Date:   Wed Oct 15 14:40:20 2025 +0800

    uio: uio_fsl_elbc_gpcm:: Add null pointer check to uio_fsl_elbc_gpcm_probe
    
    [ Upstream commit d48fb15e6ad142e0577428a8c5028136e10c7b3d ]
    
    devm_kasprintf() returns a pointer to dynamically allocated memory
    which can be NULL upon failure.
    
    Fixes: d57801c45f53e ("uio: uio_fsl_elbc_gpcm: use device-managed allocators")
    Signed-off-by: Li Qiang <liqiang01@kylinos.cn>
    Link: https://patch.msgid.link/20251015064020.56589-1-liqiang01@kylinos.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
usb: chaoskey: fix locking for O_NONBLOCK [+ + +]
Author: Oliver Neukum <oneukum@suse.com>
Date:   Thu Oct 30 10:39:06 2025 +0100

    usb: chaoskey: fix locking for O_NONBLOCK
    
    [ Upstream commit a2fa8a12e6bc9d89c0505b8dd7ae38ec173d25de ]
    
    A failure to take a lock with O_NONBLOCK needs to result
    in -EAGAIN. Change it.
    
    Fixes: 66e3e591891da ("usb: Add driver for Altus Metrum ChaosKey device (v2)")
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    Link: https://patch.msgid.link/20251030093918.2248104-1-oneukum@suse.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: dwc2: disable platform lowlevel hw resources during shutdown [+ + +]
Author: Jisheng Zhang <jszhang@kernel.org>
Date:   Sun Jun 29 17:46:55 2025 +0800

    usb: dwc2: disable platform lowlevel hw resources during shutdown
    
    [ Upstream commit 7481a97c5f49f10c7490bb990d0e863f23b9bb71 ]
    
    On some SoC platforms, in shutdown stage, most components' power is cut
    off, but there's still power supply to the so called always-on
    domain, so if the dwc2's regulator is from the always-on domain, we
    need to explicitly disable it to save power.
    
    Disable platform lowlevel hw resources such as phy, clock and
    regulators etc. in device shutdown hook to reduce non-necessary power
    consumption when the platform enters shutdown stage.
    
    Signed-off-by: Jisheng Zhang <jszhang@kernel.org>
    Acked-by: Minas Harutyunyan <hminas@synopsys.com>
    Link: https://lore.kernel.org/r/20250629094655.747-1-jszhang@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: b6ebcfdcac40 ("usb: dwc2: fix hang during shutdown if set as peripheral")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: dwc2: fix hang during shutdown if set as peripheral [+ + +]
Author: Jisheng Zhang <jszhang@kernel.org>
Date:   Tue Nov 4 08:25:02 2025 +0800

    usb: dwc2: fix hang during shutdown if set as peripheral
    
    [ Upstream commit b6ebcfdcac40a27953f052e4269ce75a18825ffc ]
    
    dwc2 on most platforms needs phy controller, clock and power supply.
    All of them must be enabled/activated to properly operate. If dwc2
    is configured as peripheral mode, then all the above three hardware
    resources are disabled at the end of the probe:
    
            /* Gadget code manages lowlevel hw on its own */
            if (hsotg->dr_mode == USB_DR_MODE_PERIPHERAL)
                    dwc2_lowlevel_hw_disable(hsotg);
    
    But dwc2_driver_shutdown() tries to disable the interrupts on HW IP
    level. This would result in hang during shutdown if dwc2 is configured
    as peripheral mode.
    
    Fix this hang by only disable and sync irq when lowlevel hw is enabled.
    
    Fixes: 4fdf228cdf69 ("usb: dwc2: Fix shutdown callback in platform")
    Signed-off-by: Jisheng Zhang <jszhang@kernel.org>
    Link: https://patch.msgid.link/20251104002503.17158-2-jszhang@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: dwc2: fix hang during suspend if set as peripheral [+ + +]
Author: Jisheng Zhang <jszhang@kernel.org>
Date:   Tue Nov 4 08:25:03 2025 +0800

    usb: dwc2: fix hang during suspend if set as peripheral
    
    [ Upstream commit 2b94b054ac4974ad2f89f7f7461840c851933adb ]
    
    dwc2 on most platforms needs phy controller, clock and power supply.
    All of them must be enabled/activated to properly operate. If dwc2
    is configured as peripheral mode, then all the above three hardware
    resources are disabled at the end of the probe:
    
            /* Gadget code manages lowlevel hw on its own */
            if (hsotg->dr_mode == USB_DR_MODE_PERIPHERAL)
                    dwc2_lowlevel_hw_disable(hsotg);
    
    But the dwc2_suspend() tries to read the dwc2's reg to check whether
    is_device_mode or not, this would result in hang during suspend if dwc2
    is configured as peripheral mode.
    
    Fix this hang by bypassing suspend/resume if lowlevel hw isn't
    enabled.
    
    Fixes: 09a75e857790 ("usb: dwc2: refactor common low-level hw code to platform.c")
    Signed-off-by: Jisheng Zhang <jszhang@kernel.org>
    Link: https://patch.msgid.link/20251104002503.17158-3-jszhang@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: dwc3: keep susphy enabled during exit to avoid controller faults [+ + +]
Author: Udipto Goswami <udipto.goswami@oss.qualcomm.com>
Date:   Tue Dec 30 10:55:37 2025 -0500

    usb: dwc3: keep susphy enabled during exit to avoid controller faults
    
    [ Upstream commit e1003aa7ec9eccdde4c926bd64ef42816ad55f25 ]
    
    On some platforms, switching USB roles from host to device can trigger
    controller faults due to premature PHY power-down. This occurs when the
    PHY is disabled too early during teardown, causing synchronization
    issues between the PHY and controller.
    
    Keep susphy enabled during dwc3_host_exit() and dwc3_gadget_exit()
    ensures the PHY remains in a low-power state capable of handling
    required commands during role switch.
    
    Cc: stable <stable@kernel.org>
    Fixes: 6d735722063a ("usb: dwc3: core: Prevent phy suspend during init")
    Suggested-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Signed-off-by: Udipto Goswami <udipto.goswami@oss.qualcomm.com>
    Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Link: https://patch.msgid.link/20251126054221.120638-1-udipto.goswami@oss.qualcomm.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: dwc3: of-simple: fix clock resource leak in dwc3_of_simple_probe [+ + +]
Author: Miaoqian Lin <linmq006@gmail.com>
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 <stable@kernel.org>
    Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
    Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Link: https://patch.msgid.link/20251211064937.2360510-1-linmq006@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: Fix descriptor count when handling invalid MBIM extended descriptor [+ + +]
Author: Seungjin Bae <eeodqql09@gmail.com>
Date:   Sun Sep 28 14:56:11 2025 -0400

    USB: Fix descriptor count when handling invalid MBIM extended descriptor
    
    [ Upstream commit 5570ad1423ee60f6e972dadb63fb2e5f90a54cbe ]
    
    In cdc_parse_cdc_header(), the check for the USB_CDC_MBIM_EXTENDED_TYPE
    descriptor was using 'break' upon detecting an invalid length.
    
    This was incorrect because 'break' only exits the switch statement,
    causing the code to fall through to cnt++, thus incorrectly
    incrementing the count of parsed descriptors for a descriptor that was
    actually invalid and being discarded.
    
    This patch changes 'break' to 'goto next_desc;' to ensure that the
    logic skips the counter increment and correctly proceeds to the next
    descriptor in the buffer. This maintains an accurate count of only
    the successfully parsed descriptors.
    
    Fixes: e4c6fb7794982 ("usbnet: move the CDC parser into USB core")
    Signed-off-by: Seungjin Bae <eeodqql09@gmail.com>
    Link: https://lore.kernel.org/r/20250928185611.764589-1-eeodqql09@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
usb: gadget: lpc32xx_udc: fix clock imbalance in error path [+ + +]
Author: Johan Hovold <johan@kernel.org>
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: stable@vger.kernel.org
    Cc: Ma Ke <make24@iscas.ac.cn>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: Vladimir Zapolskiy <vz@mleia.com>
    Link: https://patch.msgid.link/20251218153519.19453-2-johan@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: tegra-xudc: Always reinitialize data toggle when clear halt [+ + +]
Author: Haotien Hsu <haotienh@nvidia.com>
Date:   Thu Nov 27 11:35:40 2025 +0800

    usb: gadget: tegra-xudc: Always reinitialize data toggle when clear halt
    
    commit 2585973c7f9ee31d21e5848c996fab2521fd383d upstream.
    
    The driver previously skipped handling ClearFeature(ENDPOINT_HALT)
    when the endpoint was already not halted. This prevented the
    controller from resetting the data sequence number and reinitializing
    the endpoint state.
    
    According to USB 3.2 specification Rev. 1.1, section 9.4.5,
    ClearFeature(ENDPOINT_HALT) must always reset the data sequence and
    set the stream state machine to Disabled, regardless of whether the
    endpoint was halted.
    
    Remove the early return so that ClearFeature(ENDPOINT_HALT) always
    resets the endpoint sequence state as required by the specification.
    
    Fixes: 49db427232fe ("usb: gadget: Add UDC driver for tegra XUSB device mode controller")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Haotien Hsu <haotienh@nvidia.com>
    Signed-off-by: Wayne Chang <waynec@nvidia.com>
    Link: https://patch.msgid.link/20251127033540.2287517-1-waynec@nvidia.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: udc: fix use-after-free in usb_gadget_state_work [+ + +]
Author: Jimmy Hu <hhhuuu@google.com>
Date:   Mon Dec 8 16:02:21 2025 -0500

    usb: gadget: udc: fix use-after-free in usb_gadget_state_work
    
    [ Upstream commit baeb66fbd4201d1c4325074e78b1f557dff89b5b ]
    
    A race condition during gadget teardown can lead to a use-after-free
    in usb_gadget_state_work(), as reported by KASAN:
    
      BUG: KASAN: invalid-access in sysfs_notify+0x2c/0xd0
      Workqueue: events usb_gadget_state_work
    
    The fundamental race occurs because a concurrent event (e.g., an
    interrupt) can call usb_gadget_set_state() and schedule gadget->work
    at any time during the cleanup process in usb_del_gadget().
    
    Commit 399a45e5237c ("usb: gadget: core: flush gadget workqueue after
    device removal") attempted to fix this by moving flush_work() to after
    device_del(). However, this does not fully solve the race, as a new
    work item can still be scheduled *after* flush_work() completes but
    before the gadget's memory is freed, leading to the same use-after-free.
    
    This patch fixes the race condition robustly by introducing a 'teardown'
    flag and a 'state_lock' spinlock to the usb_gadget struct. The flag is
    set during cleanup in usb_del_gadget() *before* calling flush_work() to
    prevent any new work from being scheduled once cleanup has commenced.
    The scheduling site, usb_gadget_set_state(), now checks this flag under
    the lock before queueing the work, thus safely closing the race window.
    
    Fixes: 5702f75375aa9 ("usb: gadget: udc-core: move sysfs_notify() to a workqueue")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Jimmy Hu <hhhuuu@google.com>
    Link: https://patch.msgid.link/20251023054945.233861-1-hhhuuu@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: lpc32xx_udc: Fix error handling in probe [+ + +]
Author: Ma Ke <make24@iscas.ac.cn>
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 <stable@kernel.org>
    Fixes: 24a28e428351 ("USB: gadget driver for LPC32xx")
    Signed-off-by: Ma Ke <make24@iscas.ac.cn>
    Link: https://patch.msgid.link/20251215020931.15324-1-make24@iscas.ac.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: ohci-nxp: fix device leak on probe failure [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Tue Dec 30 08:34:58 2025 -0500

    usb: ohci-nxp: fix device leak on probe failure
    
    [ Upstream commit b4c61e542faf8c9131d69ecfc3ad6de96d1b2ab8 ]
    
    Make sure to drop the reference taken when looking up the PHY I2C device
    during probe on probe failure (e.g. probe deferral) and on driver
    unbind.
    
    Fixes: 73108aa90cbf ("USB: ohci-nxp: Use isp1301 driver")
    Cc: stable@vger.kernel.org      # 3.5
    Reported-by: Ma Ke <make24@iscas.ac.cn>
    Link: https://lore.kernel.org/lkml/20251117013428.21840-1-make24@iscas.ac.cn/
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    Reviewed-by: Vladimir Zapolskiy <vz@mleia.com>
    Link: https://patch.msgid.link/20251218153519.19453-4-johan@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: ohci-nxp: Use helper function devm_clk_get_enabled() [+ + +]
Author: Zhang Zekun <zhangzekun11@huawei.com>
Date:   Tue Dec 30 08:34:57 2025 -0500

    usb: ohci-nxp: Use helper function devm_clk_get_enabled()
    
    [ Upstream commit c146ede472717f352b7283a525bd9a1a2b15e2cf ]
    
    devm_clk_get() and clk_prepare_enable() can be replaced by helper
    function devm_clk_get_enabled(). Let's use devm_clk_get_enabled() to
    simplify code and avoid calling clk_disable_unprepare().
    
    Signed-off-by: Zhang Zekun <zhangzekun11@huawei.com>
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://lore.kernel.org/r/20240902123020.29267-3-zhangzekun11@huawei.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: b4c61e542faf ("usb: ohci-nxp: fix device leak on probe failure")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: phy: Initialize struct usb_phy list_head [+ + +]
Author: Diogo Ivo <diogo.ivo@tecnico.ulisboa.pt>
Date:   Fri Nov 21 18:16:36 2025 +0000

    usb: phy: Initialize struct usb_phy list_head
    
    commit c69ff68b097b0f53333114f1b2c3dc128f389596 upstream.
    
    As part of the registration of a new 'struct usb_phy' with the USB PHY core
    via either usb_add_phy(struct usb_phy *x, ...) or usb_add_phy_dev(struct
    usb_phy *x) these functions call list_add_tail(&x->head, phy_list) in
    order for the new instance x to be stored in phy_list, a static list
    kept internally by the core.
    
    After 7d21114dc6a2 ("usb: phy: Introduce one extcon device into usb phy")
    when executing either of the registration functions above it is possible
    that usb_add_extcon() fails, leading to either function returning before
    the call to list_add_tail(), leaving x->head uninitialized.
    
    Then, when a driver tries to undo the failed registration by calling
    usb_remove_phy(struct usb_phy *x) there will be an unconditional call to
    list_del(&x->head) acting on an uninitialized variable, and thus a
    possible NULL pointer dereference.
    
    Fix this by initializing x->head before usb_add_extcon() has a
    chance to fail. Note that this was not needed before 7d21114dc6a2 since
    list_add_phy() was executed unconditionally and it guaranteed that x->head
    was initialized.
    
    Fixes: 7d21114dc6a2 ("usb: phy: Introduce one extcon device into usb phy")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Diogo Ivo <diogo.ivo@tecnico.ulisboa.pt>
    Link: https://patch.msgid.link/20251121-diogo-smaug_typec-v2-1-5c37c1169d57@tecnico.ulisboa.pt
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: phy: isp1301: fix non-OF device reference imbalance [+ + +]
Author: Johan Hovold <johan@kernel.org>
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: stable@vger.kernel.org
    Cc: Ma Ke <make24@iscas.ac.cn>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: Vladimir Zapolskiy <vz@mleia.com>
    Link: https://patch.msgid.link/20251218153519.19453-3-johan@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: raw-gadget: cap raw_io transfer length to KMALLOC_MAX_SIZE [+ + +]
Author: Gopi Krishna Menon <krishnagopi487@gmail.com>
Date:   Tue Oct 28 22:26:57 2025 +0530

    usb: raw-gadget: cap raw_io transfer length to KMALLOC_MAX_SIZE
    
    [ Upstream commit a5160af78be7fcf3ade6caab0a14e349560c96d7 ]
    
    The previous commit removed the PAGE_SIZE limit on transfer length of
    raw_io buffer in order to avoid any problems with emulating USB devices
    whose full configuration descriptor exceeds PAGE_SIZE in length. However
    this also removes the upperbound on user supplied length, allowing very
    large values to be passed to the allocator.
    
    syzbot on fuzzing the transfer length with very large value (1.81GB)
    results in kmalloc() to fall back to the page allocator, which triggers
    a kernel warning as the page allocator cannot handle allocations more
    than MAX_PAGE_ORDER/KMALLOC_MAX_SIZE.
    
    Since there is no limit imposed on the size of buffer for both control
    and non control transfers, cap the raw_io transfer length to
    KMALLOC_MAX_SIZE and return -EINVAL for larger transfer length to
    prevent any warnings from the page allocator.
    
    Fixes: 37b9dd0d114a ("usb: raw-gadget: do not limit transfer length")
    Tested-by: syzbot+d8fd35fa6177afa8c92b@syzkaller.appspotmail.com
    Reported-by: syzbot+d8fd35fa6177afa8c92b@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/all/68fc07a0.a70a0220.3bf6c6.01ab.GAE@google.com/
    Signed-off-by: Gopi Krishna Menon <krishnagopi487@gmail.com>
    Reviewed-by: Andrey Konovalov <andreyknvl@gmail.com>
    Link: https://patch.msgid.link/20251028165659.50962-1-krishnagopi487@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: renesas_usbhs: Fix a resource leak in usbhs_pipe_malloc() [+ + +]
Author: Haoxiang Li <haoxiang_li2024@163.com>
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 <stable@kernel.org>
    Signed-off-by: Haoxiang Li <haoxiang_li2024@163.com>
    Link: https://patch.msgid.link/20251204132129.109234-1-haoxiang_li2024@163.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: serial: belkin_sa: fix TIOCMBIS and TIOCMBIC [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Wed Oct 22 17:26:33 2025 +0200

    USB: serial: belkin_sa: fix TIOCMBIS and TIOCMBIC
    
    commit b6e0b3016187446ddef9edac03cd9d544ac63f11 upstream.
    
    Asserting or deasserting a modem control line using TIOCMBIS or TIOCMBIC
    should not deassert any lines that are not in the mask.
    
    Fix this long-standing regression dating back to 2003 when the
    tiocmset() callback was introduced.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable@vger.kernel.org
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: ftdi_sio: match on interface number for jtag [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Nov 10 12:12:05 2025 +0100

    USB: serial: ftdi_sio: match on interface number for jtag
    
    commit 4e31a5d0a9ee672f708fc993c1d5520643f769fd upstream.
    
    Some FTDI devices have the first port reserved for JTAG and have been
    using a dedicated quirk to prevent binding to it.
    
    As can be inferred directly or indirectly from the commit messages,
    almost all of these devices are dual port devices which means that the
    more recently added macro for matching on interface number can be used
    instead (and some such devices do so already).
    
    This avoids probing interfaces that will never be bound and cleans up
    the match table somewhat.
    
    Note that the JTAG quirk is kept for quad port devices, which would
    otherwise require three match entries.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: kobil_sct: fix TIOCMBIS and TIOCMBIC [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Wed Oct 22 17:26:34 2025 +0200

    USB: serial: kobil_sct: fix TIOCMBIS and TIOCMBIC
    
    commit d432df758f92c4c28aac409bc807fd1716167577 upstream.
    
    Asserting or deasserting a modem control line using TIOCMBIS or TIOCMBIC
    should not deassert any lines that are not in the mask.
    
    Fix this long-standing issue dating back to 2003 when the support for
    these ioctls was added with the introduction of the tiocmset() callback.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable@vger.kernel.org
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add Foxconn T99W760 [+ + +]
Author: Slark Xiao <slark_xiao@163.com>
Date:   Tue Nov 18 14:45:28 2025 +0800

    USB: serial: option: add Foxconn T99W760
    
    commit 7970b4969c4c99bcdaf105f9f39c6d2021f6d244 upstream.
    
    T99W760 is designed based on Qualcomm SDX35 (5G redcap) chip. There are
    three serial ports to be enumerated: Modem, NMEA and Diag.
    
    test evidence as below:
    T:  Bus=03 Lev=01 Prnt=01 Port=03 Cnt=01 Dev#=  4 Spd=5000  MxCh= 0
    D:  Ver= 3.20 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=0489 ProdID=e123 Rev=05.15
    S:  Manufacturer=QCOM
    S:  Product=SDXBAAGHA-IDP _SN:39A8D3E4
    S:  SerialNumber=39a8d3e4
    C:  #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=896mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
    E:  Ad=85(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=87(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=88(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    
    0&1: MBIM, 2:Modem, 3:GNSS(non-serial port), 4: NMEA, 5:Diag
    
    Signed-off-by: Slark Xiao <slark_xiao@163.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add Telit Cinterion FE910C04 new compositions [+ + +]
Author: Fabio Porcedda <fabio.porcedda@gmail.com>
Date:   Wed Nov 26 15:26:39 2025 +0100

    USB: serial: option: add Telit Cinterion FE910C04 new compositions
    
    commit c908039a29aa70870871f4848125b3d743f929bf upstream.
    
    Add the following Telit Cinterion new compositions:
    
    0x10c1: RNDIS + tty (AT/NMEA) + tty (AT) + tty (diag)
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10c1 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=ef(misc ) Sub=04 Prot=01 Driver=rndis_host
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10c2: MBIM + tty (AT/NMEA) + tty (AT) + tty (diag)
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  8 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10c2 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10c3: ECM + tty (AT/NMEA) + tty (AT) + tty (diag)
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  9 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10c3 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=06 Prot=00 Driver=cdc_ether
    E:  Ad=82(I) Atr=03(Int.) MxPS=  16 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10c5: RNDIS + tty (AT) + tty (AT) + tty (diag)
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 10 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10c5 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=ef(misc ) Sub=04 Prot=01 Driver=rndis_host
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10c6: MBIM + tty (AT) + tty (AT) + tty (diag)
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 11 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10c6 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10c9: MBIM + tty (AT) + tty (diag) + DPL (Data Packet Logging) + adb
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 13 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10c9 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 6 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 4 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=usbfs
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10cb: RNDIS + tty (AT) + tty (diag) + DPL (Data Packet Logging) + adb
    T:  Bus=01 Lev=01 Prnt=01 Port=09 Cnt=01 Dev#=  9 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10cb Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 6 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=ef(misc ) Sub=04 Prot=01 Driver=rndis_host
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 4 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: move Telit 0x10c7 composition in the right place [+ + +]
Author: Fabio Porcedda <fabio.porcedda@gmail.com>
Date:   Wed Nov 26 15:26:40 2025 +0100

    USB: serial: option: move Telit 0x10c7 composition in the right place
    
    commit 072f2c49572547f4b0776fe2da6b8f61e4b34699 upstream.
    
    Move Telit 0x10c7 composition right after 0x10c6 composition and
    before 0x10c8 composition.
    
    Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: typec: ucsi: Handle incorrect num_connectors capability [+ + +]
Author: Mark Pearson <mpearson-lenovo@squebb.ca>
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 <mpearson-lenovo@squebb.ca>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Link: https://lore.kernel.org/r/20250821185319.2585023-1-mpearson-lenovo@squebb.ca
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: usb-storage: Maintain minimal modifications to the bcdDevice range. [+ + +]
Author: Chen Changcheng <chenchangcheng@kylinos.cn>
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 <chenchangcheng@kylinos.cn>
    Link: https://patch.msgid.link/20251218012318.15978-1-chenchangcheng@kylinos.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: usb-storage: No additional quirks need to be added to the EL-R12 optical drive. [+ + +]
Author: Chen Changcheng <chenchangcheng@kylinos.cn>
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 <chenchangcheng@kylinos.cn>
    Link: https://patch.msgid.link/20251121064020.29332-1-chenchangcheng@kylinos.cn
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: xhci: Apply the link chain quirk on NEC isoc endpoints [+ + +]
Author: Michal Pecio <michal.pecio@gmail.com>
Date:   Thu Jan 8 00:49:27 2026 -0800

    usb: xhci: Apply the link chain quirk on NEC isoc endpoints
    
    commit bb0ba4cb1065e87f9cc75db1fa454e56d0894d01 upstream.
    
    Two clearly different specimens of NEC uPD720200 (one with start/stop
    bug, one without) were seen to cause IOMMU faults after some Missed
    Service Errors. Faulting address is immediately after a transfer ring
    segment and patched dynamic debug messages revealed that the MSE was
    received when waiting for a TD near the end of that segment:
    
    [ 1.041954] xhci_hcd: Miss service interval error for slot 1 ep 2 expected TD DMA ffa08fe0
    [ 1.042120] xhci_hcd: AMD-Vi: Event logged [IO_PAGE_FAULT domain=0x0005 address=0xffa09000 flags=0x0000]
    [ 1.042146] xhci_hcd: AMD-Vi: Event logged [IO_PAGE_FAULT domain=0x0005 address=0xffa09040 flags=0x0000]
    
    It gets even funnier if the next page is a ring segment accessible to
    the HC. Below, it reports MSE in segment at ff1e8000, plows through a
    zero-filled page at ff1e9000 and starts reporting events for TRBs in
    page at ff1ea000 every microframe, instead of jumping to seg ff1e6000.
    
    [ 7.041671] xhci_hcd: Miss service interval error for slot 1 ep 2 expected TD DMA ff1e8fe0
    [ 7.041999] xhci_hcd: Miss service interval error for slot 1 ep 2 expected TD DMA ff1e8fe0
    [ 7.042011] xhci_hcd: WARN: buffer overrun event for slot 1 ep 2 on endpoint
    [ 7.042028] xhci_hcd: All TDs skipped for slot 1 ep 2. Clear skip flag.
    [ 7.042134] xhci_hcd: WARN: buffer overrun event for slot 1 ep 2 on endpoint
    [ 7.042138] xhci_hcd: ERROR Transfer event TRB DMA ptr not part of current TD ep_index 2 comp_code 31
    [ 7.042144] xhci_hcd: Looking for event-dma 00000000ff1ea040 trb-start 00000000ff1e6820 trb-end 00000000ff1e6820
    [ 7.042259] xhci_hcd: WARN: buffer overrun event for slot 1 ep 2 on endpoint
    [ 7.042262] xhci_hcd: ERROR Transfer event TRB DMA ptr not part of current TD ep_index 2 comp_code 31
    [ 7.042266] xhci_hcd: Looking for event-dma 00000000ff1ea050 trb-start 00000000ff1e6820 trb-end 00000000ff1e6820
    
    At some point completion events change from Isoch Buffer Overrun to
    Short Packet and the HC finally finds cycle bit mismatch in ff1ec000.
    
    [ 7.098130] xhci_hcd: ERROR Transfer event TRB DMA ptr not part of current TD ep_index 2 comp_code 13
    [ 7.098132] xhci_hcd: Looking for event-dma 00000000ff1ecc50 trb-start 00000000ff1e6820 trb-end 00000000ff1e6820
    [ 7.098254] xhci_hcd: ERROR Transfer event TRB DMA ptr not part of current TD ep_index 2 comp_code 13
    [ 7.098256] xhci_hcd: Looking for event-dma 00000000ff1ecc60 trb-start 00000000ff1e6820 trb-end 00000000ff1e6820
    [ 7.098379] xhci_hcd: Overrun event on slot 1 ep 2
    
    It's possible that data from the isochronous device were written to
    random buffers of pending TDs on other endpoints (either IN or OUT),
    other devices or even other HCs in the same IOMMU domain.
    
    Lastly, an error from a different USB device on another HC. Was it
    caused by the above? I don't know, but it may have been. The disk
    was working without any other issues and generated PCIe traffic to
    starve the NEC of upstream BW and trigger those MSEs. The two HCs
    shared one x1 slot by means of a commercial "PCIe splitter" board.
    
    [ 7.162604] usb 10-2: reset SuperSpeed USB device number 3 using xhci_hcd
    [ 7.178990] sd 9:0:0:0: [sdb] tag#0 UNKNOWN(0x2003) Result: hostbyte=0x07 driverbyte=DRIVER_OK cmd_age=0s
    [ 7.179001] sd 9:0:0:0: [sdb] tag#0 CDB: opcode=0x28 28 00 04 02 ae 00 00 02 00 00
    [ 7.179004] I/O error, dev sdb, sector 67284480 op 0x0:(READ) flags 0x80700 phys_seg 5 prio class 0
    
    Fortunately, it appears that this ridiculous bug is avoided by setting
    the chain bit of Link TRBs on isochronous rings. Other ancient HCs are
    known which also expect the bit to be set and they ignore Link TRBs if
    it's not. Reportedly, 0.95 spec guaranteed that the bit is set.
    
    The bandwidth-starved NEC HC running a 32KB/uframe UVC endpoint reports
    tens of MSEs per second and runs into the bug within seconds. Chaining
    Link TRBs allows the same workload to run for many minutes, many times.
    
    No negative side effects seen in UVC recording and UAC playback with a
    few devices at full speed, high speed and SuperSpeed.
    
    The problem doesn't reproduce on the newer Renesas uPD720201/uPD720202
    and on old Etron EJ168 and VIA VL805 (but the VL805 has other bug).
    
    [shorten line length of log snippets in commit messge -Mathias]
    
    Signed-off-by: Michal Pecio <michal.pecio@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20250306144954.3507700-14-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [Shivani: Modified to apply on v5.10.y-v6.1.y]
    Signed-off-by: Shivani Agarwal <shivani.agarwal@broadcom.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: xhci: limit run_graceperiod for only usb 3.0 devices [+ + +]
Author: Hongyu Xie <xiehongyu1@kylinos.cn>
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 <xiehongyu1@kylinos.cn>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://patch.msgid.link/20251119142417.2820519-2-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: xhci: move link chain bit quirk checks into one helper function. [+ + +]
Author: Niklas Neronin <niklas.neronin@linux.intel.com>
Date:   Thu Jan 8 00:49:26 2026 -0800

    usb: xhci: move link chain bit quirk checks into one helper function.
    
    commit 7476a2215c07703db5e95efaa3fc5b9f957b9417 upstream.
    
    Older 0.95 xHCI hosts and some other specific newer hosts require the
    chain bit to be set for Link TRBs even if the link TRB is not in the
    middle of a transfer descriptor (TD).
    
    move the checks for all those cases  into one xhci_link_chain_quirk()
    function to clean up and avoid code duplication.
    
    No functional changes.
    
    [skip renaming chain_links flag, reword commit message -Mathias]
    
    Signed-off-by: Niklas Neronin <niklas.neronin@linux.intel.com>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20240626124835.1023046-10-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [Shivani: Modified to apply on v5.10.y-v6.1.y]
    Signed-off-by: Shivani Agarwal <shivani.agarwal@broadcom.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usbip: Fix locking bug in RT-enabled kernels [+ + +]
Author: Lizhi Xu <lizhi.xu@windriver.com>
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: syzbot+205ef33a3b636b4181fb@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=205ef33a3b636b4181fb
    Signed-off-by: Lizhi Xu <lizhi.xu@windriver.com>
    Acked-by: Shuah Khan <skhan@linuxfoundation.org>
    Link: https://lore.kernel.org/r/20250916014143.1439759-1-lizhi.xu@windriver.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
vdpa: Introduce and use vdpa device get, set config helpers [+ + +]
Author: Parav Pandit <parav@nvidia.com>
Date:   Tue Oct 26 20:55:12 2021 +0300

    vdpa: Introduce and use vdpa device get, set config helpers
    
    [ Upstream commit 6dbb1f1687a2ccdfc5b84b0a35bbc6dfefc4de3b ]
    
    Subsequent patches enable get and set configuration either
    via management device or via vdpa device' config ops.
    
    This requires synchronization between multiple callers to get and set
    config callbacks. Features setting also influence the layout of the
    configuration fields endianness.
    
    To avoid exposing synchronization primitives to callers, introduce
    helper for setting the configuration and use it.
    
    Signed-off-by: Parav Pandit <parav@nvidia.com>
    Reviewed-by: Eli Cohen <elic@nvidia.com>
    Acked-by: Jason Wang <jasowang@redhat.com>
    Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
    Link: https://lore.kernel.org/r/20211026175519.87795-2-parav@nvidia.com
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Stable-dep-of: e40b6abe0b12 ("virtio_vdpa: fix misleading return in void function")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

vdpa: Introduce query of device config layout [+ + +]
Author: Parav Pandit <parav@nvidia.com>
Date:   Tue Oct 26 20:55:13 2021 +0300

    vdpa: Introduce query of device config layout
    
    [ Upstream commit ad69dd0bf26b88ec6ab26f8bbe5cd74fbed7672a ]
    
    Introduce a command to query a device config layout.
    
    An example query of network vdpa device:
    
    $ vdpa dev add name bar mgmtdev vdpasim_net
    
    $ vdpa dev config show
    bar: mac 00:35:09:19:48:05 link up link_announce false mtu 1500
    
    $ vdpa dev config show -jp
    {
        "config": {
            "bar": {
                "mac": "00:35:09:19:48:05",
                "link ": "up",
                "link_announce ": false,
                "mtu": 1500,
            }
        }
    }
    
    Signed-off-by: Parav Pandit <parav@nvidia.com>
    Signed-off-by: Eli Cohen <elic@nvidia.com>
    Acked-by: Jason Wang <jasowang@redhat.com>
    Link: https://lore.kernel.org/r/20211026175519.87795-3-parav@nvidia.com
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Stable-dep-of: e40b6abe0b12 ("virtio_vdpa: fix misleading return in void function")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

vdpa: Sync calls set/get config/status with cf_mutex [+ + +]
Author: Eli Cohen <elic@nvidia.com>
Date:   Wed Jan 5 13:46:35 2022 +0200

    vdpa: Sync calls set/get config/status with cf_mutex
    
    [ Upstream commit 73bc0dbb591baea322a7319c735e5f6c7dba9cfb ]
    
    Add wrappers to get/set status and protect these operations with
    cf_mutex to serialize these operations with respect to get/set config
    operations.
    
    Signed-off-by: Eli Cohen <elic@nvidia.com>
    Link: https://lore.kernel.org/r/20220105114646.577224-4-elic@nvidia.com
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Stable-dep-of: e40b6abe0b12 ("virtio_vdpa: fix misleading return in void function")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
vhost/vsock: improve RCU read sections around vhost_vsock_get() [+ + +]
Author: Stefano Garzarella <sgarzare@redhat.com>
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: stefanha@redhat.com
    Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
    Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
    Message-Id: <20251126133826.142496-1-sgarzare@redhat.com>
    Message-ID: <20251126210313.GA499503@fedora>
    Acked-by: Jason Wang <jasowang@redhat.com>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
via_wdt: fix critical boot hang due to unnamed resource allocation [+ + +]
Author: Li Qiang <liqiang01@kylinos.cn>
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 <liqiang01@kylinos.cn>
    Reviewed-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
virtio: fix virtqueue_set_affinity() docs [+ + +]
Author: Michael S. Tsirkin <mst@redhat.com>
Date:   Thu Nov 13 04:34:43 2025 -0500

    virtio: fix virtqueue_set_affinity() docs
    
    [ Upstream commit 43236d8bbafff94b423afecc4a692dd90602d426 ]
    
    Rewrite the comment for better grammar and clarity.
    
    Fixes: 75a0a52be3c2 ("virtio: introduce an API to set affinity for a virtqueue")
    Message-Id: <e317e91bd43b070e5eaec0ebbe60c5749d02e2dd.1763026134.git.mst@redhat.com>
    Acked-by: Jason Wang <jasowang@redhat.com>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
virtio_console: fix order of fields cols and rows [+ + +]
Author: Maximilian Immanuel Brandtner <maxbr@linux.ibm.com>
Date:   Mon Mar 24 15:42:46 2025 +0100

    virtio_console: fix order of fields cols and rows
    
    commit 5326ab737a47278dbd16ed3ee7380b26c7056ddd upstream.
    
    According to section 5.3.6.2 (Multiport Device Operation) of the virtio
    spec(version 1.2) a control buffer with the event VIRTIO_CONSOLE_RESIZE
    is followed by a virtio_console_resize struct containing cols then rows.
    The kernel implements this the wrong way around (rows then cols) resulting
    in the two values being swapped.
    
    Signed-off-by: Maximilian Immanuel Brandtner <maxbr@linux.ibm.com>
    Message-Id: <20250324144300.905535-1-maxbr@linux.ibm.com>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Cc: Filip Hejsek <filip.hejsek@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
virtio_vdpa: fix misleading return in void function [+ + +]
Author: Alok Tiwari <alok.a.tiwari@oracle.com>
Date:   Wed Oct 1 12:16:50 2025 -0700

    virtio_vdpa: fix misleading return in void function
    
    [ Upstream commit e40b6abe0b1247d43bc61942aa7534fca7209e44 ]
    
    virtio_vdpa_set_status() is declared as returning void, but it used
    "return vdpa_set_status()" Since vdpa_set_status() also returns
    void, the return statement is unnecessary and misleading.
    Remove it.
    
    Fixes: c043b4a8cf3b ("virtio: introduce a vDPA based transport")
    Signed-off-by: Alok Tiwari <alok.a.tiwari@oracle.com>
    Message-Id: <20251001191653.1713923-1-alok.a.tiwari@oracle.com>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Acked-by: Jason Wang <jasowang@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
watchdog: wdat_wdt: Fix ACPI table leak in probe function [+ + +]
Author: Haotian Zhang <vulab@iscas.ac.cn>
Date:   Thu Nov 13 10:30:32 2025 +0800

    watchdog: wdat_wdt: Fix ACPI table leak in probe function
    
    [ Upstream commit 25c0b472eab8379683d4eef681185c104bed8ffd ]
    
    wdat_wdt_probe() calls acpi_get_table() to obtain the WDAT ACPI table but
    never calls acpi_put_table() on any paths. This causes a permanent ACPI
    table memory leak.
    
    Add a single cleanup path which calls acpi_put_table() to ensure
    the ACPI table is always released.
    
    Fixes: 058dfc767008 ("ACPI / watchdog: Add support for WDAT hardware watchdog")
    Suggested-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Haotian Zhang <vulab@iscas.ac.cn>
    Reviewed-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

watchdog: wdat_wdt: Stop watchdog when uninstalling module [+ + +]
Author: Liu Xinpeng <liuxp11@chinatelecom.cn>
Date:   Tue Apr 26 22:53:30 2022 +0800

    watchdog: wdat_wdt: Stop watchdog when uninstalling module
    
    [ Upstream commit 330415ebea81b65842e4cc6d2fd985c1b369e650 ]
    
    Test shows that wachdog still reboots machine after the module
    is removed. Use watchdog_stop_on_unregister to stop the watchdog
    on removing.
    
    Signed-off-by: Liu Xinpeng <liuxp11@chinatelecom.cn>
    eviewed-by: Guenter Roeck <linux@roeck-us.net>
    Link: https://lore.kernel.org/r/1650984810-6247-4-git-send-email-liuxp11@chinatelecom.cn
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
    Stable-dep-of: 25c0b472eab8 ("watchdog: wdat_wdt: Fix ACPI table leak in probe function")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
wifi: avoid kernel-infoleak from struct iw_point [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Jan 8 10:19:27 2026 +0000

    wifi: avoid kernel-infoleak from struct iw_point
    
    commit 21cbf883d073abbfe09e3924466aa5e0449e7261 upstream.
    
    struct iw_point has a 32bit hole on 64bit arches.
    
    struct iw_point {
      void __user   *pointer;       /* Pointer to the data  (in user space) */
      __u16         length;         /* number of fields or size in bytes */
      __u16         flags;          /* Optional params */
    };
    
    Make sure to zero the structure to avoid disclosing 32bits of kernel data
    to user space.
    
    Fixes: 87de87d5e47f ("wext: Dispatch and handle compat ioctls entirely in net/wireless/wext.c")
    Reported-by: syzbot+bfc7323743ca6dbcc3d3@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/695f83f3.050a0220.1c677c.0392.GAE@google.com/T/#u
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260108101927.857582-1-edumazet@google.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: cw1200: Fix potential memory leak in cw1200_bh_rx_helper() [+ + +]
Author: Abdun Nihaal <nihaal@cse.iitm.ac.in>
Date:   Mon Nov 10 23:23:15 2025 +0530

    wifi: cw1200: Fix potential memory leak in cw1200_bh_rx_helper()
    
    [ Upstream commit 5e88e864118c20e63a1571d0ff0a152e5d684959 ]
    
    In one of the error paths, the memory allocated for skb_rx is not freed.
    Fix that by freeing it before returning.
    
    Fixes: a910e4a94f69 ("cw1200: add driver for the ST-E CW1100 & CW1200 WLAN chipsets")
    Signed-off-by: Abdun Nihaal <nihaal@cse.iitm.ac.in>
    Link: https://patch.msgid.link/20251110175316.106591-1-nihaal@cse.iitm.ac.in
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ieee80211: correct FILS status codes [+ + +]
Author: Ria Thomas <ria.thomas@morsemicro.com>
Date:   Mon Nov 24 18:26:37 2025 +0530

    wifi: ieee80211: correct FILS status codes
    
    [ Upstream commit 24d4da5c2565313c2ad3c43449937a9351a64407 ]
    
    The FILS status codes are set to 108/109, but the IEEE 802.11-2020
    spec defines them as 112/113. Update the enum so it matches the
    specification and keeps the kernel consistent with standard values.
    
    Fixes: a3caf7440ded ("cfg80211: Add support for FILS shared key authentication offload")
    Signed-off-by: Ria Thomas <ria.thomas@morsemicro.com>
    Reviewed-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
    Link: https://patch.msgid.link/20251124125637.3936154-1-ria.thomas@morsemicro.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mac80211: Discard Beacon frames to non-broadcast address [+ + +]
Author: Jouni Malinen <jouni.malinen@oss.qualcomm.com>
Date:   Wed Jan 7 05:52:14 2026 -0500

    wifi: mac80211: Discard Beacon frames to non-broadcast address
    
    [ Upstream commit 193d18f60588e95d62e0f82b6a53893e5f2f19f8 ]
    
    Beacon frames are required to be sent to the broadcast address, see IEEE
    Std 802.11-2020, 11.1.3.1 ("The Address 1 field of the Beacon .. frame
    shall be set to the broadcast address"). A unicast Beacon frame might be
    used as a targeted attack to get one of the associated STAs to do
    something (e.g., using CSA to move it to another channel). As such, it
    is better have strict filtering for this on the received side and
    discard all Beacon frames that are sent to an unexpected address.
    
    This is even more important for cases where beacon protection is used.
    The current implementation in mac80211 is correctly discarding unicast
    Beacon frames if the Protected Frame bit in the Frame Control field is
    set to 0. However, if that bit is set to 1, the logic used for checking
    for configured BIGTK(s) does not actually work. If the driver does not
    have logic for dropping unicast Beacon frames with Protected Frame bit
    1, these frames would be accepted in mac80211 processing as valid Beacon
    frames even though they are not protected. This would allow beacon
    protection to be bypassed. While the logic for checking beacon
    protection could be extended to cover this corner case, a more generic
    check for discard all Beacon frames based on A1=unicast address covers
    this without needing additional changes.
    
    Address all these issues by dropping received Beacon frames if they are
    sent to a non-broadcast address.
    
    Cc: stable@vger.kernel.org
    Fixes: af2d14b01c32 ("mac80211: Beacon protection using the new BIGTK (STA)")
    Signed-off-by: Jouni Malinen <jouni.malinen@oss.qualcomm.com>
    Link: https://patch.msgid.link/20251215151134.104501-1-jouni.malinen@oss.qualcomm.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    [ adapted RX_DROP return value to RX_DROP_MONITOR ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: mt76: Fix DTS power-limits on little endian systems [+ + +]
Author: Sven Eckelmann (Plasma Cloud) <se@simonwunderlich.de>
Date:   Mon Dec 29 16:58:01 2025 -0500

    wifi: mt76: Fix DTS power-limits on little endian systems
    
    [ Upstream commit 38b845e1f9e810869b0a0b69f202b877b7b7fb12 ]
    
    The power-limits for ru and mcs and stored in the devicetree as bytewise
    array (often with sizes which are not a multiple of 4). These arrays have a
    prefix which defines for how many modes a line is applied. This prefix is
    also only a byte - but the code still tried to fix the endianness of this
    byte with a be32 operation. As result, loading was mostly failing or was
    sending completely unexpected values to the firmware.
    
    Since the other rates are also stored in the devicetree as bytewise arrays,
    just drop the u32 access + be32_to_cpu conversion and directly access them
    as bytes arrays.
    
    Cc: stable@vger.kernel.org
    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) <se@simonwunderlich.de>
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: rtl818x: Fix potential memory leaks in rtl8180_init_rx_ring() [+ + +]
Author: Abdun Nihaal <nihaal@cse.iitm.ac.in>
Date:   Fri Nov 14 15:15:26 2025 +0530

    wifi: rtl818x: Fix potential memory leaks in rtl8180_init_rx_ring()
    
    [ Upstream commit 9b5b9c042b30befc5b37e4539ace95af70843473 ]
    
    In rtl8180_init_rx_ring(), memory is allocated for skb packets and DMA
    allocations in a loop. When an allocation fails, the previously
    successful allocations are not freed on exit.
    
    Fix that by jumping to err_free_rings label on error, which calls
    rtl8180_free_rx_ring() to free the allocations. Remove the free of
    rx_ring in rtl8180_init_rx_ring() error path, and set the freed
    priv->rx_buf entry to null, to avoid double free.
    
    Fixes: f653211197f3 ("Add rtl8180 wireless driver")
    Signed-off-by: Abdun Nihaal <nihaal@cse.iitm.ac.in>
    Reviewed-by: Ping-Ke Shih <pkshih@realtek.com>
    Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
    Link: https://patch.msgid.link/20251114094527.79842-1-nihaal@cse.iitm.ac.in
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: rtl818x: rtl8187: Fix potential buffer underflow in rtl8187_rx_cb() [+ + +]
Author: Seungjin Bae <eeodqql09@gmail.com>
Date:   Mon Nov 17 20:32:59 2025 -0500

    wifi: rtl818x: rtl8187: Fix potential buffer underflow in rtl8187_rx_cb()
    
    [ Upstream commit b647d2574e4583c2e3b0ab35568f60c88e910840 ]
    
    The rtl8187_rx_cb() calculates the rx descriptor header address
    by subtracting its size from the skb tail pointer.
    However, it does not validate if the received packet
    (skb->len from urb->actual_length) is large enough to contain this
    header.
    
    If a truncated packet is received, this will lead to a buffer
    underflow, reading memory before the start of the skb data area,
    and causing a kernel panic.
    
    Add length checks for both rtl8187 and rtl8187b descriptor headers
    before attempting to access them, dropping the packet cleanly if the
    check fails.
    
    Fixes: 6f7853f3cbe4 ("rtl8187: change rtl8187_dev.c to support RTL8187B (part 2)")
    Signed-off-by: Seungjin Bae <eeodqql09@gmail.com>
    Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
    Link: https://patch.msgid.link/20251118013258.1789949-2-eeodqql09@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/dumpstack: Prevent KASAN false positive warnings in __show_regs() [+ + +]
Author: Tengda Wu <wutengda@huaweicloud.com>
Date:   Thu Oct 23 09:06:32 2025 +0000

    x86/dumpstack: Prevent KASAN false positive warnings in __show_regs()
    
    [ Upstream commit ced37e9ceae50e4cb6cd058963bd315ec9afa651 ]
    
    When triggering a stack dump via sysrq (echo t > /proc/sysrq-trigger),
    KASAN may report false-positive out-of-bounds access:
    
      BUG: KASAN: out-of-bounds in __show_regs+0x4b/0x340
      Call Trace:
        dump_stack_lvl
        print_address_description.constprop.0
        print_report
        __show_regs
        show_trace_log_lvl
        sched_show_task
        show_state_filter
        sysrq_handle_showstate
        __handle_sysrq
        write_sysrq_trigger
        proc_reg_write
        vfs_write
        ksys_write
        do_syscall_64
        entry_SYSCALL_64_after_hwframe
    
    The issue occurs as follows:
    
      Task A (walk other tasks' stacks)           Task B (running)
      1. echo t > /proc/sysrq-trigger
      show_trace_log_lvl
        regs = unwind_get_entry_regs()
        show_regs_if_on_stack(regs)
                                                  2. The stack value pointed by
                                                     `regs` keeps changing, and
                                                     so are the tags in its
                                                     KASAN shadow region.
          __show_regs(regs)
            regs->ax, regs->bx, ...
              3. hit KASAN redzones, OOB
    
    When task A walks task B's stack without suspending it, the continuous changes
    in task B's stack (and corresponding KASAN shadow tags) may cause task A to
    hit KASAN redzones when accessing obsolete values on the stack, resulting in
    false positive reports.
    
    Simply stopping the task before unwinding is not a viable fix, as it would
    alter the state intended to inspect. This is especially true for diagnosing
    misbehaving tasks (e.g., in a hard lockup), where stopping might fail or hide
    the root cause by changing the call stack.
    
    Therefore, fix this by disabling KASAN checks during asynchronous stack
    unwinding, which is identified when the unwinding task does not match the
    current task (task != current).
    
      [ bp: Align arguments on function's opening brace. ]
    
    Fixes: 3b3fa11bc700 ("x86/dumpstack: Print any pt_regs found on the stack")
    Signed-off-by: Tengda Wu <wutengda@huaweicloud.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: Andrey Ryabinin <ryabinin.a.a@gmail.com>
    Acked-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Link: https://patch.msgid.link/all/20251023090632.269121-1-wutengda@huaweicloud.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/ptrace: Always inline trivial accessors [+ + +]
Author: Peter Zijlstra <peterz@infradead.org>
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) <peterz@infradead.org>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Link: https://patch.msgid.link/20251031105435.GU4068168@noisy.programming.kicks-ass.net
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86: kmsan: don't instrument stack walking functions [+ + +]
Author: Alexander Potapenko <glider@google.com>
Date:   Thu Sep 15 17:04:13 2022 +0200

    x86: kmsan: don't instrument stack walking functions
    
    [ Upstream commit 37ad4ee8364255c73026a3c343403b5977fa7e79 ]
    
    Upon function exit, KMSAN marks local variables as uninitialized.  Further
    function calls may result in the compiler creating the stack frame where
    these local variables resided.  This results in frame pointers being
    marked as uninitialized data, which is normally correct, because they are
    not stack-allocated.
    
    However stack unwinding functions are supposed to read and dereference the
    frame pointers, in which case KMSAN might be reporting uses of
    uninitialized values.
    
    To work around that, we mark update_stack_state(), unwind_next_frame() and
    show_trace_log_lvl() with __no_kmsan_checks, preventing all KMSAN reports
    inside those functions and making them return initialized values.
    
    Link: https://lkml.kernel.org/r/20220915150417.722975-40-glider@google.com
    Signed-off-by: Alexander Potapenko <glider@google.com>
    Cc: Alexander Viro <viro@zeniv.linux.org.uk>
    Cc: Alexei Starovoitov <ast@kernel.org>
    Cc: Andrey Konovalov <andreyknvl@gmail.com>
    Cc: Andrey Konovalov <andreyknvl@google.com>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Eric Biggers <ebiggers@google.com>
    Cc: Eric Biggers <ebiggers@kernel.org>
    Cc: Eric Dumazet <edumazet@google.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: Ilya Leoshkevich <iii@linux.ibm.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Jens Axboe <axboe@kernel.dk>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Marco Elver <elver@google.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Michael S. Tsirkin <mst@redhat.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Petr Mladek <pmladek@suse.com>
    Cc: Stephen Rothwell <sfr@canb.auug.org.au>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Vasily Gorbik <gor@linux.ibm.com>
    Cc: Vegard Nossum <vegard.nossum@oracle.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: ced37e9ceae5 ("x86/dumpstack: Prevent KASAN false positive warnings in __show_regs()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

x86: remove __range_not_ok() [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Thu Jan 8 07:15:44 2026 -0300

    x86: remove __range_not_ok()
    
    commit 36903abedfe8d419e90ce349b2b4ce6dc2883e17 upstream.
    
    The __range_not_ok() helper is an x86 (and sparc64) specific interface
    that does roughly the same thing as __access_ok(), but with different
    calling conventions.
    
    Change this to use the normal interface in order for consistency as we
    clean up all access_ok() implementations.
    
    This changes the limit from TASK_SIZE to TASK_SIZE_MAX, which Al points
    out is the right thing do do here anyway.
    
    The callers have to use __access_ok() instead of the normal access_ok()
    though, because on x86 that contains a WARN_ON_IN_IRQ() check that cannot
    be used inside of NMI context while tracing.
    
    The check in copy_code() is not needed any more, because this one is
    already done by copy_from_user_nmi().
    
    Suggested-by: Al Viro <viro@zeniv.linux.org.uk>
    Suggested-by: Christoph Hellwig <hch@infradead.org>
    Link: https://lore.kernel.org/lkml/YgsUKcXGR7r4nINj@zeniv-ca.linux.org.uk/
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Stable-dep-of: d319f344561d ("mm: Fix copy_from_user_nofault().")
    Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xfrm: also call xfrm_state_delete_tunnel at destroy time for states that were never added [+ + +]
Author: Sabrina Dubroca <sd@queasysnail.net>
Date:   Thu Dec 4 17:43:27 2025 -0500

    xfrm: also call xfrm_state_delete_tunnel at destroy time for states that were never added
    
    [ Upstream commit 10deb69864840ccf96b00ac2ab3a2055c0c04721 ]
    
    In commit b441cf3f8c4b ("xfrm: delete x->tunnel as we delete x"), I
    missed the case where state creation fails between full
    initialization (->init_state has been called) and being inserted on
    the lists.
    
    In this situation, ->init_state has been called, so for IPcomp
    tunnels, the fallback tunnel has been created and added onto the
    lists, but the user state never gets added, because we fail before
    that. The user state doesn't go through __xfrm_state_delete, so we
    don't call xfrm_state_delete_tunnel for those states, and we end up
    leaking the FB tunnel.
    
    There are several codepaths affected by this: the add/update paths, in
    both net/key and xfrm, and the migrate code (xfrm_migrate,
    xfrm_state_migrate). A "proper" rollback of the init_state work would
    probably be doable in the add/update code, but for migrate it gets
    more complicated as multiple states may be involved.
    
    At some point, the new (not-inserted) state will be destroyed, so call
    xfrm_state_delete_tunnel during xfrm_state_gc_destroy. Most states
    will have their fallback tunnel cleaned up during __xfrm_state_delete,
    which solves the issue that b441cf3f8c4b (and other patches before it)
    aimed at. All states (including FB tunnels) will be removed from the
    lists once xfrm_state_fini has called flush_work(&xfrm_state_gc_work).
    
    Reported-by: syzbot+999eb23467f83f9bf9bf@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=999eb23467f83f9bf9bf
    Fixes: b441cf3f8c4b ("xfrm: delete x->tunnel as we delete x")
    Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xfrm: delete x->tunnel as we delete x [+ + +]
Author: Sabrina Dubroca <sd@queasysnail.net>
Date:   Tue Jul 29 17:11:52 2025 -0400

    xfrm: delete x->tunnel as we delete x
    
    [ Upstream commit b441cf3f8c4b8576639d20c8eb4aa32917602ecd ]
    
    The ipcomp fallback tunnels currently get deleted (from the various
    lists and hashtables) as the last user state that needed that fallback
    is destroyed (not deleted). If a reference to that user state still
    exists, the fallback state will remain on the hashtables/lists,
    triggering the WARN in xfrm_state_fini. Because of those remaining
    references, the fix in commit f75a2804da39 ("xfrm: destroy xfrm_state
    synchronously on net exit path") is not complete.
    
    We recently fixed one such situation in TCP due to defered freeing of
    skbs (commit 9b6412e6979f ("tcp: drop secpath at the same time as we
    currently drop dst")). This can also happen due to IP reassembly: skbs
    with a secpath remain on the reassembly queue until netns
    destruction. If we can't guarantee that the queues are flushed by the
    time xfrm_state_fini runs, there may still be references to a (user)
    xfrm_state, preventing the timely deletion of the corresponding
    fallback state.
    
    Instead of chasing each instance of skbs holding a secpath one by one,
    this patch fixes the issue directly within xfrm, by deleting the
    fallback state as soon as the last user state depending on it has been
    deleted. Destruction will still happen when the final reference is
    dropped.
    
    A separate lockdep class for the fallback state is required since
    we're going to lock x->tunnel while x is locked.
    
    Fixes: 9d4139c76905 ("netns xfrm: per-netns xfrm_state_all list")
    Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
xfrm: flush all states in xfrm_state_fini [+ + +]
Author: Sabrina Dubroca <sd@queasysnail.net>
Date:   Mon Aug 4 11:05:43 2025 +0200

    xfrm: flush all states in xfrm_state_fini
    
    [ Upstream commit 42e42562c9cfcdacf000f1b42284a4fad24f8546 ]
    
    While reverting commit f75a2804da39 ("xfrm: destroy xfrm_state
    synchronously on net exit path"), I incorrectly changed
    xfrm_state_flush's "proto" argument back to IPSEC_PROTO_ANY. This
    reverts some of the changes in commit dbb2483b2a46 ("xfrm: clean up
    xfrm protocol checks"), and leads to some states not being removed
    when we exit the netns.
    
    Pass 0 instead of IPSEC_PROTO_ANY from both xfrm_state_fini
    xfrm6_tunnel_net_exit, so that xfrm_state_flush deletes all states.
    
    Fixes: 2a198bbec691 ("Revert "xfrm: destroy xfrm_state synchronously on net exit path"")
    Reported-by: syzbot+6641a61fe0e2e89ae8c5@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=6641a61fe0e2e89ae8c5
    Tested-by: syzbot+6641a61fe0e2e89ae8c5@syzkaller.appspotmail.com
    Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
xfs: fix a memory leak in xfs_buf_item_init() [+ + +]
Author: Haoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
Date:   Tue Dec 30 22:15:44 2025 -0500

    xfs: fix a memory leak in xfs_buf_item_init()
    
    [ Upstream commit fc40459de82543b565ebc839dca8f7987f16f62e ]
    
    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: stable@vger.kernel.org
    Signed-off-by: Haoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xhci: dbgtty: fix device unregister [+ + +]
Author: Łukasz Bartosik <ukaszb@chromium.org>
Date:   Mon Dec 8 01:54:23 2025 -0500

    xhci: dbgtty: fix device unregister
    
    [ Upstream commit 1f73b8b56cf35de29a433aee7bfff26cea98be3f ]
    
    When DbC is disconnected then xhci_dbc_tty_unregister_device()
    is called. However if there is any user space process blocked
    on write to DbC terminal device then it will never be signalled
    and thus stay blocked indifinitely.
    
    This fix adds a tty_vhangup() call in xhci_dbc_tty_unregister_device().
    The tty_vhangup() wakes up any blocked writers and causes subsequent
    write attempts to DbC terminal device to fail.
    
    Cc: stable <stable@kernel.org>
    Fixes: dfba2174dc42 ("usb: xhci: Add DbC support in xHCI driver")
    Signed-off-by: Łukasz Bartosik <ukaszb@chromium.org>
    Link: https://patch.msgid.link/20251119212910.1245694-1-ukaszb@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xhci: dbgtty: use IDR to support several dbc instances. [+ + +]
Author: Mathias Nyman <mathias.nyman@linux.intel.com>
Date:   Mon Dec 8 01:54:22 2025 -0500

    xhci: dbgtty: use IDR to support several dbc instances.
    
    [ Upstream commit e1ec140f273e1e30cea7e6d5f50934d877232121 ]
    
    To support systems with several xhci controllers with active
    dbc on each xhci we need to use IDR to identify and give
    an index to each port.
    
    Avoid using global struct tty_driver.driver_state for storing
    dbc port pointer as it won't work with several dbc ports
    
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20220216095153.1303105-6-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: 1f73b8b56cf3 ("xhci: dbgtty: fix device unregister")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>