Changelog in Linux kernel 5.10.261

 
6lowpan: fix NHC entry use-after-free on error path [+ + +]
Author: Yizhou Zhao <[email protected]>
Date:   Tue Jun 9 16:00:52 2026 +0800

    6lowpan: fix NHC entry use-after-free on error path
    
    commit 1720db928e5a58ca7d75ac1d514c3b73fd7061a7 upstream.
    
    lowpan_nhc_do_uncompression() looks up an NHC descriptor while holding
    lowpan_nhc_lock.  If the descriptor has no uncompress callback, the error
    path drops the lock before printing nhc->name.
    
    lowpan_nhc_del() removes descriptors under the same lock and then relies
    on synchronize_net() before the owning module can be unloaded.  That only
    waits for net RX RCU readers.  lowpan_header_decompress() is also exported
    and can be reached from callers that are not necessarily covered by the net
    core RX critical section, for example the Bluetooth 6LoWPAN L2CAP receive
    path.
    
    This leaves a race where one task drops lowpan_nhc_lock in the error path,
    another task unregisters and frees the matching descriptor after
    synchronize_net() returns, and the first task then dereferences nhc->name
    for the warning.
    
    With the post-unlock window widened, KASAN reports:
    
      BUG: KASAN: slab-use-after-free in lowpan_nhc_do_uncompression+0x1f4/0x220
      Read of size 8
      lowpan_nhc_do_uncompression
      lowpan_header_decompress
    
    Fix this by printing the warning before dropping lowpan_nhc_lock, so the
    descriptor name is read while unregister is still excluded.  The malformed
    packet is still rejected with -ENOTSUPP.
    
    Fixes: 92aa7c65d295 ("6lowpan: add generic nhc layer interface")
    Cc: [email protected]
    Reported-by: Yizhou Zhao <[email protected]>
    Reported-by: Yuxiang Yang <[email protected]>
    Reported-by: Ao Wang <[email protected]>
    Reported-by: Xuewei Feng <[email protected]>
    Reported-by: Qi Li <[email protected]>
    Reported-by: Ke Xu <[email protected]>
    Signed-off-by: Yizhou Zhao <[email protected]>
    Acked-by: Alexander Aring <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ACPI: IPMI: Fix message kref handling on dead device [+ + +]
Author: Yuho Choi <[email protected]>
Date:   Wed Jun 3 12:31:08 2026 -0400

    ACPI: IPMI: Fix message kref handling on dead device
    
    [ Upstream commit 63320db6a5d84ec3fed8b3d36ba5244d07ddd108 ]
    
    acpi_ipmi_space_handler() takes an extra reference on tx_msg before
    checking whether the selected IPMI device is dead. The reference
    belongs to the tx_msg_list entry and is normally dropped by
    ipmi_cancel_tx_msg() or ipmi_flush_tx_msg() after the message is removed
    from the list.
    
    On the dead-device path, the message has not been queued yet, but the
    error path still calls ipmi_msg_release() directly. That bypasses
    kref_put() and frees tx_msg while the queued-message reference is still
    recorded in the kref count.
    
    Take the queued-message reference only after the dead-device check
    succeeds, immediately before adding tx_msg to the list.
    
    Fixes: 7b9844772237 ("ACPI / IPMI: Add reference counting for ACPI IPMI transfers")
    Signed-off-by: Yuho Choi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ACPI: NFIT: core: Fix acpi_nfit_init() error cleanup [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Fri Jul 10 11:42:05 2026 -0400

    ACPI: NFIT: core: Fix acpi_nfit_init() error cleanup
    
    [ Upstream commit 38bf27511ef41bffebd157ec3eba41fc89ba59cd ]
    
    If acpi_nfit_init() fails after adding the acpi_desc object to the
    acpi_descs list, that object is never removed from that list because
    the acpi_nfit_shutdown() devm action is not added for the NFIT device
    in that case.  Next, the acpi_nfit_init() failure causes
    acpi_nfit_probe() to fail, the acpi_desc object is freed, and a
    dangling pointer is left behind in the acpi_descs.  Any subsequent
    ACPI Machine Check Exception will trigger nfit_handle_mce() which
    iterates over acpi_descs and so a use-after-free will occur.
    
    Moreover, if acpi_nfit_probe() returns 0 after installing a notify
    handler for the NFIT device and without allocating the acpi_desc
    object and setting the NFIT device's driver data pointer, the
    acpi_desc object will be allocated by acpi_nfit_update_notify()
    and acpi_nfit_init() will be called to initialize it.  Regardless
    of whether or not acpi_nfit_init() fails in that case, the
    acpi_nfit_shutdown() devm action is not added for the NFIT device
    and acpi_desc is never removed from the acpi_descs list.  If the
    acpi_desc object is freed subsequently on driver removal, any
    subsequent ACPI MCE will lead to a use-after-free like in the
    previous case.
    
    To address the first issue mentioned above, make acpi_nfit_probe()
    call acpi_nfit_shutdown() directly on acpi_nfit_init() failures and
    to address the other one, add a remove callback to the driver and
    make it call acpi_nfit_shutdown().  Also, since it is now possible to
    pass NULL to acpi_nfit_shutdown() or the acpi_desc object passed to it
    may not have been initialized, add checks against NULL for acpi_desc and
    its nvdimm_bus field to that function and make acpi_nfit_unregister()
    clear the latter after unregistering the NVDIMM bus.
    
    Fixes: a61fe6f7902e ("nfit, tools/testing/nvdimm: unify common init for acpi_nfit_desc")
    Fixes: fbabd829fe76 ("acpi, nfit: fix module unload vs workqueue shutdown race")
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Cc: All applicable <[email protected]>
    Reviewed-by: Dave Jiang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ACPI: resource: Amend kernel-doc style [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Wed Jun 17 11:05:55 2026 +0200

    ACPI: resource: Amend kernel-doc style
    
    [ Upstream commit 78ad5c7722b7bed9d35ffc5b45eb0f12e2c22fee ]
    
    The functions are referred as func() in the kernel-doc. The % (percent)
    character makes the rendering for constants as described in the respective
    documentation. Amend all these.
    
    Fixes: 8e345c991c8c ("ACPI: Centralized processing of ACPI device resources")
    Signed-off-by: Andy Shevchenko <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
afs: Fix callback service message parsers to pass through -EAGAIN [+ + +]
Author: David Howells <[email protected]>
Date:   Mon Jun 22 10:08:47 2026 +0100

    afs: Fix callback service message parsers to pass through -EAGAIN
    
    [ Upstream commit 0f36469d7ce98b362934113c550d08bb0c784231 ]
    
    The AFS filesystem client uses an rxrpc server to listen for callback
    notifications.  Each callback call type handler has a delivery function
    that parses the incoming request stream, and this should return -EAGAIN the
    last packet hasn't yet been seen, but all currently queued received data is
    consumed.  afs_extract_data() does this, but the -EAGAIN return is switched
    to 0 inadvertantly
    
    Fix callback service message parsers to pass through -EAGAIN
    
    Fixes: d001648ec7cf ("rxrpc: Don't expose skbs to in-kernel users [ver #2]")
    Closes: https://sashiko.dev/#/patchset/20260609081738.770127-1-dhowells%40redhat.com
    Signed-off-by: David Howells <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    cc: Marc Dionne <[email protected]>
    cc: [email protected]
    Signed-off-by: Christian Brauner (Amutable) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

afs: Fix error code in afs_extract_vl_addrs() [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Mon Jun 22 10:08:36 2026 +0100

    afs: Fix error code in afs_extract_vl_addrs()
    
    [ Upstream commit 4897cb71d4ab1f7e1a214adb1e4b80176702368d ]
    
    The error codes on these paths are only set on the first iteration
    through the loop.  Set the correct error code on every iteration.
    
    Fixes: 0a5143f2f89c ("afs: Implement VL server rotation")
    Signed-off-by: Dan Carpenter <[email protected]>
    Signed-off-by: David Howells <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    cc: Marc Dionne <[email protected]>
    cc: [email protected]
    Signed-off-by: Christian Brauner (Amutable) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

afs: Fix further netns teardown to cancel the preallocation charger [+ + +]
Author: David Howells <[email protected]>
Date:   Wed Jun 24 17:38:11 2026 +0100

    afs: Fix further netns teardown to cancel the preallocation charger
    
    commit 2daf8ac812c3d78c642fe7652f62e29df5e3da20 upstream.
    
    When an afs network namespace is torn down, it cancels and waits for the
    work item that keeps the preallocated rxrpc call/conn/peer queue charged
    before disabling incoming (i.e. listen 0), but there's a small window in
    which it can be requeued by an incoming call wending through the I/O
    thread.
    
    Fix this by cancelling the charger work item again after reducing the
    listen backlog to zero.
    
    Fixes: 47694fbc9d24 ("afs: Fix netns teardown to cancel the preallocation charger")
    Reported-by: Jakub Kicinski <[email protected]>
    Signed-off-by: David Howells <[email protected]>
    Link: https://sashiko.dev/#/patchset/20260609140911.838677-1-dhowells%40redhat.com
    cc: Li Daming <[email protected]>
    cc: Ren Wei <[email protected]>
    cc: Marc Dionne <[email protected]>
    cc: Jeffrey Altman <[email protected]>
    cc: Simon Horman <[email protected]>
    cc: [email protected]
    cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

afs: Fix netns teardown to cancel the preallocation charger [+ + +]
Author: David Howells <[email protected]>
Date:   Tue Jun 9 15:09:08 2026 +0100

    afs: Fix netns teardown to cancel the preallocation charger
    
    commit 47694fbc9d24ab6bf210f91e8efe06a10a478064 upstream.
    
    Fix the teardown of an afs network namespace to make sure it cancels the
    work item that keeps the preallocated rxrpc call/conn/peer queue charged
    before incoming calls are disabled (i.e. listen 0).
    
    Also, if net->live is false because the afs netns is being deleted, make
    afs_charge_preallocation() skip charging and make afs_rx_new_call() avoid
    requeuing the charger.
    
    (This was found by AI review).
    
    Fixes: 00e907127e6f ("rxrpc: Preallocate peers, conns and calls for incoming service requests")
    Reported-by: Simon Horman <[email protected]>
    Signed-off-by: David Howells <[email protected]>
    cc: Li Daming <[email protected]>
    cc: Ren Wei <[email protected]>
    cc: Marc Dionne <[email protected]>
    cc: Jeffrey Altman <[email protected]>
    cc: [email protected]
    cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

afs: fix NULL pointer dereference in afs_get_tree() [+ + +]
Author: Matvey Kovalev <[email protected]>
Date:   Mon Jun 22 10:08:37 2026 +0100

    afs: fix NULL pointer dereference in afs_get_tree()
    
    commit 0b70716081c6462be9b2928ad736d0d527b09678 upstream.
    
    afs_alloc_sbi() uses kzalloc for memory allocation. And, if
    ctx->dyn_root is not null, as->cell and as->volume are null.
    In trace_afs_get_tree() they are dereferenced.
    
    KASAN error message:
    
    KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
    CPU: 2 PID: 18478 Comm: syz-executor.7 Not tainted 5.10.246-syzkaller #0
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1
    04/01/2014
    RIP: 0010:perf_trace_afs_get_tree+0x1d9/0x550
    include/trace/events/afs.h:1365
    
    Call Trace:
    trace_afs_get_tree include/trace/events/afs.h:1365 [inline]
    afs_get_tree+0x922/0x1350 fs/afs/super.c:599
    vfs_get_tree+0x8e/0x300 fs/super.c:1572
    do_new_mount fs/namespace.c:3011 [inline]
    path_mount+0x14a5/0x2220 fs/namespace.c:3341
    do_mount fs/namespace.c:3354 [inline]
    __do_sys_mount fs/namespace.c:3562 [inline]
    __se_sys_mount fs/namespace.c:3539 [inline]
    __x64_sys_mount+0x283/0x300 fs/namespace.c:3539
     do_syscall_64+0x33/0x50 arch/x86/entry/common.c:46
    entry_SYSCALL_64_after_hwframe+0x67/0xd1
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Fixes: 80548b03991f5 ("afs: Add more tracepoints")
    Cc: [email protected]
    Signed-off-by: Matvey Kovalev <[email protected]>
    Signed-off-by: David Howells <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    cc: Marc Dionne <[email protected]>
    cc: [email protected]
    Signed-off-by: Christian Brauner (Amutable) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

afs: Fix unchecked-length string display in debug statement [+ + +]
Author: David Howells <[email protected]>
Date:   Mon Jun 22 10:08:55 2026 +0100

    afs: Fix unchecked-length string display in debug statement
    
    [ Upstream commit 903d37c97228258da71e092f8b4ab260ce81497d ]
    
    Fix afs_extract_vlserver_list() to limit the length of the displayed
    string in a debug statement().
    
    Fixes: 0a5143f2f89c ("afs: Implement VL server rotation")
    Closes: https://sashiko.dev/#/patchset/20260618074903.2374756-1-dhowells%40redhat.com
    Signed-off-by: David Howells <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    cc: Marc Dionne <[email protected]>
    cc: [email protected]
    Signed-off-by: Christian Brauner (Amutable) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

afs: Fix vllist leak [+ + +]
Author: David Howells <[email protected]>
Date:   Mon Jun 22 10:08:51 2026 +0100

    afs: Fix vllist leak
    
    [ Upstream commit fc10c0ecf06f2981af5d04357612b00051e03e9e ]
    
    Fix a leak of the new vllist in afs_update_cell() in the event that it is an
    empty list (nr_servers == 0), in which case the old list isn't displaced
    unless the old list is also empty.
    
    Fixes: d5c32c89b208 ("afs: Fix cell DNS lookup")
    Closes: https://sashiko.dev/#/patchset/20260609081738.770127-1-dhowells%40redhat.com
    Signed-off-by: David Howells <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    cc: Marc Dionne <[email protected]>
    cc: [email protected]
    Signed-off-by: Christian Brauner (Amutable) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
alpha/PCI: Add security_locked_down() check to pci_mmap_resource() [+ + +]
Author: Krzysztof Wilczyński <[email protected]>
Date:   Fri May 8 04:35:30 2026 +0000

    alpha/PCI: Add security_locked_down() check to pci_mmap_resource()
    
    [ Upstream commit 78a228f0aa0e9eba31955950c8a40a9945e2c8bb ]
    
    Currently, Alpha's pci_mmap_resource() does not check
    security_locked_down(LOCKDOWN_PCI_ACCESS) before allowing userspace to mmap
    PCI BARs.
    
    The generic version has had this check since commit eb627e17727e ("PCI:
    Lock down BAR access when the kernel is locked down") to prevent DMA
    attacks when the kernel is locked down.
    
    Add the same check to Alpha's pci_mmap_resource().
    
    Fixes: eb627e17727e ("PCI: Lock down BAR access when the kernel is locked down")
    Signed-off-by: Krzysztof Wilczyński <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Tested-by: Magnus Lindholm <[email protected]>
    Tested-by: Shivaprasad G Bhat <[email protected]>
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Acked-by: Magnus Lindholm <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

alpha/PCI: Fix __pci_mmap_fits() overflow for zero-length BARs [+ + +]
Author: Krzysztof Wilczyński <[email protected]>
Date:   Fri May 8 04:35:33 2026 +0000

    alpha/PCI: Fix __pci_mmap_fits() overflow for zero-length BARs
    
    [ Upstream commit 802a3b3f470b9bc1148f26e01fc9cbfeb4dfcb57 ]
    
    Currently, __pci_mmap_fits() computes the BAR size using
    "pci_resource_len() - 1", which wraps to a large value when the BAR length
    is zero, causing the bounds check to incorrectly succeed.
    
    Add an early return for empty resources.
    
    Fixes: 10a0ef39fbd1 ("PCI/alpha: pci sysfs resources")
    Signed-off-by: Krzysztof Wilczyński <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Tested-by: Magnus Lindholm <[email protected]>
    Tested-by: Shivaprasad G Bhat <[email protected]>
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Acked-by: Magnus Lindholm <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
ALSA: aoa: check snd_ctl_new1() return value [+ + +]
Author: Zhao Dongdong <[email protected]>
Date:   Mon Jul 13 23:04:53 2026 -0400

    ALSA: aoa: check snd_ctl_new1() return value
    
    [ Upstream commit 8df560fefe6fed6a20b7e06720eeaeccec349ac0 ]
    
    snd_ctl_new1() can return NULL when memory allocation fails. In
    layout.c, the function does not check the return value before
    dereferencing ctl->id.name or passing to aoa_snd_ctl_add(), which can
    lead to a NULL pointer dereference.
    
    Add NULL checks after snd_ctl_new1() calls and return early if any
    fails.
    
    Assisted-by: Opencode:DeepSeek-V4-Flash
    Cc: [email protected]
    Fixes: f3d9478b2ce4 ("[ALSA] snd-aoa: add snd-aoa")
    Signed-off-by: Zhao Dongdong <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: caiaq: fix out-of-bounds read in the Traktor Kontrol S4 input parser [+ + +]
Author: Maoyi Xie <[email protected]>
Date:   Thu Jun 18 14:03:15 2026 +0800

    ALSA: caiaq: fix out-of-bounds read in the Traktor Kontrol S4 input parser
    
    commit f7f3f9fd81e7adbaa12c2e62ee07f0e094a543fd upstream.
    
    snd_usb_caiaq_tks4_dispatch() decodes the Traktor Kontrol S4 input
    stream in fixed 16-byte (TKS4_MSGBLOCK_SIZE) message blocks. On every
    iteration it advances buf and subtracts the block size while looping on
    "while (len)".
    
    len is urb->actual_length. That value is supplied by the device and is
    not guaranteed to be a multiple of 16. When a final short block leaves
    len between 1 and 15, the loop runs once more, reads up to buf[15], and
    then does "len -= TKS4_MSGBLOCK_SIZE". As len is unsigned this underflows
    to a huge value. The loop then keeps iterating and walking buf far past
    the end of the 512-byte ep4_in_buf, reading out of bounds until a bogus
    block id happens to be hit.
    
    Iterate only while a full message block is available. This stops the
    unsigned underflow and silently drops any trailing partial block, which
    carries no complete control value anyway.
    
    The sibling endpoint-4 parsers are not affected. The Traktor Kontrol X1
    and Maschine arms in snd_usb_caiaq_ep4_reply_dispatch() floor
    urb->actual_length before dispatching.
    
    Fixes: 15c5ab607045 ("ALSA: snd-usb-caiaq: Add support for Traktor Kontrol S4")
    Cc: [email protected]
    Signed-off-by: Maoyi Xie <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: es1938: check snd_ctl_new1() return value [+ + +]
Author: Zhao Dongdong <[email protected]>
Date:   Wed May 27 20:09:09 2026 +0800

    ALSA: es1938: check snd_ctl_new1() return value
    
    commit 1edd1f02dddd20aeb6066ded41017615766ea42f upstream.
    
    snd_ctl_new1() can return NULL when memory allocation fails.
    snd_es1938_mixer() does not check the return value before dereferencing
    the pointer, which can lead to a NULL pointer dereference.
    
    Add a NULL check after snd_ctl_new1() and return -ENOMEM if it fails.
    
    Assisted-by: Opencode:DeepSeek-V4-Flash
    Cc: [email protected]
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Zhao Dongdong <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: firewire: isight: bound the sample count to the packet payload [+ + +]
Author: Maoyi Xie <[email protected]>
Date:   Sun Jun 21 23:09:07 2026 +0800

    ALSA: firewire: isight: bound the sample count to the packet payload
    
    commit 29b9667982e4df2ed7744f86b1144f8bb58eb698 upstream.
    
    isight_packet() takes the frame count from the device iso packet and
    checks it only against the device claimed iso length.
    
            count = be32_to_cpu(payload->sample_count);
            if (likely(count <= (length - 16) / 4))
                    isight_samples(isight, payload->samples, count);
    
    length is the iso header data_length. It can be up to 0xffff. So the
    gate allows a count up to about 16379. isight_samples() then copies
    count frames out of payload->samples into the PCM DMA buffer.
    
    payload->samples holds only 2 * MAX_FRAMES_PER_PACKET values. The
    device multiplexes two samples per frame. A count past
    MAX_FRAMES_PER_PACKET reads past the payload. A count past the buffer
    size writes past runtime->dma_area. The smallest PCM buffer is larger
    than MAX_FRAMES_PER_PACKET. Bounding the count to MAX_FRAMES_PER_PACKET
    keeps both the read and the write in range.
    
    A malicious or faulty Apple iSight on the FireWire bus reaches this
    during a normal capture.
    
    Add the MAX_FRAMES_PER_PACKET bound to the gate.
    
    Fixes: 3a691b28a0ca ("ALSA: add Apple iSight microphone driver")
    Suggested-by: Takashi Sakamoto <[email protected]>
    Cc: [email protected]
    Signed-off-by: Maoyi Xie <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: usb-audio: avoid kobject path lookup in DualSense match [+ + +]
Author: Darvell Long <[email protected]>
Date:   Wed Jun 24 07:37:23 2026 -0700

    ALSA: usb-audio: avoid kobject path lookup in DualSense match
    
    commit 7693c0cc415f3a16a7a3355f245474a5e661be4e upstream.
    
    The DualSense jack-detection input handler verifies that a matching input
    device belongs to the same physical controller by building kobject path
    strings for both the input device and the USB audio device, then comparing
    the path prefix.
    
    This was observed when a weak physical connection caused the controller
    to rapidly disconnect and reconnect. During that repeated hotplug,
    snd_dualsense_ih_match() can run while the controller's USB device is
    being disconnected. kobject_get_path() walks ancestor kobjects and
    dereferences their names; if the USB device kobject name is no longer
    valid, this can fault in strlen():
    
      RIP: 0010:strlen+0x10/0x30
      Call Trace:
       kobject_get_path+0x34/0x150
       snd_dualsense_ih_match+0x49/0xd0 [snd_usb_audio]
       input_register_device+0x566/0x6a0
       ps_probe+0xb89/0x1590 [hid_playstation]
    
    The same ownership check can be done without building kobject path
    strings. The input device is parented below the HID device, USB interface
    and USB device, so walking the input device parent chain and comparing
    against the mixer USB device preserves the check without dereferencing
    kobject names during disconnect.
    
    Fixes: 79d561c4ec04 ("ALSA: usb-audio: Add mixer quirk for Sony DualSense PS5")
    Cc: <[email protected]>
    Assisted-by: Cute:gpt-5.5
    Signed-off-by: Darvell Long <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: usb-audio: Propagate errors in scarlett_ctl_enum_put() [+ + +]
Author: Cássio Gabriel <[email protected]>
Date:   Sun Apr 19 17:30:30 2026 -0300

    ALSA: usb-audio: Propagate errors in scarlett_ctl_enum_put()
    
    commit 0f25cf1f02e3dba626791d949c759a48c0a44996 upstream.
    
    scarlett_ctl_enum_put() ignores the return value from
    snd_usb_set_cur_mix_value() and reports success whenever the
    requested enum value differs from the current one.
    
    If the SET_CUR request fails, the callback still returns success even
    though neither the hardware state nor the cached mixer value changed.
    
    Fixes: 76b188c4b370 ("ALSA: usb-audio: Scarlett mixer interface for 6i6, 18i6, 18i8 and 18i20")
    Cc: [email protected]
    Signed-off-by: Cássio Gabriel <[email protected]>
    Signed-off-by: Takashi Iwai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: usb-audio: Propagate US-16x08 write errors in route/mix EQ-switch put callbacks [+ + +]
Author: Cássio Gabriel <[email protected]>
Date:   Sun Apr 19 17:30:31 2026 -0300

    ALSA: usb-audio: Propagate US-16x08 write errors in route/mix EQ-switch put callbacks
    
    commit 3c06aec8abda6ba068b58a8b7119cdb2a48456b1 upstream.
    
    Several US-16x08 mixer put callbacks log failed control URBs but
    still return success to userspace. That hides device write failures
    even though the requested value was not applied.
    
    Return the negative write error instead in the route, master, bus,
    channel, and EQ switch put callbacks.
    
    Fixes: d2bb390a2081 ("ALSA: usb-audio: Tascam US-16x08 DSP mixer quirk")
    Cc: [email protected]
    Signed-off-by: Cássio Gabriel <[email protected]>
    Signed-off-by: Takashi Iwai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: usb-audio: Roll back quirk control caches on write errors [+ + +]
Author: Cássio Gabriel <[email protected]>
Date:   Wed Apr 29 10:20:01 2026 -0300

    ALSA: usb-audio: Roll back quirk control caches on write errors
    
    commit 6380957fa24251856a532e48a46a4dc3d1ae26b6 upstream.
    
    Several mixer quirk callbacks cache the requested
    control value in kcontrol->private_value before
    issuing a single vendor or class write.
    
    Their paired get and resume paths consume that cache
    directly, so a failed write currently leaves software
    state changed even though the update did not succeed.
    That can make later reads report a value the device
    never accepted and can replay the stale cache on resume.
    
    Restore the previous cached value on failure in
    the Audigy2NX LED, Emu0204 channel switch,
    Xonar U1 output switch, Native Instruments controls,
    FTU effect program switch, and Sound Blaster E1 input source switch.
    
    Fixes: 9cf3689bfe07 ("ALSA: usb-audio: Add audigy2nx resume support")
    Fixes: 5f503ee9e270 ("ALSA: usb-audio: Add Emu0204 channel switch resume support")
    Fixes: 2bfb14c3b8fb ("ALSA: usb-audio: Add Xonar U1 resume support")
    Fixes: da6d276957ea ("ALSA: usb-audio: Add resume support for Native Instruments controls")
    Fixes: 0b4e9cfcef05 ("ALSA: usb-audio: Add resume support for FTU controls")
    Fixes: 388fdb8f882a ("ALSA: usb-audio: Support changing input on Sound Blaster E1")
    Cc: [email protected]
    Signed-off-by: Cássio Gabriel <[email protected]>
    Link: https://patch.msgid.link/20260429-alsa-usb-quirks-cache-rollback-v1-1-01b35c688b80@gmail.com
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: usb-audio: Update Babyface Pro control caches only after successful writes [+ + +]
Author: Cássio Gabriel <[email protected]>
Date:   Wed Apr 29 10:20:02 2026 -0300

    ALSA: usb-audio: Update Babyface Pro control caches only after successful writes
    
    commit d8f802ccf1fdbeb89d62748d6a0d0fbd442c8127 upstream.
    
    snd_bbfpro_ctl_put() and snd_bbfpro_vol_put()
    cache the requested packed control state in
    kcontrol->private_value before issuing the USB write.
    
    Their get and resume paths use that cached value directly,
    so a failed write can leave the driver reporting and later
    replaying a setting the hardware never accepted.
    
    Update the cached state only after a successful USB write.
    
    Fixes: 3e8f3bd04716 ("ALSA: usb-audio: RME Babyface Pro mixer patch")
    Cc: [email protected]
    Signed-off-by: Cássio Gabriel <[email protected]>
    Link: https://patch.msgid.link/20260429-alsa-usb-quirks-cache-rollback-v1-2-01b35c688b80@gmail.com
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: usb-audio: Update US-16x08 EQ/comp shadow state after successful writes [+ + +]
Author: Cássio Gabriel <[email protected]>
Date:   Sun Apr 19 17:30:32 2026 -0300

    ALSA: usb-audio: Update US-16x08 EQ/comp shadow state after successful writes
    
    commit a440c17869ecd71da0f295b62868fc742d09a8ba upstream.
    
    snd_us16x08_comp_put() and snd_us16x08_eq_put() update their
    software stores before sending the USB write. If the transfer
    fails, later get callbacks report a value the hardware never
    accepted.
    
    Build the outgoing message from the current store plus the
    pending value, then commit the store only after a successful
    write.
    
    Fixes: d2bb390a2081 ("ALSA: usb-audio: Tascam US-16x08 DSP mixer quirk")
    Cc: [email protected]
    Signed-off-by: Cássio Gabriel <[email protected]>
    Signed-off-by: Takashi Iwai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
apparmor: aa_getprocattr free procattr leak on format failure [+ + +]
Author: Zygmunt Krynicki <[email protected]>
Date:   Sat May 2 13:37:14 2026 +0200

    apparmor: aa_getprocattr free procattr leak on format failure
    
    [ Upstream commit fea23bf73f0cae8ccb1d0684e4a3003874771f41 ]
    
    aa_getprocattr() allocates the output string before rendering the label
    into it. If the second aa_label_snxprint() call fails, the function
    returned without freeing that allocation.
    
    Free and clear the output pointer on the uncommon formatting failure path
    before dropping the namespace reference.
    
    Fixes: 76a1d263aba3 ("apparmor: switch getprocattr to using label_print fns()")
    Reviewed-by: Tyler Hicks <[email protected]>
    Reviewed-by: Ryan Lee <[email protected]>
    Signed-off-by: Zygmunt Krynicki <[email protected]>
    Signed-off-by: John Johansen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

apparmor: aa_label_alloc use aa_label_free on alloc failure [+ + +]
Author: Zygmunt Krynicki <[email protected]>
Date:   Sat May 2 13:21:33 2026 +0200

    apparmor: aa_label_alloc use aa_label_free on alloc failure
    
    [ Upstream commit 654fe7505dc6889724d4094fa64f89991afabfc3 ]
    
    aa_label_alloc() allocates a secid before allocating or taking the label
    proxy. If the later proxy step fails, the error path only freed the label
    memory, leaking any resources initialized by aa_label_init().
    
    Use aa_label_free() on the failure path so partially initialized labels
    release their secid and other label resources before the backing memory is
    freed.
    
    Fixes: f1bd904175e81 ("apparmor: add the base fns() for domain labels")
    Signed-off-by: Zygmunt Krynicki <[email protected]>
    Signed-off-by: John Johansen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

apparmor: check label build before no_new_privs test [+ + +]
Author: Ruoyu Wang <[email protected]>
Date:   Mon Jun 8 14:36:31 2026 +0800

    apparmor: check label build before no_new_privs test
    
    [ Upstream commit a58cafd38b46fb1a2220e2fbbcfe291ea75fa147 ]
    
    aa_change_profile() builds a replacement label with
    fn_label_build_in_scope() before the no_new_privs subset check. The build
    helper can fail and return NULL or an ERR_PTR, but the result was passed
    to aa_label_is_unconfined_subset() before the existing IS_ERR_OR_NULL()
    check.
    
    Reuse the existing target-label build failure handling immediately after
    the build. This preserves the current audit handling while preventing the
    subset helper from dereferencing an invalid label.
    
    Fixes: e00b02bb6ac2a ("apparmor: move change_profile mediation to using labels")
    Signed-off-by: Ruoyu Wang <[email protected]>
    Signed-off-by: John Johansen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

apparmor: fix label can not be immediately before a declaration [+ + +]
Author: John Johansen <[email protected]>
Date:   Sun Jun 14 16:16:59 2026 -0700

    apparmor: fix label can not be immediately before a declaration
    
    [ Upstream commit 1ed40bd525c00d22af666016af9aef7167f8085f ]
    
    Fix error reported by kernel test robot
    
    security/apparmor/policy.c:1381:2: error: a label can only be part of
    a statement and a declaration is not a statement
    
    All errors (new ones prefixed by >>):
    
       security/apparmor/policy.c: In function 'aa_replace_profiles':
    >> security/apparmor/policy.c:1381:2: error: a label can only be part
       of a statement and a declaration is not a statement
         ssize_t udata_sz = udata->size;
         ^~~~~
    
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Fixes: 7b42f95813dc9 ("apparmor: fix potential UAF in aa_replace_profiles")
    Signed-off-by: John Johansen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

apparmor: fix potential UAF in aa_replace_profiles [+ + +]
Author: Maxime Bélair <[email protected]>
Date:   Wed Feb 18 10:27:34 2026 +0100

    apparmor: fix potential UAF in aa_replace_profiles
    
    [ Upstream commit 7b42f95813dc9ceb6bda35afcf914630909a19f9 ]
    
    The function aa_replace_profiles was accessing udata->size after calling
    aa_put_loaddata(udata), causing a potential UAF.
    
    Fixed this by saving the size to a local variable before dropping the
    reference.
    
    Fixes: 5ac8c355ae001 ("apparmor: allow introspecting the loaded policy pre internal transform")
    Reviewed-by: Georgia Garcia <[email protected]>
    Signed-off-by: Maxime Bélair <[email protected]>
    Signed-off-by: John Johansen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

apparmor: fix use-after-free in rawdata dedup loop [+ + +]
Author: Ruslan Valiyev <[email protected]>
Date:   Thu Jul 2 11:26:28 2026 -0400

    apparmor: fix use-after-free in rawdata dedup loop
    
    [ Upstream commit 6f060496d03e4dc560a40f73770bd08335cb7a27 ]
    
    aa_replace_profiles() walks ns->rawdata_list to dedup the incoming
    policy blob against entries already attached to existing profiles.
    Per the kernel-doc on struct aa_loaddata, list membership does not
    hold a reference: profiles hold pcount, and when the last pcount
    drops, do_ploaddata_rmfs() is queued on a workqueue that takes
    ns->lock and removes the entry. Between dropping the last pcount
    and the workqueue running, an entry remains on the list with
    pcount == 0.
    
    aa_get_profile_loaddata() is an unconditional kref_get() on
    pcount, so when the dedup loop hits such an entry, refcount
    hardening reports
    
      refcount_t: addition on 0; use-after-free.
    
    inside aa_replace_profiles(), and the poisoned counter then
    trips "saturated" and "underflow" warnings on the subsequent
    uses of the same loaddata.
    
    Before commit a0b7091c4de4 ("apparmor: fix race on rawdata
    dereference") the dedup path used a get_unless_zero-style helper
    on a single counter, so the existing "if (tmp)" guard was
    meaningful. The split-refcount refactor introduced
    aa_get_profile_loaddata(), which has plain kref_get() semantics,
    and the guard quietly became a no-op.
    
    Introduce aa_get_profile_loaddata_not0(), matching the existing
    _not0 convention used by aa_get_profile_not0(), and use it for
    the rawdata_list dedup lookup so dying entries are skipped.
    
    Reproduced on x86_64 with v7.1-rc5 in QEMU+KVM running Ubuntu
    24.04 + stress-ng 0.17.06:
    
      stress-ng --apparmor 1 --klog-check --timeout 60s
    
    Without this patch the three refcount_t warnings fire within a
    few seconds. With it the same 60 s run is clean. Coverage is a
    smoke-test only; a longer soak with CONFIG_KASAN, CONFIG_KCSAN
    and CONFIG_PROVE_LOCKING would be welcome from anyone with the
    cycles.
    
    Fixes: a0b7091c4de4 ("apparmor: fix race on rawdata dereference")
    Reported-by: Colin Ian King <[email protected]>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=221513
    Cc: [email protected]
    Signed-off-by: Ruslan Valiyev <[email protected]>
    Signed-off-by: John Johansen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

apparmor: grab ns lock and refresh when looking up changehat child profiles [+ + +]
Author: Ryan Lee <[email protected]>
Date:   Fri Feb 13 11:29:38 2026 -0800

    apparmor: grab ns lock and refresh when looking up changehat child profiles
    
    [ Upstream commit 32e92764d6f8d251c1bca62be33793287b453a81 ]
    
    There was a race condition involving change_hat and profile replacement in
    which replacement of the parent profile during a changehat operation could
    result in the list of children becoming empty and the changehat operation
    failing. To prevent this:
     - grab the namespace lock until we've built the hat transition, and
     - use aa_get_newest_profile to avoid using stale profile objects.
    
    Link: https://bugs.launchpad.net/bugs/2139664
    Fixes: 89dbf1962aa63 ("apparmor: move change_hat mediation to using labels")
    Reviewed-by: Georgia Garcia <[email protected]>
    Signed-off-by: Ryan Lee <[email protected]>
    Signed-off-by: John Johansen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

apparmor: mediate the implicit connect of TCP fast open sendmsg [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Thu Jul 2 21:29:42 2026 -0400

    apparmor: mediate the implicit connect of TCP fast open sendmsg
    
    [ Upstream commit 4d587cd8a72155089a627130bbd4716ec0856e21 ]
    
    sendmsg()/sendto() with MSG_FASTOPEN is a combination of connect(2) and
    write(2): it opens the connection in the SYN. apparmor_socket_sendmsg()
    only checks AA_MAY_SEND, so a profile that grants send but denies connect
    lets a confined task open an outbound TCP/MPTCP connection that connect(2)
    would have refused, bypassing connect mediation.
    
    Mediate the implicit connect when MSG_FASTOPEN is set and a destination
    is supplied. Add it to apparmor_socket_sendmsg() (not the shared
    aa_sock_msg_perm() helper, which recvmsg also uses) and call aa_sk_perm()
    directly, mirroring the selinux and tomoyo fixes. sk_is_tcp() does not
    cover MPTCP fast open, so the SOCK_STREAM/IPPROTO_MPTCP arm is explicit.
    
    Fixes: cf60af03ca4e ("net-tcp: Fast Open client - sendmsg(MSG_FASTOPEN)")
    Cc: [email protected]
    Signed-off-by: Bryam Vargas <[email protected]>
    Signed-off-by: John Johansen <[email protected]>
    [ inlined absent sk_is_tcp()/sk_is_inet() helpers into the equivalent family/type/protocol checks ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

apparmor: put secmark label after secid lookup [+ + +]
Author: Zygmunt Krynicki <[email protected]>
Date:   Tue May 5 05:40:53 2026 +0200

    apparmor: put secmark label after secid lookup
    
    [ Upstream commit 340372688bb87da45ff8d4e2f82ccfd1b64c65ff ]
    
    apparmor_secmark_init() parses a configured secmark label to obtain its
    secid.  aa_label_strn_parse() returns a refcounted label, but the success
    path kept that reference after copying the secid.
    
    Fixes: ab9f2115081a ("apparmor: Allow filtering based on secmark policy")
    Signed-off-by: Zygmunt Krynicki <[email protected]>
    Signed-off-by: John Johansen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
arm64/hw_breakpoint: reject unaligned watchpoints that would truncate BAS [+ + +]
Author: Breno Leitao <[email protected]>
Date:   Tue Jun 9 06:15:53 2026 -0700

    arm64/hw_breakpoint: reject unaligned watchpoints that would truncate BAS
    
    [ Upstream commit 4cc70f75853bebac022334b6a86b953348072f74 ]
    
    hw_breakpoint_arch_parse() positions the BAS bit pattern in
    hw->ctrl.len with
    
            offset = hw->address & alignment_mask;  /* 0..7 */
            hw->ctrl.len <<= offset;
    
    ctrl.len is an 8-bit bitfield (struct arch_hw_breakpoint_ctrl::len is
    u32 :8), so the shift silently drops any bits past bit 7.  For
    non-compat AArch64 watchpoints the offset is unbounded relative to
    ctrl.len: a perf_event_open(PERF_TYPE_BREAKPOINT) caller asking for
    HW_BREAKPOINT_W with bp_addr=page+1 and bp_len=HW_BREAKPOINT_LEN_8
    ends up with 0xff << 1 = 0x1fe, stored as 0xfe.  The kernel programs
    WCR.BAS=0xfe and the hardware watches bytes [1..7] instead of the
    requested [1..8] -- the eighth byte is silently dropped.  The
    syscall still returns success, leaving userspace to discover the
    gap by empirical probing.
    
    The same class affects HW_BREAKPOINT_LEN_{2,4} when offset pushes the
    high BAS bit past bit 7 (e.g. LEN_4 with offset=5 yields 0xe0
    instead of 0x1e0).  No memory-safety impact -- the value is masked
    into 8 bits before encoding -- but debuggers and perf users observe
    missed events on bytes they thought they were watching.
    
    The AArch32 branch immediately above already rejects unrepresentable
    (offset, len) combinations via an explicit switch.  Mirror that for
    the non-compat branch by checking that the shifted pattern fits in
    the BAS field, returning -EINVAL when it does not.
    
    GDB and similar debuggers are unaffected by the stricter check.
    aarch64_linux_set_debug_regs() already treats EINVAL on
    NT_ARM_HW_WATCH as a downgrade signal: it clears
    kernel_supports_any_contiguous_range, calls aarch64_downgrade_regs()
    to round the BAS up to a legacy 0x01/03/0f/ff mask with an aligned
    base, and retries -- the same fallback path that PR-20207 introduced.
    The new -EINVAL is therefore reachable only from a raw
    perf_event_open() that pairs an unaligned base with an oversized
    bp_len, which is precisely the bug.
    
    Reproducer:
    
      struct perf_event_attr a = {
          .type = PERF_TYPE_BREAKPOINT, .size = sizeof(a),
          .bp_type = HW_BREAKPOINT_W,
          .bp_addr = (uintptr_t)(buf + 1),
          .bp_len = HW_BREAKPOINT_LEN_8,
          .exclude_kernel = 1, .exclude_hv = 1,
      };
      int fd = perf_event_open(&a, 0, -1, -1, 0);
      /* before this fix: succeeds, watches 7 bytes (buf+1..buf+7)   */
      /* after  this fix: fails with EINVAL                          */
    
    Fixes: b08fb180bb88 ("arm64: Allow hw watchpoint at varied offset from base address")
    Signed-off-by: Breno Leitao <[email protected]>
    Signed-off-by: Will Deacon <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
arm64: dts: qcom: sdm630: describe adsp_mem region properly [+ + +]
Author: Nickolay Goppen <[email protected]>
Date:   Wed Apr 29 12:30:11 2026 +0300

    arm64: dts: qcom: sdm630: describe adsp_mem region properly
    
    commit ce414263e9ebe5080381a50cbdf9065c29816202 upstream.
    
    Downstream [1] this region is marked as shared, reusable and dynamic so
    describe it that way.
    
    [1]: https://github.com/xiaomi-sdm660/android_kernel_xiaomi_sdm660/blob/11-EAS/arch/arm/boot/dts/qcom/sdm660.dtsi#L448
    
    Fixes: b190fb010664 ("arm64: dts: qcom: sdm630: Add sdm630 dts file")
    Cc: [email protected]
    Reviewed-by: Ekansh Gupta <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Signed-off-by: Nickolay Goppen <[email protected]>
    Link: https://lore.kernel.org/r/20260429-qcom-sdm660-cdsp-adsp-fastrpc-dts-fix-v5-4-16bc82e622ad@mainlining.org
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ARM: dts: am335x-sl50: Fix audio bitclock and frame master endpoint [+ + +]
Author: Jihed Chaibi <[email protected]>
Date:   Wed Mar 25 23:34:11 2026 +0100

    ARM: dts: am335x-sl50: Fix audio bitclock and frame master endpoint
    
    [ Upstream commit 2bc564f46b00dc4f4331fc337277ff3f5fac8a4e ]
    
    The cpu_endpoint in mcasp0 specifies the TLV320AIC3106 codec as the
    bitclock and frame master, but the phandles point to the codec's port
    node (codec_port) rather than its endpoint node (codec_endpoint).
    
    audio-graph-card calls simple_util_parse_daifmt() with ep_codec set to
    the endpoint node (codec_endpoint). The function resolves the
    bitclock-master phandle and checks whether it equals ep_codec. Since
    codec_port is the parent of codec_endpoint, not the endpoint itself, the
    comparison always evaluates to false. This causes the mcasp0 CPU side to
    be silently configured as bitclock and frame master instead of the codec,
    which is the opposite of the intended configuration.
    
    Fix by pointing bitclock-master and frame-master to codec_endpoint.
    
    Fixes: e5f89dbdebc5 ("ARM: dts: am335x-sl50: use audio-graph-card for sound")
    Signed-off-by: Jihed Chaibi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Kevin Hilman (TI) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ARM: imx31: Fix IIM mapping leak in revision check [+ + +]
Author: Yuho Choi <[email protected]>
Date:   Mon May 25 00:01:58 2026 -0400

    ARM: imx31: Fix IIM mapping leak in revision check
    
    [ Upstream commit ccb4b54b8ecf1ebafef96d538cd6c5c8455bb390 ]
    
    mx31_read_cpu_rev() maps the IIM registers with of_iomap() to read the
    silicon revision, but returns without unmapping the MMIO mapping.
    
    Keep the normalized revision value in a local variable and route the
    return path through iounmap() after the revision register has been read.
    
    Fixes: 3172225d45bd ("ARM: imx31: Retrieve the IIM base address from devicetree")
    Signed-off-by: Yuho Choi <[email protected]>
    Signed-off-by: Frank Li <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ARM: imx3: Fix CCM node reference leak [+ + +]
Author: Yuho Choi <[email protected]>
Date:   Wed May 13 23:40:04 2026 -0400

    ARM: imx3: Fix CCM node reference leak
    
    [ Upstream commit 36d46348eb5fc4bc505cd2290ddd70c25fbe6bb3 ]
    
    of_find_compatible_node() returns a referenced device node. The i.MX31
    and i.MX35 early init paths use the node to map the CCM registers with
    of_iomap(), but never drop the node reference.
    
    Release the node after the mapping is created.
    
    Fixes: 2cf98d12958c ("ARM: imx3: Retrieve the CCM base address from devicetree")
    Signed-off-by: Yuho Choi <[email protected]>
    Signed-off-by: Frank Li <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ASoC: fsl: fsl_audmix: Validate written enum values [+ + +]
Author: HyeongJun An <[email protected]>
Date:   Tue Jun 9 21:43:15 2026 +0900

    ASoC: fsl: fsl_audmix: Validate written enum values
    
    [ Upstream commit 3cd17e4e2871114d5579fa7bc8da66faf7fc1930 ]
    
    fsl_audmix_put_mix_clk_src() and fsl_audmix_put_out_src()
    convert the user-provided enum item with snd_soc_enum_item_to_val()
    before checking whether the item is within the enum's item count.
    
    The generic snd_soc_put_enum_double() helper performs that
    validation, but these callbacks use the converted value first: the
    clock-source path tests it with BIT(), and the output-source path
    indexes the prms transition table with it.
    
    Reject out-of-range enum items before converting them.
    
    Fixes: be1df61cf06e ("ASoC: fsl: Add Audio Mixer CPU DAI driver")
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: HyeongJun An <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: tegra: tegra210_ahub: Validate written enum value [+ + +]
Author: HyeongJun An <[email protected]>
Date:   Tue Jun 9 21:43:16 2026 +0900

    ASoC: tegra: tegra210_ahub: Validate written enum value
    
    [ Upstream commit 1d8aabb413b5638670dfd1162169edc0ba276a2e ]
    
    tegra_ahub_put_value_enum() reads e->values[item[0]] before
    checking whether item[0] is within the enum item range. The existing
    check therefore happens too late to prevent an out-of-range read of the
    values array.
    
    Move the check before the array access.
    
    Fixes: 16e1bcc2caf4 ("ASoC: tegra: Add Tegra210 based AHUB driver")
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: HyeongJun An <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ata: pata_pxa: Fix DMA channel leak on probe error [+ + +]
Author: Wentao Liang <[email protected]>
Date:   Thu Jun 25 22:18:37 2026 +0800

    ata: pata_pxa: Fix DMA channel leak on probe error
    
    commit fcaf242e7fc406e78f444a35441e3b58f5e28781 upstream.
    
    When dmaengine_slave_config() fails, the DMA channel acquired by
    dma_request_chan() is not released before returning the error,
    leaking the channel reference.
    
    Fix by adding dma_release_channel() in the error path.
    
    The ata_host_activate() error path already correctly releases the
    DMA channel.
    
    Cc: [email protected]
    Fixes: 88622d80af82 ("ata: pata_pxa: dmaengine conversion")
    Signed-off-by: Wentao Liang <[email protected]>
    Reviewed-by: Niklas Cassel <[email protected]>
    Signed-off-by: Damien Le Moal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ata: sata_gemini: unwind clocks on IDE pinctrl errors [+ + +]
Author: Myeonghun Pak <[email protected]>
Date:   Fri Jun 26 17:58:37 2026 +0900

    ata: sata_gemini: unwind clocks on IDE pinctrl errors
    
    [ Upstream commit c0ace4130e813acbabdfaa28d4e94a849c2ffdd7 ]
    
    gemini_sata_bridge_init() prepares and enables both SATA PCLKs, then
    disables them again while keeping the clocks prepared for later bridge
    start and stop operations. If gemini_setup_ide_pins() fails after that,
    gemini_sata_probe() returns directly and skips the existing
    out_unprep_clk unwind path.
    
    Route the IDE pinctrl failure through out_unprep_clk so the clocks
    prepared by gemini_sata_bridge_init() are unprepared before probe
    fails.
    
    Fixes: d872ced29d5f ("ata: sata_gemini: Introduce explicit IDE pin control")
    Co-developed-by: Ijae Kim <[email protected]>
    Signed-off-by: Ijae Kim <[email protected]>
    Signed-off-by: Myeonghun Pak <[email protected]>
    Reviewed-by: Niklas Cassel <[email protected]>
    Reviewed-by: Linus Walleij <[email protected]>
    Signed-off-by: Damien Le Moal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
audit: add audit_log_nf_skb helper function [+ + +]
Author: Ricardo Robaina <[email protected]>
Date:   Tue Jul 21 07:56:41 2026 -0400

    audit: add audit_log_nf_skb helper function
    
    [ Upstream commit f19590b07cb620be1fcd5474c49515e21a05d406 ]
    
    Netfilter code (net/netfilter/nft_log.c and net/netfilter/xt_AUDIT.c)
    have to be kept in sync. Both source files had duplicated versions of
    audit_ip4() and audit_ip6() functions, which can result in lack of
    consistency and/or duplicated work.
    
    This patch adds a helper function in audit.c that can be called by
    netfilter code commonly, aiming to improve maintainability and
    consistency.
    
    Suggested-by: Florian Westphal <[email protected]>
    Suggested-by: Paul Moore <[email protected]>
    Signed-off-by: Ricardo Robaina <[email protected]>
    Acked-by: Florian Westphal <[email protected]>
    Signed-off-by: Paul Moore <[email protected]>
    Stable-dep-of: 65dfde57d1e2 ("audit: fix potential integer overflow in audit_log_n_hex()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

audit: Fix data races of skb_queue_len() readers on audit_queue [+ + +]
Author: Chi Wang <[email protected]>
Date:   Fri Jun 19 15:42:44 2026 +0800

    audit: Fix data races of skb_queue_len() readers on audit_queue
    
    commit c9a71daaecb2fb1d8c704545cc0b1c920b9bf5d7 upstream.
    
    Multiple readers access audit_queue.qlen via skb_queue_len() without
    holding the queue lock or using READ_ONCE(), while kauditd writes to
    this field via the skb_dequeue() → __skb_unlink() path with WRITE_ONCE()
    protected by a spinlock. This constitutes data races.
    
    All affected skb_queue_len(&audit_queue) call sites:
      - kauditd_thread() wait_event_freezable() condition
      - audit_receive_msg() AUDIT_GET handler (s.backlog assignment)
      - audit_receive() backlog check
      - audit_log_start() backlog check and pr_warn()
    
    KCSAN reports the following conflicting access pattern (one example):
    ==================================================================
    BUG: KCSAN: data-race in audit_log_start / skb_dequeue
    
    write (marked) to 0xffffffff8512ee20 of 4 bytes by task 661 on cpu 57:
     skb_dequeue+0x70/0xf0
     kauditd_send_queue+0x71/0x220
     kauditd_thread+0x1cb/0x430
     kthread+0x1c2/0x210
     ret_from_fork+0x162/0x1a0
     ret_from_fork_asm+0x1a/0x30
    
    read to 0xffffffff8512ee20 of 4 bytes by task 36586 on cpu 1:
     audit_log_start+0x2a0/0x6b0
     audit_core_dumps+0x64/0xa0
     do_coredump+0x14b/0x1260
     get_signal+0xeb2/0xf70
     arch_do_signal_or_restart+0x41/0x170
     exit_to_user_mode_loop+0xa2/0x1c0
     do_syscall_64+0x1a3/0x1c0
     entry_SYSCALL_64_after_hwframe+0x76/0xe0
    
    value changed: 0x00000001 -> 0x00000000
    ==================================================================
    
    Resolve the race by switching to lockless helper skb_queue_len_lockless(),
    which internally uses READ_ONCE() and properly pairs with the WRITE_ONCE()
    write accesses already present on the writer side.
    
    Cc: [email protected]
    Fixes: 3197542482df ("audit: rework audit_log_start()")
    Signed-off-by: Chi Wang <[email protected]>
    Reviewed-by: Ricardo Robaina <[email protected]>
    [PM: line length tweak]
    Signed-off-by: Paul Moore <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

audit: fix potential integer overflow in audit_log_n_hex() [+ + +]
Author: Ricardo Robaina <[email protected]>
Date:   Tue Jul 21 07:56:42 2026 -0400

    audit: fix potential integer overflow in audit_log_n_hex()
    
    [ Upstream commit 65dfde57d1e29ce2b76fc23dd565eccd5c0bc0f0 ]
    
    The function calculates new_len as len << 1 for hex encoding. This
    has two overflow risks: the shift itself can overflow when len is
    large, and the result can be truncated when assigned to new_len
    (declared as int) from the size_t calculation.
    
    Fix by using check_shl_overflow() to catch shift overflow and
    changing new_len and loop counter i to size_t to prevent truncation.
    
    Cc: [email protected]
    Fixes: 168b7173959f ("AUDIT: Clean up logging of untrusted strings")
    Reviewed-by: Richard Guy Briggs <[email protected]>
    Signed-off-by: Ricardo Robaina <[email protected]>
    [PM: remove vertical whitspace noise]
    Signed-off-by: Paul Moore <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
batman-adv: access unicast_ttvn skb->data only after skb realloc [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Sun Jun 28 08:35:35 2026 +0200

    batman-adv: access unicast_ttvn skb->data only after skb realloc
    
    commit 7141990add3f75436f2933cb310654cad3b1e3e9 upstream.
    
    The pskb_may_pull() called by batadv_get_vid() could reallocate the buffer
    behind the skb. Variables which were pointing to the old buffer need to be
    reassigned to avoid an use-after-free.
    
    This was done correctly for the ethernet header but missed for the
    unicast_packet pointer.
    
    Cc: [email protected]
    Reported-by: Sashiko <[email protected]>
    Fixes: c018ad3de61a ("batman-adv: add the VLAN ID attribute to the TT entry")
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: bla: reacquire gw address after skb realloc [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Sun Jun 28 08:45:41 2026 +0200

    batman-adv: bla: reacquire gw address after skb realloc
    
    commit cdf3b5af2bc4431e58629e8ad2086b1e9185c761 upstream.
    
    The pskb_may_pull() called by batadv_bla_is_backbone_gw() could reallocate
    the buffer behind the skb. Variables which were pointing to the old buffer
    need to be reassigned to avoid an use-after-free.
    
    Cc: [email protected]
    Fixes: 9e794b6bf4a2 ("batman-adv: drop unicast packets from other backbone gw")
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: clean untagged VLAN on netdev registration failure [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Sat Jul 4 09:46:09 2026 +0200

    batman-adv: clean untagged VLAN on netdev registration failure
    
    commit 8669a550c752d86baebc5fdc83b8ff35c4372c0e upstream.
    
    When an mesh interface is registered, it creates an untagged struct
    batadv_meshif_vlan on top of it via the NETDEV_REGISTER notifier. But in
    this process, another receiver of this notification can veto the
    registration. The netdev registration will be aborted because of this veto.
    
    The register_netdevice() call will try to clean up the net_device using
    unregister_netdevice_queue() - which only uses the .priv_destructor to
    free private resources. In this situation, .dellink will not be called.
    
    The cleanup of the untagged batadv_meshif_vlan must thefore be done in the
    destructor to avoid a leak of this object.
    
    Cc: [email protected]
    Fixes: 5d2c05b21337 ("batman-adv: add per VLAN interface attribute framework")
    Signed-off-by: Sven Eckelmann <[email protected]>
    [ switch to old "mesh_iface" name "soft_iface", Context, keep early
      batadv_softif_destroy_netlink() cleanup in case sysfs support is active,
      only run destructor VLAN code on non-softif_destroy context ]
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: dat: acquire ARP hw source only after skb realloc [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Sun Jun 28 08:45:41 2026 +0200

    batman-adv: dat: acquire ARP hw source only after skb realloc
    
    commit 48067b2ae4504500a7093d9e1e16b42e70330480 upstream.
    
    The pskb_may_pull() called by batadv_get_vid() could reallocate the buffer
    behind the skb. Variables which were pointing to the old buffer need to be
    reassigned to avoid an use-after-free.
    
    Cc: [email protected]
    Fixes: b61ec31c8575 ("batman-adv: Snoop DHCPACKs for DAT")
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: dat: ensure accessible eth_hdr proto field [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Sun Jun 28 10:37:07 2026 +0200

    batman-adv: dat: ensure accessible eth_hdr proto field
    
    commit 26560c4a03dc4d607331600c187f59ab2df5f341 upstream.
    
    When batadv_get_vid() accesses the proto field of the ethernet header, it
    is not checking if the data itself is accessible. The caller is responsible
    for it. But in contrast to other call sites, batadv_dat_get_vid() and its
    caller didn't make sure this is true. This could have caused an
    out-of-bounds access.
    
    Cc: [email protected]
    Reported-by: Sashiko <[email protected]>
    Fixes: be1db4f6615b ("batman-adv: make the Distributed ARP Table vlan aware")
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: dat: fix tie-break for candidate selection [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Thu Jul 2 19:32:40 2026 +0200

    batman-adv: dat: fix tie-break for candidate selection
    
    commit 98052bdaf6ac1639a63ffc10244eeeab1f62ed2b upstream.
    
    The original version of the candidate selection for DAT attempted to
    compare both candidate and max_orig_node to identify which has the smaller
    MAC address. This comparison is required as tie-break when a hash collision
    happened.
    
    But the used function returned 0 when the function was not equal and a
    non-zero value when it was equal. As result, the actually selected
    node was dependent on the order of entries in the orig_hash and not
    actually on the mac addresses. The last originator in the hash collision
    would always win.
    
    To have a proper ordering, it must diff the actual MAC address bytes and
    reject the candidate when the diff is not smaller than 0.
    
    Cc: [email protected]
    Fixes: 785ea1144182 ("batman-adv: Distributed ARP Table - create DHT helper functions")
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: ensure minimal ethernet header on TX [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Mon Jul 20 15:32:05 2026 +0200

    batman-adv: ensure minimal ethernet header on TX
    
    commit 49df66b7993c80b80c7eb9a84ba5b3410c8296a0 upstream.
    
    As documented in commit 8bd67ebb50c0 ("net: bridge: xmit: make sure we have
    at least eth header len bytes"), it is possible by for a local user with
    eBPF TC hook access to attach a tc filter which truncates the packet and
    redirects to an batadv interface. But the code assumes that at least
    ETH_HLEN bytes are available and thus might read outside of the available
    buffer.
    
    The batadv_interface_tx() must therefore always check itself if enough data
    is available for the ethernet header and don't rely on min_header_len.
    
    Cc: [email protected]
    Fixes: c6c8fea29769 ("net: Add batman-adv meshing protocol")
    Reported-by: Sashiko <[email protected]>
    [ move from mesh- to soft-interface.c ]
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

batman-adv: fix VLAN priority offset [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Thu Jul 2 20:45:24 2026 +0200

    batman-adv: fix VLAN priority offset
    
    commit fdb3be00ba4dafa313e699d6b5b90d13f22f3f25 upstream.
    
    The batadv_skb_set_priority() receives an SKB with the inner ethernet
    header at position "offset". When it tries to extract the IPv4 and IPv6
    header, it needs to skip the ethernet header to get access to the IP
    header.
    
    But for VLAN header, it performs the access with the struct vlan_ethhdr.
    This struct contains both both the ethernet header and the VLAN header. It
    is therefore incorrect to skip over the whole vlan_ethhdr size to get
    access to the vlan_ethhdr.
    
    Cc: [email protected]
    Fixes: c54f38c9aa22 ("batman-adv: set skb priority according to content")
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: frag: fix primary_if leak on failed linearization [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Fri Jul 3 21:04:03 2026 +0200

    batman-adv: frag: fix primary_if leak on failed linearization
    
    commit 353d2c1d5492e53ae34f490a84494124dc3d3531 upstream.
    
    If the skb has a frag_list, it must be linearized before it can be split
    using skb_split(). But when this step failed, it must not only free the skb
    but also take care of the reference to the already found primary_if.
    
    Cc: [email protected]
    Reported-by: Sashiko <[email protected]>
    Fixes: a063f2fba3fa ("batman-adv: Don't skb_split skbuffs with frag_list")
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: frag: free unfragmentable packet [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Fri Jul 3 20:28:31 2026 +0200

    batman-adv: frag: free unfragmentable packet
    
    commit 6b628425aed49a1c7a4ffc997583840fc582d32b upstream.
    
    The caller of batadv_frag_send_packet() assume that the skb provided to the
    function are always consumed. But the pre-check for an empty payload or the
    zero fragment size returned an error without any further actions.
    
    A failed pre-check must use the same error handling code as the rest of the
    function.
    
    Cc: [email protected]
    Fixes: ee75ed88879a ("batman-adv: Fragment and send skbs larger than mtu")
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: gw: acquire ethernet header only after skb realloc [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Sun Jun 28 08:45:41 2026 +0200

    batman-adv: gw: acquire ethernet header only after skb realloc
    
    commit 77880a3be88d378d60cc1e8f8ec70430e2ed0518 upstream.
    
    The pskb_may_pull() called by batadv_get_vid() could reallocate the buffer
    behind the skb. Variables which were pointing to the old buffer need to be
    reassigned to avoid an use-after-free.
    
    Cc: [email protected]
    Fixes: 6c413b1c22a2 ("batman-adv: send every DHCP packet as bat-unicast")
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: retrieve ethhdr after potential skb realloc on RX [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Mon Jul 20 15:24:35 2026 +0200

    batman-adv: retrieve ethhdr after potential skb realloc on RX
    
    commit 035e1fed892d3d06002a73ff73668f618a514644 upstream.
    
    pskb_may_pull() in batadv_interface_rx() could reallocate the buffer behind
    the skb. Variables which were pointing to the old buffer need to be
    reassigned to avoid an use-after-free.
    
    This was done correctly for the VLAN header but missed for the ethernet
    header which is later used for the TT and AP isolation handling.
    
    Cc: [email protected]
    Reported-by: Sashiko <[email protected]>
    Fixes: c6c8fea29769 ("net: Add batman-adv meshing protocol")
    Fixes: c78296665c3d ("batman-adv: Check skb size before using encapsulated ETH+VLAN header")
    [ move from mesh- to soft-interface.c ]
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

batman-adv: tt: avoid request storms during pending request [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Thu Jul 2 21:06:23 2026 +0200

    batman-adv: tt: avoid request storms during pending request
    
    commit 27c7d40008231ae4140d35501b60087a9de2d2c3 upstream.
    
    batadv_send_tt_request() allocates a tt_req_node when none exists for the
    destination originator node. This should prevent that a multiple TT
    requests are send at the same time to an originator.
    
    But if allocation of the send buffer failed, this request must be cleaned
    up again. But indicator for such a failure is "ret == false". But the
    actual implementation is checking for "ret == true".
    
    The check must be inverted to not loose the information about the TT
    request directly after it was attempted to be sent out. This should avoid
    potential request storms.
    
    Cc: [email protected]
    Fixes: 335fbe0f5d25 ("batman-adv: tvlv - convert tt query packet to use tvlv unicast packets")
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: tt: prevent TVLV OOB check overflow [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Fri Jul 3 22:27:13 2026 +0200

    batman-adv: tt: prevent TVLV OOB check overflow
    
    commit 7a581d9aaba8c82bd6177fa36b2588eea77f6e2b upstream.
    
    A TT unicast TVLV contains the number of VLANs stored in it. This number is
    an u16 and gets multiplied by the size of the struct
    batadv_tvlv_tt_vlan_data (8 bytes). The size can therefore overflow the u16
    used to store the tt_vlan_len. All additional safety checks to prevent
    out-of-bounds access of the TVLV buffer are invalid due to this overflow.
    
    Using size_t prevents this overflow and ensures that the safety checks
    compare against the actual buffer requirements.
    
    Cc: [email protected]
    Fixes: 7ea7b4a14275 ("batman-adv: make the TT CRC logic VLAN specific")
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
binder: fix UAF in binder_free_transaction() [+ + +]
Author: Carlos Llamas <[email protected]>
Date:   Tue Jul 14 10:06:12 2026 -0400

    binder: fix UAF in binder_free_transaction()
    
    [ Upstream commit f223d27a546c1e1f48d38fd67760e78f068fe8c4 ]
    
    In binder_free_transaction(), the t->to_proc is read under the t->lock.
    However, once the t->lock is dropped, the to_proc can die in parallel.
    This leads to a use-after-free error when we attempt to acquire its
    inner lock right afterwards:
    
      ==================================================================
      BUG: KASAN: slab-use-after-free in _raw_spin_lock+0xe4/0x1a0
      Write of size 4 at addr ffff00001125da70 by task B/672
    
      CPU: 20 UID: 0 PID: 672 Comm: B Not tainted 7.1.0-rc6-00284-g8e65320d91cd #4 PREEMPT
      Hardware name: linux,dummy-virt (DT)
      Call trace:
       _raw_spin_lock+0xe4/0x1a0
       binder_free_transaction+0x8c/0x320
       binder_send_failed_reply+0x21c/0x2f8
       binder_thread_release+0x488/0x7e0
       binder_ioctl+0x12c0/0x29a0
      [...]
    
      Allocated by task 675:
       __kmalloc_cache_noprof+0x174/0x444
       binder_open+0x118/0xb70
       do_dentry_open+0x374/0x1040
       vfs_open+0x58/0x3bc
      [...]
    
      Freed by task 212:
       __kasan_slab_free+0x58/0x80
       kfree+0x1a0/0x4a4
       binder_proc_dec_tmpref+0x32c/0x5e0
       binder_deferred_func+0xc48/0x104c
       process_one_work+0x53c/0xbc0
      [...]
      ==================================================================
    
    To prevent this, pin the target thread (t->to_thread) to guarantee the
    target process remains alive. Undelivered transactions without a target
    thread are already safe, as the target process can only be the current
    context in those paths.
    
    Cc: stable <[email protected]>
    Reported-by: Alice Ryhl <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Fixes: a370003cc301 ("binder: fix possible UAF when freeing buffer")
    Signed-off-by: Carlos Llamas <[email protected]>
    Reviewed-by: Alice Ryhl <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

binder: fix UAF in binder_thread_release() [+ + +]
Author: Carlos Llamas <[email protected]>
Date:   Fri Jun 19 18:52:30 2026 +0000

    binder: fix UAF in binder_thread_release()
    
    commit 114a116aaa5f0295376cdf12da743c5bce3b20ce upstream.
    
    When a thread exits, binder_thread_release() walks its transaction stack
    to clear the t->from and t->to_proc that correspond with the exiting
    thread. However, a process dying in parallel might attempt to kfree some
    of these transactions. And if one of them has no associated t->to_proc,
    the t->to_proc->inner_lock will not be acquired.
    
    This means that transaction accesses in binder_thread_release() after
    t->to_proc has been cleared might race with binder_free_transaction()
    and cause a use-after-free error as reported by KASAN:
    
      ==================================================================
      BUG: KASAN: slab-use-after-free in binder_thread_release+0x5d0/0x798
      Write of size 8 at addr ffff000016627500 by task X/715
    
      CPU: 17 UID: 0 PID: 715 Comm: X Not tainted 7.1.0-rc5-00149-g8fde5d1d47f6 #30 PREEMPT
      Hardware name: linux,dummy-virt (DT)
      Call trace:
       binder_thread_release+0x5d0/0x798
       binder_ioctl+0x12c0/0x299c
       [...]
    
      Allocated by task 717 on cpu 18 at 67.267803s:
       __kasan_kmalloc+0xa0/0xbc
       __kmalloc_cache_noprof+0x174/0x444
       binder_transaction+0x554/0x8150
       binder_thread_write+0xa30/0x4354
       binder_ioctl+0x20f0/0x299c
       [...]
    
      Freed by task 202 on cpu 18 at 90.416221s:
       __kasan_slab_free+0x58/0x80
       kfree+0x1a0/0x4a4
       binder_free_transaction+0x150/0x294
       binder_send_failed_reply+0x398/0x6d8
       binder_release_work+0x3e4/0x4ec
       binder_deferred_func+0xbd8/0x104c
       [...]
      ==================================================================
    
    In order to avoid this, make sure that binder_free_transaction() reads
    the t->to_proc under the transaction lock. This will serialize the
    transaction release with the accesses in binder_thread_release(). Plus,
    it matches the documented locking rules for @to_proc.
    
    Cc: stable <[email protected]>
    Fixes: 7a4408c6bd3e ("binder: make sure accesses to proc/thread are safe")
    Reviewed-by: Alice Ryhl <[email protected]>
    Signed-off-by: Carlos Llamas <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
bitops: make BYTES_TO_BITS() treewide-available [+ + +]
Author: Alexander Lobakin <[email protected]>
Date:   Mon Jul 13 23:04:47 2026 -0400

    bitops: make BYTES_TO_BITS() treewide-available
    
    [ Upstream commit 7d8296b250f2eed73f1758607926d4d258dea5d4 ]
    
    Avoid open-coding that simple expression each time by moving
    BYTES_TO_BITS() from the probes code to <linux/bitops.h> to export
    it to the rest of the kernel.
    Simplify the macro while at it. `BITS_PER_LONG / sizeof(long)` always
    equals to %BITS_PER_BYTE, regardless of the target architecture.
    Do the same for the tools ecosystem as well (incl. its version of
    bitops.h). The previous implementation had its implicit type of long,
    while the new one is int, so adjust the format literal accordingly in
    the perf code.
    
    Suggested-by: Andy Shevchenko <[email protected]>
    Reviewed-by: Przemek Kitszel <[email protected]>
    Acked-by: Yury Norov <[email protected]>
    Signed-off-by: Alexander Lobakin <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 55052184ac90 ("iio: common: st_sensors: honour channel endianness in read_axis_data")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Bluetooth: bnep: pin L2CAP connection during netdev registration [+ + +]
Author: Yousef Alhouseen <[email protected]>
Date:   Sun Jun 28 02:50:58 2026 +0200

    Bluetooth: bnep: pin L2CAP connection during netdev registration
    
    commit bb067a99a0356196c0b89a95721985485ebce5a5 upstream.
    
    bnep_add_connection() reads the L2CAP connection without holding the
    channel lock, then passes its HCI device to register_netdev(). Controller
    teardown can clear and release that connection concurrently, leaving the
    network device registration path to dereference a freed parent device.
    
    Take a reference to the L2CAP connection while holding the channel lock.
    Retain it until register_netdev() has taken the parent device reference.
    
    Fixes: 65f53e9802db ("Bluetooth: Access BNEP session addresses through L2CAP channel")
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=fed5dce4553262f3b35c
    Cc: [email protected]
    Signed-off-by: Yousef Alhouseen <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Bluetooth: bpa10x: avoid OOB read of revision string in bpa10x_setup() [+ + +]
Author: Weiming Shi <[email protected]>
Date:   Wed Jul 1 09:06:14 2026 -0700

    Bluetooth: bpa10x: avoid OOB read of revision string in bpa10x_setup()
    
    [ Upstream commit dd068ef044128db655f48323a4acfd5907e04903 ]
    
    bpa10x_setup() sends the vendor command 0xfc0e and passes the response
    to bt_dev_info() and hci_set_fw_info() as a "%s" string starting at
    skb->data + 1, without checking the length:
    
            bt_dev_info(hdev, "%s", (char *)(skb->data + 1));
            hci_set_fw_info(hdev, "%s", skb->data + 1);
    
    A device that returns a one-byte response (status only) leaves
    skb->data + 1 past the end of the data, and the %s walk reads adjacent
    slab memory until it meets a NUL. The same happens when the payload is
    not NUL-terminated within skb->len. The out-of-bounds bytes end up in
    the kernel log and the firmware-info debugfs file.
    
    Print the revision string with a bounded "%.*s" limited to skb->len - 1
    instead. This keeps the string readable for well-behaved devices while
    never reading past the received data, and does not fail setup, so a
    device returning a short or unterminated response keeps working.
    
    Fixes: ddd68ec8f484 ("Bluetooth: bpa10x: Read revision information in setup stage")
    Reported-by: Xiang Mei <[email protected]>
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: Weiming Shi <[email protected]>
    Reported-by: Xiang Mei <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: btintel: Check firmware version before download [+ + +]
Author: Luiz Augusto von Dentz <[email protected]>
Date:   Tue Jul 14 09:26:48 2026 -0400

    Bluetooth: btintel: Check firmware version before download
    
    [ Upstream commit ac0565462e330a2b762ca5849a4140b29d725786 ]
    
    This checks the firmware build number, week and year against the
    repective loaded version. If details are a match, skip the download
    process.
    
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Tested-by: Tedd Ho-Jeong An <[email protected]>
    Signed-off-by: Marcel Holtmann <[email protected]>
    Stable-dep-of: c5b600a3c05b ("Bluetooth: btusb: fix use-after-free on marvell probe failure")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Bluetooth: btintel: Fix offset calculation boot address parameter [+ + +]
Author: Kiran K <[email protected]>
Date:   Tue Jul 14 09:26:47 2026 -0400

    Bluetooth: btintel: Fix offset calculation boot address parameter
    
    [ Upstream commit d00745da644d42c2f97293eb3fe19cfd5c0b073c ]
    
    Boot address parameter was not getting updated properly
    due to wrong offset
    
    Signed-off-by: Kiran K <[email protected]>
    Signed-off-by: Marcel Holtmann <[email protected]>
    Stable-dep-of: c5b600a3c05b ("Bluetooth: btusb: fix use-after-free on marvell probe failure")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Bluetooth: btrtl: validate firmware patch bounds [+ + +]
Author: Laxman Acharya Padhya <[email protected]>
Date:   Fri Jul 10 23:10:03 2026 +0545

    Bluetooth: btrtl: validate firmware patch bounds
    
    commit 609c5b04a28dc1b0f3af6a7bc93055135b2d2059 upstream.
    
    rtlbt_parse_firmware() copies patch_length - 4 bytes before appending the
    firmware version. A malformed firmware patch shorter than the version field
    can make this subtraction underflow and turn the copy into an oversized
    read and write during Bluetooth setup.
    
    The existing patch_offset + patch_length check can also wrap on 32-bit
    architectures. Validate the patch length and range without arithmetic
    overflow before allocating or copying the patch.
    
    Fixes: db33c77dddc2 ("Bluetooth: btrtl: Create separate module for Realtek BT driver")
    Cc: [email protected]
    Signed-off-by: Laxman Acharya Padhya <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Bluetooth: btusb: fix use-after-free on marvell probe failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Tue Jul 14 09:26:50 2026 -0400

    Bluetooth: btusb: fix use-after-free on marvell probe failure
    
    [ Upstream commit c5b600a3c05b1a7a110d558df935a8fc8a471c79 ]
    
    Make sure to stop any TX URBs submitted during Marvell OOB wakeup
    configuration on later probe failures to avoid use-after-free in the
    completion callback.
    
    This issue was reported by Sashiko while reviewing a fix for a wakeup
    source leak in the btusb probe errors paths.
    
    Link: https://sashiko.dev/#/patchset/20260402092704.2346710-1-johan%40kernel.org
    Fixes: a4ccc9e33d2f ("Bluetooth: btusb: Configure Marvell to use one of the pins for oob wakeup")
    Cc: [email protected]      # 4.11
    Cc: Rajat Jain <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Bluetooth: btusb: fix use-after-free on registration failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Thu Jun 4 08:37:36 2026 +0200

    Bluetooth: btusb: fix use-after-free on registration failure
    
    commit eedc6867ebad73edbfaf9a0a65fbef7115cc4753 upstream.
    
    Make sure to release the sibling interfaces in case controller
    registration fails to avoid use-after-free and double-free when they are
    eventually disconnected.
    
    This issue was reported by Sashiko while reviewing a fix for a wakeup
    source leak in the btusb probe errors paths.
    
    Link: https://sashiko.dev/#/patchset/20260402092704.2346710-1-johan%40kernel.org
    Fixes: 9bfa35fe422c ("[Bluetooth] Add SCO support to btusb driver")
    Fixes: 9d08f50401ac ("Bluetooth: btusb: Add support for Broadcom LM_DIAG interface")
    Cc: [email protected]      # 2.6.27
    Reviewed-by: Paul Menzel <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Bluetooth: btusb: fix wakeup source leak on probe failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Tue Jul 14 09:26:57 2026 -0400

    Bluetooth: btusb: fix wakeup source leak on probe failure
    
    [ Upstream commit 3d93e1bb0fb881fe3ef961d1120556658e9cac4d ]
    
    Make sure to disable wakeup on probe failure to avoid leaking the wakeup
    source.
    
    Fixes: fd913ef7ce61 ("Bluetooth: btusb: Add out-of-band wakeup support")
    Cc: [email protected]      # 4.11
    Cc: Rajat Jain <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Bluetooth: fix UAF in bt_accept_dequeue() [+ + +]
Author: Yousef Alhouseen <[email protected]>
Date:   Sun Jun 28 02:23:05 2026 +0200

    Bluetooth: fix UAF in bt_accept_dequeue()
    
    commit 4bd0b274054f2679f28b70222b607bb0afc3ab9a upstream.
    
    bt_accept_get() takes a temporary reference before dropping the accept
    queue lock. bt_accept_dequeue() currently drops that reference before
    bt_accept_unlink(), leaving only the queue reference.
    
    bt_accept_unlink() drops the queue reference. The subsequent
    sock_hold() therefore accesses freed memory if it was the final
    reference, as observed by KASAN during listening L2CAP socket cleanup.
    
    Retain the temporary queue-walk reference through unlink and hand it to
    the caller on success. Drop it explicitly on the closed and
    not-yet-connected paths.
    
    Fixes: ab1513597c6c ("Bluetooth: fix UAF in l2cap_sock_cleanup_listen() vs l2cap_conn_del()")
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=674ff7e4d7fdfd572afc
    Cc: [email protected]
    Signed-off-by: Yousef Alhouseen <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Bluetooth: ISO: exclude RFU bits from ISO_SDU_Length [+ + +]
Author: Pauli Virtanen <[email protected]>
Date:   Wed Jul 1 18:46:39 2026 +0300

    Bluetooth: ISO: exclude RFU bits from ISO_SDU_Length
    
    [ Upstream commit fd076d8deeab6f9f18ef13400f89e1f550df665b ]
    
    slen contains ISO_SDU_Length (12 bits), RFU (2 bits),
    Packet_Status_Flags (2 bits).
    
    Exclude the RFU bits from hci_iso_data_len. Also add masks to the pack
    macro.
    
    Fixes: 4de0fc599eb9 ("Bluetooth: Add definitions for CIS connections")
    Signed-off-by: Pauli Virtanen <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: L2CAP: cancel pending_rx_work before taking conn->lock [+ + +]
Author: Runyu Xiao <[email protected]>
Date:   Wed Jul 15 20:16:50 2026 -0400

    Bluetooth: L2CAP: cancel pending_rx_work before taking conn->lock
    
    [ Upstream commit 2641a9e0a1dd4af2e21995470a21d55dd35e5203 ]
    
    l2cap_conn_del() takes conn->lock and then calls cancel_work_sync() for
    pending_rx_work.  process_pending_rx() takes the same mutex, so teardown
    can deadlock against the worker it is flushing.
    
    This issue was found by our static analysis tool and then manually
    reviewed against the current tree.
    
    The grounded PoC kept the l2cap_conn_ready() -> queue_work(...,
    &conn->pending_rx_work) submit path, the l2cap_conn_del() ->
    cancel_work_sync(&conn->pending_rx_work) teardown path, and the
    process_pending_rx() -> mutex_lock(&conn->lock) worker edge.  Lockdep
    reported:
    
      WARNING: possible circular locking dependency detected
      process_pending_rx+0x21/0x2a [vuln_msv]
      l2cap_conn_del.constprop.0+0x3f/0x4e [vuln_msv]
      *** DEADLOCK ***
    
    Cancel pending_rx_work before taking conn->lock, matching the existing
    lock-before-drain ordering used for the two delayed works in the same
    teardown path.  The pending_rx queue is still purged after the work has
    been cancelled and conn->lock has been acquired.
    
    Fixes: 7ab56c3a6ecc ("Bluetooth: Fix deadlock in l2cap_conn_del()")
    Cc: [email protected]
    Signed-off-by: Runyu Xiao <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Bluetooth: L2CAP: Fix deadlock in l2cap_conn_del() [+ + +]
Author: Hyunwoo Kim <[email protected]>
Date:   Wed Jul 15 20:16:49 2026 -0400

    Bluetooth: L2CAP: Fix deadlock in l2cap_conn_del()
    
    [ Upstream commit 00fdebbbc557a2fc21321ff2eaa22fd70c078608 ]
    
    l2cap_conn_del() calls cancel_delayed_work_sync() for both info_timer
    and id_addr_timer while holding conn->lock. However, the work functions
    l2cap_info_timeout() and l2cap_conn_update_id_addr() both acquire
    conn->lock, creating a potential AB-BA deadlock if the work is already
    executing when l2cap_conn_del() takes the lock.
    
    Move the work cancellations before acquiring conn->lock and use
    disable_delayed_work_sync() to additionally prevent the works from
    being rearmed after cancellation, consistent with the pattern used in
    hci_conn_del().
    
    Fixes: ab4eedb790ca ("Bluetooth: L2CAP: Fix corrupted list in hci_chan_del")
    Signed-off-by: Hyunwoo Kim <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Stable-dep-of: 2641a9e0a1dd ("Bluetooth: L2CAP: cancel pending_rx_work before taking conn->lock")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Bluetooth: L2CAP: Fix not tracking outstanding TX ident [+ + +]
Author: Luiz Augusto von Dentz <[email protected]>
Date:   Wed Jul 15 20:16:48 2026 -0400

    Bluetooth: L2CAP: Fix not tracking outstanding TX ident
    
    [ Upstream commit 6c3ea155e5ee3e56606233acde8309afda66d483 ]
    
    This attempts to proper track outstanding request by using struct ida
    and allocating from it in l2cap_get_ident using ida_alloc_range which
    would reuse ids as they are free, then upon completion release
    the id using ida_free.
    
    This fixes the qualification test case L2CAP/COS/CED/BI-29-C which
    attempts to check if the host stack is able to work after 256 attempts
    to connect which requires Ident field to use the full range of possible
    values in order to pass the test.
    
    Link: https://github.com/bluez/bluez/issues/1829
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Reviewed-by: Paul Menzel <[email protected]>
    Stable-dep-of: 2641a9e0a1dd ("Bluetooth: L2CAP: cancel pending_rx_work before taking conn->lock")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Bluetooth: L2CAP: Fix regressions caused by reusing ident [+ + +]
Author: Luiz Augusto von Dentz <[email protected]>
Date:   Tue Mar 17 11:54:01 2026 -0400

    Bluetooth: L2CAP: Fix regressions caused by reusing ident
    
    commit 761fb8ec8778f0caf2bba5a41e3cff1ea86974f3 upstream.
    
    This attempt to fix regressions caused by reusing ident which apparently
    is not handled well on certain stacks causing the stack to not respond to
    requests, so instead of simple returning the first unallocated id this
    stores the last used tx_ident and then attempt to use the next until all
    available ids are exausted and then cycle starting over to 1.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=221120
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=221177
    Fixes: 6c3ea155e5ee ("Bluetooth: L2CAP: Fix not tracking outstanding TX ident")
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Tested-by: Christian Eggers <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Bluetooth: L2CAP: validate option length before reading conf opt value [+ + +]
Author: Muhammad Bilal <[email protected]>
Date:   Sun Jun 21 00:56:35 2026 +0500

    Bluetooth: L2CAP: validate option length before reading conf opt value
    
    commit 687617555cedfb74c9e3cb85d759b908dcb17856 upstream.
    
    l2cap_get_conf_opt() derives the option length from the
    attacker-controlled opt->len field and immediately dereferences
    opt->val (as u8, get_unaligned_le16() or get_unaligned_le32(), or a
    raw pointer for the default case) before any caller has confirmed
    that opt->len bytes are present in the buffer. The callers
    (l2cap_parse_conf_req(), l2cap_parse_conf_rsp() and
    l2cap_conf_rfc_get()) only detect a malformed option afterwards, once
    the running length has gone negative, by which point the
    out-of-bounds read has already executed.
    
    An existing post-hoc length check keeps the garbage value from being
    consumed, so this is not a data leak in the current control flow. It
    is still a validate-after-use ordering bug: up to 4 bytes are read
    past the end of the buffer before it is known to contain them, and it
    is fragile to future changes in the callers.
    
    Fix it at the source. Pass the end of the buffer into
    l2cap_get_conf_opt() and refuse to touch opt->val unless the full
    option (header + value) fits. Each caller computes an end pointer
    once before the loop and checks the return value directly instead of
    inferring the error from a negative length.
    
    Fixes: 7c9cbd0b5e38 ("Bluetooth: Verify that l2cap_get_conf_opt provides large enough buffer")
    Cc: [email protected]
    Signed-off-by: Muhammad Bilal <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
bnx2x: fix potential memory leak in bnx2x_alloc_mem_bp() [+ + +]
Author: Abdun Nihaal <[email protected]>
Date:   Sat Jun 20 11:53:50 2026 +0530

    bnx2x: fix potential memory leak in bnx2x_alloc_mem_bp()
    
    commit a986fde914d88af47eb78fd29c5d1af7952c3500 upstream.
    
    If the allocation of fp[i].tpa_info fails, the error path will not free
    the struct bnx2x_fastpath allocated earlier, as it is not linked to the
    bp structure yet. Fix that by linking it immediately after allocation.
    
    Cc: [email protected]
    Fixes: 15192a8cf8a8 ("bnx2x: Split the FP structure")
    Signed-off-by: Abdun Nihaal <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
bonding: 3ad: fix mux port state on oper down [+ + +]
Author: Louis Scalbert <[email protected]>
Date:   Wed Jun 3 17:03:30 2026 +0200

    bonding: 3ad: fix mux port state on oper down
    
    [ Upstream commit 807afc7544b865d4d09068a415fd5b71bf5665cc ]
    
    When the bonding interface has carrier down due to the absence of
    usable slaves and a slave transitions from down to up, the bonding
    interface briefly goes carrier up, then down again, and finally up
    once LACP negotiates collecting and distributing on the port.
    
    When lacp_strict mode is on, the interface should not transition to
    carrier up until LACP negotiation is complete.
    
    This happens because the actor and partner port states remain in
    Collecting_Distributing when the port goes down. When the port
    comes back up, it temporarily remains in this state until LACP
    renegotiation occurs.
    
    Previously this was mostly cosmetic, but since the bonding carrier
    state may depend on the LACP negotiation state, it causes the
    interface to flap.
    
    According to IEEE 802.3ad-2000 and IEEE 802.1ax-2014, Collecting and
    Distributing should be reset when a port goes down:
    - In the Receive state machine, port_enabled == FALSE causes a
      transition to the PORT_DISABLED state, which is expected to clear
      Partner_Oper_Port_State.Synchronization.
    - In the Mux state machine, Partner_Oper_Port_State.Synchronization ==
      FALSE causes a transition to the ATTACHED state, which disables
      Collecting and Distributing.
    
    However, Partner_Oper_Port_State.Synchronization is not cleared in the
    PORT_DISABLED state.
    
    Clear Partner_Oper_Port_State.Synchronization in the Receive
    PORT_DISABLED state.
    
    Fixes: 655f8919d549 ("bonding: add min links parameter to 802.3ad")
    Signed-off-by: Louis Scalbert <[email protected]>
    Acked-by: Jay Vosburgh <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf, sockmap: fix integer overflow in bpf_msg_pop_data() bounds check [+ + +]
Author: Sechang Lim <[email protected]>
Date:   Mon Jun 15 10:19:58 2026 +0800

    bpf, sockmap: fix integer overflow in bpf_msg_pop_data() bounds check
    
    [ Upstream commit a48802fb2cd2d1e23651989f8ff4d15e9d5dad54 ]
    
    start and len are u32, so
    
            u64 last = start + len;
    
    evaluates start + len in 32-bit and wraps before storing it in last.
    The bounds check
    
            if (start >= offset + l || last > msg->sg.size)
                    return -EINVAL;
    
    can then be passed with an out-of-range start/len, after which the pop
    loop runs off the end of the scatterlist and sk_msg_shift_left() calls
    put_page() on the empty msg->sg.end slot:
    
      Oops: general protection fault, probably for non-canonical address
      0xdffffc0000000001: 0000 [#1] SMP KASAN PTI
      KASAN: null-ptr-deref in range [0x0000000000000008-0x000000000000000f]
      RIP: 0010:sk_msg_shift_left net/core/filter.c:2957 [inline]
      RIP: 0010:____bpf_msg_pop_data net/core/filter.c:3103 [inline]
      RIP: 0010:bpf_msg_pop_data+0x753/0x1a10 net/core/filter.c:2984
      Call Trace:
       <TASK>
       bpf_prog_4cc92c278f4d5d56+0x1b1/0x1e8
       bpf_prog_run_pin_on_cpu+0x107/0x320 include/linux/filter.h:746
       sk_psock_msg_verdict+0x357/0x7f0 net/core/skmsg.c:934
       tcp_bpf_send_verdict net/ipv4/tcp_bpf.c:420 [inline]
       tcp_bpf_sendmsg+0x766/0x1ae0 net/ipv4/tcp_bpf.c:583
       __sock_sendmsg+0x153/0x1c0 net/socket.c:802
       __sys_sendto+0x326/0x430 net/socket.c:2265
       __x64_sys_sendto+0xe3/0x100 net/socket.c:2268
       do_syscall_64+0x14c/0x480
       entry_SYSCALL_64_after_hwframe+0x77/0x7f
       </TASK>
    
    Widen the addition with a (u64) cast so the bound is evaluated in
    64-bit and a len near U32_MAX no longer wraps below msg->sg.size.
    
    While here, change pop from int to u32. It counts bytes against the
    unsigned scatterlist lengths and can never be negative, so the signed
    type only invites sign-confusion in the pop loop.
    
    Fixes: 7246d8ed4dcc ("bpf: helper to pop data from messages")
    Reviewed-by: Jiayuan Chen <[email protected]>
    Reviewed-by: Emil Tsalapatis <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Signed-off-by: Sechang Lim <[email protected]>
    Signed-off-by: Jiayuan Chen <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf, sockmap: reject overflowing copy + len in bpf_msg_push_data() [+ + +]
Author: Weiming Shi <[email protected]>
Date:   Mon Jun 15 10:19:54 2026 +0800

    bpf, sockmap: reject overflowing copy + len in bpf_msg_push_data()
    
    [ Upstream commit 0c0a8ed85349dae298712d79cb276acfeb794d82 ]
    
    When the scatterlist ring is full or nearly full, bpf_msg_push_data()
    enters a copy fallback path and computes copy + len for the page
    allocation size. Since len comes from BPF with arg3_type = ARG_ANYTHING
    and both are u32, a crafted len can wrap the sum to a small value,
    causing an undersized allocation followed by an out-of-bounds memcpy.
    
     BUG: unable to handle page fault for address: ffffed104089a402
     Oops: Oops: 0000 [#1] SMP KASAN NOPTI
     Call Trace:
      __asan_memcpy (mm/kasan/shadow.c:105)
      bpf_msg_push_data (net/core/filter.c:2852 net/core/filter.c:2788)
      bpf_prog_9ed8b5711920a7d7+0x2e/0x36
      sk_psock_msg_verdict (net/core/skmsg.c:934)
      tcp_bpf_sendmsg (net/ipv4/tcp_bpf.c:421 net/ipv4/tcp_bpf.c:584)
      __sys_sendto (net/socket.c:2206)
      do_syscall_64 (arch/x86/entry/syscall_64.c:94)
      entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
    
    Add an overflow check before the allocation.
    
    Link: https://lore.kernel.org/all/[email protected]
    Fixes: 6fff607e2f14 ("bpf: sk_msg program helper bpf_msg_push_data")
    Tested-by: Xiang Mei <[email protected]>
    Tested-by: Xinyu Ma <[email protected]>
    Reviewed-by: Jiayuan Chen <[email protected]>
    Reviewed-by: Emil Tsalapatis <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Signed-off-by: Weiming Shi <[email protected]>
    Signed-off-by: Jiayuan Chen <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf: Fix stack slot index in nospec checks [+ + +]
Author: Nuoqi Gui <[email protected]>
Date:   Thu Jun 18 01:50:26 2026 +0800

    bpf: Fix stack slot index in nospec checks
    
    [ Upstream commit d1d53aa30ab3b5ae89161c9cc840b3f7489ad386 ]
    
    check_stack_write_fixed_off() computes the byte slot for a fixed-offset
    stack write as -off - 1, and records each written byte in slot_type[] with
    (slot - i) % BPF_REG_SIZE.
    
    The Spectre v4 sanitization pre-check uses slot_type[i] instead. For a
    4-byte write at fp-8 after the lower half of fp-8 has been zeroed, the
    pre-check scans bytes 0..3 and sees STACK_ZERO while the actual write updates
    bytes 7..4. That can leave the second half-slot write without nospec_result
    even though the bytes being overwritten still require sanitization.
    
    Use the same slot index in the sanitization pre-check that the write path uses
    when updating slot_type[].
    
    Fixes: 2039f26f3aca ("bpf: Fix leakage due to insufficient speculative store bypass mitigation")
    Acked-by: Luis Gerhorst <[email protected]>
    Reviewed-by: Jiayuan Chen <[email protected]>
    Reviewed-by: Emil Tsalapatis <[email protected]>
    Signed-off-by: Nuoqi Gui <[email protected]>
    Link: https://lore.kernel.org/r/20260618-f01-11-stack-nospec-slot-index-v3-1-780297041721@mails.tsinghua.edu.cn
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Update transport_header when encapsulating UDP tunnel in lwt [+ + +]
Author: Leon Hwang <[email protected]>
Date:   Tue Jun 2 23:09:30 2026 +0800

    bpf: Update transport_header when encapsulating UDP tunnel in lwt
    
    [ Upstream commit 82d7d0adbc678064543e9d254864f6b4ea4a388c ]
    
    Currently, bpf_lwt_push_ip_encap() does not update skb->transport_header.
    When a driver, e.g. ice, reuses the stale skb->transport_header to
    offload checksum computation to NIC hardware, VxLAN packets encapsulated
    by bpf_lwt_push_encap() helper may be dropped due to incorrect checksum.
    
    Update skb->transport_header in bpf_lwt_push_ip_encap() whenever the
    encapsulated packet uses UDP, so checksum offload works correctly.
    
    Fixes: 52f278774e79 ("bpf: implement BPF_LWT_ENCAP_IP mode in bpf_lwt_push_encap")
    Cc: Leon Hwang <[email protected]>
    Signed-off-by: Leon Hwang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bpftool: Use libbpf error code for flow dissector query [+ + +]
Author: Woojin Ji <[email protected]>
Date:   Wed Jun 3 09:33:39 2026 +0900

    bpftool: Use libbpf error code for flow dissector query
    
    [ Upstream commit 8a7f2bff2165e53595d1e91c160b340f978c0ab7 ]
    
    bpf_prog_query() returns a negative errno on failure.
    query_flow_dissector() currently closes the namespace fd and then reads
    errno to decide whether -EINVAL means that the running kernel does not
    support flow dissector queries.
    
    That errno check controls behavior, not just diagnostics: -EINVAL is
    handled as a non-fatal old-kernel case, while any other error makes bpftool
    net fail.
    
    The namespace fd is opened read-only, so close() is not expected to
    commonly fail in normal use. Still, the BPF_PROG_QUERY error is already
    available in err, and reading errno after an intervening close() is
    fragile. If close() does change errno, the compatibility branch may be
    based on close()'s error instead of the BPF_PROG_QUERY result.
    
    This was reproduced with an LD_PRELOAD fault injector that forced
    BPF_PROG_QUERY for BPF_FLOW_DISSECTOR to fail with EINVAL and then
    forced close() on the netns fd to fail with EIO. The unpatched bpftool
    reported "can't query prog: Input/output error". With this change, the
    same injected failure is handled as the intended non-fatal EINVAL
    compatibility case.
    
    Use the libbpf-returned error code instead. Keep the existing errno reset
    in the non-fatal path to preserve batch mode behavior. The success path
    is unchanged.
    
    Fixes: 7f0c57fec80f ("bpftool: show flow_dissector attachment status")
    Signed-off-by: Woojin Ji <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Acked-by: Leon Hwang <[email protected]>
    Acked-by: Yonghong Song <[email protected]>
    Acked-by: Quentin Monnet <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    
    Assisted-by: ChatGPT:gpt-5.5
    Signed-off-by: Sasha Levin <[email protected]>

 
btrfs: do not trim a device which is not writeable [+ + +]
Author: Qu Wenruo <[email protected]>
Date:   Mon Jul 20 14:38:37 2026 -0400

    btrfs: do not trim a device which is not writeable
    
    [ Upstream commit 1b1937eb08f51319bf71575484cde2b8c517aedc ]
    
    [BUG]
    There is a bug report that btrfs/242 can randomly fail with the
    following NULL pointer dereference:
    
      run fstests btrfs/242 at 2026-06-01 10:25:08
      BTRFS: device fsid d4d7f234-487c-4787-88e4-47a8b68c9874 devid 1 transid 9 /dev/sdc (8:32) scanned by mount (122609)
      BTRFS info (device sdc): first mount of filesystem d4d7f234-487c-4787-88e4-47a8b68c9874
      BTRFS info (device sdc): using crc32c checksum algorithm
      BTRFS warning (device sdc): devid 2 uuid fbe72d72-3272-482d-80fb-ab88ed398192 is missing
      BTRFS warning (device sdc): devid 2 uuid fbe72d72-3272-482d-80fb-ab88ed398192 is missing
      BTRFS info (device sdc): allowing degraded mounts
      BTRFS info (device sdc): turning on async discard
      BTRFS info (device sdc): enabling free space tree
      Unable to handle kernel NULL pointer dereference at virtual address 0000000000000018
      user pgtable: 4k pages, 48-bit VAs, pgdp=000000013fd6b000
      CPU: 4 UID: 0 PID: 122625 Comm: fstrim Not tainted 7.0.10-2-default #1 PREEMPT(full) openSUSE Tumbleweed e9a5f6b24978fba3bf015a992f865837fdfff3dd
      Hardware name: QEMU KVM Virtual Machine, BIOS edk2-20250812-19.fc42 08/12/2025
      pstate: 01400005 (nzcv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--)
      pc : btrfs_trim_fs+0x34c/0xa00 [btrfs]
      lr : btrfs_trim_fs+0x1f0/0xa00 [btrfs]
      Call trace:
       btrfs_trim_fs+0x34c/0xa00 [btrfs f02c1d570ceea621c69d302ba75dd61868083840] (P)
       btrfs_ioctl_fitrim+0xe8/0x178 [btrfs f02c1d570ceea621c69d302ba75dd61868083840]
       btrfs_ioctl+0xdd4/0x2bd8 [btrfs f02c1d570ceea621c69d302ba75dd61868083840]
       __arm64_sys_ioctl+0xac/0x108
       invoke_syscall.constprop.0+0x5c/0xd0
       el0_svc_common.constprop.0+0x40/0xf0
       do_el0_svc+0x24/0x40
       el0_svc+0x40/0x1d0
       el0t_64_sync_handler+0xa0/0xe8
       el0t_64_sync+0x1b0/0x1b8
      Code: 17ffff83 f94017e0 f9002be0 f9402ea0 (f9400c00)
      ---[ end trace 0000000000000000  ]---
    
    Also the reporter is very kind to test the following ASSERT() added to
    btrfs_trim_free_extents_throttle():
    
            ASSERT(device->bdev,
                   "devid=%llu path=%s dev_state=0x%lx\n",
                   device->devid, btrfs_dev_name(device), device->dev_state);
    
    And it shows the following output:
    
      assertion failed: device->bdev, in extent-tree.c:6630 (devid=2 path=/dev/sdd dev_state=0x82)
    
    Which means the device->bdev is NULL, and the dev_state is
    BTRFS_DEV_STATE_IN_FS_METADATA | BTRFS_DEV_STATE_ITEM_FOUND, without
    BTRFS_DEV_STATE_WRITEABLE flag set.
    
    [CAUSE]
    The pc points to the following call chain:
    
      btrfs_trim_fs()
      |- btrfs_trim_free_extents()
         |- btrfs_trim_free_extents_throttle()
            |- bdev_max_discard_sectors(device->bdev)
    
    So the NULL pointer dereference is caused by device->bdev being NULL.
    
    This looks impossible by a quick glance, as just before calling
    btrfs_trim_free_extents_throttle(), we have skipped any device that has
    BTRFS_DEV_STATE_MISSING flag set.
    
    However in this particular case, there is a window where the missing
    device is later re-scanned, causing btrfs to remove the
    BTRFS_DEV_STATE_MISSING flag:
    
      btrfs_control_ioctl()
      |- btrfs_scan_one_device()
         |- device_list_add()
            |- rcu_assign_pointer(device->name, name);
            |  This updates the missing device's path to the new good path.
            |
            |- clear_bit(BTRFS_DEV_STATE_MISSING, &device->dev_state)
               This removes the BTRFS_DEV_STATE_MISSING flag.
    
    This allows the missing device to re-appear and clear the
    BTRFS_DEV_STATE_MISSING flag.  However the device still does not have
    the BTRFS_DEV_STATE_WRITEABLE flag set, nor is its bdev pointer updated.
    
    The bdev pointer remains NULL, triggering the crash later.
    
    [FIX]
    This is a big de-synchronization between BTRFS_DEV_STATE_MISSING and
    device->bdev pointer, and shows a gap in btrfs's re-appearing-device
    handling.
    
    The proper handling of re-appearing device will need quite some extra
    work, which is out of the context of this small fix.
    
    Thankfully the regular bbio submission path has already handled it well
    by checking if the device->bdev is NULL before submitting.
    
    So here we just fix the crash by checking if the device is writeable and
    has a bdev pointer before calling bdev_max_discard_sectors().
    
    Reported-by: Su Yue <[email protected]>
    Link: https://lore.kernel.org/linux-btrfs/[email protected]/
    Fixes: 499f377f49f0 ("btrfs: iterate over unused chunk space in FITRIM")
    CC: [email protected] # 5.10+
    Reviewed-by: Filipe Manana <[email protected]>
    Signed-off-by: Qu Wenruo <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: fix invalid pointer dereference in __btrfs_run_delayed_refs() [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Thu May 21 15:19:37 2026 +0100

    btrfs: fix invalid pointer dereference in __btrfs_run_delayed_refs()
    
    [ Upstream commit 486f8298b6188ff11ef1f4be7f1d5d2e4d1b1fae ]
    
    In the beginning of the loop, we try to obtain a locked delayed ref head,
    if 'locked_ref' is currently NULL, by calling btrfs_select_ref_head(),
    which can return an error pointer. If the error pointer is -EAGAIN we do
    a continue and go back to the beginning of the loop, which will not try
    again to call btrfs_select_ref_head() since 'locked_ref' is no longer
    NULL but it's ERR_PTR(-EAGAIN), and then we do:
    
       spin_lock(&locked_ref->lock);
    
    against a ERR_PTR(-EAGAIN) value, generating an invalid pointer
    dereference.
    
    Fix this by ensuring that 'locked_ref' is set to NULL when
    btrfs_select_ref_head() returns ERR_PTR(-EAGAIN) and incrementing 'count'
    as well, to prevent infinite looping. We do this by doing a goto to the
    bottom of the loop that already sets 'locked_ref' to NULL and does a
    cond_resched(), with an increment to 'count' right before the goto.
    These measures were in place before the refactoring in commit 0110a4c43451
    ("btrfs: refactor __btrfs_run_delayed_refs loop") but were unintentionally
    lost afterwards.
    
    Reported-by: Dan Carpenter <[email protected]>
    Link: https://lore.kernel.org/linux-btrfs/[email protected]/
    Fixes: 0110a4c43451 ("btrfs: refactor __btrfs_run_delayed_refs loop")
    Reviewed-by: Boris Burkov <[email protected]>
    Reviewed-by: Qu Wenruo <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bus: mhi: host: Add alignment check for event ring read pointer [+ + +]
Author: Krishna chaitanya chundru <[email protected]>
Date:   Tue Oct 31 15:21:05 2023 +0530

    bus: mhi: host: Add alignment check for event ring read pointer
    
    commit eff9704f5332a13b08fbdbe0f84059c9e7051d5f upstream.
    
    Though we do check the event ring read pointer by "is_valid_ring_ptr"
    to make sure it is in the buffer range, but there is another risk the
    pointer may be not aligned.  Since we are expecting event ring elements
    are 128 bits(struct mhi_ring_element) aligned, an unaligned read pointer
    could lead to multiple issues like DoS or ring buffer memory corruption.
    
    So add a alignment check for event ring read pointer.
    
    Fixes: ec32332df764 ("bus: mhi: core: Sanity check values from remote device before use")
    cc: [email protected]
    Signed-off-by: Krishna chaitanya chundru <[email protected]>
    Reviewed-by: Jeffrey Hugo <[email protected]>
    Reviewed-by: Manivannan Sadhasivam <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Alexander Martyniuk <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

bus: sunxi-rsb: Always check register address validity [+ + +]
Author: Samuel Holland <[email protected]>
Date:   Sun Mar 1 17:49:39 2026 +0300

    bus: sunxi-rsb: Always check register address validity
    
    [ Upstream commit 61192938a5870ac36edae81e4775b680dcf02c61 ]
    
    The register address was already validated for read operations in
    regmap_sunxi_rsb_reg_read before being truncated to a u8. Write operations
    have the same set of possible addresses, and the address is being truncated
    from u32 to u8 here as well, so the same check is needed.
    
    Signed-off-by: Samuel Holland <[email protected]>
    Signed-off-by: Andrey Skvortsov <[email protected]>
    Fixes: d787dcdb9c8f ("bus: sunxi-rsb: Add driver for Allwinner Reduced Serial Bus")
    Reviewed-by: Chen-Yu Tsai <[email protected]>
    Reviewed-by: Jernej Skrabec <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Chen-Yu Tsai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
can: bcm: add missing rcu list annotations and operations [+ + +]
Author: Oliver Hartkopp <[email protected]>
Date:   Tue Jul 14 18:55:27 2026 +0200

    can: bcm: add missing rcu list annotations and operations
    
    commit 7b2c3eabc4dafc062a25e10711154f2107526a78 upstream.
    
    sashiko-bot remarked the missing use of list_add_rcu() in
    bcm_[rx|tx]_setup() to have a proper initialized bcm_op structure
    when bcm_proc_show() traverses the bcm_op's under rcu_read_lock().
    
    To cover all initial settings of the bcm_op's the list_add_rcu() calls
    are moved to the end of the setup code.
    
    While at it, also fix the mirroring removal side: bcm_release() called
    bcm_remove_op() - which frees the op via call_rcu() - on ops that were
    still linked in bo->tx_ops/bo->rx_ops, without list_del_rcu() first.
    Unlink each op with list_del_rcu() before handing it to bcm_remove_op(),
    matching the existing pattern in bcm_delete_tx_op()/bcm_delete_rx_op().
    
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/linux-can/[email protected]/
    Fixes: dac5e6249159 ("can: bcm: add missing rcu read protection for procfs content")
    Signed-off-by: Oliver Hartkopp <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: [email protected]
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

can: bcm: fix lockless bound/ifindex race and silent RX_SETUP failure [+ + +]
Author: Oliver Hartkopp <[email protected]>
Date:   Tue Jul 14 18:55:24 2026 +0200

    can: bcm: fix lockless bound/ifindex race and silent RX_SETUP failure
    
    commit d9b091d9d22fee81ec53fb55d2032951993ceadb upstream.
    
    bcm_sendmsg() reads bo->ifindex and checks bo->bound before taking
    lock_sock(), while bcm_notify(), bcm_connect() and bcm_release() all
    mutate both fields under that same lock. Because the lockless reads
    and the locked writes are unordered with respect to each other, a
    racing bcm_notify() (device unregister) or bcm_connect() (concurrent
    bind on another thread sharing the socket) can make bcm_sendmsg()
    observe an inconsistent combination, e.g. a stale bound=1 together
    with the now-cleared ifindex=0, silently turning a socket bound to a
    specific CAN interface into one that also matches "any" interface.
    
    Keep the lockless bo->bound check purely as a fast-path reject, and
    move the ifindex read (and a bo->bound re-check) into the locked
    section, where every writer already serializes. This removes the
    possibility of observing the two fields torn against each other,
    rather than trying to fix it with more READ_ONCE()/WRITE_ONCE() pairs
    on two independently updated fields. Annotate the now-purely-lockless
    bo->bound accesses consistently across all its write sites.
    
    Also fix bcm_rx_setup() silently returning success when the target
    device disappears concurrently instead of reporting -ENODEV, so a
    broken RX op is no longer left registered as if it had succeeded.
    
    Fixes: ffd980f976e7 ("[CAN]: Add broadcast manager (bcm) protocol")
    Reported-by: Ginger <[email protected]>
    Closes: https://lore.kernel.org/linux-can/CAGp+u1aBK8QVjsvAxM2Ldzep4rEbsP9x_pV3At4g=h1kVEtyhA@mail.gmail.com/
    Signed-off-by: Oliver Hartkopp <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: [email protected]
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

can: isotp: use unconditional synchronize_rcu() in isotp_release() [+ + +]
Author: Oliver Hartkopp <[email protected]>
Date:   Sun Jul 12 19:59:41 2026 +0200

    can: isotp: use unconditional synchronize_rcu() in isotp_release()
    
    commit 9b1a02e0d980ac6b0e36a90378f847062f81d7e4 upstream.
    
    isotp_notify() unregisters the (RCU) CAN filters via can_rx_unregister()
    and clears so->bound without waiting for a grace period. isotp_release()
    uses so->bound to decide whether it needs to call synchronize_rcu()
    before cancelling so->rxtimer, so when NETDEV_UNREGISTER runs first it
    skips that synchronize_rcu() and can cancel the timer while an
    in-flight isotp_rcv() is still executing and about to re-arm it via
    isotp_send_fc(), leading to a use-after-free timer callback on the
    freed socket.
    
    sakisho-bot remarked a problem with rtnl_lock held in isotp_notify(),
    therefore make isotp_release() always call synchronize_rcu() before
    cancelling the timers, regardless of so->bound. This still closes the
    original race (isotp_notify() clearing so->bound without waiting for
    in-flight isotp_rcv() callers before isotp_release() cancels the RX
    timer) without adding any RCU wait to the netdevice notifier path.
    
    Fixes: 14a4696bc311 ("can: isotp: isotp_release(): omit unintended hrtimer restart on socket release")
    Closes: https://lore.kernel.org/linux-can/[email protected]/
    Reported-by: Nico Yip <[email protected]>
    Signed-off-by: Oliver Hartkopp <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: [email protected]
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cgroup/cpuset: rebind mm mempolicy to effective_mems, not mems_allowed [+ + +]
Author: Farhad Alemi <[email protected]>
Date:   Mon Jul 6 10:20:23 2026 +0200

    cgroup/cpuset: rebind mm mempolicy to effective_mems, not mems_allowed
    
    commit b983c56426383e4a06fa5970c4e33cee879b1482 upstream.
    
    Creating a child cpuset where cpuset.mems is never set leads to a div/0
    when a VMA mempolicy with MPOL_F_RELATIVE_NODES rebinds in response to a
    CPU hotplug event.
    
    Reproduction steps:
     1) Create a cgroup w/ cpuset controls (do not set cpuset.mems)
     2) Move the task into the child cpuset
     3) Create a VMA mempolicy for that task with MPOL_F_RELATIVE_NODES
     4) unplug and hotplug a cpu
          echo 0 > /sys/devices/system/cpu/cpu1/online
          echo 1 > /sys/devices/system/cpu/cpu1/online
     5) mempolicy rebind does a div/0 in mpol_relative_nodemask on the
        call to __nodes_fold()
    
    The cpuset code passes (cs->mems_allowed) which is not guaranteed to have
    nodes to the rebind routine.  Use cs->effective_mems instead, which is
    guaranteed to have a non-empty nodemask once we reach that code path.
    
    Link: https://lore.kernel.org/all/CA+0ovCiEz6SP_sn3kN4Tb+_oC=eHMXy_Ffj=usV3wREdQrUtww@mail.gmail.com/
    Fixes: ae1c802382f7 ("cpuset: apply cs->effective_{cpus,mems}")
    Closes: https://lore.kernel.org/linux-mm/CA+0ovCgxbZkXa+OU8w3s84R3KNPNxxRfmsNR-udh+afQBbGNmw@mail.gmail.com/
    Suggested-by: Gregory Price <[email protected]>
    Suggested-by: Waiman Long <[email protected]>
    Acked-by: Waiman Long <[email protected]>
    Signed-off-by: Farhad Alemi <[email protected]>
    Cc: Andrew Morton <[email protected]>
    Cc: Alistair Popple <[email protected]>
    Cc: Byungchul Park <[email protected]>
    Cc: Gregory Price <[email protected]>
    Cc: "Huang, Ying" <[email protected]>
    Cc: Joshua Hahn <[email protected]>
    Cc: Matthew Brost <[email protected]>
    Cc: Rakie Kim <[email protected]>
    Cc: Rasmus Villemoes <[email protected]>
    Cc: Zi Yan <[email protected]>
    Cc: Tejun Heo <[email protected]>
    Cc: Ridong Chen <[email protected]>
    Cc: Johannes Weiner <[email protected]>
    Cc: "Michal Koutný" <[email protected]>
    Cc: <[email protected]>
    [ david: add a comment, slightly rephrase description ]
    Signed-off-by: David Hildenbrand (Arm) <[email protected]>
    Signed-off-by: Tejun Heo <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
char: tlclk: fix use-after-free in tlclk_cleanup() [+ + +]
Author: James Kim <[email protected]>
Date:   Sun May 3 19:11:31 2026 +0900

    char: tlclk: fix use-after-free in tlclk_cleanup()
    
    [ Upstream commit bbf003b7794d6ad6f939fdd29f1f1bde8ac554c1 ]
    
    This patch improves the module cleanup process in the tlclk driver to
    prevent potential use-after-free and race conditions.
    
    Currently, the file_operations structure does not specify the .owner
    field, which could allow the module to be unloaded while user-space
    processes are still interacting with the device. Additionally, the
    tlclk_cleanup() function frees the alarm_events memory before ensuring
    that blocked processes in the waitqueue are fully awakened and that the
    switchover_timer has completed.
    
    To address these cases, this patch:
    - Sets '.owner = THIS_MODULE' in tlclk_fops to safely defer module
      unloading while the device is in use.
    - Updates tlclk_cleanup() to explicitly wake up all blocked readers
      (wake_up_all), properly release hardware I/O regions, and safely
      delete the timer (timer_delete_sync) prior to freeing memory.
    
    Fixes: 1a80ba882730 ("[PATCH] Telecom Clock Driver for MPCBL0010 ATCA computer blade")
    Signed-off-by: James Kim <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
cifs: Create a new shared file holding smb2 pdu definitions [+ + +]
Author: Ronnie Sahlberg <[email protected]>
Date:   Tue Jul 14 18:04:01 2026 -0400

    cifs: Create a new shared file holding smb2 pdu definitions
    
    [ Upstream commit 0d35e382e4e96a4fd97a1438bc1b11a91d2d85a6 ]
    
    This file will contain all the definitions we need for SMB2 packets
    and will follow the naming convention of MS-SMB2.PDF as closely
    as possible to make it easier to cross-reference beween the definitions
    and the standard.
    
    The content of this file will mostly consist of migration of existing
    definitions in the cifs/smb2.pdu.h and ksmbd/smb2pdu.h files
    with some additional tweaks as the two files have diverged.
    
    This patch introduces the new smbfs_common/smb2pdu.h file
    and migrates the SMB2 header as well as TREE_CONNECT and TREE_DISCONNECT
    to the shared file.
    
    Signed-off-by: Ronnie Sahlberg <[email protected]>
    Reviewed-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Stable-dep-of: 53b7c271f06b ("smb: client: restrict implied bcc[0] exemption to responses without data area")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

cifs: remove check of list iterator against head past the loop body [+ + +]
Author: Jakob Koschel <[email protected]>
Date:   Tue Jul 14 18:04:02 2026 -0400

    cifs: remove check of list iterator against head past the loop body
    
    [ Upstream commit 00c796eecba4898194ea549679797ee28f89a92f ]
    
    When list_for_each_entry() completes the iteration over the whole list
    without breaking the loop, the iterator value will be a bogus pointer
    computed based on the head element.
    
    While it is safe to use the pointer to determine if it was computed
    based on the head element, either with list_entry_is_head() or
    &pos->member == head, using the iterator variable after the loop should
    be avoided.
    
    In preparation to limit the scope of a list iterator to the list
    traversal loop, use a dedicated pointer to point to the found element [1].
    
    Link: https://lore.kernel.org/all/CAHk-=wgRr_D8CB-D9Kg-c=EHreAsk5SqXPwr9Y7k9sA6cWXJ6w@mail.gmail.com/ [1]
    Reviewed-by: Paulo Alcantara (SUSE) <[email protected]>
    Signed-off-by: Jakob Koschel <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Stable-dep-of: 53b7c271f06b ("smb: client: restrict implied bcc[0] exemption to responses without data area")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

cifs: remove unused server parameter from calc_smb_size() [+ + +]
Author: Enzo Matsumiya <[email protected]>
Date:   Tue Jul 14 18:04:04 2026 -0400

    cifs: remove unused server parameter from calc_smb_size()
    
    [ Upstream commit 68ed14496b032b0c9ef21b38ee45c6c8f3a18ff1 ]
    
    This parameter is unused by the called function
    
    Reviewed-by: Paulo Alcantara (SUSE) <[email protected]>
    Signed-off-by: Enzo Matsumiya <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Stable-dep-of: 53b7c271f06b ("smb: client: restrict implied bcc[0] exemption to responses without data area")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
clk: imx: Add check for kcalloc [+ + +]
Author: Jiasheng Jiang <[email protected]>
Date:   Fri Jul 3 15:13:38 2026 +0300

    clk: imx: Add check for kcalloc
    
    commit ed713e2bc093239ccd380c2ce8ae9e4162f5c037 upstream.
    
    As the potential failure of the kcalloc(),
    it should be better to check it in order to
    avoid the dereference of the NULL pointer.
    
    Fixes: 379c9a24cc23 ("clk: imx: Fix reparenting of UARTs not associated with stdout")
    Signed-off-by: Jiasheng Jiang <[email protected]>
    Reviewed-by: Abel Vesa <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Abel Vesa <[email protected]>
    Signed-off-by: Alexandra Diupina <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

clk: qcom: a53: Corrected frequency multiplier for 1152MHz [+ + +]
Author: Phillip Varney <[email protected]>
Date:   Fri Jun 5 00:55:45 2026 +0000

    clk: qcom: a53: Corrected frequency multiplier for 1152MHz
    
    [ Upstream commit bb56147ea9fce98ebde1d367335ba006cba61fbd ]
    
    The 1152MHz frequency entry for the a53 currently selects a multiplier of 62, giving 1190MHz. This changes the mulitiplier to 60 giving the intended 1152MHz.
    
    Signed-off-by: Phillip Varney <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Fixes: 0c6ab1b8f894 ("clk: qcom: Add A53 PLL support")
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

clk: scmi: Fix clock rate rounding [+ + +]
Author: Cristian Marussi <[email protected]>
Date:   Fri May 8 16:32:46 2026 +0100

    clk: scmi: Fix clock rate rounding
    
    [ Upstream commit d0c81a38d06d446d341532700b3a4a43d3b00eb1 ]
    
    While the do_div() helper used for rounding expects its divisor argument
    to be a 32bits quantity, the currently provided divisor parameter is a
    64bit value that, as a consequence, is silently truncated and a possible
    source of bugs.
    
    Fix by using the proper div64_ul helper.
    
    Cc: Michael Turquette <[email protected]>
    Cc: Stephen Boyd <[email protected]>
    Cc: [email protected]
    Fixes: 7a8655e19bdb ("clk: scmi: Fix the rounding of clock rate")
    Signed-off-by: Cristian Marussi <[email protected]>
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Geert Uytterhoeven <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Brian Masney <[email protected]>
    Signed-off-by: Sudeep Holla <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
configfs: fix lockless traversals of ->s_children [+ + +]
Author: Al Viro <[email protected]>
Date:   Sat May 30 03:48:34 2026 -0400

    configfs: fix lockless traversals of ->s_children
    
    [ Upstream commit 9b9e8bb81c41fd27e7b57a1c936fde140548535f ]
    
    Having the parent directory locked protects entries from removal
    by another thread, but it does *not* protect cursors from being
    moved around by lseek() - or freed, for that matter.
    
    Fixes: 6f6107640625 ("configfs: Introduce configfs_dirent_lock")
    Reviewed-by: Jan Kara <[email protected]>
    Signed-off-by: Al Viro <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
coresight: cti: Fix DT filter signals silently ignored [+ + +]
Author: Yingchao Deng <[email protected]>
Date:   Sun Apr 26 17:59:34 2026 +0800

    coresight: cti: Fix DT filter signals silently ignored
    
    [ Upstream commit 551bb2fd5e4ed63d33aa11f07102cce5179b7595 ]
    
    In cti_plat_process_filter_sigs(), after allocating a temporary
    cti_trig_grp struct via kzalloc_obj(), the code never assigns tg->nr_sigs
    = nr_filter_sigs. Since kzalloc zero-initialises the struct, tg->nr_sigs
    remains 0. cti_plat_read_trig_group() guards with:
        if (!tgrp->nr_sigs)
            return 0;
    
    so it returns immediately without reading any signal indices from DT.
    
    Fix by assigning tg->nr_sigs before calling cti_plat_read_trig_group().
    
    Fixes: a5614770ab97 ("coresight: cti: Add device tree support for custom CTI")
    Signed-off-by: Yingchao Deng <[email protected]>
    Reviewed-by: Leo Yan <[email protected]>
    Signed-off-by: Suzuki K Poulose <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

coresight: etb10: restore atomic_t for shared reading state [+ + +]
Author: Runyu Xiao <[email protected]>
Date:   Wed Jul 15 12:54:05 2026 -0400

    coresight: etb10: restore atomic_t for shared reading state
    
    [ Upstream commit fa09f08ede3db3050ae16ae1ed92c902d0cada23 ]
    
    The etb10 miscdevice uses drvdata->reading as a shared exclusivity gate
    for userspace buffer access. etb_open() claims that gate with
    local_cmpxchg(), and etb_release() clears it with local_set().
    
    That gate is shared per-device state rather than CPU-local state. A
    running system can reach it whenever /dev/<etb> is opened, closed, and
    reopened by different tasks while the device remains registered, so the
    same drvdata->reading variable may be claimed on one CPU and later
    cleared on another.
    
    This code used to use atomic_t for the same gate, but commit
    27b10da8fff2 ("coresight: etb10: moving to local atomic operations")
    changed it to local_t even though the access pattern remained cross-task
    and cross-CPU. Restore atomic_t together with atomic_cmpxchg() and
    atomic_set() so the exclusivity gate again uses a primitive intended
    for shared state.
    
    The issue was found on Linux v6.18.21 by our static analysis tool while
    scanning surviving local_t-on-shared-state sites, and then manually
    reviewed against the live etb10 file-op path.
    
    It was runtime-validated with a reproducible QEMU no-device KCSAN PoC
    that kept the same report-local contract:
    
      1. use one shared struct etb_drvdata carrier and its
         drvdata->reading gate;
      2. call etb_open() and etb_release() sequentially on that gate to
         confirm the original claim/clear path;
      3. bind the open side to CPU0 and the release side to CPU1 for the
         same gate to show cross-CPU ownership;
      4. run bound workers that repeatedly race etb_open() and
         etb_release() on the same gate until KCSAN reports a target hit.
    
    The harness recorded:
    
      L1 passed open=1 release=1
      reading_after_open=1 reading_after_release=0
      L2 passed open_cpu=0 release_cpu=1
      cross_cpu_release=1 reading_after=0 open_ret=0
    
    Representative KCSAN excerpt from the no-device validation run:
    
      BUG: KCSAN: data-race in etb_open.constprop.0.isra.0 [vuln_msv]
    
      write to 0xffffffffc0003810 of 4 bytes by task 216 on cpu 1:
       etb_open.constprop.0.isra.0+0x38/0x80 [vuln_msv]
       l3_worker_thread_fn+0x4f/0xf0 [vuln_msv]
       kthread+0x17e/0x1c0
       ret_from_fork+0x22/0x30
    
      read to 0xffffffffc0003810 of 4 bytes by task 215 on cpu 0:
       etb_open.constprop.0.isra.0+0x18/0x80 [vuln_msv]
       l3_worker_thread_fn+0x4f/0xf0 [vuln_msv]
       kthread+0x17e/0x1c0
       ret_from_fork+0x22/0x30
    
      value changed: 0x00000000 -> 0x00000001
    
      Reported by Kernel Concurrency Sanitizer on:
      CPU: 0 PID: 215 Comm: etb10_l3_a Tainted: G           O       6.1.66 #2
    
    This no-device harness is not a real ETB10 hardware end-to-end run, but
    it preserves the same shared drvdata->reading gate and the same
    etb_open()/etb_release() claim/clear contract. No real ETB10 hardware
    was available for runtime testing.
    
    Build-tested with:
      make olddefconfig
      make -j"$(nproc)" drivers/hwtracing/coresight/coresight-etb10.o
    
    Fixes: 27b10da8fff2 ("coresight: etb10: moving to local atomic operations")
    Cc: [email protected]
    Signed-off-by: Runyu Xiao <[email protected]>
    Reviewed-by: James Clark <[email protected]>
    Signed-off-by: Suzuki K Poulose <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cpu: hotplug: Preserve per instance callback errors [+ + +]
Author: Bradley Morgan <[email protected]>
Date:   Fri Jun 19 16:37:17 2026 +0000

    cpu: hotplug: Preserve per instance callback errors
    
    commit 673db10729fb121ea1b16fe57791a0cb9eac1eb5 upstream.
    
    cpuhp_invoke_callback() unwinds earlier callbacks for the same
    hotplug state when one instance fails. The rollback path currently
    reuses ret, so a successful rollback can hide the original error and
    make the failed transition look successful.
    
    Keep the rollback result separate from the original error.
    
    Fixes: 724a86881d03 ("smp/hotplug: Callback vs state-machine consistency")
    Signed-off-by: Bradley Morgan <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cpufreq: conservative: Simplify frequency limit handling [+ + +]
Author: Lifeng Zheng <[email protected]>
Date:   Fri May 22 09:49:10 2026 +0530

    cpufreq: conservative: Simplify frequency limit handling
    
    [ Upstream commit 3494dff89779b73a6c70481c982e0e96d336454a ]
    
    cs_dbs_update() performs explicit checks against policy->min/max
    before updating the target frequency. These checks are redundant as
    __cpufreq_driver_target() already clamps the requested frequency to
    the valid policy limits.
    
    Remove the unnecessary boundary checks and simplify the update logic.
    
    This also fixes an issue introduced by commit 00bfe05889e9 ("cpufreq:
    conservative: Decrease frequency faster for deferred updates"), where
    stale target comparisons could cause frequency updates to be skipped
    entirely after deferred adjustments.
    
    Closes: https://lore.kernel.org/all/[email protected]/
    Fixes: 00bfe05889e9 ("cpufreq: conservative: Decrease frequency faster for deferred updates")
    Signed-off-by: Lifeng Zheng <[email protected]>
    Co-developed-by: Viresh Kumar <[email protected]>
    Signed-off-by: Viresh Kumar <[email protected]>
    Reviewed-by: Zhongqiu Han <[email protected]>
    Link: https://patch.msgid.link/292e6d937890f135e30ec0d2107eaad47cb9a976.1779423281.git.viresh.kumar@linaro.org
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

cpufreq: Documentation: fix conservative governor freq_step description [+ + +]
Author: Pengjie Zhang <[email protected]>
Date:   Wed Jun 3 13:56:35 2026 +0800

    cpufreq: Documentation: fix conservative governor freq_step description
    
    [ Upstream commit 03120e1425262c7d11f93362a88e579a1720390b ]
    
    The conservative governor documentation incorrectly states that setting
    freq_step to 0 will use the default 5% frequency step. In reality, since
    at least commit 8e677ce83bf4 ("[CPUFREQ] conservative: fixup governor to
    function more like ondemand logic"), freq_step=0 has always caused the
    governor to skip frequency updates entirely.
    
    Correct the documentation to reflect the actual behavior: freq_step=0
    disables frequency changes by the governor entirely.
    
    Fixes: 2a0e49279850 ("cpufreq: User/admin documentation update and consolidation")
    Signed-off-by: Pengjie Zhang <[email protected]>
    Reviewed-by: Zhongqiu Han <[email protected]>
    [ rjw: Subject adjustment ]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

cpufreq: Documentation: fix sampling_down_factor range [+ + +]
Author: Pengjie Zhang <[email protected]>
Date:   Mon May 18 21:34:57 2026 +0800

    cpufreq: Documentation: fix sampling_down_factor range
    
    [ Upstream commit 85524e651d20944399322d46fb97960337831d43 ]
    
    The ondemand governor implementation accepts sampling_down_factor values
    from 1 to 100000 via MAX_SAMPLING_DOWN_FACTOR, but the documentation in
    admin-guide/pm/cpufreq.rst still says the valid range is 1 to 100.
    
    Update the documentation to match the actual code.
    
    Fixes: 2a0e49279850 ("cpufreq: User/admin documentation update and consolidation")
    Reviewed-by: Zhongqiu Han <[email protected]>
    Signed-off-by: Pengjie Zhang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

cpufreq: Fix hotplug-suspend race during reboot [+ + +]
Author: Tianxiang Chen <[email protected]>
Date:   Wed Apr 8 22:19:14 2026 +0800

    cpufreq: Fix hotplug-suspend race during reboot
    
    commit a9029dd55696c651ee46912afa2a166fa456bb3e upstream.
    
    During system reboot, cpufreq_suspend() is called via the
    kernel_restart() -> device_shutdown() path. Unlike the normal system
    suspend path, the reboot path does not call freeze_processes(), so
    userspace processes and kernel threads remain active.
    
    This allows CPU hotplug operations to run concurrently with
    cpufreq_suspend(). The original code has no synchronization with CPU
    hotplug, leading to a race condition where governor_data can be freed
    by the hotplug path while cpufreq_suspend() is still accessing it,
    resulting in a null pointer dereference:
    
      Unable to handle kernel NULL pointer dereference
      Call Trace:
       do_kernel_fault+0x28/0x3c
       cpufreq_suspend+0xdc/0x160
       device_shutdown+0x18/0x200
       kernel_restart+0x40/0x80
       arm64_sys_reboot+0x1b0/0x200
    
    Fix this by adding cpus_read_lock()/cpus_read_unlock() to
    cpufreq_suspend() to block CPU hotplug operations while suspend is in
    progress.
    
    Fixes: 65650b35133f ("cpufreq: Avoid cpufreq_suspend() deadlock on system shutdown")
    Signed-off-by: Tianxiang Chen <[email protected]>
    Reviewed-by: Zhongqiu Han <[email protected]>
    Cc: All applicable <[email protected]>
    [ rjw: Changelog edits ]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

cpufreq: intel_pstate: Sync policy->cur during CPU offline [+ + +]
Author: Fushuai Wang <[email protected]>
Date:   Fri Jul 17 15:23:48 2026 -0400

    cpufreq: intel_pstate: Sync policy->cur during CPU offline
    
    [ Upstream commit bcbdaa1086c25a8a5d48e04e1b82fdfb0682b681 ]
    
    When a CPU goes offline with HWP disabled, intel_pstate_set_min_pstate()
    sets the MSR_IA32_PERF_CTL to minimum frequency to prevent SMT siblings
    from being restricted. However, the policy->cur value was not updated,
    leaving it at the previous value.
    
    When the CPU comes back online, governor->limits() checks if target_freq
    equals policy->cur and skips the frequency adjustment if they match. Since
    policy->cur still holds the previous value, the governor does not call
    cpufreq_driver->target to update MSR_IA32_PERF_CTL.
    
    Fix this by synchronizing policy->cur with the hardware state when setting
    minimum pstate during CPU offline.
    
    Fixes: bb18008f8086 ("intel_pstate: Set core to min P state during core offline")
    Cc: [email protected] # 3.15+
    Suggested-by: Srinivas Pandruvada <[email protected]>
    Signed-off-by: Fushuai Wang <[email protected]>
    [ rjw: Subject refinement ]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    [ replaced `cpu->pstate.min_freq` with `cpu->pstate.min_pstate * cpu->pstate.scaling` since 5.10 lacks the min_freq field ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

cpufreq: pcc: fix use-after-free and double free in _OSC evaluation [+ + +]
Author: Yuho Choi <[email protected]>
Date:   Thu Apr 16 10:46:21 2026 -0400

    cpufreq: pcc: fix use-after-free and double free in _OSC evaluation
    
    commit 266d3dd8b757b48a576e90f018b51f7b7563cc32 upstream.
    
    pcc_cpufreq_do_osc() calls acpi_evaluate_object() twice for the
    two-phase _OSC negotiation. Between the two calls it freed
    output.pointer but left output.length unchanged. Since
    acpi_evaluate_object() treats a non-zero length with a non-NULL
    pointer as an existing buffer to write into, the second call wrote
    into freed memory (use-after-free). The subsequent kfree(output.pointer)
    at out_free then freed the same pointer a second time (double free).
    
    Reset output.pointer to NULL and output.length to ACPI_ALLOCATE_BUFFER
    after freeing the first result, so ACPICA allocates a fresh buffer for
    each phase independently.
    
    Fixes: 0f1d683fb35d ("[CPUFREQ] Processor Clocking Control interface driver")
    Signed-off-by: Yuho Choi <[email protected]>
    Reviewed-by: Zhongqiu Han <[email protected]>
    Cc: All applicable <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
crypto: af_alg - Remove zero-copy support from skcipher and aead [+ + +]
Author: Eric Biggers <[email protected]>
Date:   Thu Jul 16 20:34:03 2026 -0700

    crypto: af_alg - Remove zero-copy support from skcipher and aead
    
    commit ffdd2bc378953b525aca61902534e753f1f8e734 upstream.
    
    The zero-copy support is one of the riskiest aspects of AF_ALG.  It
    allows userspace to request cryptographic operations directly on
    pagecache pages of files like the 'su' binary.  It also allows userspace
    to concurrently modify the memory which is being operated on, a recipe
    for TOCTOU vulnerabilities.
    
    While zero-copy support is more valuable in other areas of the kernel
    like the frequently used networking and file I/O code, it has far less
    value in AF_ALG, which is a niche UAPI.  AF_ALG primarily just exists
    for backwards compatibility with a small set of userspace programs such
    as 'iwd' that haven't yet been fixed to use userspace crypto code.
    
    Originally AF_ALG was intended to be used to access hardware crypto
    accelerators.  However, it isn't an efficient interface for that anyway,
    and it turned out to be rarely used in this way in practice.
    
    Thus, the risks of the zero-copy support in AF_ALG vastly outweigh its
    benefits.  Let's just remove it.
    
    This commit removes it from the "skcipher" and "aead" algorithm types.
    "hash" will be handled separately.
    
    This is a soft break, not a hard break.  Even after this commit, it
    still works to use splice() or sendfile() to transfer data to an AF_ALG
    request socket from a pipe or any file, respectively.  What changes is
    just that the kernel now makes an internal, stable copy of the data
    before doing the crypto operation.  So performance is slightly reduced,
    but the UAPI isn't broken.  And, very importantly, it's much safer.
    
    Tested with libkcapi/test.sh.  All its test cases still pass.  I also
    verified that this would have prevented the copy.fail exploit as well.
    I also used a custom test program to verify that sendfile() still works.
    
    Fixes: 8ff590903d5f ("crypto: algif_skcipher - User-space interface for skcipher operations")
    Fixes: 400c40cf78da ("crypto: algif - add AEAD support")
    Reported-by: Taeyang Lee <[email protected]>
    Link: https://copy.fail/
    Reported-by: Feng Ning <[email protected]>
    Closes: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Demi Marie Obenour <[email protected]>
    Cc: [email protected]
    Signed-off-by: Eric Biggers <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: algif_skcipher - force synchronous processing on trees without ctx->state [+ + +]
Author: Muhammet Kaan KILINÇ <[email protected]>
Date:   Thu Jul 16 02:58:37 2026 +0000

    crypto: algif_skcipher - force synchronous processing on trees without ctx->state
    
    The AIO/async path in skcipher_recvmsg() passes the socket-wide ctx->iv
    directly into the skcipher request. After io_submit() the socket lock is
    dropped and the request is processed asynchronously, so a concurrent
    sendmsg(ALG_SET_IV) can overwrite ctx->iv and make the in-flight request
    run under an attacker-controlled IV. For CTR/stream modes this is
    IV/keystream reuse and lets an unprivileged user recover the plaintext of
    a concurrent operation.
    
    Snapshotting ctx->iv into per-request storage for the async path is not
    sufficient. For ciphers with statesize == 0 - which includes cbc and ctr -
    the MSG_MORE inter-chunk IV chaining is carried solely by the in-place
    req->iv writeback, which a snapshot redirects into per-request memory that
    af_alg_free_resources() releases on completion, silently producing wrong
    output. Writing the IV back from the completion callback instead is not
    possible either: that would require lock_sock() there, but the callback can
    run in softirq/atomic context, so it must not sleep.
    
    Make the operation synchronous instead, which removes both the IV race and
    any writeback race. This is equivalent to the upstream resolution, commit
    fcc77d33a34c ("net: Remove support for AIO on sockets"), which removed the
    AIO socket path across net/ entirely and so produces the same end state for
    this file. This patch deviates from that commit deliberately: rather than
    removing AIO socket support tree-wide, which would be far too invasive for
    stable, it removes only the AIO branch in crypto/algif_skcipher.c.
    io_submit() now completes synchronously; AF_ALG async is rarely used in
    practice.
    
    The -EIOCBQUEUED check in skcipher_recvmsg() is now dead but harmless,
    and is left alone to keep the fix minimal.
    
    Tested on 6.6.y: attacker IV injection dropped from 2296/200000 to 0/200000
    after the change; MSG_MORE chunked CTR output bit-identical to single-shot.
    
    Reported-by: Muhammet Kaan KILINÇ <[email protected]>
    Fixes: e870456d8e7c ("crypto: algif_skcipher - overhaul memory management")
    Cc: <[email protected]>
    Signed-off-by: Muhammet Kaan KILINÇ <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: amcc - fix incorrect kernel-doc comment syntax in files [+ + +]
Author: Aditya Srivastava <[email protected]>
Date:   Thu Jul 16 19:46:03 2026 -0700

    crypto: amcc - fix incorrect kernel-doc comment syntax in files
    
    commit 73f04d3d800f3c8058bb00447e3e1c4cdc85a2b0 upstream.
    
    The opening comment mark '/**' is used for highlighting the beginning of
    kernel-doc comments.
    There are certain files in drivers/crypto/amcc, which follow this syntax,
    but the content inside does not comply with kernel-doc.
    Such lines were probably not meant for kernel-doc parsing, but are parsed
    due to the presence of kernel-doc like comment syntax(i.e, '/**'), which
    causes unexpected warnings from kernel-doc.
    
    E.g., presence of kernel-doc like comment in
    drivers/crypto/amcc/crypto4xx_alg.c at header, and some other lines,
    causes these warnings by kernel-doc:
    
    "warning: expecting prototype for AMCC SoC PPC4xx Crypto Driver(). Prototype was for set_dynamic_sa_command_0() instead"
    "warning: Function parameter or member 'dir' not described in 'set_dynamic_sa_command_0'"
    etc..
    
    Provide a simple fix by replacing such occurrences with general comment
    format, i.e. '/*', to prevent kernel-doc from parsing it.
    
    Signed-off-by: Aditya Srivastava <[email protected]>
    Acked-by: Randy Dunlap <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Eric Biggers <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: amlogic - avoid double cleanup in meson_crypto_probe() [+ + +]
Author: Dawei Feng <[email protected]>
Date:   Fri May 8 12:24:16 2026 +0800

    crypto: amlogic - avoid double cleanup in meson_crypto_probe()
    
    commit 6d827ade51a24e18d81afb9f32756d339520a14c upstream.
    
    When meson_allocate_chanlist() fails after a partial allocation, it already
    unwinds the allocated chanlist state through its local error path.
    meson_crypto_probe() then jump to error_flow and calls
    meson_free_chanlist() again, causing the same per-flow resources to be torn
    down twice. In the reproduced failure path, the second teardown
    re-entered crypto_engine_exit() on an already destroyed worker and KASAN
    reported a slab-use-after-free in kthread_destroy_worker().
    
    Prevent double-free by handling partial allocation failures locally within
    meson_allocate_chanlist() and skipping the outer cleanup path.
    
    The bug was first flagged by an experimental analysis tool we are
    developing for kernel memory-management bugs while analyzing
    v6.13-rc1. The tool is still under development and is not yet publicly
    available.
    
    The bug was reproduced in a QEMU x86_64 guest booted with KASAN on v7.1,
    using the reproducer under tools/testing/meson_crypto_probe. The reproducer
    forces the second dma_alloc_attrs() call in the gxl-crypto probe path to
    return NULL, making meson_allocate_chanlist() fail after partial
    initialization. On the unpatched kernel this reliably triggered a
    slab-use-after-free. With this fix applied, the same reproducer no longer
    emits any KASAN report and the probe fails cleanly with -ENOMEM.
    
        ==================================================================
        BUG: KASAN: slab-use-after-free in kthread_destroy_worker+0xb2/0xd0
        Read of size 8 at addr ff1100010c057a68 by task insmod/265
    
        CPU: 1 UID: 0 PID: 265 Comm: insmod Tainted: G           O        7.1.0-rc2-00376-g810af9adc907-dirty #10 PREEMPT(lazy)
        Tainted: [O]=OOT_MODULE
        Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.15.0-1 04/01/2014
        Call Trace:
         <TASK>
         dump_stack_lvl+0x68/0xa0
         print_report+0xcb/0x5e0
         ? __virt_addr_valid+0x21d/0x3f0
         ? kthread_destroy_worker+0xb2/0xd0
         ? kthread_destroy_worker+0xb2/0xd0
         kasan_report+0xca/0x100
         ? kthread_destroy_worker+0xb2/0xd0
         kthread_destroy_worker+0xb2/0xd0
         meson_crypto_probe+0x4d0/0xc10 [amlogic_gxl_crypto]
         platform_probe+0x99/0x140
         really_probe+0x1c6/0x6a0
         ? __pfx___device_attach_driver+0x10/0x10
         __driver_probe_device+0x248/0x310
         ? acpi_driver_match_device+0xb0/0x100
         driver_probe_device+0x48/0x210
         ? __pfx___device_attach_driver+0x10/0x10
         __device_attach_driver+0x160/0x320
         bus_for_each_drv+0x104/0x190
         ? __pfx_bus_for_each_drv+0x10/0x10
         ? _raw_spin_unlock_irqrestore+0x2c/0x50
         __device_attach+0x19d/0x3b0
         ? __pfx___device_attach+0x10/0x10
         ? do_raw_spin_unlock+0x53/0x220
         device_initial_probe+0x78/0xa0
         bus_probe_device+0x5b/0x130
         device_add+0xcfd/0x1430
         ? __pfx_device_add+0x10/0x10
         ? insert_resource+0x34/0x50
         ? lock_release+0xc9/0x290
         platform_device_add+0x24e/0x590
         ? __pfx_meson_crypto_probe_repro_init+0x10/0x10 [meson_crypto_probe_repro]
         meson_crypto_probe_repro_init+0x330/0xff0 [meson_crypto_probe_repro]
         do_one_initcall+0xc0/0x450
         ? __pfx_do_one_initcall+0x10/0x10
         ? _raw_spin_unlock_irqrestore+0x2c/0x50
         ? __create_object+0x59/0x80
         ? kasan_unpoison+0x27/0x60
         do_init_module+0x27b/0x7d0
         ? __pfx_do_init_module+0x10/0x10
         ? kasan_quarantine_put+0x84/0x1d0
         ? kfree+0x32c/0x510
         ? load_module+0x561e/0x5ff0
         load_module+0x54fe/0x5ff0
         ? __pfx_load_module+0x10/0x10
         ? security_file_permission+0x20/0x40
         ? kernel_read_file+0x23d/0x6e0
         ? mmap_region+0x235/0x4a0
         ? __pfx_kernel_read_file+0x10/0x10
         ? __file_has_perm+0x2c0/0x3e0
         init_module_from_file+0x158/0x180
         ? __pfx_init_module_from_file+0x10/0x10
         ? __lock_acquire+0x45a/0x1ba0
         ? idempotent_init_module+0x315/0x610
         ? lock_release+0xc9/0x290
         ? lockdep_init_map_type+0x4b/0x220
         ? do_raw_spin_unlock+0x53/0x220
         idempotent_init_module+0x330/0x610
         ? __pfx_idempotent_init_module+0x10/0x10
         ? __pfx_cred_has_capability.isra.0+0x10/0x10
         ? ksys_mmap_pgoff+0x385/0x520
         __x64_sys_finit_module+0xbe/0x120
         do_syscall_64+0x115/0x690
         entry_SYSCALL_64_after_hwframe+0x77/0x7f
        RIP: 0033:0x7f7d6d31690d
        Code: 5b 41 5c c3 66 0f 1f 84 00 00 00 00 00 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d f3 b4 0f 00 f7 d8 >
        RSP: 002b:00007fffc027ac68 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
        RAX: ffffffffffffffda RBX: 000055f7b81967c0 RCX: 00007f7d6d31690d
        RDX: 0000000000000000 RSI: 000055f79a0d6cd2 RDI: 0000000000000003
        RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
        R10: 0000000000000003 R11: 0000000000000246 R12: 000055f79a0d6cd2
        R13: 000055f7b8196790 R14: 000055f79a0d5888 R15: 000055f7b81968e0
         </TASK>
    
    Fixes: 48fe583fe541 ("crypto: amlogic - Add crypto accelerator for amlogic GXL")
    Cc: [email protected]
    Signed-off-by: Zilin Guan <[email protected]>
    Signed-off-by: Dawei Feng <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: asymmetric_keys - fix OOB read in pefile_digest_pe_contents [+ + +]
Author: Weiming Shi <[email protected]>
Date:   Thu Apr 30 10:36:34 2026 -0700

    crypto: asymmetric_keys - fix OOB read in pefile_digest_pe_contents
    
    [ Upstream commit f7dd32c5179d7755de18e21d5674b08f9e5cb180 ]
    
    pefile_digest_pe_contents() computes the trailing-data hash length as
    pelen - (hashed_bytes + certs_size). A crafted PE can make the addition
    exceed pelen, causing the unsigned subtraction to underflow to ~4 GiB.
    This is passed to crypto_shash_update() which reads out of bounds and
    panics on unmapped vmalloc guard pages.
    
     BUG: unable to handle page fault for address: ffffc900038d8000
     Oops: Oops: 0000 [#1] SMP KASAN NOPTI
     RIP: 0010:sha256_blocks_generic (lib/crypto/sha256.c:152)
     Call Trace:
      <TASK>
      __sha256_update (lib/crypto/sha256.c:208)
      crypto_sha256_update (crypto/sha256.c:142)
      verify_pefile_signature (crypto/asymmetric_keys/verify_pefile.c:436)
      kexec_kernel_verify_pe_sig (kernel/kexec_file.c:151)
      __do_sys_kexec_file_load (kernel/kexec_file.c:406)
      do_syscall_64 (arch/x86/entry/syscall_64.c:94)
      entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:121)
      </TASK>
     Kernel panic - not syncing: Fatal exception
    
    Validate that the addition does not overflow and the result does not
    exceed pelen before the subtraction. Return -ELIBBAD on failure.
    
    Fixes: af316fc442ef ("pefile: Digest the PE binary and compare to the PKCS#7 data")
    Reported-by: Xiang Mei <[email protected]>
    Signed-off-by: Weiming Shi <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: atmel - Drop explicit initialization of struct i2c_device_id::driver_data to 0 [+ + +]
Author: Uwe Kleine-König <[email protected]>
Date:   Mon Jul 20 11:48:12 2026 -0400

    crypto: atmel - Drop explicit initialization of struct i2c_device_id::driver_data to 0
    
    [ Upstream commit d86ad3911a5d4549297ed810ee450e5772fd665f ]
    
    These drivers don't use the driver_data member of struct i2c_device_id,
    so don't explicitly initialize this member.
    
    This prepares putting driver_data in an anonymous union which requires
    either no initialization or named designators. But it's also a nice
    cleanup on its own.
    
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Stable-dep-of: ea5e57cc9718 ("crypto: atmel-sha204a - drop hwrng quality reduction for ATSHA204A")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: atmel-sha204a - drop hwrng quality reduction for ATSHA204A [+ + +]
Author: Thorsten Blum <[email protected]>
Date:   Mon Jul 20 11:48:13 2026 -0400

    crypto: atmel-sha204a - drop hwrng quality reduction for ATSHA204A
    
    [ Upstream commit ea5e57cc97185329dcc5ebdcaae7e1500bf0ad0b ]
    
    Commit 8006aff15516 ("crypto: atmel-sha204a - Set hwrng quality to
    lowest possible") reduced the hwrng quality to 1 based on a review by
    Bill Cox [1]. However, despite its title, the review only tested the
    ATSHA204, not the ATSHA204A.
    
    In the same thread, Atmel engineer Landon Cox wrote "this behavior has
    been eliminated entirely"[2] in the ATSHA204A and "this problem does not
    affect the ATECC108 or the ATECC108A (or the ATSHA204A)"[3].
    
    According to the official ATSHA204A datasheet [4], the device contains a
    high-quality hardware RNG that combines its output with an internal seed
    value stored in EEPROM or SRAM to generate random numbers. The device
    also implements all security functions using SHA-256, and the driver
    uses the chip's Random command in seed-update mode.
    
    Keep 'quality = 1' for ATSHA204, but drop the explicit hwrng quality
    reduction for ATSHA204A and fall back to the hwrng core default.
    
    [1] https://www.metzdowd.com/pipermail/cryptography/2014-December/023858.html
    [2] https://www.metzdowd.com/pipermail/cryptography/2014-December/023852.html
    [3] https://www.metzdowd.com/pipermail/cryptography/2014-December/023886.html
    [4] https://ww1.microchip.com/downloads/en/DeviceDoc/ATSHA204A-Data-Sheet-40002025A.pdf
    
    Fixes: 8006aff15516 ("crypto: atmel-sha204a - Set hwrng quality to lowest possible")
    Cc: [email protected]
    Signed-off-by: Thorsten Blum <[email protected]>
    Reviewed-by: Ard Biesheuvel <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: atmel-sha204a - fix blocking and non-blocking rng logic [+ + +]
Author: Lothar Rubusch <[email protected]>
Date:   Sun Apr 26 21:29:47 2026 +0000

    crypto: atmel-sha204a - fix blocking and non-blocking rng logic
    
    [ Upstream commit 319400fc5ee15db5793aa45f854968141326effc ]
    
    The blocking and non-blocking paths were failing to provide valid entropy
    due to improper buffer management. Reading the buffer starting from byte 1,
    only fetch the 32 bytes of random data from the return message.
    
    Tested on an Atmel SHA204A device.
    
    Before (here for blocking), tests showed repeatedly reading reduced bytes.
    $ head -c 32 /dev/hwrng | hexdump -C
    00000000  02 28 85 b3 47 40 f2 ee  00 00 00 00 00 00 00 00  |.(..G@..........|
    00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    00000020
    
    After, the result will be similar to the following:
    $ head -c 32 /dev/hwrng | hexdump -C
    00000000  5a fc 3f 13 14 68 fe 06  68 0a bd 04 83 6e 09 69  |Z.?..h..h....n.i|
    00000010  75 ff cf 87 10 84 3b c9  c1 df ae eb 45 53 4c c3  |u.....;.....ESL.|
    00000020
    
    Fixes: da001fb651b0 ("crypto: atmel-i2c - add support for SHA204A random number generator")
    Suggested-by: Ard Biesheuvel <[email protected]>
    Signed-off-by: Lothar Rubusch <[email protected]>
    Tested-by: Thorsten Blum <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: atmel-sha204a - Mark OF related data as maybe unused [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Mon Jul 20 11:48:11 2026 -0400

    crypto: atmel-sha204a - Mark OF related data as maybe unused
    
    [ Upstream commit 75f3d950054389e2556277e42170e37dd97cd872 ]
    
    The driver can be compile tested with !CONFIG_OF making certain data
    unused:
    
      drivers/crypto/atmel-sha204a.c:129:34: error: ‘atmel_sha204a_dt_ids’ defined but not used [-Werror=unused-const-variable=]
    
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Stable-dep-of: ea5e57cc9718 ("crypto: atmel-sha204a - drop hwrng quality reduction for ATSHA204A")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: caam - use print_hex_dump_devel to guard key hex dumps [+ + +]
Author: Thorsten Blum <[email protected]>
Date:   Mon Apr 27 18:39:37 2026 +0200

    crypto: caam - use print_hex_dump_devel to guard key hex dumps
    
    commit 3f57657b6ea23f933371f2c2846322f441773cee upstream.
    
    Use print_hex_dump_devel() for dumping sensitive key material in
    *_setkey() and gen_split_key() to avoid leaking secrets at runtime when
    CONFIG_DYNAMIC_DEBUG is enabled.
    
    Fixes: 6e005503199b ("crypto: caam - print debug messages at debug level")
    Cc: [email protected]
    Signed-off-by: Thorsten Blum <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: caam - use print_hex_dump_devel to guard key hex dumps again [+ + +]
Author: Thorsten Blum <[email protected]>
Date:   Mon Apr 27 18:39:39 2026 +0200

    crypto: caam - use print_hex_dump_devel to guard key hex dumps again
    
    commit 8005dc808bcce7d6cc2ae015a3cde1683bee602d upstream.
    
    Use print_hex_dump_devel() for dumping sensitive key material in
    *_setkey() to avoid leaking secrets at runtime when CONFIG_DYNAMIC_DEBUG
    is enabled.
    
    Fixes: 8d818c105501 ("crypto: caam/qi2 - add DPAA2-CAAM driver")
    Fixes: 226853ac3ebe ("crypto: caam/qi2 - add skcipher algorithms")
    Cc: [email protected]
    Signed-off-by: Thorsten Blum <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: cavium/cpt - fix DMA cleanup using wrong loop index [+ + +]
Author: Felix Gu <[email protected]>
Date:   Tue Jun 2 22:55:35 2026 +0800

    crypto: cavium/cpt - fix DMA cleanup using wrong loop index
    
    [ Upstream commit 9dbf173bd32d5f81b005008b682bfb50aa093455 ]
    
    The sg_cleanup error path used list[i] instead of list[j] when unmapping
    DMA buffers, leaking successfully mapped entries and repeatedly unmapping
    the failed one.
    
    Fixes: c694b233295b ("crypto: cavium - Add the Virtual Function driver for CPT")
    Signed-off-by: Felix Gu <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: ccp - Treat zero-length cert chain as query for blob lengths [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Mon May 4 15:28:12 2026 -0700

    crypto: ccp - Treat zero-length cert chain as query for blob lengths
    
    [ Upstream commit ef8c9dacda2871accd64e3eda951fef6b788b1ea ]
    
    When handling a PDH export, treat a zero-length userspace cert chain buffer
    as a request to query the length of the relevant blobs.  Failure to account
    for the zero-length buffer trips a BUG_ON() when running with
    CONFIG_DEBUG_VIRTUAL=y due to trying to get the physical address of the
    ZERO_SIZE_PTR (returned by kzalloc() on the bogus allocation).
    
       kernel BUG at arch/x86/mm/physaddr.c:28 !
      Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTI
      CPU: 30 UID: 0 PID: 28580 Comm: syz.2.18 Kdump: loaded
      Tainted: G        W           6.18.16-smp-DEV #1 NONE
      Tainted: [W]=WARN
      Hardware name: Google, Inc. Arcadia_IT_80/Arcadia_IT_80, BIOS 12.62.0-0 11/19/2025
       RIP: 0010:__phys_addr+0x16a/0x180 arch/x86/mm/physaddr.c:28
      RSP: 0018:ffffc9008329fc80 EFLAGS: 00010293
      RAX: ffffffff8179110a RBX: 0000778000000010 RCX: ffff8884e6992600
      RDX: 0000000000000000 RSI: 0000000080000010 RDI: 0000778000000010
      RBP: ffffc9008329fdf0 R08: 0000000000000dc0 R09: 00000000ffffffff
      R10: dffffc0000000000 R11: fffffbfff126d297 R12: dffffc0000000000
      R13: 1ffff92010653fc8 R14: 0000000080000010 R15: dffffc0000000000
      FS:  0000555556bec9c0(0000) GS:ffff88aa4ce1c000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00007fd3159e7000 CR3: 00000004fbc44000 CR4: 0000000000350ef0
      Call Trace:
       <TASK>
        [<ffffffff853d3869>] sev_ioctl_do_pdh_export+0x559/0x7a0 drivers/crypto/ccp/sev-dev.c:2308
        [<ffffffff853d1fdd>] sev_ioctl+0x2cd/0x480 drivers/crypto/ccp/sev-dev.c:2556
        [<ffffffff82549ebc>] vfs_ioctl fs/ioctl.c:52 [inline]
        [<ffffffff82549ebc>] __do_sys_ioctl fs/ioctl.c:598 [inline]
        [<ffffffff82549ebc>] __se_sys_ioctl+0xfc/0x170 fs/ioctl.c:584
        [<ffffffff8630115f>] do_syscall_x64 arch/x86/entry/syscall_64.c:64 [inline]
        [<ffffffff8630115f>] do_syscall_64+0x9f/0xf40 arch/x86/entry/syscall_64.c:98
       [<ffffffff81000136>] entry_SYSCALL_64_after_hwframe+0x76/0x7e
      RIP: 0033:0x7fd3158eac39
       </TASK>
    
    Thankfully, the bug is benign outside of CONFIG_DEBUG_VIRTUAL=y as getting
    the physical address is just arithmetic, and the PSP errors out before
    trying to write to the garbage address (which it must, otherwise querying
    the blob lengths would clobber memory at pfn=0).
    
    Fixes: 76a2b524a4b1 ("crypto: ccp: Implement SEV_PDH_CERT_EXPORT ioctl command")
    Signed-off-by: Sean Christopherson <[email protected]>
    Reviewed-by: Tom Lendacky <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: crypto4xx - Remove ahash-related code [+ + +]
Author: Herbert Xu <[email protected]>
Date:   Thu Jul 16 19:46:04 2026 -0700

    crypto: crypto4xx - Remove ahash-related code
    
    commit 97855e7f1ccf4917f305baab199edb9f2595ff5b upstream.
    
    The hash implementation in crypto4xx has been disabled since 2009.
    As nobody has tried to fix this remove all the dead code.
    
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Eric Biggers <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: crypto4xx - Remove insecure and unused rng_alg [+ + +]
Author: Eric Biggers <[email protected]>
Date:   Thu Jul 16 19:46:05 2026 -0700

    crypto: crypto4xx - Remove insecure and unused rng_alg
    
    commit 7811ec9e973d2c9e465083699f0c8240b98cb8c4 upstream.
    
    Remove crypto4xx_rng, as it is insecure and unused:
    
    - It has only a 64-bit security strength, which is highly inadequate.
      This can be seen by the fact that crypto4xx_hw_init() seeds it with
      only 64 bits of entropy, and the fact that the original commit
      mentions that it implements ANSI X9.17 Annex C.
    
      Another issue was that this driver didn't implement the crypto_rng API
      correctly, as crypto4xx_prng_generate() didn't return 0 on success.
    
    - No user of this code is known.  It's usable only theoretically via the
      "rng" algorithm type of AF_ALG.  But userspace actually just uses the
      actual Linux RNG (/dev/random etc) instead.  And rng_algs don't
      contribute entropy to the actual Linux RNG either.  (This may have
      been confused with hwrng, which does contribute entropy.)
    
    Fixes: d072bfa48853 ("crypto: crypto4xx - add prng crypto support")
    Cc: [email protected]
    Signed-off-by: Eric Biggers <[email protected]>
    Acked-by: Christian Lamparter <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: drbg - Fix drbg_max_addtl() on 64-bit kernels [+ + +]
Author: Eric Biggers <[email protected]>
Date:   Sun Apr 19 23:33:48 2026 -0700

    crypto: drbg - Fix drbg_max_addtl() on 64-bit kernels
    
    commit 6f49f00c981bbb9ef602966f19bfdbef46b681d2 upstream.
    
    On 64-bit kernels, drbg_max_addtl() returns 2**35 bytes.  That's too
    large, for two reasons:
    
    1. SP800-90A says the maximum limit is 2**35 *bits*, not 2**35 bytes.
       So the implemented limit has confused bits and bytes.
    
    2. When drbg_kcapi_hash() calls crypto_shash_update() on the additional
       information string, the length is implicitly cast to 'unsigned int'.
       That truncates the additional information string to U32_MAX bytes.
    
    Fix the maximum additional information string length to always be
    U32_MAX - 1, causing an error to be returned for any longer lengths.
    
    Fixes: 541af946fe13 ("crypto: drbg - SP800-90A Deterministic Random Bit Generator")
    Cc: [email protected]
    Signed-off-by: Eric Biggers <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: drbg - Fix returning success on failure in CTR_DRBG [+ + +]
Author: Eric Biggers <[email protected]>
Date:   Sun Apr 19 23:33:45 2026 -0700

    crypto: drbg - Fix returning success on failure in CTR_DRBG
    
    commit 39a31ad9e2a5ed7e9c9c6f711dca96c8c8f5f26b upstream.
    
    drbg_ctr_generate() sometimes returns success when it fails, leaving the
    output buffer uninitialized.  Fix it.
    
    Fixes: cde001e4c3c3 ("crypto: rng - RNGs must return 0 in success case")
    Cc: [email protected]
    Signed-off-by: Eric Biggers <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: drbg - Fix the fips_enabled priority boost [+ + +]
Author: Eric Biggers <[email protected]>
Date:   Sun Apr 19 23:33:49 2026 -0700

    crypto: drbg - Fix the fips_enabled priority boost
    
    commit a8a1f93080efc83a9ff8452954429ae379e9e614 upstream.
    
    When fips_enabled=1, it seems to have been intended for one of the
    algorithms defined in crypto/drbg.c to be the highest priority "stdrng"
    algorithm, so that it is what is used by "stdrng" users.
    
    However, the code only boosts the priority to 400, which is less than
    the priority 500 used in drivers/crypto/caam/caamprng.c.  Thus, the CAAM
    RNG could be used instead.
    
    Fix this by boosting the priority by 2000 instead of 200.
    
    Fixes: 541af946fe13 ("crypto: drbg - SP800-90A Deterministic Random Bit Generator")
    Cc: [email protected]
    Signed-off-by: Eric Biggers <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: ecc - Fix carry overflow in vli multiplication [+ + +]
Author: Anastasia Tishchenko <[email protected]>
Date:   Wed May 13 13:57:40 2026 +0300

    crypto: ecc - Fix carry overflow in vli multiplication
    
    commit 27b536a2ec8e2f85a0380c2d13c9ecbc7aaab406 upstream.
    
    The carry flag calculation fails when r01.m_high is saturated
    (0xFFFFFFFFFFFFFFFF) and addition of lower bits overflows.
    
    The condition (r01.m_high < product.m_high) doesn't handle the case
    where r01.m_high == product.m_high and an additional carry exists
    from lower-bit overflow.
    
    When commit 3c4b23901a0c ("crypto: ecdh - Add ECDH software support")
    introduced crypto/ecc.c, it split the muladd() function in the
    micro-ecc library into separate mul_64_64() and add_128_128() helpers.
    It seems the check got lost in translation.
    
    Add proper handling for this boundary by accounting for the carry
    from the lower addition.
    
    Fixes: 3c4b23901a0c ("crypto: ecdh - Add ECDH software support")
    Signed-off-by: Anastasia Tishchenko <[email protected]>
    Cc: [email protected] # v4.8+
    Reviewed-by: Lukas Wunner <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: ecrdsa - fix unknown OID check in ecrdsa_param_curve [+ + +]
Author: Thorsten Blum <[email protected]>
Date:   Sat May 2 21:09:04 2026 +0200

    crypto: ecrdsa - fix unknown OID check in ecrdsa_param_curve
    
    [ Upstream commit 2d7b2cfc59998baf5e8622a24dc28f69a5212e06 ]
    
    The ->curve_oid check in ecrdsa_param_curve() rejects the valid enum
    value 0 (OID_id_dsa_with_sha1), but look_up_OID() returns OID__NR on
    lookup failure. Compare ->curve_oid with OID__NR instead to ensure that
    only unknown OIDs return -EINVAL.
    
    Fixes: 0d7a78643f69 ("crypto: ecrdsa - add EC-RDSA (GOST 34.10) algorithm")
    Signed-off-by: Thorsten Blum <[email protected]>
    Reviewed-by: Lukas Wunner <[email protected]>
    Reviewed-by: Vitaly Chikunov <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: marvell/octeontx - fix DMA cleanup using wrong loop index [+ + +]
Author: Felix Gu <[email protected]>
Date:   Tue Jun 2 22:38:26 2026 +0800

    crypto: marvell/octeontx - fix DMA cleanup using wrong loop index
    
    [ Upstream commit 7891c64c0520519782470ba29bac8a5761e295d8 ]
    
    The sg_cleanup path used list[i] instead of list[j] when unmapping DMA
    buffers, leaking successfully mapped entries and repeatedly unmapping
    the failed one.
    
    Fixes: 10b4f09491bf ("crypto: marvell - add the Virtual Function driver for CPT")
    Signed-off-by: Felix Gu <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: pcrypt - restore callback for non-parallel fallback [+ + +]
Author: Ruijie Li <[email protected]>
Date:   Mon May 25 19:45:21 2026 +0800

    crypto: pcrypt - restore callback for non-parallel fallback
    
    commit ed459fe319376e876de433d12b6c6772e612ca36 upstream.
    
    pcrypt installs pcrypt_aead_done() on the child AEAD request before
    trying to submit it through padata.  If padata_do_parallel() returns
    -EBUSY, pcrypt falls back to calling the child AEAD directly.
    
    That fallback must not keep the padata completion callback.  Otherwise
    an asynchronous completion runs pcrypt_aead_done() even though the
    request was never enrolled in padata.
    
    Restore the original request callback and callback data before calling
    the child AEAD directly.  This keeps the fallback path aligned with a
    direct AEAD request while leaving the parallel path unchanged.
    
    Fixes: 662f2f13e66d ("crypto: pcrypt - Call crypto layer directly when padata_do_parallel() return -EBUSY")
    Cc: [email protected]
    Reported-by: Yuan Tan <[email protected]>
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Reported-by: Zhengchuan Liang <[email protected]>
    Reported-by: Xin Liu <[email protected]>
    Assisted-by: Codex:gpt-5.4
    Signed-off-by: Ruijie Li <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: qat - fix restarting state leak on allocation failure [+ + +]
Author: Ahsan Atta <[email protected]>
Date:   Mon Jul 20 16:44:29 2026 -0400

    crypto: qat - fix restarting state leak on allocation failure
    
    [ Upstream commit 7d3ed20f7e46b3e991936fedd7a28f3ff4aec8d2 ]
    
    In adf_dev_aer_schedule_reset(), ADF_STATUS_RESTARTING is set before
    allocating reset_data. If the allocation fails, the function returns
    -ENOMEM without queuing reset work, so nothing ever clears the bit.
    This leaves the device permanently stuck in the restarting state,
    causing all subsequent reset attempts to be silently skipped.
    
    Fix this by using test_and_set_bit() to atomically claim the
    RESTARTING state, preventing duplicate reset scheduling races under
    concurrent fatal error reporting. If the subsequent allocation fails,
    clear the bit to restore clean state so future reset attempts can
    proceed.
    
    Cc: [email protected]
    Fixes: d8cba25d2c68 ("crypto: qat - Intel(R) QAT driver framework")
    Signed-off-by: Ahsan Atta <[email protected]>
    Co-developed-by: Maksim Lukoshkov <[email protected]>
    Signed-off-by: Maksim Lukoshkov <[email protected]>
    Reviewed-by: Giovanni Cabiddu <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: qat - fix VF2PF work teardown race in adf_disable_sriov() [+ + +]
Author: Giovanni Cabiddu <[email protected]>
Date:   Wed Jul 15 07:15:23 2026 -0400

    crypto: qat - fix VF2PF work teardown race in adf_disable_sriov()
    
    [ Upstream commit 277281c10c63791067d24d421f7c43a15faa9096 ]
    
    The VF2PF interrupt handler queues PF-side response work that stores a
    raw pointer to per-VF state (struct adf_accel_vf_info). Currently,
    adf_disable_sriov() destroys per-VF mutexes and frees vf_info without
    stopping new VF2PF work or waiting for in-flight workers to complete. A
    concurrently scheduled or already queued worker can then dereference
    freed memory.
    
    This manifests as a use-after-free when KASAN is enabled:
    
      BUG: KASAN: null-ptr-deref in mutex_lock+0x76/0xe0
      Write of size 8 at addr 0000000000000260 by task kworker/24:2/...
      Workqueue: qat_pf2vf_resp_wq adf_iov_send_resp [intel_qat]
      Call Trace:
        kasan_report+0x119/0x140
        mutex_lock+0x76/0xe0
        adf_gen4_pfvf_send+0xd4/0x1f0 [intel_qat]
        adf_recv_and_handle_vf2pf_msg+0x290/0x360 [intel_qat]
        adf_iov_send_resp+0x8c/0xe0 [intel_qat]
        process_one_work+0x6ac/0xfd0
        worker_thread+0x4dd/0xd30
        kthread+0x326/0x410
        ret_from_fork+0x33b/0x670
    
    Add a PF-local flag, vf2pf_disabled, that gates work queueing, worker
    processing, and interrupt re-enabling during teardown. Set this flag
    atomically with the hardware interrupt mask inside
    adf_disable_all_vf2pf_interrupts(). After masking, synchronize the AE
    cluster MSI-X interrupt and flush the PF response workqueue before
    tearing down per-VF locks and state so all in-flight work completes
    before vf_info is destroyed.
    
    Introduce adf_enable_all_vf2pf_interrupts() to clear the flag and
    unmask all VF2PF interrupts under the same lock when SR-IOV is
    re-enabled. This ensures the software flag and hardware state transition
    atomically on both the enable and disable paths.
    
    Cc: [email protected]
    Fixes: ed8ccaef52fa ("crypto: qat - Add support for SRIOV")
    Signed-off-by: Giovanni Cabiddu <[email protected]>
    Reviewed-by: Ahsan Atta <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: qat - validate RSA CRT component lengths [+ + +]
Author: Giovanni Cabiddu <[email protected]>
Date:   Mon Jul 20 21:27:55 2026 -0400

    crypto: qat - validate RSA CRT component lengths
    
    [ Upstream commit b3ac78756588059729b9195fcc9f4b37d54057a5 ]
    
    The generic RSA key parser (rsa_helper.c) bounds each CRT component (p,
    q, dp, dq, qinv) by the modulus size n_sz, but qat_rsa_setkey_crt()
    allocates half-size DMA buffers (key_sz / 2) and right-aligns each
    component with:
    
        memcpy(dst + half_key_sz - len, src, len)
    
    When a CRT component is larger than half_key_sz the subtraction
    underflows and memcpy writes past the DMA buffer, causing memory
    corruption.
    
    Add a len > half_key_sz check next to the existing !len check for each
    of the five CRT components so the driver falls back to the non-CRT path
    instead of writing out of bounds.
    
    Fixes: 879f77e9071f ("crypto: qat - Add RSA CRT mode")
    Cc: [email protected]
    Signed-off-by: Giovanni Cabiddu <[email protected]>
    Reviewed-by: Ahsan Atta <[email protected]>
    Reviewed-by: Laurent M Coquerel <[email protected]>
    Tested-by: Laurent M Coquerel <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: rng - Free default RNG on module exit [+ + +]
Author: Herbert Xu <[email protected]>
Date:   Thu Jun 4 12:30:54 2026 +0800

    crypto: rng - Free default RNG on module exit
    
    [ Upstream commit 606ba888b98e0d26a2c4e5c8dc0542e3ad8f0f3a ]
    
    When the rng module is removed the default RNG will be leaked.
    Call crypto_del_default_rng to free it if possible.
    
    Fixes: 7cecadb7cca8 ("crypto: rng - Do not free default RNG when it becomes unused")
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: talitos - use dma_sync_single_for_cpu() before reading descriptor header [+ + +]
Author: Paul Louvel <[email protected]>
Date:   Thu May 7 16:41:47 2026 +0200

    crypto: talitos - use dma_sync_single_for_cpu() before reading descriptor header
    
    commit e17ff3d6ff907dc8406261e8fd3e1fc8a908f0f6 upstream.
    
    In order to know if a descriptor has been processed by the device,
    the driver polls the FIFO to see if DESC_HDR_DONE is set on a descriptor
    header to confirm completion.
    The current code does not make sure that the CPU gets up to date data
    before reading the descriptor.
    
    Fix this by calling dma_sync_single_for_cpu() before reading memory
    written by the device.
    
    Cc: [email protected]
    Fixes: 58cdbc6d2263 ("crypto: talitos - fix hash on SEC1.")
    Signed-off-by: Paul Louvel <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cxgb4: Fix decode strings dump for T6 adapters [+ + +]
Author: Gleb Markov <[email protected]>
Date:   Mon Jun 29 16:08:54 2026 +0300

    cxgb4: Fix decode strings dump for T6 adapters
    
    [ Upstream commit 5d6dc22d62682d93f5f55f145ad792f2891de911 ]
    
    Depending on the value of chip_version, the correct decode set is selected.
    However, the subsequent matching with the t4 encoding type in the if-else
    block results in a reassignment, which leads to the loss of support for
    t6_decode as well as reinitializing of values t4_decode and t5_decode.
    
    The component history shows that the if-else block previously used for
    this purpose, as well as the execution order, was not affected by the
    change.
    Furthermore, it is suggested by the execution order that the scenario with
    overwriting and loss of support will be implemented.
    
    Delete the if-else block.
    
    Fixes: 6df397539cb0 ("cxgb4: Update correct encoding of SGE Ingress DMA States for T6 adapter")
    Signed-off-by: Gleb Markov <[email protected]>
    Reviewed-by: Potnuri Bharat Teja <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
debugobjects: Plug race against a concurrent OOM disable [+ + +]
Author: Thomas Gleixner <[email protected]>
Date:   Sun Jun 21 16:47:44 2026 +0200

    debugobjects: Plug race against a concurrent OOM disable
    
    commit b81dde13cc163450dcb402dcc915ef13ba241e01 upstream.
    
    syzbot reported a puzzling splat:
    
       WARNING: kernel/time/hrtimer.c:443 at stub_timer+0xa/0x20
    
    stub_timer() is installed as timer callback function in
    hrtimer_fixup_assert_init(), which is invoked when
    debug_object_assert_init() can't find a shadow object. In that case debug
    objects emits a warning about it before invoking the fixup.
    
    Though the provided console log lacks this warning and instead has the
    following a few seconds before the splat:
    
         ODEBUG: Out of memory. ODEBUG disabled
    
    So the object was looked up in debug_object_assert_init() and the lookup
    failed due a concurrent out of memory situation which disabled debug
    objects and freed the shadow objects:
    
    debug_object_assert_init()
            if (!debug_objects_enabled)
                    return;                         obj = alloc();
                                                    if (!obj) {
                                                            // Out of memory
                                                            debug_objects_enabled = false;
                                                            free_objects();
            obj = lookup_or_alloc();
    
            // The lookup failed because the other side
            // removed the objects, so this returns
            // an error code as the object in question
            // is not statically initialized
    
            if (!IS_ERR_OR_NULL(obj))
                    return;
            if (!obj) {
                    debug_oom();
                    return;
            }
    
            print(...)
               if (!debug_objects_enabled)
                    return;
    
            fixup(...)
    
    The debug object splat is skipped because debug_objects_enabled is false,
    but the fixup callback is invoked unconditionally, which makes the timer
    disfunctional.
    
    This is only a problem in debug_object_assert_init() and
    debug_object_activate() as both have to handle statically initialized
    objects and therefore must handle the error pointer return case
    gracefully. All other places only handle the found/not found case and the
    NULL pointer return is a signal for OOM. Otherwise they get a valid shadow
    object.
    
    Plug the hole by checking whether debug objects are still enabled before
    invoking the print and fixup function in those two places.
    
    Fixes: b84d435cc228 ("debugobjects: Extend to assert that an object is initialized")
    Reported-by: [email protected]
    Signed-off-by: Thomas Gleixner <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/874iiwlzlb.ffs@fw13
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
device property: fix fwnode reference leak in fwnode_graph_get_endpoint_by_id() [+ + +]
Author: Stepan Ionichev <[email protected]>
Date:   Thu May 14 22:14:55 2026 +0500

    device property: fix fwnode reference leak in fwnode_graph_get_endpoint_by_id()
    
    [ Upstream commit 9582485a65eacfd7245ec7f0a9d7e2c34749d669 ]
    
    When called with FWNODE_GRAPH_ENDPOINT_NEXT, the function walks every
    endpoint under the requested port and, for any endpoint whose ID is
    greater than or equal to the requested one, may store a fwnode
    reference in best_ep via fwnode_handle_get(). If a later iteration
    finds an exact-ID match, the function returns that endpoint directly
    without dropping the reference held by best_ep, leaking it.
    
    Drop the saved candidate before returning the exact-match endpoint.
    
    This affects callers that use FWNODE_GRAPH_ENDPOINT_NEXT to ask for
    the next endpoint with ID >= the requested one (used by a number of
    media drivers, e.g. imx7/8, sun6i CSI, omap3isp, xilinx-csi2,
    stm32-csi). Each leak retains a fwnode reference until reboot/unbind.
    
    Fixes: 0fcc2bdc8aff ("device property: Add fwnode_graph_get_endpoint_by_id()")
    Signed-off-by: Stepan Ionichev <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dm era: fix NULL pointer dereference in metadata_open() [+ + +]
Author: Cao Guanghui <[email protected]>
Date:   Wed Jun 17 14:00:52 2026 +0800

    dm era: fix NULL pointer dereference in metadata_open()
    
    [ Upstream commit 9ae672606c17891d90b282e3490b817620549599 ]
    
    metadata_open() returns NULL when kzalloc_obj() fails, but the
    caller era_ctr() only checks IS_ERR(md).  Since IS_ERR(NULL)
    returns false, the NULL pointer is treated as a valid result
    and later assigned to era->md, leading to a NULL pointer
    dereference when the metadata is accessed.
    
    Fix this by returning ERR_PTR(-ENOMEM) on allocation failure,
    consistent with dm-cache-metadata.c, dm-thin-metadata.c, and
    dm-clone-metadata.c which all use ERR_PTR(-ENOMEM) for the
    same pattern.
    
    Fixes: eec40579d848 ("dm: add era target")
    Signed-off-by: Cao Guanghui <[email protected]>
    Reviewed-by: Su Yue <[email protected]>
    Reviewed-by: Ming-Hung Tsai <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

dm era: fix out-of-bounds memory access for non-zero start sector [+ + +]
Author: Samuel Moelius <[email protected]>
Date:   Thu Jul 2 00:27:35 2026 +0000

    dm era: fix out-of-bounds memory access for non-zero start sector
    
    commit a868196f03c2b19418ae3d2b69e195d668a271e5 upstream.
    
    dm-era tracks writes in target-relative blocks, but era_map() calculates
    the writeset block before applying the target offset.  Tables with a
    non-zero start sector can therefore pass an absolute mapped-device block
    to metadata_current_marked().
    
    If the absolute block is beyond the current writeset size,
    writeset_marked() tests past the end of the in-core bitset.  KASAN reports
    this as a vmalloc-out-of-bounds access.
    
    Apply the target offset before calculating the era block so writeset
    lookups use the target-relative block number.
    
    Assisted-by: Codex:gpt-5.5-cyber-preview
    Signed-off-by: Samuel Moelius <[email protected]>
    Reviewed-by: Ming-Hung Tsai <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Cc: [email protected]
    Fixes: eec40579d848 ("dm: add era target")
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dm thin metadata: fix metadata snapshot consistency on commit failure [+ + +]
Author: Ming-Hung Tsai <[email protected]>
Date:   Tue Jun 30 20:17:44 2026 +0800

    dm thin metadata: fix metadata snapshot consistency on commit failure
    
    commit 5bcd4d3058ebaf46ad2e163829d87dd4870c7a45 upstream.
    
    __reserve_metadata_snap() and __release_metadata_snap() modify the
    superblock's held_root directly in the block_manager's buffer. If the
    subsequent metadata commit fails, the held_root gets flushed to disk
    through the abort_transaction path, resulting in inconsistent metadata.
    
    Reproducer 1: __reserve_metadata_snap()
    
    1. Create a 2 MiB metadata device and make the region after the 14th
       block inaccessible, to trigger metadata commit failure in the
       subsequent reserve_metadata_snap operation. The 14th block will be
       the shadow destination for the index block.
    
    dmsetup create tmeta --table "0 112 linear /dev/sdc 0
    112 3984 error"
    
    2. Create a 16 MiB thin-pool
    
    dmsetup create tdata --table "0 32768 zero"
    dd if=/dev/zero of=/dev/mapper/tmeta bs=4k count=1
    dmsetup create tpool --table "0 32768 thin-pool /dev/mapper/tmeta \
    /dev/mapper/tdata 128 0 1 skip_block_zeroing"
    
    3. Take a metadata snapshot to trigger metadata commit failure and
       transaction abort. However, the held_root is written to disk,
       breaking metadata consistency.
    
    dmsetup message tpool 0 "reserve_metadata_snap"
    
    thin_check v1.2.2 result:
    
    Bad reference count for metadata block 6.  Expected 2, but space map contains 1.
    Bad reference count for metadata block 7.  Expected 2, but space map contains 1.
    Bad reference count for metadata block 13.  Expected 1, but space map contains 0.
    
    Reproducer 2: __release_metadata_snap()
    
    1. Create a 2 MiB metadata device and make the region after the 16th
       block inaccessible, to trigger metadata commit failure in the
       subsequent release_metadata_snap operation. The 16th block will be
       the shadow destination for the index block.
    
    dmsetup create tmeta --table "0 128 linear /dev/sdc 0
    128 3968 error"
    
    2. Create a 16 MiB thin-pool
    
    dmsetup create tdata --table "0 32768 zero"
    dd if=/dev/zero of=/dev/mapper/tmeta bs=4k count=1
    dmsetup create tpool --table "0 32768 thin-pool /dev/mapper/tmeta \
    /dev/mapper/tdata 128 0 1 skip_block_zeroing"
    
    3. Reserve then release the metadata snapshot, to trigger metadata
       commit failure and transaction abort. The held_root gets removed
       from the on-disk superblock, causing inconsistent metadata.
    
    dmsetup message tpool 0 "reserve_metadata_snap"
    dmsetup message tpool 0 "release_metadata_snap"
    
    thin_check v1.2.2 result:
    
    Bad reference count for metadata block 6.  Expected 1, but space map contains 2.
    Bad reference count for metadata block 7.  Expected 1, but space map contains 2.
    1 metadata blocks have leaked.
    
    Fix by deferring the held_root update to commit time.
    
    Additionally, move the existing-snapshot check in __reserve_metadata_snap
    before the shadow operation to avoid unnecessary work. In
    __release_metadata_snap, clear pmd->held_root before btree deletion so
    partial failure leaks blocks rather than leaving a stale reference, and
    unlock the snapshot block before decrementing its refcount.
    
    Fixes: 991d9fa02da0 ("dm: add thin provisioning target")
    Cc: [email protected]
    Signed-off-by: Ming-Hung Tsai <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dm thin metadata: fix superblock refcount leak on snapshot shadow failure [+ + +]
Author: Genjian Zhang <[email protected]>
Date:   Sat Jul 11 18:05:26 2026 +0800

    dm thin metadata: fix superblock refcount leak on snapshot shadow failure
    
    commit 4b22d0801fadfcae2e106e6ba32e49439c7c7ebf upstream.
    
    __reserve_metadata_snap() increments THIN_SUPERBLOCK_LOCATION in the
    metadata space map before shadowing it. When dm_tm_shadow_block()
    fails, a reference is leaked in the metadata space map.
    
    Fix by adding the missing dm_sm_dec_block().
    
    Signed-off-by: Genjian Zhang <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Fixes: cc8394d86f04 ("dm thin: provide userspace access to pool metadata")
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dm-bufio: fix wrong count calculation in dm_bufio_issue_discard [+ + +]
Author: Mikulas Patocka <[email protected]>
Date:   Fri Jul 10 18:32:49 2026 +0200

    dm-bufio: fix wrong count calculation in dm_bufio_issue_discard
    
    commit 422f1d4f141eaa3a6e4199ceec86cc6b9bf26570 upstream.
    
    block_to_sector converts a block number to a sector number and adds
    c->start to the result. It is inappropriate to use this function for
    converting the number of blocks to a number to sectors because c->start
    would be incorrectly added to the result.
    
    Luckily, the only target that uses dm_bufio_issue_discard is dm-ebs,
    which sets c->start to 0, so this bug is latent.
    
    Signed-off-by: Mikulas Patocka <[email protected]>
    Assisted-by: Claude:claude-opus-4-6
    Fixes: 6fbeb0048e6b ("dm bufio: implement discard")
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dm-ioctl: report an error if a device has no table [+ + +]
Author: Mikulas Patocka <[email protected]>
Date:   Mon May 11 13:04:16 2026 +0200

    dm-ioctl: report an error if a device has no table
    
    commit 457e32348d606a77f9b20e25e989734189834c07 upstream.
    
    When we send a message to a device that has no table, the return code was
    not set. The code would return "2", which is not considered a valid return value.
    
    Signed-off-by: Mikulas Patocka <[email protected]>
    Cc: [email protected]
    Reviewed-by: Benjamin Marzinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dm-log: fix a bitset_size overflow on 32bit machines [+ + +]
Author: Benjamin Marzinski <[email protected]>
Date:   Thu Jul 2 21:43:39 2026 -0400

    dm-log: fix a bitset_size overflow on 32bit machines
    
    commit 9743132a41f4d9d0e54c5f2adcb821b04796bab1 upstream.
    
    Commit c20e36b7631d ("dm log: fix out-of-bounds write due to
    region_count overflow") made sure that region_count could fit in an
    unsigned int. But the bitmap memory isn't allocated based on
    region_count. It uses bitset_size (a size_t variable). The first step of
    calculating bitset_size is to set it to region_count, rounded up to a
    multiple of BITS_PER_LONG. If region_size is less than BITS_PER_LONG
    smaller than UINT_MAX, it will get rounded up to 2^32. On a 32bit
    architecture, this will make bitset_size wrap around to 0 and fail,
    despite region_count being valid.
    
    Since bitset_size gets divided by 8, it can hold any valid region_count.
    It just needs a special case to handle the rollover. If it is 0, the
    value rolled over, and bitset size should be set to the number of bytes
    needed to hold 2^32 bits.
    
    Signed-off-by: Benjamin Marzinski <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Fixes: c20e36b7631d ("dm log: fix out-of-bounds write due to region_count overflow")
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dm-stats: fix dm_jiffies_to_msec64 [+ + +]
Author: Mikulas Patocka <[email protected]>
Date:   Fri Jul 10 18:37:15 2026 +0200

    dm-stats: fix dm_jiffies_to_msec64
    
    commit 386df1a57b631c456d14f857cb0c0c2e11c16bef upstream.
    
    There were wrong calculations in dm_jiffies_to_msec64 that produced
    incorrect output when HZ was different from 1000. This commit fixes them.
    
    Signed-off-by: Mikulas Patocka <[email protected]>
    Assisted-by: Claude:claude-opus-4-6
    Fixes: fd2ed4d25270 ("dm: add statistics support")
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dm-stats: fix merge accounting [+ + +]
Author: Mikulas Patocka <[email protected]>
Date:   Fri Jul 10 18:35:49 2026 +0200

    dm-stats: fix merge accounting
    
    commit 1917eb2db750ecbdf710f79a8042eaa545a063c7 upstream.
    
    There were wrong parentheses when setting stats_aux->merged, so that
    merging was never properly accounted. This commit fixes it.
    
    Signed-off-by: Mikulas Patocka <[email protected]>
    Assisted-by: Claude:claude-opus-4-6
    Fixes: fd2ed4d25270 ("dm: add statistics support")
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dm-verity: increase sprintf buffer size [+ + +]
Author: Mikulas Patocka <[email protected]>
Date:   Thu Jul 9 21:36:01 2026 +0200

    dm-verity: increase sprintf buffer size
    
    commit 88dd117c92a142253fb7a17e791773902b3babc6 upstream.
    
    The prefix "DM_VERITY_ERR_BLOCK_NR" is 22 chars. Add '=', one digit for
    type, ',', up to 20 digits for a u64 block number, and a NUL terminator:
    that's 46 bytes. The buffer is 42 bytes. For block numbers >= 16 decimal
    digits (devices larger than ~16 EB with 4K blocks), snprintf silently
    truncates the uevent environment variable.
    
    Signed-off-by: Mikulas Patocka <[email protected]>
    Assisted-by: Claude:claude-opus-4.6
    Fixes: 65ff5b7ddf05 ("dm verity: add error handling modes for corrupted blocks")
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dm_early_create: fix freeing used table on dm_resume failure [+ + +]
Author: Mikulas Patocka <[email protected]>
Date:   Thu Jul 9 21:29:11 2026 +0200

    dm_early_create: fix freeing used table on dm_resume failure
    
    commit 366665416f20527ff7cad548a32d1ddf23195740 upstream.
    
    If dm_resume fails, the kernel attempts to free table with
    dm_table_destroy, but the table was already instantiated with
    dm_swap_table. This commit skips the call to dm_table_destroy in this
    case.
    
    Signed-off-by: Mikulas Patocka <[email protected]>
    Assisted-by: Claude:claude-opus-4.6
    Fixes: 6bbc923dfcf5 ("dm: add support to directly boot to a mapped device")
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dmaengine: Fix possible use after free [+ + +]
Author: Nuno Sá <[email protected]>
Date:   Fri Apr 24 18:40:14 2026 +0100

    dmaengine: Fix possible use after free
    
    [ Upstream commit 92f853f0645aebf1d05d333e97ab7c342ace1892 ]
    
    In dma_release_channel(), check chan->device->privatecnt after call
    dma_chan_put(). However, dma_chan_put() call dma_device_put() which could
    release the last reference of the device if the DMA provider is already
    gone and hence free it.
    
    Fixes it by moving dma_chan_put() after the check.
    
    Fixes: 0f571515c332 ("dmaengine: Add privatecnt to revert DMA_PRIVATE property")
    Signed-off-by: Nuno Sá <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drbd: reject data replies with an out-of-range payload size [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Thu Jul 9 22:28:37 2026 -0400

    drbd: reject data replies with an out-of-range payload size
    
    commit bd910a7660d280595ef94cb6d193951d855d330f upstream.
    
    recv_dless_read() receives a P_DATA_REPLY from a peer into the bio of an
    outstanding read request. The peer-supplied payload length reaches it as
    the signed int data_size, and two peer-controlled inputs can make it
    negative. With a negotiated data-integrity-alg the digest length is
    subtracted first, so a reply whose payload is smaller than the digest
    underflows data_size. With no integrity algorithm (the default) data_size
    is assigned from the unsigned h95/h100 wire length and drbdd() never
    bounds it for a payload-carrying command, so a length above INT_MAX casts
    it negative; this path needs no non-default feature. The bio receive loop
    then computes expect = min_t(int, data_size, bv_len), which is negative,
    and drbd_recv_all_warn(mapped, expect) receives with a size_t of SIZE_MAX
    into the first mapped page.
    
    The sibling receive path read_in_block() is not affected: it uses an
    unsigned size and rejects it against DRBD_MAX_BIO_SIZE before receiving.
    Reject a data reply whose size is negative after the optional digest
    subtraction, covering both triggers.
    
    Impact: a malicious or man-in-the-middle DRBD peer copies attacker-chosen
    bytes past a bio page in the receiver, corrupting kernel memory. A node
    that reads from its peer (a diskless node, or read-balancing to the peer)
    is exposed in the default configuration; data-integrity-alg is not
    required.
    
    Fixes: b411b3637fa7 ("The DRBD driver")
    Cc: [email protected]
    Assisted-by: Codex:gpt-5-5-xhigh
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: Michael Bommarito <[email protected]>
    Reviewed-by: Christoph Böhmwalder <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
driver core: use READ_ONCE() for dev->driver in dev_has_sync_state() [+ + +]
Author: Danilo Krummrich <[email protected]>
Date:   Sat Apr 18 18:22:18 2026 +0200

    driver core: use READ_ONCE() for dev->driver in dev_has_sync_state()
    
    [ Upstream commit e9506871a8ea304cde48ff4a57226df2aadddae3 ]
    
    dev_has_sync_state() reads dev->driver twice without holding
    device_lock() -- once for the NULL check and once to dereference
    ->sync_state. Some callers only hold device_links_write_lock, which
    doesn't prevent a concurrent unbind from clearing dev->driver via
    device_unbind_cleanup().
    
    Fix it by reading dev->driver exactly once with READ_ONCE(), pairing
    with the WRITE_ONCE() in device_set_driver().
    
    Link: https://lore.kernel.org/driver-core/[email protected]/
    Fixes: ac338acf514e ("driver core: Add dev_has_sync_state()")
    Reviewed-by: Rafael J. Wysocki (Intel) <[email protected]>
    Acked-by: Greg Kroah-Hartman <[email protected]>
    Reviewed-by: Saravana Kannan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Danilo Krummrich <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/edid: fix OOB read in drm_parse_tiled_block() [+ + +]
Author: Xiang Mei <[email protected]>
Date:   Mon Jun 15 11:47:37 2026 -0700

    drm/edid: fix OOB read in drm_parse_tiled_block()
    
    [ Upstream commit faaa1e1155833e7d4ce7e3cfaf64c0d636b190db ]
    
    drm_parse_tiled_block() casts the DisplayID block to a
    struct displayid_tiled_block and reads the full fixed layout up to
    tile->topology_id[7] without checking block->num_bytes. The DisplayID
    iterator only validates the declared payload length, so a crafted EDID
    can advertise a tiled-display block (tag DATA_BLOCK_TILED_DISPLAY, or
    DATA_BLOCK_2_TILED_DISPLAY_TOPOLOGY for v2.0) with a small num_bytes at
    the end of a DisplayID extension. The read then runs past the end of the
    exact-sized kmemdup()'d EDID allocation, a heap out-of-bounds read.
    
    Reject blocks shorter than the spec's 22-byte tiled payload before
    reading the fixed struct, as drm_parse_vesa_mso_data() already does.
    
      BUG: KASAN: slab-out-of-bounds in drm_edid_connector_update
      Read of size 2 at addr ffff888010077700 by task exploit/147
       dump_stack_lvl (lib/dump_stack.c:94 ...)
       print_report (mm/kasan/report.c:378 ...)
       kasan_report (mm/kasan/report.c:595)
       drm_edid_connector_update (drivers/gpu/drm/drm_edid.c:7581)
       bochs_connector_helper_get_modes (drivers/gpu/drm/tiny/bochs.c:574)
       drm_helper_probe_single_connector_modes (drivers/gpu/drm/drm_probe_helper.c:426)
       status_store (drivers/gpu/drm/drm_sysfs.c:219)
       ...
       vfs_write (fs/read_write.c:595 fs/read_write.c:688)
       ksys_write (fs/read_write.c:740)
    
    Fixes: 40d9b043a89e ("drm/connector: store tile information from displayid (v3)")
    Reported-by: Weiming Shi <[email protected]>
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: Xiang Mei <[email protected]>
    Reviewed-by: Jani Nikula <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jani Nikula <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/i2c/sil164: Drop no-op remove function [+ + +]
Author: Uwe Kleine-König <[email protected]>
Date:   Sun Jul 19 22:35:35 2026 -0400

    drm/i2c/sil164: Drop no-op remove function
    
    [ Upstream commit eb09882d64807c24228ed1d005dbbae70860ca3f ]
    
    A remove callback that just returns 0 is equivalent to no callback at all
    as can be seen in i2c_device_remove(). So simplify accordingly.
    
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Signed-off-by: Wolfram Sang <[email protected]>
    Stable-dep-of: 1f0bdc2884b6 ("usb: typec: ucsi: ccg: Fix use-after-free of ucsi on remove")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/msm/dp: fix HPD state status bit shift value [+ + +]
Author: Jessica Zhang <[email protected]>
Date:   Sun May 24 13:33:29 2026 +0300

    drm/msm/dp: fix HPD state status bit shift value
    
    [ Upstream commit 2e6c2e81d81251623c458a60e2a57447dcbc988e ]
    
    The HPD state status is the 3 most significant bits, not 4 bits of the
    HPD_INT_STATUS register.
    
    Fix the bit shift macro so that the correct bits are returned in
    msm_dp_aux_is_link_connected().
    
    Fixes: 19e52bcb27c2 ("drm/msm/dp: return correct connection status after suspend")
    Signed-off-by: Jessica Zhang <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Tested-by: Val Packett <[email protected]> # x1e80100-dell-latitude-7455
    Tested-by: Yongxing Mou <[email protected]> # Hamoa IOT EVK, QCS8300 Ride
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/727611/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm/dp: Fix the ISR_* enum values [+ + +]
Author: Jessica Zhang <[email protected]>
Date:   Sun May 24 13:33:30 2026 +0300

    drm/msm/dp: Fix the ISR_* enum values
    
    [ Upstream commit 3fbfdc3b1d48cc115a86953e5df0c76cd2efc42b ]
    
    The ISR_HPD_* enum should represent values that can be read from the
    REG_DP_DP_HPD_INT_STATUS register. Swap ISR_HPD_IO_GLITCH_COUNT and
    ISR_HPD_REPLUG_COUNT to map them correctly to register values.
    
    While we are at it, correct the spelling for ISR_HPD_REPLUG_COUNT.
    
    Fixes: 8ede2ecc3e5e ("drm/msm/dp: Add DP compliance tests on Snapdragon Chipsets")
    Signed-off-by: Jessica Zhang <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Tested-by: Val Packett <[email protected]> # x1e80100-dell-latitude-7455
    Tested-by: Yongxing Mou <[email protected]> # Hamoa IOT EVK, QCS8300 Ride
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/727602/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/radeon: fix memory leak in radeon_ring_restore() on lock failure [+ + +]
Author: Yuho Choi <[email protected]>
Date:   Thu Apr 16 15:55:37 2026 -0400

    drm/radeon: fix memory leak in radeon_ring_restore() on lock failure
    
    [ Upstream commit 82f1d6042611d45b8b9de423bbcb4e0ced9ec62b ]
    
    radeon_ring_restore() takes ownership of the data buffer allocated by
    radeon_ring_backup(). The caller (radeon_gpu_reset()) only frees it in
    the non-restore branch; in the restore branch it relies on
    radeon_ring_restore() to free it.
    
    If radeon_ring_lock() fails, the function returned early without calling
    kvfree(data), leaking the ring backup buffer on every GPU reset that
    fails at the lock stage. During repeated GPU resets this causes
    cumulative kernel memory exhaustion.
    
    Free data before returning the error.
    
    Fixes: 55d7c22192be ("drm/radeon: implement ring saving on reset v4")
    Signed-off-by: Yuho Choi <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/tegra: dc: Fix device node reference leak in tegra_dc_has_output() [+ + +]
Author: Felix Gu <[email protected]>
Date:   Wed Jan 28 00:43:10 2026 +0800

    drm/tegra: dc: Fix device node reference leak in tegra_dc_has_output()
    
    [ Upstream commit 63a3998d792ab5c45304bf879e385a31fa923b61 ]
    
    The of_for_each_phandle() macro increments the reference count of the
    device node it iterates over. If the loop exits early, the reference must
    be released manually.
    
    In tegra_dc_has_output(), the function returns true immediately when a
    match is found, failing to release the current node's reference.
    
    Fix this by adding a call to of_node_put() before returning from the loop.
    
    Fixes: c57997bce423 ("drm/tegra: sor: Add Tegra186 support")
    Signed-off-by: Felix Gu <[email protected]>
    Acked-by: Mikko Perttunen <[email protected]>
    Signed-off-by: Thierry Reding <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/tidss: Drop extra drm_mode_config_reset() call [+ + +]
Author: Tomi Valkeinen <[email protected]>
Date:   Wed Mar 11 11:14:43 2026 +0200

    drm/tidss: Drop extra drm_mode_config_reset() call
    
    [ Upstream commit f468fef38716f667e805e0fa2c497c6b9c325bb9 ]
    
    We are calling drm_mode_config_reset() twice at probe time. There's no
    reason for this and the second call can be removed, reducing work at
    probe time slightly.
    
    Fixes: 32a1795f57ee ("drm/tidss: New driver for TI Keystone platform Display SubSystem")
    Acked-by: Maxime Ripard <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Tomi Valkeinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
exfat: bound uniname advance in exfat_find_dir_entry() [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Fri Jun 12 14:29:06 2026 -0500

    exfat: bound uniname advance in exfat_find_dir_entry()
    
    commit 3a1230e7b043c62737b05a3e9275ca83a43ad20a upstream.
    
    In exfat_find_dir_entry(), each TYPE_EXTEND (file name) entry advances the
    output pointer by a fixed amount while the loop guard only tracks the
    accumulated name length:
    
            if (++order == 2)
                    uniname = p_uniname->name;
            else
                    uniname += EXFAT_FILE_NAME_LEN;
            len = exfat_extract_uni_name(ep, entry_uniname);
            name_len += len;
            unichar = *(uniname+len);
            *(uniname+len) = 0x0;
    
    uniname grows by EXFAT_FILE_NAME_LEN (15) per name entry, but name_len
    grows only by the actual extracted length, which is shorter when a name
    fragment contains an early NUL.  The only guard is
    `name_len >= MAX_NAME_LENGTH`, so a crafted directory with many short
    name fragments lets uniname run far past the
    p_uniname->name[MAX_NAME_LENGTH + 3] buffer while name_len stays small,
    causing an out-of-bounds read and write at *(uniname+len).
    
    The sibling extractor exfat_get_uniname_from_ext_entry() already stops
    on a short fragment (the lockstep `len != EXFAT_FILE_NAME_LEN` guard
    added in commit d42334578eba ("exfat: check if filename entries exceeds
    max filename length")); exfat_find_dir_entry() never got the
    equivalent.  Track the per-entry write offset as a count and reject a
    fragment once the offset, or the offset plus the extracted length, would
    exceed MAX_NAME_LENGTH, before forming the output pointer.
    
    Fixes: ca06197382bd ("exfat: add directory operations")
    Cc: [email protected]
    Suggested-by: Namjae Jeon <[email protected]>
    Signed-off-by: Bryam Vargas <[email protected]>
    Signed-off-by: Namjae Jeon <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ext4: fix LOGFLUSH shutdown ordering to allow ordered-mode data writeback [+ + +]
Author: Zhang Yi <[email protected]>
Date:   Fri Apr 24 18:42:01 2026 +0800

    ext4: fix LOGFLUSH shutdown ordering to allow ordered-mode data writeback
    
    [ Upstream commit d99748ef1695ce17eaf51c64b7a06952fa7cddab ]
    
    In EXT4_GOING_FLAGS_LOGFLUSH mode, the EXT4_FLAGS_SHUTDOWN flag was set
    before calling ext4_force_commit().  This caused ordered-mode data
    writeback (triggered by journal commit) to fail with -EIO, since
    ext4_do_writepages() checks for the shutdown flag.  The journal would
    then be aborted prematurely before the commit could succeed.
    
    Fix this by calling ext4_force_commit() first, then setting the
    shutdown flag, so that pending data can be written back correctly.
    
    Note that moving ext4_force_commit() before setting the shutdown flag
    creates a small window in which new writes may occur and generate new
    journal transactions.  When the journal is subsequently aborted, the
    new transactions will not be able to write to disk.  This is intentional
    because LOGFLUSH's semantics are to flush pre-existing journal entries
    before shutdown, not to guarantee atomicity for writes that race with
    the ioctl.
    
    Fixes: 783d94854499 ("ext4: add EXT4_IOC_GOINGDOWN ioctl")
    Signed-off-by: Zhang Yi <[email protected]>
    Reviewed-by: Baokun Li <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
f2fs: adjust zone capacity when considering valid block count [+ + +]
Author: Jaegeuk Kim <[email protected]>
Date:   Fri Jul 3 09:31:00 2026 -0400

    f2fs: adjust zone capacity when considering valid block count
    
    [ Upstream commit 074b5ea2900ea8e40f8e7a3fd37e0a55ad3d5874 ]
    
    This patch fixes counting unusable blocks set by zone capacity when
    checking the valid block count in a section.
    
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Stable-dep-of: 4275b59673eb ("f2fs: fix to round down start offset of fallocate for pin file")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: bound i_inline_xattr_size for non-inline-xattr inodes [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Fri Jul 3 14:50:18 2026 -0400

    f2fs: bound i_inline_xattr_size for non-inline-xattr inodes
    
    [ Upstream commit 378acf3cf19b6af6cba55e8dd1154c4e1504bae8 ]
    
    When the flexible_inline_xattr feature is enabled, do_read_inode() loads
    the on-disk i_inline_xattr_size unconditionally:
    
            if (f2fs_sb_has_flexible_inline_xattr(sbi))
                    fi->i_inline_xattr_size = le16_to_cpu(ri->i_inline_xattr_size);
    
    but sanity_check_inode() only range-checks it when the inode also has the
    FI_INLINE_XATTR flag set.  An inode that carries an inline dentry or inline
    data but not FI_INLINE_XATTR -- the normal layout for an inline
    directory -- therefore keeps a fully attacker-controlled
    i_inline_xattr_size from a crafted image.
    
    get_inline_xattr_addrs() returns that value with no flag gating, so it
    feeds the inode geometry:
    
            MAX_INLINE_DATA()  = 4 * (CUR_ADDRS_PER_INODE - i_inline_xattr_size - 1)
            NR_INLINE_DENTRY() = MAX_INLINE_DATA() * BITS_PER_BYTE / (...)
            addrs_per_page()   = CUR_ADDRS_PER_INODE - i_inline_xattr_size
    
    A large i_inline_xattr_size drives MAX_INLINE_DATA() and NR_INLINE_DENTRY()
    negative, so make_dentry_ptr_inline() sets d->max (int) to a negative
    value.  The inline directory walk then compares an unsigned long bit_pos
    against that negative d->max, which is promoted to a huge unsigned bound,
    and reads far past the inline area:
    
            while (bit_pos < d->max)                /* fs/f2fs/dir.c */
                    ... test_bit_le(bit_pos, d->bitmap) / d->dentry[bit_pos] ...
    
    Mounting a crafted image and reading such a directory triggers an
    out-of-bounds read in f2fs_fill_dentries(); the same underflow also
    corrupts ADDRS_PER_INODE for regular files.
    
    Validate i_inline_xattr_size against MAX_INLINE_XATTR_SIZE whenever the
    flexible_inline_xattr feature is enabled -- i.e. whenever the value is
    loaded from disk and consumed -- and keep the lower MIN_INLINE_XATTR_SIZE
    bound gated on inodes that actually carry an inline xattr, so legitimate
    inodes with i_inline_xattr_size == 0 are still accepted.
    
    Cc: [email protected]
    Fixes: 6afc662e68b5 ("f2fs: support flexible inline xattr size")
    Signed-off-by: Bryam Vargas <[email protected]>
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: fix listxattr handling of corrupted xattr entries [+ + +]
Author: Keshav Verma <[email protected]>
Date:   Sat Jul 4 07:54:49 2026 -0400

    f2fs: fix listxattr handling of corrupted xattr entries
    
    [ Upstream commit 5ef5bc304f23c3fe255d4936472378dcb74d0e94 ]
    
    Validate the xattr entry before reading its fields in f2fs_listxattr().
    Return -EFSCORRUPTED when the entry is outside the valid xattr storage
    area instead of returning a successful partial result.
    
    Fixes: 688078e7f36c ("f2fs: fix to avoid memory leakage in f2fs_listxattr")
    Cc: [email protected]
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Keshav Verma <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: fix potential deadlock in f2fs_balance_fs() [+ + +]
Author: Ruipeng Qi <[email protected]>
Date:   Sat Jul 4 07:49:15 2026 -0400

    f2fs: fix potential deadlock in f2fs_balance_fs()
    
    [ Upstream commit dd3114870771562036fdcf5abe813956f36d224d ]
    
    When the f2fs filesystem space is nearly exhausted, we encounter deadlock
    issues as below:
    
    INFO: task A:1890 blocked for more than 120 seconds.
          Tainted: G           O       6.12.41-g3fe07ddf05ab #1
    "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
    task:A    state:D stack:0     pid:1890  tgid:1626  ppid:1153   flags:0x00000204
    Call trace:
     __switch_to+0xf4/0x158
     __schedule+0x27c/0x908
     schedule+0x3c/0x118
     io_schedule+0x44/0x68
     folio_wait_bit_common+0x174/0x370
     folio_wait_bit+0x20/0x38
     folio_wait_writeback+0x54/0xc8
     truncate_inode_partial_folio+0x70/0x1e0
     truncate_inode_pages_range+0x1b0/0x450
     truncate_pagecache+0x54/0x88
     f2fs_file_write_iter+0x3e8/0xb80
     do_iter_readv_writev+0xf0/0x1e0
     vfs_writev+0x138/0x2c8
     do_writev+0x88/0x130
     __arm64_sys_writev+0x28/0x40
     invoke_syscall+0x50/0x120
     el0_svc_common.constprop.0+0xc8/0xf0
     do_el0_svc+0x24/0x38
     el0_svc+0x30/0xf8
     el0t_64_sync_handler+0x120/0x130
     el0t_64_sync+0x190/0x198
    
    INFO: task kworker/u8:11:2680853 blocked for more than 120 seconds.
          Tainted: G           O       6.12.41-g3fe07ddf05ab #1
    "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
    task:kworker/u8:11   state:D stack:0     pid:2680853 tgid:2680853 ppid:2      flags:0x00000208
    Workqueue: writeback wb_workfn (flush-254:0)
    Call trace:
     __switch_to+0xf4/0x158
     __schedule+0x27c/0x908
     schedule+0x3c/0x118
     io_schedule+0x44/0x68
     folio_wait_bit_common+0x174/0x370
     __filemap_get_folio+0x214/0x348
     pagecache_get_page+0x20/0x70
     f2fs_get_read_data_page+0x150/0x3e8
     f2fs_get_lock_data_page+0x2c/0x160
     move_data_page+0x50/0x478
     do_garbage_collect+0xd38/0x1528
     f2fs_gc+0x240/0x7e0
     f2fs_balance_fs+0x1a0/0x208
     f2fs_write_single_data_page+0x6e4/0x730
     f2fs_write_cache_pages+0x378/0x9b0
     f2fs_write_data_pages+0x2e4/0x388
     do_writepages+0x8c/0x2c8
     __writeback_single_inode+0x4c/0x498
     writeback_sb_inodes+0x234/0x4a8
     __writeback_inodes_wb+0x58/0x118
     wb_writeback+0x2f8/0x3c0
     wb_workfn+0x2c4/0x508
     process_one_work+0x180/0x408
     worker_thread+0x258/0x368
     kthread+0x118/0x128
     ret_from_fork+0x10/0x200
    
    INFO: task kworker/u8:8:2641297 blocked for more than 120 seconds.
          Tainted: G           O       6.12.41-g3fe07ddf05ab #1
    "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
    task:kworker/u8:8    state:D stack:0     pid:2641297 tgid:2641297 ppid:2      flags:0x00000208
    Workqueue: writeback wb_workfn (flush-254:0)
    Call trace:
     __switch_to+0xf4/0x158
     __schedule+0x27c/0x908
     rt_mutex_schedule+0x30/0x60
     __rt_mutex_slowlock_locked.constprop.0+0x460/0x8a8
     rwbase_write_lock+0x24c/0x378
     down_write+0x1c/0x30
     f2fs_balance_fs+0x184/0x208
     f2fs_write_inode+0xf4/0x328
     __writeback_single_inode+0x370/0x498
     writeback_sb_inodes+0x234/0x4a8
     __writeback_inodes_wb+0x58/0x118
     wb_writeback+0x2f8/0x3c0
     wb_workfn+0x2c4/0x508
     process_one_work+0x180/0x408
     worker_thread+0x258/0x368
     kthread+0x118/0x128
     ret_from_fork+0x10/0x20
    
    INFO: task B:1902 blocked for more than 120 seconds.
          Tainted: G           O       6.12.41-g3fe07ddf05ab #1
    "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
    task:B     state:D stack:0     pid:1902  tgid:1626  ppid:1153   flags:0x0000020c
    Call trace:
     __switch_to+0xf4/0x158
     __schedule+0x27c/0x908
     rt_mutex_schedule+0x30/0x60
     __rt_mutex_slowlock_locked.constprop.0+0x460/0x8a8
     rwbase_write_lock+0x24c/0x378
     down_write+0x1c/0x30
     f2fs_balance_fs+0x184/0x208
     f2fs_map_blocks+0x94c/0x1110
     f2fs_file_write_iter+0x228/0xb80
     do_iter_readv_writev+0xf0/0x1e0
     vfs_writev+0x138/0x2c8
     do_writev+0x88/0x130
     __arm64_sys_writev+0x28/0x40
     invoke_syscall+0x50/0x120
     el0_svc_common.constprop.0+0xc8/0xf0
     do_el0_svc+0x24/0x38
     el0_svc+0x30/0xf8
     el0t_64_sync_handler+0x120/0x130
     el0t_64_sync+0x190/0x198
    
    INFO: task sync:2769849 blocked for more than 120 seconds.
          Tainted: G           O       6.12.41-g3fe07ddf05ab #1
    "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
    task:sync            state:D stack:0     pid:2769849 tgid:2769849 ppid:736    flags:0x0000020c
    Call trace:
     __switch_to+0xf4/0x158
     __schedule+0x27c/0x908
     schedule+0x3c/0x118
     wb_wait_for_completion+0xb0/0xe8
     sync_inodes_sb+0xc8/0x2b0
     sync_inodes_one_sb+0x24/0x38
     iterate_supers+0xa8/0x138
     ksys_sync+0x54/0xc8
     __arm64_sys_sync+0x18/0x30
     invoke_syscall+0x50/0x120
     el0_svc_common.constprop.0+0xc8/0xf0
     do_el0_svc+0x24/0x38
     el0_svc+0x30/0xf8
     el0t_64_sync_handler+0x120/0x130
     el0t_64_sync+0x190/0x198
    
    The root cause is a potential deadlock between the following tasks:
    
    kworker/u8:11                           Thread A
    - f2fs_write_single_data_page
     - f2fs_do_write_data_page
      - folio_start_writeback(X)
      - f2fs_outplace_write_data
       - bio_add_folio(X)
     - folio_unlock(X)
                                            - truncate_inode_pages_range
                                             - __filemap_get_folio(X, FGP_LOCK)
                                             - truncate_inode_partial_folio(X)
                                              - folio_wait_writeback(X)
     - f2fs_balance_fs
      - f2fs_gc
       - do_garbage_collect
        - move_data_page
         - f2fs_get_lock_data_page
          - __filemap_get_folio(X, FGP_LOCK)
    
    Both threads try to access folio X. Thread A holds the lock but waits
    for writeback, while kworker waits for the lock. This causes a deadlock.
    
    Other threads also enter D state, waiting for locks such as gc_lock and
    writepages.
    
    OPU/IPU DATA folio are all affected by this issue. To avoid such
    potential deadlocks, always commit these cached folios before
    triggering f2fs_gc() in f2fs_balance_fs().
    
    Suggested-by: Chao Yu <[email protected]>
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Ruipeng Qi <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Stable-dep-of: 8b4468ec023d ("f2fs: fix potential deadlock in gc_merge path of f2fs_balance_fs()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: fix to round down start offset of fallocate for pin file [+ + +]
Author: Sunmin Jeong <[email protected]>
Date:   Fri Jul 3 09:31:01 2026 -0400

    f2fs: fix to round down start offset of fallocate for pin file
    
    [ Upstream commit 4275b59673eb60b02eec3997816c83f1f4b909c4 ]
    
    Currently, the length of fallocate for pin file is section-aligned to
    keep allocated sections from being selected as victims of GC. However,
    for the case that the start offset of fallocate is not aligned in
    section, the allocated sections can't be fully utilized. It's because a
    new section is allocated by f2fs_allocate_pinning_section() after using
    blks_per_sec blocks regardless of the start offset. As a result, several
    unexpected dirty segments may be created, including blocks assigned to
    the pinned file.
    
    To address this issue, let's round down the start offset of fallocate
    to the length of section.
    
    The reproducing scenario is as below
    
    chunk=$(((2<<20)+4096)) # 2MB + 4KB
    touch test
    f2fs_io pinfile set test
    f2fs_io fallocate 0 0 $chunk test
    f2fs_io fallocate 0 $chunk $chunk test
    f2fs_io fallocate 0 $((chunk*2)) $chunk test
    f2fs_io fiemap 0 $((chunk*3)) test
    
    Fiemap: offset = 0 len = 12288
        logical addr.    physical addr.   length           flags
    0   0000000000000000 000000068c600000 0000000000400000 00001088
    1   0000000000400000 000000003d400000 0000000000001000 00001088
    2   0000000000401000 00000003eb200000 0000000000200000 00001088
    3   0000000000601000 00000005e4200000 0000000000001000 00001088
    4   0000000000602000 0000000605400000 0000000000200000 00001089
    
    Cc: [email protected]
    Fixes: f5a53edcf01e ("f2fs: support aligned pinned file")
    Reviewed-by: Yunji Kang <[email protected]>
    Reviewed-by: Yeongjin Gil <[email protected]>
    Reviewed-by: Sungjong Seo <[email protected]>
    Signed-off-by: Sunmin Jeong <[email protected]>
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: validate orphan inode entry count [+ + +]
Author: Wenjie Qi <[email protected]>
Date:   Fri Jul 3 14:14:20 2026 -0400

    f2fs: validate orphan inode entry count
    
    [ Upstream commit 846c499a65816d13f1186e3090e825e8bb8bcb8b ]
    
    f2fs_recover_orphan_inodes() trusts the orphan block entry_count when
    replaying orphan inodes from the checkpoint pack. A corrupted entry_count
    larger than F2FS_ORPHANS_PER_BLOCK makes the recovery loop read past the
    ino[] array and interpret footer or following data as inode numbers.
    
    On a crafted image, mounting an unpatched kernel can drive orphan recovery
    into f2fs_bug_on() and panic the kernel. Validate entry_count before
    consuming entries so corrupted checkpoint data fails the mount with
    -EFSCORRUPTED and requests fsck instead.
    
    Set ERROR_INCONSISTENT_ORPHAN as well, so the corruption reason can be
    recorded in the superblock s_errors[] field. This gives fsck a persistent
    hint even though mount-time orphan recovery failure may leave no chance to
    persist SBI_NEED_FSCK through a checkpoint.
    
    Cc: [email protected]
    Fixes: 127e670abfa7 ("f2fs: add checkpoint operations")
    Signed-off-by: Wenjie Qi <[email protected]>
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    [ Folio API ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fbdev: carminefb: fix potential memory leak in alloc_carmine_fb() [+ + +]
Author: Abdun Nihaal <[email protected]>
Date:   Thu May 14 13:54:34 2026 +0530

    fbdev: carminefb: fix potential memory leak in alloc_carmine_fb()
    
    commit 6fcca16a2b19c37f60693c56cbc0c923364ff3ef upstream.
    
    The memory allocated for modelist in fb_videomode_to_modelist() is not
    freed in the subsequent error path.
    Fix that by calling fb_destroy_modelist()
    
    Fixes: 2ece5f43b041 ("fbdev: add the carmine FB driver")
    Cc: [email protected]
    Signed-off-by: Abdun Nihaal <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

fbdev: fbcon: fix out-of-bounds read in err_out of fbcon_do_set_font() [+ + +]
Author: Mingyu Wang <[email protected]>
Date:   Sun Jul 5 10:24:59 2026 -0400

    fbdev: fbcon: fix out-of-bounds read in err_out of fbcon_do_set_font()
    
    [ Upstream commit 8fdc8c2057eea08d40ce2c8eed41ff9e451c65c2 ]
    
    When fbcon_do_set_font() fails (e.g., due to a memory allocation failure
    inside vc_resize() under heavy memory pressure), it jumps to the `err_out`
    label to roll back the console state. However, the current rollback logic
    forgets to restore the `hi_font` state, leading to a severe state machine
    corruption.
    
    Earlier in the function, `set_vc_hi_font()` might be called to change
    `vc->vc_hi_font_mask` and mutate the screen buffer. If `vc_resize()`
    subsequently fails, the `err_out` path restores `vc_font.charcount`
    but entirely skips rolling back the `vc_hi_font_mask` and the screen
    buffer.
    
    This mismatch leaves the terminal in a desynchronized state. Because
    `vc_hi_font_mask` remains set, the VT subsystem will still accept
    character indices greater than 255 from userspace and write them to the
    screen buffer. Subsequent rendering calls (e.g., `fbcon_putcs()`) will
    then use these inflated indices to access the reverted, 256-character
    font array, leading to a deterministic out-of-bounds read and potential
    kernel memory disclosure.
    
    Fix this by adding the missing rollback logic for the `hi_font` mask
    and screen buffer in the error path.
    
    Fixes: a5a923038d70 ("fbdev: fbcon: Properly revert changes when vc_resize() failed")
    Cc: [email protected]
    Signed-off-by: Mingyu Wang <[email protected]>
    Reviewed-by: Thomas Zimmermann <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

fbdev: i740fb: fix potential memory leak in i740fb_probe() [+ + +]
Author: Abdun Nihaal <[email protected]>
Date:   Thu May 14 13:54:35 2026 +0530

    fbdev: i740fb: fix potential memory leak in i740fb_probe()
    
    commit 5936063409af230a2c88b8700c47b89a19fd70b5 upstream.
    
    In i740fb_probe(), the memory allocated in fb_videomode_to_modelist()
    for modelist is not freed in the error paths. Fix that by calling
    fb_destroy_modelist().
    
    Fixes: 5350c65f4f15 ("Resurrect Intel740 driver: i740fb")
    Cc: [email protected]
    Signed-off-by: Abdun Nihaal <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

fbdev: nvidia: fix potential memory leak in nvidiafb_probe() [+ + +]
Author: Abdun Nihaal <[email protected]>
Date:   Thu May 14 13:54:36 2026 +0530

    fbdev: nvidia: fix potential memory leak in nvidiafb_probe()
    
    commit 85f5e38c162bdf9dbbe197275d416402712f3707 upstream.
    
    In nvidiafb_probe(), the memory allocated for modelist in
    nvidia_set_fbinfo() is not freed in the subsequent error paths.
    Fix that by calling fb_destroy_modelist().
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Signed-off-by: Abdun Nihaal <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

fbdev: radeon: fix potential memory leak in radeonfb_pci_register() [+ + +]
Author: Abdun Nihaal <[email protected]>
Date:   Thu May 14 13:54:33 2026 +0530

    fbdev: radeon: fix potential memory leak in radeonfb_pci_register()
    
    commit df8c1101c9a08859da612b5d0a08d55d475522c6 upstream.
    
    The function radeonfb_pci_register() allocates memory for modelist
    (by calling radeon_check_modes() which calls fb_add_videomode()).
    The memory is appended to info->modelist, but is not freed in subsequent
    error paths. Fix this by calling fb_destroy_modelist().
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Signed-off-by: Abdun Nihaal <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

fbdev: s3fb: fix potential memory leak in s3_pci_probe() [+ + +]
Author: Abdun Nihaal <[email protected]>
Date:   Thu May 14 13:54:37 2026 +0530

    fbdev: s3fb: fix potential memory leak in s3_pci_probe()
    
    commit 3b0ed04bc852887a9164e1bbf521652e8ef3eb92 upstream.
    
    In s3_pci_probe(), the memory allocated for modelist using
    fb_videomode_to_modelist() is not freed in subsequent error paths.
    Fix that by calling fb_destroy_modelist()
    
    Fixes: 86c0f043a737 ("s3fb: add DDC support")
    Cc: [email protected]
    Signed-off-by: Abdun Nihaal <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

fbdev: sm501fb: Fix buffer errors in OF binding code [+ + +]
Author: David Laight <[email protected]>
Date:   Mon Jun 8 13:42:42 2026 +0100

    fbdev: sm501fb: Fix buffer errors in OF binding code
    
    [ Upstream commit d8421e09382cfe0bd2a044c8b0a822f64855dd4e ]
    
    The code that gets the frame buffer mode from OF has 'use after free',
    'buffer overrun' and memory leaks.
    
    info->edid_data isn't free if the probe functions fail or if
    pd->def_mode is set.
    
    If both the CRT and PANEL are enabled info->edid_data is used after
    being freed and is freed twice.
    
    The string returned by of_get_property(np, "mode", &len) is just
    written over either the static "640x480-16@60" or the module parameter
    string without any regard for the length (which is most likely longer).
    
    Use kstrump() for the OF mode and free everything before freeing 'info.
    
    Fixes: 4295f9bf74a88 ("video, sm501: add OF binding to support SM501")
    Signed-off-by: David Laight <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

fbdev: sm712: Fix operator precedence in big_swap macro [+ + +]
Author: Li RongQing <[email protected]>
Date:   Thu May 14 21:02:02 2026 -0400

    fbdev: sm712: Fix operator precedence in big_swap macro
    
    commit 5dbe5b65df0b0c0ec77492427c274b7b5011890e upstream.
    
    The big_swap(p) macro was intended to swap bytes within 16-bit halves
    of a 32-bit value. However, because the bitwise shift operators (<<, >>)
    have higher precedence than the bitwise AND operator (&), the original
    code failed to perform any shifting on the masked bits.
    
    For example, 'p & 0xff00ff00 >> 8' was evaluated as 'p &
    (0xff00ff00 >> 8)', effectively neutralizing the intended swap.
    
    Fix this by adding parentheses to ensure the bitwise AND is performed
    before the shift, correctly implementing the byte swap logic.
    
    Fixes: 1461d66728648 ("staging: sm7xxfb: merge sm712fb with fbdev")
    Cc: [email protected]
    Signed-off-by: Li RongQing <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

fbdev: tdfxfb: fix potential memory leak in tdfxfb_probe() [+ + +]
Author: Abdun Nihaal <[email protected]>
Date:   Thu May 14 13:54:38 2026 +0530

    fbdev: tdfxfb: fix potential memory leak in tdfxfb_probe()
    
    commit bb019d755366cc3e777a12d4bf457ff289837370 upstream.
    
    In tdfxfb_probe(), the memory allocated for modelist using
    fb_videomode_to_modelist() when CONFIG_FB_3DFX_I2C is defined, is not
    freed in the subsequent error paths.
    Fix that by calling fb_destroy_modelist().
    
    Fixes: 215059d2421f ("tdfxfb: make use of DDC information about connected monitor")
    Cc: [email protected]
    Signed-off-by: Abdun Nihaal <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

fbdev: tridentfb: fix potential memory leak in trident_pci_probe() [+ + +]
Author: Abdun Nihaal <[email protected]>
Date:   Thu May 14 13:54:39 2026 +0530

    fbdev: tridentfb: fix potential memory leak in trident_pci_probe()
    
    commit 7a35ec619d9af8ee128320975c1252b8ad65f1e8 upstream.
    
    In trident_pci_probe(), the memory allocated for modelist using
    fb_videomode_to_modelist() is not freed in subsequent error paths.
    Fix that by calling fb_destroy_modelist().
    
    Fixes: 6a5e3bd0c8bc ("tridentfb: Add DDC support")
    Cc: [email protected]
    Signed-off-by: Abdun Nihaal <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

fbdev: uvesafb: fix potential memory leak in uvesafb_probe() [+ + +]
Author: Abdun Nihaal <[email protected]>
Date:   Thu May 14 13:54:40 2026 +0530

    fbdev: uvesafb: fix potential memory leak in uvesafb_probe()
    
    commit 033e56fed09047ee63072e9f58789f40c1c7079d upstream.
    
    Due to an incorrect goto label, memory allocated for modedb and modelist
    in uvesafb_vbe_init() is not freed in some error paths. Fix this by
    updating the goto label.
    
    Fixes: 8bdb3a2d7df4 ("uvesafb: the driver core")
    Cc: [email protected]
    Signed-off-by: Abdun Nihaal <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
firmware_loader: Fix recursive lock in device_cache_fw_images() [+ + +]
Author: Dmitry Vyukov <[email protected]>
Date:   Fri May 29 15:09:06 2026 +0000

    firmware_loader: Fix recursive lock in device_cache_fw_images()
    
    [ Upstream commit d3ec78f8f8d48a04a9fac38d47275c34645e5103 ]
    
    A recursive locking deadlock can occur in the firmware loader's power
    management notification handler.
    
    During system suspend or hibernation preparation, fw_pm_notify() calls
    device_cache_fw_images(). This function acquires fw_lock to set the
    firmware cache state to FW_LOADER_START_CACHE and then iterates over all
    devices using dpm_for_each_dev() while still holding the lock.
    
    For each device, dev_cache_fw_image() schedules asynchronous work to cache
    the firmware. If memory allocation for the async work entry fails (e.g., in
    out-of-memory conditions), async_schedule_node_domain() falls back to
    executing the work function synchronously in the current thread.
    
    The synchronous execution path (__async_dev_cache_fw_image() ->
    cache_firmware() -> request_firmware() -> assign_fw()) attempts to acquire
    fw_lock again. Since the current thread already holds fw_lock, this results
    in a recursive locking deadlock.
    
    Fix this by releasing fw_lock immediately after updating the cache state
    and before calling dpm_for_each_dev(). The lock is only needed to protect
    the state update. Concurrent firmware requests will correctly see the
    FW_LOADER_START_CACHE state and use the piggyback mechanism, which is
    independently protected by its own fwc->name_lock.
    
    Fixes: ac39b3ea73aa ("firmware loader: let caching firmware piggyback on loading firmware")
    Assisted-by: Gemini:gemini-3.1-pro-preview Gemini:gemini-3-flash-preview syzbot
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=e70e4c6f6eee43357ba7
    Link: https://syzkaller.appspot.com/ai_job?id=8b4af9fd-24af-423f-8acb-1159fd34c1a5
    Signed-off-by: Dmitry Vyukov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Danilo Krummrich <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
fs: efs: remove unneeded debug prints [+ + +]
Author: Maxwell Doose <[email protected]>
Date:   Thu Jun 4 22:52:51 2026 -0500

    fs: efs: remove unneeded debug prints
    
    [ Upstream commit 89009392c80da5da00876c8334ff20028e6e3eb6 ]
    
    The current code uses debug prints conditionally compiled with #ifdef
    DEBUG.  However, that code, when compiled, causes compiler errors due to
    incompatible formatters and undefined variables, notably:
    
    fs/efs/file.c: In function `efs_get_block':
    fs/efs/file.c:26:35: error: `block' undeclared (first use in this
    function); did you mean `iblock'?
      26 |                         __func__, block, inode->i_blocks, inode->i_size);
         |                                   ^~~~~
    
    and:
    
    fs/efs/file.c: In function `efs_bmap':
    ./include/linux/kern_levels.h:5:25: error: format `%ld' expects
    argument of type `long int', but argument 4 has type `blkcnt_t' {aka
    `long long unsigned int'} [-Werror=format=]
       5 | #define KERN_SOH        "\001"          /* ASCII Start Of Header */
         |                         ^~~~~~
    
    which also extends to the other formatters.  As this part of the code has
    been dead for just about 14 years now, it has not been modernized to stay
    compatible with the most recent gcc compilers.  Fix these issues by
    removing the debug prints.
    
    Link: https://lore.kernel.org/[email protected]
    Fixes: f403d1dbac6d ("fs/efs: add pr_fmt / use __func__")
    Signed-off-by: Maxwell Doose <[email protected]>
    Suggested-by: Andrew Morton <[email protected]>
    Cc: Fabian Frederick <[email protected]>
    Cc: Christian Brauner <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
fsl/fman: Free init resources on KeyGen failure in fman_init() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Thu Jun 25 08:48:34 2026 +0800

    fsl/fman: Free init resources on KeyGen failure in fman_init()
    
    commit d288efa2b94abc2e45a061fceb156b4f4e5b37be upstream.
    
    fman_muram_alloc() allocates initialization resources before
    initializing the KeyGen block. If keygen_init() fails, the
    function returns -EINVAL directly and leaves those resources
    allocated. Free the initialization resources before returning
    from the KeyGen failure path.
    
    Fixes: 7472f4f281d0 ("fsl/fman: enable FMan Keygen")
    Cc: [email protected]
    Signed-off-by: Haoxiang Li <[email protected]>
    Reviewed-by: Pavan Chebbi <[email protected]>
    Reviewed-by: Breno Leitao <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fuse: fix device node leak in cuse_process_init_reply() [+ + +]
Author: Alberto Ruiz <[email protected]>
Date:   Wed Apr 8 17:23:40 2026 +0200

    fuse: fix device node leak in cuse_process_init_reply()
    
    commit 9fa4f7a53406430ee9982f2f636a15b338185122 upstream.
    
    If device_add() succeeds during CUSE initialization but a subsequent
    step (cdev_alloc() or cdev_add()) fails, the error path calls
    put_device() without first calling device_del().  This leaks the
    devtmpfs entry created by device_add(), leaving a stale /dev/<name>
    node that persists until reboot.
    
    Since the cuse_conn is never linked into cuse_conntbl on the failure
    path, cuse_channel_release() sees cc->dev == NULL and skips
    device_unregister(), so no other code path cleans up the node.
    
    This has several consequences:
    
     - The device name is permanently poisoned: any subsequent attempt to
       create a CUSE device with the same name hits the stale sysfs entry,
       device_add() fails, and the new device is aborted.
    
     - The collision manifests as ENODEV returned to userspace with no
       dmesg diagnostic, making it very difficult to debug.
    
     - The failure is self-perpetuating: once a name is leaked, all future
       attempts with that name fail identically.
    
    Fix this by introducing an err_dev label that calls device_del() to
    undo device_add() before falling through to err_unlock.  The existing
    err_unlock path from a device_add() failure correctly skips device_del()
    since the device was never added.
    
    Testing instructions can be found at the lore link below.
    
    Link: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Alberto Ruiz <[email protected]>
    Fixes: 151060ac1314 ("CUSE: implement CUSE - Character device in Userspace")
    Cc: [email protected]
    Signed-off-by: Miklos Szeredi <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

fuse: re-lock request before returning from fuse_ref_folio() [+ + +]
Author: Joanne Koong <[email protected]>
Date:   Mon May 18 22:28:07 2026 -0700

    fuse: re-lock request before returning from fuse_ref_folio()
    
    commit b5befa80fdbe287a98480effed9564712924add5 upstream.
    
    fuse_ref_folio() unlocks the request but does not re-lock it before
    returning. fuse_chan_abort() can end the request and the async end
    callback (eg fuse_writepage_free()) can free the args while the
    subsequent copy chain logic after fuse_ref_folio() accesses them,
    leading to use-after-free issues.
    
    Fix this by locking the request in fuse_ref_folio() before returning.
    
    Fixes: c3021629a0d8 ("fuse: support splice() reading from fuse device")
    Cc: [email protected]
    Signed-off-by: Joanne Koong <[email protected]>
    Signed-off-by: Miklos Szeredi <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
gpio: eic-sprd: use raw_spinlock_t in the irq startup path [+ + +]
Author: Runyu Xiao <[email protected]>
Date:   Wed Jun 17 23:40:35 2026 +0800

    gpio: eic-sprd: use raw_spinlock_t in the irq startup path
    
    commit 90f0109019e6817eb40a486671b7722d1544ae29 upstream.
    
    sprd_eic_irq_unmask() enables the GPIO IRQ and then updates controller
    state through sprd_eic_update(), which takes sprd_eic->lock with
    spin_lock_irqsave().  The callback can be reached from irq_startup()
    while setting up a requested IRQ.  That path is not sleepable, but on
    PREEMPT_RT a regular spinlock_t becomes a sleeping lock.
    
    This issue was found by our static analysis tool and then manually
    reviewed against the current tree.
    
    The grounded PoC kept the request_threaded_irq() -> __setup_irq() ->
    irq_startup() -> sprd_eic_irq_unmask() -> sprd_eic_update() carrier and
    used the original spin_lock_irqsave(&sprd_eic->lock) edge.  Lockdep
    reported:
    
      BUG: sleeping function called from invalid context
      hardirqs last disabled at ... __setup_irq.constprop.0 ... [vuln_msv]
      sprd_rt_spin_lock_irqsave+0x1c/0x30 [vuln_msv]
      sprd_eic_update.constprop.0+0x48/0x90 [vuln_msv]
      sprd_eic_irq_unmask.constprop.0+0x35/0x50 [vuln_msv]
      __setup_irq.constprop.0+0xd/0x30 [vuln_msv]
    
    Convert the Spreadtrum EIC controller lock to raw_spinlock_t.  The
    locked section only serializes MMIO register updates and does not contain
    sleepable operations, so keeping it non-sleeping is appropriate for the
    irqchip callbacks.
    
    Fixes: 25518e024e3a ("gpio: Add Spreadtrum EIC driver support")
    Cc: [email protected]
    Signed-off-by: Runyu Xiao <[email protected]>
    Reviewed-by: Sebastian Andrzej Siewior <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

gpio: htc-egpio: use managed gpiochip registration [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Wed Jun 24 21:18:28 2026 +0800

    gpio: htc-egpio: use managed gpiochip registration
    
    [ Upstream commit 17326db5f0ab4ec1901e75d052b5ebef486b467f ]
    
    egpio_probe() registers each nested gpio_chip with gpiochip_add_data()
    but ignores the return value. If one registration fails, probe still
    returns success even though one of the chips was not published to
    gpiolib.
    
    Use devm_gpiochip_add_data() and fail probe if any chip registration
    fails. This lets devres unwind already registered chips and prevents
    the driver from publishing a partially initialized device.
    
    Fixes: a1635b8fe59d ("[ARM] 4947/1: htc-egpio, a driver for GPIO/IRQ expanders with fixed input/output pins")
    Signed-off-by: Pengpeng Hou <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

gpio: mvebu: fail probe if gpiochip registration fails [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Wed Jun 24 21:16:45 2026 +0800

    gpio: mvebu: fail probe if gpiochip registration fails
    
    [ Upstream commit 479e91fc92416a4d54d2b3150aa1e4550d9cc759 ]
    
    mvebu_gpio_probe() registers the GPIO chip with
    devm_gpiochip_add_data() but ignores the return value. If registration
    fails, probe continues and leaves later code operating on a GPIO chip
    that was never published to gpiolib.
    
    Return the registration error so the device fails probe cleanly.
    
    Fixes: fefe7b092345 ("gpio: introduce gpio-mvebu driver for Marvell SoCs")
    Signed-off-by: Pengpeng Hou <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

gpio: pca953x: Make platform teardown callback return void [+ + +]
Author: Uwe Kleine-König <[email protected]>
Date:   Sun Jul 19 22:35:38 2026 -0400

    gpio: pca953x: Make platform teardown callback return void
    
    [ Upstream commit 6a8f359c3132e4f51bdb263ad74ec632c65e55fd ]
    
    All platforms that provide a teardown callback return 0. New users are
    supposed to not make use of platform support, so there is no
    functionality lost.
    
    This patch is a preparation for making i2c remove callbacks return void.
    
    Reviewed-by: Andy Shevchenko <[email protected]>
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Acked-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Wolfram Sang <[email protected]>
    Stable-dep-of: 1f0bdc2884b6 ("usb: typec: ucsi: ccg: Fix use-after-free of ucsi on remove")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

gpio: timberdale: Return -ENOMEM on dynamic memory allocation in probe [+ + +]
Author: Vladimir Zapolskiy <[email protected]>
Date:   Tue Jun 30 17:51:48 2026 +0300

    gpio: timberdale: Return -ENOMEM on dynamic memory allocation in probe
    
    [ Upstream commit 8d7e62d5e9b2d2ff146f472a9215d7e29c7e2307 ]
    
    Out of memory situation on driver's probe is expected to be reported to
    the driver's framework with a proper -ENOMEM error code.
    
    Fixes: 35570ac6039e ("gpio: add GPIO driver for the Timberdale FPGA")
    Signed-off-by: Vladimir Zapolskiy <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
gpios: palmas: add .get_direction() op [+ + +]
Author: Andreas Kemnade <[email protected]>
Date:   Sat Jul 4 10:40:54 2026 +0200

    gpios: palmas: add .get_direction() op
    
    commit db4a79713ed8e252d5e4edf6eaaa80948b6855a2 upstream.
    
    Accessing debug/gpio is quite noisy without a get_direction()
    implementation. To calm that down add an implementation.
    
    Fixes: 3d50a2785271 ("gpio: palmas: Add support for Palmas GPIO")
    Cc: [email protected]
    Reviewed-by: Linus Walleij <[email protected]>
    Signed-off-by: Andreas Kemnade <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
gpu: host1x: Fix device reference leak in host1x_device_parse_dt() error path [+ + +]
Author: Guangshuo Li <[email protected]>
Date:   Mon Apr 13 22:15:26 2026 +0800

    gpu: host1x: Fix device reference leak in host1x_device_parse_dt() error path
    
    commit e75717f9aec04355777be41070890c6a815c76df upstream.
    
    After device_initialize(), the embedded struct device in struct
    host1x_device should be released through the device core with
    put_device().
    
    In host1x_device_add(), if host1x_device_parse_dt() fails, the current
    error path frees the object directly with kfree(device). That bypasses
    the normal device lifetime handling and leaks the reference held on the
    embedded struct device.
    
    The issue was identified by a static analysis tool I developed and
    confirmed by manual review.
    
    Fix this by using put_device() in the host1x_device_parse_dt() failure
    path.
    
    Fixes: f4c5cf88fbd50 ("gpu: host1x: Provide a proper struct bus_type")
    Cc: [email protected]
    Signed-off-by: Guangshuo Li <[email protected]>
    Acked-by: Mikko Perttunen <[email protected]>
    Signed-off-by: Thierry Reding <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
gue: validate REMCSUM private option length [+ + +]
Author: Qihang <[email protected]>
Date:   Wed Jul 1 10:26:17 2026 +0800

    gue: validate REMCSUM private option length
    
    [ Upstream commit d335dcc6f521571d57117b8deeebc940836e5450 ]
    
    GUE private flags can indicate that remote checksum offload metadata is
    present. The private flags field itself is accounted for by
    guehdr_flags_len(), but guehdr_priv_flags_len() currently returns 0 even
    when GUE_PFLAG_REMCSUM is set.
    
    This lets a packet with only the private flags field pass
    validate_gue_flags(), after which gue_remcsum() and gue_gro_remcsum()
    read the missing REMCSUM start/offset fields from the following bytes.
    
    Account for GUE_PLEN_REMCSUM when GUE_PFLAG_REMCSUM is present so that
    malformed packets are rejected during option validation.
    
    Fixes: c1aa8347e73e ("gue: Protocol constants for remote checksum offload")
    Signed-off-by: Qihang <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
hdlc_ppp: sync per-proto timers before freeing hdlc state [+ + +]
Author: Fan Wu <[email protected]>
Date:   Sun Jul 5 22:28:22 2026 -0400

    hdlc_ppp: sync per-proto timers before freeing hdlc state
    
    [ Upstream commit c78a4e41ab5ead6193ad8a2dd92e8906bae659fa ]
    
    Each PPP control protocol (LCP/IPCP/IPV6CP) embedded in struct ppp
    registers a timer via timer_setup(). That struct ppp is the
    hdlc->state allocation, which detach_hdlc_protocol() frees with kfree()
    in both teardown paths: unregister_hdlc_device() and the re-attach inside
    attach_hdlc_protocol().
    
    The ppp proto never registered a .detach callback, so
    detach_hdlc_protocol() performs no timer synchronization before the
    kfree(). The only cancel, timer_delete(&proto->timer) in ppp_cp_event(),
    is partial (it does not wait for a running callback) and only runs on the
    ->CLOSED transition; ppp_stop()/ppp_close() do not sync either. A
    ppp_timer callback already executing (blocked on ppp->lock) survives the
    kfree and then dereferences proto->state / ppp->lock in freed memory,
    leading to a use-after-free.
    
    Fix this by adding a .detach helper that calls timer_shutdown_sync() on
    every per-proto timer. detach_hdlc_protocol() invokes proto->detach(dev)
    before kfree(hdlc->state), so timer_shutdown_sync()
    now runs on both free paths.
    timer_shutdown_sync() is used instead of timer_delete_sync() because the
    keepalive path re-arms the timer through add_timer()/mod_timer() and
    shutdown blocks any re-activation during teardown.
    
    Initialize the per-protocol timers in ppp_ioctl() when the protocol is
    attached, and remove the now-redundant timer_setup() from ppp_start(), so
    that the timers are initialized exactly once at attach time and
    ppp_timer_release() never operates on uninitialized timer_list
    structures. attach_hdlc_protocol() uses kmalloc() (not kzalloc), so
    struct ppp's protos[i].timer is uninitialized garbage until the first
    timer_setup(); without this init-at-attach, attaching the PPP protocol
    without ever bringing the device up would leave timer_shutdown_sync()
    operating on uninitialized memory in .detach. Moving the init out of
    ppp_start() (which only runs on NETDEV_UP) into the attach path makes the
    initialization unconditional and avoids initializing the same timer_list
    twice.
    
    This bug was found by static analysis.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Signed-off-by: Fan Wu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ replaced timer_shutdown_sync() with del_timer_sync() since timer_shutdown_sync() is not available in 5.10 ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
hfs/hfsplus: fix u32 overflow in check_and_correct_requested_length [+ + +]
Author: Tristan Madani <[email protected]>
Date:   Sat Jul 18 11:12:56 2026 -0400

    hfs/hfsplus: fix u32 overflow in check_and_correct_requested_length
    
    [ Upstream commit 966cb76fb2857a4242cab6ea2ea17acf818a3da7 ]
    
    check_and_correct_requested_length() compares (off + len) against
    node_size using u32 arithmetic.  When the caller passes a large len
    value (e.g. from an underflowed subtraction in hfs_brec_remove()),
    off + len can wrap past 2^32 and produce a small result, causing the
    bounds check to pass when it should fail.
    
    For example, with off=14 and len=0xFFFFFFF2 (underflowed from
    data_off - keyoffset - size in hfs_brec_remove), off + len wraps to 6,
    which is less than a typical node_size of 512, so the check passes and
    the subsequent memmove reads ~4GB past the node buffer.
    
    Fix this by widening the addition to u64 before comparing against
    node_size.  This prevents the u32 wrap while keeping the logic
    straightforward.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=6df204b70bf3261691c5
    Tested-by: [email protected]
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=e76bf3d19b85350571ac
    Tested-by: [email protected]
    Fixes: a431930c9bac ("hfs: fix slab-out-of-bounds in hfs_bnode_read()")
    Cc: [email protected]
    Signed-off-by: Tristan Madani <[email protected]>
    Reviewed-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hfs/hfsplus: prevent getting negative values of offset/length [+ + +]
Author: Viacheslav Dubeyko <[email protected]>
Date:   Sat Jul 18 11:12:55 2026 -0400

    hfs/hfsplus: prevent getting negative values of offset/length
    
    [ Upstream commit 00c14a09a70e10ae18eb3707d0059291425c04bd ]
    
    The syzbot reported KASAN out-of-bounds issue in
    hfs_bnode_move():
    
    [   45.588165][ T9821] hfs: dst 14, src 65536, len -65536
    [   45.588895][ T9821] ==================================================================
    [   45.590114][ T9821] BUG: KASAN: out-of-bounds in hfs_bnode_move+0xfd/0x140
    [   45.591127][ T9821] Read of size 18446744073709486080 at addr ffff888035935400 by task repro/9821
    [   45.592207][ T9821]
    [   45.592420][ T9821] CPU: 0 UID: 0 PID: 9821 Comm: repro Not tainted 6.16.0-rc7-dirty #42 PREEMPT(full)
    [   45.592428][ T9821] Hardware name: QEMU Ubuntu 24.04 PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    [   45.592431][ T9821] Call Trace:
    [   45.592434][ T9821]  <TASK>
    [   45.592437][ T9821]  dump_stack_lvl+0x1c1/0x2a0
    [   45.592446][ T9821]  ? __virt_addr_valid+0x1c8/0x5c0
    [   45.592454][ T9821]  ? __pfx_dump_stack_lvl+0x10/0x10
    [   45.592461][ T9821]  ? rcu_is_watching+0x15/0xb0
    [   45.592469][ T9821]  ? lock_release+0x4b/0x3e0
    [   45.592476][ T9821]  ? __virt_addr_valid+0x1c8/0x5c0
    [   45.592483][ T9821]  ? __virt_addr_valid+0x4a5/0x5c0
    [   45.592491][ T9821]  print_report+0x17e/0x7c0
    [   45.592497][ T9821]  ? __virt_addr_valid+0x1c8/0x5c0
    [   45.592504][ T9821]  ? __virt_addr_valid+0x4a5/0x5c0
    [   45.592511][ T9821]  ? __phys_addr+0xd3/0x180
    [   45.592519][ T9821]  ? hfs_bnode_move+0xfd/0x140
    [   45.592526][ T9821]  kasan_report+0x147/0x180
    [   45.592531][ T9821]  ? _printk+0xcf/0x120
    [   45.592537][ T9821]  ? hfs_bnode_move+0xfd/0x140
    [   45.592544][ T9821]  ? hfs_bnode_move+0xfd/0x140
    [   45.592552][ T9821]  kasan_check_range+0x2b0/0x2c0
    [   45.592557][ T9821]  ? hfs_bnode_move+0xfd/0x140
    [   45.592565][ T9821]  __asan_memmove+0x29/0x70
    [   45.592572][ T9821]  hfs_bnode_move+0xfd/0x140
    [   45.592580][ T9821]  hfs_brec_remove+0x473/0x560
    [   45.592589][ T9821]  hfs_cat_move+0x6fb/0x960
    [   45.592598][ T9821]  ? __pfx_hfs_cat_move+0x10/0x10
    [   45.592607][ T9821]  ? seqcount_lockdep_reader_access+0x122/0x1c0
    [   45.592614][ T9821]  ? lockdep_hardirqs_on+0x9c/0x150
    [   45.592631][ T9821]  ? __lock_acquire+0xaec/0xd80
    [   45.592641][ T9821]  hfs_rename+0x1dc/0x2d0
    [   45.592649][ T9821]  ? __pfx_hfs_rename+0x10/0x10
    [   45.592657][ T9821]  vfs_rename+0xac6/0xed0
    [   45.592664][ T9821]  ? __pfx_vfs_rename+0x10/0x10
    [   45.592670][ T9821]  ? d_alloc+0x144/0x190
    [   45.592677][ T9821]  ? bpf_lsm_path_rename+0x9/0x20
    [   45.592683][ T9821]  ? security_path_rename+0x17d/0x490
    [   45.592691][ T9821]  do_renameat2+0x890/0xc50
    [   45.592699][ T9821]  ? __pfx_do_renameat2+0x10/0x10
    [   45.592707][ T9821]  ? getname_flags+0x1e5/0x540
    [   45.592714][ T9821]  __x64_sys_rename+0x82/0x90
    [   45.592720][ T9821]  ? entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [   45.592725][ T9821]  do_syscall_64+0xf3/0x3a0
    [   45.592741][ T9821]  ? exc_page_fault+0x9f/0xf0
    [   45.592748][ T9821]  entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [   45.592754][ T9821] RIP: 0033:0x7f7f73fe3fc9
    [   45.592760][ T9821] Code: 00 c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 48
    [   45.592765][ T9821] RSP: 002b:00007ffc7e116cf8 EFLAGS: 00000283 ORIG_RAX: 0000000000000052
    [   45.592772][ T9821] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f7f73fe3fc9
    [   45.592776][ T9821] RDX: 0000200000000871 RSI: 0000200000000780 RDI: 00002000000003c0
    [   45.592781][ T9821] RBP: 00007ffc7e116d00 R08: 0000000000000000 R09: 00007ffc7e116d30
    [   45.592784][ T9821] R10: fffffffffffffff0 R11: 0000000000000283 R12: 00005557e81f8250
    [   45.592788][ T9821] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
    [   45.592795][ T9821]  </TASK>
    [   45.592797][ T9821]
    [   45.619721][ T9821] The buggy address belongs to the physical page:
    [   45.620300][ T9821] page: refcount:1 mapcount:1 mapping:0000000000000000 index:0x559a88174 pfn:0x35935
    [   45.621150][ T9821] memcg:ffff88810a1d5b00
    [   45.621531][ T9821] anon flags: 0xfff60000020838(uptodate|dirty|lru|owner_2|swapbacked|node=0|zone=1|lastcpupid=0x7ff)
    [   45.622496][ T9821] raw: 00fff60000020838 ffffea0000d64d88 ffff888021753e10 ffff888029da0771
    [   45.623260][ T9821] raw: 0000000559a88174 0000000000000000 0000000100000000 ffff88810a1d5b00
    [   45.624030][ T9821] page dumped because: kasan: bad access detected
    [   45.624602][ T9821] page_owner tracks the page as allocated
    [   45.625115][ T9821] page last allocated via order 0, migratetype Movable, gfp_mask 0x140dca(GFP_HIGHUSER_MOVABLE|__GFP_ZERO0
    [   45.626685][ T9821]  post_alloc_hook+0x240/0x2a0
    [   45.627127][ T9821]  get_page_from_freelist+0x2101/0x21e0
    [   45.627628][ T9821]  __alloc_frozen_pages_noprof+0x274/0x380
    [   45.628154][ T9821]  alloc_pages_mpol+0x241/0x4b0
    [   45.628593][ T9821]  vma_alloc_folio_noprof+0xe4/0x210
    [   45.629066][ T9821]  folio_prealloc+0x30/0x180
    [   45.629487][ T9821]  __handle_mm_fault+0x34bd/0x5640
    [   45.629957][ T9821]  handle_mm_fault+0x40e/0x8e0
    [   45.630392][ T9821]  do_user_addr_fault+0xa81/0x1390
    [   45.630862][ T9821]  exc_page_fault+0x76/0xf0
    [   45.631273][ T9821]  asm_exc_page_fault+0x26/0x30
    [   45.631712][ T9821] page last free pid 5269 tgid 5269 stack trace:
    [   45.632281][ T9821]  free_unref_folios+0xc73/0x14c0
    [   45.632740][ T9821]  folios_put_refs+0x55b/0x640
    [   45.633177][ T9821]  free_pages_and_swap_cache+0x26d/0x510
    [   45.633685][ T9821]  tlb_flush_mmu+0x3a0/0x680
    [   45.634105][ T9821]  tlb_finish_mmu+0xd4/0x200
    [   45.634525][ T9821]  exit_mmap+0x44c/0xb70
    [   45.634914][ T9821]  __mmput+0x118/0x420
    [   45.635286][ T9821]  exit_mm+0x1da/0x2c0
    [   45.635659][ T9821]  do_exit+0x652/0x2330
    [   45.636039][ T9821]  do_group_exit+0x21c/0x2d0
    [   45.636457][ T9821]  __x64_sys_exit_group+0x3f/0x40
    [   45.636915][ T9821]  x64_sys_call+0x21ba/0x21c0
    [   45.637342][ T9821]  do_syscall_64+0xf3/0x3a0
    [   45.637756][ T9821]  entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [   45.638290][ T9821] page has been migrated, last migrate reason: numa_misplaced
    [   45.638956][ T9821]
    [   45.639173][ T9821] Memory state around the buggy address:
    [   45.639677][ T9821]  ffff888035935300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    [   45.640397][ T9821]  ffff888035935380: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    [   45.641117][ T9821] >ffff888035935400: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    [   45.641837][ T9821]                    ^
    [   45.642207][ T9821]  ffff888035935480: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    [   45.642929][ T9821]  ffff888035935500: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    [   45.643650][ T9821] ==================================================================
    
    This commit [1] fixes the issue if an offset inside of b-tree node
    or length of the request is bigger than b-tree node. However,
    this fix is still not ready for negative values
    of the offset or length. Moreover, negative values of
    the offset or length doesn't make sense for b-tree's
    operations. Because we could try to access the memory address
    outside of the beginning of memory page's addresses range.
    Also, using of negative values make logic very complicated,
    unpredictable, and we could access the wrong item(s)
    in the b-tree node.
    
    This patch changes b-tree interface by means of converting
    signed integer arguments of offset and length on u32 type.
    Such conversion has goal to prevent of using negative values
    unintentionally or by mistake in b-tree operations.
    
    [1] 'commit a431930c9bac ("hfs: fix slab-out-of-bounds in hfs_bnode_read()")'
    
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    cc: John Paul Adrian Glaubitz <[email protected]>
    cc: Yangtao Li <[email protected]>
    cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Stable-dep-of: 966cb76fb285 ("hfs/hfsplus: fix u32 overflow in check_and_correct_requested_length")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hfs/hfsplus: zero-initialize buffer in hfs_bnode_read [+ + +]
Author: Tristan Madani <[email protected]>
Date:   Tue May 5 11:12:59 2026 +0000

    hfs/hfsplus: zero-initialize buffer in hfs_bnode_read
    
    commit d67aadee19ffdf3cc8520c5a4f4d5b2916d30baf upstream.
    
    hfs_bnode_read() can return early without writing to the output buffer
    when is_bnode_offset_valid() fails or when check_and_correct_requested_
    length() corrects the length to zero.  Callers such as hfs_bnode_read_
    u16() and hfs_bnode_read_u8() pass stack-allocated buffers and use the
    result unconditionally, leading to KMSAN uninit-value reports.
    
    Rather than initializing at each individual call site, zero the buffer
    at the start of hfs_bnode_read() before any validation checks.  This
    ensures all callers in both hfs and hfsplus get a deterministic zero
    value regardless of which early-return path is taken.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=217eb327242d08197efb
    Tested-by: [email protected]
    Fixes: a431930c9bac ("hfs: fix slab-out-of-bounds in hfs_bnode_read()")
    Cc: [email protected]
    Signed-off-by: Tristan Madani <[email protected]>
    Reviewed-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
HID: add haptics page defines [+ + +]
Author: Angela Czubak <[email protected]>
Date:   Fri Jul 17 14:11:32 2026 -0400

    HID: add haptics page defines
    
    [ Upstream commit 5e0ae59159e3a07391a35865bb79ff335473fa79 ]
    
    Introduce haptic usages as defined in HID Usage Tables specification.
    Add HID units for newton and gram.
    
    Signed-off-by: Angela Czubak <[email protected]>
    Co-developed-by: Jonathan Denose <[email protected]>
    Signed-off-by: Jonathan Denose <[email protected]>
    Signed-off-by: Benjamin Tissoires <[email protected]>
    Stable-dep-of: 8813b0612275 ("HID: multitouch: fix out-of-bounds bit access on mt_io_flags")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

HID: appleir: fix UAF on pending key_up_timer in remove() [+ + +]
Author: Manish Khadka <[email protected]>
Date:   Fri Jul 17 20:51:23 2026 -0400

    HID: appleir: fix UAF on pending key_up_timer in remove()
    
    [ Upstream commit 75fe87e19d8aff81eb2c64d15d244ab8da4de945 ]
    
    appleir_remove() runs hid_hw_stop() before timer_delete_sync().
    hid_hw_stop() synchronously unregisters the HID input device via
    hid_disconnect() -> hidinput_disconnect() -> input_unregister_device(),
    which drops the last reference and frees the underlying input_dev when
    no userspace handle holds it open.
    
    key_up_tick() reads appleir->input_dev and calls input_report_key() /
    input_sync() on it.  The timer is armed from appleir_raw_event() with
    a HZ/8 (~125 ms) timeout on every keydown and key-repeat report.  If a
    key was pressed shortly before the device is disconnected, the timer
    can fire after hid_hw_stop() has freed input_dev but before the
    teardown drains it.
    
    A simple reorder is not sufficient.  Putting the timer drain first
    still leaves a window where a USB URB completion (raw_event) running
    during hid_hw_stop() can call mod_timer() and re-arm the timer, which
    then fires after hidinput_disconnect() has freed input_dev.  The same
    URB-completion window also lets raw_event() reach key_up(), key_down()
    and battery_flat() directly, all of which dereference
    appleir->input_dev.
    
    Introduce a 'removing' flag on struct appleir, gated by the existing
    spinlock.  appleir_remove() sets the flag under the lock and then
    shuts down the timer with timer_shutdown_sync(), which both drains any
    in-flight callback and permanently disables further mod_timer() calls.
    appleir_raw_event() and key_up_tick() bail out early if the flag is
    set, so no path can arm or run the timer, or dereference
    appleir->input_dev, after remove() has started tearing down.
    
    The keyrepeat and flatbattery branches of appleir_raw_event()
    previously called into the input layer without holding the spinlock;
    take it now so the flag check is well-defined.  This incidentally
    closes a pre-existing read-side race on appleir->current_key in the
    keyrepeat branch.
    
    This bug is structurally a sibling of commit 4db2af929279 ("HID:
    appletb-kbd: fix UAF in inactivity-timer cleanup path") and has been
    present since the driver was introduced.
    
    Fixes: 9a4a5574ce42 ("HID: appleir: add support for Apple ir devices")
    Cc: [email protected]
    Signed-off-by: Manish Khadka <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

HID: core: Fix OOB read in hid_get_report for numbered reports [+ + +]
Author: Lee Jones <[email protected]>
Date:   Tue Jun 16 11:26:56 2026 +0000

    HID: core: Fix OOB read in hid_get_report for numbered reports
    
    [ Upstream commit af1a9b65ebe8a948eda805c14b78d4d0767cb1b5 ]
    
    When a caller passes a size of 0 to hid_report_raw_event() for a
    numbered report, the function originally called hid_get_report() before
    performing any size validation.
    
    Inside hid_get_report(), if the report is numbered (report_enum->numbered
    is true), it unconditionally dereferences data[0] to extract the report ID.
    With a size of 0, this results in an out-of-bounds read or kernel panic.
    
    Fix this by moving the numbered report size validation check before the
    call to hid_get_report(), ensuring that size is at least 1 before
    dereferencing the data pointer.
    
    Fixes: 2c85c61d1332 ("HID: pass the buffer size to hid_report_raw_event")
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

HID: lg-g15: cancel pending work on remove to fix a use-after-free [+ + +]
Author: Maoyi Xie <[email protected]>
Date:   Thu Jun 18 15:06:35 2026 +0800

    HID: lg-g15: cancel pending work on remove to fix a use-after-free
    
    commit 7705b4140d188ce22656f6e541ae7ef834c7e11a upstream.
    
    lg_g15_data is allocated with devm and holds a work item. The report
    handlers schedule that work straight from device input.
    lg_g15_event() and lg_g15_v2_event() do it on the backlight cycle key,
    and lg_g510_leds_event() does it too. The worker dereferences the
    lg_g15_data back through container_of.
    
    The driver had no remove callback and never cancelled the work. So if a
    report scheduled the work and the keyboard was then unplugged, devres
    freed lg_g15_data while the work was still pending or running, and the
    worker touched freed memory. This is a use-after-free. It is reachable
    as a race on device unplug.
    
    Add a remove callback that cancels the work before devres frees the
    state. g15->work is only initialized for the models that schedule it
    (G15, G15 v2, G510). The G13 and Z-10 leave it zeroed, so guard the
    cancel on g15->work.func to avoid cancelling a work that was never set
    up. The g15 NULL test mirrors the one already in lg_g15_raw_event().
    
    Fixes: 97b741aba918 ("HID: lg-g15: Add keyboard and LCD backlight control")
    Cc: [email protected]
    Suggested-by: Hans de Goede <[email protected]>
    Signed-off-by: Maoyi Xie <[email protected]>
    Reviewed-by: Hans de Goede <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

HID: logitech-hidpp: remove excess kernel-doc member in hidpp_scroll_counter [+ + +]
Author: Rosen Penev <[email protected]>
Date:   Sat May 30 17:01:50 2026 -0700

    HID: logitech-hidpp: remove excess kernel-doc member in hidpp_scroll_counter
    
    [ Upstream commit f22a5db8a7d38152556f230d6d68e59dbc27971b ]
    
    The @dev member described in the kernel-doc does not exist in the
    struct. Remove the stale entry.
    
    Fixes: 0610430e3dea ("HID: logitech-hidpp: add input_device ptr to struct hidpp_device")
    Assisted-by: opencode:big-pickle
    
    Signed-off-by: Rosen Penev <[email protected]>
    Signed-off-by: Benjamin Tissoires <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

HID: multitouch: fix out-of-bounds bit access on mt_io_flags [+ + +]
Author: Trung Nguyen <[email protected]>
Date:   Fri Jul 17 14:11:33 2026 -0400

    HID: multitouch: fix out-of-bounds bit access on mt_io_flags
    
    [ Upstream commit 8813b0612275cc61fe9e6603d0ee019247ade6be ]
    
    mt_io_flags is a single unsigned long, but mt_process_slot(),
    mt_release_pending_palms() and mt_release_contacts() use it as a
    per-slot bitmap indexed by the slot number. That slot number is only
    bounded by td->maxcontacts, which is taken from the device's
    ContactCountMaximum feature report and can be up to 255, not by
    BITS_PER_LONG.
    
    As a result, a multitouch device that advertises a large contact count
    makes set_bit()/clear_bit() operate past the mt_io_flags word and
    corrupt the adjacent members of struct mt_device. The sticky-fingers
    release timer is the easiest way to reach this. mt_release_contacts()
    runs
    
            for (i = 0; i < mt->num_slots; i++)
                    clear_bit(i, &td->mt_io_flags);
    
    with num_slots == maxcontacts. For maxcontacts around 250 the loop
    clears the bits that overlap td->applications.next, zeroing that list
    head, and the list_for_each_entry() that immediately follows then
    dereferences NULL. The kernel panics from timer (softirq) context. On a
    KASAN build this shows up as a general protection fault in
    mt_release_contacts() with a null-ptr-deref at offset 0x58, which is
    offsetof(struct mt_application, num_received).
    
    The state is reachable from an untrusted USB or Bluetooth HID
    multitouch device; no local privileges are required.
    
    Store the per-slot active state in a separately allocated bitmap sized
    for maxcontacts, the same pattern already used for pending_palm_slots,
    and keep only MT_IO_FLAGS_RUNNING in mt_io_flags. The two
    "mt_io_flags & MT_IO_SLOTS_MASK" arming checks become
    bitmap_empty(td->active_slots, td->maxcontacts).
    
    Move MT_IO_FLAGS_RUNNING back to bit 0. It was bumped to bit 32 by the
    same commit to leave the low byte for the slot bits; with the slot bits
    gone it fits in bit 0 again, which also keeps it within the unsigned
    long on 32-bit.
    
    Fixes: 46f781e0d151 ("HID: multitouch: fix sticky fingers")
    Cc: [email protected]
    Signed-off-by: Trung Nguyen <[email protected]>
    Signed-off-by: Benjamin Tissoires <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

HID: picolcd: prevent NULL pointer dereference in picolcd_send_and_wait() [+ + +]
Author: Georgiy Osokin <[email protected]>
Date:   Sun May 17 15:06:39 2026 +0300

    HID: picolcd: prevent NULL pointer dereference in picolcd_send_and_wait()
    
    [ Upstream commit 0021eb09041f021c079be1022934a280f7f176c0 ]
    
    In picolcd_send_and_wait(), an integer overflow of the signed loop counter
    'k' can theoretically lead to a NULL pointer dereference of 'raw_data'.
    If the loop executes more than INT_MAX times, 'k' becomes negative,
    making the condition 'k < size' true even when 'size' is 0.
    
    Change the type of 'k' to 'unsigned int' to prevent the overflow and
    eliminate the out-of-bounds access.
    
    Found by Linux Verification Center (linuxtesting.org) with the Svace static
    analysis tool.
    
    [[email protected]: extended hash length]
    Fixes: fabdbf2fd22fa17 ("HID: picoLCD: split driver code")
    Signed-off-by: Georgiy Osokin <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

HID: sensor-hub: Add sensor_hub_input_attr_read_values() for multi-byte reads [+ + +]
Author: Srinivas Pandruvada <[email protected]>
Date:   Wed Jun 10 16:29:09 2026 +0800

    HID: sensor-hub: Add sensor_hub_input_attr_read_values() for multi-byte reads
    
    commit f784fcea450617055d2d12eec5b2f6e0e38bf878 upstream.
    
    sensor_hub_input_attr_get_raw_value() is limited to returning a single
    32-bit value, which is insufficient for sensors that report data larger
    than 32 bits, such as a quaternion with four s16 elements.
    
    Add sensor_hub_input_attr_read_values() that accepts a caller-provided
    buffer and accumulates incoming data until the buffer is full. The two
    paths are distinguished in sensor_hub_raw_event() by pending.max_raw_size
    being non-zero, preserving backward compatibility.
    
    Signed-off-by: Srinivas Pandruvada <[email protected]>
    Co-developed-by: Zhang Lixu <[email protected]>
    Signed-off-by: Zhang Lixu <[email protected]>
    Acked-by: Jiri Kosina <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

HID: wacom: stop hardware after post-start probe failures [+ + +]
Author: Myeonghun Pak <[email protected]>
Date:   Thu Jun 4 13:56:58 2026 +0900

    HID: wacom: stop hardware after post-start probe failures
    
    commit ec2612b8ad9e642596db011dd8b6568ef1edeaa1 upstream.
    
    wacom_parse_and_register() starts HID hardware before registering inputs
    and initializing pad LEDs/remotes. Those later steps can fail, but their
    error paths currently release Wacom resources without stopping the HID
    hardware.
    
    Route post-hid_hw_start() failures through hid_hw_stop() before
    releasing driver resources.
    
    This issue was identified during our ongoing static-analysis research while
    reviewing kernel code.
    
    Fixes: c1d6708bf0d3 ("HID: wacom: Do not register input devices until after hid_hw_start")
    Cc: [email protected]
    Co-developed-by: Ijae Kim <[email protected]>
    Signed-off-by: Ijae Kim <[email protected]>
    Signed-off-by: Myeonghun Pak <[email protected]>
    Reviewed-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
hwmon: (asus_atk0110) Check package count before accessing element [+ + +]
Author: HyeongJun An <[email protected]>
Date:   Fri Jun 19 21:27:46 2026 +0900

    hwmon: (asus_atk0110) Check package count before accessing element
    
    commit e2735b39f044bad7bf2017aef248935525bc0b97 upstream.
    
    atk_ec_present() walks the management group package returned by the GGRP
    ACPI method and, for each sub-package, reads its first element:
    
            id = &obj->package.elements[0];
            if (id->type != ACPI_TYPE_INTEGER)
    
    without checking that the sub-package is non-empty.  ACPICA allocates the
    element array with exactly package.count entries, so for a sub-package
    with a zero count this reads past the allocation.
    
    The sibling function atk_debugfs_ggrp_open() performs the same access but
    skips empty packages with a package.count check first.  Add the same
    check to atk_ec_present() so a malformed firmware package cannot trigger
    an out-of-bounds read.
    
    Fixes: 9e6eba610c2e ("hwmon: (asus_atk0110) Enable the EC")
    Cc: [email protected]
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: HyeongJun An <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: (w83627hf) remove VID sysfs files on error and remove [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Mon Jun 15 14:47:31 2026 +0800

    hwmon: (w83627hf) remove VID sysfs files on error and remove
    
    commit 5264b389c4e02dec214a46c400eb3ab867a7749a upstream.
    
    w83627hf_probe() creates cpu0_vid and vrm with device_create_file() when
    VID information is available.
    
    The error path and remove callback only remove the common and optional
    attribute groups.  Those groups do not contain cpu0_vid or vrm, so the
    files can remain after a later probe failure or after device removal
    while their callbacks still expect live driver data.
    
    Remove the standalone VID sysfs files from both the probe error path and
    the remove callback.
    
    Signed-off-by: Pengpeng Hou <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Cc: [email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: (w83793) remove vrm sysfs file on probe failure [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Mon Jun 15 14:48:06 2026 +0800

    hwmon: (w83793) remove vrm sysfs file on probe failure
    
    commit 77b983757280c69b0290811669ff1d31022e5f1d upstream.
    
    w83793_probe() creates the vrm sysfs file after creating the VID files
    when VID support is present.
    
    The normal remove path deletes vrm, but the probe error path only
    removes the sensor, SDA, VID, fan, PWM and temperature files.  A later
    probe failure can therefore leave vrm behind after the driver data has
    been freed.
    
    Remove vrm in the probe error path next to the VID files, matching the
    normal remove path.
    
    Signed-off-by: Pengpeng Hou <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Cc: [email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: adm1275: Prevent reading uninitialized stack [+ + +]
Author: Matti Vaittinen <[email protected]>
Date:   Fri Jun 26 10:22:04 2026 +0300

    hwmon: adm1275: Prevent reading uninitialized stack
    
    [ Upstream commit 553f9517813912a5ab661af5504485d96824a61c ]
    
    While adding support for the ROHM BD127X0 hot-swap controllers, sashiko
    reported an error in device-name comparison, which can lead to reading
    uninitialized stack memory.
    
    Quoting Sashiko:
    
    This is a pre-existing issue, but I noticed that just before this block in
    adm1275_probe(), there might be an out-of-bounds stack read:
    
        ret = i2c_smbus_read_block_data(client, PMBUS_MFR_MODEL, block_buffer);
        if (ret < 0) { ... }
        for (mid = adm1275_id; mid->name[0]; mid++) {
                if (!strncasecmp(mid->name, block_buffer, strlen(mid->name)))
                        break;
        }
    
    Since i2c_smbus_read_block_data() reads up to 32 bytes into the
    uninitialized stack array block_buffer without appending a null
    terminator, strncasecmp() could read past the valid bytes returned in ret.
    
    For example, if the device returns a shorter string like "adm12", checking
    it against "adm1275" up to the length of "adm1275" will continue reading
    into uninitialized stack bounds.
    
    Prevent reading uninitialized memory by zeroing the stack array.
    
    Signed-off-by: Matti Vaittinen <[email protected]>
    Fixes: 87102808d039 ("hwmon: (pmbus/adm1275) Validate device ID")
    Link: https://lore.kernel.org/r/c8ad38e0cdb347261c6245de2b7965e747f28d22.1782458224.git.mazziesaccount@gmail.com
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
hwrng: virtio: clamp device-reported used.len at copy_data() [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Sun May 31 10:22:51 2026 -0400

    hwrng: virtio: clamp device-reported used.len at copy_data()
    
    commit e3046eeada299f917a8ad883af4434bfb86556b1 upstream.
    
    random_recv_done() stores the device-reported used.len directly into
    vi->data_avail.  copy_data() then indexes vi->data[] using
    vi->data_idx (advanced by previous copy_data() calls) and issues a
    memcpy() without re-validating either value against the posted
    buffer size sizeof(vi->data) (SMP_CACHE_BYTES bytes, typically 32
    or 64).
    
    A malicious or buggy virtio-rng backend can set used.len beyond
    sizeof(vi->data), steering the memcpy() past the end of the inline
    array into adjacent kmalloc-1k slab bytes.  hwrng_fillfn() mixes
    those bytes into the guest RNG, and guest root can also observe
    them directly via /dev/hwrng.
    
    Concrete impact is inside the guest:
    
     - Memory-safety / hardening: any virtio-rng backend that
       over-reports used.len causes the driver to read past vi->data
       into unrelated slab contents.  hwrng_fillfn() is a kernel thread
       that runs as soon as the device is probed; no guest userspace
       interaction is required to first-trigger the OOB.
    
     - Cross-boundary leak (confidential-compute threat model): a
       malicious hypervisor cooperating with a malicious or compromised
       guest root userspace can use /dev/hwrng as a leak channel for
       guest-kernel heap data.  The host sets a large used.len, guest
       root reads /dev/hwrng, and the returned bytes contain guest
       kernel slab contents that were adjacent to vi->data.  In
       practice, confidential-compute guests (SEV-SNP, TDX) usually
       disable virtio-rng entirely, so this path is narrow, but the
       fix is still worth carrying because the underlying
       memory-safety bug contaminates the guest RNG on any host.
    
    KASAN confirms the OOB on a 7.1-rc4 guest whose virtio-rng backend
    has been patched to report used.len = 0x10000:
    
      BUG: KASAN: slab-out-of-bounds in virtio_read+0x394/0x5d0
      Read of size 64 at addr ffff88800ae0ba20 by task hwrng/52
      Call Trace:
       __asan_memcpy+0x23/0x60
       virtio_read+0x394/0x5d0
       hwrng_fillfn+0xb2/0x470
       kthread+0x2cc/0x3a0
      Allocated by task 1:
       probe_common+0xa5/0x660
       virtio_dev_probe+0x549/0xbc0
      The buggy address belongs to the object at ffff88800ae0b800
       which belongs to the cache kmalloc-1k of size 1024
      The buggy address is located 0 bytes to the right of
       allocated 544-byte region [ffff88800ae0b800, ffff88800ae0ba20)
    
    Same class of bug as commit c04db81cd028 ("net/9p: Fix buffer
    overflow in USB transport layer"), which hardened
    usb9pfs_rx_complete() against unchecked device-reported length in
    the USB 9p transport.
    
    With the clamp at point of use and array_index_nospec() in place,
    the same harness boots cleanly: copy_data() returns zero for the
    bogus report, the device-supplied bytes after data_idx are
    discarded, and the driver issues a fresh request.
    
    Fixes: f7f510ec1957 ("virtio: An entropy device, as suggested by hpa.")
    Cc: [email protected]
    Suggested-by: Michael S. Tsirkin <[email protected]>
    Signed-off-by: Michael Bommarito <[email protected]>
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: Michael S. Tsirkin <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
hwspinlock: qcom: avoid uninitialized struct members [+ + +]
Author: Wolfram Sang <[email protected]>
Date:   Tue May 12 11:13:03 2026 +0200

    hwspinlock: qcom: avoid uninitialized struct members
    
    [ Upstream commit 8752c396ce3b2136b3d4c906fe103f6efb6782d9 ]
    
    The reg_field is allocated on stack, so using the REG_FIELD macro will
    ensure that unused members do not have uninitialized values.
    
    Fixes: 19a0f61224d2 ("hwspinlock: qcom: Add support for Qualcomm HW Mutex block")
    Link: https://sashiko.dev/#/patchset/20260319105947.6237-1-wsa%2Brenesas%40sang-engineering.com
    Signed-off-by: Wolfram Sang <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
i2c: core: fix adapter debugfs creation [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Sun Jul 5 15:06:11 2026 -0400

    i2c: core: fix adapter debugfs creation
    
    [ Upstream commit 07d5fb537928aad4369aaff0cbae73ba38a719af ]
    
    Clients can be registered from bus notifier callbacks so the debugfs
    directory needs to be created before registering the adapter as clients
    use that directory as their debugfs parent.
    
    Move debugfs creation before adapter registration to avoid having
    clients create their debugfs directories in the debugfs root (which is
    also more likely to fail due to name collisions).
    
    Note that failure to allocate the adapter name must now be handled
    explicitly as debugfs_create_dir() cannot handle a NULL name (unlike
    device_add() which returns an error).
    
    Fixes: 73febd775bdb ("i2c: create debugfs entry per adapter")
    Cc: [email protected]      # 6.8
    Cc: Wolfram Sang <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Wolfram Sang <[email protected]>
    Stable-dep-of: ba14d7cf2fe7 ("i2c: core: fix adapter registration race")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

i2c: core: fix adapter registration race [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Sun Jul 5 15:06:12 2026 -0400

    i2c: core: fix adapter registration race
    
    [ Upstream commit ba14d7cf2fe7284610a29854bdff22b2537d3ce6 ]
    
    Adapters can be looked up based on their id using i2c_get_adapter()
    which takes a reference to the embedded struct device.
    
    Make sure that the adapter (including its struct device) has been
    initialised before adding it to the IDR to avoid accessing uninitialised
    data which could, for example, lead to NULL-pointer dereferences or
    use-after-free.
    
    Note that the i2c-dev chardev, which is registered from a bus notifier,
    currently uses i2c_get_adapter() so the adapter needs to be added to the
    IDR before registration.
    
    Fixes: 6e13e6418418 ("i2c: Add i2c_add_numbered_adapter()")
    Cc: [email protected]      # 2.6.22
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Wolfram Sang <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

i2c: core: fix hang on adapter registration failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Sun Jul 5 15:06:09 2026 -0400

    i2c: core: fix hang on adapter registration failure
    
    [ Upstream commit 3c7e164344e5bcf6f274bbf59a3274f5caad9bc1 ]
    
    Clients may be registered from bus notifier callbacks when the adapter
    is registered. On a subsequent error during registration, the adapter
    references taken by such clients prevent the wait for the references to
    be released from ever completing.
    
    Fix this by refactoring client deregistration and deregistering also on
    late adapter registration failures.
    
    Fixes: f8756c67b3de ("i2c: core: call of_i2c_setup_smbus_alert in i2c_register_adapter")
    Cc: [email protected]      # 4.15
    Cc: Phil Reid <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Wolfram Sang <[email protected]>
    Stable-dep-of: ba14d7cf2fe7 ("i2c: core: fix adapter registration race")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

i2c: core: fix irq domain leak on adapter registration failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Sun Jul 5 15:06:08 2026 -0400

    i2c: core: fix irq domain leak on adapter registration failure
    
    [ Upstream commit 8ce19524e4cc2462685f596a6402fbd8fb984ab2 ]
    
    Make sure to tear down the host notify irq domain on adapter
    registration failure to avoid leaking it.
    
    This issue was flagged by Sashiko when reviewing another adapter
    registration fix.
    
    Fixes: 4d5538f5882a ("i2c: use an IRQ to report Host Notify events, not alert")
    Cc: [email protected]      # 4.10
    Cc: Benjamin Tissoires <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Wolfram Sang <[email protected]>
    Stable-dep-of: ba14d7cf2fe7 ("i2c: core: fix adapter registration race")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

i2c: core: fix NULL-deref on adapter registration failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Sun Jul 5 15:06:10 2026 -0400

    i2c: core: fix NULL-deref on adapter registration failure
    
    [ Upstream commit 2295d2bb101faa663fbc45fadbb3fec45f107441 ]
    
    If adapter registration ever fails the release callback would trigger a
    NULL-pointer dereference as the completion struct has not been
    initialised.
    
    Note that before the offending commit this would instead have resulted
    in a minor memory leak of the adapter name.
    
    Fixes: 3f8c4f5e9a57 ("i2c: core: fix reference leak in i2c_register_adapter()")
    Cc: [email protected]
    Cc: Joe Hattori <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Wolfram Sang <[email protected]>
    Stable-dep-of: ba14d7cf2fe7 ("i2c: core: fix adapter registration race")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

i2c: mediatek: fix WRRD for SoCs without auto_restart option [+ + +]
Author: Roman Vivchar <[email protected]>
Date:   Thu Jul 9 16:31:29 2026 +0300

    i2c: mediatek: fix WRRD for SoCs without auto_restart option
    
    commit deb35336b5bfed5db9231b5348bc1514db930797 upstream.
    
    MediaTek mt65xx family SoCs have no auto restart, however, they still
    support the WRRD mode in the hardware. Because auto_restart is set to 0,
    the WRRD mode will be never enabled, leading to read errors.
    
    Fix this by removing auto_restart check from the WRRD enable path.
    
    Fixes: b49218365280 ("i2c: mediatek: fix potential incorrect use of I2C_MASTER_WRRD")
    Signed-off-by: Roman Vivchar <[email protected]>
    Cc: <[email protected]> # v6.18+
    Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
    Signed-off-by: Andi Shyti <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

i2c: mlxbf: Fix use-after-free in mlxbf_i2c_init_resource() [+ + +]
Author: Xuanqiang Luo <[email protected]>
Date:   Tue Jul 14 23:08:08 2026 +0800

    i2c: mlxbf: Fix use-after-free in mlxbf_i2c_init_resource()
    
    commit 71356737a7a55c76fee847563e3d33f8e6dc6b6d upstream.
    
    If devm_platform_get_and_ioremap_resource() returns an error,
    mlxbf_i2c_init_resource() frees tmp_res before reading tmp_res->io to
    get the error code. This results in a use-after-free.
    
    Save the error code before freeing tmp_res.
    
    Fixes: b5b5b32081cd ("i2c: mlxbf: I2C SMBus driver for Mellanox BlueField SoC")
    Signed-off-by: Xuanqiang Luo <[email protected]>
    Cc: <[email protected]> # v5.10+
    Signed-off-by: Andi Shyti <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

i2c: stm32f7: truncate clock period instead of rounding it [+ + +]
Author: Guillermo Rodríguez <[email protected]>
Date:   Thu Jun 11 12:48:56 2026 +0200

    i2c: stm32f7: truncate clock period instead of rounding it
    
    commit 111bb7f9f4a90b32e495d70a607c67b137f3074a upstream.
    
    stm32f7_i2c_compute_timing() derives the I2C clock source period
    (i2cclk) with DIV_ROUND_CLOSEST, which may round it up. When the
    period is overestimated, all timings computed from it (SCLDEL,
    SDADEL, SCLL, SCLH) come out shorter on the wire than calculated,
    and the resulting bus rate can exceed the requested speed, violating
    the I2C specification minimums for tLOW and tHIGH.
    
    For example, with a 104.45 MHz clock source (e.g. PCLK1, the
    reset-default I2C clock source on STM32MP1), i2cclk is rounded from
    9.574 ns up to 10 ns. Requesting a 400 kHz fast mode bus with
    72/27 ns rise/fall times and no analog/digital filters then produces
    an actual bus rate of 415.6 kHz with tLOW = 1254 ns, violating both
    the 400 kHz maximum rate and the 1300 ns tLOW minimum of the
    specification.
    
    Truncate the period instead, so that it can only be underestimated.
    The error then falls on the safe side: the programmed timings come
    out slightly longer than computed and the bus runs marginally below
    the target rate (375.3 kHz in the example above) while meeting the
    specification.
    
    i2cbus is left rounded-to-closest: it is only used as the target of
    the clk_error comparison and is never multiplied into the programmed
    timings, so nearest rounding remains accurate there.
    
    Fixes: aeb068c57214 ("i2c: i2c-stm32f7: add driver")
    Signed-off-by: Guillermo Rodríguez <[email protected]>
    Cc: <[email protected]> # v4.14+
    Acked-by: Alain Volmat <[email protected]>
    Reviewed-by: Pierre-Yves MORDRET <[email protected]>
    Signed-off-by: Andi Shyti <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
i3c: master: Prevent reuse of dynamic address on device add failure [+ + +]
Author: Adrian Hunter <[email protected]>
Date:   Fri Jun 12 11:01:03 2026 +0300

    i3c: master: Prevent reuse of dynamic address on device add failure
    
    [ Upstream commit b3ba8383da4d0cff15810e32ea785eceb0a80813 ]
    
    i3c_master_add_i3c_dev_locked() is called after a device has already
    been assigned a dynamic address.  If the function fails, the address
    remains marked as free and may be reallocated to another device,
    leading to address conflicts on the bus.
    
    Ensure the address is not marked as free on failure, by updating the
    address slot state to prevent the address from being re-used.
    
    Emit an error message to inform of the failure.
    
    Opportunistically remove the !master check because it is impossible.
    
    Note, directly resetting the device's dynamic address is no longer
    an option, since Direct RSTDAA was deprecated from I3C starting from
    version 1.1 and v1.1 (or later) target devices are meant to NACK it.
    
    Fixes: 3a379bbcea0af ("i3c: Add core I3C infrastructure")
    Signed-off-by: Adrian Hunter <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
IB/mlx4: Fill in the access_flags if IB_MR_REREG_ACCESS is not specified [+ + +]
Author: Jason Gunthorpe <[email protected]>
Date:   Fri Jun 5 08:53:35 2026 -0300

    IB/mlx4: Fill in the access_flags if IB_MR_REREG_ACCESS is not specified
    
    [ Upstream commit bade9a3150d44ed20b8c6484c4c8a943b7289abb ]
    
    Sashiko noticed mlx4 was using whatever random access flags were provided
    when IB_MR_REREG_ACCESS is not used. Since IB_MR_REREG_TRANS needs
    access_flags it used the random ones which means it doesn't work sensibly
    if userspace provides only IB_MR_REREG_TRANS.
    
    Keep track of the current access_flag of the MR and use it if the user
    does not specify one.
    
    Also fixup a little confusion around mmr.access, it is the HW access flags
    so the convert_access() was missing. But nothing reads this by the time
    rereg_mr can happen.
    
    Fixes: 9376932d0c26 ("IB/mlx4_ib: Add support for user MR re-registration")
    Link: https://patch.msgid.link/r/[email protected]
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

IB/mlx4: Fix refcount leak in add_port() error path [+ + +]
Author: Guangshuo Li <[email protected]>
Date:   Mon May 18 10:19:10 2026 +0800

    IB/mlx4: Fix refcount leak in add_port() error path
    
    [ Upstream commit 9a8826fdfbcd7ed2ccf745f5d54208358d939def ]
    
    After kobject_init_and_add(), the lifetime of the embedded struct
    kobject is expected to be managed through the kobject core reference
    counting.
    
    In add_port(), failure paths after kobject_init_and_add() must not free
    struct mlx4_port directly, because the embedded kobject is then managed
    by the kobject core. Freeing it directly leaves the kobject reference
    counting unbalanced and can lead to incorrect lifetime handling.
    
    Allocate the pkey and gid attribute arrays before kobject_init_and_add(),
    so failures before kobject initialization can be handled by directly
    freeing the allocated memory. Once kobject_init_and_add() has been
    called, unwind later failures by removing any successfully created sysfs
    groups, calling kobject_del(), and then releasing the embedded kobject
    with kobject_put().
    
    Fixes: c1e7e466120b ("IB/mlx4: Add iov directory in sysfs under the ib device")
    Link: https://patch.msgid.link/r/[email protected]
    Signed-off-by: Guangshuo Li <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ieee802154: admin-gate legacy LLSEC dump operations [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Wed May 20 10:16:39 2026 -0400

    ieee802154: admin-gate legacy LLSEC dump operations
    
    commit 9c1e0b6d49471a712511d23fc9d06901561135e8 upstream.
    
    In net/ieee802154/netlink.c, the legacy IEEE802154_NL family ops table
    builds the LLSEC dump entries (LLSEC_LIST_KEY, LLSEC_LIST_DEV,
    LLSEC_LIST_DEVKEY, LLSEC_LIST_SECLEVEL) with IEEE802154_DUMP() which
    sets no .flags, so generic netlink runs them ungated. The modern
    nl802154 family admin-gates the equivalent reads via
    NL802154_CMD_GET_SEC_KEY and friends with .flags = GENL_ADMIN_PERM.
    
    Any local uid that can open AF_NETLINK / NETLINK_GENERIC can resolve
    the "802.15.4 MAC" family and dump LLSEC_LIST_KEY on any wpan netdev
    that has an LLSEC key installed; the dump handler writes the raw
    16-byte AES-128 key bytes (IEEE802154_ATTR_LLSEC_KEY_BYTES, copied
    verbatim from struct ieee802154_llsec_key.key) into the reply.
    Recovering the AES key compromises 802.15.4 LLSEC link confidentiality
    and authenticity, since LLSEC uses CCM* and the same key authenticates
    and encrypts frames.
    
    Impact: any local uid with no capabilities can read the raw 16-byte
    AES-128 LLSEC key from the kernel keytable on any wpan netdev that has
    an administrator-installed LLSEC key, by issuing an LLSEC_LIST_KEY
    dump on the legacy IEEE802154_NL generic-netlink family.
    
    Introduce IEEE802154_DUMP_PRIV() mirroring IEEE802154_DUMP() but
    setting .flags = GENL_ADMIN_PERM, and use it for the four LLSEC dump
    entries. LIST_PHY and LIST_IFACE retain IEEE802154_DUMP() because the
    modern nl802154 family exposes their equivalents to unprivileged
    readers by design (NL802154_CMD_GET_WPAN_PHY and
    NL802154_CMD_GET_INTERFACE carry "can be retrieved by unprivileged
    users" annotations).
    
    Fixes: 3e9c156e2c21 ("ieee802154: add netlink interfaces for llsec")
    Cc: [email protected]
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Stefan Schmidt <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ieee802154: allow legacy LLSEC ADD/DEL ops to pass strict validation [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Wed May 20 10:16:40 2026 -0400

    ieee802154: allow legacy LLSEC ADD/DEL ops to pass strict validation
    
    commit a6bfdfcc6711d1d5a92e98644359dedc67c0c858 upstream.
    
    The LLSEC ADD/DEL doit handlers under the legacy IEEE802154_NL family
    consume IEEE802154_ATTR_LLSEC_KEY_BYTES and
    IEEE802154_ATTR_LLSEC_KEY_USAGE_COMMANDS, both declared in
    net/ieee802154/nl_policy.c as bare length entries with no .type
    (defaulting to NLA_UNSPEC). Generic netlink strict validation rejects
    all NLA_UNSPEC attributes via validate_nla(), so every LLSEC_ADD_KEY,
    LLSEC_DEL_KEY, LLSEC_ADD_DEV, LLSEC_DEL_DEV, LLSEC_ADD_DEVKEY,
    LLSEC_DEL_DEVKEY, LLSEC_ADD_SECLEVEL, and LLSEC_DEL_SECLEVEL request
    fails at the dispatcher with "Unsupported attribute" before reaching
    the handler.
    
    The doit path has been silently dead since strict validation became
    the default for genl families that do not opt out. The dump path is
    unaffected because dump requests carry no LLSEC attributes to
    validate, which is why the LLSEC_LIST_KEY read remained reachable
    (patch 1/2). Introduce IEEE802154_OP_RELAXED() mirroring
    IEEE802154_OP() but with .validate = GENL_DONT_VALIDATE_STRICT, and
    use it for the eight legacy LLSEC mutate ops so admin-driven LLSEC
    configuration via the legacy interface works again.
    
    Fixes: 3e9c156e2c21 ("ieee802154: add netlink interfaces for llsec")
    Cc: [email protected]
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Stefan Schmidt <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ieee802154: ca8210: fix cas_ctl leak on spi_async failure [+ + +]
Author: Shitalkumar Gandhi <[email protected]>
Date:   Tue Apr 21 13:02:59 2026 +0530

    ieee802154: ca8210: fix cas_ctl leak on spi_async failure
    
    commit e09390e439bd7cca30dd10893b1f64802961667a upstream.
    
    ca8210_spi_transfer() allocates cas_ctl with kzalloc_obj(GFP_ATOMIC)
    and relies entirely on the SPI completion callback
    ca8210_spi_transfer_complete() to free it.
    
    The spi_async() API only invokes the completion callback on successful
    submission.  On failure it returns a negative error code without ever
    queuing the callback, which leaves cas_ctl and its embedded spi_message
    and spi_transfer orphaned.  Every kfree(cas_ctl) in the driver is
    inside the completion callback, so there is no other reclamation path.
    
    ca8210_spi_transfer() is called from ca8210_spi_exchange(), the
    interrupt handler ca8210_interrupt_handler(), and from the retry path
    inside the completion callback itself.  The exchange and interrupt
    handler paths loop on -EBUSY, so under sustained SPI bus contention
    every retry iteration leaks a fresh cas_ctl (~600 bytes per
    occurrence).
    
    Fix it by freeing cas_ctl on the spi_async() error path.  While here,
    correct the misleading error string: the function calls spi_async(),
    not spi_sync().
    
    Fixes: ded845a781a5 ("ieee802154: Add CA8210 IEEE 802.15.4 device driver")
    Cc: [email protected]
    Signed-off-by: Shitalkumar Gandhi <[email protected]>
    Reviewed-by: Miquel Raynal <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Stefan Schmidt <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ieee802154: ca8210: fix pointer truncation in kfifo on 64-bit [+ + +]
Author: Shitalkumar Gandhi <[email protected]>
Date:   Wed May 20 16:27:50 2026 +0530

    ieee802154: ca8210: fix pointer truncation in kfifo on 64-bit
    
    commit 6d7f7bcf225b2d566176bf6229dbd1252940cb3c upstream.
    
    ca8210_test_int_driver_write() and ca8210_test_int_user_read() exchange
    a kmalloc'd buffer pointer through a struct kfifo, but pass a literal
    '4' as the byte count to kfifo_in()/kfifo_out().
    
    This is correct on 32-bit (pointer = 4 bytes), but on 64-bit only the
    low 4 bytes of the 8-byte pointer are written into the FIFO. The reader
    then reads back 4 bytes into an 8-byte local pointer variable, leaving
    the upper 4 bytes uninitialized stack data. The first dereference of
    the reconstructed pointer (fifo_buffer[1]) accesses an arbitrary kernel
    address and generally results in an oops.
    
    Use sizeof(fifo_buffer) so the byte count matches pointer width on every
    architecture.
    
    The driver has no architecture restriction in Kconfig, so any 64-bit
    build with CONFIG_IEEE802154_CA8210_DEBUGFS=y is exposed. Issue has
    been latent since the driver was added in 2017 because it is most
    commonly deployed on 32-bit MCUs.
    
    Found via a custom Coccinelle semantic patch hunting for short-byte
    kfifo I/O on byte-mode kfifos used to shuttle pointers.
    
    Fixes: ded845a781a5 ("ieee802154: Add CA8210 IEEE 802.15.4 device driver")
    Cc: [email protected]
    Signed-off-by: Shitalkumar Gandhi <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Stefan Schmidt <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ieee802154: fix kernel-infoleak in dgram_recvmsg() [+ + +]
Author: Aleksandr Nogikh <[email protected]>
Date:   Wed May 27 20:18:18 2026 +0000

    ieee802154: fix kernel-infoleak in dgram_recvmsg()
    
    [ Upstream commit 4db86f8ab11b5a41bfc36680be837e6ac1375ec6 ]
    
    KMSAN reported a kernel-infoleak in move_addr_to_user():
    
    BUG: KMSAN: kernel-infoleak in instrument_copy_to_user
    include/linux/instrumented.h:131 [inline]
    BUG: KMSAN: kernel-infoleak in _inline_copy_to_user
    include/linux/uaccess.h:205 [inline]
    BUG: KMSAN: kernel-infoleak in _copy_to_user+0xcc/0x120
    lib/usercopy.c:26
     instrument_copy_to_user include/linux/instrumented.h:131 [inline]
     _inline_copy_to_user include/linux/uaccess.h:205 [inline]
     _copy_to_user+0xcc/0x120 lib/usercopy.c:26
     copy_to_user include/linux/uaccess.h:236 [inline]
     move_addr_to_user+0x2e7/0x440 net/socket.c:302
     ____sys_recvmsg+0x232/0x610 net/socket.c:2925
     ...
     Uninit was stored to memory at:
     ieee802154_addr_to_sa include/net/ieee802154_netdev.h:369 [inline]
     dgram_recvmsg+0xa09/0xbe0 net/ieee802154/socket.c:739
    
    The issue occurs because the `pan_id` field of `struct ieee802154_addr`
    is left uninitialized when the address mode is `IEEE802154_ADDR_NONE`.
    The execution flow is as follows:
    
    1. `__ieee802154_rx_handle_packet()` declares a local `struct
    ieee802154_hdr hdr` on the stack.
    2. `ieee802154_hdr_pull()` calls `ieee802154_hdr_get_addr()` to parse
    the source and destination addresses into this structure.
    3. If the address mode is `IEEE802154_ADDR_NONE`,
    `ieee802154_hdr_get_addr()` previously only set the `mode` field,
    leaving the `pan_id` field containing uninitialized stack memory.
    4. This uninitialized `pan_id` is later copied into a `struct
    sockaddr_ieee802154` in `dgram_recvmsg()` via `ieee802154_addr_to_sa()`.
    5. Finally, `move_addr_to_user()` copies the socket address structure to
    user space, leaking the uninitialized bytes.
    
    Fix this by using `memset` to zero out the address structure in
    `ieee802154_hdr_get_addr()` when the mode is `IEEE802154_ADDR_NONE`.
    
    Fixes: 94b4f6c21cf5 ("ieee802154: add header structs with endiannes and operations")
    Assisted-by: Gemini:gemini-3.1-pro-preview Gemini:gemini-3-flash-preview syzbot
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=346474e3bf0b26bd3090
    Link: https://syzkaller.appspot.com/ai_job?id=a507a109-d683-4a2c-bc03-93394f491b17
    Signed-off-by: Aleksandr Nogikh <[email protected]>
    Reviewed-by: Miquel Raynal <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Stefan Schmidt <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ieee802154: Remove WARN_ON() in cfg802154_pernet_exit() [+ + +]
Author: Ivan Abramov <[email protected]>
Date:   Thu Apr 3 13:19:34 2025 +0300

    ieee802154: Remove WARN_ON() in cfg802154_pernet_exit()
    
    [ Upstream commit e69ed6fc9fb3b386b5fcdb9f51623f122cee2ebd ]
    
    There's no need to call WARN_ON() in cfg802154_pernet_exit(), since
    every point of failure in cfg802154_switch_netns() is covered with
    WARN_ON(), so remove it.
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Fixes: 66e5c2672cd1 ("ieee802154: add netns support")
    Reviewed-by: Miquel Raynal <[email protected]>
    Signed-off-by: Ivan Abramov <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Stefan Schmidt <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
iio: accel: bmc150: clamp the device-reported FIFO frame count [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Sat Jun 13 02:18:39 2026 -0500

    iio: accel: bmc150: clamp the device-reported FIFO frame count
    
    commit ce0e1cae26096fe959a0da5563a6d6d5a801d5fb upstream.
    
    __bmc150_accel_fifo_flush() copies the number of samples the device
    reports in its hardware FIFO into an on-stack buffer
    
            u16 buffer[BMC150_ACCEL_FIFO_LENGTH * 3];
    
    which is sized for at most BMC150_ACCEL_FIFO_LENGTH (32) samples. The
    frame count is read from the FIFO_STATUS register and only masked to its
    7 valid bits:
    
            count = val & 0x7F;
    
    so it can be 0..127. The only other limit applied to it is the optional
    caller-supplied sample budget:
    
            if (samples && count > samples)
                    count = samples;
    
    which does not constrain count on the flush-all path (samples == 0), and
    leaves it well above 32 whenever samples is larger. count samples are
    then transferred into buffer[]:
    
            bmc150_accel_fifo_transfer(data, (u8 *)buffer, count);
    
    bmc150_accel_fifo_transfer() reads count * 6 bytes through regmap, so a
    malfunctioning, malicious or counterfeit accelerometer (or an attacker
    tampering with the I2C/SPI bus) that reports up to 127 frames writes up
    to 762 bytes into the 192-byte buffer: a stack out-of-bounds write of up
    to 570 bytes that clobbers the stack canary, saved registers and the
    return address.
    
    Clamp count to BMC150_ACCEL_FIFO_LENGTH, the number of samples buffer[]
    is sized for, before the transfer, mirroring the watermark clamp already
    done in bmc150_accel_set_watermark(). A well-formed flush reports at most
    BMC150_ACCEL_FIFO_LENGTH frames, so legitimate devices are unaffected.
    
    Fixes: 3bbec9773389 ("iio: bmc150_accel: add support for hardware fifo")
    Cc: [email protected]
    Signed-off-by: Bryam Vargas <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: accel: kxsd9: fix runtime PM imbalance on write_raw() error [+ + +]
Author: Biren Pandya <[email protected]>
Date:   Sun Jun 14 12:45:46 2026 +0530

    iio: accel: kxsd9: fix runtime PM imbalance on write_raw() error
    
    commit 44a5fd874bb6873bdaec59f722c1d57832fbc9df upstream.
    
    kxsd9_write_raw() takes a runtime PM reference with pm_runtime_get_sync()
    but returns -EINVAL directly when a scale with a non-zero integer part is
    requested, skipping the matching pm_runtime_put_autosuspend(). This leaks
    a runtime PM usage-counter reference on every such write, after which the
    device can no longer autosuspend.
    
    Set the error code and fall through to the existing put instead of
    returning early.
    
    Fixes: 9a9a369d6178 ("iio: accel: kxsd9: Deploy system and runtime PM")
    Signed-off-by: Biren Pandya <[email protected]>
    Assisted-by: Claude:claude-opus-4-8 coccinelle
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: accel: mma8452: handle I2C read error(s) in mma8452_read() [+ + +]
Author: Sanjay Chitroda <[email protected]>
Date:   Tue May 5 23:16:31 2026 +0530

    iio: accel: mma8452: handle I2C read error(s) in mma8452_read()
    
    [ Upstream commit 5bdff291d20c31b365d9ddfe9c426fbfb41da5bb ]
    
    Currently, If i2c_smbus_read_i2c_block_data() fails but
    mma8452_set_runtime_pm_state() succeeds, mma8452_read() returns 0.
    
    As a result, the caller mma8452_read_raw() assumes the read was
    successful and proceeds to use a buffer containing uninitialized
    stack memory.
    
    Add proper checking of the I2C read return value and propagate errors
    to the caller.
    
    Fixes: 96c0cb2bbfe0 ("iio: mma8452: add support for runtime power management")
    Signed-off-by: Sanjay Chitroda <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

iio: adc: lpc32xx: Initialize completion before requesting IRQ [+ + +]
Author: Maxwell Doose <[email protected]>
Date:   Fri Jun 12 19:58:10 2026 -0500

    iio: adc: lpc32xx: Initialize completion before requesting IRQ
    
    commit e561b35633f450ee607e87a6401d97f156a0cd54 upstream.
    
    In the report from Jaeyoung Chung:
    
    "lpc32xx_adc_probe() in drivers/iio/adc/lpc32xx_adc.c registers its
    interrupt handler with devm_request_irq() before it initializes
    st->completion with init_completion(). If an interrupt arrives after
    devm_request_irq() and before init_completion(), the handler calls
    complete() on an uninitialized completion, causing a kernel panic.
    
    The probe path, in lpc32xx_adc_probe():
    
        iodev = devm_iio_device_alloc(&pdev->dev, sizeof(*st)); /* st kzalloc-zeroed */
        ...
        retval = devm_request_irq(&pdev->dev, irq, lpc32xx_adc_isr, 0,
                                  LPC32XXAD_NAME, st);           /* register handler */
        ...
        init_completion(&st->completion);                       /* initialize completion */
    
    lpc32xx_adc_isr() calls complete():
    
        complete(&st->completion);
    
    If the device raises an interrupt before init_completion() runs,
    complete() acquires the uninitialized wait.lock and walks the zeroed
    task_list in swake_up_locked(). The zeroed task_list makes list_empty()
    return false, so swake_up_locked() dereferences a NULL list entry,
    triggering a KASAN wild-memory-access."
    
    Fix the chance of a spurious IRQ causing an uninitialized pointer
    dereference by moving init_completion() above devm_request_irq().
    
    Fixes: 7901b2a1453e ("staging:iio:adc:lpc32xx rename local state structure to _state")
    Reported-by: Sangyun Kim <[email protected]>
    Reported-by: Kyungwook Boo <[email protected]>
    Reported-by: Jaeyoung Chung <[email protected]>
    Closes: https://lore.kernel.org/linux-iio/[email protected]/
    Signed-off-by: Maxwell Doose <[email protected]>
    Reviewed-by: Vladimir Zapolskiy <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: adc: spear: Initialize completion before requesting IRQ [+ + +]
Author: Maxwell Doose <[email protected]>
Date:   Mon Jul 13 11:58:33 2026 -0500

    iio: adc: spear: Initialize completion before requesting IRQ
    
    [ Upstream commit 3ee2128b6f0eb0be7b6cb8f6e0f1f113a65201a0 ]
    
    In the report from Jaeyoung Chung:
    
    "spear_adc_probe() in drivers/iio/adc/spear_adc.c registers its
    interrupt handler with devm_request_irq() before it initializes
    st->completion with init_completion(). If an interrupt arrives after
    devm_request_irq() and before init_completion(), the handler calls
    complete() on an uninitialized completion, causing a kernel panic.
    
    The probe path, in spear_adc_probe():
    
        iodev = devm_iio_device_alloc(&pdev->dev, sizeof(*st)); /* st kzalloc-zeroed */
        ...
        retval = devm_request_irq(&pdev->dev, irq, spear_adc_isr, 0,
                                  LPC32XXAD_NAME, st);           /* register handler */
        ...
        init_completion(&st->completion);                       /* initialize completion */
    
    spear_adc_isr() calls complete():
    
        complete(&st->completion);
    
    If the device raises an interrupt before init_completion() runs,
    complete() acquires the uninitialized wait.lock and walks the zeroed
    task_list in swake_up_locked(). The zeroed task_list makes list_empty()
    return false, so swake_up_locked() dereferences a NULL list entry,
    triggering a KASAN wild-memory-access."
    
    Fix the chance of a spurious IRQ causing an uninitialized pointer
    dereference by moving init_completion() above devm_request_irq().
    
    Fixes: b586e5d9eee0 ("staging:iio:adc:spear rename device specific state structure to _state")
    Reported-by: Sangyun Kim <[email protected]>
    Reported-by: Kyungwook Boo <[email protected]>
    Reported-by: Jaeyoung Chung <[email protected]>
    Closes: https://lore.kernel.org/linux-iio/[email protected]/
    Signed-off-by: Maxwell Doose <[email protected]>
    Reviewed-by: Vladimir Zapolskiy <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Maxwell Doose <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

iio: adc: ti-ads124s08: Return reset GPIO lookup errors [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Thu Jun 25 13:44:07 2026 +0800

    iio: adc: ti-ads124s08: Return reset GPIO lookup errors
    
    commit 7dc4de2aa6316f1d044cde21f5acfec5f3ec6b47 upstream.
    
    devm_gpiod_get_optional() returns NULL when the optional GPIO is absent,
    but returns an ERR_PTR when the GPIO provider lookup fails, including
    probe deferral.
    
    Probe currently logs the ERR_PTR case as if the reset GPIO were simply
    absent and keeps the error pointer in reset_gpio. Later ads124s_reset()
    treats any non-NULL reset_gpio as a valid descriptor and passes it to
    gpiod_set_value_cansleep().
    
    Return the lookup error instead of retaining the ERR_PTR.
    
    Fixes: e717f8c6dfec ("iio: adc: Add the TI ads124s08 ADC code")
    Cc: [email protected]
    Reviewed-by: Joshua Crofts <[email protected]>
    Signed-off-by: Pengpeng Hou <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: chemical: scd30: Cleanup initializations and fix sign-extension bug [+ + +]
Author: Maxwell Doose <[email protected]>
Date:   Tue May 26 17:55:24 2026 -0500

    iio: chemical: scd30: Cleanup initializations and fix sign-extension bug
    
    commit 60d877910a43c305b5165131b258a17b1d772d57 upstream.
    
    Include linux/bitfield.h for FIELD_GET().
    
    Create new macros for bit manipulation in combination with manual bit
    manipulation being replaced with FIELD_GET().
    
    The current variable declaration and initializations are barely readable
    and use comma separations across multiple lines. Refactor the
    initializations so that mantissa and exp have separate declarations and
    sign gets initialized later.
    
    In addition (and due to the nature of the cleanup), fix a sign-extension
    bug where, float32 would get bitwise anded with ~BIT(31)
    (which is 0xFFFFFFFF7FFFFFFF) which corrupted the exponent.
    
    Fixes: 64b3d8b1b0f5c ("iio: chemical: scd30: add core driver")
    Reported-by: sashiko <[email protected]>
    Closes: https://sashiko.dev/#/patchset/20260524020309.18618-1-m32285159%40gmail.com
    Signed-off-by: Maxwell Doose <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: common: st_sensors: honour channel endianness in read_axis_data [+ + +]
Author: Herman van Hazendonk <[email protected]>
Date:   Mon Jul 13 23:04:48 2026 -0400

    iio: common: st_sensors: honour channel endianness in read_axis_data
    
    [ Upstream commit 55052184ac9011db2ea983e54d6c21f0b1079a12 ]
    
    st_sensors_read_axis_data() unconditionally decoded multi-byte
    results with get_unaligned_le16() / get_unaligned_le24() regardless
    of the channel's declared scan_type.endianness.
    
    For every ST sensor that has used this helper since it was introduced
    this happened to be fine because the ST IMU/accel/gyro/pressure
    families publish their data registers as little-endian and the
    channel specs in those drivers declare IIO_LE accordingly.
    
    The LSM303DLH magnetometer however publishes its X/Y/Z output as a
    pair of big-endian bytes (the H register sits at the lower address,
    0x03/0x05/0x07, and the L register immediately after), and its
    channel specs in st_magn_core.c correctly declare IIO_BE -- but
    read_axis_data() ignored that and decoded as little-endian, swapping
    the high and low bytes of every magnetometer sample. The LSM303DLHC
    and LSM303DLM share the same st_magn_16bit_channels (IIO_BE) and
    were therefore byte-swapped by the same bug; users of those parts
    will see different in_magn_*_raw values after this fix lands.
    
    The bug is most visible on a stationary chip: in earth's field the
    true X reading is small and the high byte sits at 0x00, so swapping
    the bytes pins sysfs X at exactly the low byte's pattern (e.g. 0x00F0
    = 240). Y and Z still appear "to vary" because their magnitudes are
    larger and the noise in the low byte produces big swings in the
    swapped high byte:
    
      before (LSM303DLH flat, sysfs in_magn_*_raw):
          X=240 (stuck), Y= 12032..23296, Z=-16128..-9728
    
      after (direct i2c-dev big-endian decode, same chip same orientation):
          X≈-4096, Y≈210, Z≈80     (sensible values reflecting earth's
                                    ambient field at low gauss range)
    
    Fix read_axis_data() to dispatch on ch->scan_type.endianness and
    call get_unaligned_be16() / get_unaligned_be24() when the channel
    declares IIO_BE. Existing IIO_LE consumers (st_accel, st_gyro,
    st_pressure, st_lsm6dsx and others) are unaffected because their
    channel specs already declare IIO_LE and the LE path is unchanged.
    
    While restructuring the branches, replace the previously implicit
    silent-success-with-uninitialised-*data fall-through for
    byte_for_channel outside 1..3 with an explicit return -EINVAL. No
    in-tree ST sensor publishes such a channel, but the new behaviour
    is strictly safer than handing userspace garbage.
    
    Fixes: 23491b513bcd ("iio:common: Add STMicroelectronics common library")
    Cc: [email protected]
    Assisted-by: Claude:claude-opus-4-7 sparse smatch clang-analyzer coccinelle checkpatch
    Assisted-by: Sashiko:claude-opus-4-7
    Signed-off-by: Herman van Hazendonk <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: event: Fix event FIFO reset race [+ + +]
Author: Lars-Peter Clausen <[email protected]>
Date:   Mon Jul 6 21:48:26 2026 -0700

    iio: event: Fix event FIFO reset race
    
    commit af791d295737ea6b6ff2c8d8488462a49c14af01 upstream.
    
    `iio_event_getfd()` creates the event file descriptor with
    `anon_inode_getfd()`, which allocates a new fd, creates the anonymous
    file and installs it in the process fd table before returning to the
    caller.
    
    The IIO code resets the event FIFO after `anon_inode_getfd()` has returned,
    but before `IIO_GET_EVENT_FD_IOCTL` has copied the fd number to userspace.
    But since fd tables are shared between threads, another thread can guess
    the newly allocated fd number and issue a `read()` on it as soon as the fd
    has been installed.
    
    This means the `kfifo_to_user()` in `iio_event_chrdev_read()` can run in
    parallel with the `kfifo_reset_out()` in `iio_event_getfd()`.
    
    The kfifo documentation says that `kfifo_reset_out()` is only safe when it
    is called from the reader thread and there is only one concurrent reader.
    Otherwise it is dangerous and must be handled in the same way as
    `kfifo_reset()`.
    
    If that happens, `kfifo_to_user()` can advance the FIFO `out` index based
    on state from before the reset, after the reset has already moved the `out`
    index to the current `in` index. That can leave the FIFO with an `out`
    index past the `in` index. A later `read()` can then see an underflowed
    FIFO length and copy more data than the event FIFO buffer contains. This
    can result in an out-of-bounds read and leak adjacent kernel memory to
    userspace.
    
    Move the FIFO reset before `anon_inode_getfd()`. At that point the event fd is
    marked busy, but the new fd has not been installed yet, so userspace cannot
    access it while the FIFO is reset.
    
    Fixes: b91accafbb10 ("iio:event: Fix and cleanup locking")
    Reported-by: Codex:gpt-5.5
    Signed-off-by: Lars-Peter Clausen <[email protected]>
    Reviewed-by: Nuno Sá <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: gyro: bmg160: bail out when bandwidth/filter is not in table [+ + +]
Author: Stepan Ionichev <[email protected]>
Date:   Sun May 10 07:35:00 2026 +0500

    iio: gyro: bmg160: bail out when bandwidth/filter is not in table
    
    commit 8320c77e67382d5d55d77043a5f60a867d408a2b upstream.
    
    bmg160_get_filter() walks bmg160_samp_freq_table[] looking for the entry
    matching the bw_bits value read from the chip:
    
            for (i = 0; i < ARRAY_SIZE(bmg160_samp_freq_table); ++i) {
                    if (bmg160_samp_freq_table[i].bw_bits == bw_bits)
                            break;
            }
            *val = bmg160_samp_freq_table[i].filter;
    
    If no entry matches, i ends up equal to the array size and the next line
    reads one slot past the end. bmg160_set_filter() has the same shape, driven
    by 'val' instead of bw_bits.
    
    smatch flags both:
    
      drivers/iio/gyro/bmg160_core.c:204 bmg160_get_filter() error:
      buffer overflow 'bmg160_samp_freq_table' 7 <= 7
      drivers/iio/gyro/bmg160_core.c:222 bmg160_set_filter() error:
      buffer overflow 'bmg160_samp_freq_table' 7 <= 7
    
    Return -EINVAL when no entry matches.
    
    The set_filter() path is reachable from userspace via the sysfs
    in_anglvel_filter_low_pass_3db_frequency interface, so userspace can
    trivially trigger the out-of-bounds read with a value that is not in
    bmg160_samp_freq_table[].filter.
    
    Fixes: 22b46c45fb9b ("iio:gyro:bmg160 Gyro Sensor driver")
    Signed-off-by: Stepan Ionichev <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: gyro: bmg160: wait full startup time after mode change at probe [+ + +]
Author: Stepan Ionichev <[email protected]>
Date:   Mon May 11 11:40:20 2026 +0500

    iio: gyro: bmg160: wait full startup time after mode change at probe
    
    commit 088fcb9b567f8723074ad9eb1bf5cb46f8a0096b upstream.
    
    bmg160_chip_init() calls bmg160_set_mode(BMG160_MODE_NORMAL) and
    then waits only 500-1000 us. Per the BMG160 datasheet
    (BST-BMG160-DS000-07 Rev. 1.0, May 2013), the start-up and wake-up
    times (tsu, twusm) are 30 ms.
    
    The same file already waits BMG160_MAX_STARTUP_TIME_MS (80 ms)
    in bmg160_runtime_resume() after the same set_mode(NORMAL)
    operation. The 500 us value at probe was likely a unit mix-up;
    the old comment said "500 ms" while the code used microseconds.
    
    Reuse the same constant via msleep() and add a code comment
    explaining the datasheet basis for the wait. Without this,
    register writes that follow the mode change can hit the chip
    before it is ready.
    
    Fixes: 22b46c45fb9b ("iio:gyro:bmg160 Gyro Sensor driver")
    Signed-off-by: Stepan Ionichev <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: hid-sensor-rotation: Fix stale or zero output when reading raw values [+ + +]
Author: Zhang Lixu <[email protected]>
Date:   Mon Jul 13 15:33:36 2026 -0400

    iio: hid-sensor-rotation: Fix stale or zero output when reading raw values
    
    [ Upstream commit 3ce8d099e0afc5a7da75a2007a67f67c4f5a4af1 ]
    
    When reading the raw quaternion attribute (in_rot_quaternion_raw), the
    driver currently returns either all zeros (if the sensor was never enabled)
    or stale data (if the sensor was previously enabled) because it reads from
    the internal buffer without explicitly requesting a new sample from the
    sensor.
    
    To fix this, power up the sensor, call sensor_hub_input_attr_read_values()
    to issue a synchronous GET_REPORT and receive the full quaternion data
    directly into a local buffer, then decode the four components.
    
    Fixes: fc18dddc0625 ("iio: hid-sensors: Added device rotation support")
    Signed-off-by: Zhang Lixu <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: imu: adis: add IRQF_NO_THREAD to non-FIFO trigger IRQ [+ + +]
Author: Runyu Xiao <[email protected]>
Date:   Mon Jul 13 14:33:32 2026 -0400

    iio: imu: adis: add IRQF_NO_THREAD to non-FIFO trigger IRQ
    
    [ Upstream commit 6e1b9bff1202da55c464e36bd34a2b6863d7fe30 ]
    
    devm_adis_probe_trigger() registers iio_trigger_generic_data_rdy_poll()
    through devm_request_irq() on the non-FIFO path, but it does not add
    IRQF_NO_THREAD to the IRQ flags.
    
    When the kernel is booted with forced IRQ threading, the parent IRQ can
    otherwise be threaded by the IRQ core and the subsequent IIO trigger
    child IRQ is then dispatched from irq/... thread context instead of
    hardirq context. Because iio_trigger_generic_data_rdy_poll()
    immediately drives iio_trigger_poll(), this violates the hardirq-only
    IIO trigger helper contract and can push downstream trigger consumers
    through the wrong execution context.
    
    Add IRQF_NO_THREAD on top of the existing adis->irq_flag value for the
    non-FIFO request_irq() path, while preserving the current trigger
    polarity and IRQF_NO_AUTOEN behavior.
    
    Fixes: fec86c6b8369 ("iio: imu: adis: Add Managed device functions")
    Cc: [email protected]
    Signed-off-by: Runyu Xiao <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: imu: bmi160: add IRQF_NO_THREAD to data-ready trigger IRQ [+ + +]
Author: Runyu Xiao <[email protected]>
Date:   Thu Jun 4 09:42:47 2026 +0800

    iio: imu: bmi160: add IRQF_NO_THREAD to data-ready trigger IRQ
    
    commit cd5a6a5096b246e10600da3ac47a1274ce9573c8 upstream.
    
    bmi160_probe_trigger() registers iio_trigger_generic_data_rdy_poll()
    through devm_request_irq(), but it passes only irq_type and does not add
    IRQF_NO_THREAD.
    
    When the kernel is booted with forced IRQ threading, the parent IRQ can
    otherwise be threaded by the IRQ core and the subsequent IIO trigger
    child IRQ is dispatched from irq/... thread context instead of hardirq
    context. Because the handler immediately pushes the event into
    iio_trigger_poll(), this violates the hardirq-only IIO trigger helper
    contract and can drive downstream trigger consumers through the wrong
    execution context.
    
    Add IRQF_NO_THREAD on top of irq_type when registering the BMI160 data-
    ready trigger handler.
    
    Fixes: 895bf81e6bbf ("iio:bmi160: add drdy interrupt support")
    Cc: [email protected]
    Signed-off-by: Runyu Xiao <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: imu: inv_icm42600: fix timestamp clock period by using lower value [+ + +]
Author: Jean-Baptiste Maneyrol <[email protected]>
Date:   Tue Jun 23 16:22:15 2026 +0200

    iio: imu: inv_icm42600: fix timestamp clock period by using lower value
    
    commit 8b0b864c11a2e2ada470f9d5010e1c2bf1eceef2 upstream.
    
    Clock period value is used for computing periods of sampling. There is
    no need for it to be higher than the maximum odr, otherwise we are
    losing precision in the computation for nothing.
    
    Switch clock period value to maximum odr period (8kHz).
    
    Fixes: 0ecc363ccea7 ("iio: make invensense timestamp module generic")
    Cc: [email protected]
    Signed-off-by: Jean-Baptiste Maneyrol <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: imu: inv_icm42600: fix timestamping by limiting FIFO reading [+ + +]
Author: Jean-Baptiste Maneyrol <[email protected]>
Date:   Mon Jul 13 23:04:44 2026 -0400

    iio: imu: inv_icm42600: fix timestamping by limiting FIFO reading
    
    [ Upstream commit affe3f077d7a4eeb25937f5323ff059a54b4712c ]
    
    Timestamps are made by measuring the chip clock using the watermark
    interrupts. If we read more than watermark samples as done today, we
    are reducing the period between interrupts and distort the time
    measurement. Fix that by reading only watermark samples in the
    interrupt case.
    
    Fixes: 7f85e42a6c54 ("iio: imu: inv_icm42600: add buffer support in iio devices")
    Cc: [email protected]
    Signed-off-by: Jean-Baptiste Maneyrol <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: imu: inv_icm42600: make timestamp module chip independent [+ + +]
Author: Jean-Baptiste Maneyrol <[email protected]>
Date:   Mon Jul 13 23:04:37 2026 -0400

    iio: imu: inv_icm42600: make timestamp module chip independent
    
    [ Upstream commit 6e9f2d8375cb24ba75e02e0272e9164d06a1522e ]
    
    Move icm42600 dependent function inside the core module.
    Do some headers cleanup at the same time.
    
    Signed-off-by: Jean-Baptiste Maneyrol <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Stable-dep-of: affe3f077d7a ("iio: imu: inv_icm42600: fix timestamping by limiting FIFO reading")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: imu: inv_icm42600: stabilized timestamp in interrupt [+ + +]
Author: Jean-Baptiste Maneyrol <[email protected]>
Date:   Mon Jul 13 23:04:43 2026 -0400

    iio: imu: inv_icm42600: stabilized timestamp in interrupt
    
    [ Upstream commit d7bd473632d07f8a54655c270c0940cc3671c548 ]
    
    Use IRQF_ONESHOT flag to ensure the timestamp is not updated in the
    hard handler during the thread handler. And compute and use the
    effective watermark value that correspond to this first timestamp.
    
    This way we can ensure the timestamp is always corresponding to the
    value used by the timestamping mechanism. Otherwise, it is possible
    that between FIFO count read and FIFO processing the timestamp is
    overwritten in the hard handler.
    
    Fixes: ec74ae9fd37c ("iio: imu: inv_icm42600: add accurate timestamping")
    Cc: [email protected]
    Signed-off-by: Jean-Baptiste Maneyrol <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Stable-dep-of: affe3f077d7a ("iio: imu: inv_icm42600: fix timestamping by limiting FIFO reading")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: imu: inv_mpu6050: fix frequency setting when chip is off [+ + +]
Author: Jean-Baptiste Maneyrol <[email protected]>
Date:   Mon Feb 19 15:47:41 2024 +0000

    iio: imu: inv_mpu6050: fix frequency setting when chip is off
    
    commit daec424cc57b33a28f8621eb7ac85f8bd327bd6b upstream.
    
    Track correctly FIFO state and apply ODR change before starting
    the chip. Without the fix, you cannot change ODR more than 1 time
    when data buffering is off. This restriction on a single pending ODR
    change should only apply when the FIFO is on.
    
    Fixes: 111e1abd0045 ("iio: imu: inv_mpu6050: use the common inv_sensors timestamp module")
    Cc: [email protected]
    Signed-off-by: Jean-Baptiste Maneyrol <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: imu: inv_mpu6050: use the common inv_sensors timestamp module [+ + +]
Author: Jean-Baptiste Maneyrol <[email protected]>
Date:   Mon Jul 13 23:04:40 2026 -0400

    iio: imu: inv_mpu6050: use the common inv_sensors timestamp module
    
    [ Upstream commit 111e1abd00455971f6a568900f033cbddec9d4e5 ]
    
    Replace timestamping by the new common inv_sensors timestamp
    module. The principle behind is the same but the implementation in
    the new module is far better providing less jitter and a better
    estimation.
    
    Signed-off-by: Jean-Baptiste Maneyrol <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Stable-dep-of: affe3f077d7a ("iio: imu: inv_icm42600: fix timestamping by limiting FIFO reading")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: imu: st_lsm6dsx: deselect shub page before reading whoami [+ + +]
Author: Andreas Kempe <[email protected]>
Date:   Thu Jul 2 10:41:23 2026 +0000

    iio: imu: st_lsm6dsx: deselect shub page before reading whoami
    
    commit aede83625ff5d9539508582036df30c809d51058 upstream.
    
    As part of driver initialization, e.g. st_lsm6dsx_init_shub() selects
    the shub register page using st_lsm6dsx_set_page(). Selecting the shub
    register page shadows the regular register space so whoami, among other
    registers, is no longer accessible.
    
    In applications where the IMU is permanently powered separately from the
    processor, there is a window where a reset of the CPU leaves the IMU in
    the shub register page. Once this occurs, any subsequent probe attempt
    fails because of the register shadowing.
    
    Using the ism330dlc, the error typically looks like
    
        st_lsm6dsx_i2c 3-006a: unsupported whoami [10]
    
    with the unknown whoami read from a reserved register in the shub page.
    
    The reset register is also shadowed by the page select, preventing a
    reset from recovering the chip.
    
    Unconditionally clear the shub page before the whoami readout to ensure
    normal register access and allow the initialization to proceed.
    
    Place the fix in st_lsm6dsx_check_whoami() before the whoami check
    because hw->settings, which st_lsm6dsx_set_page() relies on, is first
    assigned in that function.
    
    Placing the fix in a more logical place than the whoami check would
    require a bigger restructuring of the code.
    
    Fixes: c91c1c844ebd ("iio: imu: st_lsm6dsx: add i2c embedded controller support")
    Signed-off-by: Andreas Kempe <[email protected]>
    Acked-by: Lorenzo Bianconi <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: invensense: fix odr switching to same value [+ + +]
Author: Jean-Baptiste Maneyrol <[email protected]>
Date:   Fri May 24 12:48:51 2024 +0000

    iio: invensense: fix odr switching to same value
    
    commit 95444b9eeb8c5c0330563931d70c61ca3b101548 upstream.
    
    ODR switching happens in 2 steps, update to store the new value and then
    apply when the ODR change flag is received in the data. When switching to
    the same ODR value, the ODR change flag is never happening, and frequency
    switching is blocked waiting for the never coming apply.
    
    Fix the issue by preventing update to happen when switching to same ODR
    value.
    
    Fixes: 0ecc363ccea7 ("iio: make invensense timestamp module generic")
    Cc: [email protected]
    Signed-off-by: Jean-Baptiste Maneyrol <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: invensense: fix timestamp glitches when switching frequency [+ + +]
Author: Jean-Baptiste Maneyrol <[email protected]>
Date:   Mon Jul 13 23:04:42 2026 -0400

    iio: invensense: fix timestamp glitches when switching frequency
    
    [ Upstream commit bf8367b00c33c64a9391c262bb2e11d274c9f2a4 ]
    
    When a sensor is running and there is a FIFO frequency change due to
    another sensor turned on/off, there are glitches on timestamp. Fix that
    by using only interrupt timestamp when there is the corresponding sensor
    data in the FIFO.
    
    Delete FIFO period handling and simplify internal functions.
    
    Update integration inside inv_mpu6050 and inv_icm42600 drivers.
    
    Fixes: 0ecc363ccea7 ("iio: make invensense timestamp module generic")
    Cc: [email protected]
    Signed-off-by: Jean-Baptiste Maneyrol <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Stable-dep-of: affe3f077d7a ("iio: imu: inv_icm42600: fix timestamping by limiting FIFO reading")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: invensense: remove redundant initialization of variable period [+ + +]
Author: Colin Ian King <[email protected]>
Date:   Mon Jul 13 23:04:41 2026 -0400

    iio: invensense: remove redundant initialization of variable period
    
    [ Upstream commit b58b13f156c00c2457035b7071eaaac105fe6836 ]
    
    The variable period is being initialized with a value that is never
    read, it is being re-assigned a new value later on before it is read.
    The initialization is redundant and can be removed.
    
    Cleans up clang scan build warning:
    Value stored to 'period' during its initialization is never
    read [deadcode.DeadStores]
    
    Signed-off-by: Colin Ian King <[email protected]>
    Acked-by: Jean-Baptiste Maneyrol <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Stable-dep-of: affe3f077d7a ("iio: imu: inv_icm42600: fix timestamping by limiting FIFO reading")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: light: al3010: fix incorrect scale for the highest gain range [+ + +]
Author: Vidhu Sarwal <[email protected]>
Date:   Sat Jul 4 17:22:45 2026 +0530

    iio: light: al3010: fix incorrect scale for the highest gain range
    
    commit aa411adc6ce40ad1a55ebc965f255a4cfc0005f8 upstream.
    
    al3010_scales[] encodes the highest gain range as {0, 1187200}.
    For IIO_VAL_INT_PLUS_MICRO, the fractional part must be less than
    1000000, so the scale 1.1872 should instead be represented as
    { 1, 187200 }.
    
    Since write_raw() compares the value from userspace against this
    table, writing the advertised 1.1872 scale never matches the malformed
    entry and returns -EINVAL. As a result, the highest gain range cannot
    be selected. Reading the scale in that state also reports the malformed
    value.
    
    Fixes: c36b5195ab70 ("iio: light: add Dyna-Image AL3010 driver")
    Signed-off-by: Vidhu Sarwal <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: light: gp2ap002: fix runtime PM leak on read error [+ + +]
Author: Biren Pandya <[email protected]>
Date:   Sun Jun 14 12:45:49 2026 +0530

    iio: light: gp2ap002: fix runtime PM leak on read error
    
    commit 38b72267b7e22768a1f26d9935de4e1752a1dc85 upstream.
    
    gp2ap002_read_raw() calls pm_runtime_get_sync() before reading the
    lux value, but if gp2ap002_get_lux() fails, it returns directly. This
    skips the pm_runtime_put_autosuspend() call at the "out" label,
    permanently leaking a runtime PM reference and preventing the device
    from autosuspending.
    
    Replace the direct return with a "goto out" to ensure the reference
    is properly dropped on the error path.
    
    Fixes: f6dbf83c17cb ("iio: light: gp2ap002: Take runtime PM reference on light read")
    Signed-off-by: Biren Pandya <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: light: opt3001: fix missing state reset on timeout [+ + +]
Author: Joshua Crofts <[email protected]>
Date:   Tue May 26 13:15:29 2026 +0200

    iio: light: opt3001: fix missing state reset on timeout
    
    commit c123ca6ee26ad98f70a866ff428b08145c5a24fe upstream.
    
    Currently in the function opt3001_get_processed(), there is a check
    that directly returns -ETIMEDOUT if the conversion IRQ times out,
    completely bypassing the err label, leaving ok_to_ignore_lock
    permanently true, potentially breaking the device's falling threshold
    interrupt detection.
    
    Assign -ETIMEDOUT to the return variable and jump to the error label
    to ensure ok_to_ignore_lock is properly reset.
    
    Fixes: 26d90b559057 ("iio: light: opt3001: Fixed timeout error when 0 lux")
    Reported-by: Sashiko <[email protected]>
    Closes: https://sashiko.dev/#/patchset/20260525-opt3001-cleanup-v4-0-65b36a174f78%40gmail.com?part=1
    Signed-off-by: Joshua Crofts <[email protected]>
    Cc: [email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: light: si1133: prevent race condition on timeout [+ + +]
Author: Joshua Crofts <[email protected]>
Date:   Tue May 5 09:31:27 2026 +0200

    iio: light: si1133: prevent race condition on timeout
    
    [ Upstream commit 8c50a95ceb230d17801758a9e41ffbbbe46f8b4d ]
    
    Sashiko reported a bug where the si1133_command exits on timeout
    without halting the sensor or masking the interrupt. If the sensor
    completes the command later, any subsequent command to the sensor
    will cause the IRQ handler to complete immediately, returning stale
    data to the driver all while the command hasn't finished yet, shifting
    all potential reads in the future.
    
    Fix this by masking the IRQ if wait_for_completion_timeout() fails.
    When initiating a new command, do a dummy read of the IRQ_STATUS
    register and turn the IRQ back on.
    
    Fixes: e01e7eaf37d8 ("iio: light: introduce si1133")
    Reported-by: sashiko-bot <[email protected]>
    Closes: https://sashiko.dev/#/message/20260428-si1133-checkup-v2-5-70ad14bfefe2%40gmail.com
    Assisted-by: gemini:gemini-3.1-pro-preview
    Signed-off-by: Joshua Crofts <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

iio: light: si1133: reset counter to prevent race condition [+ + +]
Author: Joshua Crofts <[email protected]>
Date:   Tue May 5 09:31:26 2026 +0200

    iio: light: si1133: reset counter to prevent race condition
    
    [ Upstream commit 0a5f45ed2342aabae1e32c72558d15be28940a95 ]
    
    Sashiko reported a potential race condition happening when the driver
    returns an errno after a timeout in the si1133_command() function. The
    premature exit causes the hardware and software counters to become out
    of sync by not updating data->rsp_seq, therefore the internal hardware
    counter keeps incrementing.
    
    Fix this by adding a call to si1133_cmd_reset_counter() before returning
    from timeout.
    
    Fixes: e01e7eaf37d8 ("iio: light: introduce si1133")
    Reported-by: sashiko-bot <[email protected]>
    Closes: https://sashiko.dev/#/message/20260428-si1133-checkup-v2-5-70ad14bfefe2%40gmail.com
    Assisted-by: gemini:gemini-3.1-pro-preview
    Signed-off-by: Joshua Crofts <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

iio: light: veml6030: fix channel type when pushing events [+ + +]
Author: Javier Carrasco <[email protected]>
Date:   Thu May 14 14:01:11 2026 +1300

    iio: light: veml6030: fix channel type when pushing events
    
    commit c52bb33b641ebaae3e209f97714cb1758206f7d9 upstream.
    
    The events are registered for IIO_LIGHT and not for IIO_INTENSITY.
    Use the correct channel type.
    
    When at it, fix minor checkpatch code style warning (alignment).
    
    Cc: [email protected]
    Fixes: 7b779f573c48 ("iio: light: add driver for veml6030 ambient light sensor")
    Signed-off-by: Javier Carrasco <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: magnetometer: ak8975: Add missed pm_runtime_put_autosuspend() call [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Wed May 6 10:27:55 2026 +0200

    iio: magnetometer: ak8975: Add missed pm_runtime_put_autosuspend() call
    
    commit e94944d7364d3ddb273539492f9bd9c9a622549a upstream.
    
    On the failure in the ak8975_read_axis() the PM runtime gets unbalanced.
    Balance it by calling pm_runtime_put_autosuspend() on error path as well.
    
    Fixes: cde4cb5dd422 ("iio: magn: ak8975: deploy runtime and system PM")
    Reported-by: Sashiko <[email protected]>
    Closes: https://sashiko.dev/#/patchset/20260505-magnetometer-fixes-v5-0-831b9b5550fc%40gmail.com
    Signed-off-by: Andy Shevchenko <[email protected]>
    Reviewed-by: Joshua Crofts <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: magnetometer: ak8975: fix potential kernel stack memory leak [+ + +]
Author: Joshua Crofts <[email protected]>
Date:   Fri May 15 12:28:23 2026 +0200

    iio: magnetometer: ak8975: fix potential kernel stack memory leak
    
    [ Upstream commit a9a00d727b7bbc5e913a919530a9dd468935bf95 ]
    
    Currently in the AK8975 driver there are four instances where potential
    uninitialized kernel stack memory leaks can occur. If
    i2c_smbus_read_i2c_block_data_or_emulated() returns a value less than
    the size of the buffer, uninitialized bytes are retained in the buffer
    and later the buffer is passed on to IIO buffers, potentially leaking
    memory to userspace.
    
    Fix this by adding checks whether the return value of the function is
    equal to the size of the buffer and subsequently if the value is
    lesser than zero to distinguish from a returned error code.
    
    Fixes: bc11ca4a0b84 ("iio:magnetometer:ak8975: triggered buffer support")
    Reported-by: Sashiko <[email protected]>
    Closes: https://sashiko.dev/#/patchset/20260513-ak8975-fix-v1-1-104ea605dd54%40gmail.com
    Signed-off-by: Joshua Crofts <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

iio: make invensense timestamp module generic [+ + +]
Author: Jean-Baptiste Maneyrol <[email protected]>
Date:   Mon Jul 13 23:04:39 2026 -0400

    iio: make invensense timestamp module generic
    
    [ Upstream commit 0ecc363ccea71eda6a2cceade120489259bcdb33 ]
    
    Rename common module to inv_sensors_timestamp, add configuration
    at init (chip internal clock, acceptable jitter, ...) and update
    inv_icm42600 driver integration.
    
    Signed-off-by: Jean-Baptiste Maneyrol <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Stable-dep-of: affe3f077d7a ("iio: imu: inv_icm42600: fix timestamping by limiting FIFO reading")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: move inv_icm42600 timestamp module in common [+ + +]
Author: Jean-Baptiste Maneyrol <[email protected]>
Date:   Mon Jul 13 23:04:38 2026 -0400

    iio: move inv_icm42600 timestamp module in common
    
    [ Upstream commit d99ff463ecf651437e9e4abe68f331dfb6b5bd9d ]
    
    Create new inv_sensors common modules and move inv_icm42600
    timestamp module inside. This module will be used by IMUs and
    also in the future by other chips.
    
    Modify inv_icm42600 driver to use timestamp module and do some
    headers cleanup.
    
    Signed-off-by: Jean-Baptiste Maneyrol <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Stable-dep-of: affe3f077d7a ("iio: imu: inv_icm42600: fix timestamping by limiting FIFO reading")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: temperature: ltc2983: Fix n_wires default bypassing rotation check [+ + +]
Author: Liviu Stan <[email protected]>
Date:   Mon Jul 13 18:16:13 2026 +0300

    iio: temperature: ltc2983: Fix n_wires default bypassing rotation check
    
    [ Upstream commit 434c150752675f44dc52c384a7fa22e5176bc35a ]
    
    When adi,number-of-wires is absent, n_wires is left at 0. The binding
    documents a default of 2 wires, matching the hardware default. However
    the current-rotate validation checks n_wires == 2 || n_wires == 3, so
    with n_wires = 0 the guard is bypassed and adi,current-rotate is accepted
    for a 2-wire RTD.
    
    Initialize n_wires = 2 to match the binding default and ensure the
    rotation check fires correctly when the property is absent.
    
    Fixes: f110f3188e56 ("iio: temperature: Add support for LTC2983")
    Signed-off-by: Liviu Stan <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Liviu Stan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

iio: temperature: ltc2983: Fix reinit_completion() called after conversion start [+ + +]
Author: Liviu Stan <[email protected]>
Date:   Mon May 25 19:39:29 2026 +0300

    iio: temperature: ltc2983: Fix reinit_completion() called after conversion start
    
    commit 5cb9fdb446bfc3ae0524496f53fb68e67051701b upstream.
    
    reinit_completion() was called after regmap_write() initiated the hardware
    conversion, creating a race window where the interrupt could fire and call
    complete() before reinit_completion() reset the completion.
    
    Move reinit_completion() before the regmap_write() to close the race.
    ltc2983_eeprom_cmd() already does it in the correct order.
    
    Fixes: f110f3188e56 ("iio: temperature: Add support for LTC2983")
    Signed-off-by: Liviu Stan <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Input: elan_i2c - prevent division by zero and arithmetic underflow [+ + +]
Author: Ranjan Kumar <[email protected]>
Date:   Mon Jun 22 22:31:05 2026 -0700

    Input: elan_i2c - prevent division by zero and arithmetic underflow
    
    commit df2b818fa009c10ff6ba875a1663ff001cda9558 upstream.
    
    The Elan I2C touchpad driver queries the device for its physical
    dimensions and trace counts to calculate the device resolution and width.
    However, if the device firmware or device tree provides invalid zero
    values for x_traces or y_traces, it results in a fatal division-by-zero
    exception leading to a kernel panic during device probe.
    
    Add checks to ensure these parameters are non-zero before performing
    the division. If invalid trace values are detected, fall back to a safe
    default of 1.
    
    Additionally, prevent an arithmetic underflow in the touch reporting
    logic. Previously, if the calculated or fallback width was smaller than
    ETP_FWIDTH_REDUCE (90), the subtraction would underflow, resulting in a
    massive unsigned integer being reported to userspace. Clamp the adjusted
    width to a minimum of 0 to safely handle small physical dimensions and
    fallback scenarios.
    
    Completing the probe with safe fallback values ensures the sysfs nodes
    are created, keeping the firmware update path intact so a recovery
    firmware can be flashed to the device.
    
    Fixes: 6696777c6506 ("Input: add driver for Elan I2C/SMbus touchpad")
    Fixes: e3a9a1290688 ("Input: elan_i2c - do not query the info if they are provided")
    Signed-off-by: Ranjan Kumar <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: [email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: goodix - clamp the device-reported contact count [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Fri Jun 12 21:10:33 2026 -0500

    Input: goodix - clamp the device-reported contact count
    
    commit 5ed62a96e06be4e94b8296b7932afee550a70e04 upstream.
    
    goodix_ts_read_input_report() copies the number of touch points reported
    by the device into an on-stack buffer
    
            u8 point_data[2 + GOODIX_MAX_CONTACT_SIZE * GOODIX_MAX_CONTACTS];
    
    which is sized for at most GOODIX_MAX_CONTACTS (10) contacts. The only
    runtime check bounds the per-interrupt count against ts->max_touch_num,
    but that value is taken verbatim from a 4-bit field of the device
    configuration block and is never clamped:
    
            ts->max_touch_num = ts->config[MAX_CONTACTS_LOC] & 0x0f;
    
    The nibble can be 0..15, so a malfunctioning, malicious or counterfeit
    controller (or an attacker tampering with the I2C bus) can advertise up
    to 15 contacts. goodix_ts_read_input_report() then accepts a touch_num
    of up to 15 and the second goodix_i2c_read() writes
    ts->contact_size * (touch_num - 1) bytes past the one-contact header into
    point_data - up to 30 bytes (45 with the 9-byte report format) beyond the
    92-byte buffer: a stack out-of-bounds write.
    
    Clamp max_touch_num to GOODIX_MAX_CONTACTS, the number of contacts
    point_data[] is sized for, when reading it from the configuration.
    
    Fixes: a7ac7c95d468 ("Input: goodix - use max touch number from device config")
    Cc: [email protected]
    Signed-off-by: Bryam Vargas <[email protected]>
    Reviewed-by: Hans de Goede <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: iforce - bound the device-reported force-feedback effect index [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Mon Jun 22 20:47:50 2026 -0700

    Input: iforce - bound the device-reported force-feedback effect index
    
    commit 0e9943d2e4c63496b6ca84bc66fd3c71d40558e2 upstream.
    
    iforce_process_packet() handles a status report (packet id 0x02) by
    taking a force-feedback effect index straight from the device wire and
    using it to address the per-effect state array:
    
            i = data[1] & 0x7f;
            if (data[1] & 0x80) {
                    if (!test_and_set_bit(FF_CORE_IS_PLAYED,
                                          iforce->core_effects[i].flags))
                            ...
            } else if (test_and_clear_bit(FF_CORE_IS_PLAYED,
                                          iforce->core_effects[i].flags)) {
                    ...
            }
    
    The index is masked only with 0x7f, so it ranges 0..127, but
    core_effects[] holds only IFORCE_EFFECTS_MAX (32) entries.  For an index
    of 32..127 the test_and_set_bit()/test_and_clear_bit() is an
    out-of-bounds single-bit read-modify-write past the array.  core_effects[]
    is the second-to-last member of struct iforce, so the write lands in the
    trailing members and beyond the embedding kzalloc()'d iforce_serio /
    iforce_usb object.
    
    data[1] is unvalidated device payload on both transports (the USB
    interrupt endpoint and serio), and the status path is not gated on force
    feedback being present, so a malicious or counterfeit device can set or
    clear a bit at an attacker-chosen offset past the object.
    
    Reject an out-of-range index instead of indexing with it.  Bound against
    the array dimension IFORCE_EFFECTS_MAX rather than dev->ff->max_effects so
    the check guarantees memory safety regardless of how many effects the
    device registered.  A legitimate "effect started/stopped" status always
    carries an index below IFORCE_EFFECTS_MAX, so well-formed devices are
    unaffected; the neighbouring mark_core_as_ready() loop is already bounded
    and is left untouched.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Bryam Vargas <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: ims-pcu - add response length checks [+ + +]
Author: Dmitry Torokhov <[email protected]>
Date:   Fri May 22 10:40:54 2026 -0700

    Input: ims-pcu - add response length checks
    
    commit 48c9d92fd4ee3a8f5d2cb46c802a0eff8e67c79c upstream.
    
    The driver processes response data from device buffers without verifying
    that the device actually sent enough data. This can lead to
    out-of-bounds reads or processing stale data.
    
    Add checks for the expected response length before accessing the
    buffers.
    
    Fixes: 628329d52474 ("Input: add IMS Passenger Control Unit driver")
    Cc: [email protected]
    Reported-by: Sashiko bot <[email protected]>
    Assisted-by: Gemini:gemini-3.1-pro
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: ims-pcu - fix DMA mapping violation in line setup [+ + +]
Author: Dmitry Torokhov <[email protected]>
Date:   Fri May 22 10:30:44 2026 -0700

    Input: ims-pcu - fix DMA mapping violation in line setup
    
    commit 8adf4289d945e8990e4336436a97da71d21d2cae upstream.
    
    In ims_pcu_line_setup(), the driver uses pcu->cmd_buf as a transfer
    buffer for usb_control_msg(). However, pcu->cmd_buf is embedded in the
    struct ims_pcu allocation, which violates DMA mapping rules regarding
    cacheline alignment.
    
    Use a heap-allocated buffer for the line coding data instead.
    
    Fixes: 628329d52474 ("Input: add IMS Passenger Control Unit driver")
    Cc: [email protected]
    Reported-by: Sashiko bot <[email protected]>
    Assisted-by: Gemini:gemini-3.1-pro
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: ims-pcu - fix out-of-bounds read in ims_pcu_irq() debug logging [+ + +]
Author: Dmitry Torokhov <[email protected]>
Date:   Fri May 22 10:30:21 2026 -0700

    Input: ims-pcu - fix out-of-bounds read in ims_pcu_irq() debug logging
    
    commit 403b0a6970b1084bb27907c0f8225801fdd0fe1d upstream.
    
    The debug logging in ims_pcu_irq() unconditionally prints data from
    pcu->urb_in_buf. However, if the interrupt fired for pcu->urb_ctrl, the
    actual data resides in pcu->urb_ctrl_buf. If urb->actual_length for the
    control URB exceeds pcu->max_in_size, this leads to an out-of-bounds
    read.
    
    Fix this by printing from the correct buffer associated with the URB.
    
    Fixes: 628329d52474 ("Input: add IMS Passenger Control Unit driver")
    Cc: [email protected]
    Reported-by: Sashiko bot <[email protected]>
    Assisted-by: Gemini:gemini-3.1-pro
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: ims-pcu - fix potential infinite loop in CDC union descriptor parsing [+ + +]
Author: Dmitry Torokhov <[email protected]>
Date:   Fri May 22 21:42:39 2026 -0700

    Input: ims-pcu - fix potential infinite loop in CDC union descriptor parsing
    
    commit d4579af29e67ca8722db0a1194227f8015c8981d upstream.
    
    The driver parses CDC union descriptors in ims_pcu_get_cdc_union_desc()
    by iterating through the extra descriptor data. However, it does not
    verify that the bLength of each descriptor is at least 2. A malicious
    device could provide a descriptor with bLength = 0, leading to an
    infinite loop in the driver.
    
    Add a check to ensure bLength is at least 2 before proceeding with
    parsing.
    
    Fixes: 628329d52474 (Input: add IMS Passenger Control Unit driver)
    Cc: [email protected]
    Assisted-by: Gemini:gemini-3.1-pro
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: ims-pcu - fix type confusion in CDC union descriptor parsing [+ + +]
Author: Dmitry Torokhov <[email protected]>
Date:   Fri May 22 10:25:11 2026 -0700

    Input: ims-pcu - fix type confusion in CDC union descriptor parsing
    
    commit ca459e237bc49567649c56bc72e4c602fb92fd67 upstream.
    
    The driver currently trusts the bMasterInterface0 from the CDC union
    descriptor without verifying that it matches the interface being
    probed. This could lead to the driver overwriting the private data of
    another interface.
    
    Validate that the control interface found in the descriptor is indeed
    the one we are probing.
    
    Fixes: 628329d52474 ("Input: add IMS Passenger Control Unit driver")
    Cc: [email protected]
    Reported-by: Sashiko bot <[email protected]>
    Assisted-by: Gemini:gemini-3.1-pro
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: ims-pcu - fix use-after-free and double-free in disconnect [+ + +]
Author: Dmitry Torokhov <[email protected]>
Date:   Fri May 22 10:24:47 2026 -0700

    Input: ims-pcu - fix use-after-free and double-free in disconnect
    
    commit 462a999917755a3bf77448dfd64307963cf0a9f0 upstream.
    
    ims_pcu_disconnect() only intended to perform cleanup when the primary
    (control) interface is unbound. However, it currently relies on the
    interface class to distinguish between control and data interfaces.
    A malicious device could present a data interface with the same class
    as the control interface, leading to premature cleanup and potential
    use-after-free or double-free.
    
    Switch to verifying that the interface being disconnected is indeed
    the control interface.
    
    Fixes: 628329d52474 ("Input: add IMS Passenger Control Unit driver")
    Cc: [email protected]
    Reported-by: Sashiko bot <[email protected]>
    Assisted-by: Gemini:gemini-3.1-pro
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: ims-pcu - release data interface on disconnect [+ + +]
Author: Dmitry Torokhov <[email protected]>
Date:   Fri May 22 10:22:55 2026 -0700

    Input: ims-pcu - release data interface on disconnect
    
    commit 441c510a649c8ddce38aa0311334ed8bb546b36c upstream.
    
    During probe the driver claims the data interface, but it never releases
    it. Release it in disconnect to avoid leaving it permanently claimed.
    
    Fixes: 628329d52474 ("Input: add IMS Passenger Control Unit driver")
    Cc: [email protected]
    Reported-by: Sashiko bot <[email protected]>
    Assisted-by: Gemini:gemini-3.1-pro
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: ims-pcu - validate control endpoint type [+ + +]
Author: Dmitry Torokhov <[email protected]>
Date:   Fri May 22 10:29:26 2026 -0700

    Input: ims-pcu - validate control endpoint type
    
    commit baf56975806534268e24acf9a8abb1c447ce11e9 upstream.
    
    The driver currently assumes that the first endpoint of the control
    interface is an interrupt IN endpoint without verifying it. A malicious
    device could provide a different endpoint type, which would then be
    passed to usb_fill_int_urb(), potentially leading to kernel warnings
    or undefined behavior.
    
    Verify that the control endpoint is an interrupt IN endpoint.
    
    Fixes: 628329d52474 ("Input: add IMS Passenger Control Unit driver")
    Cc: [email protected]
    Reported-by: Sashiko bot <[email protected]>
    Assisted-by: Gemini:gemini-3.1-pro
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: maple_keyb - set driver data before registering input device [+ + +]
Author: Dmitry Torokhov <[email protected]>
Date:   Mon Jun 29 18:44:41 2026 -0700

    Input: maple_keyb - set driver data before registering input device
    
    commit 536394ec81419b67d9f4f0028812c4372397be1b upstream.
    
    Set maple driver data before calling input_register_device() to
    ensure that it is available if the device is opened immediately and
    the callback is triggered.
    
    Cc: [email protected]
    Assisted-by: Antigravity:gemini-3.5-flash
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: maplecontrol - set driver data before registering input device [+ + +]
Author: Dmitry Torokhov <[email protected]>
Date:   Mon Jun 29 22:49:15 2026 -0700

    Input: maplecontrol - set driver data before registering input device
    
    commit fe938ee497d58c644f6910cfe6ae155f6fb3e523 upstream.
    
    Set maple driver data before calling input_register_device() to
    ensure that it is available if the device is opened immediately and
    the callback is triggered.
    
    Cc: [email protected]
    Assisted-by: Antigravity:gemini-3.5-flash
    Tested-by: Florian Fuchs <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: maplemouse - fix NULL pointer dereference in open() [+ + +]
Author: Florian Fuchs <[email protected]>
Date:   Mon Jun 29 18:33:42 2026 -0700

    Input: maplemouse - fix NULL pointer dereference in open()
    
    commit ee89db004238bd0b034f2a6176e175561658750b upstream.
    
    Commit 555c765b0cc2 ("Input: mouse - drop unnecessary calls to
    input_set_drvdata") dropped the input_set_drvdata() call in probe
    because the data appeared to be unused. However, dc_mouse_open() and
    dc_mouse_close() were using maple_get_drvdata(to_maple_dev(&dev->dev)).
    This appears to be accessing the data attached to an instance of
    maple_device structure, while in reality this actually retrieves driver
    data from the input device's embedded struct device (doing invalid
    conversion of input device structure to maple device). After
    input_set_drvdata() was removed, that lookup started returning NULL and
    opening the input device dereferences mse->mdev.
    
    Restore input_set_drvdata() and convert open() and close() to use
    input_get_drvdata() so the dependency is no longer hidden.
    
    Fixes: 6b3480855aad ("maple: input: fix up maple mouse driver")
    Fixes: 555c765b0cc2 ("Input: mouse - drop unnecessary calls to input_set_drvdata")
    Signed-off-by: Florian Fuchs <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: [email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: maplemouse - set driver data before registering input device [+ + +]
Author: Dmitry Torokhov <[email protected]>
Date:   Mon Jun 29 22:47:34 2026 -0700

    Input: maplemouse - set driver data before registering input device
    
    commit 738f24bbbc95dd50cb4229d1ed62a05f29db2bda upstream.
    
    Set maple driver data before calling input_register_device() to
    ensure that it is available if the device is opened immediately and
    the callback is triggered.
    
    Cc: [email protected]
    Assisted-by: Antigravity:gemini-3.5-flash
    Tested-by: Florian Fuchs <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: mms114 - fix multi-touch slot corruption [+ + +]
Author: Dmitry Torokhov <[email protected]>
Date:   Fri Jul 3 23:01:12 2026 -0700

    Input: mms114 - fix multi-touch slot corruption
    
    commit adea84ee6cdea611146c4251d3c1616f5a09feca upstream.
    
    If the touchscreen controller reports a touch ID of 0, the driver
    calculates the slot ID as touch->id - 1, which underflows to UINT_MAX.
    This is passed to input_mt_slot() as -1.
    
    Since the input core ignores negative slot values, the active slot remains
    unchanged. The driver then reports the touch coordinates for the previously
    active slot, corrupting its state.
    
    Fix this by rejecting touch reports with ID 0.
    
    Fixes: 07b8481d4aff ("Input: add MELFAS mms114 touchscreen driver")
    Cc: [email protected]
    Reported-by: [email protected]
    Assisted-by: Antigravity:gemini-3.5-flash
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: synaptics-rmi4 - bound the F30 keymap to the GPIO/LED count [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Sun Jun 14 00:36:12 2026 -0500

    Input: synaptics-rmi4 - bound the F30 keymap to the GPIO/LED count
    
    commit d577e46785d45484b2ab7e7309c49b18764bf56c upstream.
    
    rmi_f30_map_gpios() allocates gpioled_key_map with
    min(gpioled_count, TRACKSTICK_RANGE_END) == at most 6 entries, but
    rmi_f30_attention() iterates the full f30->gpioled_count (device query
    register, range 0..31) and dereferences gpioled_key_map[i], and
    input->keycodemax is set to the full gpioled_count while input->keycode
    points at the 6-entry allocation.
    
    A device that reports gpioled_count > 6 with GPIO support enabled
    therefore causes an out-of-bounds read on the attention interrupt and
    out-of-bounds read/write through the EVIOCGKEYCODE/EVIOCSKEYCODE ioctls,
    which bound the index only against keycodemax. This is the same defect
    as the F3A handler, which was copied from F30.
    
    Size the keymap for the full gpioled_count; the mapping loop still
    assigns only the first min(gpioled_count, TRACKSTICK_RANGE_END) entries.
    
    Fixes: 3e64fcbdbd10 ("Input: synaptics-rmi4 - limit the range of what GPIOs are buttons")
    Cc: [email protected]
    Signed-off-by: Bryam Vargas <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: synaptics-rmi4 - bound the F3A keymap to the GPIO count [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Sun Jun 14 00:36:11 2026 -0500

    Input: synaptics-rmi4 - bound the F3A keymap to the GPIO count
    
    commit 57c10915f2c16c90e0d46ad00876bf39ece40fc2 upstream.
    
    rmi_f3a_initialize() takes the GPIO count from the device query register
    (f3a->gpio_count = buf & RMI_F3A_GPIO_COUNT, range 0..127).
    rmi_f3a_map_gpios() then allocates gpio_key_map with
    min(gpio_count, TRACKSTICK_RANGE_END) == at most 6 entries, but
    rmi_f3a_attention() iterates the full gpio_count and dereferences
    gpio_key_map[i], and input->keycodemax is set to the full gpio_count
    while input->keycode points at the 6-entry allocation.
    
    A device that reports gpio_count > 6 therefore causes an out-of-bounds
    read of gpio_key_map[] on every attention interrupt, and out-of-bounds
    accesses through the input core's default keymap ioctls: EVIOCGKEYCODE
    reads past the buffer (leaking adjacent slab memory to user space) and
    EVIOCSKEYCODE writes a caller-controlled value past it, for any process
    able to open the evdev node, since input_default_getkeycode() and
    input_default_setkeycode() only bound the index against keycodemax.
    
    Size the keymap for the full gpio_count. The mapping loop is unchanged:
    it still assigns only the first min(gpio_count, TRACKSTICK_RANGE_END)
    entries; the remaining slots stay KEY_RESERVED (devm_kcalloc zero-fills)
    and are skipped when reporting.
    
    Fixes: 9e4c596bfd00 ("Input: synaptics-rmi4 - add support for F3A")
    Cc: [email protected]
    Signed-off-by: Bryam Vargas <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: synaptics-rmi4 - unregister function handlers on physical driver registration failure [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Wed Jun 10 16:41:16 2026 -0700

    Input: synaptics-rmi4 - unregister function handlers on physical driver registration failure
    
    commit 6251f7d3472c0409e30f8d6a24f10d33d12e3f9a upstream.
    
    If rmi_register_physical_driver() fails, the current error path
    unregisters only the RMI bus. The function handlers registered
    earlier remain registered with the driver core.
    
    Add a separate error path to unregister the function handlers
    before unregistering the bus in this failure case.
    
    Fixes: 2b6a321da9a2 ("Input: synaptics-rmi4 - add support for Synaptics RMI4 devices")
    Signed-off-by: Haoxiang Li <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: touchwin - reset the packet index on every complete packet [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Sat Jun 13 20:07:20 2026 -0500

    Input: touchwin - reset the packet index on every complete packet
    
    commit 478cdd736f2ce3114f90e775d7358136d3977b94 upstream.
    
    tw_interrupt() accumulates each non-zero serial byte into a fixed
    three-byte buffer with a running index that is only reset once a full
    packet has been received *and* the device's two Y bytes agree:
    
            tw->data[tw->idx++] = data;
            if (tw->idx == TW_LENGTH && tw->data[1] == tw->data[2]) {
                    ...
                    tw->idx = 0;
            }
    
    The reset is gated on tw->data[1] == tw->data[2], a value the device
    controls.  A malicious, malfunctioning or counterfeit Touchwindow
    peripheral can stream non-zero bytes whose 2nd and 3rd bytes differ: the
    index reaches TW_LENGTH without the equality holding, is never reset, and
    keeps growing, so tw->data[tw->idx++] walks off the end of the three-byte
    array and the rest of the heap-allocated struct tw, one attacker-chosen
    byte at a time -- an unbounded, device-driven heap out-of-bounds write.
    
    Reset the index on every completed packet and report an event only when
    the two Y bytes match, like the other serio touchscreen drivers do.
    
    Fixes: 11ea3173d5f2 ("Input: add driver for Touchwin serial touchscreens")
    Cc: [email protected]
    Signed-off-by: Bryam Vargas <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
io_uring/io-wq: re-check IO_WQ_BIT_EXIT for each linked work item [+ + +]
Author: Runyu Xiao <[email protected]>
Date:   Thu May 28 01:22:03 2026 +0800

    io_uring/io-wq: re-check IO_WQ_BIT_EXIT for each linked work item
    
    commit 29bef9934b2521f787bb15dd1985d4c0d12ae02a upstream.
    
    commit 10dc95939817 ("io_uring/io-wq: check IO_WQ_BIT_EXIT inside work
    run loop") fixed the obvious case where io_worker_handle_work() took one
    exit-bit snapshot before draining pending work, but the fix stops one
    level too early.
    
    io_worker_handle_work() now re-checks IO_WQ_BIT_EXIT in its outer work
    run loop, yet it still snapshots that bit once before processing a whole
    dependent linked-work chain. If io_wq_exit_start() sets IO_WQ_BIT_EXIT
    after the first linked item has started, the remaining linked items can
    still reuse stale do_kill = false, skip IO_WQ_WORK_CANCEL, and continue
    running after exit has begun.
    
    Move the check further inside, so it covers linked items too. Note: this
    is a syzbot special as it loves setting up tons of slow linked work on
    weird devices like msr that take forever to read, and immediately close
    the ring. Exit then takes a long time.
    
    Fixes: 10dc95939817 ("io_uring/io-wq: check IO_WQ_BIT_EXIT inside work run loop")
    Cc: [email protected]
    Signed-off-by: Runyu Xiao <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
iommu/amd: Fix a stale comment about which legacy mode is user visible [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Fri Mar 14 20:21:48 2025 -0700

    iommu/amd: Fix a stale comment about which legacy mode is user visible
    
    [ Upstream commit 4bf53c2d0c08bbdaa32f2114281f1ddab61902bf ]
    
    Update a stale comment about which of the legacy modes is visible to the
    user, i.e. can be forced via amd_iommu_intr=legacy.
    
    Fixes: b74aa02d7a30 ("iommu/amd: Fix legacy interrupt remapping for x2APIC-enabled system")
    Signed-off-by: Sean Christopherson <[email protected]>
    Reviewed-by: Vasant Hegde <[email protected]>
    Reviewed-by: Wei Wang <[email protected]>
    Signed-off-by: Joerg Roedel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ipv4: fib: Don't ignore error route in local/main tables. [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Fri Jun 19 21:27:20 2026 +0000

    ipv4: fib: Don't ignore error route in local/main tables.
    
    [ Upstream commit b72f0db64205d9ce462038ba995d5d31eff32dc1 ]
    
    When CONFIG_IP_MULTIPLE_TABLES is enabled but no rule is added,
    fib_lookup() performs route lookup directly on two tables.
    
    Since the first lookup does not properly bail out, the result
    of an error route in the merged local/main table could be
    overwritten by another route in the default table:
    
      # unshare -n
      # ip link set lo up
      # ip route add 192.168.0.0/24 dev lo table 253
      # ip route add unreachable 192.168.0.0/24
      # ip route get 192.168.0.1
      192.168.0.1 dev lo table default uid 0
          cache <local>
    
    Once a random rule is added, the error route is respected:
    
      # ip rule add table 0
      # ip rule del table 0
      # ip route get 192.168.0.1
      RTNETLINK answers: No route to host
    
    Let's fix the inconsistent behaviour.
    
    Fixes: f4530fa574df ("ipv4: Avoid overhead when no custom FIB rules are installed.")
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ipv4: igmp: remove multicast group from hash table on device destruction [+ + +]
Author: Yuyang Huang <[email protected]>
Date:   Thu Jul 2 08:50:14 2026 +0900

    ipv4: igmp: remove multicast group from hash table on device destruction
    
    commit 7993211bde166471dffac074dc965489f86531f8 upstream.
    
    When a device is destroyed under RTNL, ip_mc_destroy_dev() iterates through
    the multicast list and calls ip_ma_put() on each membership, scheduling
    them for RCU reclamation. However, they are not unlinked from the device's
    multicast hash table (mc_hash).
    
    Since the device remains published in dev->ip_ptr until after
    ip_mc_destroy_dev() completes, concurrent RCU readers traversing mc_hash
    can still locate and access the multicast group after its refcount is
    decremented. If the RCU callback runs and frees the group while a reader is
    accessing it, a use-after-free occurs.
    
    Fix this by unlinking the multicast group from mc_hash using
    ip_mc_hash_remove() before scheduling it for reclamation.
    
    BUG: KASAN: slab-use-after-free in ip_check_mc_rcu+0x149/0x3f0
    Read of size 4 at addr ffff888009bf1408 by task mausezahn/2276
    
    Call Trace:
     <IRQ>
     dump_stack_lvl+0x67/0x90
     print_report+0x175/0x7c0
     kasan_report+0x147/0x180
     ip_check_mc_rcu+0x149/0x3f0
     udp_v4_early_demux+0x36d/0x12d0
     ip_rcv_finish_core+0xb8b/0x1390
     ip_rcv_finish+0x54/0x120
     NF_HOOK+0x213/0x2b0
     __netif_receive_skb+0x126/0x340
     process_backlog+0x4f2/0xf00
     __napi_poll+0x92/0x2c0
     net_rx_action+0x583/0xc60
     handle_softirqs+0x236/0x7f0
     do_softirq+0x57/0x80
     </IRQ>
    
    Allocated by task 2239:
     kasan_save_track+0x3e/0x80
     __kasan_kmalloc+0x72/0x90
     ____ip_mc_inc_group+0x31a/0xa40
     __ip_mc_join_group+0x334/0x3f0
     do_ip_setsockopt+0x16fa/0x2010
     ip_setsockopt+0x3f/0x90
     do_sock_setsockopt+0x1ad/0x300
    
    Freed by task 0:
     kasan_save_track+0x3e/0x80
     kasan_save_free_info+0x40/0x50
     __kasan_slab_free+0x3a/0x60
     __rcu_free_sheaf_prepare+0xd4/0x220
     rcu_free_sheaf+0x36/0x190
     rcu_core+0x8d9/0x12f0
     handle_softirqs+0x236/0x7f0
    
    Fixes: e9897071350b ("igmp: hash a hash table to speedup ip_check_mc_rcu()")
    Cc: [email protected]
    Signed-off-by: Yuyang Huang <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ipv6: addrconf: bail out of dad_failure when state is no longer POSTDAD [+ + +]
Author: Linmao Li <[email protected]>
Date:   Wed May 13 10:55:09 2026 +0800

    ipv6: addrconf: bail out of dad_failure when state is no longer POSTDAD
    
    [ Upstream commit 627ac78f2741e2ebd2225e2e953b6964a8a9182f ]
    
    addrconf_dad_failure() transitions ifp->state from DAD to POSTDAD
    via addrconf_dad_end(), which drops ifp->lock on return.  The lock
    is re-acquired after net_info_ratelimited().  A concurrent
    ipv6_del_addr() can take the lock in that window, set ifp->state
    to DEAD and run list_del_rcu(&ifp->if_list).
    
    addrconf_dad_failure() then overwrites DEAD with ERRDAD at errdad:
    and schedules a new dad_work.  The work calls ipv6_del_addr()
    again, hitting the already-poisoned list entry:
    
      general protection fault: 0000 [#1] SMP NOPTI
      CPU: 4 PID: 217 Comm: kworker/4:1
      Workqueue: ipv6_addrconf addrconf_dad_work
      RIP: 0010:ipv6_del_addr+0xe9/0x280
      RAX: dead000000000122
      Call Trace:
       addrconf_dad_stop+0x113/0x140
       addrconf_dad_work+0x28c/0x430
       process_one_work+0x1eb/0x3b0
       worker_thread+0x4d/0x400
       kthread+0x104/0x140
       ret_from_fork+0x35/0x40
    
    Fold the addrconf_dad_end() logic into addrconf_dad_failure() under
    a single ifp->lock critical section.  The STABLE_PRIVACY branch
    temporarily drops ifp->lock around address regeneration, so at
    lock_errdad: verify the state is still POSTDAD before transitioning
    to ERRDAD; bail out otherwise to avoid overwriting a state set by
    another path while the lock was released.
    
    Fixes: c15b1ccadb32 ("ipv6: move DAD and addrconf_verify processing to workqueue")
    Signed-off-by: Linmao Li <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ipv6: fix error handling in disable_ipv6 sysctl [+ + +]
Author: Fernando Fernandez Mancera <[email protected]>
Date:   Mon Jun 22 15:08:52 2026 +0200

    ipv6: fix error handling in disable_ipv6 sysctl
    
    [ Upstream commit c779441e5070e2268bdfe77f6e2e0de926c431e3 ]
    
    When writing to the disable_ipv6 sysctl, if proc_dointvec() fails to
    parse the input, it returns a negative error code. The current
    implementation is overwriting that error for write operations.
    
    This results in a silent failure, it returns a successful write although
    the configuration was not modified at all. When modifying the "all"
    variant it can also modify the configuration of existing interfaces to
    the wrong value.
    
    Fix this by checking the return value of proc_dointvec() and returning
    early on failure.
    
    Fixes: 56d417b12e57 ("IPv6: Add 'autoconf' and 'disable_ipv6' module parameters")
    Reviewed-by: Nicolas Dichtel <[email protected]>
    Signed-off-by: Fernando Fernandez Mancera <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ipv6: fix error handling in disable_policy sysctl [+ + +]
Author: Fernando Fernandez Mancera <[email protected]>
Date:   Mon Jun 22 15:08:55 2026 +0200

    ipv6: fix error handling in disable_policy sysctl
    
    [ Upstream commit 3e0e51c0ee1d08cc9d48dc17f3248d5b31cf8066 ]
    
    When writing to the disable_policy sysctl, if proc_dointvec() fails to
    parse the input, it returns a negative error code. The current
    implementation is resetting the position argument even if an error
    occurred during proc_dointvec() and not only during sysctl restart.
    
    Fix this by checking the return value of proc_dointvec() and returning
    early on failure.
    
    Fixes: df789fe75206 ("ipv6: Provide ipv6 version of "disable_policy" sysctl")
    Reviewed-by: Nicolas Dichtel <[email protected]>
    Signed-off-by: Fernando Fernandez Mancera <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ipv6: fix error handling in forwarding sysctl [+ + +]
Author: Fernando Fernandez Mancera <[email protected]>
Date:   Mon Jun 22 15:08:54 2026 +0200

    ipv6: fix error handling in forwarding sysctl
    
    [ Upstream commit 058b9b19f9639fe1e1225a17c540f61b65bee6ad ]
    
    When writing to the forwarding sysctl, if proc_dointvec() fails to parse
    the input, it returns a negative error code. The current implementation
    is overwriting that error for write operations.
    
    This results in a silent failure, it returns a successful write although
    the configuration was not modified at all. When modifying the "all"
    variant it can also modify the configuration of existing interfaces to
    the wrong value.
    
    Fix this by checking the return value of proc_dointvec() and returning
    early on failure. In addition, adjust return code of
    addrconf_fixup_forwarding() for successful operation.
    
    Fixes: b325fddb7f86 ("ipv6: Fix sysctl unregistration deadlock")
    Reviewed-by: Nicolas Dichtel <[email protected]>
    Signed-off-by: Fernando Fernandez Mancera <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ipv6: fix error handling in ignore_routes_with_linkdown sysctl [+ + +]
Author: Fernando Fernandez Mancera <[email protected]>
Date:   Mon Jun 22 15:08:53 2026 +0200

    ipv6: fix error handling in ignore_routes_with_linkdown sysctl
    
    [ Upstream commit cf4f2b14401f29ccac56393ca9e4b42a2505f540 ]
    
    When writing to the ignore_routes_with_linkdown sysctl, if
    proc_dointvec() fails to parse the input, it returns a negative error
    code. The current implementation is overwriting that error for write
    operations.
    
    This results in a silent failure, it returns a successful write although
    the configuration was not modified at all. When modifying the "all"
    variant it can also modify the configuration of existing interfaces to
    the wrong value.
    
    Fix this by checking the return value of proc_dointvec() and returning
    early on failure.
    
    Fixes: 35103d11173b ("net: ipv6 sysctl option to ignore routes when nexthop link is down")
    Reviewed-by: Nicolas Dichtel <[email protected]>
    Signed-off-by: Fernando Fernandez Mancera <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ipv6: fix lockdep splat in in6_dump_addrs() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Tue Jun 28 12:12:48 2022 +0000

    ipv6: fix lockdep splat in in6_dump_addrs()
    
    commit 4e43e64d0f1332fcc503babad4dc31aead7131ca upstream.
    
    As reported by syzbot, we should not use rcu_dereference()
    when rcu_read_lock() is not held.
    
    WARNING: suspicious RCU usage
    5.19.0-rc2-syzkaller #0 Not tainted
    
    net/ipv6/addrconf.c:5175 suspicious rcu_dereference_check() usage!
    
    other info that might help us debug this:
    
    rcu_scheduler_active = 2, debug_locks = 1
    1 lock held by syz-executor326/3617:
     #0: ffffffff8d5848e8 (rtnl_mutex){+.+.}-{3:3}, at: netlink_dump+0xae/0xc20 net/netlink/af_netlink.c:2223
    
    stack backtrace:
    CPU: 0 PID: 3617 Comm: syz-executor326 Not tainted 5.19.0-rc2-syzkaller #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:88 [inline]
     dump_stack_lvl+0xcd/0x134 lib/dump_stack.c:106
     in6_dump_addrs+0x12d1/0x1790 net/ipv6/addrconf.c:5175
     inet6_dump_addr+0x9c1/0xb50 net/ipv6/addrconf.c:5300
     netlink_dump+0x541/0xc20 net/netlink/af_netlink.c:2275
     __netlink_dump_start+0x647/0x900 net/netlink/af_netlink.c:2380
     netlink_dump_start include/linux/netlink.h:245 [inline]
     rtnetlink_rcv_msg+0x73e/0xc90 net/core/rtnetlink.c:6046
     netlink_rcv_skb+0x153/0x420 net/netlink/af_netlink.c:2501
     netlink_unicast_kernel net/netlink/af_netlink.c:1319 [inline]
     netlink_unicast+0x543/0x7f0 net/netlink/af_netlink.c:1345
     netlink_sendmsg+0x917/0xe10 net/netlink/af_netlink.c:1921
     sock_sendmsg_nosec net/socket.c:714 [inline]
     sock_sendmsg+0xcf/0x120 net/socket.c:734
     ____sys_sendmsg+0x6eb/0x810 net/socket.c:2492
     ___sys_sendmsg+0xf3/0x170 net/socket.c:2546
     __sys_sendmsg net/socket.c:2575 [inline]
     __do_sys_sendmsg net/socket.c:2584 [inline]
     __se_sys_sendmsg net/socket.c:2582 [inline]
     __x64_sys_sendmsg+0x132/0x220 net/socket.c:2582
     do_syscall_x64 arch/x86/entry/common.c:50 [inline]
     do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
     entry_SYSCALL_64_after_hwframe+0x46/0xb0
    
    Fixes: 88e2ca308094 ("mld: convert ifmcaddr6 to RCU")
    Reported-by: syzbot <[email protected]>
    Signed-off-by: Eric Dumazet <[email protected]>
    Cc: Taehee Yoo <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ipv6: Fix null-ptr-deref in fib6_nh_mtu_change(). [+ + +]
Author: Xiang Mei <[email protected]>
Date:   Thu Jun 18 21:53:34 2026 -0700

    ipv6: Fix null-ptr-deref in fib6_nh_mtu_change().
    
    [ Upstream commit 46c3b8191aad3d032776bf3bebf03efdf5f4b905 ]
    
    fib6_nh_mtu_change() re-fetches idev via __in6_dev_get(arg->dev) and
    dereferences idev->cnf.mtu6 without a NULL check. addrconf_ifdown()
    clears dev->ip6_ptr with RCU_INIT_POINTER() after rt6_disable_ip() has
    released tb6_lock, so the RA-driven MTU walk can observe a NULL idev and
    oops. The caller rt6_mtu_change_route() guards its own __in6_dev_get(),
    but this re-fetch is unguarded; nexthop-backed routes survive
    addrconf_ifdown()'s flush, so the walk still reaches it after ip6_ptr is
    nulled.
    
    Return 0 when idev is NULL, matching rt6_mtu_change_route() and the
    fib6_mtu() fix in commit 5ad509c1fdad ("ipv6: Fix null-ptr-deref in
    fib6_mtu().").
    
      Oops: general protection fault, ... KASAN: null-ptr-deref in range
            [0x00000000000002a8-0x00000000000002af]
      RIP: 0010:fib6_nh_mtu_change+0x203/0x990
       rt6_mtu_change_route+0x141/0x1d0
       __fib6_clean_all+0xd0/0x160
       rt6_mtu_change+0xb4/0x100
       ndisc_router_discovery+0x24b5/0x2cb0
       icmpv6_rcv+0x12e9/0x1710
       ipv6_rcv+0x39b/0x410
    
    Fixes: c0b220cf7d80 ("ipv6: Refactor exception functions")
    Reported-by: Weiming Shi <[email protected]>
    Signed-off-by: Xiang Mei <[email protected]>
    Reviewed-by: Fernando Fernandez Mancera <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ipv6: fix skb drops in igmp6_event_query() and igmp6_event_report() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Mar 3 09:37:28 2022 -0800

    ipv6: fix skb drops in igmp6_event_query() and igmp6_event_report()
    
    [ Upstream commit 2d3916f3189172d5c69d33065c3c21119fe539fc ]
    
    While investigating on why a synchronize_net() has been added recently
    in ipv6_mc_down(), I found that igmp6_event_query() and igmp6_event_report()
    might drop skbs in some cases.
    
    Discussion about removing synchronize_net() from ipv6_mc_down()
    will happen in a different thread.
    
    Fixes: f185de28d9ae ("mld: add new workqueues for process mld events")
    Signed-off-by: Eric Dumazet <[email protected]>
    Cc: Taehee Yoo <[email protected]>
    Cc: Cong Wang <[email protected]>
    Cc: David Ahern <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 9b26518b6896 ("ipv6: mcast: Fix potential UAF in MLD delayed work")
    Signed-off-by: Sasha Levin <[email protected]>

ipv6: guard against possible NULL deref in __in6_dev_stats_get() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Tue May 26 14:55:28 2026 +0000

    ipv6: guard against possible NULL deref in __in6_dev_stats_get()
    
    [ Upstream commit 507541c2a8eeb76c02bd2511958f73a8cfa3e1bc ]
    
    dev_get_by_index_rcu() could return NULL if the original physical
    device is unregistered.
    
    Found by Sashiko.
    
    Fixes: e1ae5c2ea478 ("vrf: Increment Icmp6InMsgs on the original netdev")
    Signed-off-by: Eric Dumazet <[email protected]>
    Cc: Stephen Suryaputra <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ipv6: mcast: Delay put pmc->idev in mld_del_delrec() [+ + +]
Author: Yue Haibing <[email protected]>
Date:   Mon Jul 14 22:19:57 2025 +0800

    ipv6: mcast: Delay put pmc->idev in mld_del_delrec()
    
    commit ae3264a25a4635531264728859dbe9c659fad554 upstream.
    
    pmc->idev is still used in ip6_mc_clear_src(), so as mld_clear_delrec()
    does, the reference should be put after ip6_mc_clear_src() return.
    
    Fixes: 63ed8de4be81 ("mld: add mc_lock for protecting per-interface mld data")
    Signed-off-by: Yue Haibing <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ipv6: mcast: fix data-race in ipv6_mc_down / mld_ifc_work [+ + +]
Author: Nikita Zhandarovich <[email protected]>
Date:   Wed Jan 17 09:21:02 2024 -0800

    ipv6: mcast: fix data-race in ipv6_mc_down / mld_ifc_work
    
    commit 2e7ef287f07c74985f1bf2858bedc62bd9ebf155 upstream.
    
    idev->mc_ifc_count can be written over without proper locking.
    
    Originally found by syzbot [1], fix this issue by encapsulating calls
    to mld_ifc_stop_work() (and mld_gq_stop_work() for good measure) with
    mutex_lock() and mutex_unlock() accordingly as these functions
    should only be called with mc_lock per their declarations.
    
    [1]
    BUG: KCSAN: data-race in ipv6_mc_down / mld_ifc_work
    
    write to 0xffff88813a80c832 of 1 bytes by task 3771 on cpu 0:
     mld_ifc_stop_work net/ipv6/mcast.c:1080 [inline]
     ipv6_mc_down+0x10a/0x280 net/ipv6/mcast.c:2725
     addrconf_ifdown+0xe32/0xf10 net/ipv6/addrconf.c:3949
     addrconf_notify+0x310/0x980
     notifier_call_chain kernel/notifier.c:93 [inline]
     raw_notifier_call_chain+0x6b/0x1c0 kernel/notifier.c:461
     __dev_notify_flags+0x205/0x3d0
     dev_change_flags+0xab/0xd0 net/core/dev.c:8685
     do_setlink+0x9f6/0x2430 net/core/rtnetlink.c:2916
     rtnl_group_changelink net/core/rtnetlink.c:3458 [inline]
     __rtnl_newlink net/core/rtnetlink.c:3717 [inline]
     rtnl_newlink+0xbb3/0x1670 net/core/rtnetlink.c:3754
     rtnetlink_rcv_msg+0x807/0x8c0 net/core/rtnetlink.c:6558
     netlink_rcv_skb+0x126/0x220 net/netlink/af_netlink.c:2545
     rtnetlink_rcv+0x1c/0x20 net/core/rtnetlink.c:6576
     netlink_unicast_kernel net/netlink/af_netlink.c:1342 [inline]
     netlink_unicast+0x589/0x650 net/netlink/af_netlink.c:1368
     netlink_sendmsg+0x66e/0x770 net/netlink/af_netlink.c:1910
     ...
    
    write to 0xffff88813a80c832 of 1 bytes by task 22 on cpu 1:
     mld_ifc_work+0x54c/0x7b0 net/ipv6/mcast.c:2653
     process_one_work kernel/workqueue.c:2627 [inline]
     process_scheduled_works+0x5b8/0xa30 kernel/workqueue.c:2700
     worker_thread+0x525/0x730 kernel/workqueue.c:2781
     ...
    
    Fixes: 2d9a93b4902b ("mld: convert from timer to delayed work")
    Reported-by: [email protected]
    Link: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Nikita Zhandarovich <[email protected]>
    Acked-by: Taehee Yoo <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Reviewed-by: Hangbin Liu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ipv6: mcast: Fix potential UAF in MLD delayed work [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Sun Jul 5 18:17:55 2026 +0000

    ipv6: mcast: Fix potential UAF in MLD delayed work
    
    [ Upstream commit 9b26518b6896a16b809b1e42986f4ebac7bccc1e ]
    
    A race condition exists between device teardown and incoming MLD query
    processing, leading to a Use-After-Free in the MLD delayed work.
    
    During device destruction, the primary reference to inet6_dev is dropped,
    which can drop its refcount to 0. The actual freeing of inet6_dev memory
    is deferred via RCU.
    
    Concurrently, the packet receive path runs under RCU read lock and obtains
    the inet6_dev pointer. Because the memory is RCU-protected, CPU-0 can
    safely dereference inet6_dev even if its refcount has hit 0.
    
    However, if CPU-0 calls igmp6_event_query() and schedules delayed work, it
    attempts to acquire a reference using in6_dev_hold(). This increments the
    refcount from 0 to 1, triggering a "refcount_t: addition on 0" warning.
    Since the inet6_dev memory is still scheduled to be freed after the RCU
    grace period, the device is freed while the work is still scheduled.
    When the work runs, it accesses the freed memory, causing a kernel panic.
    
    Fix this by using refcount_inc_not_zero() (via a new helper
    in6_dev_hold_safe()) to prevent acquiring a reference if the device is
    already being destroyed. If the refcount is 0, we do not schedule the work.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Eric Dumazet <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ipv6: mcast: remove one synchronize_net() barrier in ipv6_mc_down() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Fri Feb 9 15:30:56 2024 +0000

    ipv6: mcast: remove one synchronize_net() barrier in ipv6_mc_down()
    
    commit 17ef8efc00b34918b966388b2af0993811895a8c upstream.
    
    As discussed in the past (commit 2d3916f31891 ("ipv6: fix skb drops
    in igmp6_event_query() and igmp6_event_report()")) I think the
    synchronize_net() call in ipv6_mc_down() is not needed.
    
    Under load, synchronize_net() can last between 200 usec and 5 ms.
    
    KASAN seems to agree as well.
    
    Fixes: f185de28d9ae ("mld: add new workqueues for process mld events")
    Signed-off-by: Eric Dumazet <[email protected]>
    Cc: Taehee Yoo <[email protected]>
    Cc: Cong Wang <[email protected]>
    Cc: David Ahern <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ipv6: mcast: Replace locking comments with lockdep annotations. [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Wed Jul 2 16:01:19 2025 -0700

    ipv6: mcast: Replace locking comments with lockdep annotations.
    
    [ Upstream commit 818ae1a5ecb41d82ad180a99c39111f051894d90 ]
    
    Commit 63ed8de4be81 ("mld: add mc_lock for protecting per-interface
    mld data") added the same comments regarding locking to many functions.
    
    Let's replace the comments with lockdep annotation, which is more helpful.
    
    Note that we just remove the comment for mld_clear_zeros() and
    mld_send_cr(), where mc_dereference() is used in the entry of the
    function.
    
    While at it, a comment for __ipv6_sock_mc_join() is moved back to the
    correct place.
    
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 9b26518b6896 ("ipv6: mcast: Fix potential UAF in MLD delayed work")
    Signed-off-by: Sasha Levin <[email protected]>

ipv6: mcast: use rcu-safe version of ipv6_get_lladdr() [+ + +]
Author: Ignat Korchagin <[email protected]>
Date:   Fri Feb 11 17:30:42 2022 +0000

    ipv6: mcast: use rcu-safe version of ipv6_get_lladdr()
    
    commit 26394fc118d6115390bd5b3a0fb17096271da227 upstream.
    
    Some time ago 8965779d2c0e ("ipv6,mcast: always hold idev->lock before mca_lock")
    switched ipv6_get_lladdr() to __ipv6_get_lladdr(), which is rcu-unsafe
    version. That was OK, because idev->lock was held for these codepaths.
    
    In 88e2ca308094 ("mld: convert ifmcaddr6 to RCU") these external locks were
    removed, so we probably need to restore the original rcu-safe call.
    
    Otherwise, we occasionally get a machine crashed/stalled with the following
    in dmesg:
    
    [ 3405.966610][T230589] general protection fault, probably for non-canonical address 0xdead00000000008c: 0000 [#1] SMP NOPTI
    [ 3405.982083][T230589] CPU: 44 PID: 230589 Comm: kworker/44:3 Tainted: G           O      5.15.19-cloudflare-2022.2.1 #1
    [ 3405.998061][T230589] Hardware name: SUPA-COOL-SERV
    [ 3406.009552][T230589] Workqueue: mld mld_ifc_work
    [ 3406.017224][T230589] RIP: 0010:__ipv6_get_lladdr+0x34/0x60
    [ 3406.025780][T230589] Code: 57 10 48 83 c7 08 48 89 e5 48 39 d7 74 3e 48 8d 82 38 ff ff ff eb 13 48 8b 90 d0 00 00 00 48 8d 82 38 ff ff ff 48 39 d7 74 22 <66> 83 78 32 20 77 1b 75 e4 89 ca 23 50 2c 75 dd 48 8b 50 08 48 8b
    [ 3406.055748][T230589] RSP: 0018:ffff94e4b3fc3d10 EFLAGS: 00010202
    [ 3406.065617][T230589] RAX: dead00000000005a RBX: ffff94e4b3fc3d30 RCX: 0000000000000040
    [ 3406.077477][T230589] RDX: dead000000000122 RSI: ffff94e4b3fc3d30 RDI: ffff8c3a31431008
    [ 3406.089389][T230589] RBP: ffff94e4b3fc3d10 R08: 0000000000000000 R09: 0000000000000000
    [ 3406.101445][T230589] R10: ffff8c3a31430000 R11: 000000000000000b R12: ffff8c2c37887100
    [ 3406.113553][T230589] R13: ffff8c3a39537000 R14: 00000000000005dc R15: ffff8c3a31431000
    [ 3406.125730][T230589] FS:  0000000000000000(0000) GS:ffff8c3b9fc80000(0000) knlGS:0000000000000000
    [ 3406.138992][T230589] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [ 3406.149895][T230589] CR2: 00007f0dfea1db60 CR3: 000000387b5f2000 CR4: 0000000000350ee0
    [ 3406.162421][T230589] Call Trace:
    [ 3406.170235][T230589]  <TASK>
    [ 3406.177736][T230589]  mld_newpack+0xfe/0x1a0
    [ 3406.186686][T230589]  add_grhead+0x87/0xa0
    [ 3406.195498][T230589]  add_grec+0x485/0x4e0
    [ 3406.204310][T230589]  ? newidle_balance+0x126/0x3f0
    [ 3406.214024][T230589]  mld_ifc_work+0x15d/0x450
    [ 3406.223279][T230589]  process_one_work+0x1e6/0x380
    [ 3406.232982][T230589]  worker_thread+0x50/0x3a0
    [ 3406.242371][T230589]  ? rescuer_thread+0x360/0x360
    [ 3406.252175][T230589]  kthread+0x127/0x150
    [ 3406.261197][T230589]  ? set_kthread_struct+0x40/0x40
    [ 3406.271287][T230589]  ret_from_fork+0x22/0x30
    [ 3406.280812][T230589]  </TASK>
    [ 3406.288937][T230589] Modules linked in: ... [last unloaded: kheaders]
    [ 3406.476714][T230589] ---[ end trace 3525a7655f2f3b9e ]---
    
    Fixes: 88e2ca308094 ("mld: convert ifmcaddr6 to RCU")
    Reported-by: David Pinilla Caparros <[email protected]>
    Signed-off-by: Ignat Korchagin <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ipvs: ensure inner headers in ICMP errors are in headroom [+ + +]
Author: Julian Anastasov <[email protected]>
Date:   Tue Jul 7 21:25:46 2026 +0300

    ipvs: ensure inner headers in ICMP errors are in headroom
    
    [ Upstream commit 3f7a535ff0fa627a0132803e4c2f903ceffcbc1c ]
    
    Sashiko points out that after stripping the outer headers
    with pskb_pull() we should ensure the inner IP headers
    in ICMP errors from tunnels are present in the skb headroom
    for functions like ipv4_update_pmtu(), icmp_send() and
    IP_VS_DBG().
    
    Also, add more checks for the length of the inner headers.
    
    Fixes: f2edb9f7706d ("ipvs: implement passive PMTUD for IPIP packets")
    Link: https://sashiko.dev/#/patchset/20260702073430.67680-1-zhaoyz24%40mails.tsinghua.edu.cn
    Signed-off-by: Julian Anastasov <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ipvs: fix more places with wrong ipv6 transport offsets [+ + +]
Author: Julian Anastasov <[email protected]>
Date:   Wed Jul 8 21:03:15 2026 +0300

    ipvs: fix more places with wrong ipv6 transport offsets
    
    commit b3fe4cbd583895987935a9bdad01c8f9d3a02310 upstream.
    
    Sashiko reports for more incorrect IPv6 transport offsets.
    
    The app code for TCP was assuming IPv4 network header
    even after the ipvsh argument was provided. This can
    cause problems with apps over IPv6. As for the only
    official app in the kernel tree (FTP) this problem is
    harmless because we use Netfilter to mangle the FTP
    ports and we do not adjust the TCP seq numbers.
    
    Also, provide correct offset of the ICMPV6 header in
    ip_vs_out_icmp_v6() for correct checksum checks when
    the IPv6 packet has extension headers.
    
    Fixes: d12e12299a69 ("ipvs: add ipv6 support to ftp")
    Fixes: 2a3b791e6e11 ("IPVS: Add/adjust Netfilter hook functions and helpers for v6")
    Cc: [email protected]
    Link: https://sashiko.dev/#/patchset/20260706101624.69471-1-zhaoyz24%40mails.tsinghua.edu.cn
    Signed-off-by: Julian Anastasov <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ipvs: fix PMTU for GUE/GRE tunnel ICMP errors [+ + +]
Author: Yizhou Zhao <[email protected]>
Date:   Thu Jul 2 15:34:28 2026 +0800

    ipvs: fix PMTU for GUE/GRE tunnel ICMP errors
    
    [ Upstream commit 6b335af0d0d1ff44ac579d106953bf19299e5233 ]
    
    When an ICMP Fragmentation Needed error is received for a tunneled IPVS
    connection, ip_vs_in_icmp() recomputes the MTU that the original packet
    can use by subtracting the tunnel overhead from the reported next-hop
    MTU.
    
    The current code always subtracts sizeof(struct iphdr), which is only
    the IPIP overhead. For GUE and GRE tunnels, ipvs_udp_decap() and
    ipvs_gre_decap() already compute the additional tunnel header length,
    but that value is scoped to the decapsulation block and is lost before
    the ICMP_FRAG_NEEDED handling. As a result, the ICMP error sent back to
    the client advertises an MTU that is too large, so PMTUD can fail to
    converge for GUE/GRE-tunneled real servers.
    
    With a reported next-hop MTU of 1400, a GUE tunnel currently returns
    1380 to the client. The correct value is 1368:
    
      1400 - sizeof(struct iphdr) - sizeof(struct udphdr) -
      sizeof(struct guehdr)
    
    Hoist the tunnel header length into the main ip_vs_in_icmp() scope and
    subtract sizeof(struct iphdr) + ulen in the Fragmentation Needed path.
    The IPIP path keeps ulen as 0, so its existing 1400 - 20 = 1380 result
    is unchanged.
    
    Fixes: 508f744c0de3 ("ipvs: strip udp tunnel headers from icmp errors")
    Cc: [email protected]
    Reported-by: Yizhou Zhao <[email protected]>
    Reported-by: Yuxiang Yang <[email protected]>
    Reported-by: Ao Wang <[email protected]>
    Reported-by: Xuewei Feng <[email protected]>
    Reported-by: Qi Li <[email protected]>
    Reported-by: Ke Xu <[email protected]>
    Assisted-by: Claude-Code:GLM-5.2
    Signed-off-by: Yizhou Zhao <[email protected]>
    Acked-by: Julian Anastasov <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Stable-dep-of: 3f7a535ff0fa ("ipvs: ensure inner headers in ICMP errors are in headroom")
    Signed-off-by: Sasha Levin <[email protected]>

ipvs: pass parsed transport offset to state handlers [+ + +]
Author: Yizhou Zhao <[email protected]>
Date:   Mon Jul 6 18:16:22 2026 +0800

    ipvs: pass parsed transport offset to state handlers
    
    [ Upstream commit bae7ce7bafb59e42dc0e0e2999fdd9d1cffe3866 ]
    
    IPVS callers already parse the packet into struct ip_vs_iphdr before
    updating connection state. For IPv6 this records the real
    transport-header offset after extension headers in iph.len.
    
    Pass this parsed transport offset through ip_vs_set_state() and the
    protocol state_transition() callback so protocol handlers can use the
    same packet context as scheduling and NAT handling. This patch only
    changes the common callback plumbing and adapts the protocol callback
    signatures; TCP and SCTP start using the value in follow-up patches.
    
    Signed-off-by: Yizhou Zhao <[email protected]>
    Acked-by: Julian Anastasov <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Stable-dep-of: 2500fa3958b1 ("ipvs: use parsed transport offset in TCP state lookup")
    Signed-off-by: Sasha Levin <[email protected]>

ipvs: reset full ip_vs_seq structs in ip_vs_conn_new [+ + +]
Author: Yizhou Zhao <[email protected]>
Date:   Thu Jul 2 19:28:36 2026 +0800

    ipvs: reset full ip_vs_seq structs in ip_vs_conn_new
    
    commit 2975324d164c552b028632f107b567302863b7f6 upstream.
    
    Commit 9a05475cebdd ("ipvs: avoid kmem_cache_zalloc in
    ip_vs_conn_new") changed ip_vs_conn_new() to allocate an ip_vs_conn
    object with kmem_cache_alloc().  The function then initializes many
    fields explicitly, but only resets in_seq.delta and out_seq.delta in the
    two struct ip_vs_seq members.
    
    That leaves init_seq and previous_delta uninitialized.  This is normally
    harmless while the corresponding IP_VS_CONN_F_IN_SEQ or
    IP_VS_CONN_F_OUT_SEQ flag is clear.  For connections learned from a sync
    message, however, ip_vs_proc_conn() preserves those flags from
    IP_VS_CONN_F_BACKUP_MASK and passes opt=NULL when the message omits
    IPVS_OPT_SEQ_DATA.  In that case the new connection can be hashed with
    SEQ flags set but with the rest of in_seq/out_seq still containing stale
    slab data.
    
    When a packet for such a connection is later handled by an IPVS
    application helper, vs_fix_seq() and vs_fix_ack_seq() use
    previous_delta and init_seq to rewrite TCP sequence numbers.  A malformed
    sync message can therefore make forwarded packets carry stale slab bytes
    in their TCP seq/ack numbers, and can also corrupt the forwarded TCP
    flow.
    
    Reset both struct ip_vs_seq members completely before publishing the
    connection.  This matches the existing "reset struct ip_vs_seq" comment
    and keeps the sequence-adjustment gates inactive unless valid sequence
    data is installed later.
    
    Fixes: 9a05475cebdd ("ipvs: avoid kmem_cache_zalloc in ip_vs_conn_new")
    Cc: [email protected]
    Reported-by: Yizhou Zhao <[email protected]>
    Reported-by: Yuxiang Yang <[email protected]>
    Reported-by: Ao Wang <[email protected]>
    Reported-by: Xuewei Feng <[email protected]>
    Reported-by: Qi Li <[email protected]>
    Reported-by: Ke Xu <[email protected]>
    Assisted-by: Claude-Code:GLM-5.2
    Signed-off-by: Yizhou Zhao <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ipvs: use parsed transport offset in SCTP state lookup [+ + +]
Author: Yizhou Zhao <[email protected]>
Date:   Mon Jul 6 18:16:24 2026 +0800

    ipvs: use parsed transport offset in SCTP state lookup
    
    commit 2f75c0faa3361b28e36cc0512b3299e163e25789 upstream.
    
    set_sctp_state() reads the SCTP chunk header again in order to drive the
    IPVS SCTP state table. For IPv6 it computes the offset with
    sizeof(struct ipv6hdr), while the surrounding IPVS code uses iph.len from
    ip_vs_fill_iph_skb(), where ipv6_find_hdr() has already skipped
    extension headers and found the real transport header.
    
    This makes the state machine read from the wrong offset for IPv6 SCTP
    packets that carry extension headers. For example, an INIT packet with an
    8-byte destination options header can be scheduled correctly by
    sctp_conn_schedule(), but set_sctp_state() reads the first byte of the
    SCTP verification tag as a DATA chunk type. The connection then moves
    from NONE to ESTABLISHED instead of INIT1, gets the longer established
    timeout, and updates the active/inactive destination counters
    incorrectly. This happens even though the SCTP handshake has not
    completed.
    
    Use the parsed transport offset passed down from ip_vs_set_state() for
    the SCTP chunk-header lookup. For IPv4 and IPv6 packets without
    extension headers this preserves the existing offset.
    
    Fixes: 2906f66a5682 ("ipvs: SCTP Trasport Loadbalancing Support")
    Cc: [email protected]
    Link: https://lore.kernel.org/netdev/[email protected]/
    Reported-by: Yizhou Zhao <[email protected]>
    Reported-by: Yuxiang Yang <[email protected]>
    Reported-by: Ao Wang <[email protected]>
    Reported-by: Xuewei Feng <[email protected]>
    Reported-by: Qi Li <[email protected]>
    Reported-by: Ke Xu <[email protected]>
    Assisted-by: Claude Code:GLM-5.2
    Signed-off-by: Yizhou Zhao <[email protected]>
    Acked-by: Julian Anastasov <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ipvs: use parsed transport offset in TCP state lookup [+ + +]
Author: Yizhou Zhao <[email protected]>
Date:   Mon Jul 6 18:16:23 2026 +0800

    ipvs: use parsed transport offset in TCP state lookup
    
    [ Upstream commit 2500fa3958b1ba51c2b065e39db1b04dfa7e23a2 ]
    
    TCP state handling reparses the skb to find the TCP header. For IPv6 it
    uses sizeof(struct ipv6hdr), while the surrounding IPVS code already
    parsed the packet with ip_vs_fill_iph_skb() and has the real
    transport-header offset in iph.len.
    
    This makes TCP state handling look at the wrong bytes when an IPv6
    packet carries extension headers. Use the parsed transport offset passed
    down from ip_vs_set_state() when reading the TCP header.
    
    For IPv4 and for IPv6 packets without extension headers, the passed
    offset matches the previous value.
    
    Fixes: 0bbdd42b7efa6 ("IPVS: Extend protocol DNAT/SNAT and state handlers")
    Link: https://lore.kernel.org/netdev/[email protected]/
    Reported-by: Yizhou Zhao <[email protected]>
    Reported-by: Yuxiang Yang <[email protected]>
    Reported-by: Ao Wang <[email protected]>
    Reported-by: Xuewei Feng <[email protected]>
    Reported-by: Qi Li <[email protected]>
    Reported-by: Ke Xu <[email protected]>
    Assisted-by: Claude Code:GLM-5.2
    Signed-off-by: Yizhou Zhao <[email protected]>
    Acked-by: Julian Anastasov <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
irqchip/crossbar: Fix parent domain resource leak [+ + +]
Author: Bhargav Joshi <[email protected]>
Date:   Sat Jun 20 17:39:17 2026 +0530

    irqchip/crossbar: Fix parent domain resource leak
    
    [ Upstream commit a1074dd62faa6572921d387e8a21589ccea00efc ]
    
    irq_domain_alloc_irqs_parent() is called in allocate_gic_irq() but
    irq_domain_free_irqs_parent() is never called which causes a resource leak.
    
    Fix this by calling irq_domain_free_irqs_parent() in
    crossbar_domain_free().
    
    Fixes: 783d31863fb82 ("irqchip: crossbar: Convert dra7 crossbar to stacked domains")
    Signed-off-by: Bhargav Joshi <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

irqchip/crossbar: Use correct index in crossbar_domain_free() [+ + +]
Author: Bhargav Joshi <[email protected]>
Date:   Sat Jun 20 17:39:16 2026 +0530

    irqchip/crossbar: Use correct index in crossbar_domain_free()
    
    commit 043db005a8d6932dc7d217c86307e9af0bc10ddc upstream.
    
    crossbar_domain_free() resets the domain data and then uses the nulled
    out irq_data->hwirq member as index to reset the irq_map[] entry and to
    write the relevant crossbar register with a safe entry. That means it
    never frees the correct index and keeps the crossbar register connection
    to the source interrupt active.
    
    If it would not reset the domain data, then this would be even worse as
    irq_data->hwirq holds the source interrupt number, but both the map and
    register index need the corresponding GIC SPI number and not the source
    interrupt number. This might even result in an out of bounds access as
    the source interrupt number can be higher than the maximal index space.
    
    Fix this by using the GIC SPI index from the parent domain's irq_data.
    
    Fixes: 783d31863fb82 ("irqchip: crossbar: Convert dra7 crossbar to stacked domains")
    Signed-off-by: Bhargav Joshi <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
isofs: bound Rock Ridge symlink components to the SL record [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Sun Jun 7 01:18:27 2026 +0000

    isofs: bound Rock Ridge symlink components to the SL record
    
    commit 5fa1d6a5ec2356d2107dead614437c66fa7138b1 upstream.
    
    get_symlink_chunk() and the SL handling in
    parse_rock_ridge_inode_internal() walk the variable-length components of
    a Rock Ridge "SL" (symbolic link) record.  Each component is a two-byte
    header (flags, len) followed by len bytes of text, so it occupies
    slp->len + 2 bytes.  Both loops read slp->len and advance to the next
    component, and get_symlink_chunk() additionally does
    memcpy(rpnt, slp->text, slp->len), but neither checks that the component
    lies within the SL record before dereferencing it.
    
    A crafted SL record whose component declares a len that runs past the
    record (rr->len) therefore triggers an out-of-bounds read of up to 255
    bytes.  When the record sits at the tail of its backing buffer - for
    example a small kmalloc()ed continuation block reached through a CE
    record - the read crosses the allocation; get_symlink_chunk() then
    copies the out-of-bounds bytes into the symlink body returned to user
    space by readlink(), disclosing adjacent kernel memory.
    
    ISO 9660 images are routinely mounted from untrusted removable media -
    desktop environments auto-mount them (e.g. via udisks2) without
    CAP_SYS_ADMIN - so the record contents are attacker-controlled.
    
    Reject any component that does not fit in the remaining record bytes
    before using it.  In get_symlink_chunk() return NULL, like the existing
    output-buffer (plimit) checks, so a malformed record makes readlink()
    fail with -EIO rather than silently returning a truncated target; in
    parse_rock_ridge_inode_internal() stop the inode-size walk.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Suggested-by: Michael Bommarito <[email protected]>
    Signed-off-by: Bryam Vargas <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jan Kara <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
kcm: use WRITE_ONCE() when changing lower socket callbacks [+ + +]
Author: Runyu Xiao <[email protected]>
Date:   Thu Jun 11 13:35:43 2026 +0800

    kcm: use WRITE_ONCE() when changing lower socket callbacks
    
    [ Upstream commit 47186409c092cd7dd70350999186c700233e854d ]
    
    kcm_attach() replaces a live lower TCP socket's sk_data_ready and
    sk_write_space callbacks with KCM handlers, and kcm_unattach() restores
    them later. Those callback-pointer updates are still plain stores even
    though the same fields can be read and invoked concurrently on other
    CPUs.
    
    If another CPU observes an older callback snapshot after the live field
    has already been restored, callback execution can run with a mismatched
    target and sk_user_data state, leading to stale or misdirected wakeups.
    
    Use WRITE_ONCE() for the callback replacement and restore operations so
    these shared callback fields follow the same visibility contract already
    established by the earlier 4022 fixes.
    
    Fixes: ab7ac4eb9832 ("kcm: Kernel Connection Multiplexor module")
    Signed-off-by: Runyu Xiao <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
kconfig: fix potential NULL pointer dereference in conf_askvalue [+ + +]
Author: Xingjing Deng <[email protected]>
Date:   Fri Mar 6 02:17:09 2026 +0000

    kconfig: fix potential NULL pointer dereference in conf_askvalue
    
    [ Upstream commit b9d21c32dca2167a614e66c9e27999b9e1c33d55 ]
    
    In conf_askvalue(), the 'def' argument (retrieved via sym_get_string_value)
    can be NULL. While current call sites ensure that 'def' is valid,
    calling printf("%s\n", def) is technically undefined behavior and could
    lead to a segmentation fault on certain libc implementations if the
    function were called with a NULL pointer in the future.
    
    Improve the robustness of conf_askvalue() by providing an empty string
    as a fallback.
    
    Additionally, remove the redundant re-initialization of the 'line'
    buffer inside the !sym_is_changeable(sym) block, as it is already
    properly initialized at the function entry.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Xingjing Deng <[email protected]>
    Reviewed-by: Nathan Chancellor <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Nathan Chancellor <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
KEYS: Use acquire when reading state in keyring search [+ + +]
Author: Gui-Dong Han <[email protected]>
Date:   Fri May 29 11:34:06 2026 +0800

    KEYS: Use acquire when reading state in keyring search
    
    [ Upstream commit c1201b37f666f6466ab1fd3a381c2b7a4b7e9fee ]
    
    The negative-key race fix added release/acquire ordering for key use.
    
    Publish payload before state; read state before payload.
    
    keyring_search_iterator() still uses READ_ONCE() before match callbacks.
    An asymmetric match callback calls asymmetric_key_ids(), which reads
    key->payload.data[asym_key_ids].
    
    Use key_read_state() there to complete that ordering.
    
    Fixes: 363b02dab09b ("KEYS: Fix race between updating and finding a negative key")
    Signed-off-by: Gui-Dong Han <[email protected]>
    Reviewed-by: Jarkko Sakkinen <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jarkko Sakkinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
KVM: arm64: vgic: Check the interrupt is still ours before migrating it [+ + +]
Author: Hyunwoo Kim <[email protected]>
Date:   Fri Jun 5 05:59:15 2026 +0900

    KVM: arm64: vgic: Check the interrupt is still ours before migrating it
    
    commit 0074b82cdfcb5fd13710a0ac308ade68ac6f6fbe upstream.
    
    vgic_prune_ap_list() drops both ap_list_lock and irq_lock while migrating
    an interrupt to another vCPU. After reacquiring the locks it only checks
    that the affinity is unchanged (target_vcpu == vgic_target_oracle(irq))
    before moving the interrupt, which assumes that an interrupt whose affinity
    is preserved is still queued on this vCPU's ap_list.
    
    That assumption no longer holds if the interrupt is taken off the ap_list
    while the locks are dropped. vgic_flush_pending_lpis() removes the
    interrupt from the list and sets irq->vcpu to NULL, but leaves
    enabled/pending/target_vcpu untouched. As the interrupt is still enabled
    and pending, vgic_target_oracle() returns the same target_vcpu, so the
    affinity check passes and list_del() is run a second time on an entry that
    has already been removed.
    
    Also check that the interrupt is still assigned to this vCPU
    (irq->vcpu == vcpu) before moving it.
    
    Fixes: 0919e84c0fc1 ("KVM: arm/arm64: vgic-new: Add IRQ sync/flush framework")
    Signed-off-by: Hyunwoo Kim <[email protected]>
    Link: https://patch.msgid.link/aiHnI1mu6SGQrgnz@v4bel
    Signed-off-by: Marc Zyngier <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: Move kvm_io_bus_get_dev() locking responsibilities to callers [+ + +]
Author: Marc Zyngier <[email protected]>
Date:   Sat Jun 27 11:51:05 2026 +0100

    KVM: Move kvm_io_bus_get_dev() locking responsibilities to callers
    
    commit 3a07249981629ace483ebbef81ef6b34c2d2afec upstream.
    
    kvm_io_bus_get_dev() returns a device that is only matched by the
    address, and nothing else. This can cause a lifetime issue if
    the matched device is not the expected type, as by the time
    the caller can introspect the object, it might be gone (the srcu
    lock having been dropped).
    
    Given that there is only a single user of this helper, the simplest
    option is to move the locking responsibility to the caller, which
    can keep the srcu lock held for as long as it wants.
    
    Note that this aligns with other kvm_io_bus*() helpers, which
    already require the srcu lock to be held by the callers.
    
    Reported-by: Will Deacon <[email protected]>
    Fixes: 8a39d00670f07 ("KVM: kvm_io_bus: Add kvm_io_bus_get_dev() call")
    Link: https://lore.kernel.org/all/[email protected]
    Cc: [email protected]
    Reviewed-by: Oliver Upton <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Marc Zyngier <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: Replace guest-triggerable BUG_ON() in ioeventfd datamatch with get_unaligned() [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Wed Jul 8 16:30:49 2026 +0000

    KVM: Replace guest-triggerable BUG_ON() in ioeventfd datamatch with get_unaligned()
    
    commit f1edbed787ba67988ed34e0132ca128b052b6ce8 upstream.
    
    Drop a BUG_ON() that has been reachable since it was first added, way back
    in 2009, and instead use get_unaligned() to perform potentially-unaligned
    accesses.
    
    For a given store, KVM x86's emulator tracks the entire value in the
    destination operand, x86_emulate_ctxt.dst.  If the destination is memory,
    and the target splits multiple pages and/or is emulated MMIO, then KVM
    handles each fragment independently.  E.g. on a page split starting at page
    offset 0xffc, KVM writes 4 bytes to the first page, then the remaining
    bytes to the second page, using ctxt->dst as the source for both (with
    appropriate offsets).
    
    If the destination splits a page *and* hits emulated MMIO on the second
    page, then KVM will complete the write to the first page, then emulate the
    MMIO access to the second page.  If there is a datamatch-enabled ioeventfd
    at offset 0 of the second page, then KVM will process the remainder of the
    store as a potential ioeventfd signal.
    
    Putting it all together, if the guest emits a store that splits a page
    starting at page offset N, and the second page has a datamatch-enabled
    ioeventfd at offset 0, then KVM will check for datamatch using
    &dst.valptr[N] as the source.  Due to dst (and thus dst.valptr) being
    32-byte aligned, if N is not aligned to @len, the BUG_ON() fires.
    
    E.g. with a 16-byte store at page offset 0xffc, to an ioeventfd of len 8,
    all initial checks in ioeventfd_in_range() will succeed, and the BUG_ON()
    fires due to @val being 4-byte aligned, but not 8-byte aligned.
    
      ------------[ cut here ]------------
      kernel BUG at arch/x86/kvm/../../../virt/kvm/eventfd.c:783!
      Oops: invalid opcode: 0000 [#1] SMP
      CPU: 0 UID: 1000 PID: 615 Comm: repro Not tainted 7.1.0-rc2-ff238429d1ea #365 PREEMPT
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015
      RIP: 0010:ioeventfd_write+0x6c/0x70 [kvm]
      Call Trace:
       <TASK>
       __kvm_io_bus_write+0x85/0xb0 [kvm]
       kvm_io_bus_write+0x53/0x80 [kvm]
       vcpu_mmio_write+0x66/0xf0 [kvm]
       emulator_read_write_onepage+0x12a/0x540 [kvm]
       emulator_read_write+0x109/0x2b0 [kvm]
       x86_emulate_insn+0x4f8/0xfb0 [kvm]
       x86_emulate_instruction+0x181/0x790 [kvm]
       kvm_mmu_page_fault+0x313/0x630 [kvm]
       vmx_handle_exit+0x18a/0x590 [kvm_intel]
       kvm_arch_vcpu_ioctl_run+0xc81/0x1c90 [kvm]
       kvm_vcpu_ioctl+0x2d5/0x970 [kvm]
       __x64_sys_ioctl+0x8a/0xd0
       do_syscall_64+0xb7/0x890
       entry_SYSCALL_64_after_hwframe+0x4b/0x53
      RIP: 0033:0x7f19c931a9bf
       </TASK>
      Modules linked in: kvm_intel kvm irqbypass
      ---[ end trace 0000000000000000 ]---
    
    In a perfect world, the fix would be to simply delete the BUG_ON(), as KVM
    x86 doesn't perform alignment checks on "normal" memory accesses at CPL0.
    Sadly, C99 ruins all the fun; while the x86 architecture plays nice,
    dereferencing an unaligned pointer directly is undefined behavior in C,
    e.g. triggers splats when running with CONFIG_UBSAN_ALIGNMENT=y.
    
    Fixes: d34e6b175e61 ("KVM: add ioeventfd support")
    Cc: [email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Paolo Bonzini <[email protected]>
    [ Use the old <asm/unaligned.h> header instead ]
    Signed-off-by: Darshit Shah <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

KVM: VMX: Grab vmcs12 on CR8 interception update iff vCPU is in guest mode [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Thu Jun 18 10:43:46 2026 -0700

    KVM: VMX: Grab vmcs12 on CR8 interception update iff vCPU is in guest mode
    
    commit 7ef78d71ca713d8c00f7c34ddcf276c808143f77 upstream.
    
    When updating CR8 intercepts, get vmcs12 if and only if the vCPU is in
    guest mode so that a future change can have update CR8 intercepts during
    vCPU creation, without running afoul of get_vmcs12()'s lockdep assertion.
    
      ------------[ cut here ]------------
      debug_locks && !(lock_is_held(&(&vcpu->mutex)->dep_map) || !refcount_read(&vcpu->kvm->users_count))
      WARNING: arch/x86/kvm/vmx/nested.h:61 at get_vmcs12 arch/x86/kvm/vmx/nested.h:60 [inline], CPU#0: syz.2.19/5879
      WARNING: arch/x86/kvm/vmx/nested.h:61 at vmx_update_cr8_intercept+0x3de/0x4e0 arch/x86/kvm/vmx/vmx.c:6879, CPU#0: syz.2.19/5879
      Modules linked in:
      CPU: 0 UID: 0 PID: 5879 Comm: syz.2.19 Not tainted syzkaller #0 PREEMPT(full)
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
      RIP: 0010:get_vmcs12 arch/x86/kvm/vmx/nested.h:60 [inline]
      RIP: 0010:vmx_update_cr8_intercept+0x3de/0x4e0 arch/x86/kvm/vmx/vmx.c:6879
      Call Trace:
       <TASK>
       apic_update_ppr arch/x86/kvm/lapic.c:984 [inline]
       kvm_lapic_reset+0x1c24/0x2980 arch/x86/kvm/lapic.c:3023
       kvm_vcpu_reset+0x44c/0x1bf0 arch/x86/kvm/x86.c:12986
       kvm_arch_vcpu_create+0x746/0x8b0 arch/x86/kvm/x86.c:12847
       kvm_vm_ioctl_create_vcpu+0x428/0x930 virt/kvm/kvm_main.c:4201
       kvm_vm_ioctl+0x893/0xd50 virt/kvm/kvm_main.c:5159
       vfs_ioctl fs/ioctl.c:51 [inline]
       __do_sys_ioctl fs/ioctl.c:597 [inline]
       __se_sys_ioctl+0xfc/0x170 fs/ioctl.c:583
       do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
       do_syscall_64+0x174/0x580 arch/x86/entry/syscall_64.c:94
       entry_SYSCALL_64_after_hwframe+0x77/0x7f
       </TASK>
    
    No functional change intended.
    
    Reported-by: syzbot ci <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]
    Cc: [email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Paolo Bonzini <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
leds: lm3601x: Improve error reporting for problems during .remove() [+ + +]
Author: Uwe Kleine-König <[email protected]>
Date:   Sun Jul 19 22:35:37 2026 -0400

    leds: lm3601x: Improve error reporting for problems during .remove()
    
    [ Upstream commit 22a23436891886a66d21af3619f4a4e8809f0e0a ]
    
    Returning an error value in an i2c remove callback results in a generic
    error message being emitted by the i2c core, but otherwise it doesn't
    make a difference. The device goes away anyhow and the devm cleanups are
    called.
    
    So instead of triggering the generic i2c error message, emit a more
    helpful message if a problem occurs and return 0 to suppress the generic
    message.
    
    This patch is a preparation for making i2c remove callbacks return void.
    
    Acked-by: Pavel Machek <[email protected]>
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Signed-off-by: Wolfram Sang <[email protected]>
    Stable-dep-of: 1f0bdc2884b6 ("usb: typec: ucsi: ccg: Fix use-after-free of ucsi on remove")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

leds: lm3697: Remove duplicated error reporting in .remove() [+ + +]
Author: Uwe Kleine-König <[email protected]>
Date:   Sun Jul 19 22:35:36 2026 -0400

    leds: lm3697: Remove duplicated error reporting in .remove()
    
    [ Upstream commit af89fa11fae1cee4e07453f780e6e5573ef0f477 ]
    
    Returning an error value from an i2c remove callback results in an error
    message being emitted by the i2c core, but otherwise it doesn't make a
    difference. The device goes away anyhow and the devm cleanups are
    called.
    
    As lm3697_remove() already emits an error message on failure and the
    additional error message by the i2c core doesn't add any useful
    information, don't pass the error value up the stack. Instead continue
    to clean up and return 0.
    
    This patch is a preparation for making i2c remove callbacks return void.
    
    Acked-by: Pavel Machek <[email protected]>
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Signed-off-by: Wolfram Sang <[email protected]>
    Stable-dep-of: 1f0bdc2884b6 ("usb: typec: ucsi: ccg: Fix use-after-free of ucsi on remove")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

leds: uleds: Fix potential buffer overread [+ + +]
Author: Armin Wolf <[email protected]>
Date:   Mon May 25 01:55:53 2026 +0200

    leds: uleds: Fix potential buffer overread
    
    commit c19fe864f667afc49d1391d764e20b66555bcf7a upstream.
    
    The name string supplied by userspace is not guaranteed to be
    null-terminated, so using strchr() on it might result in a buffer
    overread. The same thing will happen when said string is used by
    the LED class device.
    
    Fix this by using strnchr() instead and explicitly check that
    the name string is properly null-terminated.
    
    Cc: [email protected]
    Fixes: e381322b0190 ("leds: Introduce userspace LED class driver")
    Signed-off-by: Armin Wolf <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
lib/test_meminit: use && for bools [+ + +]
Author: Alexander Potapenko <[email protected]>
Date:   Mon May 4 12:06:37 2026 +0200

    lib/test_meminit: use && for bools
    
    [ Upstream commit 8e0c2085c978ed6d9764d79fc785920360096f21 ]
    
    As pointed out by Dan Carpenter, test_kmemcache() was using a bitwise AND
    on two bools instead of a boolean AND.  Fix this for the sake of code
    cleanliness.
    
    Link: https://lore.kernel.org/[email protected]
    Fixes: 5015a300a522 ("lib: introduce test_meminit module")
    Signed-off-by: Alexander Potapenko <[email protected]>
    Reported-by: Dan Carpenter <[email protected]>
    Closes: https://lore.kernel.org/kernel-janitors/[email protected]/
    Reviewed-by: Andrew Morton <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Linux: Linux 5.10.261 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Fri Jul 24 15:49:24 2026 +0200

    Linux 5.10.261
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Woody Suwalski <[email protected]>
    Tested-by: Brett A C Sheffield <[email protected]>
    Tested-by: Dominique Martinet <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Brett A C Sheffield <[email protected]>
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Pavel Machek (CIP) <[email protected]>
    Tested-by: Mark Brown <[email protected]>
    Tested-by: Barry K. Nathan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
llc: fix SAP refcount leak in llc_ui_autobind() [+ + +]
Author: Shuangpeng Bai <[email protected]>
Date:   Tue Jun 30 15:48:56 2026 -0400

    llc: fix SAP refcount leak in llc_ui_autobind()
    
    commit 660667cd406648bbaffbd5c0d897c2263a852f11 upstream.
    
    llc_ui_autobind() opens a SAP after choosing a dynamic LSAP.
    llc_sap_open() returns a reference owned by the caller, and
    llc_sap_add_socket() takes a second reference for the socket's
    membership in the SAP hash tables.
    
    llc_ui_bind() drops the caller's reference after adding the socket,
    but llc_ui_autobind() keeps it. When the socket is closed,
    llc_sap_remove_socket() releases only the socket reference, leaving
    the SAP on llc_sap_list with sk_count == 0.
    
    This is user-visible because repeated autobind and close cycles can consume
    all dynamic SAP values and make later autobinds fail with -EUSERS.
    
    Drop the caller's reference after a successful autobind, matching
    llc_ui_bind()'s ownership model.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Signed-off-by: Shuangpeng Bai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

llc: fix SAP refcount leak when creating incoming sockets [+ + +]
Author: Xuanqiang Luo <[email protected]>
Date:   Sun Jul 12 21:03:43 2026 +0800

    llc: fix SAP refcount leak when creating incoming sockets
    
    commit 2c72eb6286347d05a885412fb076993bd5286b53 upstream.
    
    llc_sap_add_socket() takes a SAP reference for each socket added to a SAP,
    and llc_sap_remove_socket() releases it. llc_create_incoming_sock() takes
    an additional SAP reference after adding the child socket.
    
    This extra reference was balanced by an explicit llc_sap_put() in
    llc_ui_release() until commit 3100aa9d74db ("llc: fix SAP reference
    counting w.r.t. socket handling") removed that put. The corresponding hold
    in the accept path was left behind.
    
    When such a child socket is removed, only the reference taken by
    llc_sap_add_socket() is released. The extra reference keeps the SAP alive
    after its last socket is removed. Remove the obsolete hold.
    
    Fixes: 3100aa9d74db ("llc: fix SAP reference counting w.r.t. socket handling")
    Cc: [email protected]
    Signed-off-by: Xuanqiang Luo <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
lockd: Plug nlm_file leak when nlm_do_fopen() fails [+ + +]
Author: Chuck Lever <[email protected]>
Date:   Thu May 14 16:56:04 2026 -0400

    lockd: Plug nlm_file leak when nlm_do_fopen() fails
    
    commit f16a1513452edb532fec81e591c64c320866719c upstream.
    
    A client can repeatedly drive nlm_do_fopen() failures by presenting
    file handles that the underlying export rejects. After kzalloc_obj()
    succeeds in nlm_lookup_file(), the freshly allocated nlm_file is not
    yet inserted into nlm_files[]. The nlm_do_fopen() failure path jumps
    to out_unlock, which releases nlm_file_mutex and returns without
    freeing the allocation, so each failure leaks one nlm_file.
    
    Route the failure through out_free so kfree() runs before the
    function returns.
    
    Fixes: 7f024fcd5c97 ("Keep read and write fds with each nlm_file")
    Cc: [email protected]
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

lockd: Plug nlm_file refcount leak on cached nlm_do_fopen() failure [+ + +]
Author: Chuck Lever <[email protected]>
Date:   Thu May 14 16:56:06 2026 -0400

    lockd: Plug nlm_file refcount leak on cached nlm_do_fopen() failure
    
    commit 70a38f87bed7f0694fd07988b47b2db1e10d8df3 upstream.
    
    The cached-file path in nlm_lookup_file() reaches the found: label
    unconditionally, even when nlm_do_fopen() fails. At that label
    *result and file->f_count are updated before the error is returned.
    The wrappers nlm3svc_lookup_file() and nlm4svc_lookup_file() then
    bail out of their switch without copying *result back to their
    caller, so the proc handler's local nlm_file pointer remains NULL
    and the cleanup path skips nlm_release_file(). The f_count
    increment is never released, and nlm_traverse_files() can no
    longer reap the file because its refcount never returns to zero
    between requests.
    
    Short-circuit the cached path so neither *result nor f_count is
    touched when nlm_do_fopen() fails on a hashed nlm_file.
    
    Fixes: 7f024fcd5c97 ("Keep read and write fds with each nlm_file")
    Cc: [email protected]
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
locking/rtmutex: Skip remove_waiter() when waiter is not enqueued [+ + +]
Author: Davidlohr Bueso <[email protected]>
Date:   Thu May 7 04:29:13 2026 -0700

    locking/rtmutex: Skip remove_waiter() when waiter is not enqueued
    
    commit 40a25d59e85b3c8709ac2424d44f65610467871e upstream.
    
    syzbot triggered the following splat in remove_waiter() via
    FUTEX_CMP_REQUEUE_PI:
    
      KASAN: null-ptr-deref in range [0x0000000000000a88-0x0000000000000a8f]
       class_raw_spinlock_constructor
       remove_waiter+0x159/0x1200 kernel/locking/rtmutex.c:1561
       rt_mutex_start_proxy_lock+0x103/0x120
       futex_requeue+0x10e4/0x20d0
       __x64_sys_futex+0x34f/0x4d0
    
    task_blocks_on_rt_mutex() does not arm the waiter upon deadlock detection,
    leaving waiter->task nil, where 3bfdc63936dd ("rtmutex: Use waiter::task instead
    of current in remove_waiter()") made this fatal.
    
    Furthermore, rt_mutex_start_proxy_lock() should not be calling into remove_waiter()
    upon a successfully grabbing the rtmutex. 1a1fb985f2e2 ("futex: Handle early deadlock
    return correctly"), moved the remove_waiter() out of __rt_mutex_start_proxy_lock()
    (where 'ret' was only ever 0 or < 0) into the wrapper. Tighten this check to
    account for try_to_take_rt_mutex().
    
    Fixes: 3bfdc63936dd ("rtmutex: Use waiter::task instead of current in remove_waiter()")
    Reported-by: [email protected]
    Signed-off-by: Davidlohr Bueso <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Cc: [email protected]
    Closes: https://lore.kernel.org/all/[email protected]/
    Link: https://patch.msgid.link/[email protected]
    [Lee: Backported to linux-5.10.y from linux-6.1.y]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mac802154: remove interfaces with RCU list deletion [+ + +]
Author: Yousef Alhouseen <[email protected]>
Date:   Wed Jul 1 18:42:22 2026 +0200

    mac802154: remove interfaces with RCU list deletion
    
    commit 539dfcf69105d8d3d4d677b71de6e5ede2e6dfa0 upstream.
    
    Queue wake, stop, and disable paths walk local->interfaces under RCU.
    The bulk hardware teardown path removes entries with list_del(), so an
    asynchronous transmit completion can follow a poisoned list node in
    ieee802154_wake_queue().
    
    Use list_del_rcu() as in the single-interface removal path. The following
    unregister_netdevice() waits for in-flight RCU readers before freeing the
    netdevice, so no separate grace-period wait is needed.
    
    Fixes: 592dfbfc72f5 ("mac820154: move interface unregistration into iface")
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=36256deb69a588e9290e
    Cc: [email protected]
    Signed-off-by: Yousef Alhouseen <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Miquel Raynal <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
macsec: fix promiscuity refcount leak in macsec_dev_open() [+ + +]
Author: James Raphael Tiovalen <[email protected]>
Date:   Sun Jul 5 19:36:29 2026 +0800

    macsec: fix promiscuity refcount leak in macsec_dev_open()
    
    commit 7410d11460eb90d6c9281162ccc6a128534d897d upstream.
    
    When a MACsec interface with IFF_PROMISC set is brought up on top of a
    device that has hardware offload enabled, macsec_dev_open() first calls
    dev_set_promiscuity(real_dev, 1) and then propagates the open to the
    offload device. If that propagation fails, the error path jumps to the
    clear_allmulti label, which only reverts allmulti and the unicast
    address. The promiscuity taken on the lower device is never dropped, so
    real_dev is left permanently stuck in promiscuous mode. Its promiscuity
    count can no longer be balanced from software.
    
    Add a clear_promisc label that drops the promiscuity reference and
    route the two offload failure paths to it. The dev_set_promiscuity()
    failure itself still jumps to clear_allmulti, since on that failure the
    count was not incremented.
    
    Fixes: 3cf3227a21d1 ("net: macsec: hardware offloading infrastructure")
    Cc: [email protected]
    Signed-off-by: James Raphael Tiovalen <[email protected]>
    Reviewed-by: Sabrina Dubroca <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
media: atomisp: Fix memory leak in atomisp_fixed_pattern_table() [+ + +]
Author: Zilin Guan <[email protected]>
Date:   Tue Feb 3 16:31:34 2026 +0000

    media: atomisp: Fix memory leak in atomisp_fixed_pattern_table()
    
    [ Upstream commit 4e8156bd9517fa18c3613ea39c222c7035f0221e ]
    
    atomisp_v4l2_framebuffer_to_css_frame() allocates memory for
    temporary variable raw_black_frame, which must be released via
    ia_css_frame_free() before the function returns. However, if
    sh_css_set_black_frame() fails, the function returns immediately without
    performing this cleanup, leading to a memory leak.
    
    Fix this by assigning the return value of sh_css_set_black_frame() to
    ret. This ensures that the error code is propagated while allowing the
    execution to fall through to the ia_css_frame_free() cleanup call.
    
    The bug was originally detected on v6.13-rc1 using an experimental
    static analysis tool we are developing, and we have verified that the
    issue persists in the latest mainline kernel. The tool is based on the
    LLVM framework and is specifically designed to detect memory management
    issues. It is currently under active development and not yet publicly
    available.
    
    We performed build testing on x86_64 with allyesconfig. Since triggering
    this error path in atomisp requires specific Intel Atom ISP hardware and
    firmware, we were unable to perform runtime testing and instead verified
    the fix according to the code logic.
    
    Fixes: 85b606e02ad7 ("media: atomisp: get rid of a bunch of other wrappers")
    Signed-off-by: Zilin Guan <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Signed-off-by: Sakari Ailus <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: atomisp: replace boolean comparison of values with bool variables [+ + +]
Author: Aditya Srivastava <[email protected]>
Date:   Tue Jul 14 16:01:53 2026 -0400

    media: atomisp: replace boolean comparison of values with bool variables
    
    [ Upstream commit c606970d4250dfb95869a563975c08bab148137a ]
    
    There are certain expressions in a condition in atomisp, where a boolean
    variable is compared with true/false in forms such as (foo == true)
    or (false != bar), which does not comply with the coding style rule by
    checkpatch.pl (CHK: BOOL_COMPARISON), according to which the boolean
    variables should be themselves used in the condition, rather than
    comparing with true or false.
    
    E.g. In drivers/staging/media/atomisp/pci/atomisp_compat_css20.c:
    
    if (asd->stream_prepared == false) {
    
    Can be replaced with:
    if (!asd->stream_prepared) {
    
    Replace such expressions with boolean variables appropriately.
    
    Link: https://lore.kernel.org/linux-media/[email protected]
    Signed-off-by: Aditya Srivastava <[email protected]>
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    Stable-dep-of: f4d51e55dd47 ("staging: media: atomisp: reduce load_primary_binaries() stack usage")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: cedrus: Fix failure to clean up hardware on probe failure [+ + +]
Author: Samuel Holland <[email protected]>
Date:   Tue Apr 7 01:14:40 2026 +0300

    media: cedrus: Fix failure to clean up hardware on probe failure
    
    [ Upstream commit f0a22f1d602ed499a192284de5e811a73421f0c7 ]
    
    If V4L2 device fails to register, then SRAM still be claimed and as a
    result driver will not be able to probe again.
    
     cedrus 1c0e000.video-codec: Failed to claim SRAM
     cedrus 1c0e000.video-codec: Failed to probe hardware
     cedrus 1c0e000.video-codec: probe with driver cedrus failed with error -16
    
    cedrus_hw_remove undoes everything that was previously done by
    cedrus_hw_probe, such as disabling runtime power management and
    releasing the claimed SRAM and reserved memory region.
    
    Signed-off-by: Samuel Holland <[email protected]>
    Signed-off-by: Andrey Skvortsov <[email protected]>
    Fixes: 50e761516f2b ("media: platform: Add Cedrus VPU decoder driver")
    Acked-by: Paul Kocialkowski <[email protected]>
    Signed-off-by: Nicolas Dufresne <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: qcom: venus: drop extra padding in NV12 raw size calculation [+ + +]
Author: Renjiang Han <[email protected]>
Date:   Tue Mar 31 10:07:07 2026 +0530

    media: qcom: venus: drop extra padding in NV12 raw size calculation
    
    [ Upstream commit e1c9adabb268cc5d56723b7df1da49e59070f309 ]
    
    get_framesize_raw_nv12() currently adds SZ_4K to the UV plane size and an
    additional SZ_8K to the total buffer size. This inflates the calculated
    sizeimage and leads userspace to over-allocate buffers without a clear
    requirement.
    
    Remove the extra SZ_4K/SZ_8K padding and compute the NV12 size as the sum
    of Y and UV planes, keeping the final ALIGN(size, SZ_4K) intact.
    
    Fixes: e1cb72de702ad ("media: venus: helpers: move frame size calculations on common place")
    Signed-off-by: Renjiang Han <[email protected]>
    Reviewed-by: Dikshita Agarwal <[email protected]>
    Signed-off-by: Bryan O'Donoghue <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: rockchip: rga: fix too small buffer size [+ + +]
Author: Sven Püschel <[email protected]>
Date:   Thu May 21 00:44:11 2026 +0200

    media: rockchip: rga: fix too small buffer size
    
    [ Upstream commit 65017e26c065d1240b0512c15867ef1128034fd8 ]
    
    Fix the command buffer size being only a quarter of the actual size.
    The RGA_CMDBUF_SIZE macro was potentially intended to specify the length
    of the cmdbuf u32 array pointer. But as it's used to specify the size of
    the allocation, which is counted in bytes. Therefore adjust the macro
    size to bytes as it better matches the variable name and adjust it's
    users accordingly.
    
    As the command buffer is relatively small, it probably didn't caused
    an issue due to being smaller than a single page.
    
    Fixes: f7e7b48e6d79 ("[media] rockchip/rga: v4l2 m2m support")
    Reviewed-by: Nicolas Dufresne <[email protected]>
    Signed-off-by: Sven Püschel <[email protected]>
    Signed-off-by: Nicolas Dufresne <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: staging: ipu3-imgu: Add range check for imgu_css_cfg_acc_stripe [+ + +]
Author: Ricardo Ribalda <[email protected]>
Date:   Thu May 7 20:58:10 2026 +0000

    media: staging: ipu3-imgu: Add range check for imgu_css_cfg_acc_stripe
    
    commit c32fe4c4918c9aa49f61359e3b42619c4d8686de upstream.
    
    If the driver's stripe information is invalid it can result in an integer
    underflow. Add a range check to avoid this kind of error.
    
    This patch fixes the following smatch error:
    drivers/staging/media/ipu3/ipu3-css-params.c:1792 imgu_css_cfg_acc_stripe() warn: 'acc->stripe.bds_out_stripes[0]->width - 2 * f' 4294967168 can't fit into 65535 'acc->stripe.bds_out_stripes[1]->offset'
    
    Cc: [email protected]
    Fixes: e11110a5b744 ("media: staging/intel-ipu3: css: Compute and program ccs")
    Signed-off-by: Ricardo Ribalda <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: staging: media: atomisp: Fix alignment and line length issues [+ + +]
Author: Martiros Shakhzadyan <[email protected]>
Date:   Tue Jul 14 16:01:57 2026 -0400

    media: staging: media: atomisp: Fix alignment and line length issues
    
    [ Upstream commit 7796e455170efa1823457b17a292b1c65bb8c1e0 ]
    
    Fix alignment style issues and adjacent line length issues in sh_css.c
    
    Signed-off-by: Martiros Shakhzadyan <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    Stable-dep-of: f4d51e55dd47 ("staging: media: atomisp: reduce load_primary_binaries() stack usage")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: staging: media: atomisp: Fix sh_css.c brace coding style issues [+ + +]
Author: Martiros Shakhzadyan <[email protected]>
Date:   Tue Jul 14 16:01:54 2026 -0400

    media: staging: media: atomisp: Fix sh_css.c brace coding style issues
    
    [ Upstream commit 6ceb557604e85c55bce0585216623c21c7a00453 ]
    
    Fix brace coding style issues.
    
    Signed-off-by: Martiros Shakhzadyan <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    Stable-dep-of: f4d51e55dd47 ("staging: media: atomisp: reduce load_primary_binaries() stack usage")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: staging: media: atomisp: Fix the rest of sh_css.c brace issues [+ + +]
Author: Martiros Shakhzadyan <[email protected]>
Date:   Tue Jul 14 16:01:55 2026 -0400

    media: staging: media: atomisp: Fix the rest of sh_css.c brace issues
    
    [ Upstream commit 7394bf6d3c1e8316484fcf3a9d71daaab489f211 ]
    
    Fix the remainder of brace coding style issues.
    
    Signed-off-by: Martiros Shakhzadyan <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    Stable-dep-of: f4d51e55dd47 ("staging: media: atomisp: reduce load_primary_binaries() stack usage")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: staging: media: atomisp: Replace if else clause with a ternary [+ + +]
Author: Martiros Shakhzadyan <[email protected]>
Date:   Tue Jul 14 16:01:56 2026 -0400

    media: staging: media: atomisp: Replace if else clause with a ternary
    
    [ Upstream commit d4bc34d18201120b247506b4a6ed17af694dfcf7 ]
    
    Use the ternary operator for conditional variable assignment in
    create_host_video_pipeline().
    
    Signed-off-by: Martiros Shakhzadyan <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    Stable-dep-of: f4d51e55dd47 ("staging: media: atomisp: reduce load_primary_binaries() stack usage")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: uvcvideo: Avoid partial metadata buffers [+ + +]
Author: Ricardo Ribalda <[email protected]>
Date:   Fri Apr 17 05:19:29 2026 +0000

    media: uvcvideo: Avoid partial metadata buffers
    
    commit a15b773fe4ffa450b56347cc506b2d1405600f5d upstream.
    
    If the metadata queue that is empty receives a new buffer while we are
    in the middle of processing a frame, the first metadata buffer will
    contain partial information.
    
    Avoid this by tracking the state of the metadata buffer and making sure
    that it is in sync with the data buffer.
    
    Now that we are at it, make sure that we skip buffers of size 1 or 0.
    They are not allowed by the spec... but it is a simple check to add and
    better be safe than sorry.
    
    Fixes: 088ead255245 ("media: uvcvideo: Add a metadata device node")
    Cc: [email protected]
    Signed-off-by: Ricardo Ribalda <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Hans de Goede <[email protected]>
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: uvcvideo: Fix buffer sequence in frame gaps [+ + +]
Author: Ricardo Ribalda <[email protected]>
Date:   Mon Mar 23 09:53:53 2026 +0000

    media: uvcvideo: Fix buffer sequence in frame gaps
    
    commit 2f24ac8dd87983a55f0498898f34a5f2b735b802 upstream.
    
    In UVC, the FID flips with every frame. For every FID flip, we increase
    the stream sequence number.
    
    Now, if a FID flips multiple times and there is no data transferred between
    the flips, the buffer sequence number will be set to the value of the
    stream sequence number after the first flip.
    
    Userspace uses the buffer sequence number to determine if there have been
    missing frames. With the current behaviour, userspace will think that the
    gap is in the wrong location.
    
    This patch modifies uvc_video_decode_start() to provide the correct buffer
    sequence number and timestamp.
    
    Cc: [email protected]
    Fixes: 650b95feee35 ("[media] uvcvideo: Generate discontinuous sequence numbers when frames are lost")
    Signed-off-by: Ricardo Ribalda <[email protected]>
    Reviewed-by: Hans de Goede <[email protected]>
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
memstick: ms_block: reject a card that reports too many blocks [+ + +]
Author: Maoyi Xie <[email protected]>
Date:   Thu Jul 2 16:27:45 2026 +0800

    memstick: ms_block: reject a card that reports too many blocks
    
    commit 718178f524b98bc920d74bc771aed823c8b81425 upstream.
    
    msb_ftl_initialize() computes the zone count from the card block count
    with no bound:
    
            msb->zone_count = msb->block_count / MS_BLOCKS_IN_ZONE;
            ...
            for (i = 0; i < msb->zone_count; i++)
                    msb->free_block_count[i] = MS_BLOCKS_IN_ZONE;
    
    msb->block_count is a card value. msb_read_boot_blocks() reads
    number_of_blocks from the card boot page and byte swaps it.
    free_block_count is a fixed int[MS_MAX_ZONES]. MS_MAX_ZONES is 16, so the
    valid indices are 0 to 15. The init loop above indexes it by zone_count.
    msb_mark_block_used() and msb_mark_block_unused() index it by
    pba / MS_BLOCKS_IN_ZONE, for pba up to block_count - 1. A card may report
    up to 65535 blocks. A block_count above 8192 (MS_MAX_ZONES *
    MS_BLOCKS_IN_ZONE) lets the pba index reach 16. That writes past
    free_block_count[] and corrupts struct msb_data. A larger count runs the
    init loop past the end too.
    
    A real Memory Stick has at most 16 zones. So it has at most 8192 blocks.
    msb_ftl_initialize() now rejects a card that reports more than
    MS_MAX_ZONES * MS_BLOCKS_IN_ZONE blocks.
    
    Fixes: 0ab30494bc4f ("memstick: add support for legacy memorysticks")
    Cc: [email protected]
    Signed-off-by: Maoyi Xie <[email protected]>
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mfd: cros_ec: Delay dev_set_drvdata() until probe success [+ + +]
Author: Andrei Kuchynski <[email protected]>
Date:   Mon Apr 27 13:17:21 2026 +0000

    mfd: cros_ec: Delay dev_set_drvdata() until probe success
    
    commit 8b2c1d41bc36c100b38ce5ee6def246c527eaf8a upstream.
    
    If ec_device_probe() fails, cros_ec_class_release releases memory for the
    cros_ec_dev structure. However, because the drvdata was already set,
    sub-drivers like cros_ec_typec can still retrieve the stale pointer via the
    platform device. This leads to a use-after-free when cros_ec_typec attempts
    to access &typec->ec->ec->dev on a device that has already been released.
    Move dev_set_drvdata() to ensure that the pointer is only made available
    once all initialization steps have succeeded.
    
     sysfs: cannot create duplicate filename '/class/chromeos/cros_ec'
     Call trace:
      sysfs_do_create_link_sd+0x94/0xdc
      sysfs_create_link+0x30/0x44
      device_add_class_symlinks+0x90/0x13c
      device_add+0xf0/0x50c
      ec_device_probe+0x150/0x4f0
      platform_probe+0xa0/0xe0
     ...
     BUG: KASAN: invalid-access in __memcpy+0x44/0x230
     Write at addr f5ffff809e2d33ac by task kworker/u32:5/125
     Pointer tag: [f5], memory tag: [fe]
     Tainted : [W]=WARN, [O]=OOT_MODULE
     Hardware name: Google Navi unprovisioned 0x7FFFFFFF/sku0 board/sku3
     Workqueue: events_unbound deferred_probe_work_func
     Call trace:
      __memcpy+0x44/0x230
      cros_ec_check_features+0x60/0xcc [cros_ec_proto]
      cros_typec_probe+0xe8/0x6e0 [cros_ec_typec]
      platform_probe+0xa0/0xe0
    
    Cc: [email protected]
    Fixes: 1c1d152cc5ac ("platform/chrome: cros_ec_dev - utilize new cdev_device_add helper function")
    Co-developed-by: Sergey Senozhatsky <[email protected]>
    Signed-off-by: Sergey Senozhatsky <[email protected]>
    Signed-off-by: Andrei Kuchynski <[email protected]>
    Reviewed-by: Benson Leung <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mfd: sm501: Fix reference leak on failed device registration [+ + +]
Author: Guangshuo Li <[email protected]>
Date:   Thu Apr 16 00:26:27 2026 +0800

    mfd: sm501: Fix reference leak on failed device registration
    
    commit 8c2f0b42fc252e1bf1c7746447091a468e784ca1 upstream.
    
    When platform_device_register() fails in sm501_register_device(), the
    embedded struct device in pdev has already been initialized by
    device_initialize(), but the failure path only reports the error and
    returns without dropping the device reference for the current platform
    device:
    
      sm501_register_device()
        -> platform_device_register(pdev)
           -> device_initialize(&pdev->dev)
           -> setup_pdev_dma_masks(pdev)
           -> platform_device_add(pdev)
    
    This leads to a reference leak when platform_device_register() fails.
    Fix this by calling platform_device_put() before returning the error.
    
    The issue was identified by a static analysis tool I developed and
    confirmed by manual review.
    
    Fixes: b6d6454fdb66f ("[PATCH] mfd: SM501 core driver")
    Cc: [email protected]
    Signed-off-by: Guangshuo Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mfd: tps6586x: Fix OF node refcount [+ + +]
Author: Bartosz Golaszewski <[email protected]>
Date:   Thu May 21 10:36:24 2026 +0200

    mfd: tps6586x: Fix OF node refcount
    
    commit 3001ed2b4e06da2276c42ace6551617065a5b1f9 upstream.
    
    Platform devices created with platform_device_alloc() call
    platform_device_release() when the last reference to the device's
    kobject is dropped. This function calls of_node_put() unconditionally.
    This works fine for devices created with platform_device_register_full()
    but users of the split approach (platform_device_alloc() +
    platform_device_add()) must bump the reference of the of_node they
    assign manually. Add the missing call to of_node_get().
    
    Cc: [email protected]
    Fixes: 62f6b0879304 ("tps6586x: Add device tree support")
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
MIPS: DEC: Ensure 32-bit stack location for o32 prom_printf() [+ + +]
Author: Maciej W. Rozycki <[email protected]>
Date:   Wed May 6 23:42:23 2026 +0100

    MIPS: DEC: Ensure 32-bit stack location for o32 prom_printf()
    
    commit 5ff79e8bdc75db51e30298a75939e2308e7658e0 upstream.
    
    In 64-bit configurations calling any firmware entry points from a kernel
    thread other than the initial one will result in a situation where the
    stack has been placed in the XKPHYS 64-bit memory segment.
    
    Consequently the stack pointer is no longer a 32-bit value and when the
    32-bit firmware code called uses 32-bit ALU operations to manipulate the
    stack pointer, the calculated result is incorrect (in fact in the 64-bit
    MIPS ISA almost all 32-bit ALU operations will produce an unpredictable
    result when executed on 64-bit data) and control goes astray.
    
    This may happen when no final console driver has been enabled in the
    configuration and consequently the initial console continues being used
    late into bootstrap, or with an upcoming change that will switch the zs
    driver to use a platform device, which in turn will make the console
    handover happen only after other kernel threads have already been
    started, and the kernel will hang at:
    
      pid_max: default: 32768 minimum: 301
    
    or somewhat later, but always before:
    
      cblist_init_generic: Setting adjustable number of callback queues.
    
    has been printed.
    
    It seems that only the prom_printf() entry point is affected.  Of all
    the other entry points wired only rex_slot_address() and rex_gettcinfo()
    are called from a kernel thread other than the initial one, specifically
    kernel_init(), and they are leaf functions that do no business with the
    stack, having worked with no issue ever since 64-bit support was added
    for the platform back in 2002.
    
    To address this issue then, arrange for the stack to be switched in the
    o32 wrapper as required for prom_printf() only, by supplying call_o32()
    with a pointer to a chunk of initdata space, which is placed in the
    CKSEG0 32-bit compatibility segment, observing that prom_printf() is
    only called from console output handler and therefore with the console
    lock held, implying no need for this code to be reentrant.
    
    Other firmware entry points may be called with interrupts enabled and no
    lock held, and may therefore require that call_o32() be reentrant.  They
    trigger no issue at this point and "if it ain't broke, don't fix it," so
    just leave them alone.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Maciej W. Rozycki <[email protected]>
    Cc: [email protected] # v2.6.12+
    Signed-off-by: Thomas Bogendoerfer <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

MIPS: DEC: Remove do_IRQ() call indirection [+ + +]
Author: Maciej W. Rozycki <[email protected]>
Date:   Mon May 4 21:14:00 2026 +0100

    MIPS: DEC: Remove do_IRQ() call indirection
    
    [ Upstream commit 35554eadc1b127bb5294504a4ac8f3a5dd9e299d ]
    
    As from commit 8f99a1626535 ("MIPS: Tracing: Add IRQENTRY_EXIT section
    for MIPS") do_IRQ() is not a macro anymore and can be invoked directly
    from assembly code, as a tail call.  Remove the dec_irq_dispatch() stub
    then and the indirection previously introduced with commit 187933f23679
    ("[MIPS] do_IRQ cleanup"), improving performance by reducing the number
    of control flow changes and the overall instruction count, while fixing
    a compiler's complaint about a missing prototype for said stub:
    
    arch/mips/dec/setup.c:780:25: warning: no previous prototype for 'dec_irq_dispatch' [-Wmissing-prototypes]
      780 | asmlinkage unsigned int dec_irq_dispatch(unsigned int irq)
          |                         ^~~~~~~~~~~~~~~~
    
    (which gets promoted to a compilation error with CONFIG_WERROR).
    
    Fixes: 8f99a1626535 ("MIPS: Tracing: Add IRQENTRY_EXIT section for MIPS")
    Signed-off-by: Maciej W. Rozycki <[email protected]>
    Signed-off-by: Thomas Bogendoerfer <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

MIPS: Fix big-endian stack argument fetching in o32 wrapper [+ + +]
Author: Maciej W. Rozycki <[email protected]>
Date:   Sat May 2 00:14:20 2026 +0100

    MIPS: Fix big-endian stack argument fetching in o32 wrapper
    
    [ Upstream commit 8e0780d30b1b51248e42895b7acc7a20f147b40b ]
    
    Fix an issue in call_o32() where the upper 32-bit half of incoming n64
    stack arguments is fetched and used for outgoing o32 stack arguments on
    big-endian platforms.
    
    This code was adapted from arch/mips/dec/prom/call_o32.S which was meant
    for a little-endian platform only and therefore using 32-bit loads from
    64-bit stack slot locations holding incoming stack arguments resulted in
    correct values being retrieved for data that is expected to be 32-bit.
    
    This works on little-endian platforms where the lower 32-bit half of the
    64-bit value is located at every 64-bit stack slot location.  However on
    big-endian platforms the lower 32-bit half is instead located at offset
    4 from every 64-bit stack slot location.
    
    So to fix the issue the offset of 4 would have to be used on big-endian
    platforms only, or alternatively a 64-bit load from the 64-bit stack
    slot location can be used across the board, as the subsequent 32-bit
    store to the corresponding outgoing stack argument slot will correctly
    truncate the value and cause no unpredictable result.  We already take
    advantage of this architectural feature for the incoming arguments held
    in $a6 and $a7 registers, since the o32 wrapper does not know how many
    incoming arguments there are and consequently propagates incoming data
    which may not be 32-bit.
    
    Since this code is generally supposed to be used with the stack located
    in cached memory there is no extra overhead expected for 64-bit loads as
    opposed to 32-bit ones, so pick this variant for code simplicity.
    
    Fixes: 231a35d37293 ("[MIPS] RM: Collected changes")
    Signed-off-by: Maciej W. Rozycki <[email protected]>
    Signed-off-by: Thomas Bogendoerfer <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

MIPS: ip22-gio: fix device reference leak in probe [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Apr 24 12:28:47 2026 +0200

    MIPS: ip22-gio: fix device reference leak in probe
    
    commit b82930a4c5dbc5c4df39c0f93d968c239f2c6885 upstream.
    
    The gio probe function needlessly takes a device reference which is
    never released and therefore prevents unbound gio devices from being
    freed.
    
    Fixes: e84de0c61905 ("MIPS: GIO bus support for SGI IP22/28")
    Cc: [email protected]      # 3.3
    Cc: Thomas Bogendoerfer <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Thomas Bogendoerfer <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

MIPS: ip22-gio: fix gio device memory leak [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Apr 24 12:28:46 2026 +0200

    MIPS: ip22-gio: fix gio device memory leak
    
    commit 7de9a1b45f5a95b58145653c525c8fb80292d9ab upstream.
    
    The gio device release callback was never wired up so gio devices are
    not freed when the last reference is dropped.
    
    Fixes: e84de0c61905 ("MIPS: GIO bus support for SGI IP22/28")
    Cc: [email protected]      # 3.3
    Cc: Thomas Bogendoerfer <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Thomas Bogendoerfer <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

MIPS: ip22-gio: fix kfree() of static object [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Apr 24 12:28:45 2026 +0200

    MIPS: ip22-gio: fix kfree() of static object
    
    commit c62cdd3e919bdf84c37ec46810f87cdb1736e822 upstream.
    
    The gio bus root device is a statically allocated object which must not
    be freed by kfree() on failure to register the device or bus.
    
    Fixes: 82242d28ff8b ("MIPS: IP22: Add missing put_device call")
    Cc: [email protected]      # 3.17
    Cc: Levente Kurusa <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Thomas Bogendoerfer <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

MIPS: mm: Fix out-of-bounds write in maar_res_walk() [+ + +]
Author: Yadan Fan <[email protected]>
Date:   Mon May 25 12:04:36 2026 +0800

    MIPS: mm: Fix out-of-bounds write in maar_res_walk()
    
    [ Upstream commit 1b001b16bc88f3f7817e228acfd91ee01bdcfcce ]
    
    maar_res_walk() uses wi->num_cfg as the index into the fixed-size
    wi->cfg array, but checks whether the array is full only after it has
    filled the selected entry. If walk_system_ram_range() reports more than
    16 memory ranges, the overflow call writes one struct maar_config past
    the end of the array before WARN_ON() prevents num_cfg from advancing.
    
    Move the full-array check before taking the array slot and return non-zero
    when the scratch array is full, so walk_system_ram_range() terminates the
    walk instead of invoking the callback for further ranges.
    
    Fixes: a5718fe8f70f ("MIPS: mm: Drop boot_mem_map")
    
    Signed-off-by: Yadan Fan <[email protected]>
    Signed-off-by: Thomas Bogendoerfer <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mld: add mc_lock for protecting per-interface mld data [+ + +]
Author: Taehee Yoo <[email protected]>
Date:   Thu Mar 25 16:16:57 2021 +0000

    mld: add mc_lock for protecting per-interface mld data
    
    [ Upstream commit 63ed8de4be81b699ca727e9f8e3344bd487806d7 ]
    
    The purpose of this lock is to avoid a bottleneck in the query/report
    event handler logic.
    
    By previous patches, almost all mld data is protected by RTNL.
    So, the query and report event handler, which is data path logic
    acquires RTNL too. Therefore if a lot of query and report events
    are received, it uses RTNL for a long time.
    So it makes the control-plane bottleneck because of using RTNL.
    In order to avoid this bottleneck, mc_lock is added.
    
    mc_lock protect only per-interface mld data and per-interface mld
    data is used in the query/report event handler logic.
    So, no longer rtnl_lock is needed in the query/report event handler logic.
    Therefore bottleneck will be disappeared by mc_lock.
    
    Suggested-by: Cong Wang <[email protected]>
    Signed-off-by: Taehee Yoo <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 9b26518b6896 ("ipv6: mcast: Fix potential UAF in MLD delayed work")
    Signed-off-by: Sasha Levin <[email protected]>

mld: add new workqueues for process mld events [+ + +]
Author: Taehee Yoo <[email protected]>
Date:   Thu Mar 25 16:16:56 2021 +0000

    mld: add new workqueues for process mld events
    
    [ Upstream commit f185de28d9ae6c978135993769352e523ee8df06 ]
    
    When query/report packets are received, mld module processes them.
    But they are processed under BH context so it couldn't use sleepable
    functions. So, in order to switch context, the two workqueues are
    added which processes query and report event.
    
    In the struct inet6_dev, mc_{query | report}_queue are added so it
    is per-interface queue.
    And mc_{query | report}_work are workqueue structure.
    
    When the query or report event is received, skb is queued to proper
    queue and worker function is scheduled immediately.
    Workqueues and queues are protected by spinlock, which is
    mc_{query | report}_lock, and worker functions are protected by RTNL.
    
    Suggested-by: Cong Wang <[email protected]>
    Signed-off-by: Taehee Yoo <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 9b26518b6896 ("ipv6: mcast: Fix potential UAF in MLD delayed work")
    Signed-off-by: Sasha Levin <[email protected]>

mld: change lockdep annotation for ip6_sf_socklist and ipv6_mc_socklist [+ + +]
Author: Taehee Yoo <[email protected]>
Date:   Sun Apr 4 13:38:23 2021 +0000

    mld: change lockdep annotation for ip6_sf_socklist and ipv6_mc_socklist
    
    commit 4b4b84468aa27d0a18be8cb727f246aa35a3406d upstream.
    
    struct ip6_sf_socklist and ipv6_mc_socklist are per-socket MLD data.
    These data are protected by rtnl lock, socket lock, and RCU.
    So, when these are used, it verifies whether rtnl lock is acquired or not.
    
    ip6_mc_msfget() is called by do_ipv6_getsockopt().
    But caller doesn't acquire rtnl lock.
    So, when these data are used in the ip6_mc_msfget() lockdep warns about it.
    But accessing these is actually safe because socket lock was acquired by
    do_ipv6_getsockopt().
    
    So, it changes lockdep annotation from rtnl lock to socket lock.
    (rtnl_dereference -> sock_dereference)
    
    Locking graph for mld data is like below:
    
    When writing mld data:
    do_ipv6_setsockopt()
        rtnl_lock
        lock_sock
        (mld functions)
            idev->mc_lock(if per-interface mld data is modified)
    
    When reading mld data:
    do_ipv6_getsockopt()
        lock_sock
        ip6_mc_msfget()
    
    Splat looks like:
    =============================
    WARNING: suspicious RCU usage
    5.12.0-rc4+ #503 Not tainted
    -----------------------------
    net/ipv6/mcast.c:610 suspicious rcu_dereference_protected() usage!
    
    other info that might help us debug this:
    
    rcu_scheduler_active = 2, debug_locks = 1
    1 lock held by mcast-listener-/923:
     #0: ffff888007958a70 (sk_lock-AF_INET6){+.+.}-{0:0}, at:
    ipv6_get_msfilter+0xaf/0x190
    
    stack backtrace:
    CPU: 1 PID: 923 Comm: mcast-listener- Not tainted 5.12.0-rc4+ #503
    Call Trace:
     dump_stack+0xa4/0xe5
     ip6_mc_msfget+0x553/0x6c0
     ? ipv6_sock_mc_join_ssm+0x10/0x10
     ? lockdep_hardirqs_on_prepare+0x3e0/0x3e0
     ? mark_held_locks+0xb7/0x120
     ? lockdep_hardirqs_on_prepare+0x27c/0x3e0
     ? __local_bh_enable_ip+0xa5/0xf0
     ? lock_sock_nested+0x82/0xf0
     ipv6_get_msfilter+0xc3/0x190
     ? compat_ipv6_get_msfilter+0x300/0x300
     ? lock_downgrade+0x690/0x690
     do_ipv6_getsockopt.isra.6.constprop.13+0x1809/0x29e0
     ? do_ipv6_mcast_group_source+0x150/0x150
     ? register_lock_class+0x1750/0x1750
     ? kvm_sched_clock_read+0x14/0x30
     ? sched_clock+0x5/0x10
     ? sched_clock_cpu+0x18/0x170
     ? find_held_lock+0x3a/0x1c0
     ? lock_downgrade+0x690/0x690
     ? ipv6_getsockopt+0xdb/0x1b0
     ipv6_getsockopt+0xdb/0x1b0
    [ ... ]
    
    Fixes: 88e2ca308094 ("mld: convert ifmcaddr6 to RCU")
    Reported-by: Eric Dumazet <[email protected]>
    Signed-off-by: Taehee Yoo <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mld: convert from timer to delayed work [+ + +]
Author: Taehee Yoo <[email protected]>
Date:   Thu Mar 25 16:16:51 2021 +0000

    mld: convert from timer to delayed work
    
    [ Upstream commit 2d9a93b4902be6a5504b5941dd15e9cd776aadca ]
    
    mcast.c has several timers for delaying works.
    Timer's expire handler is working under atomic context so it can't use
    sleepable things such as GFP_KERNEL, mutex, etc.
    In order to use sleepable APIs, it converts from timers to delayed work.
    But there are some critical sections, which is used by both process
    and BH context. So that it still uses spin_lock_bh() and rwlock.
    
    Suggested-by: Cong Wang <[email protected]>
    Signed-off-by: Taehee Yoo <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 9b26518b6896 ("ipv6: mcast: Fix potential UAF in MLD delayed work")
    Signed-off-by: Sasha Levin <[email protected]>

mld: convert ifmcaddr6 to RCU [+ + +]
Author: Taehee Yoo <[email protected]>
Date:   Thu Mar 25 16:16:55 2021 +0000

    mld: convert ifmcaddr6 to RCU
    
    [ Upstream commit 88e2ca3080947fe22eb520c1f8231e79a105d011 ]
    
    The ifmcaddr6 has been protected by inet6_dev->lock(rwlock) so that
    the critical section is atomic context. In order to switch this context,
    changing locking is needed. The ifmcaddr6 actually already protected by
    RTNL So if it's converted to use RCU, its control path context can be
    switched to sleepable.
    
    Suggested-by: Cong Wang <[email protected]>
    Signed-off-by: Taehee Yoo <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 9b26518b6896 ("ipv6: mcast: Fix potential UAF in MLD delayed work")
    Signed-off-by: Sasha Levin <[email protected]>

mld: convert ip6_sf_list to RCU [+ + +]
Author: Taehee Yoo <[email protected]>
Date:   Thu Mar 25 16:16:54 2021 +0000

    mld: convert ip6_sf_list to RCU
    
    [ Upstream commit 4b200e398953c237c86d32bf26d4cb2a96556a6f ]
    
    The ip6_sf_list has been protected by mca_lock(spin_lock) so that the
    critical section is atomic context. In order to switch this context,
    changing locking is needed. The ip6_sf_list actually already protected
    by RTNL So if it's converted to use RCU, its control path context can
    be switched to sleepable.
    But It doesn't remove mca_lock yet because ifmcaddr6 isn't converted
    to RCU yet. So, It's not fully converted to the sleepable context.
    
    Suggested-by: Cong Wang <[email protected]>
    Signed-off-by: Taehee Yoo <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 9b26518b6896 ("ipv6: mcast: Fix potential UAF in MLD delayed work")
    Signed-off-by: Sasha Levin <[email protected]>

mld: convert ipv6_mc_socklist->sflist to RCU [+ + +]
Author: Taehee Yoo <[email protected]>
Date:   Thu Mar 25 16:16:53 2021 +0000

    mld: convert ipv6_mc_socklist->sflist to RCU
    
    [ Upstream commit 882ba1f73c06831f2a21044ebd8864c485ac04f2 ]
    
    The sflist has been protected by rwlock so that the critical section
    is atomic context.
    In order to switch this context, changing locking is needed.
    The sflist actually already protected by RTNL So if it's converted
    to use RCU, its control path context can be switched to sleepable.
    
    Suggested-by: Cong Wang <[email protected]>
    Signed-off-by: Taehee Yoo <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 9b26518b6896 ("ipv6: mcast: Fix potential UAF in MLD delayed work")
    Signed-off-by: Sasha Levin <[email protected]>

mld: fix suspicious RCU usage in __ipv6_dev_mc_dec() [+ + +]
Author: Taehee Yoo <[email protected]>
Date:   Fri Apr 16 14:16:06 2021 +0000

    mld: fix suspicious RCU usage in __ipv6_dev_mc_dec()
    
    commit aa8caa767e319bad34a82bfce7da1ed2b9c0ed6f upstream.
    
    __ipv6_dev_mc_dec() internally uses sleepable functions so that caller
    must not acquire atomic locks. But caller, which is addrconf_verify_rtnl()
    acquires rcu_read_lock_bh().
    So this warning occurs in the __ipv6_dev_mc_dec().
    
    Test commands:
        ip netns add A
        ip link add veth0 type veth peer name veth1
        ip link set veth1 netns A
        ip link set veth0 up
        ip netns exec A ip link set veth1 up
        ip a a 2001:db8::1/64 dev veth0 valid_lft 2 preferred_lft 1
    
    Splat looks like:
    ============================
    WARNING: suspicious RCU usage
    5.12.0-rc6+ #515 Not tainted
    -----------------------------
    kernel/sched/core.c:8294 Illegal context switch in RCU-bh read-side
    critical section!
    
    other info that might help us debug this:
    
    rcu_scheduler_active = 2, debug_locks = 1
    4 locks held by kworker/4:0/1997:
     #0: ffff88810bd72d48 ((wq_completion)ipv6_addrconf){+.+.}-{0:0}, at:
    process_one_work+0x761/0x1440
     #1: ffff888105c8fe00 ((addr_chk_work).work){+.+.}-{0:0}, at:
    process_one_work+0x795/0x1440
     #2: ffffffffb9279fb0 (rtnl_mutex){+.+.}-{3:3}, at:
    addrconf_verify_work+0xa/0x20
     #3: ffffffffb8e30860 (rcu_read_lock_bh){....}-{1:2}, at:
    addrconf_verify_rtnl+0x23/0xc60
    
    stack backtrace:
    CPU: 4 PID: 1997 Comm: kworker/4:0 Not tainted 5.12.0-rc6+ #515
    Workqueue: ipv6_addrconf addrconf_verify_work
    Call Trace:
     dump_stack+0xa4/0xe5
     ___might_sleep+0x27d/0x2b0
     __mutex_lock+0xc8/0x13f0
     ? lock_downgrade+0x690/0x690
     ? __ipv6_dev_mc_dec+0x49/0x2a0
     ? mark_held_locks+0xb7/0x120
     ? mutex_lock_io_nested+0x1270/0x1270
     ? lockdep_hardirqs_on_prepare+0x12c/0x3e0
     ? _raw_spin_unlock_irqrestore+0x47/0x50
     ? trace_hardirqs_on+0x41/0x120
     ? __wake_up_common_lock+0xc9/0x100
     ? __wake_up_common+0x620/0x620
     ? memset+0x1f/0x40
     ? netlink_broadcast_filtered+0x2c4/0xa70
     ? __ipv6_dev_mc_dec+0x49/0x2a0
     __ipv6_dev_mc_dec+0x49/0x2a0
     ? netlink_broadcast_filtered+0x2f6/0xa70
     addrconf_leave_solict.part.64+0xad/0xf0
     ? addrconf_join_solict.part.63+0xf0/0xf0
     ? nlmsg_notify+0x63/0x1b0
     __ipv6_ifa_notify+0x22c/0x9c0
     ? inet6_fill_ifaddr+0xbe0/0xbe0
     ? lockdep_hardirqs_on_prepare+0x12c/0x3e0
     ? __local_bh_enable_ip+0xa5/0xf0
     ? ipv6_del_addr+0x347/0x870
     ipv6_del_addr+0x3b1/0x870
     ? addrconf_ifdown+0xfe0/0xfe0
     ? rcu_read_lock_any_held.part.27+0x20/0x20
     addrconf_verify_rtnl+0x8a9/0xc60
     addrconf_verify_work+0xf/0x20
     process_one_work+0x84c/0x1440
    
    In order to avoid this problem, it uses rcu_read_unlock_bh() for
    a short time. RCU is used for avoiding freeing
    ifp(struct *inet6_ifaddr) while ifp is being used. But this will
    not be released even if rcu_read_unlock_bh() is used.
    Because before rcu_read_unlock_bh(), it uses in6_ifa_hold(ifp).
    So this is safe.
    
    Fixes: 63ed8de4be81 ("mld: add mc_lock for protecting per-interface mld data")
    Suggested-by: Eric Dumazet <[email protected]>
    Reported-by: Eric Dumazet <[email protected]>
    Signed-off-by: Taehee Yoo <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mld: get rid of inet6_dev->mc_lock [+ + +]
Author: Taehee Yoo <[email protected]>
Date:   Thu Mar 25 16:16:52 2021 +0000

    mld: get rid of inet6_dev->mc_lock
    
    [ Upstream commit cf2ce339b401bc53ee131f0ce38bae32a949925e ]
    
    The purpose of mc_lock is to protect inet6_dev->mc_tomb.
    But mc_tomb is already protected by RTNL and all functions,
    which manipulate mc_tomb are called under RTNL.
    So, mc_lock is not needed.
    Furthermore, it is spinlock so the critical section is atomic.
    In order to reduce atomic context, it should be removed.
    
    Suggested-by: Cong Wang <[email protected]>
    Signed-off-by: Taehee Yoo <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 9b26518b6896 ("ipv6: mcast: Fix potential UAF in MLD delayed work")
    Signed-off-by: Sasha Levin <[email protected]>

 
mlxsw: fix refcount leak in mlxsw_sp_vrs_lpm_tree_replace() [+ + +]
Author: Wentao Liang <[email protected]>
Date:   Tue Jun 9 08:47:30 2026 +0000

    mlxsw: fix refcount leak in mlxsw_sp_vrs_lpm_tree_replace()
    
    commit 21cf8dc478a49e8de039c2739b1646a774cb1944 upstream.
    
    When mlxsw_sp_vrs_lpm_tree_replace() fails after replacing some VRs,
    the error rollback loop does not correctly revert the preceding
    replacements. The loop decrements the index but fails to update the
    vr pointer, which still points to the VR that caused the failure. As
    a result, the condition and the rollback call always operate on the
    same VR, potentially calling mlxsw_sp_vr_lpm_tree_replace() multiple
    times on it while never rolling back the earlier VRs. Those VRs
    continue to hold a reference to new_tree acquired via
    mlxsw_sp_lpm_tree_hold(), leaking the reference count of new_tree.
    
    Fix by reinitializing vr inside the error loop with the updated index:
    
            vr = &mlxsw_sp->router->vrs[i];
    
    so that the loop correctly iterates over all VRs that were actually
    replaced.
    
    Cc: [email protected]
    Fixes: fc922bb0dd94 ("mlxsw: spectrum_router: Use one LPM tree for all virtual routers")
    Signed-off-by: Wentao Liang <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/fake-numa: fix under-allocation detection in uniform split [+ + +]
Author: Sang-Heon Jeon <[email protected]>
Date:   Fri Apr 17 22:58:05 2026 +0900

    mm/fake-numa: fix under-allocation detection in uniform split
    
    [ Upstream commit 3a3fc1dfd6a958615ebaab8fb251e89fc2b3f2f2 ]
    
    When splitting NUMA node uniformly, split_nodes_size_interleave_uniform()
    returns the next absolute node ID, not the number of nodes created.
    
    The existing under-allocation detection logic compares next absolute node
    ID (ret) and request count (n), which only works when nid starts at 0.
    
    For example, on a system with 2 physical NUMA nodes (node 0: 2GB, node
    1: 128MB) and numa=fake=8U, 8 fake nodes are successfully created from
    node 0 and split_nodes_size_interleave_uniform() returns 8. For node 1,
    fake node nid starts at 8, but only 4 fake nodes are created due to
    current FAKE_NODE_MIN_SIZE being 32MB, and
    split_nodes_size_interleave_uniform() returns 12. By existing
    under-allocation detection logic, "ret < n" (12 < 8) is false, so the
    under-allocation will not be detected.
    
    Fix under-allocation detection logic to compare the number of actually
    created nodes (ret - nid) against the request count (n). Also skip
    under-allocation detection logic for memoryless physical nodes where no
    fake nodes are created.
    
    Also, fix the outdated comment describing
    split_nodes_size_interleave_uniform() to match the actual return value.
    
    Signed-off-by: Sang-Heon Jeon <[email protected]>
    Reported-by: Donghyeon Lee <[email protected]>
    Reported-by: Munhui Chae <[email protected]>
    Fixes: cc9aec03e58f ("x86/numa_emulation: Introduce uniform split capability") # 4.19
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mike Rapoport (Microsoft) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mmc: renesas_sdhi: Add quirk entry for RZ/G2H SoC [+ + +]
Author: Lad Prabhakar <[email protected]>
Date:   Tue Jul 7 11:44:17 2026 +0100

    mmc: renesas_sdhi: Add quirk entry for RZ/G2H SoC
    
    The RZ/G2H (R8A774E1) SoC uses the same SDHI IP as the R-Car H3-N
    (R8A77951) and requires the sdhi_quirks_bad_taps2367 quirk.
    
    The 5.10 stable backport of commit 77fa80a1b732 ("mmc: renesas_sdhi:
    Add OF entry for RZ/G2H SoC") adds an OF match entry for RZ/G2H.
    However, unlike upstream, the 5.10 driver applies SoC-specific quirks
    through the sdhi_quirks_match table. As a result, the required quirk is
    not applied for RZ/G2H.
    
    Add the missing sdhi_quirks_match entry for RZ/G2H ES3.x.
    
    Signed-off-by: Lad Prabhakar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mmc: vub300: defer reset until cmd_mutex is unlocked [+ + +]
Author: Runyu Xiao <[email protected]>
Date:   Wed Jun 17 23:23:19 2026 +0800

    mmc: vub300: defer reset until cmd_mutex is unlocked
    
    commit ee5fb641c4ccac8406c668d3e947eb20ce44f233 upstream.
    
    vub300_cmndwork_thread() holds cmd_mutex while it sends a command and
    waits for the command response.  If the response wait times out,
    __vub300_command_response() kills the command URBs and then synchronously
    resets the USB device through usb_reset_device().
    
    That reset path re-enters the driver through vub300_pre_reset(), which
    also takes cmd_mutex.  The worker therefore tries to acquire the same
    mutex recursively while it is still holding it from the command path.
    
    This issue was found by our static analysis tool and then manually
    reviewed against the current tree.
    
    The grounded PoC kept the real worker and timeout/reset carrier:
    
      vub300_cmndwork_thread()
      __vub300_command_response()
      usb_lock_device_for_reset()
      usb_reset_device()
      vub300_pre_reset()
    
    Lockdep reported the same-task recursive acquisition on cmd_mutex:
    
      WARNING: possible recursive locking detected
      ... (&test_vub300.cmd_mutex) ... at: usb_reset_device... [vuln_msv]
      ... (&test_vub300.cmd_mutex) ... at: vub300_cmndwork_thread+0x12/0x20 [vuln_msv]
      Workqueue: vub300_cmd_wq vub300_cmndwork_thread [vuln_msv]
      *** DEADLOCK ***
    
    Return a flag from __vub300_command_response() when the timeout path needs
    a device reset, then perform the reset after vub300_cmndwork_thread() has
    cleared the in-flight command state and dropped cmd_mutex.  The reset is
    still attempted before mmc_request_done(), preserving the existing request
    completion ordering while avoiding the recursive lock.
    
    Fixes: 88095e7b473a ("mmc: Add new VUB300 USB-to-SD/SDIO/MMC driver")
    Cc: [email protected]
    Signed-off-by: Runyu Xiao <[email protected]>
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mtd: maps: vmu-flash: fix NULL pointer dereference in initialization [+ + +]
Author: Florian Fuchs <[email protected]>
Date:   Mon May 18 13:45:21 2026 +0200

    mtd: maps: vmu-flash: fix NULL pointer dereference in initialization
    
    commit 357e3b8e3a8769ba36eb8ec5e053e4825f1a9329 upstream.
    
    The mtd_info contains a struct device, which must be linked to its
    parent. Without this, the initialization of the MTD fails with a NULL
    pointer dereference.
    
    Fixes: 47a72688fae7 ("mtd: flash mapping support for Dreamcast VMU.")
    Cc: [email protected]
    Signed-off-by: Florian Fuchs <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mtd: onenand: samsung: report DMA completion timeouts [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Fri Jul 3 15:43:50 2026 +0800

    mtd: onenand: samsung: report DMA completion timeouts
    
    commit d03a19bd6c7f86b99ca8fb61a6ec2345cee1d9d6 upstream.
    
    The S5PC110 OneNAND DMA helpers have bounded waits for transfer
    completion. The polling helper falls out of its timeout loop and returns
    success, and the IRQ helper ignores wait_for_completion_timeout().
    
    Return -ETIMEDOUT when the DMA transfer-done bit or completion does not
    arrive before the timeout so callers can treat the buffer transfer as
    failed.
    
    Fixes: e23abf4b7743 ("mtd: OneNAND: S5PC110: Implement DMA interrupt method")
    Cc: [email protected]
    Signed-off-by: Pengpeng Hou <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mtd: rawnand: fix condition in 'nand_select_target()' [+ + +]
Author: Arseniy Krasnov <[email protected]>
Date:   Tue May 5 11:30:30 2026 +0300

    mtd: rawnand: fix condition in 'nand_select_target()'
    
    commit 8507c2cc9e4fa402401819f44d1e8a5ef4d11d8b upstream.
    
    'cs' here must be in range [0:nanddev_ntargets[.
    
    Cc: [email protected]
    Fixes: 32813e288414 ("mtd: rawnand: Get rid of chip->numchips")
    Signed-off-by: Arseniy Krasnov <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mtd: rawnand: fsl_ifc: return errors for failed page reads [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Fri Jul 3 15:42:33 2026 +0800

    mtd: rawnand: fsl_ifc: return errors for failed page reads
    
    commit f9a13e05a327080c3a1c8165adf9e678fb68fef2 upstream.
    
    fsl_ifc_run_command() logs controller timeout and other non-OPC
    completion states in ctrl->nand_stat. fsl_ifc_read_page() then only
    increments the ECC failure counter for non-OPC status and still returns
    max_bitflips, which can be zero.
    
    Return -ETIMEDOUT when the command did not complete at all and -EIO for
    other non-OPC read completions so the NAND core does not treat a failed
    page read as a clean page.
    
    Fixes: 82771882d960 ("NAND Machine support for Integrated Flash Controller")
    Cc: [email protected]
    Signed-off-by: Pengpeng Hou <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mtd: rawnand: lpc32xx_mlc: fail DMA transfers on timeout [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Fri Jul 3 15:37:59 2026 +0800

    mtd: rawnand: lpc32xx_mlc: fail DMA transfers on timeout
    
    commit dbf590b662695b16fbf5917ef129697be4410ea9 upstream.
    
    lpc32xx_xmit_dma() starts a DMA transfer and waits up to one second
    for its completion, but it ignores the wait result and returns success
    after unmapping the buffer.
    
    A timed out read can therefore return success with incomplete data, and
    a timed out write can continue the NAND operation without proof that the
    DMA payload reached the controller.
    
    Terminate the DMA channel on timeout, unmap the scatterlist through the
    existing cleanup path, and return -ETIMEDOUT to the NAND read/write
    callers. Initialize the shared cleanup-path result before using it for
    dmaengine_prep_slave_sg() failures.
    
    Fixes: 70f7cb78ec53 ("mtd: add LPC32xx MLC NAND driver")
    Cc: [email protected]
    Reviewed-by: Vladimir Zapolskiy <[email protected]>
    Signed-off-by: Pengpeng Hou <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mtd: rawnand: lpc32xx_slc: fail DMA transfer on completion timeout [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Fri Jul 3 15:39:43 2026 +0800

    mtd: rawnand: lpc32xx_slc: fail DMA transfer on completion timeout
    
    commit 17a8ce84964f243c8f89dc7353ac7e8d3137bc74 upstream.
    
    lpc32xx_xmit_dma() waits for the DMA completion callback but ignores
    wait_for_completion_timeout(). A timed out DMA transfer is therefore
    unmapped and reported as successful to the NAND read/write path.
    
    Return -ETIMEDOUT when the completion wait expires. Terminate the DMA
    channel before unmapping the scatterlist so the timed out transfer cannot
    continue to access the buffer after the error is returned.
    
    Fixes: 2944a44da09e ("mtd: add LPC32xx SLC NAND driver")
    Cc: [email protected]
    Reviewed-by: Vladimir Zapolskiy <[email protected]>
    Signed-off-by: Pengpeng Hou <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mtd: slram: remove failed entries from the device list [+ + +]
Author: Ruoyu Wang <[email protected]>
Date:   Tue Jun 9 16:45:27 2026 +0800

    mtd: slram: remove failed entries from the device list
    
    commit 36f1648644d769c496a8e47e53603e863e358d73 upstream.
    
    register_device() links a new slram_mtdlist entry before allocating all
    of the state needed by the entry. If a later allocation, memremap(), or
    mtd_device_register() fails, the partially initialized entry remains on
    the global list. A later cleanup can then dereference or free invalid
    state from that failed entry.
    
    Unwind the partially initialized entry and clear the list tail on each
    failure path after the entry has been linked.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Signed-off-by: Ruoyu Wang <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mtd: spi-nor: Drop duplicate Kconfig dependency [+ + +]
Author: Miquel Raynal <[email protected]>
Date:   Tue May 26 16:56:27 2026 +0200

    mtd: spi-nor: Drop duplicate Kconfig dependency
    
    [ Upstream commit a6470e2162e9c3779a4bd6ff3bed1b81d796e46e ]
    
    I do not think the MTD dependency is needed twice. This is likely a
    duplicate coming from a former rebase when the spi-nor core got cleaned
    up a while ago. Remove the extra line.
    
    Fixes: b35b9a10362d ("mtd: spi-nor: Move m25p80 code in spi-nor.c")
    Signed-off-by: Miquel Raynal <[email protected]>
    Reviewed-by: Michael Walle <[email protected]>
    Signed-off-by: Pratyush Yadav <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/9p: fix race condition on rdma->state in trans_rdma.c [+ + +]
Author: Yizhou Zhao <[email protected]>
Date:   Fri May 29 15:39:31 2026 +0800

    net/9p: fix race condition on rdma->state in trans_rdma.c
    
    [ Upstream commit 7d54894a1ee265a72d70f7cae1da6cc774cccc71 ]
    
    The rdma->state field is modified without holding req_lock in both
    recv_done() and p9_cm_event_handler(), while rdma_request() accesses
    the same field under the req_lock spinlock. This inconsistent locking
    creates a race condition:
    
    - recv_done() running in softirq completion context sets
      rdma->state = P9_RDMA_FLUSHING without acquiring req_lock
    
    - p9_cm_event_handler() modifies rdma->state at multiple points
      (ADDR_RESOLVED, ROUTE_RESOLVED, ESTABLISHED, CLOSED) without
      req_lock
    
    - rdma_request() uses spin_lock_irqsave(&rdma->req_lock, flags) to
      protect the read-modify-write of rdma->state
    
    The race can cause lost state transitions: recv_done() or the CM
    event handler could set state to FLUSHING/CLOSED while rdma_request()
    is concurrently checking or modifying state under the lock, leading to
    the FLUSHING transition being silently overwritten by CLOSING. This
    corrupts the connection state machine and can cause use-after-free on
    RDMA request objects during teardown.
    
    Fix by adding req_lock protection to all rdma->state modifications in
    recv_done() and p9_cm_event_handler(), matching the pattern already
    used in rdma_request(). Use spin_lock_irqsave/spin_unlock_irqrestore
    in the CM event handler since it can race with recv_done() which runs
    in softirq context.
    
    Tested with a kernel module that races two threads (simulating
    rdma_request and recv_done/CM handler) on rdma->state with proper
    locking: 5.5M+ FLUSHING writes over 27M iterations with 0 lost
    transitions.
    
    Fixes: 473c7dd1d7b5 ("9p/rdma: remove useless check in cm_event_handler")
    Reported-by: Yizhou Zhao <[email protected]>
    Reported-by: Yuxiang Yang <[email protected]>
    Reported-by: Ao Wang <[email protected]>
    Reported-by: Xuewei Feng <[email protected]>
    Reported-by: Qi Li <[email protected]>
    Reported-by: Ke Xu <[email protected]>
    Assisted-by: GLM:GLM-5.1
    Signed-off-by: Yizhou Zhao <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Dominique Martinet <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/mlx5: Fix L3 tunnel entropy refcount leak [+ + +]
Author: Li RongQing <[email protected]>
Date:   Fri Jul 3 22:14:23 2026 +0800

    net/mlx5: Fix L3 tunnel entropy refcount leak
    
    [ Upstream commit c914307e1d41c2cb7bcdcbfde4cd2f214f6aa027 ]
    
    mlx5_tun_entropy_refcount_inc() counts both VXLAN and L2-to-L3
    tunnel reformat entries as entropy-enabling users. The matching
    decrement path only handled VXLAN, leaving L2-to-L3 tunnel entries
    counted after release.
    
    Handle MLX5_REFORMAT_TYPE_L2_TO_L3_TUNNEL in
    mlx5_tun_entropy_refcount_dec() as well so the enabling entry
    refcount remains balanced.
    
    Fixes: f828ca6a2fb6 ("net/mlx5e: Add support for hw encapsulation of MPLS over UDP")
    Signed-off-by: Li RongQing <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Reviewed-by: Tariq Toukan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/sched: cake: reject overhead values that underflow length [+ + +]
Author: Samuel Moelius <[email protected]>
Date:   Thu Jul 2 00:07:59 2026 +0000

    net/sched: cake: reject overhead values that underflow length
    
    [ Upstream commit b7f97cae7ec1b6c3c32843c42be218690d310467 ]
    
    CAKE accepts signed overhead values and stores them in an s16, but the
    adjusted packet length calculation uses unsigned arithmetic.  A negative
    effective length can therefore wrap to a large value.
    
    Such configurations make rate accounting depend on integer wraparound
    rather than on the packet size userspace intended to model.  A static
    netlink lower bound is not enough because packets reaching CAKE can be
    smaller than any reasonable manual-overhead allowance.
    
    Fold the signed overhead adjustment into the existing datapath MPU clamp
    so negative adjusted lengths are clamped before link-layer framing
    adjustments.
    
    Fixes: a729b7f0bd5b ("sch_cake: Add overhead compensation support to the rate shaper")
    Assisted-by: Codex:gpt-5.5-cyber-preview
    Signed-off-by: Samuel Moelius <[email protected]>
    Acked-by: Toke Høiland-Jørgensen <[email protected]>
    Link: https://patch.msgid.link/20260702000758.297407.e5c888d9d99d.cake-overhead-underflow@trailofbits.com
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: cls_bpf: prevent unbounded recursion in offload rollback [+ + +]
Author: Jiayuan Chen <[email protected]>
Date:   Tue May 26 10:55:29 2026 +0800

    net/sched: cls_bpf: prevent unbounded recursion in offload rollback
    
    [ Upstream commit 27db54b90bcc7c37867fe664107fa25ea6a116e4 ]
    
    Quan Sun reported [1] a stack overflow in cls_bpf_offload_cmd().
    
    Reproducer on netdevsim: add a skip_sw cls_bpf filter, set the
    bpf_tc_accept debugfs knob to 0, then `tc filter replace`. The replace
    calls tc_setup_cb_replace() which fails. cls_bpf_offload_cmd() then
    swaps prog/oldprog and recursively calls itself to roll back. But
    bpf_tc_accept=0 makes the rollback fail too, which triggers yet another
    rollback frame with the same arguments, and so on until the stack is
    exhausted.
    
    bpf_tc_accept is just a convenient knob for the reproducer. Any driver
    whose tc_setup_cb_replace() fails twice in a row can hit the same loop,
    so this is not a netdevsim-only issue.
    
    Two ways to fix it:
    
      1) Have the rollback call tc_setup_cb_add() on oldprog instead of
         re-entering cls_bpf_offload_cmd().
      2) Mark the rollback frame with a flag and skip a second-level
         rollback from inside it.
    
    Go with (2). It is the smaller change and keeps the original behaviour:
    the rollback still goes through tc_setup_cb_replace(), so the driver
    gets one real chance to restore its state. If that attempt also fails,
    we just return the original error instead of recursing.
    
    [1]: https://lore.kernel.org/bpf/[email protected]/T/#u
    
    Fixes: 102740bd9436 ("cls_bpf: fix offload assumptions after callback conversion")
    Reviewed-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Jiayuan Chen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: hhf: clear heavy-hitter state on reset [+ + +]
Author: Samuel Moelius <[email protected]>
Date:   Mon Jun 29 16:44:59 2026 +0000

    net/sched: hhf: clear heavy-hitter state on reset
    
    [ Upstream commit a225f8c20712713406ae47024b8df42deacddd4a ]
    
    HHF reset does not clear the classifier state used to identify heavy
    hitters.  Packets after reset can therefore be scheduled using flow
    history from before the reset.
    
    The reset operation should return the qdisc to an empty state.
    
    Clear the heavy-hitter classifier tables when HHF is reset.
    
    Fixes: 10239edf86f1 ("net-qdisc-hhf: Heavy-Hitter Filter (HHF) qdisc")
    Assisted-by: Codex:gpt-5.5-cyber-preview
    Signed-off-by: Samuel Moelius <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: sch_codel: Do not call qdisc_tree_reduce_backlog during peek before restoring qlen [+ + +]
Author: Victor Nogueira <[email protected]>
Date:   Wed Jun 10 16:28:53 2026 -0300

    net/sched: sch_codel: Do not call qdisc_tree_reduce_backlog during peek before restoring qlen
    
    [ Upstream commit 52f1da34c9f4d5bdc1e8b44242da5c7ba8db85f3 ]
    
    Whenever codel drops packets during peek, it calls
    qdisc_tree_reduce_backlog. An issue arises because it calls
    qdisc_tree_reduce_backlog before it reincrements the qlen. If qlen drops
    to zero, but peek returns an skb, the parent's qlen_notify callback will
    be executed even though codel still has 1 packet on the queue and, thus,
    will mistakenly deactivate the parent's class causing issues like a wild
    memory access when qfq has codel as a child:
    
    [   36.339843][  T370] Oops: general protection fault, probably for non-canonical address 0xfbd59c0000000024: 0000 [#1] SMP KASAN NOPTI
    [   36.340408][  T370] KASAN: maybe wild-memory-access in range [0xdead000000000120-0xdead000000000127]
    [   36.340737][  T370] CPU: 2 UID: 0 PID: 370 Comm: tc Not tainted 7.1.0-rc5-00287-g66e13b626592 #87 PREEMPT(full)
    [   36.341113][  T370] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
    [   36.341357][  T370] RIP: 0010:qfq_deactivate_agg (include/linux/list.h:1029 (discriminator 2) include/linux/list.h:1043 (discriminator 2) net/sched/sch_qfq.c:1369 (discriminator 2) net/sched/sch_qfq.c:1395 (discriminator 2)) sch_qfq
    [   36.342221][  T370] RSP: 0018:ffff8881100ef370 EFLAGS: 00010216
    [   36.342422][  T370] RAX: 0000000000000000 RBX: ffff8881058a9568 RCX: dffffc0000000000
    [   36.342664][  T370] RDX: 1ffff11021064dc3 RSI: ffff888108326e00 RDI: dffffc0000000000
    [   36.342905][  T370] RBP: ffff8881058a8280 R08: dead000000000122 R09: 1bd5a00000000024
    [   36.343140][  T370] R10: fffffbfff2940329 R11: fffffbfff2940329 R12: 0000000000000000
    [   36.343383][  T370] R13: dead000000000100 R14: ffff8881058a9580 R15: ffff8881058a9578
    [   36.343631][  T370] FS:  00007fc04b0ca780(0000) GS:ffff888184fef000(0000) knlGS:0000000000000000
    [   36.343911][  T370] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   36.344116][  T370] CR2: 0000557c02c02000 CR3: 000000010e0ba000 CR4: 0000000000750ef0
    [   36.344359][  T370] PKRU: 55555554
    [   36.344481][  T370] Call Trace:
    ...
    [   36.345054][  T370] qfq_reset_qdisc (net/sched/sch_qfq.c:357 net/sched/sch_qfq.c:1487) sch_qfq
    [   36.345222][  T370]  qdisc_reset (net/sched/sch_generic.c:1057)
    [   36.345503][  T370]  __qdisc_destroy (net/sched/sch_generic.c:1096)
    [   36.345677][  T370]  qdisc_graft (net/sched/sch_api.c:1062 net/sched/sch_api.c:1053 net/sched/sch_api.c:1159)
    [   36.346335][  T370]  tc_get_qdisc (net/sched/sch_api.c:1528 net/sched/sch_api.c:1556)
    
    Fix this by only calling qdisc_tree_reduce_backlog in peek after the
    qlen is restored.
    
    Fixes: 342debc12183 ("codel: remove sch->q.qlen check before qdisc_tree_reduce_backlog()")
    Acked-by: Jamal Hadi Salim <[email protected]>
    Signed-off-by: Victor Nogueira <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: sch_drr: annotate data-races around cl->deficit [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Tue May 19 09:46:17 2026 +0000

    net/sched: sch_drr: annotate data-races around cl->deficit
    
    [ Upstream commit c67b104fd7982162885c5e43057ca761006748e2 ]
    
    drr_dump_class_stats() runs without qdisc spinlock held.
    
    Add missing READ_ONCE()/WRITE_ONCE() annotations around cl->deficit.
    
    Fixes: edb09eb17ed8 ("net: sched: do not acquire qdisc spinlock in qdisc/class stats dump")
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: sch_fq_codel: Do not call qdisc_tree_reduce_backlog during peek before restoring qlen [+ + +]
Author: Victor Nogueira <[email protected]>
Date:   Wed Jun 10 16:28:52 2026 -0300

    net/sched: sch_fq_codel: Do not call qdisc_tree_reduce_backlog during peek before restoring qlen
    
    [ Upstream commit 097f6fc7b1ae362dd7a9444b2572162fda73b284 ]
    
    Whenever fq_codel drops packets during peek, it calls
    qdisc_tree_reduce_backlog. An issue arises because it calls
    qdisc_tree_reduce_backlog before it reincrements the qlen. If qlen drops
    to zero, but peek returns an skb, the parent's qlen_notify callback will be
    executed even though fq_codel still has 1 packet on the queue and, thus,
    will mistakenly deactivate the parent's class causing issues like a recent
    report [1] and a wild memory access in qfq:
    
    [   29.371146][  T360] Oops: general protection fault, probably for non-canonical address 0xfbd59c0000000024: 0000 [#1] SMP KASAN NOPTI
    [   29.371666][  T360] KASAN: maybe wild-memory-access in range [0xdead000000000120-0xdead000000000127]
    [   29.371987][  T360] CPU: 6 UID: 0 PID: 360 Comm: tc Not tainted 7.1.0-rc5-00285-gc530e5b2dbc6-dirty #82 PREEMPT(full)
    [   29.372384][  T360] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
    [   29.372620][  T360] RIP: 0010:qfq_deactivate_agg (include/linux/list.h:1029 (discriminator 2) include/linux/list.h:1043 (discriminator 2) net/sched/sch_qfq.c:1369 (discriminator 2) net/sched/sch_qfq.c:1395 (discriminator 2)) sch_qfq
    [   29.373544][  T360] RSP: 0018:ffff888102417370 EFLAGS: 00010216
    [   29.373800][  T360] RAX: 0000000000000000 RBX: ffff88811224d568 RCX: dffffc0000000000
    [   29.374079][  T360] RDX: 1ffff11021fe1543 RSI: ffff88810ff0aa00 RDI: dffffc0000000000
    [   29.374368][  T360] RBP: ffff88811224c280 R08: dead000000000122 R09: 1bd5a00000000024
    [   29.374649][  T360] R10: fffffbfff7940329 R11: fffffbfff7940329 R12: 0000000000000000
    [   29.374926][  T360] R13: dead000000000100 R14: ffff88811224d580 R15: ffff88811224d578
    [   29.375207][  T360] FS:  00007f5b794e5780(0000) GS:ffff88815d1e9000(0000) knlGS:0000000000000000
    [   29.375545][  T360] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   29.375823][  T360] CR2: 000055ffb091f000 CR3: 000000010a305000 CR4: 0000000000750ef0
    [   29.376103][  T360] PKRU: 55555554
    [   29.376258][  T360] Call Trace:
    [   29.376401][  T360]  <TASK>
    ...
    [   29.376885][  T360] qfq_reset_qdisc (net/sched/sch_qfq.c:357 net/sched/sch_qfq.c:1487) sch_qfq
    [   29.377074][  T360]  qdisc_reset (net/sched/sch_generic.c:1057)
    [   29.377414][  T360]  __qdisc_destroy (net/sched/sch_generic.c:1096)
    [   29.377600][  T360]  qdisc_graft (net/sched/sch_api.c:1062 net/sched/sch_api.c:1053 net/sched/sch_api.c:1159)
    [   29.378593][  T360]  tc_get_qdisc (net/sched/sch_api.c:1528 net/sched/sch_api.c:1556)
    
    Fix this by only calling qdisc_tree_reduce_backlog in peek after the
    qlen is restored.
    
    [1] http://lore.kernel.org/netdev/CAN2cbVe79oj0O9==m4+4x3v+O+qzRagA=2=wkrp9i9=CqYvyZA@mail.gmail.com/
    
    Fixes: 342debc12183 ("codel: remove sch->q.qlen check before qdisc_tree_reduce_backlog()")
    Reported-by: Anirudh Gupta <[email protected]>
    Closes: https://lore.kernel.org/netdev/CAN2cbVe79oj0O9==m4+4x3v+O+qzRagA=2=wkrp9i9=CqYvyZA@mail.gmail.com/
    Tested-by: Anirudh Gupta <[email protected]>
    Acked-by: Jamal Hadi Salim <[email protected]>
    Signed-off-by: Victor Nogueira <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: sch_hfsc: annotate data-races in hfsc_dump_class_stats() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Wed May 13 08:08:53 2026 +0000

    net/sched: sch_hfsc: annotate data-races in hfsc_dump_class_stats()
    
    [ Upstream commit e300c7d470ad2726d6abf7d11b31b5d9912d9cf0 ]
    
    hfsc_dump_class_stats() runs without qdisc spinlock being held.
    
    Add READ_ONCE()/WRITE_ONCE() annotations around:
    
    - cl->level
    - cl->cl_vtperiod
    - cl->cl_total
    - cl->cl_cumul
    
    Fixes: edb09eb17ed8 ("net: sched: do not acquire qdisc spinlock in qdisc/class stats dump")
    Signed-off-by: Eric Dumazet <[email protected]>
    Reviewed-by: Toke Høiland-Jørgensen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: sch_hfsc: Don't make class passive twice [+ + +]
Author: Victor Nogueira <[email protected]>
Date:   Wed Jun 10 10:28:24 2026 -0300

    net/sched: sch_hfsc: Don't make class passive twice
    
    [ Upstream commit 90b662ea25f5e83bb3b8ccec5b93ced810b92fb8 ]
    
    update_vf() is called from two places for the same class during a single
    dequeue when the class's child qdisc (e.g. codel/fq_codel) drops its last
    packets while dequeuing:
    
    1. The child calls qdisc_tree_reduce_backlog(), which, now that the child
       is empty, invokes hfsc_qlen_notify() -> update_vf(cl, 0, 0) and turns
       the class passive (cl_nactive is decremented up the hierarchy).
    
    2. hfsc_dequeue() then calls update_vf(cl, qdisc_pkt_len(skb), cur_time)
       to charge the dequeued bytes.
    
    On the second call the class is already passive, but its child qdisc is
    still empty, so update_vf() arms go_passive again:
    
          if (cl->qdisc->q.qlen == 0 && cl->cl_flags & HFSC_FSC)
                  go_passive = 1;
    
    The leaf is then skipped by the cl_nactive == 0 check inside the loop,
    which does not clear go_passive, so the stale go_passive propagates to the
    parent and decrements its cl_nactive a second time. A parent that still
    has other active children is driven to cl_nactive == 0 and removed from
    the vttree, even though those siblings are still backlogged. They are
    never dequeued again and the qdisc stalls.
    
    Fix this by only arming go_passive when the class is actually active, so an
    already-passive class no longer triggers a second passive transition. The
    byte accounting (cl->cl_total += len) still runs for every ancestor, so
    dequeued bytes continue to be counted exactly once.
    
    Fixes: 51eb3b65544c ("sch_hfsc: make hfsc_qlen_notify() idempotent")
    Reported-by: Anirudh Gupta <[email protected]>
    Closes: https://lore.kernel.org/netdev/CAN2cbVe79oj0O9==m4+4x3v+O+qzRagA=2=wkrp9i9=CqYvyZA@mail.gmail.com/
    Tested-by: Anirudh Gupta <[email protected]>
    Acked-by: Jamal Hadi Salim <[email protected]>
    Signed-off-by: Victor Nogueira <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: sch_htb: annotate data-races (I) [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu May 14 09:59:33 2026 +0000

    net/sched: sch_htb: annotate data-races (I)
    
    [ Upstream commit e54c33503bf7cebb1c1790251ce90f1252678081 ]
    
    htb_dump() runs without holding qdisc spinlock.
    
    Add missing READ_ONCE()/WRITE_ONCE() annotations around
    q->overlimits and q->direct_pkts.
    
    Fixes: edb09eb17ed8 ("net: sched: do not acquire qdisc spinlock in qdisc/class stats dump")
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: sch_multiq: Replace direct dequeue call with peek and qdisc_dequeue_peeked [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Thu Jun 25 04:51:20 2026 -0500

    net/sched: sch_multiq: Replace direct dequeue call with peek and qdisc_dequeue_peeked
    
    commit 54f6b0c843e228d499eb4b6bbb89df68cad9ad5d upstream.
    
    multiq_dequeue() takes a packet from a band's child with a direct
    ->dequeue() call after multiq_peek() peeked it. When the child is
    non-work-conserving the peek stashes the skb in the child's gso_skb, so
    the direct dequeue returns a different skb and orphans the stash,
    desyncing the child's qlen/backlog. With a qfq child reached through a
    peeking parent (e.g. tbf) this re-enters the child on an emptied list and
    dereferences NULL, panicking the kernel from softirq on ordinary egress.
    
    Take the packet through qdisc_dequeue_peeked(), as sch_prio already does
    and as sch_red and sch_sfb were just fixed to do. The helper is a no-op
    when the child has no stash, so a work-conserving child is unaffected.
    
    Fixes: 77be155cba4e ("pkt_sched: Add peek emulation for non-work-conserving qdiscs.")
    Cc: [email protected]
    Signed-off-by: Bryam Vargas <[email protected]>
    Reviewed-by: Victor Nogueira <[email protected]>
    Acked-by: Jamal Hadi Salim <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net/smc: fix UAF in smc_cdc_rx_handler() by pinning the socket [+ + +]
Author: Xiang Mei <[email protected]>
Date:   Tue Jun 30 11:32:27 2026 -0700

    net/smc: fix UAF in smc_cdc_rx_handler() by pinning the socket
    
    [ Upstream commit 9d160b35cc34a2ba8229d07651468a7848325135 ]
    
    smc_cdc_rx_handler() looks up the connection by token under the link
    group's conns_lock, drops the lock, and then dereferences conn and the
    smc_sock derived from it, ending in sock_hold(&smc->sk) inside
    smc_cdc_msg_recv(). No reference is held across the lock release.
    
    The only reference pinning the socket while the connection is
    discoverable in the link group is taken in smc_lgr_register_conn()
    (sock_hold) and dropped in __smc_lgr_unregister_conn() (sock_put), both
    under conns_lock. Once the handler drops conns_lock, a concurrent
    close() -> smc_release() -> smc_conn_free() -> smc_lgr_unregister_conn()
    can drop that reference and free the smc_sock, so the handler's later
    sock_hold() runs on freed memory:
    
      WARNING: lib/refcount.c:25 at refcount_warn_saturate
      Workqueue: rxe_wq do_work
       refcount_warn_saturate (lib/refcount.c:25)
       smc_cdc_msg_recv (net/smc/smc_cdc.c:430)
       smc_cdc_rx_handler (net/smc/smc_cdc.c:502)
       smc_wr_rx_tasklet_fn (net/smc/smc_wr.c:445)
       tasklet_action_common (kernel/softirq.c:938)
       handle_softirqs (kernel/softirq.c:622)
      Kernel panic - not syncing: panic_on_warn set
    
    Only SMC-R is affected. The SMC-D receive tasklet is stopped by
    tasklet_kill(&conn->rx_tsklet) in smc_conn_free() before the connection
    is unregistered, so it cannot run concurrently with the free.
    
    Take the socket reference while still holding conns_lock, so the
    registration reference can no longer be the last one, and drop it once
    the handler is done.
    
    Fixes: d7b0e37c1ac1 ("net/smc: restructure CDC message reception")
    Reported-by: Weiming Shi <[email protected]>
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: Xiang Mei <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net: af_key: initialize alg_key_len for IPComp states [+ + +]
Author: Zijing Yin <[email protected]>
Date:   Mon Jun 8 07:44:41 2026 -0700

    net: af_key: initialize alg_key_len for IPComp states
    
    commit d129c3177d7b1138fd5066fcc63a698b3ba415b0 upstream.
    
    pfkey_msg2xfrm_state() handles the IPComp (SADB_X_SATYPE_IPCOMP) case by
    allocating x->calg and copying only the algorithm name:
    
            x->calg = kmalloc_obj(*x->calg);
            if (!x->calg) {
                    err = -ENOMEM;
                    goto out;
            }
            strcpy(x->calg->alg_name, a->name);
            x->props.calgo = sa->sadb_sa_encrypt;
    
    Unlike the authentication (x->aalg) and encryption (x->ealg) branches of
    the same function, the compression branch never initializes
    calg->alg_key_len.  IPComp carries no key and the allocation only
    reserves sizeof(struct xfrm_algo) (i.e. no room for a key), so the field
    is left containing uninitialized slab data.
    
    calg->alg_key_len is later used as a length by xfrm_algo_clone() when an
    IPComp state is cloned during XFRM_MSG_MIGRATE:
    
            xfrm_state_migrate()
              xfrm_state_clone_and_setup()
                x->calg = xfrm_algo_clone(orig->calg);
                  kmemdup(orig, xfrm_alg_len(orig));
    
    where xfrm_alg_len() returns sizeof(*alg) + (alg_key_len + 7) / 8.  With
    a non-zero garbage alg_key_len, kmemdup() reads past the end of the
    68-byte calg object.  Adding an IPComp SA via PF_KEY and then migrating
    it triggers (net-next, KASAN, init_on_alloc=0):
    
      BUG: KASAN: slab-out-of-bounds in kmemdup_noprof+0x44/0x60
      Read of size 4164 at addr ff11000025a74980 by task diag2/9287
      CPU: 3 UID: 0 PID: 9287 Comm: diag2 7.1.0-rc6-g903db046d557 #1
      Call Trace:
       <TASK>
       dump_stack_lvl+0x10e/0x1f0
       print_report+0xf7/0x600
       kasan_report+0xe4/0x120
       kasan_check_range+0x105/0x1b0
       __asan_memcpy+0x23/0x60
       kmemdup_noprof+0x44/0x60
       xfrm_state_migrate+0x70a/0x1da0
       xfrm_migrate+0x753/0x18a0
       xfrm_do_migrate+0xb47/0xf10
       xfrm_user_rcv_msg+0x411/0xb50
       netlink_rcv_skb+0x158/0x420
       xfrm_netlink_rcv+0x71/0x90
       netlink_unicast+0x584/0x850
       netlink_sendmsg+0x8b0/0xdc0
       ____sys_sendmsg+0x9f7/0xb90
       ___sys_sendmsg+0x134/0x1d0
       __sys_sendmsg+0x16d/0x220
       do_syscall_64+0x116/0x7d0
       entry_SYSCALL_64_after_hwframe+0x77/0x7f
       </TASK>
    
      Allocated by task 9287:
       kasan_save_stack+0x33/0x60
       kasan_save_track+0x14/0x30
       __kasan_kmalloc+0xaa/0xb0
       pfkey_add+0x2652/0x2ea0
       pfkey_process+0x6d0/0x830
       pfkey_sendmsg+0x42c/0x850
       __sys_sendto+0x461/0x4b0
       __x64_sys_sendto+0xe0/0x1c0
       do_syscall_64+0x116/0x7d0
       entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
      The buggy address belongs to the object at ff11000025a74980
       which belongs to the cache kmalloc-96 of size 96
      The buggy address is located 0 bytes inside of
       allocated 68-byte region [ff11000025a74980, ff11000025a749c4)
    
    Depending on the uninitialized value the same field can instead request
    an oversized kmemdup() allocation and make the migration clone fail.
    
    The XFRM netlink path is not affected: verify_one_alg() rejects an
    XFRMA_ALG_COMP attribute shorter than xfrm_alg_len(), so a calg added via
    XFRM_MSG_NEWSA is always self-consistent.
    
    Initialize calg->alg_key_len to 0, matching the aalg/ealg branches.
    
    Fixes: 80c9abaabf42 ("[XFRM]: Extension for dynamic update of endpoint address(es)")
    Cc: [email protected]
    Signed-off-by: Zijing Yin <[email protected]>
    Reviewed-by: Sabrina Dubroca <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: atm: reject out-of-range traffic classes in QoS validation [+ + +]
Author: Zhengchuan Liang <[email protected]>
Date:   Tue Jun 9 16:34:37 2026 +0800

    net: atm: reject out-of-range traffic classes in QoS validation
    
    commit cdf19f380e46192e7084be559638aab1f6ed86a2 upstream.
    
    Reject ATM traffic classes above ATM_ANYCLASS in check_tp().
    SO_ATMQOS stores the supplied QoS after check_qos() succeeds, so
    accepting larger values leaves invalid traffic_class values in
    vcc->qos.
    
    That bad state later reaches pvc_info(), which indexes class_name[]
    with vcc->qos.{rx,tp}.traffic_class. Values above ATM_ANYCLASS cause
    an out-of-bounds read when /proc/net/atm/pvc is read.
    
    Tighten the existing QoS validation so invalid traffic_class values
    are rejected at the point where user supplied QoS is accepted.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Reported-by: Yuan Tan <[email protected]>
    Reported-by: Xin Liu <[email protected]>
    Signed-off-by: Zhengchuan Liang <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/58f02c6f73d9818fd5d2022e1116759fdde6116b.1780965530.git.zcliangcn@gmail.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: Drop the lock in skb_may_tx_timestamp() [+ + +]
Author: Sebastian Andrzej Siewior <[email protected]>
Date:   Mon Jul 13 10:50:17 2026 +0800

    net: Drop the lock in skb_may_tx_timestamp()
    
    commit 983512f3a87fd8dc4c94dfa6b596b6e57df5aad7 upstream.
    
    skb_may_tx_timestamp() may acquire sock::sk_callback_lock. The lock must
    not be taken in IRQ context, only softirq is okay. A few drivers receive
    the timestamp via a dedicated interrupt and complete the TX timestamp
    from that handler. This will lead to a deadlock if the lock is already
    write-locked on the same CPU.
    
    Taking the lock can be avoided. The socket (pointed by the skb) will
    remain valid until the skb is released. The ->sk_socket and ->file
    member will be set to NULL once the user closes the socket which may
    happen before the timestamp arrives.
    If we happen to observe the pointer while the socket is closing but
    before the pointer is set to NULL then we may use it because both
    pointer (and the file's cred member) are RCU freed.
    
    Drop the lock. Use READ_ONCE() to obtain the individual pointer. Add a
    matching WRITE_ONCE() where the pointer are cleared.
    
    Link: https://lore.kernel.org/all/[email protected]
    Fixes: b245be1f4db1a ("net-timestamp: no-payload only sysctl")
    Signed-off-by: Sebastian Andrzej Siewior <[email protected]>
    Reviewed-by: Willem de Bruijn <[email protected]>
    Reviewed-by: Jason Xing <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    [ adapted sk_set_socket() in include/net/sock.h to fix the conflict from
     not having commit 5d6b58c932ec ("net: lockless sock_i_ino()") and the
     additional previous changes required by it.
     It comes down to just now having the lines of
        if (sock) {
                WRITE_ONCE(sk->sk_uid, SOCK_INODE(sock)->i_uid);
                WRITE_ONCE(sk->sk_ino, SOCK_INODE(sock)->i_ino);
        }
     below the changed line. ]
    Signed-off-by: Philo Lu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: sja1105: round up PTP perout pin duration [+ + +]
Author: Aleksandrova Alyona <[email protected]>
Date:   Thu Jun 18 14:05:08 2026 +0300

    net: dsa: sja1105: round up PTP perout pin duration
    
    [ Upstream commit aee5836273b07b439fb245fb43930664d8b78518 ]
    
    pin_duration is converted from the user-provided period to SJA1105
    clock ticks and is later passed as the cycle_time argument to
    future_base_time().
    
    Very small period values may become zero after the conversion,
    which can lead to a division by zero in future_base_time().
    
    Round zero pin_duration up to 1 tick so that the smallest unsupported
    periods use the minimum non-zero hardware duration instead of passing
    zero to future_base_time().
    
    Fixes: 747e5eb31d59 ("net: dsa: sja1105: configure the PTP_CLK pin as EXT_TS or PER_OUT")
    Signed-off-by: Aleksandrova Alyona <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: ena: clean up XDP TX queues when regular TX setup fails [+ + +]
Author: Dawei Feng <[email protected]>
Date:   Tue Jun 16 22:24:24 2026 +0800

    net: ena: clean up XDP TX queues when regular TX setup fails
    
    commit 1bd6676254b4ab6acd44b662b5e92822c036463a upstream.
    
    create_queues_with_size_backoff() creates XDP TX queues before setting
    up the regular TX path. If the subsequent allocation or creation of
    regular TX queues fails, the error handling paths omit the teardown of the
    XDP TX queues, leading to a resource leak.
    
    Fix this by explicitly destroying the XDP TX queue subset at the two
    missing failure points.
    
    The bug was first flagged by an experimental analysis tool we are
    developing for kernel memory-management bugs while analyzing
    v6.13-rc1. The tool is still under development and is not yet publicly
    available. Manual inspection confirms that the bug is still
    present in v7.1-rc7.
    
    An x86_64 allyesconfig build showed no new warnings. As we do not have
    an ENA device to test with, no runtime testing was able to be performed.
    
    Fixes: 548c4940b9f1 ("net: ena: Implement XDP_TX action")
    Cc: [email protected]
    Signed-off-by: Dawei Feng <[email protected]>
    Reviewed-by: Arthur Kiyanovski <[email protected]>
    Tested-by: Arthur Kiyanovski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: ethernet: rmnet: Always subtract MAP header [+ + +]
Author: Kristian Evensen <[email protected]>
Date:   Wed Jun 9 16:32:49 2021 +0200

    net: ethernet: rmnet: Always subtract MAP header
    
    commit 8b8701d0b4925807a6d4dc4699cb80a1e16218ad upstream.
    
    Commit e1d9a90a9bfd ("net: ethernet: rmnet: Support for ingress MAPv5
    checksum offload") broke ingress handling for devices where
    RMNET_FLAGS_INGRESS_MAP_CKSUMV5 or RMNET_FLAGS_INGRESS_MAP_CKSUMV4 are
    not set. Unless either of these flags are set, the MAP header is not
    removed. This commit restores the original logic by ensuring that the
    MAP header is removed for all MAP packets.
    
    Fixes: e1d9a90a9bfd ("net: ethernet: rmnet: Support for ingress MAPv5 checksum offload")
    Signed-off-by: Kristian Evensen <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: ethernet: rmnet: Support for ingress MAPv5 checksum offload [+ + +]
Author: Sharath Chandra Vurukala <[email protected]>
Date:   Wed Jun 2 00:58:35 2021 +0530

    net: ethernet: rmnet: Support for ingress MAPv5 checksum offload
    
    [ Upstream commit e1d9a90a9bfdb0735062d3adb16b07314b4b7b01 ]
    
    Adding support for processing of MAPv5 downlink packets.
    It involves parsing the Mapv5 packet and checking the csum header
    to know whether the hardware has validated the checksum and is
    valid or not.
    
    Based on the checksum valid bit the corresponding stats are
    incremented and skb->ip_summed is marked either CHECKSUM_UNNECESSARY
    or left as CHEKSUM_NONE to let network stack revalidate the checksum
    and update the respective snmp stats.
    
    Current MAPV1 header has been modified, the reserved field in the
    Mapv1 header is now used for next header indication.
    
    Signed-off-by: Sharath Chandra Vurukala <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: f0f1887a9e30 ("net: qualcomm: rmnet: validate MAP frame length before ingress parsing")
    Signed-off-by: Sasha Levin <[email protected]>

net: fib_rules: Don't dump dying fib_rule in fib_rules_dump(). [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Wed Jun 10 06:17:19 2026 +0000

    net: fib_rules: Don't dump dying fib_rule in fib_rules_dump().
    
    [ Upstream commit 2821e85c058f81c9948a2fb1a634f7b47457d51c ]
    
    rocker_router_fib_event() calls fib_rule_get() during RCU dump.
    
    If the fib_rule is dying, refcount_inc() will complain about it.
    
    Let's call refcount_inc_not_zero() in fib_rules_dump().
    
    Fixes: 5d7bfd141924 ("ipv4: fib_rules: Dump FIB rules when registering FIB notifier")
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Reviewed-by: David Ahern <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: ife: require ETH_HLEN to be pullable in ife_decode() [+ + +]
Author: Yong Wang <[email protected]>
Date:   Thu Jun 11 02:37:43 2026 +0800

    net: ife: require ETH_HLEN to be pullable in ife_decode()
    
    commit 9406f6012b7343661efb516a11c62d4db2b62f75 upstream.
    
    ife decode may return after making only the outer IFE header and
    metadata pullable. The caller then passes the decapsulated packet to
    eth_type_trans(), which expects the inner Ethernet header to be
    accessible from the linear data area.
    
    With a malformed IFE frame, the inner Ethernet header may still be
    shorter than ETH_HLEN in the linear area, which can lead to a crash in
    the original code.
    
    Fix this by extending the pull check in ife_decode() so that the inner
    Ethernet header is also guaranteed to be pullable before returning.
    
    Fixes: ef6980b6becb ("introduce IFE action")
    Cc: [email protected]
    Reported-by: Yuan Tan <[email protected]>
    Reported-by: Xin Liu <[email protected]>
    Signed-off-by: Yong Wang <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: ip6_gre: require CAP_NET_ADMIN in the device netns for changelink [+ + +]
Author: Maoyi Xie <[email protected]>
Date:   Fri Jun 12 16:59:39 2026 +0800

    net: ip6_gre: require CAP_NET_ADMIN in the device netns for changelink
    
    commit f00a50876d2818bd6dc86fa98b3ef360884c53c8 upstream.
    
    ip6gre_changelink() and ip6erspan_changelink() operate on at most two
    netns, dev_net(dev) and the tunnel link netns t->net. They differ once
    the device is created in or moved to a netns other than the one the
    request runs in. The rtnl changelink path checks CAP_NET_ADMIN only
    against dev_net(dev), so a caller privileged there but not in t->net can
    rewrite a tunnel that lives in t->net.
    
    Gate both ops on rtnl_dev_link_net_capable() at their top, before any
    attribute is parsed.
    
    Reported-by: Xiao Liang <[email protected]>
    Closes: https://lore.kernel.org/netdev/CABAhCOSzP1vaThGV35_VnsRCb=87_CPjPVsTHbq905k8A+BuUg@mail.gmail.com/
    Fixes: 690afc165bb3 ("net: ip6_gre: fix moving ip6gre between namespaces")
    Cc: [email protected]
    Signed-off-by: Maoyi Xie <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: ip6_vti: require CAP_NET_ADMIN in the device netns for changelink [+ + +]
Author: Maoyi Xie <[email protected]>
Date:   Fri Jun 12 16:59:40 2026 +0800

    net: ip6_vti: require CAP_NET_ADMIN in the device netns for changelink
    
    commit e2ac3b242c37dff323a964962e43854f4b1a2b79 upstream.
    
    vti6_changelink() operates on at most two netns, dev_net(dev) and the
    tunnel link netns t->net. They differ once the device is created in or
    moved to a netns other than the one the request runs in. The rtnl
    changelink path checks CAP_NET_ADMIN only against dev_net(dev), so a
    caller privileged there but not in t->net can rewrite a tunnel that
    lives in t->net.
    
    Gate vti6_changelink() on rtnl_dev_link_net_capable() at its top,
    before any attribute is parsed.
    
    Reported-by: Xiao Liang <[email protected]>
    Closes: https://lore.kernel.org/netdev/CABAhCOSzP1vaThGV35_VnsRCb=87_CPjPVsTHbq905k8A+BuUg@mail.gmail.com/
    Fixes: 61220ab34948 ("vti6: Enable namespace changing")
    Cc: [email protected]
    Signed-off-by: Maoyi Xie <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: ip_gre: require CAP_NET_ADMIN in the device netns for changelink [+ + +]
Author: Maoyi Xie <[email protected]>
Date:   Thu Jul 2 11:36:22 2026 -0400

    net: ip_gre: require CAP_NET_ADMIN in the device netns for changelink
    
    [ Upstream commit 8165f7ff57d9667d2bb477ef6af83ede7fed4ad7 ]
    
    A tunnel changelink() operates on at most two netns, dev_net(dev) and
    the tunnel link netns t->net. They differ once the device is created in
    or moved to a netns other than the one the request runs in. The rtnl
    changelink path checks CAP_NET_ADMIN only against dev_net(dev), so a
    caller privileged there but not in t->net can rewrite a tunnel that
    lives in t->net.
    
    Add rtnl_dev_link_net_capable() next to rtnl_get_net_ns_capable() in
    net/core/rtnetlink.c. It requires CAP_NET_ADMIN in the link netns and is
    skipped when the link netns is dev_net(dev), where the rtnl path already
    checked it. The other patches in this series use the same helper.
    
    Gate ipgre_changelink() and erspan_changelink() with it, at the top of
    the op before any attribute is parsed, because the parsers update live
    tunnel fields first. ipgre_netlink_parms() sets t->collect_md before
    ip_tunnel_changelink() runs.
    
    Commit 8b484efd5cb4 ("ip6: vti: Use ip6_tnl.net in
    vti6_siocdevprivate().") added the same check on the ioctl path. This
    adds it on RTM_NEWLINK.
    
    Reported-by: Xiao Liang <[email protected]>
    Closes: https://lore.kernel.org/netdev/CABAhCOSzP1vaThGV35_VnsRCb=87_CPjPVsTHbq905k8A+BuUg@mail.gmail.com/
    Fixes: b57708add314 ("gre: add x-netns support")
    Cc: [email protected]
    Signed-off-by: Maoyi Xie <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: ip_vti: require CAP_NET_ADMIN in the device netns for changelink [+ + +]
Author: Maoyi Xie <[email protected]>
Date:   Fri Jun 12 16:59:37 2026 +0800

    net: ip_vti: require CAP_NET_ADMIN in the device netns for changelink
    
    commit 95cceadbfd52d7239bd730afdda0655287d77425 upstream.
    
    vti_changelink() operates on at most two netns, dev_net(dev) and the
    tunnel link netns t->net. They differ once the device is created in or
    moved to a netns other than the one the request runs in. The rtnl
    changelink path checks CAP_NET_ADMIN only against dev_net(dev), so a
    caller privileged there but not in t->net can rewrite a tunnel that
    lives in t->net.
    
    Gate vti_changelink() on rtnl_dev_link_net_capable() at its top,
    before any attribute is parsed.
    
    Reported-by: Xiao Liang <[email protected]>
    Closes: https://lore.kernel.org/netdev/CABAhCOSzP1vaThGV35_VnsRCb=87_CPjPVsTHbq905k8A+BuUg@mail.gmail.com/
    Fixes: 895de9a3488a ("vti4: Enable namespace changing")
    Cc: [email protected]
    Signed-off-by: Maoyi Xie <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: ipv4: bound TCP reordering sysctl writes and MTU probe sizes [+ + +]
Author: Wyatt Feng <[email protected]>
Date:   Mon Jun 15 18:31:18 2026 +0800

    net: ipv4: bound TCP reordering sysctl writes and MTU probe sizes
    
    commit efb8763d7bbb40cff4cc55a6b62c3095a038149c upstream.
    
    Reject invalid `net.ipv4.tcp_reordering` values before they reach TCP
    socket state. The sysctl is stored as an `int` but copied into the
    `u32` `tp->reordering` field for new sockets, so negative writes wrap
    to large values.
    
    With `tcp_mtu_probing=2`, the wrapped value can overflow the
    `tcp_mtu_probe()` size calculation and drive the MTU probing path into
    an out-of-bounds read. Route `tcp_reordering` writes through
    `proc_dointvec_minmax()` and require it to be at least 1. Also require
    `tcp_max_reordering` to be at least 1 so the configured maximum cannot
    become negative either.
    
    When registering the table for a non-init network namespace, relocate
    `extra2` pointers that refer into `init_net.ipv4` so the
    `tcp_reordering` upper bound follows that namespace's
    `tcp_max_reordering`.
    
    Harden `tcp_mtu_probe()` itself by computing `size_needed` as `u64`.
    This keeps the send queue and window checks from being bypassed through
    signed integer overflow.
    
    Fixes: 91cc17c0e5e5 ("[TCP]: MTUprobe: receiver window & data available checks fixed")
    Cc: [email protected]
    Reported-by: Yuan Tan <[email protected]>
    Reported-by: Zhengchuan Liang <[email protected]>
    Reported-by: Xin Liu <[email protected]>
    Suggested-by: Eric Dumazet <[email protected]>
    Signed-off-by: Wyatt Feng <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/1a5b7e1ef4d70fbad8c8ee0b82d8405f3c964a3d.1781395200.git.bronzed_45_vested@icloud.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: liquidio: fix BAR resource leak on PF number failure [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Wed Jun 24 14:40:13 2026 +0800

    net: liquidio: fix BAR resource leak on PF number failure
    
    commit c63ee62a3c4ac1a1542f4c1a4b87e2f41df5a496 upstream.
    
    If cn23xx_get_pf_num() fails, the function returns without
    unmapping either BAR. Unmap both BARs before returning from
    the error path.
    
    Found by manual code review.
    
    Fixes: 0c45d7fe12c7 ("liquidio: fix use of pf in pass-through mode in a virtual machine")
    Cc: [email protected]
    Signed-off-by: Haoxiang Li <[email protected]>
    Reviewed-by: Larysa Zaremba <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: mld: fix reference count leak in mld_{query | report}_work() [+ + +]
Author: Taehee Yoo <[email protected]>
Date:   Fri Jul 22 17:06:35 2022 +0000

    net: mld: fix reference count leak in mld_{query | report}_work()
    
    commit 3e7d18b9dca388940a19cae30bfc1f76dccd8c28 upstream.
    
    mld_{query | report}_work() processes queued events.
    If there are too many events in the queue, it re-queue a work.
    And then, it returns without in6_dev_put().
    But if queuing is failed, it should call in6_dev_put(), but it doesn't.
    So, a reference count leak would occur.
    
    THREAD0                         THREAD1
    mld_report_work()
                                    spin_lock_bh()
                                    if (!mod_delayed_work())
                                            in6_dev_hold();
                                    spin_unlock_bh()
            spin_lock_bh()
            schedule_delayed_work()
            spin_unlock_bh()
    
    Script to reproduce(by Hangbin Liu):
       ip netns add ns1
       ip netns add ns2
       ip netns exec ns1 sysctl -w net.ipv6.conf.all.force_mld_version=1
       ip netns exec ns2 sysctl -w net.ipv6.conf.all.force_mld_version=1
    
       ip -n ns1 link add veth0 type veth peer name veth0 netns ns2
       ip -n ns1 link set veth0 up
       ip -n ns2 link set veth0 up
    
       for i in `seq 50`; do
               for j in `seq 100`; do
                       ip -n ns1 addr add 2021:${i}::${j}/64 dev veth0
                       ip -n ns2 addr add 2022:${i}::${j}/64 dev veth0
               done
       done
       modprobe -r veth
       ip -a netns del
    
    splat looks like:
     unregister_netdevice: waiting for veth0 to become free. Usage count = 2
     leaked reference.
      ipv6_add_dev+0x324/0xec0
      addrconf_notify+0x481/0xd10
      raw_notifier_call_chain+0xe3/0x120
      call_netdevice_notifiers+0x106/0x160
      register_netdevice+0x114c/0x16b0
      veth_newlink+0x48b/0xa50 [veth]
      rtnl_newlink+0x11a2/0x1a40
      rtnetlink_rcv_msg+0x63f/0xc00
      netlink_rcv_skb+0x1df/0x3e0
      netlink_unicast+0x5de/0x850
      netlink_sendmsg+0x6c9/0xa90
      ____sys_sendmsg+0x76a/0x780
      __sys_sendmsg+0x27c/0x340
      do_syscall_64+0x43/0x90
      entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    Tested-by: Hangbin Liu <[email protected]>
    Fixes: f185de28d9ae ("mld: add new workqueues for process mld events")
    Signed-off-by: Taehee Yoo <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: mvneta: re-enable percpu interrupt on resume [+ + +]
Author: Yun Zhou <[email protected]>
Date:   Mon Jun 22 15:43:50 2026 +0800

    net: mvneta: re-enable percpu interrupt on resume
    
    [ Upstream commit fd398d6480987e4c84fff0aaab6b9d6642a93343 ]
    
    On Marvell MPIC platforms (Armada 370/XP/38x), mvneta uses a percpu
    IRQ disable/enable scheme for NAPI: the ISR (mvneta_percpu_isr) calls
    disable_percpu_irq() to mask the MPIC per-CPU interrupt and schedules
    NAPI poll, which calls enable_percpu_irq() on completion to unmask.
    
    If suspend occurs while NAPI poll is pending (between
    disable_percpu_irq in the ISR and enable_percpu_irq in poll
    completion), the interrupt is never re-enabled:
    
      1. mvneta_percpu_isr: disable_percpu_irq() + napi_schedule()
         => MPIC masked, percpu_enabled cpumask bit cleared
      2. NAPI poll does not complete before suspend proceeds
         (on PREEMPT_RT this is highly likely since softirqs run in
         ksoftirqd which gets frozen; on non-RT it can happen when
         softirq processing is deferred to ksoftirqd)
      3. mvneta_stop_dev => napi_disable(): cancels the pending poll
         without executing the completion path
      4. suspend_device_irqs => IRQCHIP_MASK_ON_SUSPEND: masks MPIC
         (already masked, but records IRQS_SUSPENDED)
      5. Resume: mpic_resume checks irq_percpu_is_enabled() => false
         (bit was cleared in step 1) => skips unmask
      6. mvneta_start_dev only restores device-level INTR_NEW_MASK,
         does not touch the MPIC per-CPU mask
    
    Result: MPIC per-CPU interrupt stays masked permanently. The NIC
    generates interrupts (INTR_NEW_CAUSE != 0) but the CPU never
    receives them, causing complete loss of network connectivity.
    
    Fix by calling on_each_cpu(mvneta_percpu_enable) in the resume path
    to unconditionally unmask the MPIC per-CPU interrupt regardless of
    pre-suspend state.
    
    Fixes: 12bb03b436da ("net: mvneta: Handle per-cpu interrupts")
    Signed-off-by: Yun Zhou <[email protected]>
    Reviewed-by: Sebastian Andrzej Siewior <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: psample: fix info leak in PSAMPLE_ATTR_DATA [+ + +]
Author: Jakub Kicinski <[email protected]>
Date:   Mon Jun 15 17:30:46 2026 -0700

    net: psample: fix info leak in PSAMPLE_ATTR_DATA
    
    [ Upstream commit aedd02af1f8b0bceb7f42f5a21c41634ca9ed390 ]
    
    psample open codes nla_put() presumably to avoid wiping
    the data with 0s just to override it with packet data.
    This open coding is missing clearing the pad, however,
    each netlink attr is padded to 4B and data_len may
    not be divisible by 4B.
    
    Fixes: 6ae0a6286171 ("net: Introduce psample, a new genetlink channel for packet sampling")
    Reported-by: Weiming Shi <[email protected]>
    Reviewed-by: Jiri Pirko <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: qrtr: fix 32-bit integer overflow in qrtr_endpoint_post() [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Thu Jun 11 08:54:55 2026 -0400

    net: qrtr: fix 32-bit integer overflow in qrtr_endpoint_post()
    
    commit 20054869770c7df060c5ecee3e8bbf9029c47191 upstream.
    
    qrtr_endpoint_post() validates an incoming packet with
    
            if (!size || len != ALIGN(size, 4) + hdrlen)
                    goto err;
    
    where size comes from the wire. On 32-bit, size_t is 32 bits and
    ALIGN(size, 4) wraps to 0 for size >= 0xfffffffd, so the check
    passes and skb_put_data(skb, data + hdrlen, size) writes past the
    hdrlen-sized skb and oopses the kernel. 64-bit is unaffected.
    
    This is the 32-bit residual of ad9d24c9429e2 ("net: qrtr: fix OOB
    Read in qrtr_endpoint_post"), which fixed only the 64-bit case.
    
    Reject any size that cannot fit the buffer before the ALIGN.
    
    Fixes: ad9d24c9429e2 ("net: qrtr: fix OOB Read in qrtr_endpoint_post")
    Cc: [email protected]
    Signed-off-by: Michael Bommarito <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: qualcomm: rmnet: add tx packets aggregation [+ + +]
Author: Daniele Palmas <[email protected]>
Date:   Wed Jan 11 14:05:19 2023 +0100

    net: qualcomm: rmnet: add tx packets aggregation
    
    [ Upstream commit 64b5d1f8f2d1b3f039cfb0dd8035892015543e58 ]
    
    Add tx packets aggregation.
    
    Bidirectional TCP throughput tests through iperf with low-cat
    Thread-x based modems revelead performance issues both in tx
    and rx.
    
    The Windows driver does not show this issue: inspecting USB
    packets revealed that the only notable change is the driver
    enabling tx packets aggregation.
    
    Tx packets aggregation is by default disabled and can be enabled
    by increasing the value of ETHTOOL_A_COALESCE_TX_MAX_AGGR_FRAMES.
    
    The maximum aggregated size is by default set to a reasonably low
    value in order to support the majority of modems.
    
    This implementation is based on patches available in Code Aurora
    repositories (msm kernel) whose main authors are
    
    Subash Abhinov Kasiviswanathan <[email protected]>
    Sean Tranchetti <[email protected]>
    
    Signed-off-by: Daniele Palmas <[email protected]>
    Reviewed-by: Subash Abhinov Kasiviswanathan <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: f0f1887a9e30 ("net: qualcomm: rmnet: validate MAP frame length before ingress parsing")
    Signed-off-by: Sasha Levin <[email protected]>

net: qualcomm: rmnet: don't use C bit-fields in rmnet checksum header [+ + +]
Author: Alex Elder <[email protected]>
Date:   Mon Mar 15 16:51:51 2021 -0500

    net: qualcomm: rmnet: don't use C bit-fields in rmnet checksum header
    
    [ Upstream commit 86ca860e12ec0feab7d721d3b05e60fb86613540 ]
    
    Replace the use of C bit-fields in the rmnet_map_ul_csum_header
    structure with a single two-byte (big endian) structure member,
    and use masks to encode or get values within it.  The content of
    these fields can be accessed using simple bitwise AND and OR
    operations on the (host byte order) value of the new structure
    member.
    
    Previously rmnet_map_ipv4_ul_csum_header() would update C bit-field
    values in host byte order, then forcibly fix their byte order using
    a combination of byte swap operations and types.
    
    Instead, just compute the value that needs to go into the new
    structure member and save it with a simple byte-order conversion.
    
    Make similar simplifications in rmnet_map_ipv6_ul_csum_header().
    
    Finally, in rmnet_map_checksum_uplink_packet() a set of assignments
    zeroes every field in the upload checksum header.  Replace that with
    a single memset() operation.
    
    Signed-off-by: Alex Elder <[email protected]>
    Reviewed-by: Alexander Duyck <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: f0f1887a9e30 ("net: qualcomm: rmnet: validate MAP frame length before ingress parsing")
    Signed-off-by: Sasha Levin <[email protected]>

net: qualcomm: rmnet: kill RMNET_MAP_GET_*() accessor macros [+ + +]
Author: Alex Elder <[email protected]>
Date:   Mon Mar 15 16:51:48 2021 -0500

    net: qualcomm: rmnet: kill RMNET_MAP_GET_*() accessor macros
    
    [ Upstream commit 9d131d044f89a808f947d49f1a1865815c610158 ]
    
    The following macros, defined in "rmnet_map.h", assume a socket
    buffer is provided as an argument without any real indication this
    is the case.
        RMNET_MAP_GET_MUX_ID()
        RMNET_MAP_GET_CD_BIT()
        RMNET_MAP_GET_PAD()
        RMNET_MAP_GET_CMD_START()
        RMNET_MAP_GET_LENGTH()
    What they hide is pretty trivial accessing of fields in a structure,
    and it's much clearer to see this if we do these accesses directly.
    
    So rather than using these accessor macros, assign a local
    variable of the map header pointer type to the socket buffer data
    pointer, and derereference that pointer variable.
    
    In "rmnet_map_data.c", use sizeof(object) rather than sizeof(type)
    in one spot.  Also, there's no need to byte swap 0; it's all zeros
    irrespective of endianness.
    
    Signed-off-by: Alex Elder <[email protected]>
    Reviewed-by: Bjorn Andersson <[email protected]>
    Reviewed-by: Alexander Duyck <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: f0f1887a9e30 ("net: qualcomm: rmnet: validate MAP frame length before ingress parsing")
    Signed-off-by: Sasha Levin <[email protected]>

net: qualcomm: rmnet: simplify some byte order logic [+ + +]
Author: Alex Elder <[email protected]>
Date:   Mon Mar 15 16:51:47 2021 -0500

    net: qualcomm: rmnet: simplify some byte order logic
    
    [ Upstream commit 50c62a111c4855510b0d8a2d8e50214172166b61 ]
    
    In rmnet_map_ipv4_ul_csum_header() and rmnet_map_ipv6_ul_csum_header()
    the offset within a packet at which checksumming should commence is
    calculated.  This calculation involves byte swapping and a forced type
    conversion that makes it hard to understand.
    
    Simplify this by computing the offset in host byte order, then
    converting the result when assigning it into the header field.
    
    Signed-off-by: Alex Elder <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: f0f1887a9e30 ("net: qualcomm: rmnet: validate MAP frame length before ingress parsing")
    Signed-off-by: Sasha Levin <[email protected]>

net: qualcomm: rmnet: use masks instead of C bit-fields [+ + +]
Author: Alex Elder <[email protected]>
Date:   Mon Mar 15 16:51:49 2021 -0500

    net: qualcomm: rmnet: use masks instead of C bit-fields
    
    [ Upstream commit 16653c16d282e768763b2e8cc78f75df8fd53992 ]
    
    The actual layout of bits defined in C bit-fields (e.g. int foo : 3)
    is implementation-defined.  Structures defined in <linux/if_rmnet.h>
    address this by specifying all bit-fields twice, to cover two
    possible layouts.
    
    I think this pattern is repetitive and noisy, and I find the whole
    notion of compiler "bitfield endianness" to be non-intuitive.
    
    Stop using C bit-fields for the command/data flag and the pad length
    fields in the rmnet_map structure, and define a single-byte flags
    field instead.  Define a mask for the single-bit "command" flag,
    and another mask for the encoded pad length.  The content of both
    fields can be accessed using a simple bitwise AND operation.
    
    Signed-off-by: Alex Elder <[email protected]>
    Reviewed-by: Bjorn Andersson <[email protected]>
    Reviewed-by: Alexander Duyck <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: f0f1887a9e30 ("net: qualcomm: rmnet: validate MAP frame length before ingress parsing")
    Signed-off-by: Sasha Levin <[email protected]>

net: qualcomm: rmnet: validate MAP frame length before ingress parsing [+ + +]
Author: Xiang Mei <[email protected]>
Date:   Tue Jun 30 10:41:09 2026 -0700

    net: qualcomm: rmnet: validate MAP frame length before ingress parsing
    
    [ Upstream commit f0f1887a9e30712a1df03e152dce6fb91344b1f3 ]
    
    When ingress deaggregation is disabled, rmnet_map_ingress_handler() passes
    the skb straight to __rmnet_map_ingress_handler(), skipping the length
    validation that rmnet_map_deaggregate() performs on the aggregated path.
    The parser then dereferences the MAP header and csum header/trailer based on
    the on-wire pkt_len without checking skb->len, so a short frame is read out
    of bounds:
    
      BUG: KASAN: slab-out-of-bounds in rmnet_map_checksum_downlink_packet
      Read of size 1 at addr ffff88801118ed00 by task exploit/147
      Call Trace:
       ...
       rmnet_map_checksum_downlink_packet (drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c:413)
       __rmnet_map_ingress_handler (drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c:96)
       rmnet_rx_handler (drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c:129)
       __netif_receive_skb_core.constprop.0 (net/core/dev.c:6089)
       netif_receive_skb (net/core/dev.c:6460)
       tun_get_user (drivers/net/tun.c:1955)
       tun_chr_write_iter (drivers/net/tun.c:2001)
       vfs_write (fs/read_write.c:688)
       ksys_write (fs/read_write.c:740)
       do_syscall_64 (arch/x86/entry/syscall_64.c:94)
       ...
    
    Factor that validation out of rmnet_map_deaggregate() into
    rmnet_map_validate_packet_len() and run it on the no-aggregation path too.
    The MAP header is bounds-checked first, since this path can receive a frame
    shorter than the header.
    
    Fixes: ceed73a2cf4a ("drivers: net: ethernet: qualcomm: rmnet: Initial implementation")
    Reported-by: Weiming Shi <[email protected]>
    Suggested-by: Subash Abhinov Kasiviswanathan <[email protected]>
    Signed-off-by: Xiang Mei <[email protected]>
    Reviewed-by: Subash Abhinov Kasiviswanathan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: sit: require CAP_NET_ADMIN in the device netns for changelink [+ + +]
Author: Maoyi Xie <[email protected]>
Date:   Thu Jun 18 15:08:17 2026 +0800

    net: sit: require CAP_NET_ADMIN in the device netns for changelink
    
    commit 27ccb68e7cccead5d8c611665a45d23032d468b3 upstream.
    
    ipip6_changelink() operates on at most two netns, dev_net(dev) and the
    tunnel link netns t->net. They differ once the device is created in or
    moved to a netns other than the one the request runs in. The rtnl
    changelink path checks CAP_NET_ADMIN only against dev_net(dev), so a
    caller privileged there but not in t->net can rewrite a tunnel that
    lives in t->net.
    
    Gate ipip6_changelink() on rtnl_dev_link_net_capable() at its top,
    before any attribute is parsed. sit was the one tunnel type not covered
    by the recent series that added this check to the other changelink()
    handlers.
    
    Fixes: 5e6700b3bf98 ("sit: add support of x-netns")
    Link: https://lore.kernel.org/netdev/[email protected]/
    Cc: [email protected]
    Signed-off-by: Maoyi Xie <[email protected]>
    Reviewed-by: Nicolas Dichtel <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: skmsg: preserve sg.copy across SG transforms [+ + +]
Author: Yiming Qian <[email protected]>
Date:   Thu Jul 2 11:26:23 2026 -0400

    net: skmsg: preserve sg.copy across SG transforms
    
    [ Upstream commit 406e8a651a7b854c41fecd5117bb282b3a6c2c6b ]
    
    The sk_msg sg.copy bitmap is part of the scatterlist entry ownership
    state. A set bit tells sk_msg_compute_data_pointers() not to expose the
    entry through writable BPF ctx->data. This protects entries backed by
    pages that are not private to the sk_msg, such as splice-backed file
    page-cache pages.
    
    Several sk_msg transform paths move, copy, split, or compact
    msg->sg.data[] entries without moving the matching sg.copy bit. This can
    make an externally backed entry arrive at a new slot with a clear copy
    bit. A later SK_MSG verdict can then expose sg_virt(sge) as writable
    ctx->data and BPF stores can modify the original page cache.
    
    Keep sg.copy synchronized with sg.data[] whenever entries are
    transferred, shifted, split, or copied into a new sk_msg. Clear the bit
    when an entry is replaced by a newly allocated private page or freed.
    This covers the BPF pull/push/pop helpers, sk_msg_shift_left/right(),
    sk_msg_xfer(), and tls_split_open_record(), including the partial tail
    entry created during TLS open-record splitting.
    
    Fixes: d3b18ad31f93 ("tls: add bpf support to sk_msg handling")
    Cc: [email protected]
    Reported-by: Yiming Qian <[email protected]>
    Reported-by: Keenan Dong <[email protected]>
    Signed-off-by: Yiming Qian <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: sungem: fix probe error cleanup [+ + +]
Author: Ruoyu Wang <[email protected]>
Date:   Tue Jun 23 10:57:59 2026 +0800

    net: sungem: fix probe error cleanup
    
    [ Upstream commit 36dea2f639249460d13f6ca66b2a9064187cd34d ]
    
    gem_init_one() calls gem_remove_one() when register_netdev() fails.
    gem_remove_one() unregisters and frees resources owned by the net_device,
    including the DMA block, MMIO mapping, PCI regions, and the net_device
    itself. gem_init_one() then falls through to its own cleanup labels and
    frees the same resources again.
    
    Keep the register_netdev() error path in gem_init_one(): clear drvdata so
    PM/remove paths do not see a half-registered device, remove the NAPI
    instance added during probe, and let the existing cleanup labels release
    the resources once.
    
    The issue was found by a local static-analysis checker for probe error
    paths. The reported path was manually inspected before sending this fix.
    
    Compile-tested with CONFIG_SUNGEM=y. Runtime testing was not performed
    because no sungem hardware is available.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Ruoyu Wang <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: usb: kalmia: bound RX frame length in kalmia_rx_fixup() [+ + +]
Author: Maoyi Xie <[email protected]>
Date:   Mon Jun 22 16:01:57 2026 +0800

    net: usb: kalmia: bound RX frame length in kalmia_rx_fixup()
    
    commit 47b6bcef6e679593d2e86e04ee72c46a4e2f7139 upstream.
    
    kalmia_rx_fixup() computes usb_packet_length = skb->len - (2 *
    KALMIA_HEADER_LENGTH) as a u16, guarded only by a pre-loop check that
    skb->len is at least KALMIA_HEADER_LENGTH, which is 6. A device can
    deliver a short bulk-IN frame with skb->len in the 6 to 11 range, or
    leave a short trailing remainder on a later loop iteration. Either case
    underflows usb_packet_length to about 65530.
    
    That bypasses the usb_packet_length < ether_packet_length truncation path.
    The device-supplied ether_packet_length, a le16 up to 65535 read from
    header_start[2], then drives a memcmp() and the following skb_trim() and
    skb_pull() past the end of the rx buffer. The rx buffer is hard_mtu * 10,
    which is 14000 bytes. That is an out of bounds read.
    
    Require both the start and end framing headers to be present before
    subtracting them, on every loop iteration.
    
    Fixes: d40261236e8e ("net/usb: Add Samsung Kalmia driver for Samsung GT-B3730")
    Cc: [email protected]
    Signed-off-by: Maoyi Xie <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: usb: lan78xx: disable VLAN filter in promiscuous mode [+ + +]
Author: Enrico Pozzobon <[email protected]>
Date:   Wed Jul 1 16:47:23 2026 +0200

    net: usb: lan78xx: disable VLAN filter in promiscuous mode
    
    [ Upstream commit 60444706aa17616efc03190d099ac347e28b3d0a ]
    
    The hardware VLAN filter (RFE_CTL_VLAN_FILTER_) drops VLAN-tagged frames
    whose VID has not been registered via lan78xx_vlan_rx_add_vid(). It is
    left enabled in promiscuous mode, so packet capture (e.g. tcpdump or
    Wireshark) does not see tagged frames for unregistered VIDs.
    
    Clear the filter while the interface is promiscuous and restore it from
    NETIF_F_HW_VLAN_CTAG_FILTER otherwise. Enforce the same condition in
    lan78xx_set_features() so netdev_update_features() cannot re-enable the
    filter while promiscuous.
    
    Fixes: 55d7de9de6c3 ("Microchip's LAN7800 family USB 2/3 to 10/100/1000 Ethernet device driver")
    Signed-off-by: Enrico Pozzobon <[email protected]>
    Reviewed-by: Nicolai Buchwitz <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: usb: net1080: validate packet_len before pad-byte access in rx_fixup [+ + +]
Author: Xiang Mei <[email protected]>
Date:   Mon Jun 29 21:51:21 2026 -0700

    net: usb: net1080: validate packet_len before pad-byte access in rx_fixup
    
    [ Upstream commit 03f384bc0cb8d4a1301d4f5b0baef2d980258383 ]
    
    For an even packet_len, net1080_rx_fixup() reads the pad byte at
    skb->data[packet_len] before the skb->len != packet_len check further
    down, and packet_len is only bounded against NC_MAX_PACKET. A malicious
    NetChip 1080 device can send a short frame advertising a large even
    packet_len (e.g. 0x4000), so the pad-byte read lands past the end of the
    skb:
    
      BUG: KASAN: slab-out-of-bounds in net1080_rx_fixup
      Read of size 1 at addr ffff8880106c83c6 by task ksoftirqd/0/14
       ...
       net1080_rx_fixup (drivers/net/usb/net1080.c:384)
       usbnet_bh (drivers/net/usb/usbnet.c:1589)
       process_one_work (kernel/workqueue.c:3322)
       bh_worker (kernel/workqueue.c:3708)
       tasklet_action (kernel/softirq.c:965)
       handle_softirqs (kernel/softirq.c:622)
       ...
    
    Reject the frame when packet_len >= skb->len before reading.
    
    Fixes: 904813cd8a0b ("[PATCH] USB: usbnet (4/9) module for net1080 cables")
    Reported-by: Weiming Shi <[email protected]>
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: Xiang Mei <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
netfilter: bridge: fix stale prevhdr pointer in br_ip6_fragment() [+ + +]
Author: Xiang Mei (Microsoft) <[email protected]>
Date:   Wed Jul 8 18:11:50 2026 +0000

    netfilter: bridge: fix stale prevhdr pointer in br_ip6_fragment()
    
    commit 86f3ce81dd2b4b0aa2c3016c989a943e4b1b643d upstream.
    
    br_ip6_fragment() gets prevhdr, a pointer into the skb head, from
    ip6_find_1stfragopt(), then calls skb_checksum_help().  For a cloned skb
    skb_checksum_help() reallocates the head via pskb_expand_head(), leaving
    prevhdr dangling.  It is later dereferenced in ip6_frag_next(), causing a
    use-after-free write.
    
    Save prevhdr's offset before skb_checksum_help() and recompute it after,
    like commit ef0efcd3bd3f ("ipv6: Fix dangling pointer when ipv6
    fragment").
    
      BUG: KASAN: slab-use-after-free in ip6_frag_next (net/ipv6/ip6_output.c:857)
      Write of size 1 at addr ffff888013ff5016 by task exploit/141
      Call Trace:
       ...
       kasan_report (mm/kasan/report.c:595)
       ip6_frag_next (net/ipv6/ip6_output.c:857)
       br_ip6_fragment (net/ipv6/netfilter.c:212)
       nf_ct_bridge_post (net/bridge/netfilter/nf_conntrack_bridge.c:407)
       nf_hook_slow (net/netfilter/core.c:619)
       br_forward_finish (net/bridge/br_forward.c:66)
       __br_forward (net/bridge/br_forward.c:115)
       maybe_deliver (net/bridge/br_forward.c:191)
       br_flood (net/bridge/br_forward.c:245)
       br_handle_frame_finish (net/bridge/br_input.c:229)
       br_handle_frame (net/bridge/br_input.c:442)
       ...
       packet_sendmsg (net/packet/af_packet.c:3114)
       ...
       do_syscall_64 (arch/x86/entry/syscall_64.c:94)
       entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:121)
      Kernel panic - not syncing: Fatal exception in interrupt
    
    Fixes: 764dd163ac92 ("netfilter: nf_conntrack_bridge: add support for IPv6")
    Cc: [email protected]
    Reported-by: [email protected]
    Signed-off-by: Xiang Mei (Microsoft) <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: conntrack: call nf_ct_gre_keymap_destroy() if master helper is pptp [+ + +]
Author: Pablo Neira Ayuso <[email protected]>
Date:   Thu Jun 4 08:21:13 2026 +0200

    netfilter: conntrack: call nf_ct_gre_keymap_destroy() if master helper is pptp
    
    [ Upstream commit b0f02608fbcd607b5131cceb91fc0a035264e61c ]
    
    For GRE flows, validate that the ct master helper (if any) is pptp
    before calling nf_ct_gre_keymap_destroy(), so the helper data area
    can be accessed safely. Note that only the pptp helper provides a
    .destroy callback.
    
    Fixes: e56894356f60 ("netfilter: conntrack: remove l4proto destroy hook")
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: ebtables: module names must be null-terminated [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Sat Jul 4 12:05:15 2026 +0200

    netfilter: ebtables: module names must be null-terminated
    
    commit 084d23f818321390509e9738a0b08bbf46df6425 upstream.
    
    We need to explicitly check the length, else we may pass non-null
    terminated string to request_module().
    
    Cc: [email protected]
    Fixes: bcf493428840 ("netfilter: ebtables: Fix extension lookup with identical name")
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: ebtables: terminate table name before find_table_lock() [+ + +]
Author: Xiang Mei <[email protected]>
Date:   Sun Jul 5 14:58:00 2026 -0700

    netfilter: ebtables: terminate table name before find_table_lock()
    
    commit a622d2e9608c9dff47fc2e5759ac7aa3a836b45d upstream.
    
    update_counters() and compat_update_counters() forward a user-supplied
    32-byte table name to find_table_lock() without NUL-terminating it. On a
    lookup miss, find_inlist_lock() calls try_then_request_module(..., "%s%s",
    "ebtable_", name), and vsnprintf() reads past the name field and the
    stack object until it hits a zero byte.
    
      BUG: KASAN: stack-out-of-bounds in string (lib/vsprintf.c:648 lib/vsprintf.c:730)
      Read of size 1 at addr ffff8880119dfb20 by task exploit/147
      Call Trace:
      ...
       string (lib/vsprintf.c:648 lib/vsprintf.c:730)
       vsnprintf (lib/vsprintf.c:2945)
       __request_module (kernel/module/kmod.c:150)
       do_update_counters.isra.0 (net/bridge/netfilter/ebtables.c:371 net/bridge/netfilter/ebtables.c:380)
       update_counters (net/bridge/netfilter/ebtables.c:1440)
       do_ebt_set_ctl (net/bridge/netfilter/ebtables.c:2573)
       nf_setsockopt (net/netfilter/nf_sockopt.c:101)
       ip_setsockopt (net/ipv4/ip_sockglue.c:1424)
       raw_setsockopt (net/ipv4/raw.c:847)
       __sys_setsockopt (net/socket.c:2393)
      ...
    
    compat_do_replace() shares the same unterminated name via
    compat_copy_ebt_replace_from_user(); terminate it there too so all
    find_table_lock() callers behave alike. The other callers already
    terminate the name after the copy.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Fixes: 81e675c227ec ("netfilter: ebtables: add CONFIG_COMPAT support")
    Cc: [email protected]
    Reported-by: Weiming Shi <[email protected]>
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: Xiang Mei <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: ebtables: Use vmalloc_array() to improve code [+ + +]
Author: Qianfeng Rong <[email protected]>
Date:   Wed Jul 15 17:31:45 2026 -0400

    netfilter: ebtables: Use vmalloc_array() to improve code
    
    [ Upstream commit 46015e6b3ea75297b28d4806564f3f692cf11861 ]
    
    Remove array_size() calls and replace vmalloc() with vmalloc_array() to
    simplify the code.  vmalloc_array() is also optimized better, uses fewer
    instructions, and handles overflow more concisely[1].
    
    [1]: https://lore.kernel.org/lkml/[email protected]/
    Signed-off-by: Qianfeng Rong <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Stable-dep-of: cbfe53599eeb ("netfilter: ebtables: zero chainstack array")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: ebtables: zero chainstack array [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Wed Jul 15 17:31:46 2026 -0400

    netfilter: ebtables: zero chainstack array
    
    [ Upstream commit cbfe53599eebffd188938ab6774cc41794f6f9d5 ]
    
    sashiko reports:
     looking at ebtables table
     translation, could a sparse cpu_possible_mask lead to an uninitialized pointer
     free?
    
     If cpu_possible_mask is sparse (for example, CPU 0 and CPU 2 are possible,
     but CPU 1 is not), the allocation loop skips CPU 1. If vmalloc_node() fails at
     CPU 2, the cleanup loop will blindly decrement and call vfree() on
     newinfo->chainstack[1].
    
    Not a real-world bug, such allocation isn't expected to fail
    in the first place.
    
    Cc: [email protected]
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: ip6tables: mark malformed IPv6 extension headers for hotdrop [+ + +]
Author: Zhixing Chen <[email protected]>
Date:   Wed Jul 1 18:09:30 2026 +0800

    netfilter: ip6tables: mark malformed IPv6 extension headers for hotdrop
    
    [ Upstream commit 43ccc20b5a733226417832cf16ef45322e594990 ]
    
    The ah, hbh and rt matches check that the fixed extension header is
    present, then use the header length field to derive the advertised
    extension header length for matching.
    
    For the ah match, add the missing advertised-length check. For hbh
    and rt, update the existing advertised-length checks. In all three
    cases, set hotdrop to true before returning false when the advertised
    extension header length exceeds the available skb data.
    
    Returning false treats the packet as a rule mismatch. Set hotdrop to
    true and drop malformed packets so they cannot bypass rules intended
    to drop packets with these IPv6 extension headers.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Zhixing Chen <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: ipset: fix order of kfree_rcu() and rcu_assign_pointer() [+ + +]
Author: Jozsef Kadlecsik <[email protected]>
Date:   Wed Jun 17 10:41:24 2026 +0200

    netfilter: ipset: fix order of kfree_rcu() and rcu_assign_pointer()
    
    [ Upstream commit 3ca9982a8882470aa0ac4e8bb9a552b181d1efcd ]
    
    Sashiko pointed out that kfree_rcu() was called before
    rcu_assign_pointer() in handling the comment extension.
    Fix the order so that rcu_assign_pointer() called first.
    
    Fixes: b57b2d1fa53f ("netfilter: ipset: Prepare the ipset core to use RCU at set level")
    Signed-off-by: Jozsef Kadlecsik <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: ipset: fix race between dump and ip_set_list resize [+ + +]
Author: Xiang Mei <[email protected]>
Date:   Wed Jun 24 18:00:06 2026 -0700

    netfilter: ipset: fix race between dump and ip_set_list resize
    
    commit 7cd9103283b26b917360ec99d7d2f2d761bcf1ab upstream.
    
    The release path of ip_set_dump_do() and ip_set_dump_done() read
    inst->ip_set_list via ip_set_ref_netlink(), a plain rcu_dereference_raw()
    of the array pointer. These run from netlink_recvmsg() without the nfnl
    mutex and without an RCU read-side critical section.
    
    A concurrent ip_set_create() can grow the array: it publishes the new
    array, calls synchronize_net() and then kvfree()s the old one. Since the
    dump paths read the array outside any RCU reader, synchronize_net() does
    not wait for them and the old array can be freed while they still index
    into it, causing a use-after-free.
    
    The dumped set itself stays pinned via set->ref_netlink, so only the
    array load needs protecting. Take rcu_read_lock() around it, matching
    ip_set_get_byname() and __ip_set_put_byindex().
    
      BUG: KASAN: slab-use-after-free in ip_set_dump_do (net/netfilter/ipset/ip_set_core.c:1697)
      Read of size 8 at addr ffff88800b5c4018 by task exploit/150
      Call Trace:
       ...
       kasan_report (mm/kasan/report.c:595)
       ip_set_dump_do (net/netfilter/ipset/ip_set_core.c:1697)
       netlink_dump (net/netlink/af_netlink.c:2325)
       netlink_recvmsg (net/netlink/af_netlink.c:1976)
       sock_recvmsg (net/socket.c:1159)
       __sys_recvfrom (net/socket.c:2315)
       ...
      Oops: general protection fault, probably for non-canonical address ... KASAN NOPTI
      KASAN: maybe wild-memory-access in range [0x02d6...d0-0x02d6...d7]
      RIP: 0010:ip_set_dump_do (net/netfilter/ipset/ip_set_core.c:1698)
      Kernel panic - not syncing: Fatal exception
    
    Fixes: 8a02bdd50b2e ("netfilter: ipset: Fix calling ip_set() macro at dumping")
    Cc: [email protected]
    Reported-by: Weiming Shi <[email protected]>
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: Xiang Mei <[email protected]>
    Acked-by: Jozsef Kadlecsik <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: nf_conncount: callers must hold rcu read lock [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Fri Jun 5 15:11:19 2026 +0200

    netfilter: nf_conncount: callers must hold rcu read lock
    
    [ Upstream commit 64d7d5abe2160bba369b4a8f06bdf5630573bab0 ]
    
    rcu_derefence_raw() should not have been used here, it concealed this bug.
    Its used because struct rb_node lacks __rcu annotated pointers, so plain
    rcu_derefence causes sparse warnings.
    
    The major tradeoff is that rcu_derefence_raw() doesn't warn when the caller
    isn't in a rcu read section.
    
    Extend the rcu read lock scope accordingly and cause sparse warnings,
    those warnings are the lesser evil.
    
    Fixes: 11efd5cb04a1 ("openvswitch: Support conntrack zone limit")
    Closes: https://sashiko.dev/#/patchset/20260603230610.7900-1-fw%40strlen.de
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nf_conncount: fix zone comparison in tuple dedup [+ + +]
Author: Yizhou Zhao <[email protected]>
Date:   Wed Jul 8 13:27:28 2026 +0800

    netfilter: nf_conncount: fix zone comparison in tuple dedup
    
    commit f62c41b4910e65da396ec9a8c40c1fe7fe82e449 upstream.
    
    The "already exists" dedup logic in __nf_conncount_add() decides
    whether a connection has already been counted and can be skipped instead
    of incrementing the connlimit count.  It compares the conntrack zone of a
    list entry with the zone of the connection being added using
    nf_ct_zone_id() and nf_ct_zone_equal(), passing conn->zone.dir or
    zone->dir as the direction argument.
    
    Those helpers take enum ip_conntrack_dir values: IP_CT_DIR_ORIGINAL is 0
    and IP_CT_DIR_REPLY is 1.  However, zone->dir is a u8 bitmask:
    NF_CT_ZONE_DIR_ORIG is 1, NF_CT_ZONE_DIR_REPL is 2 and
    NF_CT_DEFAULT_ZONE_DIR is 3.  Passing that bitmask as the enum direction
    shifts the meaning of every non-zero value.  An ORIG-only zone passes 1
    and is tested as REPLY, while REPL-only and default zones pass 2 or 3 and
    test bits beyond the valid direction range.  In those cases
    nf_ct_zone_id() can fall back to NF_CT_DEFAULT_ZONE_ID instead of using
    the real zone id, so different zones can be treated as equal and dedup
    collapses to tuple equality alone.
    
    nf_conncount stores and compares the original-direction tuple for a
    connection.  If an skb already has an attached conntrack entry,
    get_ct_or_tuple_from_skb() explicitly copies
    ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple, regardless of the packet's
    ctinfo.  Therefore the zone comparison in the tuple dedup path must use
    IP_CT_DIR_ORIGINAL as well; the zone direction bitmask describes where a
    zone id applies, not which direction this conncount tuple represents.
    
    Fix the two dedup comparisons by passing IP_CT_DIR_ORIGINAL directly.
    Do not special-case NF_CT_DEFAULT_ZONE_DIR and do not compare raw zone
    ids: using the existing helpers with IP_CT_DIR_ORIGINAL preserves the
    direction-aware NF_CT_DEFAULT_ZONE_ID fallback.  A default bidirectional
    zone contains the ORIG bit, so it naturally returns the real zone id;
    reply-only zones continue to fall back for original-direction tuple
    comparisons.
    
    Fixes: 21ba8847f857 ("netfilter: nf_conncount: Fix garbage collection with zones")
    Fixes: b36e4523d4d5 ("netfilter: nf_conncount: fix garbage collection confirm race")
    Cc: [email protected]
    Reported-by: Yizhou Zhao <[email protected]>
    Reported-by: Yuxiang Yang <[email protected]>
    Reported-by: Ao Wang <[email protected]>
    Reported-by: Xuewei Feng <[email protected]>
    Reported-by: Qi Li <[email protected]>
    Reported-by: Ke Xu <[email protected]>
    Assisted-by: Claude-Code:GLM-5.2
    Signed-off-by: Yizhou Zhao <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: nf_conncount: prevent connlimit drops for early confirmed ct [+ + +]
Author: Fernando Fernandez Mancera <[email protected]>
Date:   Thu May 14 16:16:28 2026 +0200

    netfilter: nf_conncount: prevent connlimit drops for early confirmed ct
    
    [ Upstream commit c8b6f36f766991e3ebebec6596daee4b04dcbc49 ]
    
    Commit 69894e5b4c5e ("netfilter: nft_connlimit: update the count if add
    was skipped") introduced a regression where packets for valid
    connections are dropped when using connlimit for soft-limiting
    scenarios.
    
    The issue occurs when a new connection reuses a socket currently in
    the TIME_WAIT state. In this scenario, the connection tracking entry
    is evaluated as already confirmed. Previously, __nf_conncount_add()
    assumed that if a connection was confirmed and did not originate from
    the loopback interface, it should skip the addition and return -EEXIST.
    
    Skipping the addition triggers a garbage collection run that cleans up
    the TIME_WAIT connection. Consequently, the active connection count
    drops to 0, which xt_connlimit mishandles, leading to the false rejection
    of the perfectly valid new connection.
    
    Fix this by replacing the interface check with protocol-agnostic state
    checks. We now skip the tree insertion and preserve the lockless garbage
    collection optimization only if the connection is IPS_ASSURED. This
    allows early-confirmed setup packets (such as reused TIME_WAIT sockets
    or locally generated SYN-ACKs) to be properly evaluated and counted
    without falsely dropping. The goto check_connections path is maintained
    to ensure these setup packets are deduplicated correctly.
    
    This has been tested with slowhttptest and HTTP server configured
    locally to ensure we are not breaking soft-limiting scenarios for local
    or external connections. In addition, it was tested with a OVS zone
    limit too.
    
    Fixes: 69894e5b4c5e ("netfilter: nft_connlimit: update the count if add was skipped")
    Reported-by: Alejandro Olivan Alvarez <[email protected]>
    Closes: https://lore.kernel.org/netfilter-devel/[email protected]/
    Signed-off-by: Fernando Fernandez Mancera <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nf_conntrack_irc: fix parse_dcc() off-by-one OOB read [+ + +]
Author: Muhammad Bilal <[email protected]>
Date:   Tue May 19 17:23:28 2026 -0400

    netfilter: nf_conntrack_irc: fix parse_dcc() off-by-one OOB read
    
    commit ef6400ca25a13fd6dedbe8ef4a1d0979bbbfe88a upstream.
    
    parse_dcc() treats data_end as an inclusive end pointer, but its only
    caller passes data_limit = ib_ptr + datalen, which points one past the
    last valid byte.
    
    The newline search loop iterates while tmp <= data_end, so when no
    newline is present, *tmp is read at tmp == data_end, one byte beyond
    the region filled by skb_header_pointer().
    
    irc_buffer is kmalloc'd as MAX_SEARCH_SIZE + 1 bytes and datalen is
    capped at MAX_SEARCH_SIZE, so the stray read does not fault.  The byte
    is uninitialized or stale; if it contains an ASCII digit, simple_strtoul
    will consume it and produce a wrong DCC IP or port in the conntrack
    expectation.  The extra allocation byte is also a fragile guard: if the
    cap or allocation size changes, this becomes a real out-of-bounds read.
    
    Change the loop and its post-loop check to use strict less-than,
    consistent with the caller's exclusive-end convention.  Update the
    function comment accordingly.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Signed-off-by: Muhammad Bilal <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: nf_conntrack_reasm: guard mac_header adjustment after IPv6 defrag [+ + +]
Author: Xiang Mei <[email protected]>
Date:   Sun Jul 5 16:36:29 2026 -0700

    netfilter: nf_conntrack_reasm: guard mac_header adjustment after IPv6 defrag
    
    commit 3b08fed5b7e0d5e3a25d73ef3ba09cd33ade16c9 upstream.
    
    nf_ct_frag6_reasm() slides the packet head forward to drop the IPv6
    fragment header and then unconditionally advances skb->mac_header:
    
            skb->mac_header += sizeof(struct frag_hdr);
    
    On the NF_INET_LOCAL_OUT defrag path the skb has no link-layer header
    yet, so skb->mac_header is still the "not set" sentinel (u16)~0U. Adding
    sizeof(struct frag_hdr) wraps it to a small value (0xffff + 8 == 7),
    after which skb_mac_header_was_set() wrongly reports a MAC header is
    present and skb_mac_header() points into the headroom.
    
    The reassembler has done this unconditional add since it was introduced;
    it was harmless while mac_header was a bare pointer, but wrong once
    mac_header became a u16 offset whose unset state is the ~0U sentinel
    tested by skb_mac_header_was_set(). The sibling net/ipv6/reassembly.c
    does the same relocation and does guard the adjustment; mirror the
    guard here.
    
    Fixes: 9fb9cbb1082d ("[NETFILTER]: Add nf_conntrack subsystem.")
    Cc: [email protected]
    Reported-by: Weiming Shi <[email protected]>
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: Xiang Mei <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: nf_log: validate MAC header was set before dumping it [+ + +]
Author: Xiang Mei <[email protected]>
Date:   Tue Jun 9 15:55:02 2026 -0700

    netfilter: nf_log: validate MAC header was set before dumping it
    
    commit a84b6fedbc97078788be78dbdd7517d143ad1a77 upstream.
    
    The fallback path of dump_mac_header() guards the MAC header access
    only with "skb->mac_header != skb->network_header", without checking
    skb_mac_header_was_set(). When the MAC header is unset, mac_header is
    0xffff, so the test passes and skb_mac_header(skb) returns
    skb->head + 0xffff, ~64 KiB past the buffer; the loop then reads
    dev->hard_header_len bytes out of bounds into the kernel log.
    
    This is reachable via the netdev logger: nf_log_unknown_packet() calls
    dump_mac_header() unconditionally, and an skb sent through AF_PACKET
    with PACKET_QDISC_BYPASS reaches the egress hook with mac_header still
    unset (__dev_queue_xmit(), which would reset it, is bypassed).
    
    Add the skb_mac_header_was_set() check the ARPHRD_ETHER path already
    uses, and replace the open-coded MAC header length test with
    skb_mac_header_len(). Only skbs with an unset MAC header are affected;
    valid ones are dumped as before.
    
     BUG: KASAN: slab-out-of-bounds in dump_mac_header (net/netfilter/nf_log_syslog.c:831)
     Read of size 1 at addr ffff88800ea49d3f by task exploit/148
     Call Trace:
      kasan_report (mm/kasan/report.c:595)
      dump_mac_header (net/netfilter/nf_log_syslog.c:831)
      nf_log_netdev_packet (net/netfilter/nf_log_syslog.c:938 net/netfilter/nf_log_syslog.c:963)
      nf_log_packet (net/netfilter/nf_log.c:260)
      nft_log_eval (net/netfilter/nft_log.c:60)
      nft_do_chain (net/netfilter/nf_tables_core.c:285)
      nft_do_chain_netdev (net/netfilter/nft_chain_filter.c:307)
      nf_hook_slow (net/netfilter/core.c:619)
      nf_hook_direct_egress (net/packet/af_packet.c:257)
      packet_xmit (net/packet/af_packet.c:280)
      packet_sendmsg (net/packet/af_packet.c:3114)
      __sys_sendto (net/socket.c:2265)
    
    Fixes: 7eb9282cd0ef ("netfilter: ipt_LOG/ip6t_LOG: add option to print decoded MAC header")
    Reported-by: Weiming Shi <[email protected]>
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: Xiang Mei <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Alexander Martyniuk <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: nf_nat_sip: reload possible stale data pointer [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Wed Jul 1 07:44:17 2026 +0200

    netfilter: nf_nat_sip: reload possible stale data pointer
    
    commit 77e43bcb7ec177e293a5c3f1b91a2c5aebfb6c68 upstream.
    
    quoting sashiko:
     ------------------------------------------------------------------------
     [..] noticed a potential memory bug and header corruption involving the
     SIP NAT helper.
    
     In net/netfilter/nf_nat_sip.c:nf_nat_sip():
            if (skb_ensure_writable(skb, skb->len)) {
                    nf_ct_helper_log(skb, ct, "cannot mangle packet");
                    return NF_DROP;
            }
            uh = (void *)skb->data + protoff;
            uh->dest = ct_sip_info->forced_dport;
            if (!nf_nat_mangle_udp_packet(skb, ct, ctinfo, protoff,
                                          0, 0, NULL, 0)) {
    
     If a cloned or fragmented SKB is reallocated by skb_ensure_writable(), the
     old data buffer is freed. However, nf_nat_sip() fails to update *dptr to
     point to the new buffer.
    
     It also appears to use nf_nat_mangle_udp_packet() on what could be a TCP
     packet, which would overwrite the sequence number with a checksum update.
     ------------------------------------------------------------------------
    
    nf_conntrack_sip linerizes skbs, hence no fragmented skb can be seen.
    But clones are possible, so rebuild dptr.
    
    Disable nf_nat_mangle_udp_packet() branch for TCP streams.
    It doesn't look like this can ever happen, else we should have received
    bug reports about this, so just check the conntrack is UDP and drop
    otherwise.
    
    The calling conntrack_sip set ->forced_dport for SIP_HDR_VIA_UDP messages,
    so I don't think this is ever expected to be true for a TCP stream.
    
    Fixes: 7266507d8999 ("netfilter: nf_ct_sip: support Cisco 7941/7945 IP phones")
    Cc: [email protected]
    Assisted-by: Claude:claude-sonnet-4-6
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: nfnetlink_osf: fix mss parsing on big-endian architectures [+ + +]
Author: Fernando Fernandez Mancera <[email protected]>
Date:   Mon May 25 17:35:54 2026 +0200

    netfilter: nfnetlink_osf: fix mss parsing on big-endian architectures
    
    [ Upstream commit a625c94144c9b66d32e1f374f909f38db46161c1 ]
    
    The MSS calculation in nf_osf_match_one() manually shifts bytes to
    construct a 16-bit value before passing it to ntohs().
    
    This works on little-endian hosts but it does not work on big-endian as
    the bytes are being always shifted and set in the same way for all
    architectures.
    
    Use get_unaligned_be16() to fix this on big-endian systems. It also
    simplifies the code.
    
    Fixes: 11eeef41d5f6 ("netfilter: passive OS fingerprint xtables match")
    Signed-off-by: Fernando Fernandez Mancera <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nfnl_cthelper: apply per-class values when updating policies [+ + +]
Author: David Carlier <[email protected]>
Date:   Sat Apr 11 19:57:21 2026 +0100

    netfilter: nfnl_cthelper: apply per-class values when updating policies
    
    commit d738feccb98cb224ebabecb703e98f5008276bff upstream.
    
    When a userspace conntrack helper with multiple expectation classes is
    updated via nfnetlink, every class ends up with the first class's
    max_expected and timeout values.
    
    nfnl_cthelper_update_policy_all() validates each new policy into the
    corresponding slot of the temporary new_policy array, but the second
    loop that commits the values into the live helper dereferences
    new_policy as a pointer instead of indexing it, so every iteration
    reads new_policy[0] regardless of i.  An update that changes per-class
    values is silently collapsed onto class 0's values with no error
    returned to userspace.
    
    Index the temporary array by i in the commit loop so each class gets
    its own validated values.
    
    Fixes: 2c422257550f ("netfilter: nfnl_cthelper: fix runtime expectation policy updates")
    Cc: [email protected]
    Signed-off-by: David Carlier <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: nft_meta_bridge: fix NFT_META_BRI_IIFPVID stack leak [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Fri Jun 19 00:34:49 2026 +0200

    netfilter: nft_meta_bridge: fix NFT_META_BRI_IIFPVID stack leak
    
    [ Upstream commit 27dd2997746d54ebc079bb13161cc1bdd401d4a6 ]
    
    This needs to test for nonzero retval.
    
    Fixes: c54c7c685494 ("netfilter: nft_meta_bridge: add NFT_META_BRI_IIFPVID support")
    Closes: https://sashiko.dev/#/patchset/20260618061631.21919-1-fw%40strlen.de
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nft_synproxy: stop bypassing the priv->info snapshot [+ + +]
Author: Runyu Xiao <[email protected]>
Date:   Thu Jun 11 12:21:20 2026 +0800

    netfilter: nft_synproxy: stop bypassing the priv->info snapshot
    
    [ Upstream commit 11d4bc4e26fb66040a5b5d95e9abf37deac2b1fc ]
    
    nft_synproxy_eval_v4() and nft_synproxy_eval_v6() already take a
    whole-object READ_ONCE() snapshot of the shared priv->info state before
    building the SYNACK reply, but nft_synproxy_tcp_options() still masks
    opts->options with priv->info.options from the live shared object.
    
    When a named synproxy object is updated concurrently with SYN traffic,
    the eval path can then mix mss and timestamp handling from the local
    snapshot with an options mask taken from a newer configuration, so one
    SYNACK no longer reflects a coherent synproxy configuration.
    
    Use info->options so nft_synproxy_tcp_options() stays on the same local
    snapshot that the eval path already copied from priv->info.
    
    Fixes: ee394f96ad75 ("netfilter: nft_synproxy: add synproxy stateful object support")
    Signed-off-by: Runyu Xiao <[email protected]>
    Reviewed-by: Fernando Fernandez Mancera <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: synproxy: protect nf_ct_seqadj_init() with conntrack lock [+ + +]
Author: Fernando Fernandez Mancera <[email protected]>
Date:   Tue May 26 23:58:30 2026 +0200

    netfilter: synproxy: protect nf_ct_seqadj_init() with conntrack lock
    
    [ Upstream commit 9e37388b8070afe73d4ab2d973b28593ed65f3ad ]
    
    nf_ct_seqadj_init() is called without holding the ct lock. This can race
    with nf_ct_seq_adjust() when a connection is in CLOSE state due to an
    RST or connection reopening. In addition for SYN_RECV state, concurrent
    processing of packets can trigger nf_ct_seq_adjust() too. These
    situations create a read/write data race.
    
    As synproxy is the only user of nf_ct_seqadj_init() at the moment, fix
    this by holding ct->lock inside nf_ct_seqadj_init() until all is done.
    
    Fixes: 48b1de4c110a ("netfilter: add SYNPROXY core/target")
    Signed-off-by: Fernando Fernandez Mancera <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: xt_cluster: reject template conntracks in hash match [+ + +]
Author: Wyatt Feng <[email protected]>
Date:   Thu Jun 11 15:21:42 2026 +0800

    netfilter: xt_cluster: reject template conntracks in hash match
    
    commit 5feba91006ec92da57acc1cc2e34df623b98541e upstream.
    
    xt_cluster_mt() treats any non-NULL nf_ct_get() result as a fully
    initialized conntrack and passes it to xt_cluster_hash().
    
    This causes a state confusion bug when the raw table CT target attaches
    a template conntrack to skb->_nfct before normal conntrack processing.
    Templates carry IPS_TEMPLATE status but do not have a valid tuple for
    hashing yet, so xt_cluster_hash() can hit its WARN_ON() path on the
    zeroed l3num field.
    
    Reject template conntracks before hashing them. This matches existing
    netfilter handling for template objects and avoids hashing incomplete
    conntrack state.
    
    Fixes: 0269ea493734 ("netfilter: xtables: add cluster match")
    Cc: [email protected]
    Reported-by: Yuan Tan <[email protected]>
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Reported-by: Zhengchuan Liang <[email protected]>
    Reported-by: Xin Liu <[email protected]>
    Assisted-by: Codex:GPT-5.4
    Signed-off-by: Wyatt Feng <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: xt_nat: reject unsupported target families [+ + +]
Author: Wyatt Feng <[email protected]>
Date:   Sat Jun 13 18:27:15 2026 +0800

    netfilter: xt_nat: reject unsupported target families
    
    commit 5d1a2240935ea47e2673d0ea17fdb058e4dc91dd upstream.
    
    xt_nat SNAT and DNAT target handlers assume IP-family conntrack state
    is present and can dereference a NULL pointer when instantiated from an
    unsupported family through nft_compat. A bridge-family compat rule can
    therefore trigger a NULL-dereference in nf_nat_setup_info().
    
    Reject non-IP families in xt_nat_checkentry() so unsupported targets
    cannot be installed. Keep NFPROTO_INET allowed for valid inet NAT
    compat users and leave the runtime fast path unchanged.
    
    [ The crash was fixed via
      9dbba7e694ec ("netfilter: nft_compat: ebtables emulation must reject non-bridge targets"),
      so this patch is no longer critical.
      Nevertheless, NAT is only relevant for ipv4/ipv6, so this extra
      family check is a good idea in any case. ]
    
    Fixes: c7232c9979cb ("netfilter: add protocol independent NAT core")
    Cc: [email protected]
    Reported-by: Yuan Tan <[email protected]>
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Reported-by: Zhengchuan Liang <[email protected]>
    Reported-by: Xin Liu <[email protected]>
    Assisted-by: Codex:GPT-5.4
    Signed-off-by: Wyatt Feng <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: xt_rateest: fix u64 truncation in xt_rateest_mt() [+ + +]
Author: Feng Wu <[email protected]>
Date:   Thu Jun 25 08:44:25 2026 +0000

    netfilter: xt_rateest: fix u64 truncation in xt_rateest_mt()
    
    [ Upstream commit 444853cd438201007da5359821adcc2995655ab1 ]
    
    On links faster than ~34 Gbps, where byte rate may exceed 2^32-1
    (~ 4.3 GBps), the comparison result becomes incorrect because the
    truncated value no longer reflects the actual estimator rate.
    
    Fix by changing the local variables to u64.
    
    Fixes: 1c0d32fde5bd ("net_sched: gen_estimator: complete rewrite of rate estimators")
    Signed-off-by: Feng Wu <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: xt_u32: reject invalid shift counts [+ + +]
Author: Wyatt Feng <[email protected]>
Date:   Sun Jun 28 16:05:54 2026 +0800

    netfilter: xt_u32: reject invalid shift counts
    
    [ Upstream commit 64cdf7d30ac18e43df6c48004435febb965809a8 ]
    
    u32_match_it() executes rule-supplied shift operands on a 32-bit
    value. A malformed u32 rule can provide a shift count of 32 or more,
    triggering an undefined shift out-of-bounds during packet evaluation.
    
    Validate XT_U32_LEFTSH and XT_U32_RIGHTSH operands in
    u32_mt_checkentry() and reject malformed rules before they reach the
    packet path.
    
    Fixes: 1b50b8a371e9 ("[NETFILTER]: Add u32 match")
    Reported-by: Yuan Tan <[email protected]>
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Reported-by: Zhengchuan Liang <[email protected]>
    Reported-by: Xin Liu <[email protected]>
    Assisted-by: Codex:GPT-5.4
    Signed-off-by: Wyatt Feng <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nfsd: change nfs4_client_to_reclaim() to allocate data [+ + +]
Author: NeilBrown <[email protected]>
Date:   Mon Sep 8 11:38:33 2025 +1000

    nfsd: change nfs4_client_to_reclaim() to allocate data
    
    [ Upstream commit 4552f4e3f2c96597914f07b060d5c5db84420ddd ]
    
    The calling convention for nfs4_client_to_reclaim() is clumsy in that
    the caller needs to free memory if the function fails.  It is much
    cleaner if the function frees its own memory.
    
    This patch changes nfs4_client_to_reclaim() to re-allocate the .data
    fields to be stored in the newly allocated struct nfs4_client_reclaim,
    and to free everything on failure.
    
    __cld_pipe_inprogress_downcall() needs to allocate the data anyway to
    copy it from user-space, so now that data is allocated twice.  I think
    that is a small price to pay for a cleaner interface.
    
    Signed-off-by: NeilBrown <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

nfsd: move name lookup out of nfsd4_list_rec_dir() [+ + +]
Author: NeilBrown <[email protected]>
Date:   Mon Sep 15 12:55:13 2025 +1000

    nfsd: move name lookup out of nfsd4_list_rec_dir()
    
    [ Upstream commit 89bd77cf436bf25e448817a662ebf76515f22863 ]
    
    nfsd4_list_rec_dir() is called with two different callbacks.
    One of the callbacks uses vfs_rmdir() to remove the directory.
    The other doesn't use the dentry at all, just the name.
    
    As only one callback needs the dentry, this patch moves the lookup into
    that callback.  This prepares of changes to how directory operations
    are locked.
    
    Signed-off-by: NeilBrown <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Stable-dep-of: 4552f4e3f2c9 ("nfsd: change nfs4_client_to_reclaim() to allocate data")
    Signed-off-by: Sasha Levin <[email protected]>

nfsd: release layout stid on setlease failure [+ + +]
Author: Chris Mason <[email protected]>
Date:   Thu Jul 2 23:39:54 2026 -0400

    nfsd: release layout stid on setlease failure
    
    commit 30d55c8aabb261bc3f427d6b9aae7ef6206063f9 upstream.
    
    nfs4_alloc_stid() publishes the new stid into cl->cl_stateids via
    idr_alloc_cyclic() under cl_lock before returning to
    nfsd4_alloc_layout_stateid(). When nfsd4_layout_setlease() then
    fails, the error path frees the layout stateid directly with
    kmem_cache_free() without ever calling idr_remove(), leaving the
    IDR slot pointing at freed slab memory. Any subsequent IDR walker
    (states_show, client teardown) dereferences the dangling pointer.
    
    The correct teardown for an IDR-published stid is nfs4_put_stid(),
    which removes the IDR slot under cl_lock, dispatches sc_free
    (nfsd4_free_layout_stateid) to release ls->ls_file via
    nfsd4_close_layout(), and drops the nfs4_file reference in its
    tail.
    
    A second issue blocks that switch: nfsd4_free_layout_stateid()
    unconditionally inspects ls->ls_fence_work via
    delayed_work_pending() under ls_lock, but
    INIT_DELAYED_WORK(&ls->ls_fence_work, ...) currently runs only
    after the setlease call. On the setlease-failure path the
    destructor would touch an uninitialized delayed_work.
    
        nfsd4_alloc_layout_stateid()
          nfs4_alloc_stid()           /* idr_alloc_cyclic under cl_lock */
          nfsd4_layout_setlease()     /* fails */
            nfs4_put_stid()
              nfsd4_free_layout_stateid()
                delayed_work_pending(&ls->ls_fence_work)  /* needs INIT */
                nfsd4_close_layout()  /* nfsd_file_put(ls->ls_file) */
              put_nfs4_file()
    
    Fix by hoisting the ls_fenced / ls_fence_delay / INIT_DELAYED_WORK
    initialization above the nfsd4_layout_setlease() call, and replace
    the manual nfsd_file_put + put_nfs4_file + kmem_cache_free cleanup
    with a single nfs4_put_stid(stp).
    
    Fixes: c5c707f96fc9 ("nfsd: implement pNFS layout recalls")
    Cc: [email protected]
    Assisted-by: kres (claude-opus-4-7)
    Signed-off-by: Chris Mason <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    [ cel: no ls_fence_work in 5.10.y; dropped INIT_DELAYED_WORK hunk ]
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

nfsd: reset write verifier on deferred writeback errors [+ + +]
Author: Jeff Layton <[email protected]>
Date:   Thu Jul 2 23:40:48 2026 -0400

    nfsd: reset write verifier on deferred writeback errors
    
    commit 2090b05803faab8a9fa62fbff871007862cac1b7 upstream.
    
    nfsd_vfs_write() and nfsd_commit() both call filemap_check_wb_err() to
    detect deferred writeback errors, but neither rotates the server's write
    verifier (nn->writeverf) when this check fails. Every other
    durable-storage-failure path in these functions calls
    commit_reset_write_verifier() before returning an error.
    
    The missing rotation means clients holding UNSTABLE write data under the
    current verifier will COMMIT, receive the unchanged verifier back, and
    conclude their data is durable — silently dropping data that failed
    writeback. This violates the UNSTABLE+COMMIT durability contract
    (RFC 1813 §3.3.7, RFC 8881 §18.32).
    
    Add commit_reset_write_verifier() calls at both filemap_check_wb_err()
    error sites, matching the pattern used by adjacent error paths in the
    same functions. The helper already filters -EAGAIN and -ESTALE
    internally, so the calls are unconditionally safe.
    
    Reported-by: Chris Mason <[email protected]>
    Fixes: 555dbf1a9aac ("nfsd: Replace use of rwsem with errseq_t")
    Cc: [email protected]
    Assisted-by: kres:claude-opus-4-6
    Signed-off-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    [ cel: open-code the reset; commit_reset_write_verifier() is v6.7 ]
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
NFSv4/flexfiles: honor FF_FLAGS_NO_IO_THRU_MDS in pg_get_mirror_count_write [+ + +]
Author: Mike Snitzer <[email protected]>
Date:   Thu Jun 4 16:24:03 2026 -0400

    NFSv4/flexfiles: honor FF_FLAGS_NO_IO_THRU_MDS in pg_get_mirror_count_write
    
    [ Upstream commit 1d62e659c0bf11649cf48e002c2a55d148f2610a ]
    
    The FF_FLAGS_NO_IO_THRU_MDS flag lives on each lseg, so any fallback
    decision made when there is no current lseg (e.g. between LAYOUTRETURN
    and the next LAYOUTGET) cannot run the per-lseg check.
    
    Introduce a sticky hdr-level ditto for FF_FLAGS_NO_IO_THRU_MDS in
    struct nfs4_flexfile_layout::flags (NFS4_FF_HDR_NO_IO_THRU_MDS bit),
    set whenever ff_layout_alloc_lseg() parses an lseg with the flag.  The
    bit is never cleared for the lifetime of the layout hdr; the server is
    assumed to be consistent in its no-fallback policy per file.
    kzalloc() in ff_layout_alloc_layout_hdr() zero-initializes the field.
    
    Use the new ff_layout_hdr_no_fallback_to_mds() helper to gate
    ff_layout_pg_get_mirror_count_write(): when pnfs_update_layout() returns
    NULL (e.g. NFS_LAYOUT_BULK_RECALL, pnfs_layout_io_test_failed,
    pnfs_layoutgets_blocked) the existing code unconditionally calls
    nfs_pageio_reset_write_mds().  This is a source of unwanted WRITE to
    MDS.  Fix it by checking NFS4_FF_HDR_NO_IO_THRU_MDS bit, and if set
    surface -EAGAIN instead; the writepage-side caller (nfs_do_writepage()
    for buffered, nfs_direct_write_reschedule() for O_DIRECT) then
    redirties the request so writeback retries via pNFS.
    
    Fixes: 260074cd8413 ("pNFS/flexfiles: Add support for FF_FLAGS_NO_IO_THRU_MDS")
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Mike Snitzer <[email protected]>
    Signed-off-by: Anna Schumaker <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

NFSv4/flexfiles: honor FF_FLAGS_NO_IO_THRU_MDS on fatal DS connect errors [+ + +]
Author: Mike Snitzer <[email protected]>
Date:   Thu Jun 4 16:24:02 2026 -0400

    NFSv4/flexfiles: honor FF_FLAGS_NO_IO_THRU_MDS on fatal DS connect errors
    
    [ Upstream commit 7a375cafc14ed151508f908ea5681caf0a9cc1d6 ]
    
    Commit f06bedfa62d5 ("pNFS/flexfiles: don't attempt pnfs on fatal DS
    errors") teaches ff_layout_{read,write}_pagelist() to return
    PNFS_NOT_ATTEMPTED when nfs4_ff_layout_prepare_ds() fails with a
    nfs_error_is_fatal() errno (e.g. -ETIMEDOUT from a SOFTCONN connect
    deadline, -ENOMEM, -ERESTARTSYS), so that the client gives up instead
    of spinning.  pnfs_do_{read,write}() then dispatches the I/O through
    pnfs_{read,write}_through_mds() → nfs_pageio_reset_{read,write}_mds().
    
    That fallback is unconditional and silently violates FF_FLAGS_NO_IO_THRU_MDS:
    when the layout segment carries the flag (typically single-mirror
    appliance layouts where MDS I/O is explicitly forbidden), the
    out_failed: path's \`&& !ds_fatal_error\` clause overrides the flag's
    short-circuit through ff_layout_avoid_mds_available_ds() and routes
    the I/O to the MDS file handle anyway.
    
    This is reachable in practice during a data-server restart: SOFTCONN
    exhaustion produces -ETIMEDOUT, which is fatal per nfs_error_is_fatal(),
    which triggers PNFS_NOT_ATTEMPTED, which silently goes to MDS.
    
    Preserve the upstream "don't spin on fatal errors" intent for layouts
    that permit MDS fallback.  For layouts with FF_FLAGS_NO_IO_THRU_MDS
    set, mark the layout for return and request PNFS_TRY_AGAIN instead;
    if the server cannot supply a usable layout the failure now surfaces
    cleanly via pnfs_update_layout(), rather than via silent MDS I/O that
    contradicts the flag.
    
    Fixes: f06bedfa62d5 ("pNFS/flexfiles: don't attempt pnfs on fatal DS errors")
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Mike Snitzer <[email protected]>
    Signed-off-by: Anna Schumaker <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

NFSv4/flexfiles: reject zero filehandle version count [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Sun Jul 5 10:20:39 2026 -0400

    NFSv4/flexfiles: reject zero filehandle version count
    
    [ Upstream commit 2c6bb3c40bc24f6aa8dfbe6fe98c3ad6389203f2 ]
    
    ff_layout_alloc_lseg() decodes the filehandle-version array count
    from the flexfiles layout body. The value is used as the count for
    kzalloc_objs(), and the current code only rejects NULL.
    
    A zero count yields ZERO_SIZE_PTR, which can be stored in
    dss_info->fh_versions even though later flexfiles paths assume that at
    least one filehandle version exists.
    
    Reject fh_count == 0 before the allocation, matching the existing zero
    version_count validation in the flexfiles GETDEVICEINFO parser.
    
    A QEMU/KASAN run with a malformed flexfiles layout hit:
    
      KASAN: null-ptr-deref in range [0x0000000000000010-0x0000000000000017]
      RIP: 0010:ff_layout_encode_ff_layoutupdate.isra.0+0x15f/0x750
      ff_layout_encode_layoutreturn+0x683/0x970
      nfs4_xdr_enc_layoutreturn+0x278/0x3a0
      Kernel panic - not syncing: Fatal exception
    
    The patched kernel rejects the malformed layout without KASAN/oops/panic,
    and a valid fh_count=1 regression still opens, reads, and unmounts cleanly.
    
    Cc: [email protected]
    Fixes: d67ae825a59d ("pnfs/flexfiles: Add the FlexFile Layout Driver")
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <[email protected]>
    Signed-off-by: Anna Schumaker <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
NFSv4/pnfs: defer return_range callbacks until after inode unlock [+ + +]
Author: Dai Ngo <[email protected]>
Date:   Tue May 26 16:29:53 2026 -0700

    NFSv4/pnfs: defer return_range callbacks until after inode unlock
    
    [ Upstream commit 77b160b2d863d37f36b6c38e80a7d259ce939e69 ]
    
    Sometimes unmounting an NFS filesystem mounted with pNFS SCSI
    layouts triggers the following warning:
    
         BUG: scheduling while atomic: umount.nfs4/...
    
        __schedule_bug+0xbd/0x100
         schedule_debug.constprop.0+0x19f/0x220
         __schedule+0x10d/0x10a0
         schedule+0x74/0x190
         schedule_timeout+0xf5/0x220
         io_schedule_timeout+0xd5/0x160
         __wait_for_common+0x186/0x4b0
         blk_execute_rq+0x2ef/0x3a0
         scsi_execute_cmd+0x1ff/0x700
         sd_pr_out_command.isra.0+0x242/0x380 [sd_mod]
         bl_unregister_scsi.constprop.0+0x109/0x3c0 [blocklayoutdriver]
         bl_unregister_dev+0x175/0x1c0 [blocklayoutdriver]
         bl_free_device+0x1f/0x1b0 [blocklayoutdriver]
         bl_free_deviceid_node+0x12/0x30 [blocklayoutdriver]
         nfs4_put_deviceid_node+0x171/0x360 [nfsv4]
         ext_tree_remove+0x11c/0x1d0 [blocklayoutdriver]
         _pnfs_return_layout+0x416/0x900 [nfsv4]
         nfs4_evict_inode+0x108/0x130 [nfsv4]
         evict+0x316/0x750
         dispose_list+0xf1/0x1a0
         evict_inodes+0x33f/0x440
         generic_shutdown_super+0xc9/0x4e0
         kill_anon_super+0x3a/0x90
         nfs_kill_super+0x44/0x60 [nfs]
         deactivate_locked_super+0xb8/0x1b0
         cleanup_mnt+0x25a/0x380
         task_work_run+0x13e/0x210
         exit_to_user_mode_loop+0x169/0x400
         do_syscall_64+0x467/0x1550
         entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    The warning occurs because the block layout driver unregisters the SCSI
    device while the inode lock is still held. Device unregistration issues
    a SCSI PR command, which may sleep, resulting in a "scheduling while
    atomic" warning.
    
    During layout return, ext_tree_remove() invokes the layout driver's
    return_range callback while holding the inode lock. For block layouts,
    this callback eventually calls bl_unregister_scsi(), which may block in
    scsi_execute_cmd() while issuing PR commands to the device.
    
    Fix this by deferring the return_range callbacks until after the inode
    lock has been released. The layout header reference count is incremented
    before invoking return_range(), ensuring that the layout header remains
    valid while the layout driver removes extents from the extent tree.
    
    Fixes: c88953d87f5c8 ("pnfs: add return_range method")
    Signed-off-by: Dai Ngo <[email protected]>
    Signed-off-by: Anna Schumaker <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
NFSv4: include MAY_WRITE in open permission mask for O_TRUNC [+ + +]
Author: Benjamin Coddington <[email protected]>
Date:   Thu Jun 11 17:02:15 2026 -0400

    NFSv4: include MAY_WRITE in open permission mask for O_TRUNC
    
    commit 5140f099ecd8a2f2808b7f7b720ee1bad8468974 upstream.
    
    POSIX requires write permission to truncate a file, so an open() that
    specifies O_TRUNC must be authorized for write access regardless of the
    O_ACCMODE access mode.
    
    nfs_open_permission_mask() builds the access mask passed to
    nfs_may_open(), which is the local authorization gate for OPENs the
    client serves itself from a cached write delegation via the
    can_open_delegated() path in nfs4_try_open_cached().  The mask is
    derived from O_ACCMODE alone, so an open(O_RDONLY | O_TRUNC) against a
    file the caller cannot write requests only MAY_READ and passes the
    local check.  The OPEN is then satisfied locally and the truncation is
    issued to the server as a SETATTR(size=0) over the delegation stateid,
    which the server accepts under standard write-delegation semantics.
    POSIX requires that this open fail with EACCES.
    
    Include MAY_WRITE in the mask whenever O_TRUNC is set so the local
    check matches the access the server would have enforced.
    
    Suggested-by: Trond Myklebust <[email protected]>
    Fixes: af22f94ae02a ("NFSv4: Simplify _nfs4_do_access()")
    Cc: [email protected]
    Signed-off-by: Benjamin Coddington <[email protected]>
    Signed-off-by: Anna Schumaker <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nilfs2: reject CLEAN_SEGMENTS ioctl with out-of-range segment numbers [+ + +]
Author: Deepanshu Kartikey <[email protected]>
Date:   Sun May 3 13:33:29 2026 +0900

    nilfs2: reject CLEAN_SEGMENTS ioctl with out-of-range segment numbers
    
    commit 0e7a690fe435f8d5ea3feb7c1d8d73ba7e8b8aa9 upstream.
    
    Syzbot reported a hung task in nilfs_transaction_begin() where multiple
    tasks performing chmod() on a nilfs2 mount blocked for over 143 seconds
    waiting to acquire ns_segctor_sem for read:
    
      INFO: task syz.0.17:5918 blocked for more than 143 seconds.
      Call Trace:
       schedule+0x164/0x360
       rwsem_down_read_slowpath+0x6d9/0x940
       down_read+0x99/0x2e0
       nilfs_transaction_begin+0x364/0x710 fs/nilfs2/segment.c:221
       nilfs_setattr+0x124/0x2c0 fs/nilfs2/inode.c:921
       notify_change+0xc1a/0xf40
       chmod_common+0x273/0x4a0
       do_fchmodat+0x12d/0x230
    
    The writer holding ns_segctor_sem was a concurrent
    NILFS_IOCTL_CLEAN_SEGMENTS caller, stuck inside printk while emitting
    per-element warnings from nilfs_sufile_updatev():
    
       __nilfs_msg+0x373/0x450 fs/nilfs2/super.c:78
       nilfs_sufile_updatev+0x21c/0x6d0 fs/nilfs2/sufile.c:186
       nilfs_sufile_freev fs/nilfs2/sufile.h:93 [inline]
       nilfs_free_segments fs/nilfs2/segment.c:1140 [inline]
       nilfs_segctor_collect_blocks fs/nilfs2/segment.c:1261 [inline]
       nilfs_segctor_do_construct+0x1f55/0x76c0
       nilfs_clean_segments+0x3bd/0xa50
       nilfs_ioctl_clean_segments fs/nilfs2/ioctl.c:922 [inline]
       nilfs_ioctl+0x261f/0x2780
    
    The root cause is that user-supplied segment numbers are not validated
    before nilfs_clean_segments() begins doing work; the range check on
    each segnum is performed deep inside the call chain by
    nilfs_sufile_updatev(), which emits a nilfs_warn() per invalid entry
    while still holding the segctor lock and the sufile mi_sem.  Under load
    (repeated invocations across multiple mounts saturating the global
    printk path), the cumulative printk latency keeps ns_segctor_sem held
    long enough to trip the hung_task watchdog, blocking concurrent
    operations such as chmod() that need ns_segctor_sem for read.
    
    Fix by validating the contents of kbufs[4] in nilfs_clean_segments()
    immediately after acquiring ns_segctor_sem via nilfs_transaction_lock().
    Holding ns_segctor_sem serializes the check against
    nilfs_ioctl_resize(), which can modify ns_nsegments, so the validation
    uses a consistent value.  Out-of-range segment numbers are rejected
    with -EINVAL before any segment-cleaning work begins, so the bad
    entries never reach the per-element diagnostic path inside
    nilfs_sufile_updatev().
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=62f0f99d2f2bb8e3bbd7
    Tested-by: [email protected]
    Cc: [email protected]
    Signed-off-by: Deepanshu Kartikey <[email protected]>
    Fixes: 071cb4b81987 ("nilfs2: eliminate removal list of segments")
    Signed-off-by: Ryusuke Konishi <[email protected]>
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nvdimm/btt: Free arena sub-allocations on discover_arenas() error path [+ + +]
Author: Abdun Nihaal <[email protected]>
Date:   Tue May 19 11:20:12 2026 +0530

    nvdimm/btt: Free arena sub-allocations on discover_arenas() error path
    
    commit 13fe4cd9ddd0aacb7777812328be525a11ea3fea upstream.
    
    Memory allocated by btt_freelist_init(), btt_rtt_init(), and
    btt_maplocks_init() is not freed on some discover_arenas() error
    paths. This leaks memory when arena discovery fails.
    
    Add the missing kfree() calls to release the allocations before
    returning an error.
    
    [ as: commit message and log edits ]
    
    Fixes: 5212e11fde4d ("nd_btt: atomic sector updates")
    Cc: [email protected]
    Signed-off-by: Abdun Nihaal <[email protected]>
    Reviewed-by: Alison Schofield <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Alison Schofield <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

nvdimm/btt: Free arenas on btt_init() error paths [+ + +]
Author: Abdun Nihaal <[email protected]>
Date:   Tue May 19 11:20:13 2026 +0530

    nvdimm/btt: Free arenas on btt_init() error paths
    
    commit 1a6b6442a982d0ca5fb6a1a39b6f6dfd760eda57 upstream.
    
    The arenas allocated by discover_arenas() or create_arenas() are not
    freed on some error paths in btt_init(). This leaks memory when BTT
    initialization fails.
    
    Call free_arenas() from the affected error paths to release the
    allocations.
    
    [ as: commit message and log edits ]
    
    Fixes: 5212e11fde4d ("nd_btt: atomic sector updates")
    Cc: [email protected]
    Signed-off-by: Abdun Nihaal <[email protected]>
    Reviewed-by: Alison Schofield <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Alison Schofield <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nvme-multipath: fix flex array size in struct nvme_ns_head [+ + +]
Author: Nilay Shroff <[email protected]>
Date:   Wed May 27 11:50:00 2026 +0530

    nvme-multipath: fix flex array size in struct nvme_ns_head
    
    [ Upstream commit 001e57554de81aa79c25c18fd53911d8a415c304 ]
    
    struct nvme_ns_head contains a flexible array member, current_path[],
    which is indexed using the NUMA node ID:
    head->current_path[numa_node_id()]
    
    The structure is currently allocated as:
    size = sizeof(struct nvme_ns_head) +
           (num_possible_nodes() * sizeof(struct nvme_ns *));
    head = kzalloc(size, GFP_KERNEL);
    
    This allocation assumes that NUMA node IDs are sequential and densely
    packed from 0 .. num_possible_nodes() - 1. While this assumption holds
    on many systems, it is not always true on some architectures such as
    powerpc.
    
    On some powerpc systems, NUMA node IDs can be sparse. For example:
    NUMA:
      NUMA node(s):              6
      NUMA node0 CPU(s):         80-159
      NUMA node8 CPU(s):         0-79
      NUMA node252 CPU(s):
      NUMA node253 CPU(s):
      NUMA node254 CPU(s):
      NUMA node255 CPU(s):
    
    That is, the possible/online NUMA node IDs are: 0, 8, 252, 253, 254, 255
    In this case: num_possible_nodes() = 6
    
    So memory is allocated for only 6 entries in current_path[]. However,
    the array is later indexed using the actual NUMA node ID. As a result,
    accesses such as:
    head->current_path[8] or
    head->current_path[252]
    goes out of bounds, leading to the following KASAN splat:
    
    ==================================================================
    BUG: KASAN: slab-out-of-bounds in nvme_mpath_revalidate_paths+0x22c/0x290 [nvme_core]
    Write of size 8 at addr c00020003bda35b8 by task kworker/u641:2/1997
    
    CPU: 1 UID: 0 PID: 1997 Comm: kworker/u641:2 Not tainted 7.1.0-rc5-dirty #14 PREEMPT(lazy)
    Hardware name: 8335-GTH POWER9 0x4e1202 opal:skiboot-v6.5.3-35-g1851b2a06 PowerNV
    Workqueue: async async_run_entry_fn
    Call Trace:
    [c000200037fa7510] [c0000000021c23d4] dump_stack_lvl+0x88/0xdc (unreliable)
    [c000200037fa7540] [c0000000009fda90] print_report+0x22c/0x67c
    [c000200037fa7630] [c0000000009fd508] kasan_report+0x108/0x220
    [c000200037fa7740] [c0000000009fff48] __asan_store8+0xe8/0x120
    [c000200037fa7760] [c008000018e76474] nvme_mpath_revalidate_paths+0x22c/0x290 [nvme_core]
    [c000200037fa7800] [c008000018e6556c] nvme_update_ns_info+0x4a4/0x5e0 [nvme_core]
    [c000200037fa7a50] [c008000018e66270] nvme_alloc_ns+0x6d8/0x1a70 [nvme_core]
    [c000200037fa7c20] [c008000018e679fc] nvme_scan_ns+0x3f4/0x630 [nvme_core]
    [c000200037fa7d10] [c00000000031f22c] async_run_entry_fn+0x9c/0x3a0
    [c000200037fa7db0] [c0000000002fa544] process_one_work+0x414/0xa10
    [c000200037fa7ec0] [c0000000002fbf00] worker_thread+0x320/0x640
    [c000200037fa7f80] [c00000000030d0f8] kthread+0x278/0x290
    [c000200037fa7fe0] [c00000000000ded8] start_kernel_thread+0x14/0x18
    
    Allocated by task 1997 on cpu 1 at 35.928317s:
    
    The buggy address belongs to the object at c00020003bda3000
     which belongs to the cache kmalloc-rnd-15-2k of size 2048
    The buggy address is located 16 bytes to the right of
     allocated 1448-byte region [c00020003bda3000, c00020003bda35a8)
    
    The buggy address belongs to the physical page:
    
    Memory state around the buggy address:
     c00020003bda3480: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     c00020003bda3500: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    >c00020003bda3580: 00 00 00 00 00 fc fc fc fc fc fc fc fc fc fc fc
                                            ^
     c00020003bda3600: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
     c00020003bda3680: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    ==================================================================
    
    Fix this by allocating the flexible array using nr_node_ids instead
    of num_possible_nodes(). Since nr_node_ids represents the maximum
    possible NUMA node IDs, indexing current_path[] using numa_node_id()
    becomes safe even on systems with sparse node IDs.
    
    Fixes: f333444708f8 ("nvme: take node locality into account when selecting a path")
    Tested-by: Mukesh Kumar Chaurasiya (IBM) <[email protected]>
    Reviewed-by: Mukesh Kumar Chaurasiya (IBM) <[email protected]>
    Reviewed-by: Hannes Reinecke <[email protected]>
    Reviewed-by: John Garry <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Nilay Shroff <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nvmet-rdma: handle inline data with a nonzero offset [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Thu Jun 4 19:36:54 2026 +0000

    nvmet-rdma: handle inline data with a nonzero offset
    
    commit 48c0162f647bb47e6084ffbc71b8f213f5e2f4f8 upstream.
    
    nvmet_rdma_use_inline_sg() maps the host-controlled inline data offset
    into the per-command inline scatterlist.  The bounds check admits any
    offset with off + len <= inline_data_size, but the mapping still assumes
    the data begins in the first inline page:
    
            sg->offset = off;
            sg->length = min_t(int, len, PAGE_SIZE - off);
    
    When a port is configured with inline_data_size > PAGE_SIZE (settable up
    to max(SZ_16K, PAGE_SIZE)), an offset in (PAGE_SIZE, inline_data_size]
    makes "PAGE_SIZE - off" underflow, so sg->length is set to ~4 GiB and
    the block backend reads far past the first inline page.  num_pages(len)
    also ignores the offset, so an in-bounds offset whose [off, off+len)
    span crosses a page boundary under-counts the scatterlist.
    
    Map the offset properly: split it into a page index and an in-page
    offset, start the scatterlist at that page, and size the page count from
    page_off + len.  Because the request scatterlist may now start at
    inline_sg[page_idx] rather than inline_sg[0], generalize the inline-SGL
    identity test in nvmet_rdma_release_rsp() to a range test; otherwise the
    persistent inline scatterlist is mistaken for an allocated one and
    nvmet_req_free_sgls() frees an inline page (and warns in
    free_large_kmalloc()).
    
    Fixes: 0d5ee2b2ab4f ("nvmet-rdma: support max(16KB, PAGE_SIZE) inline data")
    Cc: [email protected]
    Suggested-by: Keith Busch <[email protected]>
    Reported-by: Bryam Vargas <[email protected]>
    Signed-off-by: Bryam Vargas <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nvmet-tcp: check INIT_FAILED before nvmet_req_uninit in digest error path [+ + +]
Author: Shivam Kumar <[email protected]>
Date:   Mon Jul 20 09:54:15 2026 -0400

    nvmet-tcp: check INIT_FAILED before nvmet_req_uninit in digest error path
    
    commit 4606467a75cfc16721937272ed29462a750b60c8 upstream.
    
    In nvmet_tcp_try_recv_ddgst(), when a data digest mismatch is detected,
    nvmet_req_uninit() is called unconditionally. However, if the command
    arrived via the nvmet_tcp_handle_req_failure() path, nvmet_req_init()
    had returned false and percpu_ref_tryget_live() was never executed. The
    unconditional percpu_ref_put() inside nvmet_req_uninit() then causes a
    refcount underflow, leading to a WARNING in
    percpu_ref_switch_to_atomic_rcu, a use-after-free diagnostic, and
    eventually a permanent workqueue deadlock.
    
    Check cmd->flags & NVMET_TCP_F_INIT_FAILED before calling
    nvmet_req_uninit(), matching the existing pattern in
    nvmet_tcp_execute_request().
    
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Shivam Kumar <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    [shivam: inlined nvmet_tcp_finish_cmd() at the fix site for 5.10.y]
    Signed-off-by: Shivam Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

nvmet-tcp: fix race between ICReq handling and queue teardown [+ + +]
Author: Chaitanya Kulkarni <[email protected]>
Date:   Thu Jul 2 20:38:39 2026 +0800

    nvmet-tcp: fix race between ICReq handling and queue teardown
    
    commit 5293a8882c549fab4a878bc76b0b6c951f980a61 upstream.
    
    nvmet_tcp_handle_icreq() updates queue->state after sending an
    Initialization Connection Response (ICResp), but it does so without
    serializing against target-side queue teardown.
    
    If an NVMe/TCP host sends an Initialization Connection Request
    (ICReq) and immediately closes the connection, target-side teardown
    may start in softirq context before io_work drains the already
    buffered ICReq. In that case, nvmet_tcp_schedule_release_queue()
    sets queue->state to NVMET_TCP_Q_DISCONNECTING and drops the queue
    reference under state_lock.
    
    If io_work later processes that ICReq, nvmet_tcp_handle_icreq() can
    still overwrite the state back to NVMET_TCP_Q_LIVE. That defeats the
    DISCONNECTING-state guard in nvmet_tcp_schedule_release_queue() and
    allows a later socket state change to re-enter teardown and issue a
    second kref_put() on an already released queue.
    
    The ICResp send failure path has the same problem. If teardown has
    already moved the queue to DISCONNECTING, a send error can still
    overwrite the state with NVMET_TCP_Q_FAILED, again reopening the
    window for a second teardown path to drop the queue reference.
    
    Fix this by serializing both post-send state transitions with
    state_lock and bailing out if teardown has already started.
    
    Use -ESHUTDOWN as an internal sentinel for that bail-out path rather
    than propagating it as a transport error like -ECONNRESET. Keep
    nvmet_tcp_socket_error() setting rcv_state to NVMET_TCP_RECV_ERR before
    honoring that sentinel so receive-side parsing stays quiesced until the
    existing release path completes.
    
    Fixes: c46a6465bac2 ("nvmet-tcp: add NVMe over TCP target driver")
    Cc: [email protected]
    Reported-by: Shivam Kumar <[email protected]>
    Tested-by: Shivam Kumar <[email protected]>
    Signed-off-by: Chaitanya Kulkarni <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    [ context diff adaptation: drop `queue->state = NVMET_TCP_Q_FAILED` since
     the enum introduced in 6.7, 675b453e0241 ("nvmet-tcp: enable TLS handshake
     upcall" ]
    Signed-off-by: Philo Lu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
 
ocfs2/dlm: require a ref for locking_state debugfs open [+ + +]
Author: Zhang Cen <[email protected]>
Date:   Sun May 31 12:47:14 2026 +0800

    ocfs2/dlm: require a ref for locking_state debugfs open
    
    [ Upstream commit 03ad858ce8064861ea580021976dc19b7aabb549 ]
    
    debug_lockres_open() copies inode->i_private into struct debug_lockres and
    debug_lockres_release() later drops that pointer with dlm_put().  That
    only works if open successfully pins the struct dlm_ctxt.
    
    Today open calls dlm_grab(dlm) but ignores its return value.  Once the
    last domain unregister has removed the context from dlm_domains,
    dlm_grab() returns NULL, yet open still stores the raw pointer and returns
    success.  The later release path is outside the debugfs removal barrier,
    so it can call dlm_put() after dlm_free_ctxt_mem() has freed the context.
    KASAN reports this as a slab-use-after-free in dlm_put() called from
    debug_lockres_release().
    
    Fail the open when dlm_grab() cannot acquire the reference and unwind the
    seq_file private state before returning.  That keeps locking_state from
    handing out a file descriptor whose release path does not own the
    dlm_ctxt.
    
    The buggy scenario involves two paths, with each column showing the order
    within that path:
    
    locking_state debugfs open:          last domain unregister:
    1. debug_lockres_open() reads        1. dlm_unregister_domain() calls
       inode->i_private.                    dlm_complete_dlm_shutdown().
    2. debug_lockres_open() calls        2. shutdown removes the dlm_ctxt from
       dlm_grab(dlm) and gets NULL.         dlm_domains.
    3. open still stores the raw dlm     3. final teardown reaches
       pointer in dl->dl_ctxt and           dlm_free_ctxt_mem() and frees it.
       returns success.
    4. debug_lockres_release() later
       calls dlm_put(dl->dl_ctxt).
    
    Validation reproduced this kernel report:
    KASAN slab-use-after-free in dlm_put+0x82/0x200
    RIP: 0033:0x7f4d349bc9e0
    The buggy address belongs to the object at ffff888103a3c000 which belongs
    to the cache kmalloc-2k of size 2048
    The buggy address is located 816 bytes inside of freed 2048-byte region
    [ffff888103a3c000, ffff888103a3c800)
    Write of size 4
    Call trace:
      dump_stack_lvl+0x66/0xa0 (?:?)
      print_report+0xd0/0x630 (?:?)
      dlm_put+0x82/0x200 (?:?)
      srso_alias_return_thunk+0x5/0xfbef5 (?:?)
      __virt_addr_valid+0x188/0x2f0 (?:?)
      kasan_report+0xe4/0x120 (?:?)
      kasan_check_range+0x105/0x1b0 (?:?)
      debug_lockres_release+0x53/0x80 (fs/ocfs2/dlm/dlmdebug.c:587)
      dlm_put+0x9/0x200 (?:?)
      debug_lockres_release+0x5c/0x80 (fs/ocfs2/dlm/dlmdebug.c:587)
      full_proxy_release+0x67/0x90 (?:?)
      __fput+0x1df/0x4b0 (?:?)
      do_raw_spin_lock+0x10f/0x1b0 (?:?)
      fput_close_sync+0xd2/0x170 (?:?)
      __x64_sys_close+0x55/0x90 (?:?)
      do_syscall_64+0x10c/0x640 (arch/x86/entry/syscall_64.c:87)
      irqentry_exit+0xac/0x6e0 (?:?)
      entry_SYSCALL_64_after_hwframe+0x77/0x7f (?:?)
    Freed by task stack:
      kasan_save_stack+0x33/0x60 (?:?)
      kasan_save_track+0x14/0x30 (?:?)
      kasan_save_free_info+0x3b/0x60 (?:?)
      __kasan_slab_free+0x5f/0x80 (?:?)
      kfree+0x30f/0x580 (?:?)
      dlm_put+0x1ce/0x200 (?:?)
      dlm_unregister_domain+0xf6/0xb30 (?:?)
      o2cb_cluster_disconnect+0x6b/0x90 (?:?)
      ocfs2_cluster_disconnect+0x41/0x70 (?:?)
      ocfs2_dlm_shutdown+0x1c4/0x220 (?:?)
      ocfs2_dismount_volume+0x38a/0x550 (?:?)
      generic_shutdown_super+0xc3/0x220 (?:?)
      kill_block_super+0x29/0x60 (?:?)
      deactivate_locked_super+0x66/0xe0 (?:?)
      cleanup_mnt+0x13d/0x210 (?:?)
      task_work_run+0xfa/0x170 (?:?)
      exit_to_user_mode_loop+0xd6/0x430 (?:?)
      do_syscall_64+0x3cb/0x640 (arch/x86/entry/syscall_64.c:87)
      entry_SYSCALL_64_after_hwframe+0x77/0x7f (?:?)
    
    Link: https://lore.kernel.org/[email protected]
    Fixes: 4e3d24ed1a12 ("ocfs2/dlm: Dumps the lockres' into a debugfs file")
    Assisted-by: Codex:gpt-5.5
    Signed-off-by: Zhang Cen <[email protected]>
    Reviewed-by: Joseph Qi <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: Heming Zhao <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ocfs2: avoid moving extents to occupied clusters [+ + +]
Author: Kyle Zeng <[email protected]>
Date:   Thu Jun 11 14:35:10 2026 -0700

    ocfs2: avoid moving extents to occupied clusters
    
    commit 22920541c35a9f23f219038ba5874c843a7c4419 upstream.
    
    For non-auto OCFS2_IOC_MOVE_EXT operations, userspace supplies a physical
    me_goal.  ocfs2_move_extent() initializes new_phys_cpos from that goal and
    expects ocfs2_probe_alloc_group() to replace it with a free run in the
    target block group.
    
    The probe currently leaves *phys_cpos unchanged if the scan reaches the
    end of the group without finding a free run.  An occupied goal at the last
    bit can therefore survive the probe and be passed to
    __ocfs2_move_extent(), which copies file data into a cluster still owned
    by another inode before the bitmap is updated.
    
    When the probe does find a free run, it also subtracts move_len from the
    ending bit.  The start of an N-bit run ending at i is i - N + 1, so the
    current calculation can report the bit immediately before the free run.
    
    Clear *phys_cpos before scanning and use the correct free-run start.
    Callers already treat a zero result as -ENOSPC, so failed probes no longer
    continue with an occupied caller-controlled goal.
    
    Link: https://lore.kernel.org/[email protected]
    Fixes: e6b5859cccfa ("Ocfs2/move_extents: helper to probe a proper region to move in an alloc group.")
    Fixes: 236b9254f8d1 ("ocfs2: fix non-auto defrag path not working issue")
    Assisted-by: Codex:gpt-5.5
    Signed-off-by: Kyle Zeng <[email protected]>
    Reviewed-by: Joseph Qi <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: Heming Zhao <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ocfs2: don't BUG_ON an invalid journal dinode [+ + +]
Author: ZhengYuan Huang <[email protected]>
Date:   Tue May 12 10:41:15 2026 +0800

    ocfs2: don't BUG_ON an invalid journal dinode
    
    [ Upstream commit c0438198c28b1d22c272751af5e717c11d9fa8dd ]
    
    [BUG]
    A fuzzed OCFS2 image can corrupt the current slot journal dinode while
    mount is still in progress. The mount path first reports the invalid
    journal block and then crashes in shutdown:
    
    kernel BUG at fs/ocfs2/journal.c:1034!
    Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTI
    RIP: 0010:ocfs2_journal_toggle_dirty+0x2d6/0x340 fs/ocfs2/journal.c:1034
    Call Trace:
     ocfs2_journal_shutdown+0x414/0xc30 fs/ocfs2/journal.c:1116
     ocfs2_mount_volume fs/ocfs2/super.c:1785 [inline]
     ocfs2_fill_super+0x30a9/0x3cd0 fs/ocfs2/super.c:1083
     get_tree_bdev_flags+0x38b/0x640 fs/super.c:1698
     get_tree_bdev+0x24/0x40 fs/super.c:1721
     ocfs2_get_tree+0x21/0x30 fs/ocfs2/super.c:1184
     vfs_get_tree+0x9a/0x370 fs/super.c:1758
     fc_mount fs/namespace.c:1199 [inline]
     do_new_mount_fc fs/namespace.c:3642 [inline]
     do_new_mount fs/namespace.c:3718 [inline]
     path_mount+0x5b8/0x1ea0 fs/namespace.c:4028
     do_mount fs/namespace.c:4041 [inline]
     __do_sys_mount fs/namespace.c:4229 [inline]
     __se_sys_mount fs/namespace.c:4206 [inline]
     __x64_sys_mount+0x282/0x320 fs/namespace.c:4206
     ...
    
    [CAUSE]
    ocfs2_journal_toggle_dirty() used to return -EIO when journal->j_bh no
    longer contained a valid dinode, because the startup and shutdown paths
    already handled that failure. Commit 10995aa2451a
    ("ocfs2: Morph the haphazard OCFS2_IS_VALID_DINODE() checks.") changed
    the check to a BUG_ON() under the assumption that the journal dinode had
    already been validated. That turns an unexpected invalid journal dinode
    during mount teardown into a kernel crash instead of a normal mount
    failure.
    
    [FIX]
    Replace the BUG_ON() with WARN_ON() and return -EIO. This keeps the
    invariant warning for debugging, but restores the original behavior of
    failing startup or shutdown cleanly instead of panicking the kernel.
    
    Link: https://lore.kernel.org/[email protected]
    Fixes: 10995aa2451a ("ocfs2: Morph the haphazard OCFS2_IS_VALID_DINODE() checks.")
    Signed-off-by: ZhengYuan Huang <[email protected]>
    Reviewed-by: Joseph Qi <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: Heming Zhao <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ocfs2: fix buffer head management in ocfs2_read_blocks() [+ + +]
Author: Dmitry Antipov <[email protected]>
Date:   Fri May 29 12:41:28 2026 +0300

    ocfs2: fix buffer head management in ocfs2_read_blocks()
    
    [ Upstream commit 6371a07148ee979af22a9d6f4c277462953a9a4a ]
    
    In ocfs2_read_blocks(), caller should't assume that buffer head returned
    by 'sb_getblk()' is exclusively owned and so 'put_bh()' always drops
    b_count from 1 to 0.  If it is not so, buffer head remains on hold and
    likely to be returned by the next call to 'sb_getblk()' unchanged - that
    is, with BH_Uptodate bit set even if it has failed validation previously,
    thus allowing to insert that buffer head into OCFS2 metadata cache and
    submit it to upper layers.  To avoid such a scenario, BH_Uptodate should
    be cleared immediately after 'validate()' callback has detected some data
    inconsistency.
    
    Link: https://lore.kernel.org/[email protected]
    Fixes: cf76c78595ca ("ocfs2: don't put and assigning null to bh allocated outside")
    Signed-off-by: Dmitry Antipov <[email protected]>
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=caacd220635a9cc3bac9
    Reviewed-by: Joseph Qi <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: Heming Zhao <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ocfs2: fix circular locking dependency in ocfs2_dio_end_io_write [+ + +]
Author: Aleksandr Nogikh <[email protected]>
Date:   Fri Jun 12 11:50:20 2026 +0000

    ocfs2: fix circular locking dependency in ocfs2_dio_end_io_write
    
    [ Upstream commit ff6f26c58421614b02694ac9d219ac61d924bc68 ]
    
    A circular locking dependency involves INODE_ALLOC_SYSTEM_INODE,
    EXTENT_ALLOC_SYSTEM_INODE, and ORPHAN_DIR_SYSTEM_INODE.
    
    1. ocfs2_mknod() acquires INODE_ALLOC then EXTENT_ALLOC.
    
    2. ocfs2_dio_end_io_write() acquires EXTENT_ALLOC for unwritten
       extents, then ORPHAN_DIR via ocfs2_del_inode_from_orphan() while still
       holding EXTENT_ALLOC.
    
    3. ocfs2_wipe_inode() acquires ORPHAN_DIR then INODE_ALLOC via
       ocfs2_remove_inode.
    
    Break the cycle in ocfs2_dio_end_io_write() by freeing the allocation
    contexts (releasing EXTENT_ALLOC) before acquiring ORPHAN_DIR.
    
    WARNING: possible circular locking dependency detected
    ------------------------------------------------------
    is trying to acquire lock:
    ffff8881e78b33a0
    (&ocfs2_sysfile_lock_key[INODE_ALLOC_SYSTEM_INODE]){+.+.}-{4:4}, at:
    ocfs2_evict_inode+0x1539/0x43b0 fs/ocfs2/inode.c:1299
    
    but task is already holding lock:
    ffff8881e78b4fa0
    (&ocfs2_sysfile_lock_key[ORPHAN_DIR_SYSTEM_INODE]){+.+.}-{4:4}, at:
    ocfs2_evict_inode+0xe97/0x43b0 fs/ocfs2/inode.c:1299
    
    the existing dependency chain (in reverse order) is:
    
    -> #2 (&ocfs2_sysfile_lock_key[ORPHAN_DIR_SYSTEM_INODE]){+.+.}-{4:4}:
           inode_lock include/linux/fs.h:1029 [inline]
           ocfs2_del_inode_from_orphan+0x12e/0x7a0 fs/ocfs2/namei.c:2728
           ocfs2_dio_end_io+0xf9c/0x1370 fs/ocfs2/aops.c:2418
           dio_complete+0x25b/0x790 fs/direct-io.c:281
    
    -> #1 (&ocfs2_sysfile_lock_key[EXTENT_ALLOC_SYSTEM_INODE]){+.+.}-{4:4}:
           inode_lock include/linux/fs.h:1029 [inline]
           ocfs2_reserve_suballoc_bits+0x16d/0x4840 fs/ocfs2/suballoc.c:882
           ocfs2_reserve_new_metadata_blocks+0x415/0x9a0
           fs/ocfs2/suballoc.c:1078
           ocfs2_mknod+0x10f3/0x2260 fs/ocfs2/namei.c:351
    
    -> #0 (&ocfs2_sysfile_lock_key[INODE_ALLOC_SYSTEM_INODE]){+.+.}-{4:4}:
           __lock_acquire+0x15a5/0x2cf0 kernel/locking/lockdep.c:5237
           lock_acquire+0x106/0x350 kernel/locking/lockdep.c:5868
           down_write+0x96/0x200 kernel/locking/rwsem.c:1625
           inode_lock include/linux/fs.h:1029 [inline]
           ocfs2_remove_inode fs/ocfs2/inode.c:733 [inline]
           ocfs2_wipe_inode fs/ocfs2/inode.c:896 [inline]
           ocfs2_delete_inode fs/ocfs2/inode.c:1157 [inline]
           ocfs2_evict_inode+0x1539/0x43b0 fs/ocfs2/inode.c:1299
    
    Chain exists of:
      &ocfs2_sysfile_lock_key[INODE_ALLOC_SYSTEM_INODE] -->
      &ocfs2_sysfile_lock_key[EXTENT_ALLOC_SYSTEM_INODE] -->
      &ocfs2_sysfile_lock_key[ORPHAN_DIR_SYSTEM_INODE]
    
     Possible unsafe locking scenario:
    
           CPU0                    CPU1
           ----                    ----
      lock(&ocfs2_sysfile_lock_key[ORPHAN_DIR_SYSTEM_INODE]);
                                   lock(&ocfs2_sysfile_lock_key[EXTENT_ALLOC_SYSTEM_INODE]);
                                   lock(&ocfs2_sysfile_lock_key[ORPHAN_DIR_SYSTEM_INODE]);
      lock(&ocfs2_sysfile_lock_key[INODE_ALLOC_SYSTEM_INODE]);
    
     *** DEADLOCK ***
    
    Link: https://lore.kernel.org/[email protected]
    Fixes: d647c5b2fbf8 ("ocfs2: split transactions in dio completion to avoid credit exhaustion")
    Assisted-by: Gemini:gemini-3.1-pro-preview Gemini:gemini-3-flash-preview syzbot
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=b225d4dfce6219600c42
    Link: https://syzkaller.appspot.com/ai_job?id=0b53ce1e-2972-4192-aa85-8097a702762c
    Signed-off-by: Aleksandr Nogikh <[email protected]>
    Reviewed-by: Heming Zhao <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Joseph Qi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ocfs2: fix NULL h_transaction deref in ocfs2_assure_trans_credits [+ + +]
Author: Ian Bridges <[email protected]>
Date:   Thu Jun 11 09:46:38 2026 -0500

    ocfs2: fix NULL h_transaction deref in ocfs2_assure_trans_credits
    
    commit f9ab30c96b0f00c20c6dac93681bdae3a033d229 upstream.
    
    [BUG]
    A direct write over unwritten extents can panic the kernel in
    ocfs2_assure_trans_credits() when the journal aborts during DIO
    completion. The crash is a general protection fault from a NULL pointer
    dereference.
    
    [CAUSE]
    ocfs2_dio_end_io_write() loops over a direct write's unwritten extents,
    marking each written under a single journal handle. If the journal
    aborts (for example after an I/O error) while the extent tree is being
    updated, the handle is left aborted with its transaction pointer
    cleared. The extent merge treats that failure as not critical and
    reports success, so the loop keeps using the handle.
    ocfs2_assure_trans_credits() reads the handle's remaining credits
    without first checking whether the handle is aborted, and that read
    dereferences the cleared transaction pointer.
    
    [FIX]
    A journal abort is recorded in the handle itself, so callers are
    expected to test the handle rather than rely on a returned error.
    Make ocfs2_assure_trans_credits() do that, as the other ocfs2 journal
    helpers already do, and return -EROFS when the handle is aborted.
    
    Link: https://lore.kernel.org/airKTsM1fRVN-Wj7@dev
    Fixes: be346c1a6eeb ("ocfs2: fix DIO failure due to insufficient transaction credits")
    Signed-off-by: Ian Bridges <[email protected]>
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=e9c15ff790cea6a0cfae
    Reviewed-by: Joseph Qi <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: Heming Zhao <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ocfs2: fix race between ocfs2_control_install_private() and ocfs2_control_release() [+ + +]
Author: Joseph Qi <[email protected]>
Date:   Mon Jun 1 20:16:18 2026 +0800

    ocfs2: fix race between ocfs2_control_install_private() and ocfs2_control_release()
    
    [ Upstream commit 57dcfd9049d497c31151787a0696d59f0a98f8e6 ]
    
    Move atomic_inc(&ocfs2_control_opened) and the handshake state update
    inside ocfs2_control_lock to close a race window where
    ocfs2_control_release() can observe ocfs2_control_opened dropping to zero
    (resetting ocfs2_control_this_node and running_proto) while
    ocfs2_control_install_private() is about to bump the counter and mark the
    connection valid.
    
    Link: https://lore.kernel.org/[email protected]
    Fixes: 3cfd4ab6b6b4 ("ocfs2: Add the local node id to the handshake.")
    Signed-off-by: Joseph Qi <[email protected]>
    Reported-by: Ginger <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: Heming Zhao <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ocfs2: kill osb->system_file_mutex lock [+ + +]
Author: Tetsuo Handa <[email protected]>
Date:   Mon May 18 13:23:40 2026 +0900

    ocfs2: kill osb->system_file_mutex lock
    
    [ Upstream commit f5b1910e23f1233c8d4185268b2e659df2bc5dbf ]
    
    Commit 43b10a20372d ("ocfs2: avoid system inode ref confusion by adding
    mutex lock") tried to avoid a refcount leak caused by allowing multiple
    threads to call igrab(inode).  But addition of osb->system_file_mutex made
    locking dependency complicated and is causing lockdep to warn about
    possibility of AB-BA deadlock.
    
    Since _ocfs2_get_system_file_inode() returns the same inode for the same
    input arguments, we don't need to serialize
    _ocfs2_get_system_file_inode().  What we need to make sure is that
    igrab(inode) is called for only once().  Therefore, replace
    osb->system_file_mutex with cmpxchg()-based locking.
    
    Link: https://lore.kernel.org/[email protected]
    Fixes: 43b10a20372d ("ocfs2: avoid system inode ref confusion by adding mutex lock")
    Signed-off-by: Tetsuo Handa <[email protected]>
    Reviewed-by: Heming Zhao <[email protected]>
    Acked-by: Joseph Qi <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ocfs2: rebase copied fsdlm LVB pointers in locking_state [+ + +]
Author: Zhang Cen <[email protected]>
Date:   Mon May 25 12:17:26 2026 +0800

    ocfs2: rebase copied fsdlm LVB pointers in locking_state
    
    [ Upstream commit 93612d48fa42b3d1a637eb9279e15281c611c000 ]
    
    The locking_state debugfs iterator snapshots struct ocfs2_lock_res by
    value under ocfs2_dlm_tracking_lock and later formats that copy in
    ocfs2_dlm_seq_show().  That is fine for the inline fields, but the
    userspace fsdlm stack stores the LVB through lksb_fsdlm.sb_lvbptr.  Once
    the iterator drops the tracking lock, a copied non-NULL sb_lvbptr still
    points into the original lockres owner, so teardown can free that
    container before the debugfs dump walks the raw LVB bytes.
    
    Rebase the copied sb_lvbptr to the copied l_lksb before dumping the raw
    LVB.  The seq snapshot already carries the inline LVB storage reserved in
    struct ocfs2_dlm_lksb, so the debugfs reader can dump the copied bytes
    without borrowing the original lockres lifetime.
    
    The buggy scenario involves two paths, with each column showing the order
    within that path:
    
    locking_state reader:                  lockres teardown:
    1. ocfs2_dlm_seq_start()/next()        1. file release or another owner
       copies struct ocfs2_lock_res           teardown reaches
    2. ocfs2_dlm_seq_show() formats           ocfs2_lock_res_free()
       the copied row                      2. the lockres is removed from the
    3. ocfs2_dlm_lvb() follows the            tracking list
       copied sb_lvbptr                   3. the owner frees the original
                                              lockres container
    
    Validation reproduced this kernel report:
    KASAN slab-use-after-free in ocfs2_dlm_seq_show+0x1bd/0x430
    RIP: 0033:0x7f8ec4b1e29d
    The buggy address belongs to the object at ffff88810a1e0800 which belongs
    to the cache kmalloc-1k of size 1024
    The buggy address is located 368 bytes inside of freed 1024-byte region
    [ffff88810a1e0800, ffff88810a1e0c00)
    Read of size 1
    Call trace:
      dump_stack_lvl+0x66/0xa0
      print_report+0xce/0x630
      ocfs2_dlm_seq_show+0x1bd/0x430 (fs/ocfs2/dlmglue.c:3137)
      srso_alias_return_thunk+0x5/0xfbef5
      __virt_addr_valid+0x19f/0x330
      kasan_report+0xe0/0x110
      seq_read_iter+0x29d/0x790
      seq_read+0x20a/0x280
      find_held_lock+0x2b/0x80
      rcu_read_unlock+0x18/0x70
      full_proxy_read+0x9e/0xd0
      vfs_read+0x12c/0x590
      ksys_read+0xd2/0x170
      do_user_addr_fault+0x65a/0x890
      do_syscall_64+0x115/0x6a0 (arch/x86/entry/syscall_64.c:87)
      entry_SYSCALL_64_after_hwframe+0x77/0x7f
    Allocated by task stack:
      kasan_save_stack+0x33/0x60
      kasan_save_track+0x14/0x30
      __kasan_kmalloc+0xaa/0xb0
      ocfs2_file_open+0x13e/0x300
      do_dentry_open+0x233/0x7f0
      vfs_open+0x5a/0x1b0
      path_openat+0x66d/0x1540
      do_file_open+0x186/0x2b0
      do_sys_openat2+0xce/0x150
      __x64_sys_openat+0xd0/0x140
      do_syscall_64+0x115/0x6a0 (arch/x86/entry/syscall_64.c:87)
      entry_SYSCALL_64_after_hwframe+0x77/0x7f
    Freed by task stack:
      kasan_save_stack+0x33/0x60
      kasan_save_track+0x14/0x30
      kasan_save_free_info+0x3b/0x60
      __kasan_slab_free+0x5f/0x80
      kfree+0x313/0x590
      ocfs2_file_release+0x138/0x260
      __fput+0x1df/0x4b0
      fput_close_sync+0xd2/0x170
      __x64_sys_close+0x55/0x90
      do_syscall_64+0x115/0x6a0 (arch/x86/entry/syscall_64.c:87)
      entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Link: https://lore.kernel.org/[email protected]
    Fixes: cf4d8d75d8ab ("ocfs2: add fsdlm to stackglue")
    Assisted-by: Codex:gpt-5.5
    Signed-off-by: Zhang Cen <[email protected]>
    Reviewed-by: Joseph Qi <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: Heming Zhao <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ocfs2: reject dinodes whose i_rdev disagrees with the file type [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Tue May 19 07:04:03 2026 -0400

    ocfs2: reject dinodes whose i_rdev disagrees with the file type
    
    commit 51407c2d249987a466416890a5c931a2354a46aa upstream.
    
    id1.dev1.i_rdev is the device-number arm of the ocfs2_dinode id1 union.
    It is only meaningful for character and block device inodes.  For any
    other user-visible file type the on-disk value must be zero.
    
    ocfs2_populate_inode() currently copies id1.dev1.i_rdev into inode->i_rdev
    before the S_IFMT switch decides whether the inode is a special file.  A
    non-device inode with a non-zero i_rdev can therefore publish stale or
    attacker-controlled device state into the in-core inode.
    
    System inodes legitimately use other arms of the same union, so keep the
    cross-check restricted to non-system inodes.  Factor that predicate into a
    helper and use it in both the normal validator and online filecheck path;
    filecheck reports the malformed dinode through
    OCFS2_FILECHECK_ERR_INVALIDINO instead of ocfs2_error().
    
    Link: https://lore.kernel.org/[email protected]
    Fixes: b657c95c1108 ("ocfs2: Wrap inode block reads in a dedicated function.")
    Signed-off-by: Michael Bommarito <[email protected]>
    Assisted-by: Claude:claude-opus-4-7
    Reviewed-by: Joseph Qi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Heming Zhao <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ocfs2: reject dinodes with non-canonical i_mode type [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Tue May 19 07:04:02 2026 -0400

    ocfs2: reject dinodes with non-canonical i_mode type
    
    commit 5366a017099c6a3c443be908a05f26fd72af12a1 upstream.
    
    Patch series "ocfs2: harden inode validators against forged metadata", v2.
    
    This series adds three structural checks to OCFS2 dinode validation so
    malformed on-disk fields are rejected before ocfs2_populate_inode() copies
    them into the in-core inode.
    
    The checks cover:
    
      - i_mode values whose type bits do not name a canonical POSIX file
        type;
      - non-device dinodes whose id1.dev1.i_rdev field is non-zero; and
      - non-inline dinodes that claim non-zero i_size while i_clusters is
        zero, covering directories unconditionally and regular files on
        non-sparse volumes.
    
    The normal read path reports these through ocfs2_error(), matching the
    existing suballoc-slot, inline-data, chain-list, and refcount checks.  The
    online filecheck path uses the same structural predicates but keeps its
    own reporting contract, returning OCFS2_FILECHECK_ERR_INVALIDINO instead
    of calling ocfs2_error().
    
    
    This patch (of 3):
    
    ocfs2_validate_inode_block() currently accepts any non-zero i_mode value.
    ocfs2_populate_inode() then copies that mode verbatim into inode->i_mode
    and dispatches on i_mode & S_IFMT to the file/dir/symlink/special_file
    iops; an unrecognised type falls through to ocfs2_special_file_iops and
    init_special_inode().
    
    Reject dinodes whose type bits do not name one of the seven canonical
    POSIX file types.  Use fs_umode_to_ftype(), the same generic file-type
    conversion helper OCFS2 already uses for directory entries, so the
    accepted inode type set matches the kernel file-type vocabulary instead of
    open-coding a local switch.
    
    Apply the same structural check to the online filecheck read path.
    filecheck keeps its own error namespace, so it reports malformed i_mode
    through the filecheck logger and OCFS2_FILECHECK_ERR_INVALIDINO instead of
    calling ocfs2_error(), but it must not allow a malformed dinode to proceed
    into ocfs2_populate_inode().
    
    Link: https://lore.kernel.org/[email protected]
    Link: https://lore.kernel.org/[email protected]
    Fixes: b657c95c1108 ("ocfs2: Wrap inode block reads in a dedicated function.")
    Signed-off-by: Michael Bommarito <[email protected]>
    Link: https://sashiko.dev/#/patchset/20260517111015.3187935-1-michael.bommarito%40gmail.com
    Assisted-by: Claude:claude-opus-4-7
    Reviewed-by: Joseph Qi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Heming Zhao <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ocfs2: reject FITRIM ranges shorter than a cluster [+ + +]
Author: Zhang Cen <[email protected]>
Date:   Thu May 28 23:12:47 2026 +0800

    ocfs2: reject FITRIM ranges shorter than a cluster
    
    [ Upstream commit ca1afd88f5eaaff9168e1466e5401385edf59543 ]
    
    ocfs2_trim_mainbm() trims the global bitmap in cluster units, but its
    too-short range validation only checks sb->s_blocksize.
    
    On filesystems with a cluster size larger than the block size, a FITRIM
    range that is at least one block but shorter than one cluster is accepted
    and shifted down to len == 0.  The later start + len - 1 and len -= ...
    arithmetic then underflows and can drive trimming past the requested
    range.
    
    Reject ranges shorter than s_clustersize instead.  That preserves the
    existing -EINVAL behavior for requests that cannot discard even one
    allocation unit and keeps zero-cluster trims out of the group walk.
    
    Link: https://lore.kernel.org/[email protected]
    Fixes: aa89762c5480 ("ocfs2: return EINVAL if the given range to discard is less than block size")
    Assisted-by: Codex:gpt-5.5
    Signed-off-by: Zhang Cen <[email protected]>
    Reviewed-by: Joseph Qi <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: Heming Zhao <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ocfs2: reject non-inline dinodes with i_size and zero i_clusters [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Tue May 19 07:04:04 2026 -0400

    ocfs2: reject non-inline dinodes with i_size and zero i_clusters
    
    commit 7ebc672fab7a76e1e47e0f2fc1ee48118d27fde4 upstream.
    
    On a volume mounted without OCFS2_FEATURE_INCOMPAT_SPARSE_ALLOC, a
    non-inline regular file with non-zero i_size and zero i_clusters is
    structurally malformed: the extent map declares no allocated clusters yet
    the size header claims content exists.  Keep rejecting that shape, but
    express it through a shared predicate so the same invariant is available
    to normal inode reads and online filecheck.
    
    The same zero-cluster shape is also malformed for non-inline directories.
    ocfs2 directory growth allocates backing storage before advancing i_size,
    and ocfs2_dir_foreach_blk_el() later walks until ctx->pos reaches
    i_size_read(inode).  A forged directory dinode with a huge i_size and no
    clusters would repeatedly fail on holes while advancing through the
    claimed size.
    
    Sparse regular files remain exempt: on sparse-alloc volumes, truncate can
    legitimately grow i_size without allocating clusters.  System inodes and
    inline-data dinodes also retain their separate storage rules.
    
    Mirror the check in ocfs2_filecheck_validate_inode_block() as well.
    filecheck reports through its own error namespace, so malformed
    size/cluster state is logged as a filecheck invalid-inode result rather
    than via ocfs2_error(), but it must not proceed into
    ocfs2_populate_inode().
    
    Link: https://lore.kernel.org/[email protected]
    Fixes: b657c95c1108 ("ocfs2: Wrap inode block reads in a dedicated function.")
    Signed-off-by: Michael Bommarito <[email protected]>
    Link: https://sashiko.dev/#/patchset/20260517111015.3187935-1-michael.bommarito%40gmail.com
    Assisted-by: Claude:claude-opus-4-7
    Reviewed-by: Joseph Qi <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: Heming Zhao <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ocfs2: use kzalloc for quota recovery bitmap allocation [+ + +]
Author: Tristan Madani <[email protected]>
Date:   Sat Apr 18 13:10:48 2026 +0000

    ocfs2: use kzalloc for quota recovery bitmap allocation
    
    commit 93c8c6ea90be9e9df8fe14048ad4e3caad0770a6 upstream.
    
    ocfs2 quota recovery allocates a bitmap buffer with kmalloc and does not
    fully initialize it.  This can lead to use of uninitialized bits during
    quota recovery from a corrupted filesystem image.
    
    Use kzalloc instead to ensure the bitmap is zero-initialized.
    
    Link: https://lore.kernel.org/[email protected]
    Reported-by: [email protected]
    Signed-off-by: Tristan Madani <[email protected]>
    Reviewed-by: Joseph Qi <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: Heming Zhao <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
octeontx2-pf: Fix leak of SQ timestamp buffer on teardown [+ + +]
Author: Ratheesh Kannoth <[email protected]>
Date:   Mon Jun 15 08:37:04 2026 +0530

    octeontx2-pf: Fix leak of SQ timestamp buffer on teardown
    
    [ Upstream commit a056db30de92945ff8ee6033096678bfbae878e3 ]
    
    The send-queue timestamp ring is allocated with qmem_alloc() when
    timestamping is used, but otx2_free_sq_res() never freed sq->timestamps,
    leaking that memory across ifdown and device removal.  Add the missing
    qmem_free() alongside the other SQ companion buffers.
    
    Fixes: c9c12d339d93 ("octeontx2-pf: Add support for PTP clock")
    Cc: Aleksey Makarov <[email protected]>
    Signed-off-by: Ratheesh Kannoth <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
orangefs: keep the readdir entry size 64-bit in fill_from_part() [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Fri Jun 19 04:38:20 2026 -0500

    orangefs: keep the readdir entry size 64-bit in fill_from_part()
    
    commit 18227a6bc98bd0ba96ed3ce9d5b28776a5a28dfc upstream.
    
    fill_from_part() computes the size of a directory entry in size_t but
    stores it in a __u32. An entry length near U32_MAX wraps it to a small
    value, bypasses the bounds check, and is then used to index the entry,
    reading far past the directory part -- an out-of-bounds read that oopses
    the kernel.
    
    Compute the size as a u64 so it cannot truncate; the bounds check then
    rejects the entry. The trailer is supplied by the userspace client.
    
    Fixes: 480e3e532e31 ("orangefs: support very large directories")
    Cc: [email protected]
    Signed-off-by: Bryam Vargas <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Christian Brauner (Amutable) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
partitions: aix: bound the pp_count scan to the ppe array [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Sun Jun 7 06:41:43 2026 +0000

    partitions: aix: bound the pp_count scan to the ppe array
    
    commit 2dc0bfd2fe355fb930de63c2f2eb8ced8570c579 upstream.
    
    aix_partition() reads the physical volume descriptor into a fixed-size
    struct pvd and then scans its physical-partition-extent array:
    
            int numpps = be16_to_cpu(pvd->pp_count);
            ...
            for (i = 0; i < numpps; i += 1) {
                    struct ppe *p = pvd->ppe + i;
                    ...
                    lp_ix = be16_to_cpu(p->lp_ix);
    
    pvd points at a single kmalloc()'d struct pvd whose ppe[] member holds a
    fixed ARRAY_SIZE(pvd->ppe) (1016) entries, but the loop runs up to the
    on-disk pp_count.  pp_count is an unvalidated __be16 read straight from
    the descriptor, so a crafted AIX image with pp_count larger than 1016
    drives the loop to read pvd->ppe[i] past the end of the allocation (up
    to 65535 entries, ~2 MB out of bounds).
    
    The partition scan runs without mounting anything, when a block device
    with a crafted AIX/IBM partition table appears (an attacker-supplied
    image attached with losetup -P, or a device auto-scanned by udev), via
    msdos_partition() -> aix_partition().
    
    Clamp the scan to the number of entries the ppe[] array can hold.
    
    Fixes: 6ceea22bbbc8 ("partitions: add aix lvm partition support files")
    Cc: [email protected]
    Signed-off-by: Bryam Vargas <[email protected]>
    Acked-by: Philippe De Muyter <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
PCI: Add kerneldoc for pci_resize_resource() [+ + +]
Author: Ilpo Järvinen <[email protected]>
Date:   Wed Jul 15 12:32:21 2026 -0400

    PCI: Add kerneldoc for pci_resize_resource()
    
    [ Upstream commit d787018e2dfdc4c1331538e7a8717690d1b7c9b3 ]
    
    As pci_resize_resource() is meant to be used also outside of PCI core,
    document the interface with kerneldoc.
    
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Tested-by: Alex Bennée <[email protected]> # AVA, AMD GPU
    Link: https://patch.msgid.link/[email protected]
    Stable-dep-of: ee7471fe968d ("PCI: Skip Resizable BAR restore on read error")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: altera: Do not dispose parent IRQ mapping [+ + +]
Author: Mahesh Vaidya <[email protected]>
Date:   Thu Apr 30 13:43:29 2026 -0700

    PCI: altera: Do not dispose parent IRQ mapping
    
    commit 5ef4bac02189bee0b7c170e352d7a38e13fe9678 upstream.
    
    altera_pcie_irq_teardown() calls irq_dispose_mapping() on pcie->irq.
    However, pcie->irq is the parent IRQ returned by platform_get_irq(), not
    the mapping created by Altera INTx irq_domain.
    
    The Altera driver only sets the chained handler on the parent IRQ. It
    should detach that handler during teardown, but it should not dispose the
    parent IRQ mapping, which belongs to the parent interrupt controller's
    irq_domain.
    
    Drop irq_dispose_mapping(pcie->irq) from the teardown path.
    
    Note that during irqchip remove(), the child IRQs should've disposed. But
    since the chained handler itself is removed, there is no way the stale
    child IRQs (if exists) could fire. So it is safe here.
    
    Fixes: ec15c4d0d5d2 ("PCI: altera: Allow building as module")
    Signed-off-by: Mahesh Vaidya <[email protected]>
    [mani: added a note about IRQ disposal]
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Reviewed-by: Subhransu S. Prusty <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: altera: Fix resource leaks on probe failure [+ + +]
Author: Mahesh Vaidya <[email protected]>
Date:   Tue Jul 14 13:49:16 2026 -0400

    PCI: altera: Fix resource leaks on probe failure
    
    [ Upstream commit 7a94138caeb27f3c49c1dbd93bf422098925bb28 ]
    
    The chained IRQ handler is set during probe, but is only removed during the
    driver remove(). If pci_host_probe() fails, the handler and INTx IRQ
    domain remain set even though the devm-managed host bridge storage
    containing struct altera_pcie will be released, leaving the handler with
    a stale data pointer.
    
    Interrupts are also enabled before pci_host_probe() is called. If probe
    fails after that point, the controller interrupt source should be disabled
    before the chained handler and INTx domain are removed.
    
    So set the chained handler only after the INTx domain has been created.
    Disable controller interrupts during IRQ teardown, and tear the IRQ setup
    down if pci_host_probe() fails.
    
    Fixes: c63aed7334c2 ("PCI: altera: Use pci_host_probe() to register host")
    Signed-off-by: Mahesh Vaidya <[email protected]>
    [mani: commit log]
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Reviewed-by: Subhransu S. Prusty <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: controller: Use dev_fwnode() instead of of_fwnode_handle() [+ + +]
Author: Jiri Slaby (SUSE) <[email protected]>
Date:   Tue Jul 14 21:22:53 2026 -0400

    PCI: controller: Use dev_fwnode() instead of of_fwnode_handle()
    
    [ Upstream commit a103d2dede5683dabbac2c3374bc24b6a9434478 ]
    
    All irq_domain functions now accept fwnode instead of of_node. But many
    PCI controllers still extract dev to of_node and then of_node to fwnode.
    
    Instead, clean this up and simply use the dev_fwnode() helper to extract
    fwnode directly from dev. Internally, it still does dev => of_node =>
    fwnode steps, but it's now hidden from the users.
    
    In the case of altera, this also removes an unused 'node' variable that is
    only used when CONFIG_OF is enabled:
    
      drivers/pci/controller/pcie-altera.c: In function 'altera_pcie_init_irq_domain':
      drivers/pci/controller/pcie-altera.c:855:29: error: unused variable 'node' [-Werror=unused-variable]
        855 |         struct device_node *node = dev->of_node;
    
    Signed-off-by: Jiri Slaby (SUSE) <[email protected]>
    Signed-off-by: Arnd Bergmann <[email protected]>    # altera
    [bhelgaas: squash together, rebase to precede msi-parent]
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Link: https://patch.msgid.link/[email protected]
    Link: https://patch.msgid.link/[email protected]
    Stable-dep-of: f865a57896bd ("PCI: mediatek: Fix IRQ domain leak when port fails to enable")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: Fix restoring BARs on BAR resize rollback path [+ + +]
Author: Ilpo Järvinen <[email protected]>
Date:   Wed Jul 15 12:32:20 2026 -0400

    PCI: Fix restoring BARs on BAR resize rollback path
    
    [ Upstream commit 337b1b566db087347194e4543ddfdfa5645275cc ]
    
    BAR resize operation is implemented in the pci_resize_resource() and
    pbus_reassign_bridge_resources() functions. pci_resize_resource() can be
    called either from __resource_resize_store() from sysfs or directly by the
    driver for the Endpoint Device.
    
    The pci_resize_resource() requires that caller has released the device
    resources that share the bridge window with the BAR to be resized as
    otherwise the bridge window is pinned in place and cannot be changed.
    
    pbus_reassign_bridge_resources() rolls back resources if the resize
    operation fails, but rollback is performed only for the bridge windows.
    Because releasing the device resources are done by the caller of the BAR
    resize interface, these functions performing the BAR resize do not have
    access to the device resources as they were before the resize.
    
    pbus_reassign_bridge_resources() could try __pci_bridge_assign_resources()
    after rolling back the bridge windows as they were, however, it will not
    guarantee the resource are assigned due to differences in how FW and the
    kernel assign the resources (alignment of the start address and tail).
    
    To perform rollback robustly, the BAR resize interface has to be altered to
    also release the device resources that share the bridge window with the BAR
    to be resized.
    
    Also, remove restoring from the entries failed list as saved list should
    now contain both the bridge windows and device resources so the extra
    restore is duplicated work.
    
    Some drivers (currently only amdgpu) want to prevent releasing some
    resources. Add exclude_bars param to pci_resize_resource() and make amdgpu
    pass its register BAR (BAR 2 or 5), which should never be released during
    resize operation. Normally 64-bit prefetchable resources do not share a
    bridge window with the 32-bit only register BAR, but there are various
    fallbacks in the resource assignment logic which may make the resources
    share the bridge window in rare cases.
    
    This change (together with the driver side changes) is to counter the
    resource releases that had to be done to prevent resource tree corruption
    in the ("PCI: Release assigned resource before restoring them") change. As
    such, it likely restores functionality in cases where device resources were
    released to avoid resource tree conflicts which appeared to be "working"
    when such conflicts were not correctly detected by the kernel.
    
    Reported-by: Simon Richter <[email protected]>
    Link: https://lore.kernel.org/linux-pci/[email protected]/
    Reported-by: Alex Bennée <[email protected]>
    Link: https://lore.kernel.org/linux-pci/[email protected]/
    Signed-off-by: Ilpo Järvinen <[email protected]>
    [bhelgaas: squash amdgpu BAR selection from
    https: //lore.kernel.org/r/[email protected]]
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Tested-by: Alex Bennée <[email protected]> # AVA, AMD GPU
    Reviewed-by: Christian König <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Stable-dep-of: ee7471fe968d ("PCI: Skip Resizable BAR restore on read error")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: Free saved list without holding pci_bus_sem [+ + +]
Author: Ilpo Järvinen <[email protected]>
Date:   Wed Jul 15 12:32:19 2026 -0400

    PCI: Free saved list without holding pci_bus_sem
    
    [ Upstream commit 1d8a0506f69895b7cfd9d5c4546761c508231a8a ]
    
    Freeing the saved list does not require holding pci_bus_sem, so the
    critical section can be made shorter.
    
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Tested-by: Alex Bennée <[email protected]> # AVA, AMD GPU
    Link: https://patch.msgid.link/[email protected]
    Stable-dep-of: ee7471fe968d ("PCI: Skip Resizable BAR restore on read error")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: host-common: Request bus reassignment when not probe-only [+ + +]
Author: Ratheesh Kannoth <[email protected]>
Date:   Tue Apr 14 13:47:30 2026 +0530

    PCI: host-common: Request bus reassignment when not probe-only
    
    commit fda8749ba73638f5bbca3ffb39bc6861eb3b23fa upstream.
    
    pci_host_common_init() is used by several generic ECAM host drivers.
    After PCI core changes around pci_flags and preserve_config, these hosts
    no longer opted into full bus number reassignment the way they did
    before, which broke enumeration of devices on a Marvell CN106XX board.
    
    When PCI_PROBE_ONLY is not set, add PCI_REASSIGN_ALL_BUS so
    pci_scan_bridge_extend() takes the reassignment path: bus numbers can be
    assigned from firmware EA data (e.g. pci_ea_fixed_busnrs()). Skip the
    flag in probe-only mode so existing assignments are not overridden.
    
    Fixes: 7246a4520b4b ("PCI: Use preserve_config in place of pci_flags")
    Closes: https://lore.kernel.org/all/abkqm_LCd9zAM8cW@rkannoth-OptiPlex-7090/
    Signed-off-by: Ratheesh Kannoth <[email protected]>
    [mani: added stable tag]
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    [bhelgaas: add problem report link]
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Cc: [email protected]
    Cc: Vidya Sagar <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: imx6: Fix IMX6SX_GPR12_PCIE_TEST_POWERDOWN handling [+ + +]
Author: Richard Zhu <[email protected]>
Date:   Tue Jul 14 18:04:08 2026 -0400

    PCI: imx6: Fix IMX6SX_GPR12_PCIE_TEST_POWERDOWN handling
    
    [ Upstream commit aad953fb4eed0df5486cd54ccad80ac197678e01 ]
    
    The IMX6SX_GPR12_PCIE_TEST_POWERDOWN bit does not control the PCIe
    reference clock on i.MX6SX. Instead, it is part of i.MX6SX PCIe core
    reset sequence.
    
    Move the IMX6SX_GPR12_PCIE_TEST_POWERDOWN assertion/deassertion into
    the core reset functions to properly reflect its purpose. Remove the
    .enable_ref_clk() callback for i.MX6SX since it was incorrectly
    manipulating this bit.
    
    Fixes: e3c06cd063d6 ("PCI: imx6: Add initial imx6sx support")
    Signed-off-by: Richard Zhu <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: mediatek: Convert bool to single quirks entry and bitmap [+ + +]
Author: Christian Marangi <[email protected]>
Date:   Tue Jul 14 21:22:54 2026 -0400

    PCI: mediatek: Convert bool to single quirks entry and bitmap
    
    [ Upstream commit 04305367fab7ec9c98eeba315ad09c8b20abce93 ]
    
    To clean Mediatek SoC PCIe struct, convert all the bool to a bitmap and
    use a single quirks to reference all the values. This permits cleaner
    addition of new quirk without having to define a new bool in the struct.
    
    Signed-off-by: Christian Marangi <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Stable-dep-of: f865a57896bd ("PCI: mediatek: Fix IRQ domain leak when port fails to enable")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: mediatek: Fix IRQ domain leak when port fails to enable [+ + +]
Author: Manivannan Sadhasivam <[email protected]>
Date:   Tue Jul 14 21:22:55 2026 -0400

    PCI: mediatek: Fix IRQ domain leak when port fails to enable
    
    [ Upstream commit f865a57896bd92d7662eb2818d8f48872e2cbbc7 ]
    
    When mtk_pcie_enable_port() fails, mtk_pcie_port_free() removes the port
    from pcie->ports and frees the port structure. However, the IRQ domains set
    up earlier by mtk_pcie_init_irq_domain() are never freed.
    
    Fix this by refactoring mtk_pcie_irq_teardown() into a per-port helper,
    mtk_pcie_irq_teardown_port(), and calling it from mtk_pcie_setup() when
    mtk_pcie_enable_port() fails. Since the IRQ teardown must only happen in
    the probe error path (during resume, child devices may have active MSI
    mappings and the NOIRQ context prohibits sleeping locks),
    mtk_pcie_enable_port() is changed to return an error code so callers can
    distinguish the two paths and act accordingly.
    
    This issue was reported by Sashiko while reviewing the EcoNet EN7528 SoC
    support series.
    
    Fixes: b099631df160 ("PCI: mediatek: Add controller support for MT2712 and MT7622")
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Cc: [email protected] # 5.10
    Cc: Caleb James DeLisle <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: mediatek: Fix operator precedence in PCIE_FTS_NUM_L0 macro [+ + +]
Author: Li RongQing <[email protected]>
Date:   Thu May 14 20:55:52 2026 -0400

    PCI: mediatek: Fix operator precedence in PCIE_FTS_NUM_L0 macro
    
    [ Upstream commit 282305d7e9c0e27fd8b4df34b7cd5506a1eccdd6 ]
    
    The original PCIE_FTS_NUM_L0(x) macro was buggy due to improper operator
    precedence, where ((x) & 0xff << 8) was evaluated as ((x) & 0xff00).
    
    Instead of just fixing the parentheses, use the standard FIELD_PREP()
    macro. This makes the code more robust by automatically handling masks
    and shifts, while also adding compile-time type and range checking to
    ensure the value fits within PCIE_FTS_NUM_MASK.
    
    Fixes: 637cfacae96f ("PCI: mediatek: Add MediaTek PCIe host controller support")
    Signed-off-by: Li RongQing <[email protected]>
    [mani: added the bitfield header include spotted by Sashiko]
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Reviewed-by: Krzysztof Wilczyński <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

PCI: mediatek: Fix possible truncation in mtk_pcie_parse_port() [+ + +]
Author: Ryder Lee <[email protected]>
Date:   Mon Mar 2 17:46:48 2026 -0800

    PCI: mediatek: Fix possible truncation in mtk_pcie_parse_port()
    
    [ Upstream commit ab4a4043db1fcc4fd4c5745c5be8caf053502e29 ]
    
    As reported by the W=1 warning below, content of the 'name' variable might
    get truncated with the existing size of 10 bytes. Though it is not
    practically possible to exceed the 10 bytes size, increase it to 20 to
    silence the warning for a clean W=1 build:
    
      $ make W=1 drivers/pci/controller/pcie-mediatek.o
        CALL    scripts/checksyscalls.sh
        DESCEND objtool
        INSTALL libsubcmd_headers
        CC      drivers/pci/controller/pcie-mediatek.o
      drivers/pci/controller/pcie-mediatek.c: In function ‘mtk_pcie_parse_port’:
      drivers/pci/controller/pcie-mediatek.c:963:43: error: ‘%d’ directive output may be truncated writing between 1 and 10 bytes into a region of size 6 [-Werror=format-truncation=]
        963 |         snprintf(name, sizeof(name), "port%d", slot);
            |                                           ^~
      drivers/pci/controller/pcie-mediatek.c:963:38: note: directive argument in the range [0, 2147483647]
        963 |         snprintf(name, sizeof(name), "port%d", slot);
            |                                      ^~~~~~~~
      drivers/pci/controller/pcie-mediatek.c:963:9: note: ‘snprintf’ output between 6 and 15 bytes into a destination of size 10
        963 |         snprintf(name, sizeof(name), "port%d", slot);
            |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Signed-off-by: Ryder Lee <[email protected]>
    [mani: commit log]
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Link: https://patch.msgid.link/b835e360b42c5e0994f9301a34dbdf140a8d3ef5.1772493898.git.ryder.lee@mediatek.com
    Stable-dep-of: ebc1d9906894 ("PCI: mediatek: Use actual physical address instead of virt_to_phys()")
    Signed-off-by: Sasha Levin <[email protected]>

PCI: mediatek: Use actual physical address instead of virt_to_phys() [+ + +]
Author: Manivannan Sadhasivam <[email protected]>
Date:   Thu May 21 17:19:49 2026 +0000

    PCI: mediatek: Use actual physical address instead of virt_to_phys()
    
    [ Upstream commit ebc1d9906894703286d12306a6f242d90cfb49e8 ]
    
    The driver previously used virt_to_phys() on the ioremapped register base
    (port->base) to compute the MSI message address. Using virt_to_phys() on an
    IO mapped address is incorrect because it expects a kernel virtual address.
    
    To fix it, store the physical start of the I/O register region in
    mtk_pcie_port->phys_base and use it to build the MSI address. This replaces
    the incorrect virt_to_phys() usage and ensures MSI addresses are generated
    correctly.
    
    Fixes: 43e6409db64d ("PCI: mediatek: Add MSI support for MT2712 and MT7622")
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Tested-by: Caleb James DeLisle <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

PCI: Move Resizable BAR code to rebar.c [+ + +]
Author: Ilpo Järvinen <[email protected]>
Date:   Wed Jul 15 12:32:22 2026 -0400

    PCI: Move Resizable BAR code to rebar.c
    
    [ Upstream commit 9f71938cd77f32a448f40a288e409eca60e55486 ]
    
    For lack of a better place to put it, Resizable BAR code has been placed
    inside pci.c and setup-res.c that do not use it for anything.  Upcoming
    changes are going to add more Resizable BAR related functions, increasing
    the code size.
    
    As pci.c is huge as is, move the Resizable BAR related code and the BAR
    resize code from setup-res.c to rebar.c.
    
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Reviewed-by: Christian König <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Stable-dep-of: ee7471fe968d ("PCI: Skip Resizable BAR restore on read error")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: Prevent resource tree corruption when BAR resize fails [+ + +]
Author: Ilpo Järvinen <[email protected]>
Date:   Wed Jul 15 12:32:18 2026 -0400

    PCI: Prevent resource tree corruption when BAR resize fails
    
    [ Upstream commit 91c4c89db41499eea1b29c56655f79c3bae66e93 ]
    
    pbus_reassign_bridge_resources() saves bridge windows into the saved
    list before attempting to adjust resource assignments to perform a BAR
    resize operation. If resource adjustments cannot be completed fully,
    rollback is attempted by restoring the resource from the saved list.
    
    The rollback, however, does not check whether the resources it restores were
    assigned by the partial resize attempt. If restore changes addresses of the
    resource, it can result in corrupting the resource tree.
    
    An example of a corrupted resource tree with overlapping addresses:
    
      6200000000000-6203fbfffffff : pciex@620c3c0000000
        6200000000000-6203fbff0ffff : PCI Bus 0030:01
          6200020000000-62000207fffff : 0030:01:00.0
          6200000000000-6203fbff0ffff : PCI Bus 0030:02
    
    A resource that are assigned into the resource tree must remain
    unchanged. Thus, release such a resource before attempting to restore
    and claim it back.
    
    For simplicity, always do the release and claim back for the resource
    even in the cases where it is restored to the same address range.
    
    Note: this fix may "break" some cases where devices "worked" because
    the resource tree corruption allowed address space double counting to
    fit more resource than what can now be assigned without double
    counting. The upcoming changes to BAR resizing should address those
    scenarios (to the extent possible).
    
    Fixes: 8bb705e3e79d ("PCI: Add pci_resize_resource() for resizing BARs")
    Reported-by: Simon Richter <[email protected]>
    Link: https://lore.kernel.org/linux-pci/[email protected]/
    Reported-by: Alex Bennée <[email protected]>
    Link: https://lore.kernel.org/linux-pci/[email protected]/
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Tested-by: Alex Bennée <[email protected]> # AVA, AMD GPU
    Link: https://patch.msgid.link/[email protected]
    Stable-dep-of: ee7471fe968d ("PCI: Skip Resizable BAR restore on read error")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: rcar-host: Remove unused LIST_HEAD(res) [+ + +]
Author: Lad Prabhakar <[email protected]>
Date:   Thu May 21 10:12:56 2026 +0100

    PCI: rcar-host: Remove unused LIST_HEAD(res)
    
    [ Upstream commit 6ba90ce2069ae923b0ec787aebdf2d786e5d2a58 ]
    
    Remove the unused LIST_HEAD(res) declaration from rcar_pcie_hw_enable().
    
    The macro instantiation defines an unused 'struct list_head res' variable,
    which conflicts with a valid resource loop-local 'struct resource *res'
    declaration further down in the function, triggering a compiler variable
    shadowing warning:
    
     drivers/pci/controller/pcie-rcar-host.c:357:34: warning: declaration of 'res' shadows a previous local [-Wshadow]
     357 |                  struct resource *res = win->res;
    
    Fixes: ce351636c67f75a9 ("PCI: rcar: Add suspend/resume")
    Signed-off-by: Lad Prabhakar <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Reviewed-by: Geert Uytterhoeven <[email protected]>
    Reviewed-by: Marek Vasut <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

PCI: Skip Resizable BAR restore on read error [+ + +]
Author: Marco Nenciarini <[email protected]>
Date:   Wed Jul 15 12:32:23 2026 -0400

    PCI: Skip Resizable BAR restore on read error
    
    [ Upstream commit ee7471fe968d210939be9046089a924cd23c8c3b ]
    
    pci_restore_rebar_state() uses the Resizable BAR Control register to decide
    how many BARs to restore (nbars) and which BAR each iteration addresses
    (bar_idx).
    
    When a device does not respond, config reads typically return
    PCI_ERROR_RESPONSE (~0).  Both fields are 3 bits wide, so nbars and bar_idx
    both evaluate to 7, past the spec's valid ranges for both fields.
    pci_resource_n() then returns an unrelated resource slot, whose size is
    used to derive a nonsensical value written back to the Resizable BAR
    Control register.
    
    Bail out if any Resizable BAR Control read returns PCI_ERROR_RESPONSE. No
    further BARs are touched, which is safe because a config read that returns
    PCI_ERROR_RESPONSE indicates the device is unreachable and restoration is
    pointless.
    
    Fixes: d3252ace0bc6 ("PCI: Restore resized BAR state on resume")
    Signed-off-by: Marco Nenciarini <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/666cac19b5daa0ab0e0ab64454e76b4d24465dbd.1776429882.git.mnencia@kcore.it
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
perf/x86/amd/core: Always use the NMI latency mitigation [+ + +]
Author: Sandipan Das <[email protected]>
Date:   Mon Jun 1 20:28:46 2026 +0530

    perf/x86/amd/core: Always use the NMI latency mitigation
    
    commit 73a4c02f94a98d94480c3e5c81450215a4da05ba upstream.
    
    Commit df4d29732fda ("perf/x86/amd: Change/fix NMI latency mitigation
    to use a timestamp") fixed handling of late-arriving NMIs but limited
    the mitigation to processors having X86_FEATURE_PERFCTR_CORE. However,
    it is unclear if processors without this feature are also affected.
    When Mediated vPMU is enabled on affected hardware, it is also possible
    to bypass the fix inside KVM guests if X86_FEATURE_PERFCTR_CORE is
    removed from the guest CPUID (e.g. using "-cpu host,-perfctr-core" with
    QEMU). Hence, use the mitigation at all times.
    
    Fixes: df4d29732fda ("perf/x86/amd: Change/fix NMI latency mitigation to use a timestamp")
    Signed-off-by: Sandipan Das <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Link: https://patch.msgid.link/29a3c970da289ab8f24282933bdb36545c0403e8.1780325517.git.sandipan.das@amd.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
pinctrl: mediatek: mt8167: Fix Schmitt trigger register offset of pins 34-39 [+ + +]
Author: Luca Leonardo Scorcia <[email protected]>
Date:   Sun May 31 17:23:32 2026 +0100

    pinctrl: mediatek: mt8167: Fix Schmitt trigger register offset of pins 34-39
    
    [ Upstream commit 439bc91d20188901dac698bed4921caac76d9074 ]
    
    The correct Schmitt trigger register offset for pins 34-39 is 0xA00. Value
    was verified with SoC data sheet.
    
    Signed-off-by: Luca Leonardo Scorcia <[email protected]>
    Fixes: 82d70627e94a ("pinctrl: mediatek: Add MT8167 Pinctrl driver")
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

pinctrl: mediatek: mt8516: Fix Schmitt trigger register offset of pins 34-39 [+ + +]
Author: Luca Leonardo Scorcia <[email protected]>
Date:   Sun May 31 17:22:30 2026 +0100

    pinctrl: mediatek: mt8516: Fix Schmitt trigger register offset of pins 34-39
    
    [ Upstream commit 1c3044cab23a056ea28da47da1cdd667a39df0b8 ]
    
    The correct Schmitt trigger register offset for pins 34-39 is 0xA00.
    
    Signed-off-by: Luca Leonardo Scorcia <[email protected]>
    Fixes: 264667112ef0 ("pinctrl: mediatek: Add MT8516 Pinctrl driver")
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

pinctrl: sunxi: fix regulator leak in sunxi_pmx_request() error path [+ + +]
Author: Felix Gu <[email protected]>
Date:   Mon May 4 22:53:26 2026 +0800

    pinctrl: sunxi: fix regulator leak in sunxi_pmx_request() error path
    
    [ Upstream commit 334f7bcbdc79dc8e5b938ac3372453a5368221cf ]
    
    In the error path of sunxi_pmx_request(), the code calls
    regulator_put(s_reg->regulator) to release the regulator. However,
    s_reg->regulator is only assigned after a successful regulator_enable().
    This causes a memory leak: the regulator obtained via regulator_get()
    is never properly released when regulator_enable() fails.
    
    Fixes: dc1445584177 ("pinctrl: sunxi: Fix and simplify pin bank regulator handling")
    Signed-off-by: Felix Gu <[email protected]>
    Reviewed-by: Andre Przywara <[email protected]>
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
platform/x86: xo15-ebook: Fix wakeup source and GPE handling [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Fri May 8 19:40:31 2026 +0200

    platform/x86: xo15-ebook: Fix wakeup source and GPE handling
    
    [ Upstream commit b2fc2c6ebbd2d49935c8960755d8170faead2159 ]
    
    The device_set_wakeup_enable() call in ebook_switch_add() doesn't
    actually do anything because power.can_wakeup is not set for ACPI
    device objects.  Moreover, had it done anything, it would have
    registered a wakeup source object that wouldn't have been used
    going forward and that wakeup source would have been leaked after
    driver removal because ebook_switch_remove() doesn't clean it up.
    Accordingly, remove that call from ebook_switch_add().
    
    Also prevent leaking an enabled ACPI GPE after removing the driver by
    adding appropriate cleanup code to ebook_switch_remove().
    
    Fixes: 89ca11771a4b ("OLPC XO-1.5 ebook switch driver")
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
PM: sleep: Use complete() in device_pm_sleep_init() [+ + +]
Author: Jiakai Xu <[email protected]>
Date:   Sat May 23 02:23:14 2026 +0000

    PM: sleep: Use complete() in device_pm_sleep_init()
    
    [ Upstream commit 3855941f1e4069182c895d5093c5fa589f5b38bd ]
    
    Replace complete_all() with complete() in device_pm_sleep_init() to allow
    it to be called in atomic contexts without triggering a false-positive
    WARNING from lockdep_assert_RT_in_threaded_ctx() when
    CONFIG_PROVE_RAW_LOCK_NESTING is enabled.
    
    device_pm_sleep_init() may be called during device initialization while
    holding a raw_spinlock (e.g., from within device_initialize()), and
    complete_all() is unsafe in atomic contexts on PREEMPT_RT kernels.
    complete(), which is safe to call from any context, is sufficient here.
    
    complete_all() sets the completion count to UINT_MAX/2 (permanently
    signaled), while complete() increments it by 1. Since no threads can be
    waiting during device initialization, both are functionally equivalent.
    The completion is always reinitialized via reinit_completion() in
    dpm_clear_async_state() before each suspend/resume cycle.
    
    However, changing to complete() introduces a potential deadlock for
    devices with no PM support (dev->power.no_pm = true). Such devices are
    never added to the dpm_list and never go through dpm_clear_async_state(),
    so their completion is never reinitialized. A parent device waiting on a
    no_pm child across multiple suspend phases would consume the single-use
    token in the first phase and block forever in the second.
    
    Fix this by adding an early return in dpm_wait() when dev->power.no_pm is
    set, since no_pm devices do not participate in system suspend/resume.
    
    Fixes: 152e1d592071 ("PM: Prevent waiting forever on asynchronous resume after failing suspend")
    Signed-off-by: Jiakai Xu <[email protected]>
    [ rjw: Subject adjustment ]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
pNFS/filelayout: fix cheking if a layout is striped [+ + +]
Author: Sagi Grimberg <[email protected]>
Date:   Wed May 13 09:58:24 2026 +0300

    pNFS/filelayout: fix cheking if a layout is striped
    
    [ Upstream commit 91668417d4e925c98cae4a55b1b9860380ddbf16 ]
    
    A layout can still be striped with num_fh = 1 as it is perfectly possible
    that both MDS and DSs can handle the same filehandle. Hence check according
    to stripe_count > 1, which is the correct check to begin with.
    
    We should not be called with flseg->dsaddr = NULL, but if for some reason
    we do, return our best guess with is flseg->num_fh > 1.
    
    Fixes: a6b9d2fa0024 ("pNFS/filelayout: Fix coalescing test for single DS")
    Signed-off-by: Sagi Grimberg <[email protected]>
    Signed-off-by: Anna Schumaker <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
posix-cpu-timers: Fix pid refcount leak in do_cpu_nanosleep() error path [+ + +]
Author: WenTao Liang <[email protected]>
Date:   Fri Jun 12 00:17:38 2026 +0800

    posix-cpu-timers: Fix pid refcount leak in do_cpu_nanosleep() error path
    
    commit 87bd2ad568e15b90d5f7d4bcd70342d05dad649c upstream.
    
    In do_cpu_nanosleep(), posix_cpu_timer_create() takes a pid reference
    via get_pid() and stores it in timer.it.cpu.pid. If the subsequent
    posix_cpu_timer_set() call fails, the function returns immediately
    without calling posix_cpu_timer_del() to release the pid reference,
    causing a leak.
    
    Fix it by calling posix_cpu_timer_del() before the unlock-and-return
    on the error path, consistent with the other exit paths in the same
    function.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: WenTao Liang <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Reviewed-by: Frederic Weisbecker <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

posix-cpu-timers: Use u64 multiplication in update_rlimit_cpu() [+ + +]
Author: Zhan Xusheng <[email protected]>
Date:   Tue Jun 16 19:20:17 2026 +0800

    posix-cpu-timers: Use u64 multiplication in update_rlimit_cpu()
    
    commit 26aff38fefb1d6cd87e22525f41cc8f1aa61b24f upstream.
    
    update_rlimit_cpu() converts the RLIMIT_CPU value to nanoseconds with
    
            u64 nsecs = rlim_new * NSEC_PER_SEC;
    
    On 32-bit kernels both rlim_new (unsigned long) and NSEC_PER_SEC
    (1000000000L) are 32-bit, so the multiplication is performed in unsigned
    long and truncated for rlim_new > 4 seconds before being widened to u64.
    
    The same file already casts to u64 for the matching computation in
    check_process_timers():
    
            u64 softns = (u64)soft * NSEC_PER_SEC;
    
    As a result, the truncated value is installed into the CPUCLOCK_PROF
    expiry cache (nextevt), causing the process CPU timer to be programmed
    to fire prematurely for any RLIMIT_CPU soft limit >= 5 seconds. The
    actual SIGXCPU/SIGKILL decision in check_process_timers() already casts
    to u64 and is therefore correct, so limit enforcement is not broken;
    only the expiry-cache programming is wrong. Apply the same cast here so
    both paths convert rlim_cur identically.
    
    64-bit kernels are unaffected.
    
    Fixes: 858cf3a8c599 ("timers/itimer: Convert internal cputime_t units to nsec")
    Signed-off-by: Zhan Xusheng <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
power: supply: charger-manager: fix refcount leak in is_full_charged() [+ + +]
Author: WenTao Liang <[email protected]>
Date:   Thu Jun 11 08:53:21 2026 +0800

    power: supply: charger-manager: fix refcount leak in is_full_charged()
    
    commit 4373cfa38ead58f980362c841b0d0bdf8c4d956c upstream.
    
    In is_full_charged(), power_supply_get_by_name() is called to
    obtain a reference to the fuel_gauge power supply. If the
    voltage check (uV >= desc->fullbatt_uV) succeeds, the function
    returns true directly without releasing the reference, leaking
    the refcount.
    
    Fix this by setting a flag and jumping to the out label where
    power_supply_put() properly drops the reference.
    
    Cc: [email protected]
    Fixes: e132fc6bb89b ("power: supply: charger-manager: Make decisions focussed on battery status")
    Signed-off-by: WenTao Liang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
powerpc/kexec: fix double get_cpu() imbalance in kexec_prepare_cpus [+ + +]
Author: Aboorva Devarajan <[email protected]>
Date:   Fri Jun 5 13:59:12 2026 +0530

    powerpc/kexec: fix double get_cpu() imbalance in kexec_prepare_cpus
    
    [ Upstream commit 5c86f1c1f972761a04bf22f4c0618d1aa714185b ]
    
    kexec_prepare_cpus_wait() calls get_cpu() internally to obtain the
    current CPU id. kexec_prepare_cpus() calls kexec_prepare_cpus_wait()
    twice -- once for KEXEC_STATE_IRQS_OFF and once for
    KEXEC_STATE_REAL_MODE -- but only issues a single put_cpu() at the end,
    leaving preempt_count elevated by one extra nesting level.
    
    In practice the imbalance does not trigger a 'scheduling while atomic'
    splat because the kexec path is a one-way trip: IRQs are already
    disabled, no schedule() occurs after the leak, and
    default_machine_kexec() overwrites preempt_count with HARDIRQ_OFFSET
    before jumping into kexec_sequence() which never returns. However the
    bookkeeping is still wrong.
    
    kexec_prepare_cpus() calls local_irq_disable()/hard_irq_disable()
    before invoking kexec_prepare_cpus_wait(), so the CPU is already pinned
    and the get_cpu()/put_cpu() preempt_disable() bracketing is unnecessary.
    Only the current CPU id is needed, so replace get_cpu() with
    raw_smp_processor_id() and drop the now-unneeded put_cpu().
    
    Fixes: 1fc711f7ffb0 ("powerpc/kexec: Fix race in kexec shutdown")
    Signed-off-by: Aboorva Devarajan <[email protected]>
    Reviewed-by: Shrikanth Hegde <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
powerpc/perf: fix preempt count underflow in fsl_emb_pmu_del [+ + +]
Author: Aboorva Devarajan <[email protected]>
Date:   Fri Jun 5 13:59:10 2026 +0530

    powerpc/perf: fix preempt count underflow in fsl_emb_pmu_del
    
    [ Upstream commit 81e3a86030462824a67d697739cf3f387f4ba350 ]
    
    fsl_emb_pmu_del() unconditionally calls put_cpu_var(cpu_hw_events) at
    the 'out:' label, but only calls the matching get_cpu_var() after the
    'i < 0' early-return check. When event->hw.idx is negative the
    function jumps to 'out:' without having taken get_cpu_var(), and the
    trailing put_cpu_var() then issues an unmatched preempt_enable(),
    underflowing preempt_count.
    
    On a CONFIG_PREEMPT=y kernel preempt_count would underflow and
    eventually present as a 'scheduling while atomic' BUG.
    
    Move put_cpu_var() to pair with get_cpu_var() so the percpu access is
    correctly bracketed and the 'out:' label only handles perf_pmu_enable.
    
    Fixes: a11106544f33 ("powerpc/perf: e500 support")
    Reviewed-by: Shrikanth Hegde <[email protected]>
    Signed-off-by: Aboorva Devarajan <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
powerpc/powernv: fix preempt count leak in pnv_kexec_wait_secondaries_down [+ + +]
Author: Aboorva Devarajan <[email protected]>
Date:   Fri Jun 5 13:59:11 2026 +0530

    powerpc/powernv: fix preempt count leak in pnv_kexec_wait_secondaries_down
    
    [ Upstream commit 0ecd26e93e698c8327521910fc6296f5b84a4b92 ]
    
    pnv_kexec_wait_secondaries_down() calls get_cpu() to obtain the current
    CPU id but never calls the matching put_cpu(), leaking one
    preempt_disable() nesting level on every invocation.
    
    In practice the imbalance does not trigger a visible splat because the
    kexec teardown path is a one-way trip: IRQs are already disabled, no
    schedule() occurs after the leak, and default_machine_kexec() overwrites
    preempt_count with HARDIRQ_OFFSET before jumping into kexec_sequence()
    which never returns. However the bookkeeping is still wrong.
    
    The function only needs the current CPU id, and this path runs with
    interrupts disabled and the CPU pinned, so the preempt_disable()
    side-effect of get_cpu() is unnecessary. Replace it with
    raw_smp_processor_id().
    
    Fixes: 298b34d7d578 ("powerpc/powernv: Fix kexec races going back to OPAL")
    Signed-off-by: Aboorva Devarajan <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
powerpc/spufs: fix out-of-bounds access in spufs_mem_mmap_access() [+ + +]
Author: Junrui Luo <[email protected]>
Date:   Mon Jun 1 15:50:00 2026 +0800

    powerpc/spufs: fix out-of-bounds access in spufs_mem_mmap_access()
    
    commit 47b87f469a35b5ffc81c16eee6b13a9b6c8d55c6 upstream.
    
    spufs_mem_mmap_access() computes the local store offset as
    address - vma->vm_start, but bounds-checks it against vma->vm_end
    instead of the local store size. On 64-bit, offset is always well
    below vma->vm_end, so the clamp never fires and len stays unbounded
    against the LS_SIZE buffer returned by ctx->ops->get_ls().
    
    Reject offsets at or beyond LS_SIZE and clamp len to the remaining
    space, mirroring the guard already used by spufs_mem_mmap_fault() and
    spufs_ps_fault().
    
    Fixes: a352894d0705 ("spufs: use new vm_ops->access to allow local state access from gdb")
    Reported-by: Yuhao Jiang <[email protected]>
    Cc: [email protected]
    Signed-off-by: Junrui Luo <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/SYBPR01MB7881EE775E8B51C09F5A29E7AF152@SYBPR01MB7881.ausprd01.prod.outlook.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
proc: only bump parent nlink when registering directories [+ + +]
Author: Krzysztof Wilczyński <[email protected]>
Date:   Sat Jun 13 21:10:05 2026 +0000

    proc: only bump parent nlink when registering directories
    
    commit 16b02eb4b9b272c221255c20d34ccd5db53a3ed3 upstream.
    
    proc_register() increments the parent directory's link count for every
    entry it registers, while remove_proc_entry() and remove_proc_subtree()
    decrement it only when the removed entry is a directory.  Regular files
    thus inflate the parent's count while they exist, and leak one link
    permanently on every create and remove cycle.
    
    For example, /proc/bus/pci/00 with twenty-two device files and no
    subdirectories reports nlink 24 instead of 2, and SR-IOV VF enable
    and disable cycles, each creating and removing the VF config space
    entries under /proc/bus/pci/<bus>, inflate the link count of that
    directory without bound.
    
    Before commit e06689bf5701 ("proc: change ->nlink under
    proc_subdir_lock"), the increment lived in proc_mkdir_data() and
    proc_create_mount_point(), and was therefore applied only to
    directories.  Moving it into proc_register() to bring it under
    proc_subdir_lock dropped the S_ISDIR check.
    
    Thus, move the nlink accounting into pde_subdir_insert() and
    pde_erase(), only updating it for directories in both, so the link
    count is always changed together with the directory entry itself.
    
    Fixes: e06689bf5701 ("proc: change ->nlink under proc_subdir_lock")
    Cc: [email protected] # v5.5+
    Signed-off-by: Krzysztof Wilczyński <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Christian Brauner (Amutable) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

proc: protect ptrace_may_access() with exec_update_lock (FD links) [+ + +]
Author: Jann Horn <[email protected]>
Date:   Fri Jul 17 12:38:21 2026 -0400

    proc: protect ptrace_may_access() with exec_update_lock (FD links)
    
    [ Upstream commit 6255da28d4bb5349fe18e84cb043ccd394eba75d ]
    
    proc_pid_get_link() and proc_pid_readlink() currently look up the task from
    the pid once, then do the ptrace access check on that task, then look up
    the task from the pid a second time to do the actual access.
    That's racy in several ways.
    
    To fix it, pass the task to the ->proc_get_link() handler, and instead of
    proc_fd_access_allowed(), introduce a new helper call_proc_get_link() that
    looks up and locks the task, does the access check, and calls
    ->proc_get_link().
    
    Fixes: 778c1144771f ("[PATCH] proc: Use sane permission checks on the /proc/<pid>/fd/ symlinks")
    Cc: [email protected]
    Signed-off-by: Jann Horn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Christian Brauner (Amutable) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

proc: protect ptrace_may_access() with exec_update_lock (part 1) [+ + +]
Author: Jann Horn <[email protected]>
Date:   Fri Jul 17 15:23:58 2026 -0400

    proc: protect ptrace_may_access() with exec_update_lock (part 1)
    
    [ Upstream commit 6650527444dadc63d84aa939d14ecba4fadb2f69 ]
    
    Fix the easy cases where procfs currently calls ptrace_may_access() without
    exec_update_lock protection, where the fix is to simply add the extra lock
    or use mm_access():
    
     - do_task_stat(): grab exec_update_lock
     - proc_pid_wchan(): grab exec_update_lock
     - proc_map_files_lookup(): use mm_access() instead of get_task_mm()
     - proc_map_files_readdir(): use mm_access() instead of get_task_mm()
     - proc_ns_get_link(): grab exec_update_lock
     - proc_ns_readlink(): grab exec_update_lock
    
    Fixes: f83ce3e6b02d ("proc: avoid information leaks to non-privileged processes")
    Cc: [email protected]
    Signed-off-by: Jann Horn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Christian Brauner (Amutable) <[email protected]>
    [ converted NULL return from mm_access() to ERR_PTR(-ESRCH) at call sites since 5.15's mm_access() returns NULL when the task has no mm ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

proc: rename proc_setattr to proc_nochmod_setattr [+ + +]
Author: Christoph Hellwig <[email protected]>
Date:   Fri Jul 17 12:38:20 2026 -0400

    proc: rename proc_setattr to proc_nochmod_setattr
    
    [ Upstream commit 690005b0b1e6b567c88b7790e6d90d4d6c9e09cc ]
    
    What is currently proc_setattr is a special version added after the more
    general procfs ->seattr in commit 6d76fa58b050 ("Don't allow chmod() on
    the /proc/<pid>/ files").  Give it a name that reflects that to free the
    proc_setattr name and better describe what is doing.
    
    Signed-off-by: Christoph Hellwig <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Jan Kara <[email protected]>
    Signed-off-by: Christian Brauner <[email protected]>
    Stable-dep-of: 6255da28d4bb ("proc: protect ptrace_may_access() with exec_update_lock (FD links)")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

proc: use generic setattr() for /proc/$PID/net [+ + +]
Author: Thomas Weißschuh <[email protected]>
Date:   Fri Jul 17 12:38:19 2026 -0400

    proc: use generic setattr() for /proc/$PID/net
    
    [ Upstream commit 18e66ae67673f2c8df6f02428798b1355691f2a9 ]
    
    All other files in /proc/$PID/ use proc_setattr().
    
    Not using it allows the usage of chmod() on /proc/$PID/net, even on
    other processes owned by the same user.
    The same would probably also be true for other attributes to be changed.
    
    As this technically represents an ABI change it is not marked for
    stable so any unlikely regressions are caught during a full release cycle.
    
    Fixes: e9720acd728a ("[NET]: Make /proc/net a symlink on /proc/self/net (v3)")
    Signed-off-by: Thomas Weißschuh <[email protected]>
    Link: https://lore.kernel.org/lkml/[email protected]/
    Fixes: b4844fa0bdb4 ("selftests/nolibc: implement a few tests for various syscalls")
    Tested-by: Zhangjin Wu <[email protected]>
    Signed-off-by: Willy Tarreau <[email protected]>
    Message-Id: <[email protected]>
    Signed-off-by: Christian Brauner <[email protected]>
    Stable-dep-of: 6255da28d4bb ("proc: protect ptrace_may_access() with exec_update_lock (FD links)")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
pwm: imx27: Fix variable truncation in .apply() [+ + +]
Author: Ronaldo Nunez <[email protected]>
Date:   Fri May 22 16:13:48 2026 -0300

    pwm: imx27: Fix variable truncation in .apply()
    
    [ Upstream commit dc9e08fdbcc3eb08a1d2b868b535081c44425e27 ]
    
    Fix a variable truncation when calculating period in microseconds as
    part of the solution for the ERR051198 in .apply() callback.
    
    Example scenario:
     - Period of 3us (PWMPR = 196 and prescaler = 1)
     - Expected value in tmp: 198000000000 (NSEC_PER_SEC * (196 + 2) * 1)
     - Actual value is 431504384 (truncation to u32)
    
    Signed-off-by: Ronaldo Nunez <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Fixes: a25351e4c774 ("pwm: imx27: Workaround of the pwm output bug when decrease the duty cycle")
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
qede: fix off-by-one in BD ring consumption on build_skb failure [+ + +]
Author: Shigeru Yoshida <[email protected]>
Date:   Wed Jul 1 01:46:20 2026 +0900

    qede: fix off-by-one in BD ring consumption on build_skb failure
    
    [ Upstream commit a0a558ca7e75b49e71f8c545c30e8c005e6e4e2f ]
    
    qede_rx_build_skb() and qede_tpa_rx_build_skb() do not check for a
    NULL return from qede_build_skb(). When it returns NULL under memory
    pressure, the functions still consume a BD from the ring before
    returning NULL. The callers then recycle additional BDs, resulting in
    one extra BD being consumed (off-by-one). This desynchronizes the BD
    ring, which can corrupt DMA page reference counts and lead to SLUB
    freelist corruption.
    
    Commit 4e910dbe3650 ("qede: confirm skb is allocated before using")
    added a NULL check inside qede_build_skb() to prevent a NULL pointer
    dereference, but did not address the missing NULL checks in the
    callers, making this off-by-one reachable.
    
    Fix this by adding NULL checks for the return value of
    qede_build_skb() in both qede_rx_build_skb() and
    qede_tpa_rx_build_skb(), returning NULL immediately before any BD ring
    manipulation.
    
    Fixes: 8a8633978b84 ("qede: Add build_skb() support.")
    Signed-off-by: Shigeru Yoshida <[email protected]>
    Reviewed-by: Jamie Bainbridge <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
rapidio/tsi721: prevent a bad dereference in tsi721_db_dpc() [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Fri May 8 10:51:56 2026 +0300

    rapidio/tsi721: prevent a bad dereference in tsi721_db_dpc()
    
    [ Upstream commit fc15e3a30ddd950f009c76765331783b9af94a87 ]
    
    With a list_for_each() loop, if we don't find the item we are looking for
    in the list, then the loop exits with the iterator, which is "dbell" in
    this loop, pointing to invalid memory.
    
    This code uses the "found" variable to determine if we have found the
    doorbell we are looking for or not.  However, the problem that the "found"
    variable needs to be set to false at the start of each iteration,
    otherwise after the first correct doorbell, then everything is marked as
    found.
    
    Reset the "found" to false at the start of the iteration and move the
    variable inside the loop.
    
    Link: https://lore.kernel.org/[email protected]
    Fixes: 48618fb4e522 ("RapidIO: add mport driver for Tsi721 bridge")
    Signed-off-by: Dan Carpenter <[email protected]>
    Cc: Alexandre Bounine <[email protected]>
    Cc: Chul Kim <[email protected]>
    Cc: Matt Porter <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/hns: Fix arithmetic overflow in calc_hem_config() [+ + +]
Author: Alexander Chesnokov <[email protected]>
Date:   Mon Apr 13 12:14:43 2026 +0300

    RDMA/hns: Fix arithmetic overflow in calc_hem_config()
    
    [ Upstream commit a38e4410af9ad8b7ad2217254da06cd4dc21f0ed ]
    
    If bt_num is 3 or 2, then the expressions like
    l0_idx * chunk_ba_num + l1_idx are computed in 32-bit
    arithmetic before being assigned to a u64 index field,
    which can lead to overflow.
    
    Cast the first operand to u64 to ensure the arithmetic
    is performed in 64-bit.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 2f49de21f3e9 ("RDMA/hns: Optimize mhop get flow for multi-hop addressing")
    Signed-off-by: Alexander Chesnokov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

RDMA/hns: Fix warning in poll cq direct mode [+ + +]
Author: Lianfa Weng <[email protected]>
Date:   Wed May 20 13:57:58 2026 +0800

    RDMA/hns: Fix warning in poll cq direct mode
    
    [ Upstream commit 3f19c2a3852e6ba75f3e92dd5edc4e07f3d07f4a ]
    
    CQs allocated by ib_alloc_cq() always have a comp_handler. Though
    in direct mode this handler is never expected to be called, it
    is still called when the driver is reset, triggering the following
    WARN_ONCE():
    
    Call trace:
    ib_cq_completion_direct+0x38/0x60
    hns_roce_cq_completion+0x54/0x90 (hns_roce_hw_v2]
    hns_roce_handle_device_err+Ox1c8/0x340 [hns_roce_hw_v2]
    hns_roce_hw_v2_uninit_instance.constprop.0+0x34/0x70 [hns_roce_hw_v2]
    hns_roce_hw_v2_reset_notify+0xc4/0xe0 [hns_roce_hw_v2]
    hclge_notify_roce_client+0x60/0xbc [hclge]
    hclge_reset_rebuild+0x48/0x34c [hclge]
    hclge_reset_subtask+0xcc/0xec [hclge]
    hclge_reset_service_task+0x80/0x160 [hclge]
    hclge_service_task+0x50/0x80 (hclge]
    process_one_work+0x1cc/0x4d0
    worker_thread+0x154/0x414
    kthread+0x104/0x144
    ret_from_fork+0x10/0x18
    
    Fixes: f295e4cece5c ("RDMA/hns: Delete unnecessary callback functions for cq")
    Link: https://patch.msgid.link/r/[email protected]
    Signed-off-by: Lianfa Weng <[email protected]>
    Signed-off-by: Junxian Huang <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/mlx5: Fix devx subscribe-event unwind NULL dereference [+ + +]
Author: Prathamesh Deshpande <[email protected]>
Date:   Tue Apr 28 23:42:49 2026 +0100

    RDMA/mlx5: Fix devx subscribe-event unwind NULL dereference
    
    [ Upstream commit 43f8f7946814c8e5f464518246fdbc69b6e32326 ]
    
    MLX5_IB_METHOD_DEVX_SUBSCRIBE_EVENT() links event_sub into sub_list
    before initializing the fields used by the shared error path.
    
    If eventfd_ctx_fdget() then fails, the unwind path dereferences
    event_sub->ev_file in uverbs_uobject_put() and calls
    subscribe_event_xa_dealloc() with an unset xa_key_level1.
    
    subscribe_event_xa_alloc() creates the XA entry exactly once for a given
    key_level1, on the first occurrence of that key. The unwind path must
    therefore call subscribe_event_xa_dealloc() exactly once for it as well.
    
    Enforce that by adding devx_key_in_sub_list() and calling
    subscribe_event_xa_dealloc() only when the last matching pending entry is
    being cleaned up.
    
    Fixes: 759738537142 ("IB/mlx5: Enable subscription for device events over DEVX")
    Signed-off-by: Prathamesh Deshpande <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Yishai Hadas <[email protected]>
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

RDMA/mlx5: Fix undefined shift of user RQ WQE size [+ + +]
Author: Maher Sanalla <[email protected]>
Date:   Thu Jun 11 15:50:42 2026 +0300

    RDMA/mlx5: Fix undefined shift of user RQ WQE size
    
    [ Upstream commit d881d60223aac8fdc12b227d89c76e131e92a9cd ]
    
    set_rq_size() computes the RQ WQE size as "1 << rq_wqe_shift" based on
    the user-provided rq_wqe_shift, which is only checked to be greater than
    32, so shifts of 32 are still accepted. A shift of 31 also overflows a
    signed integer, leading to undefined behavior.
    
    Use check_shl_overflow() to compute the RQ WQE size and reject any
    invalid values.
    
    Fixes: e126ba97dba9 ("mlx5: Add driver for Mellanox Connect-IB adapters")
    Link: https://patch.msgid.link/r/[email protected]
    Signed-off-by: Maher Sanalla <[email protected]>
    Signed-off-by: Edward Srouji <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/siw: bound Read Response placement to the RREAD length [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Tue Jun 2 15:47:00 2026 -0400

    RDMA/siw: bound Read Response placement to the RREAD length
    
    commit 7d29f7e9dbd844cae4d3e559cf78324b9642fd6b upstream.
    
    In drivers/infiniband/sw/siw/siw_qp_rx.c, siw_proc_rresp() places each
    inbound Read Response DDP segment at sge->laddr + wqe->processed and then
    accumulates wqe->processed, but it never checks the running total against
    the sink buffer length on continuation segments. siw_check_sge() resolves
    and validates the sink memory only on the first fragment (the if (!*mem)
    branch), and siw_rresp_check_ntoh() compares the cumulative length against
    wqe->bytes only on the final segment (the !frx->more_ddp_segs guard).
    
    A connected siw peer that answers an outstanding RREAD with Read Response
    segments that keep the DDP Last flag clear, carrying more total payload
    than the RREAD requested, drives wqe->processed past the validated sink
    buffer; the next siw_rx_data() call writes out of bounds at
    sge->laddr + wqe->processed. siw runs iWARP over ordinary routable TCP,
    so the peer is the remote end of an established RDMA connection and needs
    no local privilege.
    
    Bound every segment before placement, exactly as siw_proc_send() and
    siw_proc_write() already do for their tagged and untagged paths, and
    terminate the connection with a base-or-bounds DDP error when the
    Read Response would overrun the sink buffer.
    
    This is the second receive-path length fix for this file. A separate
    change rejects an MPA FPDU length that underflows the per-fragment
    remainder in the header decode; that guard does not cover this case,
    because here each individual segment length is self-consistent and only
    the accumulated placement offset overruns the buffer.
    
    Fixes: 8b6a361b8c48 ("rdma/siw: receive path")
    Link: https://patch.msgid.link/r/[email protected]
    Cc: [email protected]
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: Michael Bommarito <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
RDMA/srpt: fix integer overflow in immediate data length check [+ + +]
Author: Sara Venkatesh <[email protected]>
Date:   Mon May 4 01:00:36 2026 -0700

    RDMA/srpt: fix integer overflow in immediate data length check
    
    [ Upstream commit eb4ecdf631fe00e8020bf461503cb9b7017ed796 ]
    
    imm_buf->len is a user-controlled uint32_t received from the network.
    Adding it to imm_data_offset without overflow checking allows a
    malicious initiator to send len=0xFFFFFFFF, causing req_size to wrap
    around to a small value, bypassing the bounds check, and subsequently
    passing a ~4GB length to sg_init_one().
    
    Use check_add_overflow() to detect wrapping before the comparison.
    
    Fixes: 5dabcd0456d7 ("RDMA/srpt: Add support for immediate data")
    Reported-by: Carlos Bilbao (Lambda) <[email protected]>
    Signed-off-by: Sara Venkatesh <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Carlos Bilbao (Lambda) <[email protected]>
    Reviewed-by: Bart Van Assche <[email protected]>
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
regulator: core: Make regulator_lock_two() logic easier to follow [+ + +]
Author: Douglas Anderson <[email protected]>
Date:   Thu Apr 13 17:34:17 2023 -0700

    regulator: core: Make regulator_lock_two() logic easier to follow
    
    [ Upstream commit 37473397b852f556d8b9428ccbfd51886037842d ]
    
    The regulator_lock_two() function could be made clearer in the case of
    lock contention by having a local variable for each of the held and
    contended locks. Let's do that. At the same time, let's use the swap()
    function instead of open coding it.
    
    This change is expected to be a no-op and simply improves code
    clarity.
    
    Suggested-by: Stephen Boyd <[email protected]>
    Link: https://lore.kernel.org/r/CAE-0n53Eb1BeDPmjBycXUaQAF4ppiAM6UDWje_jiB9GAmR8MMw@mail.gmail.com
    Signed-off-by: Douglas Anderson <[email protected]>
    Link: https://lore.kernel.org/r/20230413173359.1.I1ae92b25689bd6579952e6d458b79f5f8054a0c9@changeid
    Signed-off-by: Mark Brown <[email protected]>
    Stable-dep-of: d38f8bd771c4 ("regulator: core: regulator_lock_two() should test for EDEADLK not EDEADLOCK")
    Signed-off-by: Sasha Levin <[email protected]>

regulator: core: regulator_lock_two() should test for EDEADLK not EDEADLOCK [+ + +]
Author: Timur Tabi <[email protected]>
Date:   Wed Jul 8 18:57:22 2026 -0500

    regulator: core: regulator_lock_two() should test for EDEADLK not EDEADLOCK
    
    [ Upstream commit d38f8bd771c4999b797d7074b348cf201414bd34 ]
    
    Compare against -EDEADLK, which is what ww_mutex_lock() actually
    returns and what every other deadlock check in this file already uses.
    
    Function regulator_lock_two() acquires two regulators via
    regulator_lock_nested() -> ww_mutex_lock().  On contention,
    ww_mutex_lock() returns -EDEADLK, which is the caller's signal to drop
    the lock it holds and retry the acquisition in the canonical order.
    
    However, regulator_lock_two() tests the return value against -EDEADLOCK
    rather than -EDEADLK.  On most architectures, EDEADLK and EDEADLOCK are
    the same value, so the comparison happens to be correct and the bug is
    invisible.  But on MIPS, SPARC, and PowerPC, those two errors have
    different values.  The test is wrong: a genuine -EDEADLK backoff no
    longer matches -EDEADLOCK, so instead of unlocking and retrying, the
    code falls into WARN_ON(ret) and returns with only one of the two
    regulators locked.
    
    In practice, this is a bug only on MIPS, because the regulator core is
    not built or used on the other two platforms.
    
    In general, EDEADLK is preferred over EDEADLOCK for new code.
    
    Fixes: cba6cfdc7c3f ("regulator: core: Avoid lockdep reports when resolving supplies")
    Signed-off-by: Timur Tabi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

regulator: ltc3676: Fix incorrect IRQSTAT bit offsets [+ + +]
Author: Abhishek Ojha <[email protected]>
Date:   Wed Jul 15 13:04:08 2026 -0400

    regulator: ltc3676: Fix incorrect IRQSTAT bit offsets
    
    commit 50dce2e2f84b56d8b4b406d97a1543709e8a87f5 upstream.
    
    The LTC3676_IRQSTAT_* bit definitions do not match the IRQSTAT
    (Interrupt Request Status) register layout documented in Table 15
    of the LTC3676/LTC3676-1 datasheet:
    
      bit 0 - Pushbutton Status Active
      bit 1 - Hard Reset Occurred
      bit 2 - PGOOD Timeout Occurred
      bit 3 - Undervoltage Warning
      bit 4 - Undervoltage Standby (Fault) Occurred
      bit 5 - Overtemperature Warning
      bit 6 - Overtemperature Standby (Fault) Occurred
      bit 7 - Reserved
    
    The driver instead defines these starting at bit 3, one bit higher
    than the datasheet specifies, which causes ltc3676_regulator_isr()
    to check the wrong status bits and misreport (or miss) PGOOD
    timeout, undervoltage and thermal warning/fault conditions.
    
    Fix the bit offsets to match the datasheet.
    
    Fixes: 37b918a034fe ("regulator: Add LTC3676 support")
    Cc: [email protected]
    Signed-off-by: Abhishek Ojha <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
reset: sunxi: fix memory region leak on ioremap failure [+ + +]
Author: Zhao Dongdong <[email protected]>
Date:   Wed Jun 17 11:16:27 2026 +0800

    reset: sunxi: fix memory region leak on ioremap failure
    
    commit 1a8c89f8c112c75e84ff9a140f969e372aed0c9a upstream.
    
    In sunxi_reset_init(), when ioremap() fails, the memory region obtained
    via request_mem_region() is not released, leading to a resource leak.
    
    Add an err_mem_region label to properly release the memory region before
    freeing the data structure.
    
    Fixes: 8f1ae77f4666 ("reset: Add Allwinner SoCs Reset Controller Driver")
    Cc: [email protected]
    Signed-off-by: Zhao Dongdong <[email protected]>
    Reviewed-by: Philipp Zabel <[email protected]>
    Acked-by: Jernej Skrabec <[email protected]>
    Signed-off-by: Philipp Zabel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ring-buffer: Fix event length with forced 8-byte alignment [+ + +]
Author: Hui Wang <[email protected]>
Date:   Sun Jun 7 15:24:30 2026 +0800

    ring-buffer: Fix event length with forced 8-byte alignment
    
    [ Upstream commit c37e0a4b79a6bbb96ce5ffe279d7c001e20529e0 ]
    
    When RB_FORCE_8BYTE_ALIGNMENT is true, rb_calculate_event_length()
    reserves the space of event->array[0] for placing the data length and
    rb_update_event() stores the data length in event->array[0]
    accordingly. As a result the whole event length will add extra 4 bytes
    for sizeof(event.array[0]) unconditionally.
    
    But ring_buffer_event_length() only subtracts the
    sizeof(event->array[0]) for events larger than RB_MAX_SMALL_DATA +
    sizeof(event->array[0]). As a result, small events on architectures
    with RB_FORCE_8BYTE_ALIGNMENT=true report a data length that is 4
    bytes larger than expected.
    
    To fix it, add the RB_FORCE_8BYTE_ALIGNMENT as a condition to subtract
    the size of that length field whenever RB_FORCE_8BYTE_ALIGNMENT is
    true.
    
    This issue is observed in a riscv64 kernel with
    CONFIG_HAVE_64BIT_ALIGNED_ACCESS set to y, when we run ftrace selftest
    trace_marker_raw.tc, we get the weird log: for cases where the id is
    1..100, the number of data field is 8*N, but once id exceeds 100, the
    number of data field becomes 8*N+4:
     # 1 buf: 58 00 00 00 80 5e d1 63 (number of data field is 8*1)
     ...
     # a buf: 58 ...                  (number of data field is 8*2)
     ...
     # 64 buf: 58 ...                 (number of data field is 8*13)
     # 65 buf: 58 ...                 (number of data field is 8*13+4)
    
    After applying this change, the number of data field keeps being 8*N+4
    consistently.
    
    Link: https://patch.msgid.link/[email protected]
    Fixes: 2271048d1b3b ("ring-buffer: Do 8 byte alignment for 64 bit that can not handle 4 byte align")
    Signed-off-by: Hui Wang <[email protected]>
    Reviewed-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Steven Rostedt <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
riscv: stacktrace: Remove bogus -0x4 offset in non-FP walk_stackframe [+ + +]
Author: Rui Qi <[email protected]>
Date:   Sat Jun 6 20:17:59 2026 -0600

    riscv: stacktrace: Remove bogus -0x4 offset in non-FP walk_stackframe
    
    [ Upstream commit 8ac35bac70e7e581d673b76878f7691cdadc33b8 ]
    
    In the non-frame-pointer version of walk_stackframe, each value read
    from the stack is treated as a potential return address and has 0x4
    subtracted before being used as the program counter. This was intended
    to convert the return address (the instruction after a call) back to
    the call site, but it is incorrect:
    
    1. RISC-V has variable-length instructions due to the RVC (compressed
       instruction) extension. A call instruction can be either 4 bytes
       (regular) or 2 bytes (compressed, e.g. c.jal). Subtracting a fixed
       0x4 assumes all call instructions are 4 bytes, which is wrong for
       compressed instructions.
    
    2. Stack traces conventionally report return addresses, not call sites.
       Other architectures (ARM64, x86, ARM) do not subtract instruction
       size from return addresses in their stack unwinding code.
    
    3. The frame-pointer version of walk_stackframe already dropped the
       -0x4 offset. Commit b785ec129bd9 ("riscv/ftrace: Add
       HAVE_FUNCTION_GRAPH_RET_ADDR_PTR support") replaced "pc =
       frame->ra - 0x4" with ftrace_graph_ret_addr(), and the commit
       message explicitly noted that "the original calculation, pc =
       frame->ra - 4, is buggy when the instruction at the return address
       happened to be a compressed inst." The non-FP version was simply
       overlooked.
    
    Remove the bogus -0x4 offset to match the FP version and the
    conventions used by other architectures.
    
    Fixes: 5d8544e2d007 ("RISC-V: Generic library routines and assembly")
    Signed-off-by: Rui Qi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paul Walmsley <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
rtc: abx80x: fix the RTC_VL_CLR clearing all status flags [+ + +]
Author: Antoni Pokusinski <[email protected]>
Date:   Wed Apr 15 18:06:11 2026 +0200

    rtc: abx80x: fix the RTC_VL_CLR clearing all status flags
    
    [ Upstream commit 419719c514252a2dbb2e2976f564c83417dd6d0a ]
    
    The RTC_VL_CLR ioctl intends to clear only the battery low flag (BLF),
    however the current implementation writes 0 to the status register,
    clearing all status bits.
    
    Fix this by writing back the masked status value so that only BLF is
    cleared, preserving other status flags.
    
    Fixes: ffe1c5a2d427 ("rtc: abx80x: Implement RTC_VL_READ,CLR ioctls")
    Signed-off-by: Antoni Pokusinski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

rtc: cmos: unregister HPET IRQ handler on probe failure [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Tue Jun 23 18:08:48 2026 +0800

    rtc: cmos: unregister HPET IRQ handler on probe failure
    
    [ Upstream commit a5bb580df018b5d1c5668f05f7979044fb19e23a ]
    
    cmos_do_probe() registers cmos_interrupt() as the HPET RTC IRQ
    handler before requesting the RTC IRQ and registering the RTC
    device. If either request_irq() or devm_rtc_register_device()
    fails afterwards, the error path leaves the HPET RTC IRQ handler
    installed. This leaves a stale handler behind and make a later
    hpet_register_irq_handler() fail with -EBUSY.
    
    Track whether the HPET handler was registered successfully and
    undo the registration on the probe error path. Also mask the HPET
    RTC IRQ bits to match the normal shutdown cleanup.
    
    Fixes: 9d8af78b0797 ("rtc: add HPET RTC emulation to RTC_DRV_CMOS")
    Signed-off-by: Haoxiang Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

rtc: ds1307: Fix off-by-one issue with wday for rx8130 [+ + +]
Author: Fredrik M Olsson <[email protected]>
Date:   Wed May 20 16:48:54 2026 +0200

    rtc: ds1307: Fix off-by-one issue with wday for rx8130
    
    [ Upstream commit 6882aab3c66112b33b251be95c09c8ead3e8d580 ]
    
    The RTC represent each weekday with a individual bit set in the WDAY
    register, where the 0th bit represent the first day of the week and the
    6th bit represents the last day of the week. For each passed day the
    chip performs a rotary-left-shift by one to advance the weekday by one.
    
    The tm_wday field represent weekdays by a value in the range of 0-6.
    
    The fls() function return the bit index of the last bit set. To handle
    when there are no bits set it will return 0, and if the 0th bit is set
    it will return 1, and if the 1st bit is set it will return 2, and so on.
    
    In order to make the result of the fls() function fall into the expected
    range of 0-6 (instead of 1-7) this patch subtracts one from the result
    (which matches how the value is written in ds1307_set_time()).
    
    Fixes: 204756f016726 ("rtc: ds1307: Fix wday settings for rx8130")
    Reviewed-by: Nobuhiro Iwamatsu <[email protected]>
    Signed-off-by: Fredrik M Olsson <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

rtc: ds1307: handle oscillator stop flag for ds1337/ds1339/ds3231 [+ + +]
Author: Ronan Dalton <[email protected]>
Date:   Fri May 8 15:24:49 2026 +1200

    rtc: ds1307: handle oscillator stop flag for ds1337/ds1339/ds3231
    
    [ Upstream commit a091e1ba3b68cabc9caedafc6f81d9fe9b3b2200 ]
    
    Prior to commit 48458654659c ("rtc: ds1307: remove clear of oscillator
    stop flag (OSF) in probe"), the oscillator stop flag (OSF) bit was
    checked during device probe for the ds1337, ds1339, ds1341, and ds3231
    chips; if it was set, it would be cleared and a warning would be logged
    saying "SET TIME!". Since that commit, the OSF bit is no longer cleared,
    but the warning is still printed.
    
    Directly following that commit, there was no way to get rid of this
    warning because nothing cleared the OSF bit on these chips.
    
    The commit associated with the previous commit, 523923cfd5d6 ("rtc:
    ds1307: handle oscillator stop flag (OSF) for ds1341"), made proper use
    of the OSF when getting and setting the time in the RTC. However, the
    other RTC variants ds1337, ds1339 and ds3231 didn't have a corresponding
    change made.
    
    Given that the OSF bit is no longer cleared at probe time when it is
    set, the remaining three chips should have the same handling as the
    ds1341 chip has for the OSF bit.
    
    Fix the issue on the ds1337, ds1339 and ds3231 chips by applying the
    same logic as the ds1341 has to these chips.
    
    Note that any devices brought up between the first referenced commit and
    this one may begin mistrusting the time reported by the RTC until it is
    set again, if the bit was never explicitly cleared.
    
    Note that only the ds1339 was tested with this change, but the
    datasheets for the other chips contain essentially identical
    descriptions of the OSF bit so the same change should work.
    
    Signed-off-by: Ronan Dalton <[email protected]>
    Cc: [email protected]
    Cc: [email protected]
    Cc: Alexandre Belloni <[email protected]>
    Cc: Tyler Hicks <[email protected]>
    Cc: Sasha Levin <[email protected]>
    Cc: Meagan Lloyd <[email protected]>
    Cc: Rodolfo Giometti <[email protected]>
    Cc: Chris Packham <[email protected]>
    Fixes: 48458654659c ("rtc: ds1307: remove clear of oscillator stop flag (OSF) in probe")
    Reviewed-by: Meagan Lloyd <[email protected]>
    Reviewed-by: Tyler Hicks <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
rtmutex: Use waiter::task instead of current in remove_waiter() [+ + +]
Author: Keenan Dong <[email protected]>
Date:   Wed Apr 8 16:46:00 2026 +0800

    rtmutex: Use waiter::task instead of current in remove_waiter()
    
    commit 3bfdc63936dd4773109b7b8c280c0f3b5ae7d349 upstream.
    
    remove_waiter() is used by the slowlock paths, but it is also used for
    proxy-lock rollback in rt_mutex_start_proxy_lock() when invoked from
    futex_requeue().
    
    In the latter case waiter::task is not current, but remove_waiter()
    operates on current for the dequeue operation. That results in several
    problems:
    
      1) the rbtree dequeue happens without waiter::task::pi_lock being held
    
      2) the waiter task's pi_blocked_on state is not cleared, which leaves a
         dangling pointer primed for UAF around.
    
      3) rt_mutex_adjust_prio_chain() operates on the wrong top priority waiter
         task
    
    Use waiter::task instead of current in all related operations in
    remove_waiter() to cure those problems.
    
    [ tglx: Fixup rt_mutex_adjust_prio_chain(), add a comment and amend the
            changelog ]
    
    Fixes: 8161239a8bcc ("rtmutex: Simplify PI algorithm and make highest prio task get lock")
    Reported-by: Yuan Tan <[email protected]>
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Reported-by: Xin Liu <[email protected]>
    Signed-off-by: Keenan Dong <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Cc: [email protected]
    (cherry picked from commit d8cce4773c2b23d819baf5abedc62f7b430e8745)
    [Lee: Backported to linux-5.10.y from linux-6.1.y]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
s390/monwriter: Reject buffer reuse with different data length [+ + +]
Author: Gerald Schaefer <[email protected]>
Date:   Tue Jun 23 19:44:06 2026 +0200

    s390/monwriter: Reject buffer reuse with different data length
    
    commit 2995ccec260caa9e85b3301a4aba1e66ed80ad74 upstream.
    
    When data buffers are reused, e.g. for interval sample records, the
    first record determines the data length, and the size of the buffer for
    user copy. Current monwriter code does not check if the data length was
    changed for subsequent records, which also would never happen for valid
    user programs.
    
    However, a malicious user could change the data length, resulting in out
    of bounds user copy to the kernel buffer, and memory corruption. By
    default, the monwriter misc device is created with root-only permissions,
    so practical impact is typically low.
    
    Fix this by checking for changed data length and rejecting such records.
    
    Cc: [email protected]
    Signed-off-by: Gerald Schaefer <[email protected]>
    Reviewed-by: Christian Borntraeger <[email protected]>
    Signed-off-by: Vasily Gorbik <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sched/fair: Only update stats for allowed CPUs when looking for dst group [+ + +]
Author: Adam Li <[email protected]>
Date:   Sat Oct 11 06:43:22 2025 +0000

    sched/fair: Only update stats for allowed CPUs when looking for dst group
    
    [ Upstream commit 82d6e01a0699800efd8b048eb584c907ccb47b7a ]
    
    Load imbalance is observed when the workload frequently forks new threads.
    Due to CPU affinity, the workload can run on CPU 0-7 in the first
    group, and only on CPU 8-11 in the second group. CPU 12-15 are always idle.
    
    { 0 1 2 3 4 5 6 7 } {8 9 10 11 12 13 14 15}
      * * * * * * * *    * * *  *
    
    When looking for dst group for newly forked threads, in many times
    update_sg_wakeup_stats() reports the second group has more idle CPUs
    than the first group. The scheduler thinks the second group is less
    busy. Then it selects least busy CPUs among CPU 8-11. Therefore CPU 8-11
    can be crowded with newly forked threads, at the same time CPU 0-7
    can be idle.
    
    A task may not use all the CPUs in a schedule group due to CPU affinity.
    Only update schedule group statistics for allowed CPUs.
    
    Signed-off-by: Adam Li <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
sched/rt: Have RT_PUSH_IPI be default off for non PREEMPT_RT [+ + +]
Author: Steven Rostedt <[email protected]>
Date:   Fri May 15 10:37:40 2026 -0400

    sched/rt: Have RT_PUSH_IPI be default off for non PREEMPT_RT
    
    commit dd29c017aed628076e915fe4cdfb5392fd4c5cab upstream.
    
    RT migration is done aggressively. When a CPU schedules out a high
    priority RT task for a lower priority task, it will look to see if there's
    any RT tasks that are waiting to run on another CPU that is of higher
    priority than the task this CPU is about to run. If it finds one, it will
    pull that task over to the CPU and allow it to run there instead.
    
    Normally, this pulling is done by looking at the RT overloaded mask (rto)
    which contains all the CPUs in the scheduler domain with RT tasks that are
    waiting to run due to a higher priority RT task currently running on their
    CPU. The CPU that is about to schedule a lower priority task will grab the
    rq lock of the overloaded CPU and move the RT task from that CPU's runqueue
    to the local one and schedule the higher priority RT task.
    
    This caused issues when a lot of CPUs would schedule a lower priority task
    at the same time. They would all try to grab the same runqueue lock of
    the CPU with the overloaded RT tasks. Only the first CPU that got in will
    get that task. All the others would wait until they got the runqueue lock
    and see there's nothing to pull and do nothing. On systems with lots of
    CPUs, this caused a large latency (up to 500us) which is beyond what
    PREEMPT_RT is to allow.
    
    The solution to that was to create an RT_PUSH_IPI logic. When any CPU
    wanted to pull a task, instead of grabbing the runqueue lock of the
    overloaded CPU, it would start by sending an IPI to the overloaded CPU,
    and that IPI handler would have the CPU with the waiting RT task do a push
    instead. Then that handler would send an IPI to the next CPU with
    overloaded RT tasks, and so on. Note, after the first CPU starts this
    process, if another CPU wanted to do a pull, it would see that the process
    has already begun and would only increment a counter to have the IPIs
    continue again.
    
    The RT_PUSH_IPI solved the latency problem with PREEMPT_RT but could cause
    a new issue with non PREEMPT_RT. Namely, softirqs run in a threaded
    context on PREEMPT_RT but they can run in an interrupt context in non-RT.
    
    If an IPI lands on a CPU that has just woken up multiple RT tasks and the
    current CPU is running a non RT or a low priority RT task, instead of
    doing a push, it would simply do a schedule on that CPU. But if a softirq
    was also executing on this CPU, the schedule would need to wait until the
    softirq finished. Until then, the CPU would still be considered overloaded
    as there are RT tasks still waiting to run on it.
    
    A live lock occurred on a workload that was doing heavy networking traffic
    on a large machine where the softirqs would run 500us out of 750us. And it
    would also be waking up RT tasks, causing the RT pull logic to be
    constantly executed.
    
    When a softirq triggered on a CPU with RT tasks queued but not running
    yet, and the other CPUs would see this CPU as being overloaded, they would
    send an IPI over to it. The CPU would notice that the waiting RT tasks are
    of higher priority than the currently running task and simply schedule
    that CPU instead. But because the softirq was executing, before it could
    schedule, it would receive another IPI to do the same. The amount of IPIs
    would slow down the currently running softirq so much that before it could
    return back to task context, it would execute another softirq never
    allowing the CPU to schedule. This live locked that CPU.
    
    As RT_PUSH_IPI was created to help PREEMPT_RT, make it default off if
    PREEMPT_RT is not enabled.
    
    Fixes: b6366f048e0c ("sched/rt: Use IPI to trigger RT task push migration instead of pulling")
    Closes: https://lore.kernel.org/all/[email protected]/
    Reported-by: Tejun Heo <[email protected]>
    Signed-off-by: Steven Rostedt <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
scsi: hpsa: Fix DMA mapping leak on IOACCEL2 reset path [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Tue Jun 23 00:00:28 2026 +0800

    scsi: hpsa: Fix DMA mapping leak on IOACCEL2 reset path
    
    commit e166bafc483e927150cb9b5f286c9191ea0df84e upstream.
    
    If phys_disk->in_reset is set, the function returns directly without
    undoing the resources acquired for the command. Add the missing error
    cleanup by unmapping the IOACCEL2 SG chain block when needed, unmapping
    the SCSI command, and dropping the outstanding IOACCEL command count
    before returning.
    
    Fixes: c5dfd106414f ("scsi: hpsa: correct device resets")
    Cc: [email protected]
    Signed-off-by: Haoxiang Li <[email protected]>
    Acked-by: Don Brace <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: pm8001: Fix error code in non_fatal_log_show() [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Sat May 30 22:45:48 2026 +0300

    scsi: pm8001: Fix error code in non_fatal_log_show()
    
    [ Upstream commit 1b6f03b7ae9ee27054c55bb55a69d05555a78516 ]
    
    The non_fatal_log_show() function is supposed to return negative error
    codes on failure.  But because the error codes are saved in a u32 and
    then cast to signed long, they end up being high positive values instead
    of negative.  Remove the intermediary u32 variable to fix this bug.
    
    Fixes: dba2cc03b9db ("scsi: pm80xx: sysfs attribute for non fatal dump")
    Signed-off-by: Dan Carpenter <[email protected]>
    Acked-by: Jack Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: Revert "scsi: Fix sas_user_scan() to handle wildcard and multi-channel scans" [+ + +]
Author: Martin Wilck <[email protected]>
Date:   Wed May 13 19:42:36 2026 +0200

    scsi: Revert "scsi: Fix sas_user_scan() to handle wildcard and multi-channel scans"
    
    [ Upstream commit 8c292e89bd831c8a13e92f3429ef66bbe0b83677 ]
    
    This reverts commit 37c4e72b0651e7697eb338cd1fb09feef472cc1a.
    
    Said commit causes excessive resource usage and even system freeze with
    some controllers, e.g. smartpqi and hisi_sas. The justification provided
    by the patch authors [1] was supporting a special mode of the mpi3mr and
    mpt3sas, so-called "Tri-mode", in which NVMe drives are exposed as SCSI
    devices on a separate channel. While that's useful for these drivers, it
    seems wrong to cause major breakage for other drivers for the sake of
    this feature.
    
    [1] https://lore.kernel.org/linux-scsi/CAFdVvOwjy+2ORJ6uJkspiLTPF05481U7gcS4QohFOFGPqAs8ig@mail.gmail.com/
    
    Fixes: 37c4e72b0651 ("scsi: Fix sas_user_scan() to handle wildcard and multi-channel scans")
    Signed-off-by: Martin Wilck <[email protected]>
    Cc: Don Brace <[email protected]>
    Cc: [email protected]
    Cc: Ranjan Kumar <[email protected]>
    Cc: Sathya Prakash Veerichetty <[email protected]>
    Cc: Kashyap Desai <[email protected]>
    Cc: Sumit Saxena <[email protected]>
    Cc: [email protected]
    Cc: [email protected]
    Cc: Yihang Li <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: sg: Report request-table problems when any status is set [+ + +]
Author: Xu Rao <[email protected]>
Date:   Tue Jul 7 11:08:45 2026 +0800

    scsi: sg: Report request-table problems when any status is set
    
    commit 1d3a742afeb761eaead774691bde1ced699e9a5d upstream.
    
    SG_GET_REQUEST_TABLE reports per-request diagnostic state through
    sg_req_info::problem. The field is meant to indicate whether there is an
    error to report for a completed request.
    
    sg_fill_request_table() currently combines masked_status, host_status
    and driver_status with bitwise AND. This only reports a problem when all
    three status fields are non-zero at the same time. A normal target check
    condition, for example, has masked_status set while host_status and
    driver_status may both be zero, so the request is incorrectly reported
    as clean.
    
    Use the same condition as sg_new_read(), which sets SG_INFO_CHECK when
    any of the three status fields is non-zero.
    
    Cc: [email protected]
    Signed-off-by: Xu Rao <[email protected]>
    Reviewed-by: Bart Van Assche <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: smartpqi: Use shost_to_hba() in pqi_scan_finished() [+ + +]
Author: Martin Wilck <[email protected]>
Date:   Wed May 13 19:42:35 2026 +0200

    scsi: smartpqi: Use shost_to_hba() in pqi_scan_finished()
    
    commit 57db1307afb1f83d45f5ff53b93f8d040100d13e upstream.
    
    shost_to_hba() is used everywhere except to obtain pqi_ctrl_info from
    shosti, except in pqi_scan_finished(), where shost_priv() is used.  This
    causes one pointer dereference to be missed, as shost->hostdata is a
    pointer in smartpqi. Fix it.
    
    Fixes: 6c223761eb54 ("smartpqi: initial commit of Microsemi smartpqi driver")
    Signed-off-by: Martin Wilck <[email protected]>
    Reviewed-by: Don Brace <[email protected]>
    Cc: Don Brace <[email protected]>
    Cc: [email protected]
    Cc: [email protected]
    Reviewed-by: Hannes Reinecke <[email protected]>
    Reviewed-by: Hannes Reinecke <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: target: core: Fix iSCSI ISID use-after-free in REGISTER AND MOVE [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Wed Jun 10 04:22:48 2026 +0000

    scsi: target: core: Fix iSCSI ISID use-after-free in REGISTER AND MOVE
    
    commit fda6a1f3c3d7047b5ce5654487649c2daa738bfc upstream.
    
    core_scsi3_emulate_pro_register_and_move() maps the PERSISTENT RESERVE OUT
    parameter list with transport_kmap_data_sg() and parses the destination
    TransportID with target_parse_pr_out_transport_id(). For an iSCSI
    TransportID (FORMAT CODE 01b), iscsi_parse_pr_out_transport_id() returns
    the ISID in iport_ptr as a raw pointer into that mapped buffer.
    
    The function then unmaps the buffer with transport_kunmap_data_sg() before
    dereferencing iport_ptr in strcmp(), __core_scsi3_locate_pr_reg() and
    core_scsi3_alloc_registration(). When the parameter list spans more than
    one page (PARAMETER LIST LENGTH > 4096), transport_kmap_data_sg() uses
    vmap() and transport_kunmap_data_sg() does vunmap(), so the kernel virtual
    address backing iport_ptr is torn down and every subsequent dereference is
    a use-after-free read of the unmapped region.
    
    Keep the parameter list mapped until iport_ptr is no longer needed: drop
    the early transport_kunmap_data_sg() and unmap once on the success path,
    right before returning. The error paths already unmap through the existing
    "if (buf) transport_kunmap_data_sg(cmd)" at the out: label, which now runs
    on every post-map error exit because buf is no longer cleared early. Only
    reads of the mapping happen while spinlocks are held; the map and unmap
    calls remain outside any lock. The sibling caller
    core_scsi3_decode_spec_i_port() already uses the buffer before unmapping it
    and is left unchanged.
    
    Fixes: 4949314c7283 ("target: Allow control CDBs with data > 1 page")
    Cc: [email protected]
    Signed-off-by: Bryam Vargas <[email protected]>
    Reviewed-by: John Garry <[email protected]>
    Reviewed-by: David Disseldorp <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sctp: hold socket lock when dumping endpoints in sctp_diag [+ + +]
Author: Xin Long <[email protected]>
Date:   Mon Jun 15 15:36:30 2026 -0400

    sctp: hold socket lock when dumping endpoints in sctp_diag
    
    [ Upstream commit 7d8297e26b4e20b5d1c3c3fe51fe81a1c7fbc823 ]
    
    SCTP_DIAG endpoint dumping was traversing endpoint address lists without
    holding lock_sock(), while those lists could change concurrently via
    socket operations (e.g., bindx changes). This creates a race where
    nla_reserve() counts addresses under RCU protection, but the subsequent
    copy may see fewer entries, potentially leaking uninitialized memory to
    userspace.
    
    Fix this by:
    
    - Taking a reference on each endpoint during hash traversal
    - Moving socket operations (lock_sock()) outside read_lock_bh()
    - Serializing address list access during dump
    - Reworking sctp_for_each_endpoint() to support restart-based traversal
      with (net, pos) tracking
    
    Also:
    
    - Add WARN_ON_ONCE() for inconsistent address counts
    - Fix idiag_states filtering for LISTEN vs association cases
    - Skip dumping endpoints being freed (ep->base.dead)
    - Move dump position tracking into iterator, removing cb->args[4] and
      its comment for sctp_ep_dump().,
    - Update the comment for cb->args[4] and remove the comment for unused
      cb->args[5] for sctp_sock_dump().
    
    Note: traversal is restart-based and may re-scan buckets multiple times,
    but this is acceptable due to small bucket sizes and required to support
    sleeping-safe callbacks.
    
    This issue was reported by Nico Yip (@_cyeaa_) working with TrendAI Zero
    Day Initiative.
    
    Reported-by: Zero Day Initiative <[email protected]>
    Fixes: 8f840e47f190 ("sctp: add the sctp_diag.c file")
    Signed-off-by: Xin Long <[email protected]>
    Link: https://patch.msgid.link/4c1b49ab87e0f7d552ebd8172b364b1994e913c9.1781552190.git.lucien.xin@gmail.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

sctp: validate embedded address parameter length [+ + +]
Author: Xin Long <[email protected]>
Date:   Tue Jun 9 18:14:28 2026 -0400

    sctp: validate embedded address parameter length
    
    [ Upstream commit e9361d0ca55c4af12aac09e2572852fa91046229 ]
    
    sctp_verify_asconf() and sctp_verify_param() only validate ADD_IP, DEL_IP,
    and SET_PRIMARY parameters against a fixed minimum size of sizeof(struct
    sctp_addip_param) + sizeof(struct sctp_paramhdr). This ensures the outer
    parameter is large enough to contain an embedded address parameter header,
    but does not verify that the embedded address parameter's declared length
    fits within the bounds of the outer parameter.
    
    Later, sctp_process_param() and sctp_process_asconf_param() extract the
    embedded address parameter and pass it to af->from_addr_param(), which uses
    the address parameter length to parse the variable-length address payload.
    A malformed peer can therefore advertise an embedded address parameter
    length that exceeds the remaining bytes in the enclosing parameter.
    
    Validate that addr_param->p.length does not exceed the space available
    after the sctp_addip_param header before processing the embedded address
    parameter. Reject malformed parameters when the embedded address length
    extends beyond the enclosing parameter bounds.
    
    This prevents out-of-bounds reads when parsing malformed parameters carried
    in INIT or ASCONF processing paths.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: sashiko <[email protected]>
    Signed-off-by: Xin Long <[email protected]>
    Link: https://patch.msgid.link/7838b86b69f52add28808fb59034c8f992e97b2d.1781043268.git.lucien.xin@gmail.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

sctp: validate STALE_COOKIE cause length before reading staleness [+ + +]
Author: Weiming Shi <[email protected]>
Date:   Fri Jul 3 20:35:46 2026 -0700

    sctp: validate STALE_COOKIE cause length before reading staleness
    
    commit 1cd23ca80784223fa2204e16203f754da4e821f8 upstream.
    
    When an ERROR chunk with a STALE_COOKIE cause is received in the
    COOKIE_ECHOED state, sctp_sf_do_5_2_6_stale() reads the 4-byte Measure
    of Staleness that follows the cause header:
    
            err   = (struct sctp_errhdr *)(chunk->skb->data);
            stale = ntohl(*(__be32 *)((u8 *)err + sizeof(*err)));
    
    err is the first cause in the chunk, not the STALE_COOKIE cause that
    caused the dispatch, and nothing guarantees the staleness field is
    present. sctp_walk_errors() only requires a cause to be as long as the
    4-byte header, so for a STALE_COOKIE cause of length 4 the read runs
    past the cause, and for a minimal ERROR chunk past skb->tail. The value
    is echoed to the peer in the Cookie Preservative of the reply INIT,
    leaking uninitialized memory.
    
    sctp_sf_cookie_echoed_err() already walks to the STALE_COOKIE cause, so
    check its length there and pass it to sctp_sf_do_5_2_6_stale(), which
    reads that cause instead of the first one. A STALE_COOKIE cause too
    short to hold the staleness field is discarded.
    
    The read is reachable by any peer that can drive an association into
    COOKIE_ECHOED, including an unprivileged process using a raw SCTP socket
    in a user and network namespace.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: Xiang Mei <[email protected]>
    Assisted-by: Claude:claude-opus-4-8
    Cc: [email protected]
    Signed-off-by: Weiming Shi <[email protected]>
    Acked-by: Xin Long <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
seg6: validate SRH length before reading fixed fields [+ + +]
Author: Nuoqi Gui <[email protected]>
Date:   Tue Jun 23 18:32:31 2026 +0800

    seg6: validate SRH length before reading fixed fields
    
    [ Upstream commit a75d99f46bf21b45965ce39c5cfb3b8bb5ffb1aa ]
    
    seg6_validate_srh() reads fixed SRH fields such as srh->type and
    srh->hdrlen before checking that the supplied length covers the fixed
    struct ipv6_sr_hdr fields.
    
    The BPF SEG6 encap path reaches this with a BPF program-supplied pointer
    and length: bpf_lwt_push_encap() and the SEG6 local BPF END_B6 and
    END_B6_ENCAP actions call bpf_push_seg6_encap(), which forwards the
    length to seg6_validate_srh() with no minimum-size guard.  A 2-byte SEG6
    encap header can therefore make the validator read srh->type at offset 2
    beyond the caller-supplied buffer.
    
    Reject lengths shorter than the fixed SRH at the top of
    seg6_validate_srh(), before any field is read.  This fixes the BPF helper
    path and keeps the common validator robust.
    
    Fixes: fe94cc290f53 ("bpf: Add IPv6 Segment Routing helpers")
    Signed-off-by: Nuoqi Gui <[email protected]>
    Reviewed-by: Andrea Mayer <[email protected]>
    Link: https://patch.msgid.link/20260623-f01-17-seg6-srh-len-v2-1-2edc40e9e3e1@mails.tsinghua.edu.cn
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
selftests/mm: allow PUD-level entries in compound testcase of hmm tests [+ + +]
Author: Sayali Patil <[email protected]>
Date:   Thu Jun 11 09:11:00 2026 +0530

    selftests/mm: allow PUD-level entries in compound testcase of hmm tests
    
    [ Upstream commit 224ed0e019b122d08580362abe57574a78f2b5fa ]
    
    Patch series "selftests/mm: assorted fixes for hmm-tests", v3.
    
    This series fixes a few issues in hmm-tests that show up when page-size
    and huge-page configuration differ from the hardcoded assumptions the
    tests were written for (PMD/THP sizing, default hugepage size, and related
    cases).
    
    It also includes a fix to exclusive_cow: the test ignored the return value
    of fork(), so both parent and child ran the same teardown path.
    
    This patch (of 3):
    
    The HMM compound testcase currently assumes only PMD-level mappings and
    fails on systems where default_hugepagesz=1G is set, because the region is
    then reported by the device at PUD level.
    
    Determine the mapping level (PMD or PUD) the device reports for the first
    page of the range and require every page to match that level exactly via
    ASSERT_EQ().  This accepts PUD-level mappings while preserving the
    expected/observed protection values printed on failure, and rejects a
    fragmented mapping that mixes PMD- and PUD-level entries within the same
    range (which a per-page OR check would have let pass).
    
    Link: https://lore.kernel.org/[email protected]
    Link: https://lore.kernel.org/[email protected]
    Fixes: e478425bec93 ("mm/hmm: add tests for hmm_pfn_to_map_order()")
    Signed-off-by: Sayali Patil <[email protected]>
    Co-developed-by: Aboorva Devarajan <[email protected]>
    Signed-off-by: Aboorva Devarajan <[email protected]>
    Cc: Alex Sierra <[email protected]>
    Cc: Alistair Popple <[email protected]>
    Cc: Balbir Singh <[email protected]>
    Cc: David Hildenbrand <[email protected]>
    Cc: Jason Gunthorpe <[email protected]>
    Cc: Leon Romanovsky <[email protected]>
    Cc: Liam R. Howlett <[email protected]>
    Cc: Lorenzo Stoakes <[email protected]>
    Cc: Matthew Brost <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Mike Rapoport <[email protected]>
    Cc: Ralph Campbell <[email protected]>
    Cc: Shuah Khan <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

selftests/mm: clarify alternate unmapping in compaction_test [+ + +]
Author: Sayali Patil <[email protected]>
Date:   Thu May 21 12:17:53 2026 +0530

    selftests/mm: clarify alternate unmapping in compaction_test
    
    [ Upstream commit 69ba1d76d93ab818245333cf400928477ba72053 ]
    
    Add a comment explaining that every other entry in the list is unmapped to
    intentionally create fragmentation with locked pages before invoking
    check_compaction().
    
    Link: https://lore.kernel.org/da5e0a8d5152e54152c0d2f456aac2fac35af291.1779296493.git.sayalip@linux.ibm.com
    Fixes: bd67d5c15cc1 ("Test compaction of mlocked memory")
    Signed-off-by: Sayali Patil <[email protected]>
    Tested-by: Venkat Rao Bagalkote <[email protected]>
    Cc: David Hildenbrand (Arm) <[email protected]>
    Cc: Dev Jain <[email protected]>
    Cc: Liam Howlett <[email protected]>
    Cc: Miaohe Lin <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Oscar Salvador <[email protected]>
    Cc: "Ritesh Harjani (IBM)" <[email protected]>
    Cc: Shuah Khan <[email protected]>
    Cc: Zi Yan <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
serial: 8250_mid: Disable DMA for selected platforms [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Fri Jul 17 21:33:38 2026 -0400

    serial: 8250_mid: Disable DMA for selected platforms
    
    [ Upstream commit b1b4efea05a56c0995e4702a86d6624b4fdff32f ]
    
    In accordance with Errata (specification updates)
    HSUART May Stop Functioning when DMA is Active.
    
    - Denverton document #572409, rev 3.4, DNV60
    - Ice Lake Xeon D document #714070, ICXD65
    - Snowridge document #731931, SNR44
    
    For a quick fix just disable the respective callbacks during the device probe.
    Depending on the future development we might remove them completely.
    
    Reported-by: micas-opensource <[email protected]>
    Closes: https://lore.kernel.org/linux-serial/[email protected]/
    Fixes: 6ede6dcd87aa ("serial: 8250_mid: add support for DMA engine handling from UART MMIO")
    Cc: stable <[email protected]>
    Signed-off-by: Andy Shevchenko <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

serial: 8250_mid: Remove 8250_pci usage [+ + +]
Author: Ilpo Järvinen <[email protected]>
Date:   Fri Jul 17 21:33:37 2026 -0400

    serial: 8250_mid: Remove 8250_pci usage
    
    [ Upstream commit a136abd7e7abe0f1247f8ffde6cc7c8ab09f985b ]
    
    8250_mid uses FL_*BASE* from linux/8250_pci.h and nothing else. The
    code can be simplified by directly defining BARs within the driver
    instead.
    
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: b1b4efea05a5 ("serial: 8250_mid: Disable DMA for selected platforms")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

serial: 8250_omap: clear rx_running on zero-length DMA completes [+ + +]
Author: Matthias Feser <[email protected]>
Date:   Tue May 26 07:35:09 2026 +0000

    serial: 8250_omap: clear rx_running on zero-length DMA completes
    
    commit 061b627ba534230a18ec4d7251562af12325d06a upstream.
    
    On AM33xx RX DMA only triggers when the FIFO reaches the
    configured threshold (typically 48 bytes). For smaller bursts
    no DMA request is issued and the FIFO is drained by RX timeout.
    
    In this case __dma_rx_do_complete() can legitimately see count == 0.
    
    The current code exits early in this case and does not clear
    dma->rx_running, leaving the DMA state inconsistent. This can
    prevent RX DMA from restarting and may cause
    omap_8250_rx_dma_flush() to fail, marking DMA as broken.
    
    Fix this by clearing dma->rx_running once the DMA transfer has
    completed or been terminated, even if no data was transferred.
    
    Fixes: a5fd8945a478 ("serial: 8250: 8250_omap.c: Clear DMA RX running status only after DMA termination is done")
    Cc: stable <[email protected]>
    Signed-off-by: Matthias Feser <[email protected]>
    Reviewed-by: Moteen Shah <[email protected]>
    Link: https://patch.msgid.link/BE3P281MB55155F2F5795E411F5A65282EE0B2@BE3P281MB5515.DEUP281.PROD.OUTLOOK.COM
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

serial: msm: Disable DMA for kernel console UART [+ + +]
Author: Stephan Gerhold <[email protected]>
Date:   Mon Jul 6 20:03:32 2026 +0200

    serial: msm: Disable DMA for kernel console UART
    
    commit 22dd2777e6c180e1c945b00f6d18550979436324 upstream.
    
    At the moment, concurrent writes from userspace and the kernel to the
    console can trigger a race condition that results in an infinite loop of
    the same messages printed over and over again. This is most likely to
    happen during system startup or shutdown when the init system starts/stops
    a large number of system services that interact with various kernel code.
    
    When userspace writes to the TTY device, the driver initiates an
    asynchronous DMA transfer and releases the port lock. At the same moment,
    the kernel printk path might grab the port lock and re-configure the UART
    controller for PIO, without waiting for the DMA operation to complete. It
    seems like this collision results in zero progress being reported for the
    DMA engine, so the same text is printed to the console over and over again.
    
    For the kernel console, we want a reliable output path that will be
    functional even during crashes etc. So rather than implementing complex
    code to synchronize the kernel console write routines with the userspace
    DMA write routines, simply disable DMA for the console UART instance.
    
    Similar checks exist in many other serial drivers, e.g. 8250_port.c,
    imx.c, sh-sci.c etc.
    
    Cc: stable <[email protected]>
    Fixes: 3a878c430fd6 ("tty: serial: msm: Add TX DMA support")
    Signed-off-by: Stephan Gerhold <[email protected]>
    Acked-by: Konrad Dybcio <[email protected]>
    Link: https://patch.msgid.link/20260706-serial-msm-console-dma-collision-v1-1-3179b8cb1d89@linaro.org
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
skmsg: convert struct sk_msg_sg::copy to a bitmap [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Jul 2 11:26:22 2026 -0400

    skmsg: convert struct sk_msg_sg::copy to a bitmap
    
    [ Upstream commit 5a8fb33e530512ee67a11b30f3451a4f030f4b01 ]
    
    We have plans for increasing MAX_SKB_FRAGS, but sk_msg_sg::copy
    is currently an unsigned long, limiting MAX_SKB_FRAGS to 30 on 32bit arches.
    
    Convert it to a bitmap, as Jakub suggested.
    
    Signed-off-by: Eric Dumazet <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 406e8a651a7b ("net: skmsg: preserve sg.copy across SG transforms")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
smb/client: preserve errors from smb2_set_sparse() [+ + +]
Author: Huiwen He <[email protected]>
Date:   Wed Jun 24 10:15:43 2026 +0800

    smb/client: preserve errors from smb2_set_sparse()
    
    [ Upstream commit 2a4b3d2db5c6fcdba889baf7b2ae5661b0beac89 ]
    
    smb2_set_sparse() converts every FSCTL_SET_SPARSE failure to false and
    marks sparse support as broken for the share. Callers therefore report
    EOPNOTSUPP even for errors such as ENOSPC or EACCES, and later sparse
    operations remain disabled until the share is unmounted.
    
    Return the SMB2 ioctl error directly. Set broken_sparse_sup only for
    EOPNOTSUPP, which indicates that the server does not support the request.
    
    Update smb3_punch_hole() to propagate the error returned by
    smb2_set_sparse().
    
    Fixes: 3d1a3745d8ca ("Add sparse file support to SMB2/SMB3 mounts")
    Signed-off-by: Huiwen He <[email protected]>
    Reviewed-by: ChenXiaoSong <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
smb2: small refactor in smb2_check_message() [+ + +]
Author: Enzo Matsumiya <[email protected]>
Date:   Tue Jul 14 18:04:03 2026 -0400

    smb2: small refactor in smb2_check_message()
    
    [ Upstream commit da3847894fddc27ca95d5ac0012f444a77a5e0c3 ]
    
    If the command is SMB2_IOCTL, OutputLength and OutputContext are
    optional and can be zero, so return early and skip calculated length
    check.
    
    Move the mismatched length message to the end of the check, to avoid
    unnecessary logs when the check was not a real miscalculation.
    
    Also change the pr_warn_once() to a pr_warn() so we're sure to get a
    log for the real mismatches.
    
    Signed-off-by: Enzo Matsumiya <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Stable-dep-of: 53b7c271f06b ("smb: client: restrict implied bcc[0] exemption to responses without data area")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
smb: client: Fix next buffer leak in receive_encrypted_standard() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Thu Jul 16 11:36:57 2026 -0400

    smb: client: Fix next buffer leak in receive_encrypted_standard()
    
    [ Upstream commit 1c6267a1d5cf4c73b656f8181b310cbbb3e4767b ]
    
    receive_encrypted_standard() allocates next_buffer before checking
    whether the number of compound PDUs already reached MAX_COMPOUND. If
    the limit check fails, the function returns immediately and the newly
    allocated next_buffer is not assigned to server->smallbuf/server->bigbuf,
    making it leaked.
    
    Move the MAX_COMPOUND check before allocating next_buffer.
    
    Fixes: b24df3e30cbf ("cifs: update receive_encrypted_standard to handle compounded responses")
    Cc: [email protected]
    Signed-off-by: Haoxiang Li <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

smb: client: fix overflow in passthrough ioctl bounds check [+ + +]
Author: Guangshuo Li <[email protected]>
Date:   Wed Jul 8 20:35:20 2026 +0800

    smb: client: fix overflow in passthrough ioctl bounds check
    
    [ Upstream commit a4f27ad055392fa164f5649e89a3637b033c5fcc ]
    
    smb2_ioctl_query_info() validates the PASSTHRU_FSCTL response payload
    before copying it to userspace.
    
    The payload offset and length both come from 32-bit fields. The bounds
    check currently adds OutputOffset and qi.input_buffer_length directly, so
    the addition can wrap in 32-bit arithmetic before the result is compared
    against the response buffer length.
    
    A malicious server can use a large OutputOffset and a small OutputCount
    to make the wrapped sum pass the bounds check. The later copy_to_user()
    then reads from io_rsp + OutputOffset, outside the response buffer.
    
    Use size_add() for the offset plus length check so overflow is treated as
    out of bounds.
    
    Fixes: 2b1116bbe898 ("CIFS: Use common error handling code in smb2_ioctl_query_info()")
    Signed-off-by: Guangshuo Li <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

smb: client: harden POSIX SID length parsing [+ + +]
Author: Zihan Xi <[email protected]>
Date:   Thu Jul 16 12:28:12 2026 -0400

    smb: client: harden POSIX SID length parsing
    
    [ Upstream commit 7ad2bcf2441430bb2e918fb3ef9a90d775a6e422 ]
    
    posix_info_sid_size() reads sid[1] to obtain the subauthority count,
    but its existing boundary check still accepts buffers with only one
    remaining byte. Require two bytes before reading sid[1] so all client
    paths that reuse the helper reject truncated POSIX SIDs safely.
    
    Fixes: 349e13ad30b4 ("cifs: add smb2 POSIX info level")
    Cc: [email protected]
    Reported-by: Yuan Tan <[email protected]>
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Reported-by: Xin Liu <[email protected]>
    Assisted-by: Codex:gpt-5.4
    Signed-off-by: Zihan Xi <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

smb: client: mask server-provided mode to 07777 in modefromsid [+ + +]
Author: Norbert Manthey <[email protected]>
Date:   Thu Jul 16 12:28:08 2026 -0400

    smb: client: mask server-provided mode to 07777 in modefromsid
    
    [ Upstream commit e3d9c7160d483fc8f9e225aafad8ecbbc43f3151 ]
    
    When modefromsid is active, parse_dacl() applies the server-provided
    sub_auth[2] value from the NFS mode SID to cf_mode without masking to
    07777. Apply the correct masking, same as in the read path.
    
    Fixes: e2f8fbfb8d09c ("cifs: get mode bits from special sid on stat")
    Signed-off-by: Norbert Manthey <[email protected]>
    Assisted-by: Kiro:claude-opus-4.6
    Cc: [email protected]
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

smb: client: restrict implied bcc[0] exemption to responses without data area [+ + +]
Author: Shoichiro Miyamoto <[email protected]>
Date:   Tue Jul 14 18:04:05 2026 -0400

    smb: client: restrict implied bcc[0] exemption to responses without data area
    
    [ Upstream commit 53b7c271f06be4dd5cfc8c6ef552a8355c891a7f ]
    
    smb2_check_message() has a long-standing quirk that accepts a response
    whose calculated length is one byte larger than the bytes actually
    received ("server can return one byte more due to implied bcc[0]").
    This was introduced to accommodate servers that omit the trailing bcc[0]
    overlap byte when no data area is present.
    
    However, the exemption is applied unconditionally, regardless of whether
    the command actually carries a data area (has_smb2_data_area[]).  When a
    response with a data area is subject to the +1 exemption, the reported
    data can extend one byte beyond the bytes actually received, yet
    smb2_check_message() still accepts it.  The subsequent decoder then reads
    past the end of the receive buffer.  This is reachable during NEGOTIATE
    and SESSION_SETUP, before the session is established.
    
    The resulting out-of-bounds reads are visible under KASAN when mounting
    against a non-conforming server; both the SPNEGO/negTokenInit and the
    NTLMSSP challenge decoders are affected:
    
      BUG: KASAN: slab-out-of-bounds in asn1_ber_decoder+0x16a7/0x1b00
      Read of size 1 at addr ffff8880084d67c0 by task mount.cifs/81
      CPU: 1 UID: 0 PID: 81 Comm: mount.cifs Not tainted 7.1.0-rc6 #1
      Call Trace:
       <TASK>
       dump_stack_lvl+0x4e/0x70
       print_report+0x157/0x4c9
       kasan_report+0xce/0x100
       asn1_ber_decoder+0x16a7/0x1b00
       decode_negTokenInit+0x19/0x30
       SMB2_negotiate+0x31d9/0x4c90
       cifs_negotiate_protocol+0x1f2/0x3f0
       cifs_get_smb_ses+0x93f/0x17e0
       cifs_mount_get_session+0x7f/0x3a0
       cifs_mount+0xb4/0xcf0
       cifs_smb3_do_mount+0x23a/0x1500
       smb3_get_tree+0x3b0/0x630
       vfs_get_tree+0x82/0x2d0
       fc_mount+0x10/0x1b0
       path_mount+0x50d/0x1de0
       __x64_sys_mount+0x20b/0x270
       do_syscall_64+0xee/0x590
       entry_SYSCALL_64_after_hwframe+0x77/0x7f
       </TASK>
      Allocated by task 85:
       kmem_cache_alloc_noprof+0x106/0x380
       mempool_alloc_noprof+0x116/0x1e0
       cifs_small_buf_get+0x31/0x80
       allocate_buffers+0x10d/0x2b0
       cifs_demultiplex_thread+0x1d5/0x1d50
       kthread+0x2c6/0x390
       ret_from_fork+0x36e/0x5a0
       ret_from_fork_asm+0x1a/0x30
      The buggy address is located 0 bytes to the right of
       allocated 448-byte region [ffff8880084d6600, ffff8880084d67c0)
       which belongs to the cache cifs_small_rq of size 448
    
      BUG: KASAN: slab-out-of-bounds in kmemdup_noprof+0x36/0x50
      Read of size 329 at addr ffff88800726c678 by task mount.cifs/89
      CPU: 0 UID: 0 PID: 89 Comm: mount.cifs Tainted: G    B      7.1.0-rc6 #1
      Call Trace:
       <TASK>
       dump_stack_lvl+0x4e/0x70
       print_report+0x157/0x4c9
       kasan_report+0xce/0x100
       kasan_check_range+0x10f/0x1e0
       __asan_memcpy+0x23/0x60
       kmemdup_noprof+0x36/0x50
       decode_ntlmssp_challenge+0x457/0x680
       SMB2_sess_auth_rawntlmssp_negotiate+0x6f0/0xcb0
       SMB2_sess_setup+0x219/0x4f0
       cifs_setup_session+0x248/0xaf0
       cifs_get_smb_ses+0xf79/0x17e0
       cifs_mount_get_session+0x7f/0x3a0
       cifs_mount+0xb4/0xcf0
       cifs_smb3_do_mount+0x23a/0x1500
       smb3_get_tree+0x3b0/0x630
       vfs_get_tree+0x82/0x2d0
       fc_mount+0x10/0x1b0
       path_mount+0x50d/0x1de0
       __x64_sys_mount+0x20b/0x270
       do_syscall_64+0xee/0x590
       entry_SYSCALL_64_after_hwframe+0x77/0x7f
       </TASK>
      Allocated by task 93:
       kmem_cache_alloc_noprof+0x106/0x380
       mempool_alloc_noprof+0x116/0x1e0
       cifs_small_buf_get+0x31/0x80
       allocate_buffers+0x10d/0x2b0
       cifs_demultiplex_thread+0x1d5/0x1d50
       kthread+0x2c6/0x390
       ret_from_fork+0x36e/0x5a0
       ret_from_fork_asm+0x1a/0x30
      The buggy address is located 120 bytes inside of
       allocated 448-byte region [ffff88800726c600, ffff88800726c7c0)
       which belongs to the cache cifs_small_rq of size 448
    
    Restrict the +1 exemption to responses that have no data area, so that
    it still covers the bcc[0] omission it was meant for.  When a data area
    is present, the +1 discrepancy instead means the reported data length
    overruns the received buffer, so the response must be rejected.
    
    Fixes: 093b2bdad322 ("CIFS: Make demultiplex_thread work with SMB2 code")
    Cc: [email protected]
    Signed-off-by: Shoichiro Miyamoto <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

smb: client: use unaligned reads in parse_posix_ctxt() [+ + +]
Author: Zihan Xi <[email protected]>
Date:   Thu Jul 16 12:28:10 2026 -0400

    smb: client: use unaligned reads in parse_posix_ctxt()
    
    [ Upstream commit b86467cd2691192ad4809a5a6e922fc24b8e9839 ]
    
    The server controls create-context DataOffset, so the POSIX context data
    pointer may be misaligned on strict-alignment architectures. Use
    get_unaligned_le32() when reading nlink, reparse_tag, and mode.
    
    Fixes: 69dda3059e7a ("cifs: add SMB2_open() arg to return POSIX data")
    Cc: [email protected]
    Signed-off-by: Zihan Xi <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
soc: fsl: qe: panic on ioremap() failure in qe_reset() [+ + +]
Author: Wang Jun <[email protected]>
Date:   Fri Mar 27 08:12:25 2026 +0800

    soc: fsl: qe: panic on ioremap() failure in qe_reset()
    
    commit a0fe29d20e7822182e12324905af5115c1b3aed3 upstream.
    
    When ioremap() fails in qe_reset(), the global pointer qe_immr remains
    NULL, leading to a subsequent NULL pointer dereference when the pointer
    is accessed. Since this happens early in the boot process, a failure to
    map a few bytes of I/O memory indicates a fatal error from which the
    system cannot recover.
    
    Follow the same pattern as qe_sdma_init() and panic immediately when
    ioremap() fails. This avoids a silent NULL pointer dereference later
    and makes the error explicit.
    
    Fixes: 986585385131 ("[POWERPC] Add QUICC Engine (QE) infrastructure")
    Cc: [email protected]
    Signed-off-by: Wang Jun <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    [chleroy: Rearranged change to reduce churn]
    Signed-off-by: Christophe Leroy (CS GROUP) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

soc: ti: k3-ringacc: Fix access mode for k3_ringacc_ring_pop_tail_io/proxy [+ + +]
Author: Siddharth Vadapalli <[email protected]>
Date:   Fri May 1 18:10:54 2026 +0530

    soc: ti: k3-ringacc: Fix access mode for k3_ringacc_ring_pop_tail_io/proxy
    
    commit b920352cfd2b0fcd1249ff006618c939b64fc8f7 upstream.
    
    k3_ringacc_ring_pop_tail_io() and k3_ringacc_ring_pop_tail_proxy()
    incorrectly use K3_RINGACC_ACCESS_MODE_POP_HEAD instead of
    K3_RINGACC_ACCESS_MODE_POP_TAIL. This will result in ring elements being
    popped in the reverse order of that which the caller expects. Fix this.
    
    Fixes: 3277e8aa2504 ("soc: ti: k3: add navss ringacc driver")
    Cc: [email protected]
    Signed-off-by: Siddharth Vadapalli <[email protected]>
    Reviewed-by: Hari Prasath Gujulan Elango <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Nishanth Menon <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sparc: led: avoid trimming a newline from empty writes [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Mon Jun 15 13:58:50 2026 +0800

    sparc: led: avoid trimming a newline from empty writes
    
    [ Upstream commit 7eb475e8a738ee6fd1260aa59ddccb610fdd4300 ]
    
    led_proc_write() duplicates up to LED_MAX_LENGTH bytes with
    memdup_user_nul() and then unconditionally inspects buf[count - 1] to
    strip a trailing newline. A zero-length write therefore reads one byte
    before the duplicated buffer.
    
    The previous version rejected empty writes, but empty input already falls
    through to the existing default case and turns the LED off like any other
    unrecognized string. Preserve that behavior and only skip the newline
    trim when there is no input byte to inspect.
    
    Fixes: ee1858d3122d ("[SPARC]: Add sun4m LED driver.")
    Suggested-by: Andreas Larsson <[email protected]>
    Signed-off-by: Pengpeng Hou <[email protected]>
    Signed-off-by: Andreas Larsson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
spi: ep93xx: fix double-free of zeropage on DMA setup failure [+ + +]
Author: Felix Gu <[email protected]>
Date:   Fri May 29 23:31:06 2026 +0800

    spi: ep93xx: fix double-free of zeropage on DMA setup failure
    
    [ Upstream commit 7886054b06f762f62054957a8f6de0f14e6b7541 ]
    
    If DMA setup fails after allocating the zeropage, the error path frees
    the page but leaves espi->zeropage dangling. A subsequent call to
    ep93xx_spi_release_dma() sees the non-NULL pointer and frees the page
    again.
    
    Clear the pointer after freeing in the error path of
    ep93xx_spi_setup_dma().
    
    Fixes: 626a96db1169 ("spi/ep93xx: add DMA support")
    Signed-off-by: Felix Gu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

spi: fsl-lpspi: replace dmaengine_terminate_all() with dmaengine_terminate_sync() [+ + +]
Author: Carlos Song <[email protected]>
Date:   Mon May 25 14:23:56 2026 +0800

    spi: fsl-lpspi: replace dmaengine_terminate_all() with dmaengine_terminate_sync()
    
    commit e703ce47691b967fe9b4057fb1d062273211afa9 upstream.
    
    dmaengine_terminate_all() has been deprecated, so replace it with
    dmaengine_terminate_sync().
    
    Fixes: 09c04466ce7e ("spi: lpspi: add dma mode support")
    Cc: [email protected]
    Signed-off-by: Carlos Song <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

spi: fsl-lpspi: terminate the RX channel on TX prepare failure path [+ + +]
Author: Carlos Song <[email protected]>
Date:   Mon May 25 14:23:57 2026 +0800

    spi: fsl-lpspi: terminate the RX channel on TX prepare failure path
    
    commit 01980b5da56e573d62798d0ff6c86bcaa2b22cbe upstream.
    
    When dmaengine_prep_slave_sg() fails for the TX channel, the error path
    terminates the TX DMA channel but leaves the RX channel running. Since
    the RX channel was already submitted and issued prior to preparing
    the TX descriptor, returning -EINVAL causes the SPI core to unmap the
    DMA buffers while the RX DMA engine continues writing to them, leading
    to potential memory corruption or use-after-free.
    
    Terminate the RX channel before returning on the TX prepare failure path.
    
    Fixes: 09c04466ce7e ("spi: lpspi: add dma mode support")
    Cc: [email protected]
    Signed-off-by: Carlos Song <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

spi: sh-msiof: abort transfers when reset times out [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Tue Jun 23 21:58:34 2026 +0800

    spi: sh-msiof: abort transfers when reset times out
    
    [ Upstream commit 6dbaa4d288432c697cea47028480481b8b29bd6a ]
    
    sh_msiof_spi_reset_regs() asserts TX/RX reset and polls until the reset
    bits clear, but the poll result is ignored. sh_msiof_transfer_one() can
    therefore continue programming a transfer after the controller did not
    leave reset.
    
    Return the reset poll result from the helper and abort the transfer on
    timeout, matching the existing transfer path's error-return style.
    
    Fixes: fedd6940682a ("spi: sh-msiof: Add reset of registers before starting transfer")
    Signed-off-by: Pengpeng Hou <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

spi: uniphier: Fix completion initialization order before devm_request_irq() [+ + +]
Author: Kunihiko Hayashi <[email protected]>
Date:   Tue Jun 16 10:12:23 2026 +0900

    spi: uniphier: Fix completion initialization order before devm_request_irq()
    
    commit f3ad1c87d8201e54b66bd6072442f0b5d5a308ee upstream.
    
    The driver calls devm_request_irq() before initializing the completion
    used by the interrupt handler. Because the interrupt may occur immediately
    after devm_request_irq(), the handler may execute before init_completion().
    
    This may result in calling complete() on an uninitialized completion,
    causing undefined behavior. This has been observed with KASAN.
    
    Fix this by initializing the completion before registering the IRQ.
    
    Reported-by: Sangyun Kim <[email protected]>
    Reported-by: Kyungwook Boo <[email protected]>
    Fixes: 5ba155a4d4cc ("spi: add SPI controller driver for UniPhier SoC")
    Cc: [email protected]
    Cc: Masami Hiramatsu <[email protected]>
    Signed-off-by: Kunihiko Hayashi <[email protected]>
    Reviewed-by: Masami Hiramatsu (Google) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

spi: xilinx: use FIFO occupancy register to determine buffer size [+ + +]
Author: Lars Pöschel <[email protected]>
Date:   Fri Jun 12 12:52:44 2026 +0200

    spi: xilinx: use FIFO occupancy register to determine buffer size
    
    [ Upstream commit 47f3b5365536e8c38f264824ab15fdb74454e066 ]
    
    The method the driver uses to determine the size of the FIFO has a
    problem. What it currently does is this:
    It stops the SPI hardware and writes to the TX FIFO register until TX
    FIFO FULL asserts in the status register. But the hardware does not only
    have the FIFO, it also has a shift register which can hold a byte. This
    can be seen, when writing a byte to the FIFO (while the SPI hardware is
    stopped,) the TX FIFO EMPTY is still empty. So, if we have a FIFO size
    of 16 for example, the current method returns a 17.
    This is a problem, at least when using the driver in irq mode. The same
    size determined for the TX FIFO is also assumed for the RX FIFO. When a
    SPI transaction wants to write the amount of the FIFO size or more
    bytes, the following happens, for example with 16 bytes FIFO size:
    The driver stops the SPI hardware and writes 17 bytes to the TX FIFO and
    starts the SPI hardware and goes sleep.
    The hardware then shifts out 17 bytes (FIFO + shift register) and
    simultaneously reads bytes into the RX FIFO, but it only has 16 places,
    so it looses one byte. Then TX FIFO empty asserts, wakes the driver
    again, which has a fast path and reads 16 bytes from the RX FIFO, but
    before reading the last 17th byte (which is lost) it does this:
    
            sr = xspi->read_fn(xspi->regs + XSPI_SR_OFFSET);
            if (!(sr & XSPI_SR_RX_EMPTY_MASK)) {
                    xilinx_spi_rx(xspi);
                    rx_words--;
            }
    
    It reads the status register and checks if the RX FIFO is not empty.
    But it is empty in our case. So this check spins in a while loop
    forever locking the driver.
    
    This patch fixes the logic to determine the FIFO size.
    
    Fixes: 4c9a761402d7 ("spi/xilinx: Simplify spi_fill_tx_fifo")
    Signed-off-by: Lars Pöschel <[email protected]>
    Reviewed-by: Michal Simek <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
staging: media: atomisp: reduce load_primary_binaries() stack usage [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Tue Jul 14 16:01:58 2026 -0400

    staging: media: atomisp: reduce load_primary_binaries() stack usage
    
    [ Upstream commit f4d51e55dd47ef467fbe37d8575e20eee41b092d ]
    
    The load_primary_binaries() function is overly complex and has som large
    variables on the stack, which can cause warnings depending on CONFIG_FRAME_WARN
    setting:
    
    drivers/staging/media/atomisp/pci/sh_css.c: In function 'load_primary_binaries':
    drivers/staging/media/atomisp/pci/sh_css.c:5260:1: error: the frame size of 1560 bytes is larger than 1536 bytes [-Werror=frame-larger-than=]
    
    Half of the stack usage is for the prim_descr[] array, but only one
    member of the array is used at any given time.
    
    Reduce the stack usage by turning the array into a single structure.
    
    Fixes: a49d25364dfb ("staging/atomisp: Add support for the Intel IPU v2")
    Cc: [email protected]
    Signed-off-by: Arnd Bergmann <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Signed-off-by: Sakari Ailus <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

staging: most: video: avoid double free on video register failure [+ + +]
Author: Guangshuo Li <[email protected]>
Date:   Sun May 17 19:12:18 2026 +0800

    staging: most: video: avoid double free on video register failure
    
    [ Upstream commit 7cb1c5b32a2bfde961fff8d5204526b609bcb30a ]
    
    comp_register_videodev() allocates a video_device with
    video_device_alloc() and releases it if video_register_device() fails.
    
    This can double free the video_device when __video_register_device()
    reaches device_register() and that call fails:
    
      video_register_device()
        -> __video_register_device()
           -> device_register() fails
              -> put_device(&vdev->dev)
                 -> v4l2_device_release()
                    -> vdev->release(vdev)
                       -> video_device_release(vdev)
    
      comp_register_videodev()
        -> video_device_release(mdev->vdev)
    
    Use video_device_release_empty() while registering the device so that
    registration failure paths do not free mdev->vdev through vdev->release().
    comp_register_videodev() then releases mdev->vdev exactly once on failure.
    Restore video_device_release() after successful registration so the
    registered device keeps its normal lifetime handling.
    
    This issue was found by a static analysis tool I am developing.
    
    Fixes: eab231c0398a ("staging: most: v4l2-aim: remove unnecessary label err_vbi_dev")
    Signed-off-by: Guangshuo Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

staging: nvec: fix use-after-free in nvec_rx_completed() [+ + +]
Author: Alexandru Hossu <[email protected]>
Date:   Mon Apr 27 10:17:12 2026 +0200

    staging: nvec: fix use-after-free in nvec_rx_completed()
    
    [ Upstream commit 26813881181deb3a32fbb59eadb2599cbe8423f6 ]
    
    In nvec_rx_completed(), when an incomplete RX transfer is detected,
    nvec_msg_free() is called to return the message back to the pool by
    clearing its 'used' atomic flag. Immediately after this, the code
    accesses nvec->rx->data[0] to check the message type.
    
    Since nvec_msg_free() marks the pool slot as available via atomic_set(),
    any concurrent or subsequent call to nvec_msg_alloc() could claim that
    same slot and overwrite its data[] array. Reading nvec->rx->data[0] after
    freeing the message is therefore a use-after-free.
    
    Fix this by saving the message type byte before calling nvec_msg_free(),
    then using the saved value for the battery quirk check.
    
    Fixes: d6bdcf2e1019 ("staging: nvec: Add battery quirk to ignore incomplete responses")
    Reviewed-by: Dan Carpenter <[email protected]>
    Signed-off-by: Alexandru Hossu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

staging: rtl8723bs: clean up comparsions to NULL [+ + +]
Author: Michael Straube <[email protected]>
Date:   Tue Jul 14 19:34:06 2026 -0400

    staging: rtl8723bs: clean up comparsions to NULL
    
    [ Upstream commit cd1f1450092216b3e39516f8db58869b6fc20575 ]
    
    Clean up comparsions to NULL reported by checkpatch.
    
    x == NULL -> !x
    x != NULL -> x
    
    Signed-off-by: Michael Straube <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: a1fc19d61f66 ("staging: rtl8723bs: fix WEP length underflow and OOB read in OnAuth()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

staging: rtl8723bs: fix heap buffer overflow in rtw_cfg80211_set_wpa_ie() [+ + +]
Author: Alexandru Hossu <[email protected]>
Date:   Tue Jul 14 19:34:11 2026 -0400

    staging: rtl8723bs: fix heap buffer overflow in rtw_cfg80211_set_wpa_ie()
    
    [ Upstream commit 5a752a616e756844388a1a45404db9fc29fec655 ]
    
    supplicant_ie is a 256-byte array in struct security_priv. The WPA and
    WPA2 IE copy paths use:
    
        memcpy(padapter->securitypriv.supplicant_ie, &pwpa[0], wpa_ielen + 2);
    
    where wpa_ielen is the raw IE length field (u8, 0-255). When a local user
    supplies a connect request via nl80211 with a crafted WPA IE of length 255,
    wpa_ielen + 2 equals 257, overflowing the 256-byte buffer by one byte into
    the adjacent last_mic_err_time field.
    
    rtw_parse_wpa_ie() does not prevent this: its length consistency check
    compares *(wpa_ie+1) against (u8)(wpa_ie_len-2), which is (u8)(255) == 255
    when wpa_ie_len = 257, so the check passes silently.
    
    Add explicit bounds checks for both the WPA and WPA2 paths before the
    memcpy, rejecting any IE whose total size (wpa_ielen + 2) exceeds the
    supplicant_ie buffer.
    
    Fixes: 554c0a3abf21 ("staging: Add rtl8723bs sdio wifi driver")
    Cc: stable <[email protected]>
    Reviewed-by: Luka Gejak <[email protected]>
    Signed-off-by: Alexandru Hossu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

staging: rtl8723bs: fix OOB reads in IE loops in issue_assocreq() and join_cmd_hdl() [+ + +]
Author: Alexandru Hossu <[email protected]>
Date:   Tue Jul 14 20:17:26 2026 -0400

    staging: rtl8723bs: fix OOB reads in IE loops in issue_assocreq() and join_cmd_hdl()
    
    [ Upstream commit ef61d628dfad38fead1fd2e08979ae9126d011d5 ]
    
    Two IE parsing loops are missing the header bounds checks before they
    dereference pIE->length:
    
     - issue_assocreq() walks pmlmeinfo->network.ies to build the
       association request. If the stored IE data ends with only an
       element_id byte and no length byte, pIE->length is read one byte
       past the end of the buffer.
    
     - join_cmd_hdl() walks pnetwork->ies during station join and has
       the same problem under the same conditions.
    
    Both buffers are filled from AP beacon and probe-response frames, so a
    malicious AP that sends a truncated final IE can trigger the issue.
    
    Apply the two-guard pattern established in update_beacon_info():
      1. Break if fewer than sizeof(*pIE) bytes remain.
      2. Break if the IE's declared data extends past the buffer end.
    
    Fixes: 554c0a3abf21 ("staging: Add rtl8723bs sdio wifi driver")
    Cc: stable <[email protected]>
    Reviewed-by: Luka Gejak <[email protected]>
    Signed-off-by: Alexandru Hossu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    [ replaced sizeof(*pIE) with literal 2 (5.10's ndis_80211_var_ie still has data[1]) and used pre-rename field names IELength/IEs/ElementID/Length ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

staging: rtl8723bs: Fix space issues [+ + +]
Author: Franziska Naepelt <[email protected]>
Date:   Tue Jul 14 19:34:10 2026 -0400

    staging: rtl8723bs: Fix space issues
    
    [ Upstream commit c4b811b9361b0d7ea167a79587f5ec0a13fd8863 ]
    
    Fix the following checkpatch space issues:
    - CHECK: spaces preferred around that '*' (ctx:VxV)
    - CHECK: spaces preferred around that '+' (ctx:VxV)
    - CHECK: spaces preferred around that '-' (ctx:VxV)
    - CHECK: spaces preferred around that '|' (ctx:VxV)
    - CHECK: No space is necessary after a cast
    - WARNING: please, no spaces at the start of a line
    
    Signed-off-by: Franziska Naepelt <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: 5a752a616e75 ("staging: rtl8723bs: fix heap buffer overflow in rtw_cfg80211_set_wpa_ie()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

staging: rtl8723bs: fix WEP length underflow and OOB read in OnAuth() [+ + +]
Author: Alexandru Hossu <[email protected]>
Date:   Tue Jul 14 19:34:07 2026 -0400

    staging: rtl8723bs: fix WEP length underflow and OOB read in OnAuth()
    
    [ Upstream commit a1fc19d61f661d47204f095b593de507884849f7 ]
    
    OnAuth() has two bugs in the shared-key authentication path.
    
    When the Privacy bit is set, rtw_wep_decrypt() is called without
    verifying that the frame is long enough to contain a valid WEP IV and
    ICV.  Inside rtw_wep_decrypt(), length is computed as:
    
        length = len - WLAN_HDR_A3_LEN - iv_len
    
    and then passed as (length - 4) to crc32_le().  If len is less than
    WLAN_HDR_A3_LEN + iv_len + icv_len (32 bytes), length - 4 is negative
    and, after the implicit cast to size_t, causes crc32_le() to read far
    beyond the frame buffer.  Add a minimum length check before accessing
    the IV field and calling the decryption path.
    
    When processing a seq=3 response, rtw_get_ie() stores the Challenge
    Text IE length in ie_len, but the subsequent memcmp() always reads 128
    bytes regardless of ie_len.  IEEE 802.11 mandates a challenge text of
    exactly 128 bytes; reject any IE whose length field differs, matching
    the check already applied to OnAuthClient().
    
    Fixes: 554c0a3abf21 ("staging: Add rtl8723bs sdio wifi driver")
    Cc: stable <[email protected]>
    Signed-off-by: Alexandru Hossu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

staging: rtl8723bs: remove 5Ghz code blocks [+ + +]
Author: Fabio Aiuto <[email protected]>
Date:   Tue Jul 14 19:34:04 2026 -0400

    staging: rtl8723bs: remove 5Ghz code blocks
    
    [ Upstream commit ddd7c8b0033ba01a0ee605697f12a33fd31e6fca ]
    
    remove 5 Ghz code blocks, related to networks
    working over channel numbers above 14.
    
    Signed-off-by: Fabio Aiuto <[email protected]>
    Link: https://lore.kernel.org/r/c64443b92ce1a60f568db153842a62e3244a8c3a.1626874164.git.fabioaiuto83@gmail.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: a1fc19d61f66 ("staging: rtl8723bs: fix WEP length underflow and OOB read in OnAuth()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

staging: rtl8723bs: remove 5Ghz code related to channel plan definition [+ + +]
Author: Fabio Aiuto <[email protected]>
Date:   Tue Jul 14 19:34:03 2026 -0400

    staging: rtl8723bs: remove 5Ghz code related to channel plan definition
    
    [ Upstream commit ec84d0ae54a6774091b3b7d1e9da32589f48b2f9 ]
    
    remove 5Ghz code related to channel plan definition.
    
    Acked-by: Hans de Goede <[email protected]>
    Signed-off-by: Fabio Aiuto <[email protected]>
    Link: https://lore.kernel.org/r/17a707952cec951893748d2cb59d02a294cdd1be.1624367071.git.fabioaiuto83@gmail.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: a1fc19d61f66 ("staging: rtl8723bs: fix WEP length underflow and OOB read in OnAuth()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

staging: rtl8723bs: remove all 5Ghz network types [+ + +]
Author: Fabio Aiuto <[email protected]>
Date:   Tue Jul 14 19:34:02 2026 -0400

    staging: rtl8723bs: remove all 5Ghz network types
    
    [ Upstream commit 708180a92cd8bff18b3d2ac05172815bcc0b6b9a ]
    
    remove all 5Ghz network types. rtl8723bs works on
    802.11bgn standards and on 2.4Ghz band.
    
    So remove all code related to 802.11a and 802.11ac
    standards, which the device doesn't support.
    
    Acked-by: Hans de Goede <[email protected]>
    Signed-off-by: Fabio Aiuto <[email protected]>
    Link: https://lore.kernel.org/r/7e4644a71d0ba2819370171b3dc78bfc755f6313.1624367071.git.fabioaiuto83@gmail.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: a1fc19d61f66 ("staging: rtl8723bs: fix WEP length underflow and OOB read in OnAuth()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

staging: rtl8723bs: remove commented out condition [+ + +]
Author: Fabio Aiuto <[email protected]>
Date:   Tue Jul 14 19:34:05 2026 -0400

    staging: rtl8723bs: remove commented out condition
    
    [ Upstream commit 2a62ff13132a22a754d042b2230117bbea0af477 ]
    
    remove commented out condition checking channel > 14.
    
    Signed-off-by: Fabio Aiuto <[email protected]>
    Link: https://lore.kernel.org/r/83762719c0c13ac8b78612a32db26e691eef17d1.1626874164.git.fabioaiuto83@gmail.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: a1fc19d61f66 ("staging: rtl8723bs: fix WEP length underflow and OOB read in OnAuth()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

staging: rtl8723bs: remove commented out RT_ASSERT occurrences [+ + +]
Author: Fabio Aiuto <[email protected]>
Date:   Tue Jul 14 19:34:01 2026 -0400

    staging: rtl8723bs: remove commented out RT_ASSERT occurrences
    
    [ Upstream commit 2172a6576388e63958f47923e435c46af8d006ba ]
    
    remove commented out obsoete RT_ASSERT macro occurences.
    
    Reviewed-by: Dan Carpenter <[email protected]>
    Signed-off-by: Fabio Aiuto <[email protected]>
    Link: https://lore.kernel.org/r/3ee98d7bf1685af627e625f413de355fce58d52d.1619794331.git.fabioaiuto83@gmail.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: a1fc19d61f66 ("staging: rtl8723bs: fix WEP length underflow and OOB read in OnAuth()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

staging: rtl8723bs: remove DBG_871X log argument [+ + +]
Author: Fabio Aiuto <[email protected]>
Date:   Tue Jul 14 22:45:34 2026 -0400

    staging: rtl8723bs: remove DBG_871X log argument
    
    [ Upstream commit 42c3243ff23d119331a8ace011e0c18b222a1138 ]
    
    This patch prepares the application of the semantic
    patch aimed to remove all DBG_871X logs.
    
    One occurrence of the DBG_871X macro has one
    repeated argument, that's not even comma separated
    value with the previous one nor a format string
    parameter associated.
    
    In normal conditions this worked, for the macro
    is usually not expanded (the do nothing behaviour),
    but if I try to apply the sempantic patch to remove
    all macro occurrences, all macros call after that
    abnormal declaration are left untouched (not removed).
    
    Remove all of the DBG_871X logs as they currently
    do nothing as they require the code to be modified by
    hand in order to be turned on. This obviously has not happened
    since the code was merged, so just remove them as they are unused.
    
    Signed-off-by: Fabio Aiuto <[email protected]>
    Link: https://lore.kernel.org/r/3473925ae9ee5a3bcd0ab86613dbce80b6d3f33f.1617802415.git.fabioaiuto83@gmail.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: ed51de4a86e1 ("staging: rtl8723bs: fix OOB read in update_beacon_info() IE loop")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

staging: rtl8723bs: split too long line [+ + +]
Author: Fabio Aiuto <[email protected]>
Date:   Tue Jul 14 19:34:00 2026 -0400

    staging: rtl8723bs: split too long line
    
    [ Upstream commit 98dc120895a9a669e35155ee03b98452723aba95 ]
    
    fix the following post-commit hook checkpatch issue.
    
    WARNING: line length of 103 exceeds 100 columns
    30: FILE: drivers/staging/rtl8723bs/core/rtw_mlme_ext.c:711:
    +
    receive_disconnect(padapter, pmlmeinfo->network.MacAddress, 0);
    
    Signed-off-by: Fabio Aiuto <[email protected]>
    Link: https://lore.kernel.org/r/4e87fb741205b9f314aec739921405a7ebef908a.1618480688.git.fabioaiuto83@gmail.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: a1fc19d61f66 ("staging: rtl8723bs: fix WEP length underflow and OOB read in OnAuth()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sysfs: clamp show() return value in sysfs_kf_read() [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Wed May 20 15:07:01 2026 +0200

    sysfs: clamp show() return value in sysfs_kf_read()
    
    [ Upstream commit 454257f6d124a92342dcbb7710c03dd6ef96c731 ]
    
    sysfs_kf_seq_show() defends against buggy show() callbacks that return
    larger than PAGE_SIZE by clamping the value and printing a warning.
    sysfs_kf_read(), the prealloc variant, has no such defense.
    
    The only current in-tree user of __ATTR_PREALLOC is drivers/md/md.c,
    whose show() callbacks are well-behaved, so this is hardening against
    future drivers doing foolish things and out-of-tree code doing even more
    foolish things.
    
    Cc: NeilBrown <[email protected]>
    Cc: Tejun Heo <[email protected]>
    Fixes: 2b75869bba67 ("sysfs/kernfs: allow attributes to request write buffer be pre-allocated.")
    Assisted-by: gregkh_clanker_t1000
    Reviewed-by: Rafael J. Wysocki (Intel) <[email protected]>
    Reviewed-by: Danilo Krummrich <[email protected]>
    Link: https://patch.msgid.link/2026052000-drove-unicycle-d61b@gregkh
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tcp: ipv6: clamp default adverting MSS to avoid GSO_BY_FRAGS (0xFFFF) [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Fri Jun 12 16:25:17 2026 +0000

    tcp: ipv6: clamp default adverting MSS to avoid GSO_BY_FRAGS (0xFFFF)
    
    [ Upstream commit 2bf43d0e2e6a27d52a7d624e2d6b9116972e8a22 ]
    
    When MTU is large, ip6_default_advmss() can return IPV6_MAXPLEN (65535).
    This is interpreted by TCP as mss_clamp, allowing the MSS to reach 65535.
    
    However, 0xFFFF is also used as a magic value GSO_BY_FRAGS in the kernel.
    If a TCP packet with gso_size=0xFFFF is passed to skb_segment(), it will
    be mistakenly treated as GSO_BY_FRAGS, leading to a NULL pointer
    dereference because local TCP packets do not use frag_list.
    
    Fix this by returning min(IPV6_MAXPLEN, GSO_BY_FRAGS - 1) (65534) from
    ip6_default_advmss() when MTU is large.
    
    Also update the stale comment in ip6_default_advmss() which suggested
    that IPV6_MAXPLEN is returned to mean "any MSS".
    
    Fixes: 3953c46c3ac7 ("sk_buff: allow segmenting based on frag sizes")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
thermal: hwmon: Fix critical temperature attribute removal [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Tue May 5 13:36:56 2026 +0200

    thermal: hwmon: Fix critical temperature attribute removal
    
    [ Upstream commit c2114dbda05354dbcf4dfbb30a2c623e8611c43a ]
    
    Since the return value of thermal_zone_crit_temp_valid() depends on
    the behavior of the thermal zone .get_crit_temp() callback which
    may change over time in theory, thermal_remove_hwmon_sysfs() may
    attempt to remove a critical temperature attribute that has not
    been created, passing a pointer to an uninitialized attribute
    structure to device_remove_file().
    
    To avoid that, set a flag in struct thermal_hwmon_temp after creating
    a critical temperature attribute and use the value of that flag to
    decide whether or not the attribute needs to be removed.
    
    Fixes: e8db5d6736a7 ("thermal: hwmon: Make the check for critical temp valid consistent")
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

thermal: intel: Fix dangling resources on thermal_throttle_online() failure [+ + +]
Author: Ricardo Neri <[email protected]>
Date:   Sat Jun 13 15:17:47 2026 -0700

    thermal: intel: Fix dangling resources on thermal_throttle_online() failure
    
    [ Upstream commit b91d287fa7a1ba0727eed5823c6ee4924ee5fa31 ]
    
    The function thermal_throttle_add_dev() may fail and abort a CPU hotplug
    online operation. Since the failure occurs within the online callback,
    thermal_throttle_online(), the CPU hotplug framework does not invoke the
    corresponding offline callback. As a result, the hardware and software
    resources set up during the failed operation are not torn down.
    
    Since only thermal_throttle_add_dev() can fail, call it before setting up
    the rest of the resources.
    
    Fixes: f6656208f04e ("x86/mce/therm_throt: Optimize notifications of thermal throttle")
    Signed-off-by: Ricardo Neri <[email protected]>
    Link: https://patch.msgid.link/20260613-rneri-directed-therm-intr-v3-1-3a26d1e47fc8@linux.intel.com
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
time: Fix off-by-one in compat settimeofday() usec validation [+ + +]
Author: Wang Yan <[email protected]>
Date:   Mon Jun 22 18:33:48 2026 +0800

    time: Fix off-by-one in compat settimeofday() usec validation
    
    commit 269f2b43fae692d1f3988c9f888a6301aa537b82 upstream.
    
    The compat version of settimeofday() uses '>' instead of '>=' when
    validating tv_usec against USEC_PER_SEC, allowing the value 1000000 to pass
    the check. After the subsequent conversion to nanoseconds (tv_nsec *=
    NSEC_PER_USEC), this results in tv_nsec == NSEC_PER_SEC, which violates the
    timespec invariant that tv_nsec must be strictly less than NSEC_PER_SEC.
    
    The native settimeofday() was already fixed in commit ce4abda5e126 ("time:
    Fix off-by-one in settimeofday() usec validation"), but the compat
    counterpart was missed.
    
    Fix it by using '>=' to reject tv_usec values outside the valid range [0,
    USEC_PER_SEC - 1].
    
    Fixes: 5e0fb1b57bea ("y2038: time: avoid timespec usage in settimeofday()")
    Signed-off-by: Wang Yan <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Acked-by: Arnd Bergmann <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tipc: fix out-of-bounds read in broadcast Gap ACK blocks [+ + +]
Author: Samuel Page <[email protected]>
Date:   Thu Jun 25 15:38:15 2026 +0100

    tipc: fix out-of-bounds read in broadcast Gap ACK blocks
    
    commit 2b66974a1b6134a4bbc3bfed181f7418f688eb54 upstream.
    
    A broadcast PROTOCOL/STATE_MSG can carry a Gap ACK blocks record in its
    data area. tipc_get_gap_ack_blks() only verifies that the record's len
    field is self-consistent with its ugack_cnt/bgack_cnt counts
    (sz == struct_size(p, gacks, ugack_cnt + bgack_cnt)); it does not check
    that the record actually fits in the message data area, msg_data_sz().
    
    The unicast caller tipc_link_proto_rcv() bounds it ("if (glen > dlen)
    break;"), but the broadcast caller tipc_bcast_sync_rcv() discards the
    returned size, so tipc_link_advance_transmq() copies the record off the
    receive skb with an attacker-controlled count:
    
            this_ga = kmemdup(ga, struct_size(ga, gacks, ga->bgack_cnt),
                              GFP_ATOMIC);
    
    A TIPC neighbour that negotiated TIPC_GAP_ACK_BLOCK triggers it with one
    ordinary broadcast STATE_MSG (msg_bc_ack_invalid() clear), sized so its
    data area is short, carrying a Gap ACK record with len = 0x400,
    bgack_cnt = 0xff and ugack_cnt = 0. len then equals
    struct_size(p, gacks, 255), so the consistency check passes and ga is
    non-NULL; kmemdup() reads struct_size(ga, gacks, 255) = 1024 bytes out
    of the much smaller skb:
    
      BUG: KASAN: slab-out-of-bounds in kmemdup_noprof+0x48/0x60
      Read of size 1024 at addr ffff0000c7030d38 by task poc864/69
      Call trace:
       kmemdup_noprof+0x48/0x60
       tipc_link_advance_transmq+0x86c/0xb80
       tipc_link_bc_ack_rcv+0x19c/0x1e0
       tipc_bcast_sync_rcv+0x1c4/0x2c4
       tipc_rcv+0x85c/0x1340
       tipc_l2_rcv_msg+0xac/0x104
      The buggy address belongs to the object at ffff0000c7030d00
       which belongs to the cache skbuff_small_head of size 704
      The buggy address is located 56 bytes inside of
       allocated 704-byte region [ffff0000c7030d00, ffff0000c7030fc0)
    
    The copied-out bytes are subsequently consumed as gap/ack values, but
    the read is already out of bounds at the kmemdup() regardless of how
    they are used.
    
    The unicast STATE path drops such a message: "if (glen > dlen) break;"
    skips the rest of STATE_MSG handling and the skb is freed. Make the
    broadcast path drop it too. tipc_bcast_sync_rcv() now bounds the record
    against msg_data_sz() and, when it does not fit, reports it back through
    tipc_node_bc_sync_rcv() to tipc_rcv() so the skb is discarded rather than
    processed. ga is not cleared on this path: ga == NULL already means
    "legacy peer without Selective ACK", a distinct legitimate state.
    
    Fixes: d7626b5acff9 ("tipc: introduce Gap ACK blocks for broadcast link")
    Cc: [email protected]
    Signed-off-by: Samuel Page <[email protected]>
    Reviewed-by: Tung Nguyen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

tipc: fix UAF in tipc_l2_send_msg() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Fri Jun 12 13:59:49 2026 +0000

    tipc: fix UAF in tipc_l2_send_msg()
    
    [ Upstream commit f4c3d89fc986b0da196ddfc6cfe0ea5d5d08bec6 ]
    
    Syzbot reported a slab-use-after-free in ipvlan_hard_header() when
    called from tipc_l2_send_msg().
    
    The root cause is that tipc_disable_l2_media() calls synchronize_net()
    while b->media_ptr is still valid. This allows concurrent RCU readers
    to obtain the device pointer after synchronize_net() has finished.
    The pointer is cleared later in bearer_disable(), but without any
    subsequent synchronization, allowing the device to be freed while
    still in use by readers.
    
    Fix this by clearing b->media_ptr in tipc_disable_l2_media() before
    calling synchronize_net().
    
    This is safe to do now because the call order in bearer_disable()
    was reversed in 0d051bf93c06 ("tipc: make bearer packet filtering generic")
    to call tipc_node_delete_links() (which needs the pointer) before
    disable_media().
    
    Fixes: 282b3a056225 ("tipc: send out RESET immediately when link goes down")
    https: //lore.kernel.org/netdev/[email protected]/T/#u
    Reported-by: [email protected]
    Signed-off-by: Eric Dumazet <[email protected]>
    Cc: Jon Maloy <[email protected]>
    Reviewed-by: Tung Nguyen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

tipc: prevent snt_unacked underflow on CONN_ACK [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Wed Jun 10 08:40:02 2026 -0400

    tipc: prevent snt_unacked underflow on CONN_ACK
    
    [ Upstream commit ab3e10b44ba5411779aac7afd2477917dd77750f ]
    
    tipc_sk_conn_proto_rcv() subtracts the peer-supplied connection ack count
    from the unsigned 16-bit send counter snt_unacked without checking that it
    does not exceed the number of messages actually outstanding:
    
            tsk->snt_unacked -= msg_conn_ack(hdr);
    
    msg_conn_ack() is read straight from a received CONN_MANAGER/CONN_ACK
    message. If the ack count is larger than snt_unacked, the subtraction
    wraps to a near-maximum value, leaving tsk_conn_cong() permanently true
    and starving the connection of further transmits.
    
    Validate the ACK count at the start of the CONN_ACK block and drop the
    message if it acknowledges more messages than are outstanding. A peer (or,
    for a local connection, the connected peer socket) can otherwise wedge a
    TIPC connection's send side by sending an oversized connection ack.
    
    Fixes: 10724cc7bb78 ("tipc: redesign connection-level flow control")
    Signed-off-by: Michael Bommarito <[email protected]>
    Reviewed-by: Tung Nguyen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

tipc: require net admin for TIPCv2 netlink mutators [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Wed Jun 10 08:40:01 2026 -0400

    tipc: require net admin for TIPCv2 netlink mutators
    
    [ Upstream commit 86b0c540e2ea397cde021eecd24145f7c16a3d4e ]
    
    TIPCv2 registers mutating generic-netlink operations without admin
    permission flags. Generic netlink only checks CAP_NET_ADMIN when an
    operation sets GENL_ADMIN_PERM or GENL_UNS_ADMIN_PERM, so a local
    unprivileged process can currently change TIPC state through commands
    such as TIPC_NL_NET_SET, TIPC_NL_KEY_SET, TIPC_NL_KEY_FLUSH, and
    bearer enable/disable.
    
    The legacy TIPC netlink API already checks netlink_net_capable(...,
    CAP_NET_ADMIN) for administrative commands. Give the TIPCv2 mutators
    the equivalent generic-netlink gate. Use GENL_UNS_ADMIN_PERM, which
    maps to the same namespace-aware CAP_NET_ADMIN check that
    netlink_net_capable() performs, so the behaviour matches the legacy
    path and keeps working for CAP_NET_ADMIN holders in a non-initial user
    namespace (containers).
    
    A QEMU/KASAN repro run as uid/gid 65534 with zero effective
    capabilities previously succeeded in changing the network id and node
    identity, setting and flushing key material, and enabling/disabling a
    UDP bearer. With this patch applied the same operations fail with
    -EPERM.
    
    Fixes: 0655f6a8635b ("tipc: add bearer disable/enable to new netlink api")
    Link: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Michael Bommarito <[email protected]>
    Reviewed-by: Tung Nguyen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tools lib api: Fix filename__write_int() writing uninitialized stack data [+ + +]
Author: Arnaldo Carvalho de Melo <[email protected]>
Date:   Mon Jun 8 07:05:19 2026 -0300

    tools lib api: Fix filename__write_int() writing uninitialized stack data
    
    [ Upstream commit 438ece06185696e14c63c6113d5e2d34ec0a9680 ]
    
    filename__write_int() formats an integer into a 64-byte buffer with
    sprintf() then passes sizeof(buf) (64) as the write length.  This
    writes all 64 bytes including uninitialized stack data past the
    formatted string.  Most sysfs files reject the oversized write,
    making the function always return -1.
    
    Fix by capturing the sprintf() return value and using it as the
    write length.
    
    Reported-by: sashiko-bot <[email protected]>
    Fixes: 3b00ea938653d136 ("tools lib api fs: Add sysfs__write_int function")
    Cc: Kan Liang <[email protected]>
    Assisted-by: Claude:claude-opus-4.6
    Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

tools lib api: Fix missing null termination in filename__read_int/ull() [+ + +]
Author: Arnaldo Carvalho de Melo <[email protected]>
Date:   Sun Jun 7 21:03:55 2026 -0300

    tools lib api: Fix missing null termination in filename__read_int/ull()
    
    [ Upstream commit 52b1f9678499b13b7aeb0186d9c6f486c043283f ]
    
    filename__read_int() passes a stack buffer to read() using the full
    sizeof(line) and then hands it to atoi() without null-terminating.
    If a sysfs file fills the 64-byte buffer exactly, atoi() reads past
    the array into uninitialized stack memory.
    
    filename__read_ull_base() has the same issue with strtoull().
    
    Fix both by reading sizeof(line) - 1 bytes and explicitly
    null-terminating after a successful read.
    
    Fixes: 3a351127cbc682c3 ("tools lib fs: Adopt filename__read_int from tools/perf/")
    Reported-by: sashiko-bot <[email protected]>
    Assisted-by: Claude:claude-opus-4.6
    Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

tools lib api: Fix mount_overload() snprintf truncation and toupper range [+ + +]
Author: Arnaldo Carvalho de Melo <[email protected]>
Date:   Mon Jun 8 08:10:18 2026 -0300

    tools lib api: Fix mount_overload() snprintf truncation and toupper range
    
    [ Upstream commit fd1f70776add263f8ef38a87ae593c75303f1dcd ]
    
    mount_overload() builds an environment variable name like
    "PERF_SYSFS_ENVIRONMENT" from fs->name.  Two bugs:
    
    1) snprintf() uses name_len as the buffer size instead of sizeof(upper_name).
       For fs->name = "sysfs" (len=5), the output is truncated to "PERF" (4
       chars + null), so getenv() never finds the intended variable.
    
    2) mem_toupper() only uppercases name_len bytes, converting just the "PERF"
       prefix rather than the full string including the filesystem name portion.
    
    Fix by using sizeof(upper_name) for snprintf and strlen(upper_name) for
    mem_toupper, so the full "PERF_SYSFS_ENVIRONMENT" string is correctly
    formatted and uppercased.
    
    Reported-by: sashiko-bot <[email protected]>
    Fixes: 73ca85ad364769ff ("tools lib api fs: Add FSTYPE__mount() method")
    Cc: Jiri Olsa <[email protected]>
    Assisted-by: Claude:claude-opus-4.6
    Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tools/mm/slabinfo: fix total_objects attribute name [+ + +]
Author: Yichong Chen <[email protected]>
Date:   Thu Jul 16 16:05:45 2026 +0800

    tools/mm/slabinfo: fix total_objects attribute name
    
    [ Upstream commit 892a7864730775c3dbee2a39e9ead4fa8d4256e7 ]
    
    SLUB exports the total_objects sysfs attribute, but slabinfo tries to read
    objects_total. As a result, the lookup fails and the field remains zero.
    
    Use the correct attribute name and rename the corresponding structure
    member to match.
    
    Fixes: 205ab99dd103 ("slub: Update statistics handling for variable order slabs")
    Signed-off-by: Yichong Chen <[email protected]>
    Cc: <[email protected]>
    Reviewed-by: SeongJae Park <[email protected]>
    Link: https://patch.msgid.link/96556748872BB47E+20260612071359.649946-1-chenyichong@uniontech.com
    Signed-off-by: Vlastimil Babka (SUSE) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tools/resolve_btfids: Emit warnings and patch zero id for missing symbols [+ + +]
Author: Hengqi Chen <[email protected]>
Date:   Tue Jul 27 21:25:31 2021 +0800

    tools/resolve_btfids: Emit warnings and patch zero id for missing symbols
    
    commit 5aad03685185b5133a28e1ee1d4e98d3fd3642a3 upstream.
    
    Kernel functions referenced by .BTF_ids may be changed from global to static
    and get inlined or get renamed/removed, and thus disappears from BTF.
    This causes kernel build failure when resolve_btfids do id patch for symbols
    in .BTF_ids in vmlinux. Update resolve_btfids to emit warning messages and
    patch zero id for missing symbols instead of aborting kernel build process.
    
    Suggested-by: Andrii Nakryiko <[email protected]>
    Signed-off-by: Hengqi Chen <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Acked-by: Yonghong Song <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Cc: "Barry K. Nathan" <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

tools/resolve_btfids: Fix some error messages [+ + +]
Author: Brendan Jackman <[email protected]>
Date:   Thu Dec 3 10:22:34 2020 +0000

    tools/resolve_btfids: Fix some error messages
    
    commit 22e8ebe35a2e30ee19e02c41cacc99c2f896bc4b upstream.
    
    Add missing newlines and fix polarity of strerror argument.
    
    Signed-off-by: Brendan Jackman <[email protected]>
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Acked-by: Jiri Olsa <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Cc: "Barry K. Nathan" <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tools/virtio: check mmap return value in vringh_test [+ + +]
Author: longlong yan <[email protected]>
Date:   Fri Jun 5 10:14:45 2026 +0800

    tools/virtio: check mmap return value in vringh_test
    
    [ Upstream commit ec6177dfe98b9be1c3ede6c0dfe4394ea2a76959 ]
    
    In parallel_test(), the return values of mmap() for both host_map and
    guest_map are not checked against MAP_FAILED. If mmap() fails, the
    subsequent code will dereference the invalid pointer, leading to a
    segmentation fault.
    
    Add MAP_FAILED checks after both mmap() calls, using err() to report
    the error and exit, consistent with the existing error handling style
    in this file (e.g., the open() call on line 149).
    
    Fixes: 1515c5ce26ae ("tools/virtio: add vring_test.")
    Signed-off-by: longlong yan <[email protected]>
    Signed-off-by: Michael S. Tsirkin <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tpm: fix event_size output in tpm1_binary_bios_measurements_show [+ + +]
Author: Thorsten Blum <[email protected]>
Date:   Mon Jun 15 15:02:05 2026 +0300

    tpm: fix event_size output in tpm1_binary_bios_measurements_show
    
    commit 1a58f6115bfb34eabcc7de8a3a9745b219179781 upstream.
    
    Commit 186d124f07da ("tpm_eventlog.c: fix binary_bios_measurements")
    split the output to write the endian-converted event header first and
    then the variable-length event data.
    
    However, the split was at sizeof(struct tcpa_event) - 1, even though
    event_data was a zero-length array, and later a flexible array member,
    both of which already excluded the event data.
    
    Therefore, the current code writes the first three bytes of event_size
    from the endian-converted header and then the last byte from the raw
    header, which can emit a corrupted event_size on PPC64, where
    do_endian_conversion() maps to be32_to_cpu().
    
    Split one byte later to write the full endian-converted header first,
    followed by the variable-length event->event_data.
    
    Fixes: 186d124f07da ("tpm_eventlog.c: fix binary_bios_measurements")
    Cc: [email protected] # v5.10+
    Signed-off-by: Thorsten Blum <[email protected]>
    Signed-off-by: Jarkko Sakkinen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

tpm: Make the TPM character devices non-seekable [+ + +]
Author: Jaewon Yang <[email protected]>
Date:   Mon Jul 13 02:11:47 2026 +0900

    tpm: Make the TPM character devices non-seekable
    
    commit f20d61c22bcaf172d6790b6500e3838e532e71c8 upstream.
    
    The TPM character devices expose a sequential command/response
    interface, but their open handlers leave FMODE_PREAD and FMODE_PWRITE
    enabled.
    
    After a command leaves a response pending, pread(fd, buf, 16, 0x1400)
    passes 0x1400 as *off to tpm_common_read(). The transfer length is
    bounded by response_length, but the offset is used unchecked when
    forming data_buffer + *off. A sufficiently large offset therefore causes
    an out-of-bounds heap read through copy_to_user() and, if the copy
    succeeds, an out-of-bounds zero-write through the following memset().
    
    Positional I/O does not provide coherent semantics for this interface.
    An arbitrary pread offset cannot represent how much of a response has
    been consumed sequentially. The write callback always stores a command
    at the start of data_buffer, while pwrite() does not update file->f_pos
    and can leave the sequential read cursor stale.
    
    Call nonseekable_open() from both open handlers. This removes
    FMODE_PREAD and FMODE_PWRITE, causing positional reads and writes to
    fail with -ESPIPE before reaching the TPM callbacks, and explicitly
    marks the files non-seekable. Normal read() and write() continue to use
    the existing sequential f_pos cursor, leaving the response state machine
    unchanged.
    
    Tested on Linux 6.12 with KASAN and a swtpm TPM2 device:
    
     - sequential partial reads returned the complete response
     - pread() and preadv() with offset 0x1400 returned -ESPIPE
     - pwrite() and pwritev() with offset zero returned -ESPIPE
     - the pending response remained intact after the rejected operations
     - a subsequent normal command/response cycle completed normally
     - no KASAN report was produced.
    
    Fixes: 9488585b21be ("tpm: add support for partial reads")
    Link: https://lore.kernel.org/all/[email protected]/
    Cc: [email protected]
    Signed-off-by: Jaewon Yang <[email protected]>
    Signed-off-by: Linus Torvalds <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tracing/events: Fix to check the simple_tsk_fn creation [+ + +]
Author: Masami Hiramatsu (Google) <[email protected]>
Date:   Thu Jun 25 08:34:46 2026 +0900

    tracing/events: Fix to check the simple_tsk_fn creation
    
    [ Upstream commit cda1fbfc5313bb90daa271d45eea4a8d317a8544 ]
    
    Sashiko pointed that this sample code does not correctly handle the
    failure of thread creation because kthread_run() can return -errno.
    
    Check the simple_tsk_fn is correctly initialized (created) or not.
    
    Link: https://lore.kernel.org/all/178165817322.269421.3992299509400184196.stgit@devnote2/
    
    Link: https://sashiko.dev/#/patchset/178092865666.163648.10457567771536160909.stgit%40devnote2
    
    Fixes: 9cfe06f8cd5c ("tracing/events: add trace-events-sample")
    Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tracing/probes: Fix double addition of offset for @+FOFFSET [+ + +]
Author: Masami Hiramatsu (Google) <[email protected]>
Date:   Thu Jun 25 08:34:47 2026 +0900

    tracing/probes: Fix double addition of offset for @+FOFFSET
    
    commit 9a667b7750dda88cbf1cca96a53a2163b2ee71f7 upstream.
    
    Since commit 533059281ee5 ("tracing: probeevent: Introduce new argument
     fetching code") wrongly use @offset local variable during the parsing,
    the offset value is added twice when dereferencing.
    Reset the @offset after setting it in FETCH_OP_FOFFS.
    
    Link: https://lore.kernel.org/all/178217905962.643090.1978577464942171332.stgit@devnote2/
    
    Fixes: 533059281ee5 ("tracing: probeevent: Introduce new argument fetching code")
    Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tracing: Prevent out-of-bounds read in glob matching [+ + +]
Author: Huihui Huang <[email protected]>
Date:   Wed Jul 1 18:28:46 2026 +0800

    tracing: Prevent out-of-bounds read in glob matching
    
    commit 0a6070839b1ef276d5b05bedfb787743e140fb17 upstream.
    
    String event fields are not necessarily NUL-terminated, so the filter
    predicate functions (filter_pred_string(), filter_pred_strloc() and
    filter_pred_strrelloc()) pass the field length to the regex match
    callbacks, and the length-aware matchers honour it.
    
    regex_match_glob() was the exception: it ignored the length and called
    glob_match(), which scans the string until it hits a NUL byte. Some
    string fields are not NUL-terminated. One example is the dynamic char
    array of the xfs_* namespace tracepoints, which is copied without a
    trailing NUL. For such a field, glob matching reads past the end of
    the event field, causing a KASAN slab-out-of-bounds read in
    glob_match(), reached via regex_match_glob() and filter_match_preds()
    from the xfs_lookup tracepoint.
    
    Add a length-bounded glob_match_len() and use it from regex_match_glob()
    so glob matching always stops at the field boundary. The matching loop
    is factored into a shared helper so glob_match() keeps its behaviour.
    
    Fixes: 60f1d5e3bac4 ("ftrace: Support full glob matching")
    Cc: [email protected]
    Link: https://patch.msgid.link/da1aaf125fc3b63320b0c540fd6afa7c3d5b4f1a.1782836943.git.hhhuang@smu.edu.sg
    Reported-by: Yuan Tan <[email protected]>
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Reported-by: Zhengchuan Liang <[email protected]>
    Reported-by: Xin Liu <[email protected]>
    Assisted-by: Codex:GPT-5.4
    Signed-off-by: Huihui Huang <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Acked-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Steven Rostedt <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

tracing: probes: fix typo in a log message [+ + +]
Author: Martin Kaiser <[email protected]>
Date:   Thu Jun 25 08:34:45 2026 +0900

    tracing: probes: fix typo in a log message
    
    [ Upstream commit 72c8646956ffc8050bb8be5988a0f28fc37e1ac4 ]
    
    Fix a typo ("Invalid $-variable") in a log message.
    
    Link: https://lore.kernel.org/all/[email protected]/
    
    Fixes: ab105a4fb894 ("tracing: Use tracing error_log with probe events")
    Signed-off-by: Martin Kaiser <[email protected]>
    Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
udf: validate free block extents against the partition length [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Fri May 15 10:23:27 2026 -0400

    udf: validate free block extents against the partition length
    
    commit 5f0419457f89dce1a3f1c8e62a3adf2f39ab8168 upstream.
    
    udf_free_blocks() checks the logical block number and count against the
    partition length, but drops the extent offset from that final bound.  A
    crafted extent can pass the guard while logicalBlockNum + offset + count
    points past the partition, which later indexes past the space bitmap
    array.
    
    A single ftruncate(2) on a file backed by such an extent reliably
    panics the kernel.  This is a local availability issue.  On desktop
    systems where UDisks/polkit allows the active user to mount removable
    UDF media without CAP_SYS_ADMIN, an unprivileged local user can supply
    the crafted filesystem and trigger the panic by truncating a writable
    file on it.  Systems that require root or CAP_SYS_ADMIN to mount the
    image have a higher prerequisite.
    
    No confidentiality or integrity impact is claimed: the reproduced
    primitive is an out-of-bounds read of a bitmap pointer slot followed by
    a kernel panic.
    
    Use the already computed logicalBlockNum + offset + count value for the
    partition length check.  Also make load_block_bitmap() reject an
    out-of-range block group before indexing s_block_bitmap[], so corrupted
    callers cannot walk past the flexible array.
    
    Fixes: 56e69e59751d ("udf: prevent integer overflow in udf_bitmap_free_blocks()")
    Cc: [email protected]
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jan Kara <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

udf: validate sparing table length as an entry count, not a byte count [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Fri Jun 12 01:40:01 2026 -0500

    udf: validate sparing table length as an entry count, not a byte count
    
    commit 3ec997bd5508e9b25210b5bbec89031629cdb093 upstream.
    
    udf_load_sparable_map() accepts a sparing table when
    
            sizeof(*st) + le16_to_cpu(st->reallocationTableLen) > sb->s_blocksize
    
    is false, i.e. it treats reallocationTableLen as a number of BYTES that
    must fit in the block.  But the table is walked as an array of 8-byte
    sparingEntry elements:
    
            for (i = 0; i < le16_to_cpu(st->reallocationTableLen); i++) {
                    struct sparingEntry *entry = &st->mapEntry[i];
                    ... entry->origLocation ...
            }
    
    in udf_get_pblock_spar15() and udf_relocate_blocks().  A
    reallocationTableLen of N therefore passes the check whenever
    sizeof(*st) + N <= blocksize, yet the consumers index
    sizeof(*st) + N * sizeof(struct sparingEntry) bytes -- up to ~8x the
    block.  On a crafted UDF image this is an out-of-bounds read in
    udf_get_pblock_spar15(); udf_relocate_blocks() additionally feeds the
    same length to udf_update_tag(), whose crc_itu_t() reads far past the
    block, and its memmove() through st->mapEntry[] is an out-of-bounds
    write.
    
    Validate reallocationTableLen as the entry count it is, with
    struct_size().
    
    Fixes: 1df2ae31c724 ("udf: Fortify loading of sparing table")
    Cc: [email protected]
    Signed-off-by: Bryam Vargas <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jan Kara <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

udf: validate VAT header length against the VAT inode size [+ + +]
Author: Bryam Vargas <[email protected]>
Date:   Fri Jun 12 02:53:31 2026 -0500

    udf: validate VAT header length against the VAT inode size
    
    commit d8202786b3d75125c84ebc4de6d946f92fde0ee8 upstream.
    
    udf_load_vat() takes the virtual partition's start offset straight from
    the on-disk VAT 2.0 header without checking it against the VAT inode
    size:
    
            map->s_type_specific.s_virtual.s_start_offset =
                    le16_to_cpu(vat20->lengthHeader);
            map->s_type_specific.s_virtual.s_num_entries =
                    (sbi->s_vat_inode->i_size -
                            map->s_type_specific.s_virtual.s_start_offset) >> 2;
    
    lengthHeader is a fully attacker-controlled 16-bit value.  If it exceeds
    the VAT inode size, the s_num_entries subtraction underflows to a huge
    count, which defeats the "block > s_num_entries" bound in
    udf_get_pblock_virt15(); and on the ICB-inline path that function reads
    
            ((__le32 *)(iinfo->i_data + s_start_offset))[block]
    
    so a large s_start_offset indexes past the inode's in-ICB data.  Mounting
    a crafted UDF image with a virtual (VAT) partition then triggers an
    out-of-bounds read.
    
    Reject a VAT whose header length does not leave room for at least one
    entry within the VAT inode.
    
    Fixes: fa5e08156335 ("udf: Handle VAT packed inside inode properly")
    Cc: [email protected]
    Signed-off-by: Bryam Vargas <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jan Kara <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
udmabuf: fix DMA direction mismatch in release_udmabuf() [+ + +]
Author: Mikhail Gavrilov <[email protected]>
Date:   Sun Mar 15 04:27:22 2026 +0500

    udmabuf: fix DMA direction mismatch in release_udmabuf()
    
    commit fb7b1a0ab25a6077d26cb3829e31743972d4f31d upstream.
    
    begin_cpu_udmabuf() maps the sg_table with the caller-provided direction
    (e.g., DMA_TO_DEVICE for a write-only sync), and caches it in ubuf->sg
    for reuse.  However, release_udmabuf() always unmaps this sg_table with
    a hardcoded DMA_BIDIRECTIONAL, regardless of the direction that was
    originally used for the mapping.
    
    With CONFIG_DMA_API_DEBUG=y this produces:
    
      DMA-API: misc udmabuf: device driver frees DMA memory with different
      direction [device address=0x000000044a123000] [size=4096 bytes]
      [mapped with DMA_TO_DEVICE] [unmapped with DMA_BIDIRECTIONAL]
    
    The issue was found during video playback when GStreamer performed a
    write-only DMA_BUF_IOCTL_SYNC on a udmabuf.  It can be reproduced
    with CONFIG_DMA_API_DEBUG=y by creating a udmabuf from a memfd,
    performing a write-only sync (DMA_BUF_SYNC_WRITE without
    DMA_BUF_SYNC_READ), and closing the file descriptor.
    
    Fix this by storing the DMA direction used when the sg_table is first
    created in begin_cpu_udmabuf(), and passing that same direction to
    put_sg_table() in release_udmabuf().
    
    Fixes: 284562e1f348 ("udmabuf: implement begin_cpu_access/end_cpu_access hooks")
    Cc: [email protected]
    Signed-off-by: Mikhail Gavrilov <[email protected]>
    Reviewed-by: Vivek Kasireddy <[email protected]>
    Signed-off-by: Vivek Kasireddy <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usb: atm: ueagle-atm: wait for pre-firmware load in .disconnect() [+ + +]
Author: Mauricio Faria de Oliveira <[email protected]>
Date:   Sun Jul 19 22:35:43 2026 -0400

    usb: atm: ueagle-atm: wait for pre-firmware load in .disconnect()
    
    [ Upstream commit e2674dfbed8a30d57e2bc872c4bfa6c3eec918bf ]
    
    ueagle-atm uses the asynchronous request_firmware_nowait() in .probe(),
    but does not wait for its completion, not even in .disconnect(); so, if the
    device is unplugged meanwhile, its teardown runs concurrently with that.
    
    Even though this inconsistency is worth addressing on its own, it has also
    triggered several bug reports in syzbot over the years (some auto-closed)
    where the firmware sysfs fallback mechanism (CONFIG_FW_LOADER_USER_HELPER)
    creates a firmware subdirectory in the device directory during its removal,
    which might hit unexpected conditions in kernfs, apparently, depending at
    which point the add and remove operations raced. (See links.)
    
    The pattern is:
    
    usb ?-?: Direct firmware load for ueagle-atm/eagle?.fw failed with error -2
    usb ?-?: Falling back to sysfs fallback for: ueagle-atm/eagle?.fw
    <ERROR>
    Call trace:
     ...
     kernfs_create_dir_ns
     sysfs_create_dir_ns
     create_dir
     kobject_add_internal
     kobject_add_varg
     kobject_add
     class_dir_create_and_add
     get_device_parent
     device_add
     fw_load_sysfs_fallback
     fw_load_from_user_helper
     firmware_fallback_sysfs
     _request_firmware
     request_firmware_work_func
     ...
    
    (Some variations are observed, after fw_load_sysfs_fallback(), e.g., [1].)
    
    While the kernfs side is being looked at, the ueagle-atm side can be fixed
    by waiting for the pre-firmware load in the .disconnect() handler.
    
    This change has a similar approach to previous work by Andrey Tsygunka [2]
    (wait_for_completion() in .disconnect()), but it is relatively different in
    design/implementation; using the Originally-by tag for credit assignment.
    
    This has been tested with:
    - synthetic reproducer to check the error path;
    - USB gadget (virtual device) to check the firmware upload path;
    - QEMU device emulator to check the device ID re-enumeration path;
    (The latter two were written by Claude; no other code/text in this commit.)
    
    Links (year first reported):
     2025 https://syzbot.org/bug?extid=ce1e5a1b4e086b43e56d
     2025 https://syzbot.org/bug?extid=9af8471255ac36e34fd4
     2024 https://syzbot.org/bug?extid=306212936b13e520679d
     2023 https://syzkaller.appspot.com/bug?extid=457452d30bcdda75ead2
     2022 https://syzbot.org/bug?extid=782984d6f1701b526edb
     2021 https://syzbot.org/bug?id=f3f221579f4ef7e9691281f3c6f56c05f83e8490
     2021 https://syzbot.org/bug?id=84d86f0d71394829df6fc53daf6642c045983881
     2021 https://syzbot.org/bug?id=3302dc1c0e2b9c94f2e8edb404eabc9267bc6f90
    
    [1] https://syzkaller.appspot.com/bug?extid=457452d30bcdda75ead2
    [2] https://lore.kernel.org/lkml/[email protected]/
    
    Cc: stable <[email protected]>
    Reported-by: [email protected]
    Closes: https://syzbot.org/bug?extid=ce1e5a1b4e086b43e56d
    Reported-by: [email protected]
    Closes: https://syzbot.org/bug?extid=306212936b13e520679d
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=457452d30bcdda75ead2
    Originally-by: Andrey Tsygunka <[email protected]>
    Fixes: b72458a80c75 ("[PATCH] USB: Eagle and ADI 930 usb adsl modem driver")
    Assisted-by: Claude:claude-opus-4.7 # usb gadget & qemu device for testing
    Signed-off-by: Mauricio Faria de Oliveira <[email protected]>
    Acked-by: Stanislaw Gruszka <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: cdc_acm: Add quirk for Uniden BC125AT scanner [+ + +]
Author: Jared Baldridge <[email protected]>
Date:   Sat May 30 18:19:48 2026 -0400

    usb: cdc_acm: Add quirk for Uniden BC125AT scanner
    
    commit 6eba58568f6cc3ff8515a00b05e258d8cfb72b72 upstream.
    
    Uniden BC125AT radio scanner has a USB interface which fails to work
    with the cdc_acm driver:
     usb 1-1: new full-speed USB device number 2 using uhci_hcd
     cdc_acm 1-1:1.0: Zero length descriptor references
     cdc_acm 1-1:1.0: probe with driver cdc_acm failed with error -22
     usbcore: registered new interface driver cdc_acm
    
    Adding the NO_UNION_NORMAL quirk for the device fixes the issue:
    
     usb 1-1: new full-speed USB device number 2 using uhci_hcd
     cdc_acm 1-1:1.0: ttyACM0: USB ACM device
     usbcore: registered new interface driver cdc_acm
    
    `lsusb -v` of the device:
    
     Bus 001 Device 002: ID 1965:0017 Uniden Corporation BC125AT
     Negotiated speed: Full Speed (12Mbps)
     Device Descriptor:
       bLength                18
       bDescriptorType         1
       bcdUSB               2.00
       bDeviceClass            2 Communications
       bDeviceSubClass         0 [unknown]
       bDeviceProtocol         0
       bMaxPacketSize0        64
       idVendor           0x1965 Uniden Corporation
       idProduct          0x0017 BC125AT
       bcdDevice            0.01
       iManufacturer           1 Uniden America Corp.
       iProduct                2 BC125AT
       iSerial                 3 0001
       bNumConfigurations      1
       Configuration Descriptor:
         bLength                 9
         bDescriptorType         2
         wTotalLength       0x0030
         bNumInterfaces          2
         bConfigurationValue     1
         iConfiguration          0
         bmAttributes         0x80
           (Bus Powered)
         MaxPower              500mA
         Interface Descriptor:
           bLength                 9
           bDescriptorType         4
           bInterfaceNumber        0
           bAlternateSetting       0
           bNumEndpoints           1
           bInterfaceClass         2 Communications
           bInterfaceSubClass      2 Abstract (modem)
           bInterfaceProtocol      0
           iInterface              0
           Endpoint Descriptor:
             bLength                 7
             bDescriptorType         5
             bEndpointAddress     0x87  EP 7 IN
             bmAttributes            3
               Transfer Type            Interrupt
               Synch Type               None
               Usage Type               Data
             wMaxPacketSize     0x0008  1x 8 bytes
             bInterval              10
         Interface Descriptor:
           bLength                 9
           bDescriptorType         4
           bInterfaceNumber        1
           bAlternateSetting       0
           bNumEndpoints           2
           bInterfaceClass        10 CDC Data
           bInterfaceSubClass      0 [unknown]
           bInterfaceProtocol      0
           iInterface              0
           Endpoint Descriptor:
             bLength                 7
             bDescriptorType         5
             bEndpointAddress     0x81  EP 1 IN
             bmAttributes            2
               Transfer Type            Bulk
               Synch Type               None
               Usage Type               Data
             wMaxPacketSize     0x0040  1x 64 bytes
             bInterval               0
           Endpoint Descriptor:
             bLength                 7
             bDescriptorType         5
             bEndpointAddress     0x02  EP 2 OUT
             bmAttributes            2
               Transfer Type            Bulk
               Synch Type               None
               Usage Type               Data
             wMaxPacketSize     0x0040  1x 64 bytes
             bInterval               0
     Device Status:     0x0000
       (Bus Powered)
    
    Signed-off-by: Jared Baldridge <[email protected]>
    Cc: stable <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
USB: chaoskey: Fix slab-use-after-free in chaoskey_release() [+ + +]
Author: Alan Stern <[email protected]>
Date:   Tue Jun 9 13:37:36 2026 -0400

    USB: chaoskey: Fix slab-use-after-free in chaoskey_release()
    
    commit abf76d3239dee97b66e7241ad04811f1ce562e28 upstream.
    
    The chaoskey driver has a use-after-free bug in its release routine.
    If the user closes the device file after the USB device has been
    unplugged, a debugging log statement will try to access the
    usb_interface structure after it has been deallocated:
    
            BUG: KASAN: slab-use-after-free in dev_driver_string (drivers/base/core.c:2406)
            Read of size 8 at addr ffff888168e8a0b8 by task chaoskey_raw_re/10106
    
            Hardware name: QEMU Ubuntu 24.04 PC v2 (i440FX + PIIX, arch_caps fix, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
            Call Trace:
             <TASK>
             dump_stack_lvl (lib/dump_stack.c:94 lib/dump_stack.c:120)
             print_report (mm/kasan/report.c:378 mm/kasan/report.c:482)
             kasan_report (mm/kasan/report.c:595)
             dev_driver_string (drivers/base/core.c:2406)
             __dynamic_dev_dbg (lib/dynamic_debug.c:906)
             chaoskey_release (drivers/usb/misc/chaoskey.c:323)
             __fput (fs/file_table.c:510)
             fput_close_sync (fs/file_table.c:615)
             __x64_sys_close (fs/open.c:1507 fs/open.c:1492 fs/open.c:1492)
             do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
             entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:121)
    
    The driver's last reference to the interface structure is dropped in
    the chaoskey_free() routine, so the code must not use the interface --
    even in a debugging statement -- after that routine returns.
    (Exception: If we know that another reference is held by someone else,
    such as the device core while the disconnect routine runs, there's no
    problem.  Thanks to Johan Hovold for pointing this out.)
    
    Since the bad access is part of an unimportant debugging statement,
    we can fix the problem simply by removing the whole statement.
    
    Reported-by: Shuangpeng Bai <[email protected]>
    Closes: https://lore.kernel.org/linux-usb/[email protected]/
    Tested-by: Shuangpeng Bai <[email protected]>
    Signed-off-by: Alan Stern <[email protected]>
    Fixes: 66e3e591891d ("usb: Add driver for Altus Metrum ChaosKey device (v2)")
    Cc: stable <[email protected]>
    Reviewed-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: core: add USB_QUIRK_NO_LPM for VIA Labs USB 2.0 hub [+ + +]
Author: Rodrigo Lugathe da Conceição Alves <[email protected]>
Date:   Wed Jun 3 08:36:26 2026 -0300

    USB: core: add USB_QUIRK_NO_LPM for VIA Labs USB 2.0 hub
    
    commit bd728c3d9b1cc0bb0fda6a7055c5c8b55d7477b2 upstream.
    
    The VIA Labs, Inc. USB 2.0 hub controller (2109:2817),
    found in a KVM switch, fails to enumerate high-power devices during
    cold boot and system restart.
    
    Applying the kernel parameter
      usbcore.quirks=2109:2817:k
    resolves the issue.
    
    Enumeration failure log:
      usb 1-1.2.3: device descriptor read/64, error -32
      usb 1-1.2.3: Device not responding to setup address.
      usb 1-1.2.3: device not accepting address 11, error -71
      usb 1-1.2-port3: unable to enumerate USB device
    
    Add USB_QUIRK_NO_LPM for this device.
    
    Signed-off-by: Rodrigo Lugathe da Conceição Alves <[email protected]>
    Cc: stable <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usb: free iso schedules on failed submit [+ + +]
Author: Dawei Feng <[email protected]>
Date:   Sun Jul 19 10:53:46 2026 -0400

    usb: free iso schedules on failed submit
    
    [ Upstream commit b9399d25fbb34a05bbe76eeedd730f62ff2670e9 ]
    
    EHCI and FOTG210 isochronous submits build an ehci_iso_sched before
    linking the URB to the endpoint queue, and keep the staged schedule in
    urb->hcpriv until iso_stream_schedule() and the link helpers consume it.
    If the controller is no longer accessible, or usb_hcd_link_urb_to_ep()
    fails, submit jumps to done_not_linked before that handoff happens and
    leaks the staged schedule still attached to urb->hcpriv.
    
    Free the staged schedule from done_not_linked when submit fails before
    the URB is linked and clear urb->hcpriv after the free.
    
    The bug was first flagged by an experimental analysis tool we are
    developing for kernel memory-management bugs while analyzing
    v6.13-rc1. The tool is still under development and is not yet publicly
    available. Manual inspection confirms that the bug is still
    present in v7.1.1.
    
    An x86_64 allyesconfig build showed no new warnings. As we do not have an
    EHCI host controller with a USB isochronous device to test with, no
    runtime testing was able to be performed.
    
    Fixes: 8de98402652c ("[PATCH] USB: Fix USB suspend/resume crasher (#2)")
    Fixes: e9df41c5c589 ("USB: make HCDs responsible for managing endpoint queues")
    Fixes: 7d50195f6c50 ("usb: host: Faraday fotg210-hcd driver")
    Cc: stable <[email protected]>
    Signed-off-by: Dawei Feng <[email protected]>
    Reviewed-by: Alan Stern <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: composite: fix dead empty check in the USB_DT_OTG handler [+ + +]
Author: Maoyi Xie <[email protected]>
Date:   Wed May 27 23:08:32 2026 +0800

    usb: gadget: composite: fix dead empty check in the USB_DT_OTG handler
    
    commit f8f680609c2b3ab795ffcd6f21585b6dfc46d395 upstream.
    
    The OTG branch of composite_setup() falls back to the first
    configuration when none is selected:
    
            if (cdev->config)
                    config = cdev->config;
            else
                    config = list_first_entry(&cdev->configs,
                                              struct usb_configuration, list);
            if (!config)
                    goto done;
            ...
            memcpy(req->buf, config->descriptors[0], value);
    
    list_first_entry() never returns NULL. On an empty list it returns
    container_of() of the list head. So the "if (!config)" check is dead.
    
    When cdev->configs is empty, config points at the head inside struct
    usb_composite_dev. config->descriptors[0] reads whatever sits at that
    offset. The memcpy copies up to w_length bytes of it into the response
    buffer.
    
    cdev->configs can be empty in two cases. One is a teardown race on
    gadget unbind with a control transfer in flight. The other is a driver
    that sets is_otg before it adds a config. A reproducer that holds
    cdev->configs empty triggers a KASAN fault in this branch.
    
    Use list_first_entry_or_null() so the existing check does its job.
    
    Fixes: 53e6242db8d6 ("usb: gadget: composite: add USB_DT_OTG request handling")
    Cc: stable <[email protected]>
    Signed-off-by: Maoyi Xie <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: f_fs: initialize reset_work at allocation time [+ + +]
Author: Tyler Baker <[email protected]>
Date:   Mon Jul 20 09:59:20 2026 -0400

    usb: gadget: f_fs: initialize reset_work at allocation time
    
    [ Upstream commit 3137b243c93982fe3460335e12f9247739766e10 ]
    
    ffs_fs_kill_sb() unconditionally calls cancel_work_sync() on
    ffs->reset_work when a functionfs instance is unmounted:
    
            ffs_data_reset(ffs);
            cancel_work_sync(&ffs->reset_work);
    
    However ffs->reset_work is only ever initialized via INIT_WORK() in
    ffs_func_set_alt() and ffs_func_disable(), and only on the
    FFS_DEACTIVATED path. That state is reached solely by ffs_data_closed()
    when the instance is mounted with the "no_disconnect" option, so for the
    common case (no "no_disconnect", or mounted and unmounted without ever
    being deactivated) reset_work is never initialized.
    
    ffs_data_new() allocates the ffs_data with kzalloc_obj() and does not
    initialize reset_work, and ffs_data_reset()/ffs_data_clear() do not touch
    it either, so reset_work.func is left NULL. cancel_work_sync() on such a
    work then trips the WARN_ON(!work->func) guard in __flush_work():
    
      WARNING: kernel/workqueue.c:4301 at __flush_work+0x330/0x360, CPU#3: umount
      Call trace:
       __flush_work
       cancel_work_sync
       ffs_fs_kill_sb [usb_f_fs]
       deactivate_locked_super
       deactivate_super
       cleanup_mnt
       __cleanup_mnt
       task_work_run
       exit_to_user_mode_loop
       el0_svc
    
    On older kernels cancel_work_sync() on a zero-initialized work struct was
    a silent no-op, which hid the missing initialization.
    
    Initialize reset_work once in ffs_data_new() so it is always valid for
    the lifetime of the ffs_data, and drop the now-redundant INIT_WORK()
    calls from the two deactivation paths.
    
    Fixes: 18d6b32fca38 ("usb: gadget: f_fs: add "no_disconnect" mode")
    Cc: stable <[email protected]>
    Signed-off-by: Tyler Baker <[email protected]>
    Cc: Loic Poulain <[email protected]>
    Cc: Dmitry Baryshkov <[email protected]>
    Cc: Srinivas Kandagatla <[email protected]>
    Tested-by: Loic Poulain <[email protected]>
    Reviewed-by: Peter Chen <[email protected]>
    Acked-by: Michał Nazarewicz <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    [ dropped the ffs_func_disable hunk since 6.6 predates the disable-body split and routes disable through ffs_func_set_alt, so removing the single lazy INIT_WORK there covers both paths ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: f_fs: Tie read_buffer lifetime to ffs_epfile [+ + +]
Author: Neill Kapron <[email protected]>
Date:   Mon Jul 20 11:56:40 2026 -0400

    usb: gadget: f_fs: Tie read_buffer lifetime to ffs_epfile
    
    [ Upstream commit 8bdcf96eb135aebacac319667f87db034fb38406 ]
    
    Currently, ffs_epfile_release unconditionally frees the endpoint's
    read_buffer when a file descriptor is closed. If userspace explicitly
    opens the endpoint multiple times and closes one, the read_buffer is
    destroyed. This can lead to silent data loss if other file descriptors
    are still actively reading from the endpoint.
    
    By tying the lifetime of the read_buffer to the ffs_epfile structure itself
    (which is destroyed when the functionfs instance is torn down in
    ffs_epfiles_destroy), we eliminate the brittle dependency on open/release
    calls while correctly matching the conceptual lifetime of unread data on
    the hardware endpoint.
    
    Fixes: 9353afbbfa7b ("usb: gadget: f_fs: buffer data from ‘oversized’ OUT requests")
    Cc: stable <[email protected]>
    Assisted-by: Antigravity:gemini-3.1-pro
    Signed-off-by: Neill Kapron <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    [ adjusted context in ffs_epfiles_destroy() since 6.12 lacks the simple_remove_by_name() rework and still uses dentry-based cleanup ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: f_printer: take kref only for successful open [+ + +]
Author: Xu Rao <[email protected]>
Date:   Sun Jul 19 10:53:42 2026 -0400

    usb: gadget: f_printer: take kref only for successful open
    
    [ Upstream commit 30adce93d5c4a5a1ec29d9249e3fdfcc391d406b ]
    
    printer_open() returns -EBUSY when the character device is already
    open, but it increments dev->kref regardless of the return value. VFS
    does not call ->release() for a failed open, so every rejected second
    open permanently leaks one reference.
    
    Move kref_get() into the successful-open branch.
    
    Fixes: e8d5f92b8d30 ("usb: gadget: function: printer: fix use-after-free in __lock_acquire")
    Cc: stable <[email protected]>
    Signed-off-by: Xu Rao <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: function: rndis: add length check for header [+ + +]
Author: Griffin Kroah-Hartman <[email protected]>
Date:   Wed Jul 8 13:08:59 2026 +0200

    usb: gadget: function: rndis: add length check for header
    
    commit 21b5bf155435008e0fb0736795289788e63d426f upstream.
    
    Add a length check for the rndis header in rndis_rm_hdr, to ensure that
    MessageType, MessageLength, DataOffset, and DataLength fields are
    present before they are accessed.
    
    Assisted-by: gkh_clanker_2000
    Cc: stable <[email protected]>
    Signed-off-by: Griffin Kroah-Hartman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: function: rndis: add length check to response query [+ + +]
Author: Griffin Kroah-Hartman <[email protected]>
Date:   Wed Jul 8 13:08:58 2026 +0200

    usb: gadget: function: rndis: add length check to response query
    
    commit 95f90eea070837f7c72207d5520f805bdefc3bc5 upstream.
    
    Add variable representations for BufLength and BufOffset in
    rndis_query_response(), and perform a length check on them.
    
    This is identical to how rndis_set_response() handles these parameters.
    
    Assisted-by: gkh_clanker_2000
    Cc: stable <[email protected]>
    Signed-off-by: Griffin Kroah-Hartman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: function: Simplify diagnostic messaging in printer [+ + +]
Author: Andrzej Pietrasiewicz <[email protected]>
Date:   Sun Jul 19 10:53:41 2026 -0400

    usb: gadget: function: Simplify diagnostic messaging in printer
    
    [ Upstream commit 57b7b733b1a7aeab25bc2670afff608214284863 ]
    
    Don't issue messages which can be easily achieved with ftrace.
    In case of printer_open() the return code is propagated to other layers
    so the user will know about -EBUSY anyway.
    
    Signed-off-by: Andrzej Pietrasiewicz <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: 30adce93d5c4 ("usb: gadget: f_printer: take kref only for successful open")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: host: max3421: Fix shift-out-of-bounds in max3421_hub_control() [+ + +]
Author: Seungjin Bae <[email protected]>
Date:   Mon May 18 18:49:00 2026 -0400

    usb: host: max3421: Fix shift-out-of-bounds in max3421_hub_control()
    
    [ Upstream commit cff06b03b530ae1fe8a13e93a7848f2130e00fb4 ]
    
    The `max3421_hub_control()` function handles USB hub class requests
    to the virtual root hub. In the `default` branches of both the
    `ClearPortFeature` and `SetPortFeature` switch statements, it modifies
    `max3421_hcd->port_status` by left shifting 1 by the request's `value`
    parameter. However, it does not validate whether this shift will exceed
    the width of `port_status`.
    
    So if a malicious userspace task with access to the root hub via
    /dev/bus/usb/.../001 issues a USBDEVFS_CONTROL ioctl with `wValue`
    greater than or equal to 32, the left shift operation invokes
    shift-out-of-bounds undefined behavior. This results in arbitrary
    bit corruption of `port_status`, including the normally-immutable
    change bits, which can bypass internal state checks and confuse the
    hub status.
    
    Fix this by rejecting requests whose `value` exceeds the shift width
    before performing the shift.
    
    This issue was found using a KLEE-based symbolic execution tool for
    kernel drivers that I'm currently developing.
    
    Fixes: 2d53139f3162 ("Add support for using a MAX3421E chip as a host driver.")
    Signed-off-by: Seungjin Bae <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

usb: host: max3421: Reject hub port requests for non-existent ports [+ + +]
Author: Seungjin Bae <[email protected]>
Date:   Mon May 18 18:49:02 2026 -0400

    usb: host: max3421: Reject hub port requests for non-existent ports
    
    [ Upstream commit 11b5c101e2fd206104b05bc92554d356989423a8 ]
    
    The `max3421_hub_control()` function handles USB hub class requests
    to the virtual root hub. The `GetPortStatus` case correctly rejects
    requests with `index != 1`, since the virtual root hub has only a
    single port. However, the `ClearPortFeature` and `SetPortFeature`
    cases lack the same check.
    
    Fix this by extending the `index != 1` rejection to both cases,
    matching the existing behavior of `GetPortStatus`.
    
    Fixes: 2d53139f3162 ("Add support for using a MAX3421E chip as a host driver.")
    Suggested-by: Alan Stern <[email protected]>
    Reviewed-by: Alan Stern <[email protected]>
    Signed-off-by: Seungjin Bae <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
USB: idmouse: fix use-after-free on disconnect race [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Jun 22 17:26:10 2026 +0200

    USB: idmouse: fix use-after-free on disconnect race
    
    commit ff002c153f9722caece3983cc23dc4d9d4652cb4 upstream.
    
    mutex_unlock() may access the mutex structure after releasing the lock
    and therefore cannot be used to manage lifetime of objects directly
    (unlike spinlocks and refcounts). [1][2]
    
    Use a kref to release the driver data to avoid use-after-free in
    mutex_unlock() when release() races with disconnect().
    
    [1] a51749ab34d9 ("locking/mutex: Document that mutex_unlock() is
                       non-atomic")
    [2] 2b9d9e0a9ba0 ("locking/mutex: Clarify that mutex_unlock(), and most
                       other sleeping locks, can still use the lock object
                       after it's unlocked")
    
    Fixes: 54d2bc068fd2 ("USB: fix locking in idmouse")
    Cc: [email protected]      # 2.6.24
    Cc: Oliver Neukum <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: iowarrior: fix use-after-free on disconnect [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Sat May 23 19:05:23 2026 +0200

    USB: iowarrior: fix use-after-free on disconnect
    
    commit bc0e4f16c44e50daa0b1ea729934baa3b4815dee upstream.
    
    Submitted write URBs are not stopped on close() and therefore need to be
    stopped unconditionally on disconnect() to avoid use-after-free in the
    completion handler.
    
    Fixes: b5f8d46867ca ("USB: iowarrior: fix use-after-free after driver unbind")
    Fixes: 946b960d13c1 ("USB: add driver for iowarrior devices.")
    Reported-by: [email protected]
    Link: https://lore.kernel.org/all/[email protected]/
    Cc: stable <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usb: iowarrior: remove inherent race with minor number [+ + +]
Author: Oliver Neukum <[email protected]>
Date:   Sun Jul 19 12:39:18 2026 -0400

    usb: iowarrior: remove inherent race with minor number
    
    [ Upstream commit 56dd29088c9d9510c48a8ebad2465248fde36551 ]
    
    The driver saves the minor number it gets upon registration
    in its descriptor for debugging purposes. However, there is
    inevitably a window between registration and saving the correct
    minor in a descriptor. During this window the debugging output
    will be wrong.
    As wrong debug output is worse than no debug output, just
    remove it.
    
    Signed-off-by: Oliver Neukum <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: c602254ba4c1 ("USB: iowarrior: fix use-after-free on disconnect race")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
USB: ldusb: fix use-after-free on disconnect race [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Jun 22 17:26:11 2026 +0200

    USB: ldusb: fix use-after-free on disconnect race
    
    commit 19bdfc7b3c179331eafa423d87e1336f43bbfeb8 upstream.
    
    mutex_unlock() may access the mutex structure after releasing the lock
    and therefore cannot be used to manage lifetime of objects directly
    (unlike spinlocks and refcounts). [1][2]
    
    Use a kref to release the driver data to avoid use-after-free in
    mutex_unlock() when release() races with disconnect().
    
    [1] a51749ab34d9 ("locking/mutex: Document that mutex_unlock() is
                       non-atomic")
    [2] 2b9d9e0a9ba0 ("locking/mutex: Clarify that mutex_unlock(), and most
                       other sleeping locks, can still use the lock object
                       after it's unlocked")
    
    Fixes: ce0d7d3f575f ("usb: ldusb: ld_usb semaphore to mutex")
    Cc: stable <[email protected]>
    Cc: Daniel Walker <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: legousbtower: fix use-after-free on disconnect race [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Jun 22 17:26:12 2026 +0200

    USB: legousbtower: fix use-after-free on disconnect race
    
    commit 62fc8eb1b1481051f7bab4aa93d79809053dd09f upstream.
    
    mutex_unlock() may access the mutex structure after releasing the lock
    and therefore cannot be used to manage lifetime of objects directly
    (unlike spinlocks and refcounts). [1][2]
    
    Use a kref to release the driver data to avoid use-after-free in
    mutex_unlock() when release() races with disconnect().
    
    [1] a51749ab34d9 ("locking/mutex: Document that mutex_unlock() is
                       non-atomic")
    [2] 2b9d9e0a9ba0 ("locking/mutex: Clarify that mutex_unlock(), and most
                       other sleeping locks, can still use the lock object
                       after it's unlocked")
    
    Fixes: 18bcbcfe9ca2 ("USB: misc: legousbtower: semaphore to mutex")
    Cc: stable <[email protected]>
    Cc: Daniel Walker <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: misc: uss720: unregister parport on probe failure [+ + +]
Author: Myeonghun Pak <[email protected]>
Date:   Tue Jul 7 00:10:49 2026 +0900

    USB: misc: uss720: unregister parport on probe failure
    
    commit b4ecbdc4f8830f5586c4a5cfc384c00f20f8f8b3 upstream.
    
    uss720_probe() registers a parport before reading the 1284 register used
    to detect unsupported Belkin F5U002 adapters. If get_1284_register()
    fails, the error path drops the driver private data and the USB device
    reference, but leaves the parport device registered.
    
    Leaving the port registered is more than a private allocation leak:
    parport_register_port() has already reserved a parport number and
    registered the parport bus device, while pp->private_data still points at
    the private data that the common error path is about to release.
    
    Undo the pre-announce registration in the get_1284_register() failure
    branch before jumping to the common private-data cleanup path. Clear
    priv->pp first, matching the disconnect path and avoiding a stale pointer
    in the private data.
    
    This issue was identified during our ongoing static-analysis research while
    reviewing kernel code.
    
    Fixes: 3295f1b866bf ("usb: misc: uss720: check for incompatible versions of the Belkin F5U002")
    Cc: stable <[email protected]>
    Co-developed-by: Ijae Kim <[email protected]>
    Signed-off-by: Ijae Kim <[email protected]>
    Signed-off-by: Myeonghun Pak <[email protected]>
    Reviewed-by: Alex Henrie <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usb: mtu3: unmap request DMA on queue failure [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Tue Jun 23 17:33:25 2026 +0800

    usb: mtu3: unmap request DMA on queue failure
    
    commit 0bddda5a11665c210339de76d27ebbd1a2e0b43c upstream.
    
    mtu3_gadget_queue() maps the request before checking whether
    the QMU GPD ring can accept another transfer. the request is
    returned with -EAGAIN before it is linked on the endpoint
    request list if mtu3_prepare_transfer() fails.
    
    Normal completion and dequeue paths unmap requests from
    mtu3_req_complete(), but this error path never reaches that
    helper, so the DMA mapping is left active. Unmap the request
    before returning from the failed queue path.
    
    Fixes: df2069acb005 ("usb: Add MediaTek USB3 DRD driver")
    Cc: stable <[email protected]>
    Signed-off-by: Haoxiang Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
USB: quirks: add NO_LPM for the Samsung T5 EVO Portable SSD [+ + +]
Author: Erich E. Hoover <[email protected]>
Date:   Tue Jun 2 14:45:08 2026 -0600

    USB: quirks: add NO_LPM for the Samsung T5 EVO Portable SSD
    
    commit fc591787785b9709a0bb65a7df3ba2537d611c47 upstream.
    
    The Samsung T5 EVO Portable SSD (04e8:6200) exhibit two forms of
    link instability when USB Link Power Management is enabled:
    
      1. The units fail to initialize properly on first detection,
      resulting in a lockup in the drive where it must be power cycled
      or the kernel will not recognize the presence of the device.
    
      2. If used for sustained operations (small amounts of continuous
      data are transferred to the unit) then the unit will "hiccup"
      after roughly 8 hours of use and will disconnect and reconnect.
      This has a certain probability of triggering the first issue,
      but also causes mount points to become invalid since the device
      gets issued a new letter.
    
    Signed-off-by: Erich E. Hoover <[email protected]>
    Cc: stable <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: digi_acceleport: fix broken rx after throttle [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Tue Jun 23 17:08:15 2026 +0200

    USB: serial: digi_acceleport: fix broken rx after throttle
    
    commit 83a3dfc018943b05b6daf3a6f891833e1aabfa1f upstream.
    
    If the port is closed while throttled, the read urb is never resubmitted
    and the port will not receive any further data until the device is
    reconnected (or the driver is rebound).
    
    Clear the throttle flags and submit the urb if needed when opening the
    port.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: digi_acceleport: fix hard lockup on disconnect [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Tue Jun 23 17:11:10 2026 +0200

    USB: serial: digi_acceleport: fix hard lockup on disconnect
    
    commit 5c1ea24b53bf3bfb859f0a05573997487975da23 upstream.
    
    If submitting the OOB write urb fails persistently (e.g if the device is
    being disconnected) the driver would loop indefinitely with interrupts
    disabled.
    
    Check for urb submission errors when sending OOB commands to avoid
    hanging if, for example, open(), set_termios() or close() races with a
    physical disconnect.
    
    This is issue was flagged by Sashiko when reviewing an unrelated change
    to the driver.
    
    Link: https://sashiko.dev/#/patchset/20260610132232.356139-1-johan%40kernel.org?part=1
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Reviewed-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: digi_acceleport: fix write buffer corruption [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Sun Jul 19 14:01:28 2026 -0400

    USB: serial: digi_acceleport: fix write buffer corruption
    
    [ Upstream commit 24ca1fea8f2753bf33e1d458ec1ae5d9b7796a65 ]
    
    The digi_write_inb_command() is supposed to wait for the write urb to
    become available or return an error, but instead it updates the transfer
    buffer and tries to resubmit the urb on timeout.
    
    To make things worse, for commands like break control where no timeout
    is used, the driver would corrupt the urb immediately due to a broken
    jiffies comparison (on 32-bit machines this takes five minutes of uptime
    to trigger due to INITIAL_JIFFIES).
    
    Fix this by adding the missing return on timeout and waiting
    indefinitely when no timeout has been specified as intended.
    
    This issue was (sort of) flagged by Sashiko when reviewing an unrelated
    change to the driver.
    
    Link: https://sashiko.dev/#/patchset/20260610132232.356139-1-johan%40kernel.org?part=11
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Reviewed-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    [ adjusted context for 5.10's `&port->write_wait` (no `priv->write_wait`) and kept the existing `unsigned long flags = 0;` declaration alongside the new `expire` variable ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: option: add Telit Cinterion FE990D50 compositions [+ + +]
Author: Fabio Porcedda <[email protected]>
Date:   Fri Jun 12 13:39:16 2026 +0200

    USB: serial: option: add Telit Cinterion FE990D50 compositions
    
    commit b33ab1dd80f5c1742f49eb6ec7b337c5ffcf3d32 upstream.
    
    Add support for Telit Cinterion FE990D50 compositions:
    
    0x990: RNDIS + tty (AT/NMEA) + tty (AT) + tty (AT) + tty (AT) +
           tty (diag) + ADPL + adb
    T:  Bus=01 Lev=01 Prnt=01 Port=06 Cnt=03 Dev#=  3 Spd=480  MxCh= 0
    D:  Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=0990 Rev=06.06
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE990
    S:  SerialNumber=90b6a3ed
    C:  #Ifs=10 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= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8a(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 6 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8b(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 7 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=8c(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 8 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=70 Driver=(none)
    E:  Ad=8d(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 9 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x991: rmnet + tty (AT/NMEA) + tty (AT) + tty (AT) + tty (AT) +
           tty (diag) + ADPL + adb
    T:  Bus=01 Lev=01 Prnt=01 Port=06 Cnt=03 Dev#=  9 Spd=480  MxCh= 0
    D:  Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=0991 Rev=06.06
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE990
    S:  SerialNumber=90b6a3ed
    C:  #Ifs= 9 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=(none)
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 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#= 2 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#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8a(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8b(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 6 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=8c(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 7 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=70 Driver=(none)
    E:  Ad=8d(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 8 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x992: MBIM + tty (AT/NMEA) + tty (AT) + tty (AT) + tty (AT) +
           tty (diag) + ADPL + adb
    T:  Bus=01 Lev=01 Prnt=01 Port=06 Cnt=03 Dev#= 12 Spd=480  MxCh= 0
    D:  Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=0992 Rev=06.06
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE990
    S:  SerialNumber=90b6a3ed
    C:  #Ifs=10 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8a(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 6 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8b(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 7 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=8c(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 8 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=70 Driver=(none)
    E:  Ad=8d(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 9 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x993: ECM + tty (AT/NMEA) + tty (AT) + tty (AT) + tty (AT) +
           tty (diag) + ADPL + adb
    T:  Bus=01 Lev=01 Prnt=01 Port=06 Cnt=03 Dev#= 15 Spd=480  MxCh= 0
    D:  Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=0993 Rev=06.06
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE990
    S:  SerialNumber=90b6a3ed
    C:  #Ifs=10 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=06 Prot=00 Driver=cdc_ether
    E:  Ad=82(I) Atr=03(Int.) MxPS=  16 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8a(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 6 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8b(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 7 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=8c(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 8 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=70 Driver=(none)
    E:  Ad=8d(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 9 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Cc: [email protected]
    Signed-off-by: Fabio Porcedda <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usb: sl811-hcd: disable controller wakeup on remove [+ + +]
Author: Myeonghun Pak <[email protected]>
Date:   Wed Jul 1 21:16:25 2026 +0900

    usb: sl811-hcd: disable controller wakeup on remove
    
    commit 4e8ba83ac4d311992e6a4c21de5dd705010df06e upstream.
    
    sl811h_probe() enables the HCD controller device as a wakeup source after
    usb_add_hcd() succeeds, but sl811h_remove() removes the HCD and releases
    the driver resources without disabling that wakeup source.
    
    Disable controller wakeup after usb_remove_hcd() and before usb_put_hcd()
    so the wakeup source object is detached while the controller device pointer
    is still available.
    
    This issue was identified during our ongoing static-analysis research while
    reviewing kernel code.
    
    Fixes: 3c9740a117d4 ("usb: hcd: move controller wakeup setting initialization to individual driver")
    Cc: stable <[email protected]>
    Co-developed-by: Ijae Kim <[email protected]>
    Signed-off-by: Ijae Kim <[email protected]>
    Signed-off-by: Myeonghun Pak <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
USB: storage: include US_FL_NO_SAME in quirks mask [+ + +]
Author: Xu Rao <[email protected]>
Date:   Tue Jun 2 13:38:42 2026 +0800

    USB: storage: include US_FL_NO_SAME in quirks mask
    
    commit 2c00e09e3f9f06f8434f5ea2ee6179ce46692ee6 upstream.
    
    usb_stor_adjust_quirks() parses the usb-storage.quirks module
    parameter into a new flag set and then applies it with the quirk
    mask to override built-in flags.
    
    The mask is meant to cover the flags that can be overridden by
    the module parameter. The 'k' quirk character sets US_FL_NO_SAME,
    but US_FL_NO_SAME is not included in the mask.
    
    As a result, the module parameter can set US_FL_NO_SAME, but it
    cannot clear a built-in US_FL_NO_SAME flag by providing an override
    entry that omits 'k'.
    
    Add US_FL_NO_SAME to the mask so that the module parameter can
    override it in the same way as the other supported flags.
    
    Fixes: 8010622c86ca ("USB: UAS: introduce a quirk to set no_write_same")
    Cc: stable <[email protected]>
    Signed-off-by: Xu Rao <[email protected]>
    Reviewed-by: Alan Stern <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usb: typec: tcpm: Fix VDM type for Enter Mode commands [+ + +]
Author: Andy Yan <[email protected]>
Date:   Mon Jul 20 06:54:58 2026 -0400

    usb: typec: tcpm: Fix VDM type for Enter Mode commands
    
    [ Upstream commit 9cff680e47632b7723cb19f9c5e63669063c3417 ]
    
    VDO() second parameter is VDM type (bit 15): 1 for SVDM, 0 for UVDM.
    Using 'vdo ? 2 : 1' corrupts SVID low bit when vdo is non-NULL
    (2 << 15 = BIT(16)). Enter Mode is always SVDM, hardcode to 1.
    
    Fixes: 8face9aa57c8 ("usb: typec: Add parameter for the VDO to typec_altmode_enter()")
    Cc: stable <[email protected]>
    Signed-off-by: Andy Yan <[email protected]>
    Reviewed-by: Heikki Krogerus <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: typec: tcpm: Validate SVID index in svdm_consume_modes() [+ + +]
Author: Badhri Jagan Sridharan <[email protected]>
Date:   Mon Jun 22 22:08:03 2026 +0000

    usb: typec: tcpm: Validate SVID index in svdm_consume_modes()
    
    commit 7b681dd5fbf60b24a13c14661e5b7735759fb491 upstream.
    
    In svdm_consume_modes(), the SVID value is read from pmdata->svids using
    pmdata->svid_index as an array index without bounds validation:
    
        paltmode->svid = pmdata->svids[pmdata->svid_index];
    
    If pmdata->svid_index is driven beyond SVID_DISCOVERY_MAX (16), it results
    in an out-of-bounds read of the pmdata->svids array. Because pd_mode_data
    is embedded inside struct tcpm_port, indexing past svids reads into
    adjacent fields. In particular:
    - At index 16, it reads the altmodes count.
    - At index 18 and beyond, it reads into altmode_desc[], which contains
      partner-supplied SVDM Discovery Modes VDOs.
    
    By injecting a chosen SVID into altmode_desc[0].vdo and driving svid_index
    to 20, the partner can force paltmode->svid to be loaded with an arbitrary,
    partner- chosen SVID, which is then registered via
    typec_partner_register_altmode().
    
    Fix this by validating that pmdata->svid_index is non-negative and strictly
    less than pmdata->nsvids before accessing the pmdata->svids array inside
    svdm_consume_modes().
    
    Assisted-by: Antigravity:gemini-3.5-flash
    Fixes: 4ab8c18d4d67 ("usb: typec: Register a device for every mode")
    Cc: stable <[email protected]>
    Signed-off-by: Badhri Jagan Sridharan <[email protected]>
    Reviewed-by: RD Babiera <[email protected]>
    Acked-by: Heikki Krogerus <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: typec: ucsi: ccg: Fix use-after-free of ucsi on remove [+ + +]
Author: Fan Wu <[email protected]>
Date:   Sun Jul 19 22:35:39 2026 -0400

    usb: typec: ucsi: ccg: Fix use-after-free of ucsi on remove
    
    [ Upstream commit 1f0bdc2884b67de337215079bba166df0cdf4ac5 ]
    
    The threaded IRQ handler ccg_irq_handler() calls ucsi_notify_common(),
    which on a connector-change event calls ucsi_connector_change() and
    schedules connector work.  In ucsi_ccg_remove(), ucsi_destroy() frees
    uc->ucsi (kfree) before free_irq() is called, so a handler invocation
    already in flight may access the freed object after ucsi_destroy().
    
      CPU 0 (remove)            | CPU 1 (threaded IRQ)
        ucsi_destroy(uc->ucsi)  |   ccg_irq_handler()
          kfree(ucsi) // FREE   |     ucsi_notify_common(uc->ucsi) // USE
    
    Move free_irq() before ucsi_destroy() in the remove path.  It is kept
    after ucsi_unregister(): ucsi_unregister() cancels connector work whose
    handler issues GET_CONNECTOR_STATUS through ucsi_send_command_common(),
    which waits for a completion that is signalled from the IRQ handler, so
    the IRQ must stay active until that work has been cancelled.
    
    The probe error path already orders free_irq() before ucsi_destroy().
    
    This bug was found by static analysis.
    
    Fixes: e32fd989ac1c ("usb: typec: ucsi: ccg: Move to the new API")
    Cc: stable <[email protected]>
    Signed-off-by: Fan Wu <[email protected]>
    Reviewed-by: Heikki Krogerus <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: typec: ucsi: Invert DisplayPort role assignment [+ + +]
Author: Andrei Kuchynski <[email protected]>
Date:   Mon Jun 1 14:28:37 2026 +0000

    usb: typec: ucsi: Invert DisplayPort role assignment
    
    commit d092d7edf8faefa3e27b9fc7f0e7904b06c833a2 upstream.
    
    The existing implementation assigned these flags backwards, configuring
    the partner's DisplayPort role to match the port's role instead of
    complementing it.
    This prevents proper configuration during DP altmode activation, often
    causing `pin_assignment` to remain 0 in `dp_altmode_configure()` and
    resulting in VDM negotiation failures:
    
        [  583.328246] typec port1.1: VDM 0xff01a150 failed
    
    Additionally, the fix ensures that the `pin_assignment` sysfs attribute
    displays the correct values.
    
    Cc: stable <[email protected]>
    Fixes: af8622f6a585 ("usb: typec: ucsi: Support for DisplayPort alt mode")
    Signed-off-by: Andrei Kuchynski <[email protected]>
    Reviewed-by: Heikki Krogerus <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: typec: ucsi: Pass full DP config payload in SET_NEW_CAM for DP alt mode [+ + +]
Author: Madhu M <[email protected]>
Date:   Fri Jun 19 21:03:11 2026 +0530

    usb: typec: ucsi: Pass full DP config payload in SET_NEW_CAM for DP alt mode
    
    commit 735a461d060d4eeb2f9732aba1295bc32a3982e2 upstream.
    
    In the UCSI Specification Revision 3.1 RC1, bits 32-63 of the SET_NEW_CAM
    command hold the 32-bit Alternate Mode Specific (AMSpecific) field.
    
    For DisplayPort Alternate Mode, this field must contain the full
    32-bit DisplayPort configuration VDO payload that the OPM wants the
    connector to operate in, rather than just the pin assignment value.
    This AMSpecific value follows the DisplayPort Configurations defined
    in the DisplayPort Alt Mode on USB Type-C Specification v2.1a,
    Table 5-13: SOP DisplayPort Configurations.
    
    Fixes: af8622f6a585 ("usb: typec: ucsi: Support for DisplayPort alt mode")
    Cc: stable <[email protected]>
    Signed-off-by: Madhu M <[email protected]>
    Reviewed-by: Jameson Thies <[email protected]>
    Reviewed-by: Andrei Kuchynski <[email protected]>
    Reviewed-by: Heikki Krogerus <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
USB: ulpi: fix memory leak on registration failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Jun 8 16:58:03 2026 +0200

    USB: ulpi: fix memory leak on registration failure
    
    commit 8af6812795869a66e9b26044f455b13deecdb69c upstream.
    
    The allocated device name is never freed on early ULPI device
    registration failures.
    
    Fix this by initialising the device structure earlier and releasing the
    initial reference whenever registration fails.
    
    Fixes: 289fcff4bcdb ("usb: add bus type for USB ULPI")
    Cc: stable <[email protected]>
    Cc: Heikki Krogerus <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: usb-storage: ene_ub6250: restore media-ready check [+ + +]
Author: Xu Rao <[email protected]>
Date:   Fri Jun 26 15:06:07 2026 +0800

    USB: usb-storage: ene_ub6250: restore media-ready check
    
    commit 5fc3f333c001f1e308bbcdeecdec0d054d24338b upstream.
    
    Commit 1892bf90677a ("USB: usb-storage: Fix use of bitfields for
    hardware data in ene_ub6250.c") converted the media status fields from
    bitfields to bit masks.
    
    The original ene_transport() test called ene_init() only when neither
    media type was ready:
    
            !(sd_ready || ms_ready)
    
    The converted test became:
    
            !sd_ready || ms_ready
    
    This is not equivalent. Restore the original semantics by testing that
    both ready bits are clear before calling ene_init().
    
    Fixes: 1892bf90677a ("USB: usb-storage: Fix use of bitfields for hardware data in ene_ub6250.c")
    Cc: stable <[email protected]>
    Signed-off-by: Xu Rao <[email protected]>
    Reviewed-by: Alan Stern <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usb: xhci: Fix sleep in atomic context in xhci_free_streams() [+ + +]
Author: 胡连勤 <[email protected]>
Date:   Fri Jul 3 17:40:33 2026 +0300

    usb: xhci: Fix sleep in atomic context in xhci_free_streams()
    
    commit 42c37c4b75d38b51d84f31a8e29427f5e06a7c2a upstream.
    
    When a USB device with active stream endpoints is disconnected,
    xhci_free_streams() is called from the hub_event workqueue to
    free the stream resources.  It calls xhci_free_stream_info()
    while holding xhci->lock with irqs disabled.
    
    xhci_free_stream_info() invokes xhci_free_stream_ctx(), which
    calls dma_free_coherent() for large stream context arrays.
    
    dma_free_coherent() can sleep (e.g. via vunmap), triggering
    a BUG when called from atomic context.
    
    Call trace:
     dma_free_attrs+0x174/0x220
     xhci_free_stream_info+0xd0/0x11c
     xhci_free_streams+0x278/0x37c
     usb_free_streams+0x98/0xc0
     usb_unbind_interface+0x1b8/0x2f8
     device_release_driver_internal+0x1d4/0x2cc
     device_release_driver+0x18/0x28
     bus_remove_device+0x160/0x1a4
     device_del+0x1ec/0x350
     usb_disable_device+0x98/0x214
     usb_disconnect+0xf0/0x35c
     hub_event+0xab4/0x19ec
     process_one_work+0x278/0x63c
    
    Fix this by saving the stream_info pointers and clearing the
    ep references under the lock, then calling xhci_free_stream_info()
    outside the lock where sleeping is allowed.
    
    Fixes: 8df75f42f8e6 ("USB: xhci: Add memory allocation for USB3 bulk streams.")
    Cc: stable <[email protected]>
    Signed-off-by: Lianqin Hu <[email protected]>
    Signed-off-by: Mathias Nyman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usbip: tools: support SuperSpeedPlus devices [+ + +]
Author: Yichong Chen <[email protected]>
Date:   Wed Jun 17 10:06:13 2026 +0800

    usbip: tools: support SuperSpeedPlus devices
    
    commit 195e667c8719480c320cd48ac0fbf1cb81d6ffe0 upstream.
    
    USB devices running at SuperSpeedPlus report "10000" or "20000" in
    their sysfs speed attribute. usbip currently maps only "5000" to
    USB_SPEED_SUPER, so a SuperSpeedPlus device is imported as
    USB_SPEED_UNKNOWN.
    
    The attach request is then rejected by vhci_hcd:
    
      vhci_hcd: Failed attach request for unsupported USB speed: UNKNOWN
    
    Map the SuperSpeedPlus sysfs speed values to USB_SPEED_SUPER_PLUS, use
    the SuperSpeed VHCI hub for SuperSpeedPlus devices, and recognize the
    gadget current_speed string used by the kernel.
    
    Fixes: b2316645ca5e ("usb: show speed "10000" in sysfs for USB 3.1 SuperSpeedPlus devices")
    Cc: stable <[email protected]>
    Signed-off-by: Yichong Chen <[email protected]>
    Reviewed-by: Shuah Khan <[email protected]>
    Link: https://patch.msgid.link/00C828F338E43447+20260617020613.199086-1-chenyichong@uniontech.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usbip: vudc: fix NULL deref in vep_dequeue() [+ + +]
Author: Sam Day <[email protected]>
Date:   Fri Jun 26 14:29:10 2026 +1000

    usbip: vudc: fix NULL deref in vep_dequeue()
    
    commit c5371e0b91b24159a3ebaa61e70b0980bcf03c0a upstream.
    
    vep_alloc_request() wasn't initializing vrequest->udc, so cancellations
    on the FunctionFS AIO path were arriving in vep_dequeue without a valid
    UDC reference.
    
    Since vrequest->udc is never actually properly used anywhere, we opt to
    remove it, and update vep_dequeue to obtain a reference to the udc with
    ep_to_vudc(), consistent with the other vep_ ops.
    
    AFAICT this bug has existed for ~10 years. Seems that nobody has really
    stressed the FunctionFS AIO path on usbip's vudc.
    
    I tested this fix in a QEMU aarch64 guest driving FunctionFS endpoints
    via AIO. Before the fix, running `usbip attach` from the host would
    cause the guest to oops with the following backtrace:
    
    Call trace:
     vep_dequeue+0x1c/0xe4 (P)
     usb_ep_dequeue+0x14/0x20
     ffs_aio_cancel+0x24/0x34
     __arm64_sys_io_cancel+0xb0/0x124
     do_el0_svc+0x68/0x100
     el0_svc+0x18/0x5c
     el0t_64_sync_handler+0x98/0xdc
     el0t_64_sync+0x154/0x158
    
    Assisted-by: opencode:openai/gpt-5.5
    Cc: stable <[email protected]>
    Fixes: b6a0ca111867 ("usbip: vudc: Add UDC specific ops")
    Reviewed-by: Igor Kotrasinski <[email protected]>
    Signed-off-by: Sam Day <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usbnet: gl620a: fix out-of-bounds read in genelink_rx_fixup() [+ + +]
Author: Xiang Mei <[email protected]>
Date:   Sat Jun 27 13:53:53 2026 -0700

    usbnet: gl620a: fix out-of-bounds read in genelink_rx_fixup()
    
    [ Upstream commit 8ff7f2a6da4fccaa5cc9be7251a24e71e29fbd1a ]
    
    genelink_rx_fixup() splits an aggregated RX frame into its individual
    packets, using a per-packet length taken from device-supplied data. That
    length is only bounded by GL_MAX_PACKET_LEN (1514); it is never compared
    against how many bytes were actually received.
    
    A malicious GeneLink (GL620A) device can therefore send a short URB whose
    header claims packet_count > 1 and a first packet of up to 1514 bytes.
    
            skb_put_data(gl_skb, packet->packet_data, size);
    
    then copies past the end of the receive buffer and hands the adjacent slab
    contents up the network stack, an out-of-bounds read that leaks kernel heap.
    No privilege is required: the path runs in the usbnet RX softirq as soon as
    the interface is up.
    
      BUG: KASAN: slab-out-of-bounds in genelink_rx_fixup (drivers/net/usb/gl620a.c:112)
      Read of size 1514 at addr ffff888011309708 by task ksoftirqd/0/14
      Call Trace:
        ...
        __asan_memcpy (mm/kasan/shadow.c:105)
        genelink_rx_fixup (include/linux/skbuff.h:2814 drivers/net/usb/gl620a.c:112)
        usbnet_bh (drivers/net/usb/usbnet.c:572 drivers/net/usb/usbnet.c:1589)
        process_one_work (kernel/workqueue.c:3322)
        bh_worker (kernel/workqueue.c:3405)
        tasklet_action (kernel/softirq.c:965)
        handle_softirqs (kernel/softirq.c:622)
        run_ksoftirqd (kernel/softirq.c:1076)
        ...
    
    skb_pull() already verifies that the requested length fits the buffer and
    returns NULL otherwise. Move it ahead of the copy and check its result, so
    a packet that overruns the received data is rejected before it is read.
    Well-formed frames, whose packets are fully present, are unaffected.
    
    Fixes: 47ee3051c856 ("[PATCH] USB: usbnet (5/9) module for genesys gl620a cables")
    Reported-by: Weiming Shi <[email protected]>
    Signed-off-by: Xiang Mei <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
userfaultfd: gate must_wait writability check on pte_present() [+ + +]
Author: Kiryl Shutsemau <[email protected]>
Date:   Thu Jul 2 16:48:59 2026 +0100

    userfaultfd: gate must_wait writability check on pte_present()
    
    [ Upstream commit 8e80af52db652fbc41320eee45a4f73bc029faf2 ]
    
    userfaultfd_must_wait() and userfaultfd_huge_must_wait() read the PTE
    without taking the page table lock and then apply pte_write() /
    huge_pte_write() to it.  Those accessors decode bits from the present
    encoding only; on a swap or migration entry they read the offset bits that
    happen to share the same position and return an undefined result.
    
    The intent of the check is "is this fault still WP-blocked?".  A
    non-marker swap entry means the page is in transit -- the userfault
    context the original fault delivered against is no longer the same, and
    the swap-in or migration completion path will re-deliver a fresh fault if
    userspace still needs to handle it.  Worst case under the current code the
    garbage write bit says "wait", and the thread stays asleep until a
    UFFDIO_WAKE that may never arrive.
    
    Gate the writability check on pte_present() so the lockless re-check only
    inspects present-PTE bits when the entry is actually present.  The
    non-present, non-marker case returns "don't wait" and lets the fault path
    retry.
    
    Link: https://lore.kernel.org/[email protected]
    Fixes: 369cd2121be4 ("userfaultfd: hugetlbfs: userfaultfd_huge_must_wait for hugepmd ranges")
    Fixes: 63b2d4174c4a ("userfaultfd: wp: add the writeprotect API to userfaultfd ioctl")
    Signed-off-by: Kiryl Shutsemau <[email protected]>
    Reported-by: Sashiko AI review <[email protected]>
    Reviewed-by: Lorenzo Stoakes <[email protected]>
    Cc: David Hildenbrand <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Mike Rapoport <[email protected]>
    Cc: Peter Xu <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: Balbir Singh <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    
    [ kas: apply to fs/userfaultfd.c and fold the pte_present()/
      huge_pte_present() gate into the existing writability checks; this tree
      predates the marker/return-style refactor of these functions ]
    Signed-off-by: Kiryl Shutsemau <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
vfio/pci: Release the VGA arbiter client on register_device() failure [+ + +]
Author: Alex Williamson <[email protected]>
Date:   Tue Jul 14 09:40:09 2026 -0400

    vfio/pci: Release the VGA arbiter client on register_device() failure
    
    [ Upstream commit daedde7f024ecf88bc8e832ed40cf2c795f0796a ]
    
    The re-order in the Fixes commit below displaced vfio_pci_vga_init() as
    the last failure point of what is now vfio_pci_core_register_device()
    without introducing an unwind for the VGA arbiter registration.
    
    In current kernels this is mostly benign because vfio_pci_set_decode()
    only uses pci_dev state, but the original failure path could leave a
    callback with a freed vdev cookie.  The stale registration also becomes
    unsafe again once the callback follows drvdata to the vfio device.
    
    Add the required VGA unwind callout.
    
    Fixes: 4aeec3984ddc ("vfio/pci: Re-order vfio_pci_probe()")
    Cc: [email protected]
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: Alex Williamson <[email protected]>
    Reviewed-by: Kevin Tian <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alex Williamson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
vhost/vdpa: validate virtqueue index in mmap and fault paths [+ + +]
Author: Qihang Tang <[email protected]>
Date:   Fri May 8 15:58:21 2026 +0800

    vhost/vdpa: validate virtqueue index in mmap and fault paths
    
    [ Upstream commit 929e4f044621c8cc30b612fb74e1410bef09e41b ]
    
    vhost_vdpa_mmap() and vhost_vdpa_fault() use vma->vm_pgoff as a
    virtqueue index for get_vq_notification(), but they do not validate
    that the index is smaller than v->nvqs.
    
    The ioctl path already performs both a bounds check and
    array_index_nospec(), but the mmap/fault path only checks that the
    index fits in u16. This allows an out-of-range queue index to reach
    driver-specific get_vq_notification() callbacks.
    
    Fix this by extracting a unified vhost_vdpa_get_vq_notification()
    helper that validates the queue index against v->nvqs and applies
    array_index_nospec() before calling the driver callback. Both the
    mmap and fault paths use this helper, and the bounds checking is
    consolidated into a single location.
    
    From source inspection, the most defensible impact is out-of-bounds
    access in the callback path, potentially leading to invalid PFN
    remaps and crash/DoS.
    
    Fixes: ddd89d0a059d ("vhost_vdpa: support doorbell mapping via mmap")
    Acked-by: Eugenio Pérez <[email protected]>
    Acked-by: Michael S. Tsirkin <[email protected]>
    Signed-off-by: Qihang Tang <[email protected]>
    Signed-off-by: Michael S. Tsirkin <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
virtio-mmio: fix device release warning on module unload [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Apr 27 16:37:10 2026 +0200

    virtio-mmio: fix device release warning on module unload
    
    commit c687bc35694698ec4c7f92bf929c3d659f0cecb8 upstream.
    
    Driver core expects devices to be allocated dynamically and complains
    loudly when a device that lacks a release function is freed.
    
    Use __root_device_register() to allocate and register the root device
    instead of open coding using a static device.
    
    Note that root_device_register(), which also creates a link to the
    module, cannot be used as the device is registered when parsing the
    module parameters which happens before the module kobject has been set
    up.
    
    Fixes: 81a054ce0b46 ("virtio-mmio: Devices parameter parsing")
    Cc: [email protected]      # 3.5
    Cc: Pawel Moll <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Michael S. Tsirkin <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
virtio_net: disable cb when NAPI is busy-polled [+ + +]
Author: Longjun Tang <[email protected]>
Date:   Mon Jun 29 10:42:30 2026 +0800

    virtio_net: disable cb when NAPI is busy-polled
    
    [ Upstream commit 1eb8fc67ca41db71c90866ff76c990d85247daef ]
    
    When busy-poll is active, napi_schedule_prep() returns false in
    virtqueue_napi_schedule(), so virtqueue_disable_cb() is skipped.
    The device may keep firing irqs until reaches virtqueue_napi_complete().
    Under load (received == budget), it will lead to a large number
    of spurious interrupts.
    
    Fix it by disabling the callback at the virtnet_poll() entry.
    This keeps the callback off while we poll and it is re-enabled by
    virtqueue_napi_complete() when going idle.
    
    Fixes: ceef438d613f ("virtio_net: remove custom busy_poll")
    Acked-by: Michael S. Tsirkin <[email protected]>
    Signed-off-by: Longjun Tang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
watchdog: sprd_wdt: Remove redundant sprd_wdt_disable() on register failure [+ + +]
Author: Felix Gu <[email protected]>
Date:   Mon Feb 23 19:59:20 2026 +0800

    watchdog: sprd_wdt: Remove redundant sprd_wdt_disable() on register failure
    
    [ Upstream commit 96b3cfc3b8ad0524d12fed1e08bc5df3ff345f64 ]
    
    The driver uses devm_add_action_or_reset() to register sprd_wdt_disable()
    as a managed cleanup action.
    
    When devm_watchdog_register_device() fails, the devm core will invoke
    the cleanup action automatically.
    
    The explicit sprd_wdt_disable() call in the error path is therefore
    redundant and results in adouble cleanup.
    
    Fixes: 78d9bfad2e89 ("watchdog: sprd_wdt: Convert to use device managed functions and other improvements")
    Signed-off-by: Felix Gu <[email protected]>
    Reviewed-by: Guenter Roeck <[email protected]>
    Reviewed-by: Baolin Wang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
wifi: ath9k: fix OOB access from firmware tx status queue ID [+ + +]
Author: Tristan Madani <[email protected]>
Date:   Wed Apr 15 22:23:43 2026 +0000

    wifi: ath9k: fix OOB access from firmware tx status queue ID
    
    [ Upstream commit 7ce2f118a2389e8f0a64068c6fe7cc7d40639be0 ]
    
    ath_tx_edma_tasklet() accesses sc->tx.txq[ts.qid] where ts.qid is a
    4-bit hardware field (0-15), but the txq array only has
    ATH9K_NUM_TX_QUEUES (10) entries. A qid >= 10 causes an OOB array
    access.
    
    Add a bounds check on ts.qid before using it as an array index.
    
    Fixes: fce041beb03f ("ath9k: unify edma and non-edma tx code, improve tx fifo handling")
    Signed-off-by: Tristan Madani <[email protected]>
    Acked-by: Toke Høiland-Jørgensen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jeff Johnson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mac80211: fix memory leak in ieee80211_register_hw() [+ + +]
Author: Dawei Feng <[email protected]>
Date:   Mon Jul 6 22:35:07 2026 +0800

    wifi: mac80211: fix memory leak in ieee80211_register_hw()
    
    commit 95fc02722edde02946d0d475221f2b2054d3d8ba upstream.
    
    If kmemdup() fails while copying supported band structures, the error
    path jumps to fail_rate. This skips rate_control_deinitialize() and
    leaks the initialized local->rate_ctrl.
    
    Fix this by adding a fail_band label that shares the rate-control cleanup
    path before falling through to the remaining teardown.
    
    The bug was first flagged by an experimental analysis tool we are
    developing for kernel memory-management bugs while analyzing
    v6.13-rc1. The tool is still under development and is not yet publicly
    available. Manual inspection confirms that the bug is still present in
    v7.1-rc7.
    
    An x86_64 allyesconfig build showed no new warnings. As we do not have a
    suitable mac80211 device/driver combination to test with, no runtime
    testing was able to be performed.
    
    Fixes: 09b4a4faf9d0 ("mac80211: introduce capability flags for VHT EXT NSS support")
    Cc: [email protected]
    Reviewed-by: Zilin Guan <[email protected]>
    Signed-off-by: Dawei Feng <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

wifi: mac80211: free ack status frame on TX header build failure [+ + +]
Author: Zhiling Zou <[email protected]>
Date:   Sat Jun 27 00:58:30 2026 +0800

    wifi: mac80211: free ack status frame on TX header build failure
    
    commit 2c51457d930f723e5f2903af90f5847f7df53f42 upstream.
    
    ieee80211_build_hdr() stores an ACK status frame before it has
    finished all validation and header construction. If a later error path
    is taken, the transmit skb is freed but the stored ACK status frame
    remains in local->ack_status_frames.
    
    This can happen for control port frames when the requested MLO link ID
    does not match the link selected for a non-MLO station. Repeated
    failures can fill the ACK status IDR and leave pending ACK frames until
    hardware teardown.
    
    Remove any stored ACK status frame before returning an error after it
    has been inserted into the IDR.
    
    Fixes: a729cff8ad51 ("mac80211: implement wifi TX status")
    Cc: [email protected]
    Reported-by: Yuan Tan <[email protected]>
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Reported-by: Xin Liu <[email protected]>
    Assisted-by: Codex:gpt-5.4
    Signed-off-by: Zhiling Zou <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Link: https://patch.msgid.link/9de0423da840e92084915b8f92e66a421245c4b8.1782462409.git.roxy520tt@gmail.com
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

wifi: mwifiex: fix permanently busy scans after multiple roam iterations [+ + +]
Author: Rafael Beims <[email protected]>
Date:   Fri Jun 12 09:25:46 2026 -0300

    wifi: mwifiex: fix permanently busy scans after multiple roam iterations
    
    commit d78a407bad6f500884a8606aea1a5a9207be4030 upstream.
    
    In order for the firmware to sleep, the driver has to confirm a
    previously received sleep request. The normal sequence of evets goes
    like this:
    EVENT_SLEEP -> adapter->ps_state = PS_STATE_PRE_SLEEP -> sleep-confirm
    -> SLEEP -> EVENT_AWAKE -> AWAKE.
    Before sending the sleep-confirm command, the driver must make sure
    there are no commands either running or waiting to be completed.
    
    mwifiex_ret_802_11_associate() unconditionally sets
    ps_state = PS_STATE_AWAKE when it processes the association command
    response, outside of the normal powersave management flow. If
    EVENT_SLEEP arrives while the association command is in flight,
    ps_state is PRE_SLEEP when the association command response is parsed,
    and the forced AWAKE overwrites it. The deferred sleep-confirm is
    never sent.
    
    A subsequent scan_start command is correctly acknowledged, but the
    firmware doesn't generate scan_result events. The scan request never
    finishes, and additional requests from userspace fail with -EBUSY.
    
    After testing on both IW412 and W8997, I could only trigger the bug on
    the IW412 and observed the firmwares behave differently. On the IW412
    the firmware still sends EVENT_SLEEP while the authentication /
    association process is ongoing. A W8997 under the same
    conditions seems to suppress power-save for the duration of the
    association, so PRE_SLEEP never coincided with the association response
    even after extended periods of testing using the loops
    described below (>12hours).
    
    On the IW412, the delay between commands that triggers an EVENT_SLEEP
    was empirically determined to be ~20ms. This delay can naturally occur
    when the driver is outputting debugging information
    (debug_mask = 0x00000037), in which situation the busy scans issue is
    repeatable while running "test 1)" as described below. If the delay
    between commands is less than ~20ms, the firmware stays awake and
    the issue was not reproducible running the same test.
    
    The host_mlme=false path also behaves differently. In this case, the
    entire authentication / association transaction is executed by one
    command (HostCmd_CMD_802_11_ASSOCIATE), and the firmware doesn't emit
    EVENT_SLEEP while the command is running.
    
    Remove the assignment so the ps_state is only manipulated in the paths
    that are related to powersave event handling and on the main workqueue
    for correct sleep confirmation.
    
    The following loop tests were performed (with debugging output enabled):
    1) force roaming between two AP's, one 5GHz and one 2.4GHz, same
    SSID. Use wpa_cli to trigger the roaming behavior, sleep 2s
    between iterations.
    2) force a disconnection to AP 1 and a connection to AP 2, test
    scan. Use wpa_cli to trigger the connection changes, sleep 2s
    between iterations.
    
    Each test ran in each device for at least 3 hours.
    
    Fixes: 5e6e3a92b9a4 ("wireless: mwifiex: initial commit for Marvell mwifiex driver")
    Cc: [email protected]
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Rafael Beims <[email protected]>
    Reviewed-by: Jeff Chen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

wifi: rt2x00: avoid full teardown before work setup in probe [+ + +]
Author: Runyu Xiao <[email protected]>
Date:   Fri Jun 19 15:31:04 2026 +0800

    wifi: rt2x00: avoid full teardown before work setup in probe
    
    commit 536fb3d739d75a03cb318c0c6fe799425cfea501 upstream.
    
    rt2x00lib_probe_dev() uses the full rt2x00lib_remove_dev() teardown for
    all probe failures. However, drv_data allocation and workqueue allocation
    can fail before intf_work, autowakeup_work and sleep_work have been
    initialized.
    
    Do not enter the full remove path until the probe has reached the point
    where those work items are set up. Return directly for drv_data allocation
    failure, and use a small early cleanup path for workqueue allocation
    failure.
    
    This issue was found by our static analysis tool and then confirmed by
    manual review of rt2x00lib_probe_dev() and rt2x00lib_remove_dev(). The
    early probe exits should not call a common teardown path that assumes the
    later work setup has already completed.
    
    A QEMU PoC forced alloc_ordered_workqueue() to fail before the work
    initializers are reached. The resulting fail path entered
    rt2x00lib_remove_dev(), and DEBUG_OBJECTS reported invalid work drains with
    rt2x00lib_probe_dev() and rt2x00lib_remove_dev() in the stack.
    
    Fixes: 1ebbc48520a0 ("rt2x00: Introduce concept of driver data in struct rt2x00_dev.")
    Fixes: 0439f5367c8d ("rt2x00: Move TX/RX work into dedicated workqueue")
    Cc: [email protected]
    Signed-off-by: Runyu Xiao <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

wifi: rtw88: fix OOB read from firmware RX descriptor exceeding DMA buffer [+ + +]
Author: Tristan Madani <[email protected]>
Date:   Tue Apr 21 11:14:34 2026 +0000

    wifi: rtw88: fix OOB read from firmware RX descriptor exceeding DMA buffer
    
    [ Upstream commit 6e76e9ed273dfb4b3333a5ebbb94958cc5752ab6 ]
    
    In rtw_pci_rx_napi(), new_len is computed as the sum of pkt_len (14-bit
    descriptor field, max 16383) and pkt_offset (drv_info_sz + shift, both
    firmware-controlled). The result can exceed RTK_PCI_RX_BUF_SIZE (11478),
    causing an out-of-bounds read from the pre-allocated DMA buffer when
    skb_put_data copies new_len bytes. The USB transport already validates
    this (rtw_usb_rx_data_put checks against RTW_USB_MAX_RECVBUF_SZ); the
    PCIe path does not.
    
    Add a check that new_len does not exceed the DMA buffer size.
    
    Fixes: e3037485c68e ("rtw88: new Realtek 802.11ac driver")
    Signed-off-by: Tristan Madani <[email protected]>
    Signed-off-by: Ping-Ke Shih <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

wifi: wcn36xx: fix OOB read from firmware count in PRINT_REG_INFO indication [+ + +]
Author: Tristan Madani <[email protected]>
Date:   Tue Apr 21 13:50:17 2026 +0000

    wifi: wcn36xx: fix OOB read from firmware count in PRINT_REG_INFO indication
    
    [ Upstream commit df2187acfca6c6cca372c5d35f42394d9c270b09 ]
    
    The firmware-controlled rsp->count field is used as the loop bound for
    indexing into the flexible rsp->regs[] array without validation against
    the message length. A count exceeding the actual data causes out-of-
    bounds reads from the heap-allocated message buffer.
    
    Add a check that count fits within the received message.
    
    Fixes: 43efa3c0f241 ("wcn36xx: Implement print_reg indication")
    Signed-off-by: Tristan Madani <[email protected]>
    Reviewed-by: Loic Poulain <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jeff Johnson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
workqueue: drop spurious '*' from print_worker_info() fn declaration [+ + +]
Author: Breno Leitao <[email protected]>
Date:   Sun May 24 08:19:56 2026 -0700

    workqueue: drop spurious '*' from print_worker_info() fn declaration
    
    [ Upstream commit 611583a76ea97991b0f65ec1ff099eac7fe0bae4 ]
    
    print_worker_info() declares its local 'fn' as work_func_t * but
    worker->current_func has type work_func_t (a function pointer). The
    extra level of indirection is wrong and only happens to be harmless
    today because every supported Linux architecture has
    sizeof(work_func_t) == sizeof(work_func_t *):
    copy_from_kernel_nofault() reads the correct number of bytes by
    accident, and %ps still resolves the printed address because the
    stored value is the function address regardless of declared type.
    
    On any future ABI where sizeof(void (*)()) differs from
    sizeof(void *), the nofault copy would transfer the wrong number of
    bytes and the subsequent %ps would print an incorrect address.
    
    Match the field type so the intent is explicit and the code does not
    silently rely on equal pointer sizes.
    
    Fixes: 3d1cb2059d93 ("workqueue: include workqueue info when printing debug dump of a worker task")
    Signed-off-by: Breno Leitao <[email protected]>
    Signed-off-by: Tejun Heo <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
writeback: fix race between cgroup_writeback_umount() and inode_switch_wbs() [+ + +]
Author: Baokun Li <[email protected]>
Date:   Thu Jul 16 15:49:31 2026 -0400

    writeback: fix race between cgroup_writeback_umount() and inode_switch_wbs()
    
    [ Upstream commit cba38ec4cbd3a7b8b942a8d52531a05be8a9ff0d ]
    
    When a container exits, the following BUG_ON() is occasionally triggered:
    
    ==================================================================
     VFS: Busy inodes after unmount of sdb (ext4)
     ------------[ cut here ]------------
     kernel BUG at fs/super.c:695!
     CPU: 3 PID: 6 Comm: containerd-shim Tainted: G OE K 6.6 #1
     pstate: 63400009 (nZCv daif +PAN -UAO +TCO +DIT -SSBS BTYPE=--)
     pc : generic_shutdown_super+0xf0/0x100
     lr : generic_shutdown_super+0xf0/0x100
     Call trace:
      generic_shutdown_super+0xf0/0x100
      kill_block_super+0x20/0x48
      ext4_kill_sb+0x28/0x60
      deactivate_locked_super+0x54/0x130
      deactivate_super+0x84/0xa0
      cleanup_mnt+0xa4/0x140
      __cleanup_mnt+0x18/0x28
      task_work_run+0x78/0xe0
      do_notify_resume+0x204/0x240
    ==================================================================
    
    The root cause is a race between cgroup_writeback_umount() and
    inode_switch_wbs()/cleanup_offline_cgwb(). There is a window between
    inode_prepare_wbs_switch() returning true and the subsequent
    wb_queue_isw() call. Following is the process that triggers the issue:
    
          CPU A (umount)           |          CPU B (writeback)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                     inode_switch_wbs/cleanup_offline_cgwb
                                      atomic_inc(&isw_nr_in_flight)
                                      inode_prepare_wbs_switch
                                       -> passes SB_ACTIVE check
                                       __iget(inode)
     generic_shutdown_super
      sb->s_flags &= ~SB_ACTIVE
      cgroup_writeback_umount(sb)
       smp_mb()
       atomic_read(&isw_nr_in_flight)
       rcu_barrier()
        -> no pending RCU callbacks
       flush_workqueue(isw_wq)
        -> nothing queued, returns
      evict_inodes(sb)
       -> Inode skipped as isw still holds a ref.
      sop->put_super(sb)
       /* destroys percpu counters */
      -> VFS: Busy inodes after unmount!
                                      wb_queue_isw()
                                       queue_work(isw_wq, ...)
                                      /* later in work function */
                                      inode_switch_wbs_work_fn
                                       process_inode_switch_wbs
                                        iput() -> evict
                                         percpu_counter_dec() // UAF!
    
    Fix this by extending the RCU read-side critical section in
    inode_switch_wbs() and cleanup_offline_cgwb() to cover from
    inode_prepare_wbs_switch() through wb_queue_isw().  Since there is
    no sleep in this window, rcu_read_lock() can be used.  Then add a
    synchronize_rcu() in cgroup_writeback_umount() before the existing
    rcu_barrier(), so that all in-flight switchers that have passed the
    SB_ACTIVE check have completed queue_work() before flush_workqueue()
    is called.
    
    The existing rcu_barrier() is intentionally retained so this fix can
    be backported unchanged to stable kernels (5.10.y, 6.6.y, ...) that
    still queue switches via queue_rcu_work(). It is a no-op on current
    mainline (since commit e1b849cfa6b6 ("writeback: Avoid contention on
    wb->list_lock when switching inodes")) and is removed in a follow-up
    patch.
    
    Fixes: a1a0e23e4903 ("writeback: flush inode cgroup wb switches instead of pinning super_block")
    Cc: [email protected]
    Suggested-by: Jan Kara <[email protected]>
    Link: https://lore.kernel.org/all/mxnjq2l6guusfchvauxr3v7c4bwjasybxlleqbbh4efloeqspz@iqylk76ohufz
    Reviewed-by: Jan Kara <[email protected]>
    Signed-off-by: Baokun Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Acked-by: Tejun Heo <[email protected]>
    Signed-off-by: Christian Brauner (Amutable) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
X.509: Fix validation of ASN.1 certificate header [+ + +]
Author: Lukas Wunner <[email protected]>
Date:   Thu Jul 16 15:54:23 2026 -0400

    X.509: Fix validation of ASN.1 certificate header
    
    [ Upstream commit 3b626ba431c4501512ad07549310685e07fe4706 ]
    
    x509_load_certificate_list() seeks to enforce that a certificate starts
    with 0x30 0x82 (ASN.1 SEQUENCE tag followed by a length of more than 256
    and less than 65535 bytes).
    
    But it only enforces that *either* of those two byte values are present,
    instead of checking for the *conjunction* of the two values.  Fix it.
    
    Fixes: 631cc66eb9ea ("MODSIGN: Provide module signing public keys to the kernel")
    Reported-by: Sashiko <[email protected]>
    Closes: https://lore.kernel.org/r/[email protected]/
    Signed-off-by: Lukas Wunner <[email protected]>
    Cc: [email protected] # v3.7+
    Reviewed-by: Ignat Korchagin <[email protected]>
    Reviewed-by: Alistair Francis <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86/boot: Reject too long acpi_rsdp= values [+ + +]
Author: Thorsten Blum <[email protected]>
Date:   Sun Jun 21 19:00:10 2026 +0200

    x86/boot: Reject too long acpi_rsdp= values
    
    commit d130041a7b96f79cd4c7079a6c2431a6db4c9619 upstream.
    
    cmdline_find_option() returns the full length of the parsed acpi_rsdp=
    value. get_cmdline_acpi_rsdp() then silently truncates values which do
    not fit in the val[] buffer.
    
    Prevent boot_kstrtoul() from parsing a truncated value and then the
    kernel from silently using the wrong RSDP address, see discussion in
    Link:.
    
    Issue a warning so that the user is aware that s/he supplied a malformed
    value and can get feedback instead of silent crashes.
    
      [ bp: Make commit message more precise. ]
    
    Fixes: 3c98e71b42a7 ("x86/boot: Add "acpi_rsdp=" early parsing")
    Signed-off-by: Thorsten Blum <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/all/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

x86/boot: Validate console=uart8250 baud rate to fix early boot hang [+ + +]
Author: Thorsten Blum <[email protected]>
Date:   Mon Jul 13 21:49:25 2026 +0200

    x86/boot: Validate console=uart8250 baud rate to fix early boot hang
    
    commit ffa0aa5b625fe0bed7463ac613f8b06676ff4542 upstream.
    
    When the baud rate is empty, 0, invalid, or overflows to 0 when stored
    as an int, the system will hang during early boot because of a division
    by zero in early_serial_init().
    
    Fall back to DEFAULT_BAUD when the resulting baud rate is 0 to prevent
    an early system hang.
    
    Fixes: ce0aa5dd20e4 ("x86, setup: Make the setup code also accept console=uart8250")
    Signed-off-by: Thorsten Blum <[email protected]>
    Signed-off-by: Ingo Molnar <[email protected]>
    Cc: "H. Peter Anvin" <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86/platform/olpc: xo15: Drop wakeup source on driver removal [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Fri May 8 20:00:27 2026 +0200

    x86/platform/olpc: xo15: Drop wakeup source on driver removal
    
    [ Upstream commit cc966553e6ff0849978b5754531b768b0ff54985 ]
    
    Prevent leaking a wakeup source object after removing the driver by
    adding appropriate cleanup code to its remove callback function.
    
    Fixes: a0f30f592d2d ("x86, olpc: Add XO-1.5 SCI driver")
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
xen/gntdev: fix error handling in ioctl [+ + +]
Author: Wentao Liang <[email protected]>
Date:   Mon Jun 22 19:25:41 2026 +0800

    xen/gntdev: fix error handling in ioctl
    
    commit 45ca1afe2fd14c04e37227e79d3f8455831d8408 upstream.
    
    When gntdev_ioctl_map_grant_ref() fails to copy the operation result
    back to userspace after successfully adding the mapping to the list,
    the error path returns -EFAULT without releasing the reference
    acquired by gntdev_alloc_map(). The mapping remains in priv->maps
    with a refcount of 1, causing a memory leak and a dangling list
    entry.
    
    Additionally, gntdev_add_map() may modify map->index to avoid overlap
    with existing mappings. Therefore, the index returned to userspace
    must be obtained after gntdev_add_map() completes.
    
    Fix this by holding the mutex across gntdev_add_map(), retrieving
    the correct index, and copy_to_user(). If copy_to_user() fails,
    remove the mapping from the list and release the reference while
    still holding the lock.
    
    Cc: [email protected]
    
    Fix these issues by properly handling all error cases.
    
    Fixes: 1401c00e59ea ("xen/gntdev: convert priv->lock to a mutex")
    Fixes: 68b025c813c2 ("xen-gntdev: Add reference counting to maps")
    
    Signed-off-by: Wentao Liang <[email protected]>
    Reviewed-by: Juergen Gross <[email protected]>
    Signed-off-by: Juergen Gross <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
xfrm: defensively unhash xfrm_state lists in __xfrm_state_delete [+ + +]
Author: Michal Kosiorek <[email protected]>
Date:   Fri Jul 10 22:30:15 2026 +0000

    xfrm: defensively unhash xfrm_state lists in __xfrm_state_delete
    
    [ Upstream commit 14acf9652e5690de3c7486c6db5fb8dafd0a32a3 ]
    
    KASAN reproduces a slab-use-after-free in __xfrm_state_delete()'s
    hlist_del_rcu calls under syzkaller load on linux-6.12.y stable
    (reproduced on 6.12.47, also reachable via the same code path on
    torvalds/master and on the ipsec tree). Nine unique signatures cluster
    in the xfrm_state lifecycle, the load-bearing one being:
    
      BUG: KASAN: slab-use-after-free in __hlist_del include/linux/list.h:990 [inline]
      BUG: KASAN: slab-use-after-free in hlist_del_rcu include/linux/rculist.h:516 [inline]
      BUG: KASAN: slab-use-after-free in __xfrm_state_delete net/xfrm/xfrm_state.c
      Write of size 8 at addr ffff8881198bcb70 by task kworker/u8:9/435
    
      Workqueue: netns cleanup_net
      Call Trace:
       __hlist_del / hlist_del_rcu
       __xfrm_state_delete
       xfrm_state_delete
       xfrm_state_flush
       xfrm_state_fini
       ops_exit_list
       cleanup_net
    
    The other observed signatures hit the same slab object from
    __xfrm_state_lookup, xfrm_alloc_spi, __xfrm_state_insert and an OOB
    write variant of __xfrm_state_delete, all on the byseq/byspi
    hash chains.
    
    __xfrm_state_delete() guards its byseq and byspi unhashes with
    value-based predicates:
    
            if (x->km.seq)
                    hlist_del_rcu(&x->byseq);
            if (x->id.spi)
                    hlist_del_rcu(&x->byspi);
    
    while everywhere else in the file (e.g. state_cache, state_cache_input)
    the safer hlist_unhashed() check is used. xfrm_alloc_spi() sets
    x->id.spi = newspi inside xfrm_state_lock and then immediately inserts
    into byspi, but a path that observes x->id.spi != 0 outside of
    xfrm_state_lock can still skip-or-hit the byspi unhash inconsistently
    with whether x is actually on the list. The same holds for x->km.seq
    versus byseq, and the bydst/bysrc unhashes have no predicate at all,
    so a second __xfrm_state_delete() on the same object writes through
    LIST_POISON pprev.
    
    The defensive change here:
    
      - Use hlist_del_init_rcu() instead of hlist_del_rcu() on bydst,
        bysrc, byseq and byspi so a second deletion is a no-op rather
        than a write through LIST_POISON pprev. The byseq/byspi nodes
        are already initialised in xfrm_state_alloc().
      - Test hlist_unhashed() rather than the value predicate for
        byseq/byspi, so the unhash decision tracks list state rather than
        mutable scalar fields.
    
    Empirical verification: applied this patch on top of v6.12.47, rebuilt,
    and re-ran the same syzkaller harness for 1h16m on a previously-crashy
    configuration that produced ~100 hits each of slab-use-after-free
    Read in xfrm_alloc_spi / Read in __xfrm_state_lookup / Write in
    __xfrm_state_delete. After the patch, 7.1M execs across 32 VMs at
    ~1550 exec/sec produced zero xfrm_state UAF/OOB hits. /proc/slabinfo
    confirms the xfrm_state slab is actively allocated and freed during
    the run (~143 KiB resident), so the fuzzer is still exercising those
    code paths -- they just no longer crash.
    
    Reproduction:
    
      - Linux 6.12.47 x86_64 + KASAN_GENERIC + KASAN_INLINE + KCOV
      - syzkaller @ 746545b8b1e4c3a128db8652b340d3df90ce61db
      - 32 QEMU/KVM VMs x 2 vCPU on AWS c5.metal bare metal
      - 9 unique signatures collected in ~9h, all within xfrm_state
        lifecycle
    
    Fixes: fe9f1d8779cb ("xfrm: add state hashtable keyed by seq")
    Fixes: 7b4dc3600e48 ("[XFRM]: Do not add a state whose SPI is zero to the SPI hash.")
    Reported-by: Michal Kosiorek <[email protected]>
    Tested-by: Michal Kosiorek <[email protected]>
    Cc: [email protected]
    Signed-off-by: Michal Kosiorek <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    [ 5.10: drop state_cache{,_input} lines from context because 81a331a
    ("xfrm: Add an inbound percpu state cache.") does not exist yet, drop
    xfrm_nat_keepalive_state_updated line from context because f531d13
    ("xfrm: support sending NAT keepalives in ESP in UDP states") does not
    exist yet, and remove byseq since that optimization in fe9f1d8 ("xfrm:
    add state hashtable keyed by seq") does not exist yet ]
    Signed-off-by: Mark Bundschuh <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

xfrm: use compat translator only for u64 alignment mismatch [+ + +]
Author: Sanman Pradhan <[email protected]>
Date:   Sun Jun 7 16:47:34 2026 +0000

    xfrm: use compat translator only for u64 alignment mismatch
    
    commit 355fbcbdc2539cca7890b0d0914d4ce0f985ad74 upstream.
    
    The XFRM compat layer (CONFIG_XFRM_USER_COMPAT) translates 32-bit xfrm
    netlink and setsockopt messages into the native 64-bit layout. It is
    only needed on architectures where the 32-bit and 64-bit ABIs disagree
    on u64 alignment, which the kernel encodes as COMPAT_FOR_U64_ALIGNMENT.
    
    That symbol is defined only by arch/x86. XFRM_USER_COMPAT depends on it,
    so the translator can never be built on any other architecture,
    including arm64, which still provides a 32-bit compat ABI (CONFIG_COMPAT)
    for AArch32 EL0 userspace. On arm64 the AArch32 EABI already aligns u64
    to 8 bytes, identical to the AArch64 ABI, so no translation is required
    and the native code path is correct for 32-bit tasks.
    
    However, xfrm_user_rcv_msg() and xfrm_user_policy() gate on
    in_compat_syscall() alone and then call xfrm_get_translator(), which
    returns NULL when no translator is registered. On arm64 that is always
    the case, so every xfrm netlink message and the XFRM_POLICY setsockopt
    issued by a 32-bit task returns -EOPNOTSUPP. A 32-bit userspace process
    on arm64 (and on any other arch with CONFIG_COMPAT but without
    COMPAT_FOR_U64_ALIGNMENT) therefore cannot configure XFRM state or
    policy through the XFRM_USER netlink API, and cannot use the XFRM_POLICY
    setsockopt path, because both fail before reaching the native parser.
    
    The translator series replaced the blanket compat rejection with a
    translator lookup. That made the path usable on x86 when the translator
    is available, but left architectures that cannot build the translator
    permanently rejected even when their compat layout already matches the
    native layout. Let those architectures use the native parser instead.
    
    Gate the translator requirement on COMPAT_FOR_U64_ALIGNMENT instead of
    on in_compat_syscall() alone. Gating on the ABI property rather than on
    CONFIG_XFRM_USER_COMPAT is deliberate: on x86 with IA32_EMULATION=y but
    XFRM_USER_COMPAT=n, a 32-bit task must still be rejected rather than
    routed through the native parser, which would misread genuinely
    4-byte-aligned x86-32 messages. COMPAT_FOR_U64_ALIGNMENT is the ABI
    property that makes the XFRM translator mandatory.
    
    Only the receive/input direction needs the guard. The send, dump and
    notification paths already call the translator as "if (xtr) { ... }"
    with no error on NULL, so on arches without a translator they no-op and
    the kernel emits native 64-bit-layout messages, which is what an AArch32
    task expects.
    
    Tested on Juniper SRX hardware: with the fix, 32-bit IPsec userspace
    netlink and XFRM_POLICY setsockopt operations that previously failed
    with -EOPNOTSUPP now succeed; x86 behaviour is unchanged by inspection.
    
    Fixes: 5106f4a8acff ("xfrm/compat: Add 32=>64-bit messages translator")
    Fixes: 96392ee5a13b ("xfrm/compat: Translate 32-bit user_policy from sockptr")
    Cc: [email protected]
    Signed-off-by: Sanman Pradhan <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

xfrm: validate selector family and prefixlen during match [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Mon Jun 15 09:02:37 2026 +0000

    xfrm: validate selector family and prefixlen during match
    
    [ Upstream commit 40f0b1047918539f0b0f795ac65e35336b4c2c78 ]
    
    syzbot reported a shift-out-of-bounds in xfrm_selector_match()
    due to AF_UNSPEC selector with large prefixlen (e.g. 128) matched
    against IPv4 flow (when XFRM_STATE_AF_UNSPEC is set).
    
    Fix this by:
    
    - Rejecting mismatched families in xfrm_selector_match.
    - Returning false in addr4_match if prefixlen > 32.
    - Returning false in addr_match if prefixlen > 128 (prevents overflow).
    
    Fixes: 3f0ab59e6537 ("xfrm: validate new SA's prefixlen using SA family when sel.family is unset")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

xfrm: xfrm_interface: require CAP_NET_ADMIN in the device netns for changelink [+ + +]
Author: Maoyi Xie <[email protected]>
Date:   Fri Jun 12 16:59:41 2026 +0800

    xfrm: xfrm_interface: require CAP_NET_ADMIN in the device netns for changelink
    
    commit 095515d89b19b6cc19dfcdc846f97403ed1ebce3 upstream.
    
    xfrmi_changelink() operates on at most two netns, dev_net(dev) and the
    interface link netns xi->net. They differ once the device is created in
    or moved to a netns other than the one the request runs in. The rtnl
    changelink path checks CAP_NET_ADMIN only against dev_net(dev), so a
    caller privileged there but not in xi->net can rewrite an interface that
    lives in xi->net.
    
    Gate xfrmi_changelink() on rtnl_dev_link_net_capable() at its top,
    before any attribute is parsed.
    
    Reported-by: Xiao Liang <[email protected]>
    Closes: https://lore.kernel.org/netdev/CABAhCOSzP1vaThGV35_VnsRCb=87_CPjPVsTHbq905k8A+BuUg@mail.gmail.com/
    Fixes: f203b76d7809 ("xfrm: Add virtual xfrm interfaces")
    Cc: [email protected]
    Signed-off-by: Maoyi Xie <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
xfs: fix unreachable BIGTIME check in dquot flush validation [+ + +]
Author: Alexey Nepomnyashih <[email protected]>
Date:   Sat Jul 18 07:20:48 2026 -0400

    xfs: fix unreachable BIGTIME check in dquot flush validation
    
    [ Upstream commit 03866d130ed33ab68cc7faaf4bf2c4abef96d42e ]
    
    The dqp->q_id == 0 check inside the XFS_DQTYPE_BIGTIME block is
    unreachable because root dquots return successfully earlier. Reject root
    dquots with XFS_DQTYPE_BIGTIME before that early return, preserving the
    intended validation and removing the unreachable condition.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 4ea1ff3b4968 ("xfs: widen ondisk quota expiration timestamps to handle y2038+")
    Cc: [email protected] # v5.10+
    Signed-off-by: Alexey Nepomnyashih <[email protected]>
    Reviewed-by: "Darrick J. Wong" <[email protected]>
    Reviewed-by: Allison Henderson <[email protected]>
    Signed-off-by: Carlos Maiolino <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

xfs: reflect sb features in xfs_mount [+ + +]
Author: Dave Chinner <[email protected]>
Date:   Sat Jul 18 07:20:47 2026 -0400

    xfs: reflect sb features in xfs_mount
    
    [ Upstream commit a1d86e8dec8c1325d301c9d5594bb794bc428fc3 ]
    
    Currently on-disk feature checks require decoding the superblock
    fileds and so can be non-trivial. We have almost 400 hundred
    individual feature checks in the XFS code, so this is a significant
    amount of code. To reduce runtime check overhead, pre-process all
    the version flags into a features field in the xfs_mount at mount
    time so we can convert all the feature checks to a simple flag
    check.
    
    There is also a need to convert the dynamic feature flags to update
    the m_features field. This is required for attr, attr2 and quota
    features. New xfs_mount based wrappers are added for this.
    
    Signed-off-by: Dave Chinner <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Darrick J. Wong <[email protected]>
    Signed-off-by: Darrick J. Wong <[email protected]>
    Stable-dep-of: 03866d130ed3 ("xfs: fix unreachable BIGTIME check in dquot flush validation")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

xfs: use null daddr for unset first bad log block [+ + +]
Author: Yousef Alhouseen <[email protected]>
Date:   Sat Jul 18 07:21:01 2026 -0400

    xfs: use null daddr for unset first bad log block
    
    [ Upstream commit cc9af5e461ea5f6e37738f3f1e41c45a9b7f45d6 ]
    
    xlog_do_recovery_pass() may return before setting first_bad.  The caller
    must distinguish that case from an error at a valid log block, including
    block zero after the log wraps.
    
    Initialize first_bad to XFS_BUF_DADDR_NULL and test it explicitly before
    treating the error as a torn write.
    
    Fixes: 7088c4136fa1 ("xfs: detect and trim torn writes during log recovery")
    Suggested-by: Darrick J. Wong <[email protected]>
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=b7dfbed0c6c2b5e9fd34
    Cc: [email protected] # v4.5
    Signed-off-by: Yousef Alhouseen <[email protected]>
    Reviewed-by: "Darrick J. Wong" <[email protected]>
    Signed-off-by: Carlos Maiolino <[email protected]>
    [ adjusted hunk offsets for context drift and dropped an inapplicable whitespace-only end-of-file hunk whose context doesn't exist in 5.10 ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>