Changelog in Linux kernel 6.1.164

 
ACPI: APEI: send SIGBUS to current task if synchronous memory error not recovered [+ + +]
Author: Shuai Xue <xueshuai@linux.alibaba.com>
Date:   Thu Feb 12 14:36:05 2026 +0800

    ACPI: APEI: send SIGBUS to current task if synchronous memory error not recovered
    
    [ Upstream commit 79a5ae3c4c5eb7e38e0ebe4d6bf602d296080060 ]
    
    If a synchronous error is detected as a result of user-space process
    triggering a 2-bit uncorrected error, the CPU will take a synchronous
    error exception such as Synchronous External Abort (SEA) on Arm64. The
    kernel will queue a memory_failure() work which poisons the related
    page, unmaps the page, and then sends a SIGBUS to the process, so that
    a system wide panic can be avoided.
    
    However, no memory_failure() work will be queued when abnormal
    synchronous errors occur. These errors can include situations like
    invalid PA, unexpected severity, no memory failure config support,
    invalid GUID section, etc. In such a case, the user-space process will
    trigger SEA again.  This loop can potentially exceed the platform
    firmware threshold or even trigger a kernel hard lockup, leading to a
    system reboot.
    
    Fix it by performing a force kill if no memory_failure() work is queued
    for synchronous errors.
    
    Signed-off-by: Shuai Xue <xueshuai@linux.alibaba.com>
    Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Reviewed-by: Yazen Ghannam <yazen.ghannam@amd.com>
    Reviewed-by: Jane Chu <jane.chu@oracle.com>
    Reviewed-by: Hanjun Guo <guohanjun@huawei.com>
    Link: https://patch.msgid.link/20250714114212.31660-2-xueshuai@linux.alibaba.com
    [ rjw: Changelog edits ]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    [ Using pr_err instead of dev_err due to ghes doesn't have member "dev"]
    Signed-off-by: Rajani Kantha <681739313@139.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ALSA: hda/realtek: Add quirk for Inspur S14-G1 [+ + +]
Author: Zhang Heng <zhangheng@kylinos.cn>
Date:   Mon Jan 26 15:35:08 2026 +0800

    ALSA: hda/realtek: Add quirk for Inspur S14-G1
    
    [ Upstream commit 9e18920e783d0bcd4c127a7adc66565243ab9655 ]
    
    Inspur S14-G1 is equipped with ALC256.
    Enable "power saving mode" and Enable "headset jack mode".
    
    Signed-off-by: Zhang Heng <zhangheng@kylinos.cn>
    Link: https://patch.msgid.link/20260126073508.3897461-2-zhangheng@kylinos.cn
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda/realtek: Fix headset mic for TongFang X6AR55xU [+ + +]
Author: Tim Guttzeit <t.guttzeit@tuxedocomputers.com>
Date:   Mon Jan 19 16:15:55 2026 +0100

    ALSA: hda/realtek: Fix headset mic for TongFang X6AR55xU
    
    [ Upstream commit b48fe9af1e60360baf09ca6b7a3cd6541f16e611 ]
    
    Add a PCI quirk to enable microphone detection on the headphone jack of
    TongFang X6AR55xU devices.
    
    Signed-off-by: Tim Guttzeit <t.guttzeit@tuxedocomputers.com>
    Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
    Link: https://patch.msgid.link/20260119151626.35481-1-wse@tuxedocomputers.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ASoC: amd: yc: Add ASUS ExpertBook PM1503CDA to quirks list [+ + +]
Author: Anatolii Shirykalov <pipocavsobake@gmail.com>
Date:   Mon Jan 19 15:56:18 2026 +0100

    ASoC: amd: yc: Add ASUS ExpertBook PM1503CDA to quirks list
    
    [ Upstream commit 018b211b1d321a52ed8d8de74ce83ce52a2e1224 ]
    
    Add ASUS ExpertBook PM1503CDA to the DMI quirks table to enable
    internal DMIC support via the ACP6x machine driver.
    
    Signed-off-by: Anatolii Shirykalov <pipocavsobake@gmail.com>
    Link: https://patch.msgid.link/20260119145618.3171435-1-pipocavsobake@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: cs35l45: Corrects ASP_TX5 DAPM widget channel [+ + +]
Author: Ricardo Rivera-Matos <rriveram@opensource.cirrus.com>
Date:   Thu Jan 15 19:25:10 2026 +0000

    ASoC: cs35l45: Corrects ASP_TX5 DAPM widget channel
    
    [ Upstream commit 6dd0fdc908c02318c28ec2c0979661846ee0a9f7 ]
    
    ASP_TX5 was incorrectly mapped to a channel value of 3 corrects,
    the channel value of 4.
    
    Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
    Signed-off-by: Ricardo Rivera-Matos <rriveram@opensource.cirrus.com>
    Link: https://patch.msgid.link/20260115192523.1335742-2-rriveram@opensource.cirrus.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: fsl_xcvr: fix missing lock in fsl_xcvr_mode_put() [+ + +]
Author: Ziyi Guo <n7l8m4@u.northwestern.edu>
Date:   Mon Feb 2 17:41:12 2026 +0000

    ASoC: fsl_xcvr: fix missing lock in fsl_xcvr_mode_put()
    
    [ Upstream commit f514248727606b9087bc38a284ff686e0093abf1 ]
    
    fsl_xcvr_activate_ctl() has
    lockdep_assert_held(&card->snd_card->controls_rwsem),
    but fsl_xcvr_mode_put() calls it without acquiring this lock.
    
    Other callers of fsl_xcvr_activate_ctl() in fsl_xcvr_startup() and
    fsl_xcvr_shutdown() properly acquire the lock with down_read()/up_read().
    
    Add the missing down_read()/up_read() calls around fsl_xcvr_activate_ctl()
    in fsl_xcvr_mode_put() to fix the lockdep assertion and prevent potential
    race conditions when multiple userspace threads access the control.
    
    Signed-off-by: Ziyi Guo <n7l8m4@u.northwestern.edu>
    Link: https://patch.msgid.link/20260202174112.2018402-1-n7l8m4@u.northwestern.edu
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: Intel: sof_es8336: Add DMI quirk for Huawei BOD-WXX9 [+ + +]
Author: Tagir Garaev <tgaraev653@gmail.com>
Date:   Sun Feb 1 15:17:28 2026 +0300

    ASoC: Intel: sof_es8336: Add DMI quirk for Huawei BOD-WXX9
    
    [ Upstream commit 6b641122d31f9d33e7d60047ee0586d1659f3f54 ]
    
    Add DMI entry for Huawei Matebook D (BOD-WXX9) with HEADPHONE_GPIO
    and DMIC quirks.
    
    This device has ES8336 codec with:
    - GPIO 16 (headphone-enable) for headphone amplifier control
    - GPIO 17 (speakers-enable) for speaker amplifier control
    - GPIO 269 for jack detection IRQ
    - 2-channel DMIC
    
    Hardware investigation shows that both GPIO 16 and 17 are required
    for proper audio routing, as headphones and speakers share the same
    physical output (HPOL/HPOR) and are separated only via amplifier
    enable signals.
    
    RFC: Seeking advice on GPIO control issue:
    
    GPIO values change in driver (gpiod_get_value() shows logical value
    changes) but not physically (debugfs gpio shows no change). The same
    gpiod_set_value_cansleep() calls work correctly in probe context with
    msleep(), but fail when called from DAPM event callbacks.
    
    Context information from diagnostics:
    - in_atomic=0, in_interrupt=0, irqs_disabled=0
    - Process context: pipewire
    - GPIO 17 (speakers): changes in driver, no physical change
    - GPIO 16 (headphone): changes in driver, no physical change
    
    In Windows, audio switching works without visible GPIO changes,
    suggesting possible ACPI/firmware involvement.
    
    Any suggestions on how to properly control these GPIOs from DAPM
    events would be appreciated.
    
    Signed-off-by: Tagir Garaev <tgaraev653@gmail.com>
    Link: https://patch.msgid.link/20260201121728.16597-1-tgaraev653@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
btrfs: fix racy bitfield write in btrfs_clear_space_info_full() [+ + +]
Author: Boris Burkov <boris@bur.io>
Date:   Wed Oct 1 17:20:22 2025 -0700

    btrfs: fix racy bitfield write in btrfs_clear_space_info_full()
    
    commit 38e818718c5e04961eea0fa8feff3f100ce40408 upstream.
    
    From the memory-barriers.txt document regarding memory barrier ordering
    guarantees:
    
     (*) These guarantees do not apply to bitfields, because compilers often
         generate code to modify these using non-atomic read-modify-write
         sequences.  Do not attempt to use bitfields to synchronize parallel
         algorithms.
    
     (*) Even in cases where bitfields are protected by locks, all fields
         in a given bitfield must be protected by one lock.  If two fields
         in a given bitfield are protected by different locks, the compiler's
         non-atomic read-modify-write sequences can cause an update to one
         field to corrupt the value of an adjacent field.
    
    btrfs_space_info has a bitfield sharing an underlying word consisting of
    the fields full, chunk_alloc, and flush:
    
    struct btrfs_space_info {
            struct btrfs_fs_info *     fs_info;              /*     0     8 */
            struct btrfs_space_info *  parent;               /*     8     8 */
            ...
            int                        clamp;                /*   172     4 */
            unsigned int               full:1;               /*   176: 0  4 */
            unsigned int               chunk_alloc:1;        /*   176: 1  4 */
            unsigned int               flush:1;              /*   176: 2  4 */
            ...
    
    Therefore, to be safe from parallel read-modify-writes losing a write to
    one of the bitfield members protected by a lock, all writes to all the
    bitfields must use the lock. They almost universally do, except for
    btrfs_clear_space_info_full() which iterates over the space_infos and
    writes out found->full = 0 without a lock.
    
    Imagine that we have one thread completing a transaction in which we
    finished deleting a block_group and are thus calling
    btrfs_clear_space_info_full() while simultaneously the data reclaim
    ticket infrastructure is running do_async_reclaim_data_space():
    
              T1                                             T2
    btrfs_commit_transaction
      btrfs_clear_space_info_full
      data_sinfo->full = 0
      READ: full:0, chunk_alloc:0, flush:1
                                                  do_async_reclaim_data_space(data_sinfo)
                                                  spin_lock(&space_info->lock);
                                                  if(list_empty(tickets))
                                                    space_info->flush = 0;
                                                    READ: full: 0, chunk_alloc:0, flush:1
                                                    MOD/WRITE: full: 0, chunk_alloc:0, flush:0
                                                    spin_unlock(&space_info->lock);
                                                    return;
      MOD/WRITE: full:0, chunk_alloc:0, flush:1
    
    and now data_sinfo->flush is 1 but the reclaim worker has exited. This
    breaks the invariant that flush is 0 iff there is no work queued or
    running. Once this invariant is violated, future allocations that go
    into __reserve_bytes() will add tickets to space_info->tickets but will
    see space_info->flush is set to 1 and not queue the work. After this,
    they will block forever on the resulting ticket, as it is now impossible
    to kick the worker again.
    
    I also confirmed by looking at the assembly of the affected kernel that
    it is doing RMW operations. For example, to set the flush (3rd) bit to 0,
    the assembly is:
      andb    $0xfb,0x60(%rbx)
    and similarly for setting the full (1st) bit to 0:
      andb    $0xfe,-0x20(%rax)
    
    So I think this is really a bug on practical systems.  I have observed
    a number of systems in this exact state, but am currently unable to
    reproduce it.
    
    Rather than leaving this footgun lying around for the future, take
    advantage of the fact that there is room in the struct anyway, and that
    it is already quite large and simply change the three bitfield members to
    bools. This avoids writes to space_info->full having any effect on
    writes to space_info->flush, regardless of locking.
    
    Fixes: 957780eb2788 ("Btrfs: introduce ticketed enospc infrastructure")
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Boris Burkov <boris@bur.io>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    [ The context change is due to the commit cc0517fe779f
      ("btrfs: tweak extent/chunk allocation for space_info sub-space")
      in v6.16 which is irrelevant to the logic of this patch. ]
    Signed-off-by: Rahul Sharma <black.hawk@163.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
bus: fsl-mc: fix use-after-free in driver_override_show() [+ + +]
Author: Gui-Dong Han <hanguidong02@gmail.com>
Date:   Fri Feb 13 11:45:08 2026 -0500

    bus: fsl-mc: fix use-after-free in driver_override_show()
    
    [ Upstream commit 148891e95014b5dc5878acefa57f1940c281c431 ]
    
    The driver_override_show() function reads the driver_override string
    without holding the device_lock. However, driver_override_store() uses
    driver_set_override(), which modifies and frees the string while holding
    the device_lock.
    
    This can result in a concurrent use-after-free if the string is freed
    by the store function while being read by the show function.
    
    Fix this by holding the device_lock around the read operation.
    
    Fixes: 1f86a00c1159 ("bus/fsl-mc: add support for 'driver_override' in the mc-bus")
    Cc: stable@vger.kernel.org
    Signed-off-by: Gui-Dong Han <hanguidong02@gmail.com>
    Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com>
    Link: https://lore.kernel.org/r/20251202174438.12658-1-hanguidong02@gmail.com
    Signed-off-by: Christophe Leroy (CS GROUP) <chleroy@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

bus: fsl-mc: Replace snprintf and sprintf with sysfs_emit in sysfs show functions [+ + +]
Author: Chelsy Ratnawat <chelsyratnawat2001@gmail.com>
Date:   Fri Feb 13 11:45:07 2026 -0500

    bus: fsl-mc: Replace snprintf and sprintf with sysfs_emit in sysfs show functions
    
    [ Upstream commit a50522c805a6c575c80f41b04706e084d814e116 ]
    
    Use sysfs_emit() instead of snprintf()/sprintf()  when writing
    to sysfs buffers, as recommended by the kernel documentation.
    
    Signed-off-by: Chelsy Ratnawat <chelsyratnawat2001@gmail.com>
    Acked-by: Ioana Ciornei <ioana.ciornei@nxp.com>
    Link: https://lore.kernel.org/r/20250822124339.1739290-1-chelsyratnawat2001@gmail.com
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Stable-dep-of: 148891e95014 ("bus: fsl-mc: fix use-after-free in driver_override_show()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
cacheinfo: Decrement refcount in cache_setup_of_node() [+ + +]
Author: Pierre Gondois <pierre.gondois@arm.com>
Date:   Fri Feb 13 09:56:59 2026 -0800

    cacheinfo: Decrement refcount in cache_setup_of_node()
    
    commit 3da72e18371c41a6f6f96b594854b178168c7757 upstream
    
    Refcounts to DT nodes are only incremented in the function
    and never decremented. Decrease the refcounts when necessary.
    
    Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
    Reviewed-by: Sudeep Holla <sudeep.holla@arm.com>
    Link: https://lore.kernel.org/r/20221026185954.991547-1-pierre.gondois@arm.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

cacheinfo: Remove of_node_put() for fw_token [+ + +]
Author: Pierre Gondois <pierre.gondois@arm.com>
Date:   Fri Feb 13 09:57:00 2026 -0800

    cacheinfo: Remove of_node_put() for fw_token
    
    commit 2613cc29c5723881ca603b1a3b50f0107010d5d6 upstream
    
    fw_token is used for DT/ACPI systems to identify CPUs sharing caches.
    For DT based systems, fw_token is set to a pointer to a DT node.
    
    commit 3da72e18371c ("cacheinfo: Decrement refcount in
    cache_setup_of_node()")
    doesn't increment the refcount of fw_token anymore in
    cache_setup_of_node(). fw_token is indeed used as a token and not
    as a (struct device_node*), so no reference to fw_token should be
    kept.
    
    However, [1] is triggered when hotplugging a CPU multiple times
    since cache_shared_cpu_map_remove() decrements the refcount to
    fw_token at each CPU unplugging, eventually reaching 0.
    
    Remove of_node_put() for fw_token in cache_shared_cpu_map_remove().
    
    [1]
    ------------[ cut here ]------------
    refcount_t: saturated; leaking memory.
    WARNING: CPU: 4 PID: 32 at lib/refcount.c:22 refcount_warn_saturate (lib/refcount.c:22 (discriminator 3))
    Modules linked in:
    CPU: 4 PID: 32 Comm: cpuhp/4 Tainted: G        W          6.1.0-rc1-14091-g9fdf2ca7b9c8 #76
    Hardware name: ARM LTD ARM Juno Development Platform/ARM Juno Development Platform, BIOS EDK II Oct 31 2022
    pstate: 600000c5 (nZCv daIF -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    pc : refcount_warn_saturate (lib/refcount.c:22 (discriminator 3))
    lr : refcount_warn_saturate (lib/refcount.c:22 (discriminator 3))
    [...]
    Call trace:
    [...]
    of_node_release (drivers/of/dynamic.c:335)
    kobject_put (lib/kobject.c:677 lib/kobject.c:704 ./include/linux/kref.h:65 lib/kobject.c:721)
    of_node_put (drivers/of/dynamic.c:49)
    free_cache_attributes.part.0 (drivers/base/cacheinfo.c:712)
    cacheinfo_cpu_pre_down (drivers/base/cacheinfo.c:718)
    cpuhp_invoke_callback (kernel/cpu.c:247 (discriminator 4))
    cpuhp_thread_fun (kernel/cpu.c:785)
    smpboot_thread_fn (kernel/smpboot.c:164 (discriminator 3))
    kthread (kernel/kthread.c:376)
    ret_from_fork (arch/arm64/kernel/entry.S:861)
    ---[ end trace 0000000000000000 ]---
    
    Fixes: 3da72e18371c ("cacheinfo: Decrement refcount in cache_setup_of_node()")
    Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Tested-by: Sudeep Holla <sudeep.holla@arm.com>
    Reviewed-by: Sudeep Holla <sudeep.holla@arm.com>
    Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
    Link: https://lore.kernel.org/r/20221116094958.2141072-1-pierre.gondois@arm.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
clk: mediatek: fix of_iomap memory leak [+ + +]
Author: Bosi Zhang <u201911157@hust.edu.cn>
Date:   Wed Feb 11 09:23:51 2026 +0800

    clk: mediatek: fix of_iomap memory leak
    
    [ Upstream commit 3db7285e044144fd88a356f5b641b9cd4b231a77 ]
    
    Smatch reports:
    drivers/clk/mediatek/clk-mtk.c:583 mtk_clk_simple_probe() warn:
        'base' from of_iomap() not released on lines: 496.
    
    This problem was also found in linux-next. In mtk_clk_simple_probe(),
    base is not released when handling errors
    if clk_data is not existed, which may cause a leak.
    So free_base should be added here to release base.
    
    Fixes: c58cd0e40ffa ("clk: mediatek: Add mtk_clk_simple_probe() to simplify clock providers")
    Signed-off-by: Bosi Zhang <u201911157@hust.edu.cn>
    Reviewed-by: Dongliang Mu <dzm91@hust.edu.cn>
    Link: https://lore.kernel.org/r/20230422084331.47198-1-u201911157@hust.edu.cn
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Li hongliang <1468888505@139.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
cpuset: Fix missing adaptation for cpuset_is_populated [+ + +]
Author: Chen Ridong <chenridong@huawei.com>
Date:   Wed Jan 14 01:51:29 2026 +0000

    cpuset: Fix missing adaptation for cpuset_is_populated
    
    Commit b1bcaed1e39a ("cpuset: Treat cpusets in attaching as populated")
    was backported to the long‑term support (LTS) branches. However, because
    commit d5cf4d34a333 ("cgroup/cpuset: Don't track # of local child
    partitions") was not backported, a corresponding adaptation to the
    backported code is still required.
    
    To ensure correct behavior, replace cgroup_is_populated with
    cpuset_is_populated in the partition_is_populated function.
    
    Cc: stable@vger.kernel.org      # 6.1+
    Fixes: b1bcaed1e39a ("cpuset: Treat cpusets in attaching as populated")
    Cc: Waiman Long <longman@redhat.com>
    Cc: Tejun Heo <tj@kernel.org>
    Signed-off-by: Chen Ridong <chenridong@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
crypto: octeontx - Fix length check to avoid truncation in ucode_load_store [+ + +]
Author: Thorsten Blum <thorsten.blum@linux.dev>
Date:   Wed Nov 26 10:46:13 2025 +0100

    crypto: octeontx - Fix length check to avoid truncation in ucode_load_store
    
    commit 5565a72b24fa7935a9f30af386e92c8c9dfb23b9 upstream.
    
    OTX_CPT_UCODE_NAME_LENGTH limits the microcode name to 64 bytes. If a
    user writes a string of exactly 64 characters, the original code used
    'strlen(buf) > 64' to check the length, but then strscpy() copies only
    63 characters before adding a NUL terminator, silently truncating the
    copied string.
    
    Fix this off-by-one error by using 'count' directly for the length check
    to ensure long names are rejected early and copied without truncation.
    
    Cc: stable@vger.kernel.org
    Fixes: d9110b0b01ff ("crypto: marvell - add support for OCTEON TX CPT engine")
    Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

crypto: omap - Allocate OMAP_CRYPTO_FORCE_COPY scatterlists correctly [+ + +]
Author: Kees Cook <kees@kernel.org>
Date:   Fri Feb 6 19:49:54 2026 -0800

    crypto: omap - Allocate OMAP_CRYPTO_FORCE_COPY scatterlists correctly
    
    commit 1562b1fb7e17c1b3addb15e125c718b2be7f5512 upstream.
    
    The existing allocation of scatterlists in omap_crypto_copy_sg_lists()
    was allocating an array of scatterlist pointers, not scatterlist objects,
    resulting in a 4x too small allocation.
    
    Use sizeof(*new_sg) to get the correct object size.
    
    Fixes: 74ed87e7e7f7 ("crypto: omap - add base support library for common routines")
    Signed-off-by: Kees Cook <kees@kernel.org>
    Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

crypto: virtio - Add spinlock protection with virtqueue notification [+ + +]
Author: Bibo Mao <maobibo@loongson.cn>
Date:   Tue Jan 13 11:05:54 2026 +0800

    crypto: virtio - Add spinlock protection with virtqueue notification
    
    commit b505047ffc8057555900d2d3a005d033e6967382 upstream.
    
    When VM boots with one virtio-crypto PCI device and builtin backend,
    run openssl benchmark command with multiple processes, such as
      openssl speed -evp aes-128-cbc -engine afalg  -seconds 10 -multi 32
    
    openssl processes will hangup and there is error reported like this:
     virtio_crypto virtio0: dataq.0:id 3 is not a head!
    
    It seems that the data virtqueue need protection when it is handled
    for virtio done notification. If the spinlock protection is added
    in virtcrypto_done_task(), openssl benchmark with multiple processes
    works well.
    
    Fixes: fed93fb62e05 ("crypto: virtio - Handle dataq logic with tasklet")
    Cc: stable@vger.kernel.org
    Signed-off-by: Bibo Mao <maobibo@loongson.cn>
    Acked-by: Jason Wang <jasowang@redhat.com>
    Acked-by: Michael S. Tsirkin <mst@redhat.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

crypto: virtio - Remove duplicated virtqueue_kick in virtio_crypto_skcipher_crypt_req [+ + +]
Author: Bibo Mao <maobibo@loongson.cn>
Date:   Tue Jan 13 11:05:55 2026 +0800

    crypto: virtio - Remove duplicated virtqueue_kick in virtio_crypto_skcipher_crypt_req
    
    commit 14f86a1155cca1176abf55987b2fce7f7fcb2455 upstream.
    
    With function virtio_crypto_skcipher_crypt_req(), there is already
    virtqueue_kick() call with spinlock held in function
    __virtio_crypto_skcipher_do_req(). Remove duplicated virtqueue_kick()
    function call here.
    
    Fixes: d79b5d0bbf2e ("crypto: virtio - support crypto engine framework")
    Cc: stable@vger.kernel.org
    Signed-off-by: Bibo Mao <maobibo@loongson.cn>
    Acked-by: Jason Wang <jasowang@redhat.com>
    Acked-by: Michael S. Tsirkin <mst@redhat.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
devlink: rate: Unset parent pointer in devl_rate_nodes_destroy [+ + +]
Author: Shay Drory <shayd@nvidia.com>
Date:   Tue Feb 10 11:02:34 2026 +0800

    devlink: rate: Unset parent pointer in devl_rate_nodes_destroy
    
    [ Upstream commit f94c1a114ac209977bdf5ca841b98424295ab1f0 ]
    
    The function devl_rate_nodes_destroy is documented to "Unset parent for
    all rate objects". However, it was only calling the driver-specific
    `rate_leaf_parent_set` or `rate_node_parent_set` ops and decrementing
    the parent's refcount, without actually setting the
    `devlink_rate->parent` pointer to NULL.
    
    This leaves a dangling pointer in the `devlink_rate` struct, which cause
    refcount error in netdevsim[1] and mlx5[2]. In addition, this is
    inconsistent with the behavior of `devlink_nl_rate_parent_node_set`,
    where the parent pointer is correctly cleared.
    
    This patch fixes the issue by explicitly setting `devlink_rate->parent`
    to NULL after notifying the driver, thus fulfilling the function's
    documented behavior for all rate objects.
    
    [1]
    repro steps:
    echo 1 > /sys/bus/netdevsim/new_device
    devlink dev eswitch set netdevsim/netdevsim1 mode switchdev
    echo 1 > /sys/bus/netdevsim/devices/netdevsim1/sriov_numvfs
    devlink port function rate add netdevsim/netdevsim1/test_node
    devlink port function rate set netdevsim/netdevsim1/128 parent test_node
    echo 1 > /sys/bus/netdevsim/del_device
    
    dmesg:
    refcount_t: decrement hit 0; leaking memory.
    WARNING: CPU: 8 PID: 1530 at lib/refcount.c:31 refcount_warn_saturate+0x42/0xe0
    CPU: 8 UID: 0 PID: 1530 Comm: bash Not tainted 6.18.0-rc4+ #1 NONE
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org 04/01/2014
    RIP: 0010:refcount_warn_saturate+0x42/0xe0
    Call Trace:
     <TASK>
     devl_rate_leaf_destroy+0x8d/0x90
     __nsim_dev_port_del+0x6c/0x70 [netdevsim]
     nsim_dev_reload_destroy+0x11c/0x140 [netdevsim]
     nsim_drv_remove+0x2b/0xb0 [netdevsim]
     device_release_driver_internal+0x194/0x1f0
     bus_remove_device+0xc6/0x130
     device_del+0x159/0x3c0
     device_unregister+0x1a/0x60
     del_device_store+0x111/0x170 [netdevsim]
     kernfs_fop_write_iter+0x12e/0x1e0
     vfs_write+0x215/0x3d0
     ksys_write+0x5f/0xd0
     do_syscall_64+0x55/0x10f0
     entry_SYSCALL_64_after_hwframe+0x4b/0x53
    
    [2]
    devlink dev eswitch set pci/0000:08:00.0 mode switchdev
    devlink port add pci/0000:08:00.0 flavour pcisf pfnum 0 sfnum 1000
    devlink port function rate add pci/0000:08:00.0/group1
    devlink port function rate set pci/0000:08:00.0/32768 parent group1
    modprobe -r mlx5_ib mlx5_fwctl mlx5_core
    
    dmesg:
    refcount_t: decrement hit 0; leaking memory.
    WARNING: CPU: 7 PID: 16151 at lib/refcount.c:31 refcount_warn_saturate+0x42/0xe0
    CPU: 7 UID: 0 PID: 16151 Comm: bash Not tainted 6.17.0-rc7_for_upstream_min_debug_2025_10_02_12_44 #1 NONE
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014
    RIP: 0010:refcount_warn_saturate+0x42/0xe0
    Call Trace:
     <TASK>
     devl_rate_leaf_destroy+0x8d/0x90
     mlx5_esw_offloads_devlink_port_unregister+0x33/0x60 [mlx5_core]
     mlx5_esw_offloads_unload_rep+0x3f/0x50 [mlx5_core]
     mlx5_eswitch_unload_sf_vport+0x40/0x90 [mlx5_core]
     mlx5_sf_esw_event+0xc4/0x120 [mlx5_core]
     notifier_call_chain+0x33/0xa0
     blocking_notifier_call_chain+0x3b/0x50
     mlx5_eswitch_disable_locked+0x50/0x110 [mlx5_core]
     mlx5_eswitch_disable+0x63/0x90 [mlx5_core]
     mlx5_unload+0x1d/0x170 [mlx5_core]
     mlx5_uninit_one+0xa2/0x130 [mlx5_core]
     remove_one+0x78/0xd0 [mlx5_core]
     pci_device_remove+0x39/0xa0
     device_release_driver_internal+0x194/0x1f0
     unbind_store+0x99/0xa0
     kernfs_fop_write_iter+0x12e/0x1e0
     vfs_write+0x215/0x3d0
     ksys_write+0x5f/0xd0
     do_syscall_64+0x53/0x1f0
     entry_SYSCALL_64_after_hwframe+0x4b/0x53
    
    Fixes: d75559845078 ("devlink: Allow setting parent node of rate objects")
    Signed-off-by: Shay Drory <shayd@nvidia.com>
    Reviewed-by: Carolina Jubran <cjubran@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/1763381149-1234377-1-git-send-email-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ Routine devl_rate_nodes_destroy is moved to net/devlink/rate.c by commit
     7cc7194e85ca ("devlink: push rate related code into separate file") after linux-6.6.
     This fix applies the same update to its original location in net/devlink/leftover.c. ]
    Signed-off-by: Li hongliang <1468888505@139.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/tegra: hdmi: sor: Fix error: variable ‘j’ set but not used [+ + +]
Author: Brahmajit Das <listout@listout.xyz>
Date:   Tue Sep 2 02:50:20 2025 +0530

    drm/tegra: hdmi: sor: Fix error: variable ‘j’ set but not used
    
    [ Upstream commit 1beee8d0c263b3e239c8d6616e4f8bb700bed658 ]
    
    The variable j is set, however never used in or outside the loop, thus
    resulting in dead code.
    Building with GCC 16 results in a build error due to
    -Werror=unused-but-set-variable= enabled by default.
    This patch clean up the dead code and fixes the build error.
    
    Example build log:
    drivers/gpu/drm/tegra/sor.c:1867:19: error: variable ‘j’ set but not used [-Werror=unused-but-set-variable=]
     1867 |         size_t i, j;
          |                   ^
    
    Signed-off-by: Brahmajit Das <listout@listout.xyz>
    Signed-off-by: Thierry Reding <treding@nvidia.com>
    Link: https://lore.kernel.org/r/20250901212020.3757519-1-listout@listout.xyz
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
f2fs: fix IS_CHECKPOINTED flag inconsistency issue caused by concurrent atomic commit and checkpoint writes [+ + +]
Author: Yongpeng Yang <yangyongpeng@xiaomi.com>
Date:   Tue Feb 17 10:59:12 2026 -0500

    f2fs: fix IS_CHECKPOINTED flag inconsistency issue caused by concurrent atomic commit and checkpoint writes
    
    [ Upstream commit 7633a7387eb4d0259d6bea945e1d3469cd135bbc ]
    
    During SPO tests, when mounting F2FS, an -EINVAL error was returned from
    f2fs_recover_inode_page. The issue occurred under the following scenario
    
    Thread A                                     Thread B
    f2fs_ioc_commit_atomic_write
     - f2fs_do_sync_file // atomic = true
      - f2fs_fsync_node_pages
        : last_folio = inode folio
        : schedule before folio_lock(last_folio) f2fs_write_checkpoint
                                                  - block_operations// writeback last_folio
                                                  - schedule before f2fs_flush_nat_entries
        : set_fsync_mark(last_folio, 1)
        : set_dentry_mark(last_folio, 1)
        : folio_mark_dirty(last_folio)
        - __write_node_folio(last_folio)
          : f2fs_down_read(&sbi->node_write)//block
                                                  - f2fs_flush_nat_entries
                                                    : {struct nat_entry}->flag |= BIT(IS_CHECKPOINTED)
                                                  - unblock_operations
                                                    : f2fs_up_write(&sbi->node_write)
                                                 f2fs_write_checkpoint//return
          : f2fs_do_write_node_page()
    f2fs_ioc_commit_atomic_write//return
                                                 SPO
    
    Thread A calls f2fs_need_dentry_mark(sbi, ino), and the last_folio has
    already been written once. However, the {struct nat_entry}->flag did not
    have the IS_CHECKPOINTED set, causing set_dentry_mark(last_folio, 1) and
    write last_folio again after Thread B finishes f2fs_write_checkpoint.
    
    After SPO and reboot, it was detected that {struct node_info}->blk_addr
    was not NULL_ADDR because Thread B successfully write the checkpoint.
    
    This issue only occurs in atomic write scenarios. For regular file
    fsync operations, the folio must be dirty. If
    block_operations->f2fs_sync_node_pages successfully submit the folio
    write, this path will not be executed. Otherwise, the
    f2fs_write_checkpoint will need to wait for the folio write submission
    to complete, as sbi->nr_pages[F2FS_DIRTY_NODES] > 0. Therefore, the
    situation where f2fs_need_dentry_mark checks that the {struct
    nat_entry}->flag /wo the IS_CHECKPOINTED flag, but the folio write has
    already been submitted, will not occur.
    
    Therefore, for atomic file fsync, sbi->node_write should be acquired
    through __write_node_folio to ensure that the IS_CHECKPOINTED flag
    correctly indicates that the checkpoint write has been completed.
    
    Fixes: 608514deba38 ("f2fs: set fsync mark only for the last dnode")
    Cc: stable@kernel.org
    Signed-off-by: Sheng Yong <shengyong1@xiaomi.com>
    Signed-off-by: Jinbao Liu <liujinbao1@xiaomi.com>
    Signed-off-by: Yongpeng Yang <yangyongpeng@xiaomi.com>
    Reviewed-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 out-of-bounds access in sysfs attribute read/write [+ + +]
Author: Yongpeng Yang <yangyongpeng@xiaomi.com>
Date:   Tue Feb 17 10:19:29 2026 -0500

    f2fs: fix out-of-bounds access in sysfs attribute read/write
    
    [ Upstream commit 98ea0039dbfdd00e5cc1b9a8afa40434476c0955 ]
    
    Some f2fs sysfs attributes suffer from out-of-bounds memory access and
    incorrect handling of integer values whose size is not 4 bytes.
    
    For example:
    vm:~# echo 65537 > /sys/fs/f2fs/vde/carve_out
    vm:~# cat /sys/fs/f2fs/vde/carve_out
    65537
    vm:~# echo 4294967297 > /sys/fs/f2fs/vde/atgc_age_threshold
    vm:~# cat /sys/fs/f2fs/vde/atgc_age_threshold
    1
    
    carve_out maps to {struct f2fs_sb_info}->carve_out, which is a 8-bit
    integer. However, the sysfs interface allows setting it to a value
    larger than 255, resulting in an out-of-range update.
    
    atgc_age_threshold maps to {struct atgc_management}->age_threshold,
    which is a 64-bit integer, but its sysfs interface cannot correctly set
    values larger than UINT_MAX.
    
    The root causes are:
    1. __sbi_store() treats all default values as unsigned int, which
    prevents updating integers larger than 4 bytes and causes out-of-bounds
    writes for integers smaller than 4 bytes.
    
    2. f2fs_sbi_show() also assumes all default values are unsigned int,
    leading to out-of-bounds reads and incorrect access to integers larger
    than 4 bytes.
    
    This patch introduces {struct f2fs_attr}->size to record the actual size
    of the integer associated with each sysfs attribute. With this
    information, sysfs read and write operations can correctly access and
    update values according to their real data size, avoiding memory
    corruption and truncation.
    
    Fixes: b59d0bae6ca3 ("f2fs: add sysfs support for controlling the gc_thread")
    Cc: stable@kernel.org
    Signed-off-by: Jinbao Liu <liujinbao1@xiaomi.com>
    Signed-off-by: Yongpeng Yang <yangyongpeng@xiaomi.com>
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    [ adapted F2FS_STAT_ATTR macro to include .size field and used sprintf instead of sysfs_emit in the replaced baseline code ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

f2fs: fix to avoid UAF in f2fs_write_end_io() [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Tue Feb 17 10:59:15 2026 -0500

    f2fs: fix to avoid UAF in f2fs_write_end_io()
    
    [ Upstream commit ce2739e482bce8d2c014d76c4531c877f382aa54 ]
    
    As syzbot reported an use-after-free issue in f2fs_write_end_io().
    
    It is caused by below race condition:
    
    loop device                             umount
    - worker_thread
     - loop_process_work
      - do_req_filebacked
       - lo_rw_aio
        - lo_rw_aio_complete
         - blk_mq_end_request
          - blk_update_request
           - f2fs_write_end_io
            - dec_page_count
            - folio_end_writeback
                                            - kill_f2fs_super
                                             - kill_block_super
                                              - f2fs_put_super
                                             : free(sbi)
           : get_pages(, F2FS_WB_CP_DATA)
             accessed sbi which is freed
    
    In kill_f2fs_super(), we will drop all page caches of f2fs inodes before
    call free(sbi), it guarantee that all folios should end its writeback, so
    it should be safe to access sbi before last folio_end_writeback().
    
    Let's relocate ckpt thread wakeup flow before folio_end_writeback() to
    resolve this issue.
    
    Cc: stable@kernel.org
    Fixes: e234088758fc ("f2fs: avoid wait if IO end up when do_checkpoint for better performance")
    Reported-by: syzbot+b4444e3c972a7a124187@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=b4444e3c972a7a124187
    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>

 
fbdev: rivafb: fix divide error in nv3_arb() [+ + +]
Author: Guangshuo Li <lgs201920130244@gmail.com>
Date:   Sun Dec 7 15:25:32 2025 +0800

    fbdev: rivafb: fix divide error in nv3_arb()
    
    commit 0209e21e3c372fa2da04c39214bec0b64e4eb5f4 upstream.
    
    A userspace program can trigger the RIVA NV3 arbitration code by calling
    the FBIOPUT_VSCREENINFO ioctl on /dev/fb*. When doing so, the driver
    recomputes FIFO arbitration parameters in nv3_arb(), using state->mclk_khz
    (derived from the PRAMDAC MCLK PLL) as a divisor without validating it
    first.
    
    In a normal setup, state->mclk_khz is provided by the real hardware and is
    non-zero. However, an attacker can construct a malicious or misconfigured
    device (e.g. a crafted/emulated PCI device) that exposes a bogus PLL
    configuration, causing state->mclk_khz to become zero.  Once
    nv3_get_param() calls nv3_arb(), the division by state->mclk_khz in the gns
    calculation causes a divide error and crashes the kernel.
    
    Fix this by checking whether state->mclk_khz is zero and bailing out before
    doing the division.
    
    The following log reveals it:
    
    rivafb: setting virtual Y resolution to 2184
    divide error: 0000 [#1] PREEMPT SMP KASAN PTI
    CPU: 0 PID: 2187 Comm: syz-executor.0 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
    RIP: 0010:nv3_arb drivers/video/fbdev/riva/riva_hw.c:439 [inline]
    RIP: 0010:nv3_get_param+0x3ab/0x13b0 drivers/video/fbdev/riva/riva_hw.c:546
    Call Trace:
      nv3CalcArbitration.constprop.0+0x255/0x460 drivers/video/fbdev/riva/riva_hw.c:603
      nv3UpdateArbitrationSettings drivers/video/fbdev/riva/riva_hw.c:637 [inline]
      CalcStateExt+0x447/0x1b90 drivers/video/fbdev/riva/riva_hw.c:1246
      riva_load_video_mode+0x8a9/0xea0 drivers/video/fbdev/riva/fbdev.c:779
      rivafb_set_par+0xc0/0x5f0 drivers/video/fbdev/riva/fbdev.c:1196
      fb_set_var+0x604/0xeb0 drivers/video/fbdev/core/fbmem.c:1033
      do_fb_ioctl+0x234/0x670 drivers/video/fbdev/core/fbmem.c:1109
      fb_ioctl+0xdd/0x130 drivers/video/fbdev/core/fbmem.c:1188
      __x64_sys_ioctl+0x122/0x190 fs/ioctl.c:856
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable@vger.kernel.org
    Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

fbdev: smscufx: properly copy ioctl memory to kernelspace [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Sun Dec 28 14:17:03 2025 +0100

    fbdev: smscufx: properly copy ioctl memory to kernelspace
    
    commit 120adae7b42faa641179270c067864544a50ab69 upstream.
    
    The UFX_IOCTL_REPORT_DAMAGE ioctl does not properly copy data from
    userspace to kernelspace, and instead directly references the memory,
    which can cause problems if invalid data is passed from userspace.  Fix
    this all up by correctly copying the memory before accessing it within
    the kernel.
    
    Reported-by: Tianchu Chen <flynnnchen@tencent.com>
    Cc: stable <stable@kernel.org>
    Cc: Steve Glendinning <steve.glendinning@shawell.net>
    Cc: Helge Deller <deller@gmx.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
gpio: omap: do not register driver in probe() [+ + +]
Author: Danilo Krummrich <dakr@kernel.org>
Date:   Tue Jan 27 21:17:12 2026 +0100

    gpio: omap: do not register driver in probe()
    
    commit 730e5ebff40c852e3ea57b71bf02a4b89c69435f upstream.
    
    Commit 11a78b794496 ("ARM: OMAP: MPUIO wake updates") registers the
    omap_mpuio_driver from omap_mpuio_init(), which is called from
    omap_gpio_probe().
    
    However, it neither makes sense to register drivers from probe()
    callbacks of other drivers, nor does the driver core allow registering
    drivers with a device lock already being held.
    
    The latter was revealed by commit dc23806a7c47 ("driver core: enforce
    device_lock for driver_match_device()") leading to a potential deadlock
    condition described in [1].
    
    Additionally, the omap_mpuio_driver is never unregistered from the
    driver core, even if the module is unloaded.
    
    Hence, register the omap_mpuio_driver from the module initcall and
    unregister it in module_exit().
    
    Link: https://lore.kernel.org/lkml/DFU7CEPUSG9A.1KKGVW4HIPMSH@kernel.org/ [1]
    Fixes: dc23806a7c47 ("driver core: enforce device_lock for driver_match_device()")
    Fixes: 11a78b794496 ("ARM: OMAP: MPUIO wake updates")
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Danilo Krummrich <dakr@kernel.org>
    Reviewed-by: Rafael J. Wysocki (Intel) <rafael@kernel.org>
    Link: https://patch.msgid.link/20260127201725.35883-1-dakr@kernel.org
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

gpio: sprd: Change sprd_gpio lock to raw_spin_lock [+ + +]
Author: Xuewen Yan <xuewen.yan@unisoc.com>
Date:   Mon Jan 26 17:42:09 2026 +0800

    gpio: sprd: Change sprd_gpio lock to raw_spin_lock
    
    [ Upstream commit 96313fcc1f062ba239f4832c9eff685da6c51c99 ]
    
    There was a lockdep warning in sprd_gpio:
    
    [    6.258269][T329@C6] [ BUG: Invalid wait context ]
    [    6.258270][T329@C6] 6.18.0-android17-0-g30527ad7aaae-ab00009-4k #1 Tainted: G        W  OE
    [    6.258272][T329@C6] -----------------------------
    [    6.258273][T329@C6] modprobe/329 is trying to lock:
    [    6.258275][T329@C6] ffffff8081c91690 (&sprd_gpio->lock){....}-{3:3}, at: sprd_gpio_irq_unmask+0x4c/0xa4 [gpio_sprd]
    [    6.258282][T329@C6] other info that might help us debug this:
    [    6.258283][T329@C6] context-{5:5}
    [    6.258285][T329@C6] 3 locks held by modprobe/329:
    [    6.258286][T329@C6]  #0: ffffff808baca108 (&dev->mutex){....}-{4:4}, at: __driver_attach+0xc4/0x204
    [    6.258295][T329@C6]  #1: ffffff80965e7240 (request_class#4){+.+.}-{4:4}, at: __setup_irq+0x1cc/0x82c
    [    6.258304][T329@C6]  #2: ffffff80965e70c8 (lock_class#4){....}-{2:2}, at: __setup_irq+0x21c/0x82c
    [    6.258313][T329@C6] stack backtrace:
    [    6.258314][T329@C6] CPU: 6 UID: 0 PID: 329 Comm: modprobe Tainted: G        W  OE       6.18.0-android17-0-g30527ad7aaae-ab00009-4k #1 PREEMPT  3ad5b0f45741a16e5838da790706e16ceb6717df
    [    6.258316][T329@C6] Tainted: [W]=WARN, [O]=OOT_MODULE, [E]=UNSIGNED_MODULE
    [    6.258317][T329@C6] Hardware name: Unisoc UMS9632-base Board (DT)
    [    6.258318][T329@C6] Call trace:
    [    6.258318][T329@C6]  show_stack+0x20/0x30 (C)
    [    6.258321][T329@C6]  __dump_stack+0x28/0x3c
    [    6.258324][T329@C6]  dump_stack_lvl+0xac/0xf0
    [    6.258326][T329@C6]  dump_stack+0x18/0x3c
    [    6.258329][T329@C6]  __lock_acquire+0x824/0x2c28
    [    6.258331][T329@C6]  lock_acquire+0x148/0x2cc
    [    6.258333][T329@C6]  _raw_spin_lock_irqsave+0x6c/0xb4
    [    6.258334][T329@C6]  sprd_gpio_irq_unmask+0x4c/0xa4 [gpio_sprd 814535e93c6d8e0853c45c02eab0fa88a9da6487]
    [    6.258337][T329@C6]  irq_startup+0x238/0x350
    [    6.258340][T329@C6]  __setup_irq+0x504/0x82c
    [    6.258342][T329@C6]  request_threaded_irq+0x118/0x184
    [    6.258344][T329@C6]  devm_request_threaded_irq+0x94/0x120
    [    6.258347][T329@C6]  sc8546_init_irq+0x114/0x170 [sc8546_charger 223586ccafc27439f7db4f95b0c8e6e882349a99]
    [    6.258352][T329@C6]  sc8546_charger_probe+0x53c/0x5a0 [sc8546_charger 223586ccafc27439f7db4f95b0c8e6e882349a99]
    [    6.258358][T329@C6]  i2c_device_probe+0x2c8/0x350
    [    6.258361][T329@C6]  really_probe+0x1a8/0x46c
    [    6.258363][T329@C6]  __driver_probe_device+0xa4/0x10c
    [    6.258366][T329@C6]  driver_probe_device+0x44/0x1b4
    [    6.258369][T329@C6]  __driver_attach+0xd0/0x204
    [    6.258371][T329@C6]  bus_for_each_dev+0x10c/0x168
    [    6.258373][T329@C6]  driver_attach+0x2c/0x3c
    [    6.258376][T329@C6]  bus_add_driver+0x154/0x29c
    [    6.258378][T329@C6]  driver_register+0x70/0x10c
    [    6.258381][T329@C6]  i2c_register_driver+0x48/0xc8
    [    6.258384][T329@C6]  init_module+0x28/0xfd8 [sc8546_charger 223586ccafc27439f7db4f95b0c8e6e882349a99]
    [    6.258389][T329@C6]  do_one_initcall+0x128/0x42c
    [    6.258392][T329@C6]  do_init_module+0x60/0x254
    [    6.258395][T329@C6]  load_module+0x1054/0x1220
    [    6.258397][T329@C6]  __arm64_sys_finit_module+0x240/0x35c
    [    6.258400][T329@C6]  invoke_syscall+0x60/0xec
    [    6.258402][T329@C6]  el0_svc_common+0xb0/0xe4
    [    6.258405][T329@C6]  do_el0_svc+0x24/0x30
    [    6.258407][T329@C6]  el0_svc+0x54/0x1c4
    [    6.258409][T329@C6]  el0t_64_sync_handler+0x68/0xdc
    [    6.258411][T329@C6]  el0t_64_sync+0x1c4/0x1c8
    
    This is because the spin_lock would change to rt_mutex in PREEMPT_RT,
    however the sprd_gpio->lock would use in hard-irq, this is unsafe.
    
    So change the spin_lock_t to raw_spin_lock_t to use the spinlock
    in hard-irq.
    
    Signed-off-by: Xuewen Yan <xuewen.yan@unisoc.com>
    Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
    Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Link: https://lore.kernel.org/r/20260126094209.9855-1-xuewen.yan@unisoc.com
    [Bartosz: tweaked the commit message]
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gpiolib: acpi: Fix gpio count with string references [+ + +]
Author: Alban Bedel <alban.bedel@lht.dlh.de>
Date:   Thu Jan 29 15:59:44 2026 +0100

    gpiolib: acpi: Fix gpio count with string references
    
    [ Upstream commit c62e0658d458d8f100445445c3ddb106f3824a45 ]
    
    Since commit 9880702d123f2 ("ACPI: property: Support using strings in
    reference properties") it is possible to use strings instead of local
    references. This work fine with single GPIO but not with arrays as
    acpi_gpio_package_count() didn't handle this case. Update it to handle
    strings like local references to cover this case as well.
    
    Signed-off-by: Alban Bedel <alban.bedel@lht.dlh.de>
    Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Link: https://patch.msgid.link/20260129145944.3372777-1-alban.bedel@lht.dlh.de
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ksmbd: fix infinite loop caused by next_smb2_rcv_hdr_off reset in error paths [+ + +]
Author: Namjae Jeon <linkinjeon@kernel.org>
Date:   Sat Jan 24 10:55:46 2026 +0900

    ksmbd: fix infinite loop caused by next_smb2_rcv_hdr_off reset in error paths
    
    commit 010eb01ce23b34b50531448b0da391c7f05a72af upstream.
    
    The problem occurs when a signed request fails smb2 signature verification
    check. In __process_request(), if check_sign_req() returns an error,
    set_smb2_rsp_status(work, STATUS_ACCESS_DENIED) is called.
    set_smb2_rsp_status() set work->next_smb2_rcv_hdr_off as zero. By resetting
    next_smb2_rcv_hdr_off to zero, the pointer to the next command in the chain
    is lost. Consequently, is_chained_smb2_message() continues to point to
    the same request header instead of advancing. If the header's NextCommand
    field is non-zero, the function returns true, causing __handle_ksmbd_work()
    to repeatedly process the same failed request in an infinite loop.
    This results in the kernel log being flooded with "bad smb2 signature"
    messages and high CPU usage.
    
    This patch fixes the issue by changing the return value from
    SERVER_HANDLER_CONTINUE to SERVER_HANDLER_ABORT. This ensures that
    the processing loop terminates immediately rather than attempting to
    continue from an invalidated offset.
    
    Reported-by: tianshuo han <hantianshuo233@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ksmbd: set ATTR_CTIME flags when setting mtime [+ + +]
Author: Namjae Jeon <linkinjeon@kernel.org>
Date:   Wed Feb 11 13:54:37 2026 +0800

    ksmbd: set ATTR_CTIME flags when setting mtime
    
    [ Upstream commit 21e46a79bbe6c4e1aa73b3ed998130f2ff07b128 ]
    
    David reported that the new warning from setattr_copy_mgtime is coming
    like the following.
    
    [  113.215316] ------------[ cut here ]------------
    [  113.215974] WARNING: CPU: 1 PID: 31 at fs/attr.c:300 setattr_copy+0x1ee/0x200
    [  113.219192] CPU: 1 UID: 0 PID: 31 Comm: kworker/1:1 Not tainted 6.13.0-rc1+ #234
    [  113.220127] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.2-3-gd478f380-rebuilt.opensuse.org 04/01/2014
    [  113.221530] Workqueue: ksmbd-io handle_ksmbd_work [ksmbd]
    [  113.222220] RIP: 0010:setattr_copy+0x1ee/0x200
    [  113.222833] Code: 24 28 49 8b 44 24 30 48 89 53 58 89 43 6c 5b 41 5c 41 5d 41 5e 41 5f 5d c3 cc cc cc cc 48 89 df e8 77 d6 ff ff e9 cd fe ff ff <0f> 0b e9 be fe ff ff 66 0
    [  113.225110] RSP: 0018:ffffaf218010fb68 EFLAGS: 00010202
    [  113.225765] RAX: 0000000000000120 RBX: ffffa446815f8568 RCX: 0000000000000003
    [  113.226667] RDX: ffffaf218010fd38 RSI: ffffa446815f8568 RDI: ffffffff94eb03a0
    [  113.227531] RBP: ffffaf218010fb90 R08: 0000001a251e217d R09: 00000000675259fa
    [  113.228426] R10: 0000000002ba8a6d R11: ffffa4468196c7a8 R12: ffffaf218010fd38
    [  113.229304] R13: 0000000000000120 R14: ffffffff94eb03a0 R15: 0000000000000000
    [  113.230210] FS:  0000000000000000(0000) GS:ffffa44739d00000(0000) knlGS:0000000000000000
    [  113.231215] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  113.232055] CR2: 00007efe0053d27e CR3: 000000000331a000 CR4: 00000000000006b0
    [  113.232926] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [  113.233812] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    [  113.234797] Call Trace:
    [  113.235116]  <TASK>
    [  113.235393]  ? __warn+0x73/0xd0
    [  113.235802]  ? setattr_copy+0x1ee/0x200
    [  113.236299]  ? report_bug+0xf3/0x1e0
    [  113.236757]  ? handle_bug+0x4d/0x90
    [  113.237202]  ? exc_invalid_op+0x13/0x60
    [  113.237689]  ? asm_exc_invalid_op+0x16/0x20
    [  113.238185]  ? setattr_copy+0x1ee/0x200
    [  113.238692]  btrfs_setattr+0x80/0x820 [btrfs]
    [  113.239285]  ? get_stack_info_noinstr+0x12/0xf0
    [  113.239857]  ? __module_address+0x22/0xa0
    [  113.240368]  ? handle_ksmbd_work+0x6e/0x460 [ksmbd]
    [  113.240993]  ? __module_text_address+0x9/0x50
    [  113.241545]  ? __module_address+0x22/0xa0
    [  113.242033]  ? unwind_next_frame+0x10e/0x920
    [  113.242600]  ? __pfx_stack_trace_consume_entry+0x10/0x10
    [  113.243268]  notify_change+0x2c2/0x4e0
    [  113.243746]  ? stack_depot_save_flags+0x27/0x730
    [  113.244339]  ? set_file_basic_info+0x130/0x2b0 [ksmbd]
    [  113.244993]  set_file_basic_info+0x130/0x2b0 [ksmbd]
    [  113.245613]  ? process_scheduled_works+0xbe/0x310
    [  113.246181]  ? worker_thread+0x100/0x240
    [  113.246696]  ? kthread+0xc8/0x100
    [  113.247126]  ? ret_from_fork+0x2b/0x40
    [  113.247606]  ? ret_from_fork_asm+0x1a/0x30
    [  113.248132]  smb2_set_info+0x63f/0xa70 [ksmbd]
    
    ksmbd is trying to set the atime and mtime via notify_change without also
    setting the ctime. so This patch add ATTR_CTIME flags when setting mtime
    to avoid a warning.
    
    Reported-by: David Disseldorp <ddiss@suse.de>
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    [ Minor conflict resolved. ]
    Signed-off-by: Li hongliang <1468888505@139.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: Linux 6.1.164 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu Feb 19 16:25:21 2026 +0100

    Linux 6.1.164
    
    Link: https://lore.kernel.org/r/20260217200007.505931165@linuxfoundation.org
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Tested-by: Brett A C Sheffield <bacs@librecast.net>
    Tested-by: Pavel Machek (CIP) <pavel@nabladev.com>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mptcp: ensure context reset on disconnect() [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Wed Feb 11 20:06:21 2026 +0100

    mptcp: ensure context reset on disconnect()
    
    commit 86730ac255b0497a272704de9a1df559f5d6602e upstream.
    
    After the blamed commit below, if the MPC subflow is already in TCP_CLOSE
    status or has fallback to TCP at mptcp_disconnect() time,
    mptcp_do_fastclose() skips setting the `send_fastclose flag` and the later
    __mptcp_close_ssk() does not reset anymore the related subflow context.
    
    Any later connection will be created with both the `request_mptcp` flag
    and the msk-level fallback status off (it is unconditionally cleared at
    MPTCP disconnect time), leading to a warning in subflow_data_ready():
    
      WARNING: CPU: 26 PID: 8996 at net/mptcp/subflow.c:1519 subflow_data_ready (net/mptcp/subflow.c:1519 (discriminator 13))
      Modules linked in:
      CPU: 26 UID: 0 PID: 8996 Comm: syz.22.39 Not tainted 6.18.0-rc7-05427-g11fc074f6c36 #1 PREEMPT(voluntary)
      Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
      RIP: 0010:subflow_data_ready (net/mptcp/subflow.c:1519 (discriminator 13))
      Code: 90 0f 0b 90 90 e9 04 fe ff ff e8 b7 1e f5 fe 89 ee bf 07 00 00 00 e8 db 19 f5 fe 83 fd 07 0f 84 35 ff ff ff e8 9d 1e f5 fe 90 <0f> 0b 90 e9 27 ff ff ff e8 8f 1e f5 fe 4c 89 e7 48 89 de e8 14 09
      RSP: 0018:ffffc9002646fb30 EFLAGS: 00010293
      RAX: 0000000000000000 RBX: ffff88813b218000 RCX: ffffffff825c8435
      RDX: ffff8881300b3580 RSI: ffffffff825c8443 RDI: 0000000000000005
      RBP: 000000000000000b R08: ffffffff825c8435 R09: 000000000000000b
      R10: 0000000000000005 R11: 0000000000000007 R12: ffff888131ac0000
      R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
      FS:  00007f88330af6c0(0000) GS:ffff888a93dd2000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00007f88330aefe8 CR3: 000000010ff59000 CR4: 0000000000350ef0
      Call Trace:
       <TASK>
       tcp_data_ready (net/ipv4/tcp_input.c:5356)
       tcp_data_queue (net/ipv4/tcp_input.c:5445)
       tcp_rcv_state_process (net/ipv4/tcp_input.c:7165)
       tcp_v4_do_rcv (net/ipv4/tcp_ipv4.c:1955)
       __release_sock (include/net/sock.h:1158 (discriminator 6) net/core/sock.c:3180 (discriminator 6))
       release_sock (net/core/sock.c:3737)
       mptcp_sendmsg (net/mptcp/protocol.c:1763 net/mptcp/protocol.c:1857)
       inet_sendmsg (net/ipv4/af_inet.c:853 (discriminator 7))
       __sys_sendto (net/socket.c:727 (discriminator 15) net/socket.c:742 (discriminator 15) net/socket.c:2244 (discriminator 15))
       __x64_sys_sendto (net/socket.c:2247)
       do_syscall_64 (arch/x86/entry/syscall_64.c:63 (discriminator 1) arch/x86/entry/syscall_64.c:94 (discriminator 1))
       entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
      RIP: 0033:0x7f883326702d
    
    Address the issue setting an explicit `fastclosing` flag at fastclose
    time, and checking such flag after mptcp_do_fastclose().
    
    Fixes: ae155060247b ("mptcp: fix duplicate reset on fastclose")
    Cc: stable@vger.kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20251212-net-mptcp-subflow_data_ready-warn-v1-2-d1f9fd1c36c8@kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    [ Conflicts in protocol.[ch] because the context has changed. ]
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: fix race in mptcp_pm_nl_flush_addrs_doit() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Feb 12 18:40:52 2026 +0100

    mptcp: fix race in mptcp_pm_nl_flush_addrs_doit()
    
    commit e2a9eeb69f7d4ca4cf4c70463af77664fdb6ab1d upstream.
    
    syzbot and Eulgyu Kim reported crashes in mptcp_pm_nl_get_local_id()
    and/or mptcp_pm_nl_is_backup()
    
    Root cause is list_splice_init() in mptcp_pm_nl_flush_addrs_doit()
    which is not RCU ready.
    
    list_splice_init_rcu() can not be called here while holding pernet->lock
    spinlock.
    
    Many thanks to Eulgyu Kim for providing a repro and testing our patches.
    
    Fixes: 141694df6573 ("mptcp: remove address when netlink flushes addrs")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reported-by: syzbot+5498a510ff9de39d37da@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/all/6970a46d.a00a0220.3ad28e.5cf0.GAE@google.com/T/
    Reported-by: Eulgyu Kim <eulgyukim@snu.ac.kr>
    Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/611
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260124-net-mptcp-race_nl_flush_addrs-v3-1-b2dc1b613e9d@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ Conflicts because the code has been moved from pm_netlink.c to
      pm_kernel.c later on in commit 8617e85e04bd ("mptcp: pm: split
      in-kernel PM specific code"). The same modifications can be applied
      in pm_netlink.c with one exception, because 'pernet->local_addr_list'
      has been renamed to 'pernet->endp_list' in commit 35e71e43a56d
      ("mptcp: pm: in-kernel: rename 'local_addr_list' to 'endp_list'"). The
      previous name is then still being used in this version.
      Also, another conflict is caused by commit 7bcf4d8022f9 ("mptcp: pm:
      rename helpers linked to 'flush'") which is not in this version:
      mptcp_nl_remove_addrs_list() has been renamed to
      mptcp_nl_flush_addrs_list(). The previous name has then been kept. ]
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: schedule rtx timer only after pushing data [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Wed Feb 11 20:06:20 2026 +0100

    mptcp: schedule rtx timer only after pushing data
    
    commit 2ea6190f42d0416a4310e60a7fcb0b49fcbbd4fb upstream.
    
    The MPTCP protocol usually schedule the retransmission timer only
    when there is some chances for such retransmissions to happen.
    
    With a notable exception: __mptcp_push_pending() currently schedule
    such timer unconditionally, potentially leading to unnecessary rtx
    timer expiration.
    
    The issue is present since the blamed commit below but become easily
    reproducible after commit 27b0e701d387 ("mptcp: drop bogus optimization
    in __mptcp_check_push()")
    
    Fixes: 33d41c9cd74c ("mptcp: more accurate timeout")
    Cc: stable@vger.kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20251205-net-mptcp-misc-fixes-6-19-rc1-v1-3-9e4781a6c1b8@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ Conflicts in protocol.c, because commit 0fa1b3783a17 ("mptcp: use
      get_send wrapper") is not in this version, and is changing the
      context. The same modification can still be applied. ]
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net: dsa: free routing table on probe failure [+ + +]
Author: Vladimir Oltean <vladimir.oltean@nxp.com>
Date:   Thu Feb 12 10:53:04 2026 +0000

    net: dsa: free routing table on probe failure
    
    [ Upstream commit 8bf108d7161ffc6880ad13a0cc109de3cf631727 ]
    
    If complete = true in dsa_tree_setup(), it means that we are the last
    switch of the tree which is successfully probing, and we should be
    setting up all switches from our probe path.
    
    After "complete" becomes true, dsa_tree_setup_cpu_ports() or any
    subsequent function may fail. If that happens, the entire tree setup is
    in limbo: the first N-1 switches have successfully finished probing
    (doing nothing but having allocated persistent memory in the tree's
    dst->ports, and maybe dst->rtable), and switch N failed to probe, ending
    the tree setup process before anything is tangible from the user's PoV.
    
    If switch N fails to probe, its memory (ports) will be freed and removed
    from dst->ports. However, the dst->rtable elements pointing to its ports,
    as created by dsa_link_touch(), will remain there, and will lead to
    use-after-free if dereferenced.
    
    If dsa_tree_setup_switches() returns -EPROBE_DEFER, which is entirely
    possible because that is where ds->ops->setup() is, we get a kasan
    report like this:
    
    ==================================================================
    BUG: KASAN: slab-use-after-free in mv88e6xxx_setup_upstream_port+0x240/0x568
    Read of size 8 at addr ffff000004f56020 by task kworker/u8:3/42
    
    Call trace:
     __asan_report_load8_noabort+0x20/0x30
     mv88e6xxx_setup_upstream_port+0x240/0x568
     mv88e6xxx_setup+0xebc/0x1eb0
     dsa_register_switch+0x1af4/0x2ae0
     mv88e6xxx_register_switch+0x1b8/0x2a8
     mv88e6xxx_probe+0xc4c/0xf60
     mdio_probe+0x78/0xb8
     really_probe+0x2b8/0x5a8
     __driver_probe_device+0x164/0x298
     driver_probe_device+0x78/0x258
     __device_attach_driver+0x274/0x350
    
    Allocated by task 42:
     __kasan_kmalloc+0x84/0xa0
     __kmalloc_cache_noprof+0x298/0x490
     dsa_switch_touch_ports+0x174/0x3d8
     dsa_register_switch+0x800/0x2ae0
     mv88e6xxx_register_switch+0x1b8/0x2a8
     mv88e6xxx_probe+0xc4c/0xf60
     mdio_probe+0x78/0xb8
     really_probe+0x2b8/0x5a8
     __driver_probe_device+0x164/0x298
     driver_probe_device+0x78/0x258
     __device_attach_driver+0x274/0x350
    
    Freed by task 42:
     __kasan_slab_free+0x48/0x68
     kfree+0x138/0x418
     dsa_register_switch+0x2694/0x2ae0
     mv88e6xxx_register_switch+0x1b8/0x2a8
     mv88e6xxx_probe+0xc4c/0xf60
     mdio_probe+0x78/0xb8
     really_probe+0x2b8/0x5a8
     __driver_probe_device+0x164/0x298
     driver_probe_device+0x78/0x258
     __device_attach_driver+0x274/0x350
    
    The simplest way to fix the bug is to delete the routing table in its
    entirety. dsa_tree_setup_routing_table() has no problem in regenerating
    it even if we deleted links between ports other than those of switch N,
    because dsa_link_touch() first checks whether the port pair already
    exists in dst->rtable, allocating if not.
    
    The deletion of the routing table in its entirety already exists in
    dsa_tree_teardown(), so refactor that into a function that can also be
    called from the tree setup error path.
    
    In my analysis of the commit to blame, it is the one which added
    dsa_link elements to dst->rtable. Prior to that, each switch had its own
    ds->rtable which is freed when the switch fails to probe. But the tree
    is potentially persistent memory.
    
    Fixes: c5f51765a1f6 ("net: dsa: list DSA links in the fabric")
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Link: https://patch.msgid.link/20250414213001.2957964-1-vladimir.oltean@nxp.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ Backport the fix to net/dsa/dsa2.c in v6.1.y for dsa2.c was
    renamed back into dsa.c by commit
    47d2ce03dcfb ("net: dsa: rename dsa2.c back into dsa.c and create its header")
    since v6.2. ]
    Signed-off-by: Bin Lan <lanbincn@139.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: sfp: Fix quirk for Ubiquiti U-Fiber Instant SFP module [+ + +]
Author: Marek Behún <kabel@kernel.org>
Date:   Thu Jan 29 09:22:27 2026 +0100

    net: sfp: Fix quirk for Ubiquiti U-Fiber Instant SFP module
    
    commit adcbadfd8e05d3558c9cfaa783f17c645181165f upstream.
    
    Commit fd580c9830316eda ("net: sfp: augment SFP parsing with
    phy_interface_t bitmap") did not add augumentation for the interface
    bitmap in the quirk for Ubiquiti U-Fiber Instant.
    
    The subsequent commit f81fa96d8a6c7a77 ("net: phylink: use
    phy_interface_t bitmaps for optical modules") then changed phylink code
    for selection of SFP interface: instead of using link mode bitmap, the
    interface bitmap is used, and the fastest interface mode supported by
    both SFP module and MAC is chosen.
    
    Since the interface bitmap contains also modes faster than 1000base-x,
    this caused a regression wherein this module stopped working
    out-of-the-box.
    
    Fix this.
    
    Fixes: fd580c9830316eda ("net: sfp: augment SFP parsing with phy_interface_t bitmap")
    Signed-off-by: Marek Behún <kabel@kernel.org>
    Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
    Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Link: https://patch.msgid.link/20260129082227.17443-1-kabel@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: stmmac: Fix accessing freed irq affinity_hint [+ + +]
Author: Qingfang Deng <dqfext@gmail.com>
Date:   Thu Feb 12 14:51:14 2026 +0800

    net: stmmac: Fix accessing freed irq affinity_hint
    
    [ Upstream commit c60d101a226f18e9a8f01bb4c6ca2b47dfcb15ef ]
    
    The cpumask should not be a local variable, since its pointer is saved
    to irq_desc and may be accessed from procfs.
    To fix it, use the persistent mask cpumask_of(cpu#).
    
    Cc: stable@vger.kernel.org
    Fixes: 8deec94c6040 ("net: stmmac: set IRQ affinity hint for multi MSI vectors")
    Signed-off-by: Qingfang Deng <dqfext@gmail.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Link: https://patch.msgid.link/20250318032424.112067-1-dqfext@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Rajani Kantha <681739313@139.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: tunnel: make skb_vlan_inet_prepare() return drop reasons [+ + +]
Author: Menglong Dong <menglong8.dong@gmail.com>
Date:   Wed Oct 9 10:28:21 2024 +0800

    net: tunnel: make skb_vlan_inet_prepare() return drop reasons
    
    [ Upstream commit 9990ddf47d4168088e2246c3d418bf526e40830d ]
    
    Make skb_vlan_inet_prepare return the skb drop reasons, which is just
    what pskb_may_pull_reason() returns. Meanwhile, adjust all the call of
    it.
    
    Signed-off-by: Menglong Dong <dongml2@chinatelecom.cn>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfsd: don't ignore the return code of svc_proc_register() [+ + +]
Author: Jeff Layton <jlayton@kernel.org>
Date:   Wed Feb 11 11:05:45 2026 +0800

    nfsd: don't ignore the return code of svc_proc_register()
    
    [ Upstream commit 930b64ca0c511521f0abdd1d57ce52b2a6e3476b ]
    
    Currently, nfsd_proc_stat_init() ignores the return value of
    svc_proc_register(). If the procfile creation fails, then the kernel
    will WARN when it tries to remove the entry later.
    
    Fix nfsd_proc_stat_init() to return the same type of pointer as
    svc_proc_register(), and fix up nfsd_net_init() to check that and fail
    the nfsd_net construction if it occurs.
    
    svc_proc_register() can fail if the dentry can't be allocated, or if an
    identical dentry already exists. The second case is pretty unlikely in
    the nfsd_net construction codepath, so if this happens, return -ENOMEM.
    
    Reported-by: syzbot+e34ad04f27991521104c@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/linux-nfs/67a47501.050a0220.19061f.05f9.GAE@google.com/
    Cc: stable@vger.kernel.org # v6.9
    Signed-off-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    [ Update the cleanup path to use nfsd_stat_counters_destroy. This ensures
     the teardown logic is correctly paired with nfsd_stat_counters_init, as
     required by the current NFSD implementation.]
    Signed-off-by: Jianqiang kang <jianqkang@sina.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nilfs2: Fix potential block overflow that cause system hang [+ + +]
Author: Edward Adam Davis <eadavis@qq.com>
Date:   Sat Dec 20 03:04:25 2025 +0900

    nilfs2: Fix potential block overflow that cause system hang
    
    commit ed527ef0c264e4bed6c7b2a158ddf516b17f5f66 upstream.
    
    When a user executes the FITRIM command, an underflow can occur when
    calculating nblocks if end_block is too small. Since nblocks is of
    type sector_t, which is u64, a negative nblocks value will become a
    very large positive integer. This ultimately leads to the block layer
    function __blkdev_issue_discard() taking an excessively long time to
    process the bio chain, and the ns_segctor_sem lock remains held for a
    long period. This prevents other tasks from acquiring the ns_segctor_sem
    lock, resulting in the hang reported by syzbot in [1].
    
    If the ending block is too small, typically if it is smaller than 4KiB
    range, depending on the usage of the segment 0, it may be possible to
    attempt a discard request beyond the device size causing the hang.
    
    Exiting successfully and assign the discarded size (0 in this case)
    to range->len.
    
    Although the start and len values in the user input range are too small,
    a conservative strategy is adopted here to safely ignore them, which is
    equivalent to a no-op; it will not perform any trimming and will not
    throw an error.
    
    [1]
    task:segctord state:D stack:28968 pid:6093 tgid:6093  ppid:2 task_flags:0x200040 flags:0x00080000
    Call Trace:
     rwbase_write_lock+0x3dd/0x750 kernel/locking/rwbase_rt.c:272
     nilfs_transaction_lock+0x253/0x4c0 fs/nilfs2/segment.c:357
     nilfs_segctor_thread_construct fs/nilfs2/segment.c:2569 [inline]
     nilfs_segctor_thread+0x6ec/0xe00 fs/nilfs2/segment.c:2684
    
    [ryusuke: corrected part of the commit message about the consequences]
    
    Fixes: 82e11e857be3 ("nilfs2: add nilfs_sufile_trim_fs to trim clean segs")
    Reported-by: syzbot+7eedce5eb281acd832f0@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=7eedce5eb281acd832f0
    Signed-off-by: Edward Adam Davis <eadavis@qq.com>
    Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Viacheslav Dubeyko <slava@dubeyko.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
PCI: endpoint: Automatically create a function specific attributes group [+ + +]
Author: Damien Le Moal <dlemoal@kernel.org>
Date:   Fri Feb 13 21:23:13 2026 -0500

    PCI: endpoint: Automatically create a function specific attributes group
    
    [ Upstream commit 70b3740f2c1941e2006d61539131b70d20cba9a6 ]
    
    A PCI endpoint function driver can define function specific attributes
    under its function configfs directory using the add_cfs() endpoint driver
    operation. This is done by tying up the mkdir operation for the function
    configfs directory to a call to the add_cfs() operation.  However, there
    are no checks preventing the user from repeatedly creating function
    specific attribute directories with different names, resulting in the same
    endpoint specific attributes group being added multiple times, which also
    result in an invalid reference counting for the attribute groups. E.g.,
    using the pci-epf-ntb function driver as an example, the user creates the
    function as follows:
    
      $ modprobe pci-epf-ntb
      $ cd /sys/kernel/config/pci_ep/functions/pci_epf_ntb
      $ mkdir func0
      $ tree func0
      func0/
      |-- baseclass_code
      |-- cache_line_size
      |-- ...
      `-- vendorid
    
      $ mkdir func0/attrs
      $ tree func0
      func0/
      |-- attrs
      |   |-- db_count
      |   |-- mw1
      |   |-- mw2
      |   |-- mw3
      |   |-- mw4
      |   |-- num_mws
      |   `-- spad_count
      |-- baseclass_code
      |-- cache_line_size
      |-- ...
      `-- vendorid
    
    At this point, the function can be started by linking the EP controller.
    However, if the user mistakenly creates again a directory:
    
      $ mkdir func0/attrs2
      $ tree func0
      func0/
      |-- attrs
      |   |-- db_count
      |   |-- mw1
      |   |-- mw2
      |   |-- mw3
      |   |-- mw4
      |   |-- num_mws
      |   `-- spad_count
      |-- attrs2
      |   |-- db_count
      |   |-- mw1
      |   |-- mw2
      |   |-- mw3
      |   |-- mw4
      |   |-- num_mws
      |   `-- spad_count
      |-- baseclass_code
      |-- cache_line_size
      |-- ...
      `-- vendorid
    
    The endpoint function specific attributes are duplicated and cause a crash
    when the endpoint function device is torn down:
    
      refcount_t: addition on 0; use-after-free.
      WARNING: CPU: 2 PID: 834 at lib/refcount.c:25 refcount_warn_saturate+0xc8/0x144
      CPU: 2 PID: 834 Comm: rmdir Not tainted 6.3.0-rc1 #1
      Hardware name: Pine64 RockPro64 v2.1 (DT)
      pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
      ...
      Call trace:
      refcount_warn_saturate+0xc8/0x144
      config_item_get+0x7c/0x80
      configfs_rmdir+0x17c/0x30c
      vfs_rmdir+0x8c/0x204
      do_rmdir+0x158/0x184
      __arm64_sys_unlinkat+0x64/0x80
      invoke_syscall+0x48/0x114
      ...
    
    Fix this by modifying pci_epf_cfs_work() to execute the new function
    pci_ep_cfs_add_type_group() which itself calls pci_epf_type_add_cfs() to
    obtain the function specific attribute group and the group name (directory
    name) from the endpoint function driver. If the function driver defines an
    attribute group, pci_ep_cfs_add_type_group() then proceeds to register this
    group using configfs_register_group(), thus automatically exposing the
    function type specific configfs attributes to the user. E.g.:
    
      $ modprobe pci-epf-ntb
      $ cd /sys/kernel/config/pci_ep/functions/pci_epf_ntb
      $ mkdir func0
      $ tree func0
      func0/
      |-- baseclass_code
      |-- cache_line_size
      |-- ...
      |-- pci_epf_ntb.0
      |   |-- db_count
      |   |-- mw1
      |   |-- mw2
      |   |-- mw3
      |   |-- mw4
      |   |-- num_mws
      |   `-- spad_count
      |-- primary
      |-- ...
      `-- vendorid
    
    With this change, there is no need for the user to create or delete
    directories in the endpoint function attributes directory. The
    pci_epf_type_group_ops group operations are thus removed.
    
    Also update the documentation for the pci-epf-ntb and pci-epf-vntb function
    drivers to reflect this change, removing the explanations showing the need
    to manually create the sub-directory for the function specific attributes.
    
    Link: https://lore.kernel.org/r/20230415023542.77601-2-dlemoal@kernel.org
    Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
    Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>
    Stable-dep-of: 7c5c7d06bd1f ("PCI: endpoint: Avoid creating sub-groups asynchronously")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

PCI: endpoint: Avoid creating sub-groups asynchronously [+ + +]
Author: Liu Song <liu.song13@zte.com.cn>
Date:   Fri Feb 13 21:23:15 2026 -0500

    PCI: endpoint: Avoid creating sub-groups asynchronously
    
    [ Upstream commit 7c5c7d06bd1f86d2c3ebe62be903a4ba42db4d2c ]
    
    The asynchronous creation of sub-groups by a delayed work could lead to a
    NULL pointer dereference when the driver directory is removed before the
    work completes.
    
    The crash can be easily reproduced with the following commands:
    
      # cd /sys/kernel/config/pci_ep/functions/pci_epf_test
      # for i in {1..20}; do mkdir test && rmdir test; done
    
      BUG: kernel NULL pointer dereference, address: 0000000000000088
      ...
      Call Trace:
       configfs_register_group+0x3d/0x190
       pci_epf_cfs_work+0x41/0x110
       process_one_work+0x18f/0x350
       worker_thread+0x25a/0x3a0
    
    Fix this issue by using configfs_add_default_group() API which does not
    have the deadlock problem as configfs_register_group() and does not require
    the delayed work handler.
    
    Fixes: e85a2d783762 ("PCI: endpoint: Add support in configfs to associate two EPCs with EPF")
    Signed-off-by: Liu Song <liu.song13@zte.com.cn>
    [mani: slightly reworded the description and added stable list]
    Signed-off-by: Manivannan Sadhasivam <mani@kernel.org>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Cc: stable@kernel.org
    Link: https://patch.msgid.link/20250710143845409gLM6JdlwPhlHG9iX3F6jK@zte.com.cn
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

PCI: endpoint: Remove unused field in struct pci_epf_group [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Fri Feb 13 21:23:14 2026 -0500

    PCI: endpoint: Remove unused field in struct pci_epf_group
    
    [ Upstream commit 328e4dffbeecc0f2cc5a149dee6c11a0577c9671 ]
    
    In "struct pci_epf_group", the 'type_group' field is unused.
    
    This was added, but already unused, by commit 70b3740f2c19 ("PCI: endpoint:
    Automatically create a function specific attributes group").
    
    Thus, remove it.
    
    Found with cppcheck, unusedStructMember.
    
    [kwilczynski: commit log]
    Link: https://lore.kernel.org/linux-pci/6507d44b6c60a19af35a605e2d58050be8872ab6.1712341008.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Stable-dep-of: 7c5c7d06bd1f ("PCI: endpoint: Avoid creating sub-groups asynchronously")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
platform/x86: classmate-laptop: Add missing NULL pointer checks [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Mon Jan 26 21:02:40 2026 +0100

    platform/x86: classmate-laptop: Add missing NULL pointer checks
    
    [ Upstream commit fe747d7112283f47169e9c16e751179a9b38611e ]
    
    In a few places in the Classmate laptop driver, code using the accel
    object may run before that object's address is stored in the driver
    data of the input device using it.
    
    For example, cmpc_accel_sensitivity_store_v4() is the "show" method
    of cmpc_accel_sensitivity_attr_v4 which is added in cmpc_accel_add_v4(),
    before calling dev_set_drvdata() for inputdev->dev.  If the sysfs
    attribute is accessed prematurely, the dev_get_drvdata(&inputdev->dev)
    call in in cmpc_accel_sensitivity_store_v4() returns NULL which
    leads to a NULL pointer dereference going forward.
    
    Moreover, sysfs attributes using the input device are added before
    initializing that device by cmpc_add_acpi_notify_device() and if one
    of them is accessed before running that function, a NULL pointer
    dereference will occur.
    
    For example, cmpc_accel_sensitivity_attr_v4 is added before calling
    cmpc_add_acpi_notify_device() and if it is read prematurely, the
    dev_get_drvdata(&acpi->dev) call in cmpc_accel_sensitivity_show_v4()
    returns NULL which leads to a NULL pointer dereference going forward.
    
    Fix this by adding NULL pointer checks in all of the relevant places.
    
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Link: https://patch.msgid.link/12825381.O9o76ZdvQC@rafael.j.wysocki
    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: panasonic-laptop: Fix sysfs group leak in error path [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Tue Jan 20 16:43:44 2026 +0100

    platform/x86: panasonic-laptop: Fix sysfs group leak in error path
    
    [ Upstream commit 43b0b7eff4b3fb684f257d5a24376782e9663465 ]
    
    The acpi_pcc_hotkey_add() error path leaks sysfs group pcc_attr_group
    if platform_device_register_simple() fails for the "panasonic" platform
    device.
    
    Address this by making it call sysfs_remove_group() in that case for
    the group in question.
    
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Link: https://patch.msgid.link/3398370.44csPzL39Z@rafael.j.wysocki
    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>

 
Revert "wireguard: device: enable threaded NAPI" [+ + +]
Author: Daniel Borkmann <daniel@iogearbox.net>
Date:   Mon Feb 16 22:31:13 2026 +0100

    Revert "wireguard: device: enable threaded NAPI"
    
    This reverts commit fb978675ccfd4a93549e49624127d8332cc61cbf which is
    commit db9ae3b6b43c79b1ba87eea849fd65efa05b4b2e upstream.
    
    We have had three independent production user reports in combination
    with Cilium utilizing WireGuard as encryption underneath that k8s Pod
    E/W traffic to certain peer nodes fully stalled. The situation appears
    as follows:
    
      - Occurs very rarely but at random times under heavy networking load.
      - Once the issue triggers the decryption side stops working completely
        for that WireGuard peer, other peers keep working fine. The stall
        happens also for newly initiated connections towards that particular
        WireGuard peer.
      - Only the decryption side is affected, never the encryption side.
      - Once it triggers, it never recovers and remains in this state,
        the CPU/mem on that node looks normal, no leak, busy loop or crash.
      - bpftrace on the affected system shows that wg_prev_queue_enqueue
        fails, thus the MAX_QUEUED_PACKETS (1024 skbs!) for the peer's
        rx_queue is reached.
      - Also, bpftrace shows that wg_packet_rx_poll for that peer is never
        called again after reaching this state for that peer. For other
        peers wg_packet_rx_poll does get called normally.
      - Commit db9ae3b ("wireguard: device: enable threaded NAPI")
        switched WireGuard to threaded NAPI by default. The default has
        not been changed for triggering the issue, neither did CPU
        hotplugging occur (i.e. 5bd8de2 ("wireguard: queueing: always
        return valid online CPU in wg_cpumask_choose_online()")).
      - The issue has been observed with stable kernels of v5.15 as well as
        v6.1. It was reported to us that v5.10 stable is working fine, and
        no report on v6.6 stable either (somewhat related discussion in [0]
        though).
      - In the WireGuard driver the only material difference between v5.10
        stable and v5.15 stable is the switch to threaded NAPI by default.
    
        [0] https://lore.kernel.org/netdev/CA+wXwBTT74RErDGAnj98PqS=wvdh8eM1pi4q6tTdExtjnokKqA@mail.gmail.com/
    
    Breakdown of the problem:
    
      1) skbs arriving for decryption are enqueued to the peer->rx_queue in
         wg_packet_consume_data via wg_queue_enqueue_per_device_and_peer.
      2) The latter only moves the skb into the MPSC peer queue if it does
         not surpass MAX_QUEUED_PACKETS (1024) which is kept track in an
         atomic counter via wg_prev_queue_enqueue.
      3) In case enqueueing was successful, the skb is also queued up
         in the device queue, round-robin picks a next online CPU, and
         schedules the decryption worker.
      4) The wg_packet_decrypt_worker, once scheduled, picks these up
         from the queue, decrypts the packets and once done calls into
         wg_queue_enqueue_per_peer_rx.
      5) The latter updates the state to PACKET_STATE_CRYPTED on success
         and calls napi_schedule on the per peer->napi instance.
      6) NAPI then polls via wg_packet_rx_poll. wg_prev_queue_peek checks
         on the peer->rx_queue. It will wg_prev_queue_dequeue if the
         queue->peeked skb was not cached yet, or just return the latter
         otherwise. (wg_prev_queue_drop_peeked later clears the cache.)
      7) From an ordering perspective, the peer->rx_queue has skbs in order
         while the device queue with the per-CPU worker threads from a
         global ordering PoV can finish the decryption and signal the skb
         PACKET_STATE_CRYPTED out of order.
      8) A situation can be observed that the first packet coming in will
         be stuck waiting for the decryption worker to be scheduled for
         a longer time when the system is under pressure.
      9) While this is the case, the other CPUs in the meantime finish
         decryption and call into napi_schedule.
     10) Now in wg_packet_rx_poll it picks up the first in-order skb
         from the peer->rx_queue and sees that its state is still
         PACKET_STATE_UNCRYPTED. The NAPI poll routine then exits early
         with work_done = 0 and calls napi_complete_done, signalling
         it "finished" processing.
     11) The assumption in wg_packet_decrypt_worker is that when the
         decryption finished the subsequent napi_schedule will always
         lead to a later invocation of wg_packet_rx_poll to pick up
         the finished packet.
     12) However, it appears that a later napi_schedule does /not/
         schedule a later poll and thus no wg_packet_rx_poll.
     13) If this situation happens exactly for the corner case where
         the decryption worker of the first packet is stuck and waiting
         to be scheduled, and the network load for WireGuard is very
         high then the queue can build up to MAX_QUEUED_PACKETS.
     14) If this situation occurs, then no new decryption worker will
         be scheduled and also no new napi_schedule to make forward
         progress.
     15) This means the peer->rx_queue stops processing packets completely
         and they are indefinitely stuck waiting for a new NAPI poll on
         that peer which never happens. New packets for that peer are
         then dropped due to full queue, as it has been observed on the
         production machines.
    
    Technically, the backport of commit db9ae3b6b43c ("wireguard: device:
    enable threaded NAPI") to stable should not have happened since it is
    more of an optimization rather than a pure fix and addresses a NAPI
    situation with utilizing many WireGuard tunnel devices in parallel.
    Revert it from stable given the backport triggers a regression for
    mentioned kernels.
    
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
romfs: check sb_set_blocksize() return value [+ + +]
Author: Deepanshu Kartikey <kartikey406@gmail.com>
Date:   Tue Jan 13 14:10:37 2026 +0530

    romfs: check sb_set_blocksize() return value
    
    [ Upstream commit ab7ad7abb3660c58ffffdf07ff3bb976e7e0afa0 ]
    
    romfs_fill_super() ignores the return value of sb_set_blocksize(), which
    can fail if the requested block size is incompatible with the block
    device's configuration.
    
    This can be triggered by setting a loop device's block size larger than
    PAGE_SIZE using ioctl(LOOP_SET_BLOCK_SIZE, 32768), then mounting a romfs
    filesystem on that device.
    
    When sb_set_blocksize(sb, ROMBSIZE) is called with ROMBSIZE=4096 but the
    device has logical_block_size=32768, bdev_validate_blocksize() fails
    because the requested size is smaller than the device's logical block
    size. sb_set_blocksize() returns 0 (failure), but romfs ignores this and
    continues mounting.
    
    The superblock's block size remains at the device's logical block size
    (32768). Later, when sb_bread() attempts I/O with this oversized block
    size, it triggers a kernel BUG in folio_set_bh():
    
        kernel BUG at fs/buffer.c:1582!
        BUG_ON(size > PAGE_SIZE);
    
    Fix by checking the return value of sb_set_blocksize() and failing the
    mount with -EINVAL if it returns 0.
    
    Reported-by: syzbot+9c4e33e12283d9437c25@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=9c4e33e12283d9437c25
    Signed-off-by: Deepanshu Kartikey <kartikey406@gmail.com>
    Link: https://patch.msgid.link/20260113084037.1167887-1-kartikey406@gmail.com
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
scsi: qla2xxx: Allow recovery for tape devices [+ + +]
Author: Shreyas Deodhar <sdeodhar@marvell.com>
Date:   Wed Dec 10 15:45:58 2025 +0530

    scsi: qla2xxx: Allow recovery for tape devices
    
    commit b0335ee4fb94832a4ef68774ca7e7b33b473c7a6 upstream.
    
    Tape device doesn't show up after RSCNs.  To fix this, remove tape
    device specific checks which allows recovery of tape devices.
    
    Fixes: 44c57f205876 ("scsi: qla2xxx: Changes to support FCP2 Target")
    Cc: stable@vger.kernel.org
    Signed-off-by: Shreyas Deodhar <sdeodhar@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Reviewed-by: Himanshu Madhani <hmadhani2024@gmail.com>
    Link: https://patch.msgid.link/20251210101604.431868-7-njavali@marvell.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Delay module unload while fabric scan in progress [+ + +]
Author: Anil Gurumurthy <agurumurthy@marvell.com>
Date:   Wed Dec 10 15:45:59 2025 +0530

    scsi: qla2xxx: Delay module unload while fabric scan in progress
    
    commit 8890bf450e0b6b283f48ac619fca5ac2f14ddd62 upstream.
    
    System crash seen during load/unload test in a loop.
    
    [105954.384919] RBP: ffff914589838dc0 R08: 0000000000000000 R09: 0000000000000086
    [105954.384920] R10: 000000000000000f R11: ffffa31240904be5 R12: ffff914605f868e0
    [105954.384921] R13: ffff914605f86910 R14: 0000000000008010 R15: 00000000ddb7c000
    [105954.384923] FS:  0000000000000000(0000) GS:ffff9163fec40000(0000) knlGS:0000000000000000
    [105954.384925] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [105954.384926] CR2: 000055d31ce1d6a0 CR3: 0000000119f5e001 CR4: 0000000000770ee0
    [105954.384928] PKRU: 55555554
    [105954.384929] Call Trace:
    [105954.384931]  <IRQ>
    [105954.384934]  qla24xx_sp_unmap+0x1f3/0x2a0 [qla2xxx]
    [105954.384962]  ? qla_async_scan_sp_done+0x114/0x1f0 [qla2xxx]
    [105954.384980]  ? qla24xx_els_ct_entry+0x4de/0x760 [qla2xxx]
    [105954.384999]  ? __wake_up_common+0x80/0x190
    [105954.385004]  ? qla24xx_process_response_queue+0xc2/0xaa0 [qla2xxx]
    [105954.385023]  ? qla24xx_msix_rsp_q+0x44/0xb0 [qla2xxx]
    [105954.385040]  ? __handle_irq_event_percpu+0x3d/0x190
    [105954.385044]  ? handle_irq_event+0x58/0xb0
    [105954.385046]  ? handle_edge_irq+0x93/0x240
    [105954.385050]  ? __common_interrupt+0x41/0xa0
    [105954.385055]  ? common_interrupt+0x3e/0xa0
    [105954.385060]  ? asm_common_interrupt+0x22/0x40
    
    The root cause of this was that there was a free (dma_free_attrs) in the
    interrupt context.  There was a device discovery/fabric scan in
    progress.  A module unload was issued which set the UNLOADING flag.  As
    part of the discovery, after receiving an interrupt a work queue was
    scheduled (which involved a work to be queued).  Since the UNLOADING
    flag is set, the work item was not allocated and the mapped memory had
    to be freed.  The free occurred in interrupt context leading to system
    crash.  Delay the driver unload until the fabric scan is complete to
    avoid the crash.
    
    Reported-by: kernel test robot <lkp@intel.com>
    Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
    Closes: https://lore.kernel.org/all/202512090414.07Waorz0-lkp@intel.com/
    Fixes: 783e0dc4f66a ("qla2xxx: Check for device state before unloading the driver.")
    Cc: stable@vger.kernel.org
    Signed-off-by: Anil Gurumurthy <agurumurthy@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Reviewed-by: Himanshu Madhani <hmadhani2024@gmail.com>
    Link: https://patch.msgid.link/20251210101604.431868-8-njavali@marvell.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Fix bsg_done() causing double free [+ + +]
Author: Anil Gurumurthy <agurumurthy@marvell.com>
Date:   Fri Feb 13 20:49:14 2026 -0500

    scsi: qla2xxx: Fix bsg_done() causing double free
    
    [ Upstream commit c2c68225b1456f4d0d393b5a8778d51bb0d5b1d0 ]
    
    Kernel panic observed on system,
    
    [5353358.825191] BUG: unable to handle page fault for address: ff5f5e897b024000
    [5353358.825194] #PF: supervisor write access in kernel mode
    [5353358.825195] #PF: error_code(0x0002) - not-present page
    [5353358.825196] PGD 100006067 P4D 0
    [5353358.825198] Oops: 0002 [#1] PREEMPT SMP NOPTI
    [5353358.825200] CPU: 5 PID: 2132085 Comm: qlafwupdate.sub Kdump: loaded Tainted: G        W    L    -------  ---  5.14.0-503.34.1.el9_5.x86_64 #1
    [5353358.825203] Hardware name: HPE ProLiant DL360 Gen11/ProLiant DL360 Gen11, BIOS 2.44 01/17/2025
    [5353358.825204] RIP: 0010:memcpy_erms+0x6/0x10
    [5353358.825211] RSP: 0018:ff591da8f4f6b710 EFLAGS: 00010246
    [5353358.825212] RAX: ff5f5e897b024000 RBX: 0000000000007090 RCX: 0000000000001000
    [5353358.825213] RDX: 0000000000001000 RSI: ff591da8f4fed090 RDI: ff5f5e897b024000
    [5353358.825214] RBP: 0000000000010000 R08: ff5f5e897b024000 R09: 0000000000000000
    [5353358.825215] R10: ff46cf8c40517000 R11: 0000000000000001 R12: 0000000000008090
    [5353358.825216] R13: ff591da8f4f6b720 R14: 0000000000001000 R15: 0000000000000000
    [5353358.825218] FS:  00007f1e88d47740(0000) GS:ff46cf935f940000(0000) knlGS:0000000000000000
    [5353358.825219] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [5353358.825220] CR2: ff5f5e897b024000 CR3: 0000000231532004 CR4: 0000000000771ef0
    [5353358.825221] PKRU: 55555554
    [5353358.825222] Call Trace:
    [5353358.825223]  <TASK>
    [5353358.825224]  ? show_trace_log_lvl+0x1c4/0x2df
    [5353358.825229]  ? show_trace_log_lvl+0x1c4/0x2df
    [5353358.825232]  ? sg_copy_buffer+0xc8/0x110
    [5353358.825236]  ? __die_body.cold+0x8/0xd
    [5353358.825238]  ? page_fault_oops+0x134/0x170
    [5353358.825242]  ? kernelmode_fixup_or_oops+0x84/0x110
    [5353358.825244]  ? exc_page_fault+0xa8/0x150
    [5353358.825247]  ? asm_exc_page_fault+0x22/0x30
    [5353358.825252]  ? memcpy_erms+0x6/0x10
    [5353358.825253]  sg_copy_buffer+0xc8/0x110
    [5353358.825259]  qla2x00_process_vendor_specific+0x652/0x1320 [qla2xxx]
    [5353358.825317]  qla24xx_bsg_request+0x1b2/0x2d0 [qla2xxx]
    
    Most routines in qla_bsg.c call bsg_done() only for success cases.
    However a few invoke it for failure case as well leading to a double
    free. Validate before calling bsg_done().
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Anil Gurumurthy <agurumurthy@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Reviewed-by: Himanshu Madhani <hmadhani2024@gmail.com>
    Link: https://patch.msgid.link/20251210101604.431868-12-njavali@marvell.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Free sp in error path to fix system crash [+ + +]
Author: Anil Gurumurthy <agurumurthy@marvell.com>
Date:   Fri Feb 13 10:43:32 2026 -0500

    scsi: qla2xxx: Free sp in error path to fix system crash
    
    [ Upstream commit 7adbd2b7809066c75f0433e5e2a8e114b429f30f ]
    
    System crash seen during load/unload test in a loop,
    
    [61110.449331] qla2xxx [0000:27:00.0]-0042:0: Disabled MSI-X.
    [61110.467494] =============================================================================
    [61110.467498] BUG qla2xxx_srbs (Tainted: G           OE    --------  --- ): Objects remaining in qla2xxx_srbs on __kmem_cache_shutdown()
    [61110.467501] -----------------------------------------------------------------------------
    
    [61110.467502] Slab 0x000000000ffc8162 objects=51 used=1 fp=0x00000000e25d3d85 flags=0x57ffffc0010200(slab|head|node=1|zone=2|lastcpupid=0x1fffff)
    [61110.467509] CPU: 53 PID: 455206 Comm: rmmod Kdump: loaded Tainted: G           OE    --------  ---  5.14.0-284.11.1.el9_2.x86_64 #1
    [61110.467513] Hardware name: HPE ProLiant DL385 Gen10 Plus v2/ProLiant DL385 Gen10 Plus v2, BIOS A42 08/17/2023
    [61110.467515] Call Trace:
    [61110.467516]  <TASK>
    [61110.467519]  dump_stack_lvl+0x34/0x48
    [61110.467526]  slab_err.cold+0x53/0x67
    [61110.467534]  __kmem_cache_shutdown+0x16e/0x320
    [61110.467540]  kmem_cache_destroy+0x51/0x160
    [61110.467544]  qla2x00_module_exit+0x93/0x99 [qla2xxx]
    [61110.467607]  ? __do_sys_delete_module.constprop.0+0x178/0x280
    [61110.467613]  ? syscall_trace_enter.constprop.0+0x145/0x1d0
    [61110.467616]  ? do_syscall_64+0x5c/0x90
    [61110.467619]  ? exc_page_fault+0x62/0x150
    [61110.467622]  ? entry_SYSCALL_64_after_hwframe+0x63/0xcd
    [61110.467626]  </TASK>
    [61110.467627] Disabling lock debugging due to kernel taint
    [61110.467635] Object 0x0000000026f7e6e6 @offset=16000
    [61110.467639] ------------[ cut here ]------------
    [61110.467639] kmem_cache_destroy qla2xxx_srbs: Slab cache still has objects when called from qla2x00_module_exit+0x93/0x99 [qla2xxx]
    [61110.467659] WARNING: CPU: 53 PID: 455206 at mm/slab_common.c:520 kmem_cache_destroy+0x14d/0x160
    [61110.467718] CPU: 53 PID: 455206 Comm: rmmod Kdump: loaded Tainted: G    B      OE    --------  ---  5.14.0-284.11.1.el9_2.x86_64 #1
    [61110.467720] Hardware name: HPE ProLiant DL385 Gen10 Plus v2/ProLiant DL385 Gen10 Plus v2, BIOS A42 08/17/2023
    [61110.467721] RIP: 0010:kmem_cache_destroy+0x14d/0x160
    [61110.467724] Code: 99 7d 07 00 48 89 ef e8 e1 6a 07 00 eb b3 48 8b 55 60 48 8b 4c 24 20 48 c7 c6 70 fc 66 90 48 c7 c7 f8 ef a1 90 e8 e1 ed 7c 00 <0f> 0b eb 93 c3 cc cc cc cc 66 2e 0f 1f 84 00 00 00 00 00 55 48 89
    [61110.467725] RSP: 0018:ffffa304e489fe80 EFLAGS: 00010282
    [61110.467727] RAX: 0000000000000000 RBX: ffffffffc0d9a860 RCX: 0000000000000027
    [61110.467729] RDX: ffff8fd5ff9598a8 RSI: 0000000000000001 RDI: ffff8fd5ff9598a0
    [61110.467730] RBP: ffff8fb6aaf78700 R08: 0000000000000000 R09: 0000000100d863b7
    [61110.467731] R10: ffffa304e489fd20 R11: ffffffff913bef48 R12: 0000000040002000
    [61110.467731] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
    [61110.467733] FS:  00007f64c89fb740(0000) GS:ffff8fd5ff940000(0000) knlGS:0000000000000000
    [61110.467734] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [61110.467735] CR2: 00007f0f02bfe000 CR3: 00000020ad6dc005 CR4: 0000000000770ee0
    [61110.467736] PKRU: 55555554
    [61110.467737] Call Trace:
    [61110.467738]  <TASK>
    [61110.467739]  qla2x00_module_exit+0x93/0x99 [qla2xxx]
    [61110.467755]  ? __do_sys_delete_module.constprop.0+0x178/0x280
    
    Free sp in the error path to fix the crash.
    
    Fixes: f352eeb75419 ("scsi: qla2xxx: Add ability to use GPNFT/GNNFT for RSCN handling")
    Cc: stable@vger.kernel.org
    Signed-off-by: Anil Gurumurthy <agurumurthy@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Reviewed-by: Himanshu Madhani <hmadhani2024@gmail.com>
    Link: https://patch.msgid.link/20251210101604.431868-9-njavali@marvell.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Query FW again before proceeding with login [+ + +]
Author: Anil Gurumurthy <agurumurthy@marvell.com>
Date:   Wed Dec 10 15:46:02 2025 +0530

    scsi: qla2xxx: Query FW again before proceeding with login
    
    commit 42b2dab4340d39b71334151e10c6d7d9b0040ffa upstream.
    
    Issue occurred during a continuous reboot test of several thousand
    iterations specific to a fabric topo with dual mode target where it
    sends a PLOGI/PRLI and then sends a LOGO. The initiator was also in the
    process of discovery and sent a PLOGI to the switch. It then queried a
    list of ports logged in via mbx 75h and the GPDB response indicated that
    the target was logged in. This caused a mismatch in the states between
    the driver and FW.  Requery the FW for the state and proceed with the
    rest of discovery process.
    
    Fixes: a4239945b8ad ("scsi: qla2xxx: Add switch command to simplify fabric discovery")
    Cc: stable@vger.kernel.org
    Signed-off-by: Anil Gurumurthy <agurumurthy@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Reviewed-by: Himanshu Madhani <hmadhani2024@gmail.com>
    Link: https://patch.msgid.link/20251210101604.431868-11-njavali@marvell.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Reduce fabric scan duplicate code [+ + +]
Author: Quinn Tran <qutran@marvell.com>
Date:   Fri Feb 13 10:43:31 2026 -0500

    scsi: qla2xxx: Reduce fabric scan duplicate code
    
    [ Upstream commit beafd692461443e0fb1d61aa56886bf85ef6f5e4 ]
    
    For fabric scan, current code uses switch scan opcode and flags as the
    method to iterate through different commands to carry out the process.
    This makes it hard to read. This patch convert those opcode and flags into
    steps. In addition, this help reduce some duplicate code.
    
    Consolidate routines that handle GPNFT & GNNFT.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Quinn Tran <qutran@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Link: https://lore.kernel.org/r/20240710171057.35066-10-njavali@marvell.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Stable-dep-of: 7adbd2b78090 ("scsi: qla2xxx: Free sp in error path to fix system crash")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Remove dead code (GNN ID) [+ + +]
Author: Quinn Tran <qutran@marvell.com>
Date:   Fri Feb 13 10:43:30 2026 -0500

    scsi: qla2xxx: Remove dead code (GNN ID)
    
    [ Upstream commit 87f6dafd50fb6d7214c32596a11b983138b09123 ]
    
    Remove stale/unused code (GNN ID).
    
    Signed-off-by: Quinn Tran <qutran@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Stable-dep-of: 7adbd2b78090 ("scsi: qla2xxx: Free sp in error path to fix system crash")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: qla2xxx: Validate sp before freeing associated memory [+ + +]
Author: Anil Gurumurthy <agurumurthy@marvell.com>
Date:   Wed Dec 10 15:46:01 2025 +0530

    scsi: qla2xxx: Validate sp before freeing associated memory
    
    commit b6df15aec8c3441357d4da0eaf4339eb20f5999f upstream.
    
    System crash with the following signature
    [154563.214890] nvme nvme2: NVME-FC{1}: controller connect complete
    [154564.169363] qla2xxx [0000:b0:00.1]-3002:2: nvme: Sched: Set ZIO exchange threshold to 3.
    [154564.169405] qla2xxx [0000:b0:00.1]-ffffff:2: SET ZIO Activity exchange threshold to 5.
    [154565.539974] qla2xxx [0000:b0:00.1]-5013:2: RSCN database changed – 0078 0080 0000.
    [154565.545744] qla2xxx [0000:b0:00.1]-5013:2: RSCN database changed – 0078 00a0 0000.
    [154565.545857] qla2xxx [0000:b0:00.1]-11a2:2: FEC=enabled (data rate).
    [154565.552760] qla2xxx [0000:b0:00.1]-11a2:2: FEC=enabled (data rate).
    [154565.553079] BUG: kernel NULL pointer dereference, address: 00000000000000f8
    [154565.553080] #PF: supervisor read access in kernel mode
    [154565.553082] #PF: error_code(0x0000) - not-present page
    [154565.553084] PGD 80000010488ab067 P4D 80000010488ab067 PUD 104978a067 PMD 0
    [154565.553089] Oops: 0000 1 PREEMPT SMP PTI
    [154565.553092] CPU: 10 PID: 858 Comm: qla2xxx_2_dpc Kdump: loaded Tainted: G           OE     -------  ---  5.14.0-503.11.1.el9_5.x86_64 #1
    [154565.553096] Hardware name: HPE Synergy 660 Gen10/Synergy 660 Gen10 Compute Module, BIOS I43 09/30/2024
    [154565.553097] RIP: 0010:qla_fab_async_scan.part.0+0x40b/0x870 [qla2xxx]
    [154565.553141] Code: 00 00 e8 58 a3 ec d4 49 89 e9 ba 12 20 00 00 4c 89 e6 49 c7 c0 00 ee a8 c0 48 c7 c1 66 c0 a9 c0 bf 00 80 00 10 e8 15 69 00 00 <4c> 8b 8d f8 00 00 00 4d 85 c9 74 35 49 8b 84 24 00 19 00 00 48 8b
    [154565.553143] RSP: 0018:ffffb4dbc8aebdd0 EFLAGS: 00010286
    [154565.553145] RAX: 0000000000000000 RBX: ffff8ec2cf0908d0 RCX: 0000000000000002
    [154565.553147] RDX: 0000000000000000 RSI: ffffffffc0a9c896 RDI: ffffb4dbc8aebd47
    [154565.553148] RBP: 0000000000000000 R08: ffffb4dbc8aebd45 R09: 0000000000ffff0a
    [154565.553150] R10: 0000000000000000 R11: 000000000000000f R12: ffff8ec2cf0908d0
    [154565.553151] R13: ffff8ec2cf090900 R14: 0000000000000102 R15: ffff8ec2cf084000
    [154565.553152] FS:  0000000000000000(0000) GS:ffff8ed27f800000(0000) knlGS:0000000000000000
    [154565.553154] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [154565.553155] CR2: 00000000000000f8 CR3: 000000113ae0a005 CR4: 00000000007706f0
    [154565.553157] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [154565.553158] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    [154565.553159] PKRU: 55555554
    [154565.553160] Call Trace:
    [154565.553162]  <TASK>
    [154565.553165]  ? show_trace_log_lvl+0x1c4/0x2df
    [154565.553172]  ? show_trace_log_lvl+0x1c4/0x2df
    [154565.553177]  ? qla_fab_async_scan.part.0+0x40b/0x870 [qla2xxx]
    [154565.553215]  ? __die_body.cold+0x8/0xd
    [154565.553218]  ? page_fault_oops+0x134/0x170
    [154565.553223]  ? snprintf+0x49/0x70
    [154565.553229]  ? exc_page_fault+0x62/0x150
    [154565.553238]  ? asm_exc_page_fault+0x22/0x30
    
    Check for sp being non NULL before freeing any associated memory
    
    Fixes: a4239945b8ad ("scsi: qla2xxx: Add switch command to simplify fabric discovery")
    Cc: stable@vger.kernel.org
    Signed-off-by: Anil Gurumurthy <agurumurthy@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Reviewed-by: Himanshu Madhani <hmadhani2024@gmail.com>
    Link: https://patch.msgid.link/20251210101604.431868-10-njavali@marvell.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
selftests: mptcp: check no dup close events after error [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Wed Feb 11 20:06:22 2026 +0100

    selftests: mptcp: check no dup close events after error
    
    commit 8467458dfa61b37e259e3485a5d3e415d08193c1 upstream.
    
    This validates the previous commit: subflow closed events are re-sent
    with less info when the initial subflow is disconnected after an error
    and each time a subflow is closed after that.
    
    In this new test, the userspace PM is involved because that's how it was
    discovered, but it is not specific to it. The initial subflow is
    terminated with a RESET, and that will cause the subflow disconnect.
    Then, a new subflow is initiated, but also got rejected, which cause a
    second subflow closed event, but not a third one.
    
    While at it, in case of failure to get the expected amount of events,
    the events are printed.
    
    The 'Fixes' tag here below is the same as the one from the previous
    commit: this patch here is not fixing anything wrong in the selftests,
    but it validates the previous fix for an issue introduced by this commit
    ID.
    
    Fixes: d82809b6c5f2 ("mptcp: avoid duplicated SUB_CLOSED events")
    Cc: stable@vger.kernel.org
    Reviewed-by: Geliang Tang <geliang@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260127-net-mptcp-dup-nl-events-v1-2-7f71e1bc4feb@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ Conflicts in mptcp_join.sh, because in this version, commit
      20ccc7c5f7a3 ("selftests: mptcp: join: validate event numbers") has
      been backported with adaptations to display results correctly, see
      commit 5dc9170eee96 ("selftests: mptcp: join: validate event numbers")
      for more details. The same type of adaptations had to be made here as
      well, plus importing a few additional helpers: userspace_pm_add_sf,
      evts_get_info and get_info_value. ]
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

selftests: mptcp: check subflow errors in close events [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Wed Feb 11 20:06:23 2026 +0100

    selftests: mptcp: check subflow errors in close events
    
    commit 2ef9e3a3845d0a20b62b01f5b731debd0364688d upstream.
    
    This validates the previous commit: subflow closed events should contain
    an error field when a subflow got closed with an error, e.g. reset or
    timeout.
    
    For this test, the chk_evt_nr helper has been extended to check
    attributes in the matched events.
    
    In this test, the 2 subflow closed events should have an error.
    
    The 'Fixes' tag here below is the same as the one from the previous
    commit: this patch here is not fixing anything wrong in the selftests,
    but it validates the previous fix for an issue introduced by this commit
    ID.
    
    Fixes: 15cc10453398 ("mptcp: deliver ssk errors to msk")
    Cc: stable@vger.kernel.org
    Reviewed-by: Geliang Tang <geliang@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260127-net-mptcp-dup-nl-events-v1-4-7f71e1bc4feb@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ Conflicts in mptcp_join.sh, because in this version, commit
      20ccc7c5f7a3 ("selftests: mptcp: join: validate event numbers") has
      been backported with adaptations to display results correctly, see
      commit 5dc9170eee96 ("selftests: mptcp: join: validate event numbers")
      for more details. The same type of adaptations had to be made here as
      well. ]
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

selftests: mptcp: join: fix local endp not being tracked [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Wed Feb 11 20:06:24 2026 +0100

    selftests: mptcp: join: fix local endp not being tracked
    
    commit c5d5ecf21fdd9ce91e6116feb3aa83cee73352cc upstream.
    
    When running this mptcp_join.sh selftest on older kernel versions not
    supporting local endpoints tracking, this test fails because 3 MP_JOIN
    ACKs have been received, while only 2 were expected.
    
    It is not clear why only 2 MP_JOIN ACKs were expected on old kernel
    versions, while 3 MP_JOIN SYN and SYN+ACK were expected. When testing on
    the v5.15.197 kernel, 3 MP_JOIN ACKs are seen, which is also what is
    expected in the selftests included in this kernel version, see commit
    f4480eaad489 ("selftests: mptcp: add missing join check").
    
    Switch the expected MP_JOIN ACKs to 3. While at it, move this
    chk_join_nr helper out of the special condition for older kernel
    versions as it is now the same as with more recent ones. Also, invert
    the condition to be more logical: what's expected on newer kernel
    versions having such helper first.
    
    Fixes: d4c81bbb8600 ("selftests: mptcp: join: support local endpoint being tracked or not")
    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/20260127-net-mptcp-dup-nl-events-v1-5-7f71e1bc4feb@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ Conflicts in mptcp_join.sh, because commit e571fb09c893 ("selftests:
      mptcp: add speed env var") is not in this version, and caused
      conflicts in the context. The same modification can still be applied
      at the same place. ]
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

selftests: mptcp: pm: ensure unknown flags are ignored [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Wed Feb 11 20:06:19 2026 +0100

    selftests: mptcp: pm: ensure unknown flags are ignored
    
    commit 29f4801e9c8dfd12bdcb33b61a6ac479c7162bd7 upstream.
    
    This validates the previous commit: the userspace can set unknown flags
    -- the 7th bit is currently unused -- without errors, but only the
    supported ones are printed in the endpoints dumps.
    
    The 'Fixes' tag here below is the same as the one from the previous
    commit: this patch here is not fixing anything wrong in the selftests,
    but it validates the previous fix for an issue introduced by this commit
    ID.
    
    Fixes: 01cacb00b35c ("mptcp: add netlink-based PM")
    Cc: 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-2-9e4781a6c1b8@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ Conflicts in pm_netlink.sh, because some refactoring have been done
      later on: commit 0d16ed0c2e74 ("selftests: mptcp: add
      {get,format}_endpoint(s) helpers") and commit c99d57d0007a
      ("selftests: mptcp: use pm_nl endpoint ops") are not in this version.
      The same operation can still be done at the same place, without using
      the new helpers.
      Also, commit 1dc88d241f92 ("selftests: mptcp: pm_nl_ctl: always look
      for errors") is not in this version, and create a conflict in the
      context which is not related to the modification here. ]
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
smb: client: set correct id, uid and cruid for multiuser automounts [+ + +]
Author: Paulo Alcantara <pc@manguebit.org>
Date:   Sun Feb 11 20:19:30 2024 -0300

    smb: client: set correct id, uid and cruid for multiuser automounts
    
    commit 4508ec17357094e2075f334948393ddedbb75157 upstream.
    
    When uid, gid and cruid are not specified, we need to dynamically
    set them into the filesystem context used for automounting otherwise
    they'll end up reusing the values from the parent mount.
    
    Fixes: 9fd29a5bae6e ("cifs: use fs_context for automounts")
    Reported-by: Shane Nehring <snehring@iastate.edu>
    Closes: https://bugzilla.redhat.com/show_bug.cgi?id=2259257
    Cc: stable@vger.kernel.org # 6.2+
    Signed-off-by: Paulo Alcantara (Red Hat) <pc@manguebit.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    [ The context change is due to the commit 561f82a3a24c
      ("smb: client: rename cifs_dfs_ref.c to namespace.c") and the commit
      0a049935e47e ("smb: client: get rid of dfs naming in automount code")
      in v6.6 which are irrelevant to the logic of this patch. ]
    Signed-off-by: Rahul Sharma <black.hawk@163.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

smb: client: split cached_fid bitfields to avoid shared-byte RMW races [+ + +]
Author: Henrique Carvalho <henrique.carvalho@suse.com>
Date:   Tue Jan 27 13:01:28 2026 -0300

    smb: client: split cached_fid bitfields to avoid shared-byte RMW races
    
    commit ec306600d5ba7148c9dbf8f5a8f1f5c1a044a241 upstream.
    
    is_open, has_lease and on_list are stored in the same bitfield byte in
    struct cached_fid but are updated in different code paths that may run
    concurrently. Bitfield assignments generate byte read–modify–write
    operations (e.g. `orb $mask, addr` on x86_64), so updating one flag can
    restore stale values of the others.
    
    A possible interleaving is:
        CPU1: load old byte (has_lease=1, on_list=1)
        CPU2: clear both flags (store 0)
        CPU1: RMW store (old | IS_OPEN) -> reintroduces cleared bits
    
    To avoid this class of races, convert these flags to separate bool
    fields.
    
    Cc: stable@vger.kernel.org
    Fixes: ebe98f1447bbc ("cifs: enable caching of directories for which a lease is held")
    Signed-off-by: Henrique Carvalho <henrique.carvalho@suse.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
smb: server: fix leak of active_num_conn in ksmbd_tcp_new_connection() [+ + +]
Author: Henrique Carvalho <henrique.carvalho@suse.com>
Date:   Wed Feb 4 20:06:43 2026 -0300

    smb: server: fix leak of active_num_conn in ksmbd_tcp_new_connection()
    
    commit 77ffbcac4e569566d0092d5f22627dfc0896b553 upstream.
    
    On kthread_run() failure in ksmbd_tcp_new_connection(), the transport is
    freed via free_transport(), which does not decrement active_num_conn,
    leaking this counter.
    
    Replace free_transport() with ksmbd_tcp_disconnect().
    
    Fixes: 0d0d4680db22e ("ksmbd: add max connections parameter")
    Cc: stable@vger.kernel.org
    Signed-off-by: Henrique Carvalho <henrique.carvalho@suse.com>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: serial: option: add Telit FN920C04 RNDIS compositions [+ + +]
Author: Fabio Porcedda <fabio.porcedda@gmail.com>
Date:   Fri Jan 23 16:19:16 2026 +0100

    USB: serial: option: add Telit FN920C04 RNDIS compositions
    
    commit 509f403f3ccec14188036212118651bf23599396 upstream.
    
    Add the following compositions:
    
    0x10a1: RNDIS + 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=10a1 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FN920
    S:  SerialNumber=d128dba9
    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
    
    0x10a6: RNDIS + tty (AT/NMEA) + 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=10a6 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FN920
    S:  SerialNumber=d128dba9
    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
    
    0x10ab: RNDIS + tty (AT) + tty (diag) + DPL (Data Packet Logging) + adb
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 11 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10ab Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FN920
    S:  SerialNumber=d128dba9
    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>

 
wifi: cfg80211: Add missing lock in cfg80211_check_and_end_cac() [+ + +]
Author: Alexander Wetzel <Alexander@wetzel-home.de>
Date:   Fri Feb 13 08:26:24 2026 +0000

    wifi: cfg80211: Add missing lock in cfg80211_check_and_end_cac()
    
    [ Upstream commit 2c5dee15239f3f3e31aa5c8808f18996c039e2c1 ]
    
    Callers of wdev_chandef() must hold the wiphy mutex.
    
    But the worker cfg80211_propagate_cac_done_wk() never takes the lock.
    Which triggers the warning below with the mesh_peer_connected_dfs
    test from hostapd and not (yet) released mac80211 code changes:
    
    WARNING: CPU: 0 PID: 495 at net/wireless/chan.c:1552 wdev_chandef+0x60/0x165
    Modules linked in:
    CPU: 0 UID: 0 PID: 495 Comm: kworker/u4:2 Not tainted 6.14.0-rc5-wt-g03960e6f9d47 #33 13c287eeabfe1efea01c0bcc863723ab082e17cf
    Workqueue: cfg80211 cfg80211_propagate_cac_done_wk
    Stack:
     00000000 00000001 ffffff00 6093267c
     00000000 6002ec30 6d577c50 60037608
     00000000 67e8d108 6063717b 00000000
    Call Trace:
     [<6002ec30>] ? _printk+0x0/0x98
     [<6003c2b3>] show_stack+0x10e/0x11a
     [<6002ec30>] ? _printk+0x0/0x98
     [<60037608>] dump_stack_lvl+0x71/0xb8
     [<6063717b>] ? wdev_chandef+0x60/0x165
     [<6003766d>] dump_stack+0x1e/0x20
     [<6005d1b7>] __warn+0x101/0x20f
     [<6005d3a8>] warn_slowpath_fmt+0xe3/0x15d
     [<600b0c5c>] ? mark_lock.part.0+0x0/0x4ec
     [<60751191>] ? __this_cpu_preempt_check+0x0/0x16
     [<600b11a2>] ? mark_held_locks+0x5a/0x6e
     [<6005d2c5>] ? warn_slowpath_fmt+0x0/0x15d
     [<60052e53>] ? unblock_signals+0x3a/0xe7
     [<60052f2d>] ? um_set_signals+0x2d/0x43
     [<60751191>] ? __this_cpu_preempt_check+0x0/0x16
     [<607508b2>] ? lock_is_held_type+0x207/0x21f
     [<6063717b>] wdev_chandef+0x60/0x165
     [<605f89b4>] regulatory_propagate_dfs_state+0x247/0x43f
     [<60052f00>] ? um_set_signals+0x0/0x43
     [<605e6bfd>] cfg80211_propagate_cac_done_wk+0x3a/0x4a
     [<6007e460>] process_scheduled_works+0x3bc/0x60e
     [<6007d0ec>] ? move_linked_works+0x4d/0x81
     [<6007d120>] ? assign_work+0x0/0xaa
     [<6007f81f>] worker_thread+0x220/0x2dc
     [<600786ef>] ? set_pf_worker+0x0/0x57
     [<60087c96>] ? to_kthread+0x0/0x43
     [<6008ab3c>] kthread+0x2d3/0x2e2
     [<6007f5ff>] ? worker_thread+0x0/0x2dc
     [<6006c05b>] ? calculate_sigpending+0x0/0x56
     [<6003b37d>] new_thread_handler+0x4a/0x64
    irq event stamp: 614611
    hardirqs last  enabled at (614621): [<00000000600bc96b>] __up_console_sem+0x82/0xaf
    hardirqs last disabled at (614630): [<00000000600bc92c>] __up_console_sem+0x43/0xaf
    softirqs last  enabled at (614268): [<00000000606c55c6>] __ieee80211_wake_queue+0x933/0x985
    softirqs last disabled at (614266): [<00000000606c52d6>] __ieee80211_wake_queue+0x643/0x985
    
    Fixes: 26ec17a1dc5e ("cfg80211: Fix radar event during another phy CAC")
    Signed-off-by: Alexander Wetzel <Alexander@wetzel-home.de>
    Link: https://patch.msgid.link/20250717162547.94582-1-Alexander@wetzel-home.de
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    [ Use wiphy_lock() and wiphy_unlock() instead of guard() in v6.1.y. ]
    Signed-off-by: Bin Lan <lanbincn@139.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xsk: Fix race condition in AF_XDP generic RX path [+ + +]
Author: e.kubanski <e.kubanski@partner.samsung.com>
Date:   Tue Feb 10 17:12:51 2026 +0800

    xsk: Fix race condition in AF_XDP generic RX path
    
    [ Upstream commit a1356ac7749cafc4e27aa62c0c4604b5dca4983e ]
    
    Move rx_lock from xsk_socket to xsk_buff_pool.
    Fix synchronization for shared umem mode in
    generic RX path where multiple sockets share
    single xsk_buff_pool.
    
    RX queue is exclusive to xsk_socket, while FILL
    queue can be shared between multiple sockets.
    This could result in race condition where two
    CPU cores access RX path of two different sockets
    sharing the same umem.
    
    Protect both queues by acquiring spinlock in shared
    xsk_buff_pool.
    
    Lock contention may be minimized in the future by some
    per-thread FQ buffering.
    
    It's safe and necessary to move spin_lock_bh(rx_lock)
    after xsk_rcv_check():
    * xs->pool and spinlock_init is synchronized by
      xsk_bind() -> xsk_is_bound() memory barriers.
    * xsk_rcv_check() may return true at the moment
      of xsk_release() or xsk_unbind_dev(),
      however this will not cause any data races or
      race conditions. xsk_unbind_dev() removes xdp
      socket from all maps and waits for completion
      of all outstanding rx operations. Packets in
      RX path will either complete safely or drop.
    
    Signed-off-by: Eryk Kubanski <e.kubanski@partner.samsung.com>
    Fixes: bf0bdd1343efb ("xdp: fix race on generic receive path")
    Acked-by: Magnus Karlsson <magnus.karlsson@intel.com>
    Link: https://patch.msgid.link/20250416101908.10919-1-e.kubanski@partner.samsung.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ Conflict is resolved when backporting this fix. ]
    Signed-off-by: Jianqiang kang <jianqkang@sina.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>