Changelog in Linux kernel 5.15.201

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

 
btrfs: fix racy bitfield write in btrfs_clear_space_info_full() [+ + +]
Author: Boris Burkov <boris@bur.io>
Date:   Tue Feb 10 14:55:04 2026 +0800

    btrfs: fix racy bitfield write in btrfs_clear_space_info_full()
    
    [ Upstream commit 38e818718c5e04961eea0fa8feff3f100ce40408 ]
    
    >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")
    and the commit 45a59513b4b2
    ("btrfs: add support for reclaiming from sub-space space_info")
    in v6.16 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>

 
bus: fsl-mc: fix use-after-free in driver_override_show() [+ + +]
Author: Gui-Dong Han <hanguidong02@gmail.com>
Date:   Fri Feb 13 19:54:27 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 19:54:26 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>

 
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:   Fri Feb 13 09:10:48 2026 -0500

    crypto: virtio - Remove duplicated virtqueue_kick in virtio_crypto_skcipher_crypt_req
    
    [ Upstream commit 14f86a1155cca1176abf55987b2fce7f7fcb2455 ]
    
    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: Sasha Levin <sashal@kernel.org>
    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 out-of-bounds access in sysfs attribute read/write [+ + +]
Author: Yongpeng Yang <yangyongpeng@xiaomi.com>
Date:   Tue Feb 17 10:59:35 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 ]
    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 11:14:07 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>

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

    Linux 5.15.201
    
    Link: https://lore.kernel.org/r/20260217200002.929083107@linuxfoundation.org
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Brett A C Sheffield <bacs@librecast.net>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Vijayendra Suman <vijayendra.suman@oracle.com>
    Tested-by: Ron Economos <re@w6rz.net>
    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:41:47 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>

 
net: dsa: free routing table on probe failure [+ + +]
Author: Vladimir Oltean <vladimir.oltean@nxp.com>
Date:   Thu Feb 12 10:52:36 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 v5.15.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>

 
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:   Sat Feb 14 08:02:52 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:   Sat Feb 14 08:02:54 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:   Sat Feb 14 08:02:53 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 18e65229a328304a7ef59899a30fd34ad73ed56b 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: 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:   Sat Feb 14 08:02:35 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 11:45:03 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 11:45:02 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 11:45:01 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: Use named initializers for port_[d]state_str [+ + +]
Author: Gleb Chesnokov <Chesnokov.G@raidix.com>
Date:   Fri Feb 13 11:45:00 2026 -0500

    scsi: qla2xxx: Use named initializers for port_[d]state_str
    
    [ Upstream commit 6e0e85d39e528da2915a2da261195f81bfde6915 ]
    
    Make port_state_str and port_dstate_str a little more readable and
    maintainable by using named initializers.
    
    Also convert FCS_* macros into an enum.
    
    Link: https://lore.kernel.org/r/AS8PR10MB495215841EB25C16DBC0CB409D349@AS8PR10MB4952.EURPRD10.PROD.OUTLOOK.COM
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Gleb Chesnokov <Chesnokov.G@raidix.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: pm: ensure unknown flags are ignored [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Thu Feb 12 12:03:45 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.
      Conflicts in pm_nl_ctl.c, because commit 69c6ce7b6eca ("selftests:
      mptcp: add implicit endpoint test case") is not in this version, and
      caused 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:   Thu Feb 12 16:50:30 2026 +0800

    smb: client: set correct id, uid and cruid for multiuser automounts
    
    [ Upstream commit 4508ec17357094e2075f334948393ddedbb75157 ]
    
    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: server: fix leak of active_num_conn in ksmbd_tcp_new_connection() [+ + +]
Author: Henrique Carvalho <henrique.carvalho@suse.com>
Date:   Fri Feb 13 10:08:55 2026 -0500

    smb: server: fix leak of active_num_conn in ksmbd_tcp_new_connection()
    
    [ Upstream commit 77ffbcac4e569566d0092d5f22627dfc0896b553 ]
    
    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: Sasha Levin <sashal@kernel.org>
    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>