Changelog in Linux kernel 6.1.147

 
af_packet: fix soft lockup issue caused by tpacket_snd() [+ + +]
Author: Yun Lu <luyun@kylinos.cn>
Date:   Fri Jul 11 17:33:00 2025 +0800

    af_packet: fix soft lockup issue caused by tpacket_snd()
    
    commit 55f0bfc0370539213202f4ce1a07615327ac4713 upstream.
    
    When MSG_DONTWAIT is not set, the tpacket_snd operation will wait for
    pending_refcnt to decrement to zero before returning. The pending_refcnt
    is decremented by 1 when the skb->destructor function is called,
    indicating that the skb has been successfully sent and needs to be
    destroyed.
    
    If an error occurs during this process, the tpacket_snd() function will
    exit and return error, but pending_refcnt may not yet have decremented to
    zero. Assuming the next send operation is executed immediately, but there
    are no available frames to be sent in tx_ring (i.e., packet_current_frame
    returns NULL), and skb is also NULL, the function will not execute
    wait_for_completion_interruptible_timeout() to yield the CPU. Instead, it
    will enter a do-while loop, waiting for pending_refcnt to be zero. Even
    if the previous skb has completed transmission, the skb->destructor
    function can only be invoked in the ksoftirqd thread (assuming NAPI
    threading is enabled). When both the ksoftirqd thread and the tpacket_snd
    operation happen to run on the same CPU, and the CPU trapped in the
    do-while loop without yielding, the ksoftirqd thread will not get
    scheduled to run. As a result, pending_refcnt will never be reduced to
    zero, and the do-while loop cannot exit, eventually leading to a CPU soft
    lockup issue.
    
    In fact, skb is true for all but the first iterations of that loop, and
    as long as pending_refcnt is not zero, even if incremented by a previous
    call, wait_for_completion_interruptible_timeout() should be executed to
    yield the CPU, allowing the ksoftirqd thread to be scheduled. Therefore,
    the execution condition of this function should be modified to check if
    pending_refcnt is not zero, instead of check skb.
    
    -       if (need_wait && skb) {
    +       if (need_wait && packet_read_pending(&po->tx_ring)) {
    
    As a result, the judgment conditions are duplicated with the end code of
    the while loop, and packet_read_pending() is a very expensive function.
    Actually, this loop can only exit when ph is NULL, so the loop condition
    can be changed to while (1), and in the "ph = NULL" branch, if the
    subsequent condition of if is not met,  the loop can break directly. Now,
    the loop logic remains the same as origin but is clearer and more obvious.
    
    Fixes: 89ed5b519004 ("af_packet: Block execution of tasks waiting for transmit to complete in AF_PACKET")
    Cc: stable@kernel.org
    Suggested-by: LongJun Tang <tanglongjun@kylinos.cn>
    Signed-off-by: Yun Lu <luyun@kylinos.cn>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

af_packet: fix the SO_SNDTIMEO constraint not effective on tpacked_snd() [+ + +]
Author: Yun Lu <luyun@kylinos.cn>
Date:   Fri Jul 11 17:32:59 2025 +0800

    af_packet: fix the SO_SNDTIMEO constraint not effective on tpacked_snd()
    
    commit c1ba3c0cbdb5e53a8ec5d708e99cd4c497028a13 upstream.
    
    Due to the changes in commit 581073f626e3 ("af_packet: do not call
    packet_read_pending() from tpacket_destruct_skb()"), every time
    tpacket_destruct_skb() is executed, the skb_completion is marked as
    completed. When wait_for_completion_interruptible_timeout() returns
    completed, the pending_refcnt has not yet been reduced to zero.
    Therefore, when ph is NULL, the wait function may need to be called
    multiple times until packet_read_pending() finally returns zero.
    
    We should call sock_sndtimeo() only once, otherwise the SO_SNDTIMEO
    constraint could be way off.
    
    Fixes: 581073f626e3 ("af_packet: do not call packet_read_pending() from tpacket_destruct_skb()")
    Cc: stable@kernel.org
    Suggested-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Yun Lu <luyun@kylinos.cn>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
arm64: dts: freescale: imx8mm-verdin: Keep LDO5 always on [+ + +]
Author: Francesco Dolcini <francesco.dolcini@toradex.com>
Date:   Mon Jun 23 15:25:45 2025 +0200

    arm64: dts: freescale: imx8mm-verdin: Keep LDO5 always on
    
    commit fbe94be09fa81343d623a86ec64a742759b669b3 upstream.
    
    LDO5 regulator is used to power the i.MX8MM NVCC_SD2 I/O supply, that is
    used for the SD2 card interface and also for some GPIOs.
    
    When the SD card interface is not enabled the regulator subsystem could
    turn off this supply, since it is not used anywhere else, however this
    will also remove the power to some other GPIOs, for example one I/O that
    is used to power the ethernet phy, leading to a non working ethernet
    interface.
    
    [   31.820515] On-module +V3.3_1.8_SD (LDO5): disabling
    [   31.821761] PMIC_USDHC_VSELECT: disabling
    [   32.764949] fec 30be0000.ethernet end0: Link is Down
    
    Fix this keeping the LDO5 supply always on.
    
    Cc: stable@vger.kernel.org
    Fixes: 6a57f224f734 ("arm64: dts: freescale: add initial support for verdin imx8m mini")
    Fixes: f5aab0438ef1 ("regulator: pca9450: Fix enable register for LDO5")
    Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ASoC: fsl_sai: Force a software reset when starting in consumer mode [+ + +]
Author: Arun Raghavan <arun@asymptotic.io>
Date:   Thu Jun 26 09:08:25 2025 -0400

    ASoC: fsl_sai: Force a software reset when starting in consumer mode
    
    commit dc78f7e59169d3f0e6c3c95d23dc8e55e95741e2 upstream.
    
    On an imx8mm platform with an external clock provider, when running the
    receiver (arecord) and triggering an xrun with xrun_injection, we see a
    channel swap/offset. This happens sometimes when running only the
    receiver, but occurs reliably if a transmitter (aplay) is also
    concurrently running.
    
    It seems that the SAI loses track of frame sync during the trigger stop
    -> trigger start cycle that occurs during an xrun. Doing just a FIFO
    reset in this case does not suffice, and only a software reset seems to
    get it back on track.
    
    This looks like the same h/w bug that is already handled for the
    producer case, so we now do the reset unconditionally on config disable.
    
    Signed-off-by: Arun Raghavan <arun@asymptotic.io>
    Reported-by: Pieterjan Camerlynck <p.camerlynck@televic.com>
    Fixes: 3e3f8bd56955 ("ASoC: fsl_sai: fix no frame clk in master mode")
    Cc: stable@vger.kernel.org
    Reviewed-by: Fabio Estevam <festevam@gmail.com>
    Link: https://patch.msgid.link/20250626130858.163825-1-arun@arunraghavan.net
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Bluetooth: btusb: QCA: Fix downloading wrong NVM for WCN6855 GF variant without board ID [+ + +]
Author: Zijun Hu <zijun.hu@oss.qualcomm.com>
Date:   Tue Jul 15 20:40:13 2025 +0800

    Bluetooth: btusb: QCA: Fix downloading wrong NVM for WCN6855 GF variant without board ID
    
    [ Upstream commit 43015955795a619f7ca4ae69b9c0ffc994c82818 ]
    
    For GF variant of WCN6855 without board ID programmed
    btusb_generate_qca_nvm_name() will chose wrong NVM
    'qca/nvm_usb_00130201.bin' to download.
    
    Fix by choosing right NVM 'qca/nvm_usb_00130201_gf.bin'.
    Also simplify NVM choice logic of btusb_generate_qca_nvm_name().
    
    Fixes: d6cba4e6d0e2 ("Bluetooth: btusb: Add support using different nvm for variant WCN6855 controller")
    Signed-off-by: Zijun Hu <zijun.hu@oss.qualcomm.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: Fix null-ptr-deref in l2cap_sock_resume_cb() [+ + +]
Author: Kuniyuki Iwashima <kuniyu@google.com>
Date:   Mon Jul 7 19:28:29 2025 +0000

    Bluetooth: Fix null-ptr-deref in l2cap_sock_resume_cb()
    
    [ Upstream commit a0075accbf0d76c2dad1ad3993d2e944505d99a0 ]
    
    syzbot reported null-ptr-deref in l2cap_sock_resume_cb(). [0]
    
    l2cap_sock_resume_cb() has a similar problem that was fixed by commit
    1bff51ea59a9 ("Bluetooth: fix use-after-free error in lock_sock_nested()").
    
    Since both l2cap_sock_kill() and l2cap_sock_resume_cb() are executed
    under l2cap_sock_resume_cb(), we can avoid the issue simply by checking
    if chan->data is NULL.
    
    Let's not access to the killed socket in l2cap_sock_resume_cb().
    
    [0]:
    BUG: KASAN: null-ptr-deref in instrument_atomic_write include/linux/instrumented.h:82 [inline]
    BUG: KASAN: null-ptr-deref in clear_bit include/asm-generic/bitops/instrumented-atomic.h:41 [inline]
    BUG: KASAN: null-ptr-deref in l2cap_sock_resume_cb+0xb4/0x17c net/bluetooth/l2cap_sock.c:1711
    Write of size 8 at addr 0000000000000570 by task kworker/u9:0/52
    
    CPU: 1 UID: 0 PID: 52 Comm: kworker/u9:0 Not tainted 6.16.0-rc4-syzkaller-g7482bb149b9f #0 PREEMPT
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 05/07/2025
    Workqueue: hci0 hci_rx_work
    Call trace:
     show_stack+0x2c/0x3c arch/arm64/kernel/stacktrace.c:501 (C)
     __dump_stack+0x30/0x40 lib/dump_stack.c:94
     dump_stack_lvl+0xd8/0x12c lib/dump_stack.c:120
     print_report+0x58/0x84 mm/kasan/report.c:524
     kasan_report+0xb0/0x110 mm/kasan/report.c:634
     check_region_inline mm/kasan/generic.c:-1 [inline]
     kasan_check_range+0x264/0x2a4 mm/kasan/generic.c:189
     __kasan_check_write+0x20/0x30 mm/kasan/shadow.c:37
     instrument_atomic_write include/linux/instrumented.h:82 [inline]
     clear_bit include/asm-generic/bitops/instrumented-atomic.h:41 [inline]
     l2cap_sock_resume_cb+0xb4/0x17c net/bluetooth/l2cap_sock.c:1711
     l2cap_security_cfm+0x524/0xea0 net/bluetooth/l2cap_core.c:7357
     hci_auth_cfm include/net/bluetooth/hci_core.h:2092 [inline]
     hci_auth_complete_evt+0x2e8/0xa4c net/bluetooth/hci_event.c:3514
     hci_event_func net/bluetooth/hci_event.c:7511 [inline]
     hci_event_packet+0x650/0xe9c net/bluetooth/hci_event.c:7565
     hci_rx_work+0x320/0xb18 net/bluetooth/hci_core.c:4070
     process_one_work+0x7e8/0x155c kernel/workqueue.c:3238
     process_scheduled_works kernel/workqueue.c:3321 [inline]
     worker_thread+0x958/0xed8 kernel/workqueue.c:3402
     kthread+0x5fc/0x75c kernel/kthread.c:464
     ret_from_fork+0x10/0x20 arch/arm64/kernel/entry.S:847
    
    Fixes: d97c899bde33 ("Bluetooth: Introduce L2CAP channel callback for resuming")
    Reported-by: syzbot+e4d73b165c3892852d22@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/all/686c12bd.a70a0220.29fe6c.0b13.GAE@google.com/
    Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: HCI: Set extended advertising data synchronously [+ + +]
Author: Christian Eggers <ceggers@arri.de>
Date:   Fri Jun 27 09:05:08 2025 +0200

    Bluetooth: HCI: Set extended advertising data synchronously
    
    commit 89fb8acc38852116d38d721ad394aad7f2871670 upstream.
    
    Currently, for controllers with extended advertising, the advertising
    data is set in the asynchronous response handler for extended
    adverstising params. As most advertising settings are performed in a
    synchronous context, the (asynchronous) setting of the advertising data
    is done too late (after enabling the advertising).
    
    Move setting of adverstising data from asynchronous response handler
    into synchronous context to fix ordering of HCI commands.
    
    Signed-off-by: Christian Eggers <ceggers@arri.de>
    Fixes: a0fb3726ba55 ("Bluetooth: Use Set ext adv/scan rsp data if controller supports")
    Cc: stable@vger.kernel.org
    v2: https://lore.kernel.org/linux-bluetooth/20250626115209.17839-1-ceggers@arri.de/
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    [ Adapted DEFINE_FLEX macro usage to struct with flexible array member for compatibility with kernel 6.1. ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: hci_sync: fix connectable extended advertising when using static random address [+ + +]
Author: Alessandro Gasbarroni <alex.gasbarroni@gmail.com>
Date:   Wed Jul 9 09:53:11 2025 +0200

    Bluetooth: hci_sync: fix connectable extended advertising when using static random address
    
    [ Upstream commit d85edab911a4c1fcbe3f08336eff5c7feec567d0 ]
    
    Currently, the connectable flag used by the setup of an extended
    advertising instance drives whether we require privacy when trying to pass
    a random address to the advertising parameters (Own Address).
    If privacy is not required, then it automatically falls back to using the
    controller's public address. This can cause problems when using controllers
    that do not have a public address set, but instead use a static random
    address.
    
    e.g. Assume a BLE controller that does not have a public address set.
    The controller upon powering is set with a random static address by default
    by the kernel.
    
            < HCI Command: LE Set Random Address (0x08|0x0005) plen 6
                    Address: E4:AF:26:D8:3E:3A (Static)
            > HCI Event: Command Complete (0x0e) plen 4
                  LE Set Random Address (0x08|0x0005) ncmd 1
                    Status: Success (0x00)
    
    Setting non-connectable extended advertisement parameters in bluetoothctl
    mgmt
    
            add-ext-adv-params -r 0x801 -x 0x802 -P 2M -g 1
    
    correctly sets Own address type as Random
    
            < HCI Command: LE Set Extended Advertising Parameters (0x08|0x0036)
            plen 25
                    ...
                Own address type: Random (0x01)
    
    Setting connectable extended advertisement parameters in bluetoothctl mgmt
    
            add-ext-adv-params -r 0x801 -x 0x802 -P 2M -g -c 1
    
    mistakenly sets Own address type to Public (which causes to use Public
    Address 00:00:00:00:00:00)
    
            < HCI Command: LE Set Extended Advertising Parameters (0x08|0x0036)
            plen 25
                    ...
                Own address type: Public (0x00)
    
    This causes either the controller to emit an Invalid Parameters error or to
    mishandle the advertising.
    
    This patch makes sure that we use the already set static random address
    when requesting a connectable extended advertising when we don't require
    privacy and our public address is not set (00:00:00:00:00:00).
    
    Fixes: 3fe318ee72c5 ("Bluetooth: move hci_get_random_address() to hci_sync")
    Signed-off-by: Alessandro Gasbarroni <alex.gasbarroni@gmail.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: L2CAP: Fix attempting to adjust outgoing MTU [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Wed Jul 16 09:40:49 2025 -0400

    Bluetooth: L2CAP: Fix attempting to adjust outgoing MTU
    
    [ Upstream commit d24e4a7fedae121d33fb32ad785b87046527eedb ]
    
    Configuration request only configure the incoming direction of the peer
    initiating the request, so using the MTU is the other direction shall
    not be used, that said the spec allows the peer responding to adjust:
    
    Bluetooth Core 6.1, Vol 3, Part A, Section 4.5
    
     'Each configuration parameter value (if any is present) in an
     L2CAP_CONFIGURATION_RSP packet reflects an ‘adjustment’ to a
     configuration parameter value that has been sent (or, in case of
     default values, implied) in the corresponding
     L2CAP_CONFIGURATION_REQ packet.'
    
    That said adjusting the MTU in the response shall be limited to ERTM
    channels only as for older modes the remote stack may not be able to
    detect the adjustment causing it to silently drop packets.
    
    Link: https://github.com/bluez/bluez/issues/1422
    Link: https://gitlab.archlinux.org/archlinux/packaging/packages/linux/-/issues/149
    Link: https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/4793
    Fixes: 042bb9603c44 ("Bluetooth: L2CAP: Fix L2CAP MTU negotiation")
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: SMP: Fix using HCI_ERROR_REMOTE_USER_TERM on timeout [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Wed Jul 2 11:53:40 2025 -0400

    Bluetooth: SMP: Fix using HCI_ERROR_REMOTE_USER_TERM on timeout
    
    [ Upstream commit 6ef99c917688a8510259e565bd1b168b7146295a ]
    
    This replaces the usage of HCI_ERROR_REMOTE_USER_TERM, which as the name
    suggest is to indicate a regular disconnection initiated by an user,
    with HCI_ERROR_AUTH_FAILURE to indicate the session has timeout thus any
    pairing shall be considered as failed.
    
    Fixes: 1e91c29eb60c ("Bluetooth: Use hci_disconnect for immediate disconnection from SMP")
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: SMP: If an unallowed command is received consider it a failure [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Mon Jun 30 14:42:23 2025 -0400

    Bluetooth: SMP: If an unallowed command is received consider it a failure
    
    [ Upstream commit fe4840df0bdf341f376885271b7680764fe6b34e ]
    
    If a command is received while a bonding is ongoing consider it a
    pairing failure so the session is cleanup properly and the device is
    disconnected immediately instead of continuing with other commands that
    may result in the session to get stuck without ever completing such as
    the case bellow:
    
    > ACL Data RX: Handle 2048 flags 0x02 dlen 21
          SMP: Identity Information (0x08) len 16
            Identity resolving key[16]: d7e08edef97d3e62cd2331f82d8073b0
    > ACL Data RX: Handle 2048 flags 0x02 dlen 21
          SMP: Signing Information (0x0a) len 16
            Signature key[16]: 1716c536f94e843a9aea8b13ffde477d
    Bluetooth: hci0: unexpected SMP command 0x0a from XX:XX:XX:XX:XX:XX
    > ACL Data RX: Handle 2048 flags 0x02 dlen 12
          SMP: Identity Address Information (0x09) len 7
            Address: XX:XX:XX:XX:XX:XX (Intel Corporate)
    
    While accourding to core spec 6.1 the expected order is always BD_ADDR
    first first then CSRK:
    
    When using LE legacy pairing, the keys shall be distributed in the
    following order:
    
        LTK by the Peripheral
    
        EDIV and Rand by the Peripheral
    
        IRK by the Peripheral
    
        BD_ADDR by the Peripheral
    
        CSRK by the Peripheral
    
        LTK by the Central
    
        EDIV and Rand by the Central
    
        IRK by the Central
    
        BD_ADDR by the Central
    
        CSRK by the Central
    
    When using LE Secure Connections, the keys shall be distributed in the
    following order:
    
        IRK by the Peripheral
    
        BD_ADDR by the Peripheral
    
        CSRK by the Peripheral
    
        IRK by the Central
    
        BD_ADDR by the Central
    
        CSRK by the Central
    
    According to the Core 6.1 for commands used for key distribution "Key
    Rejected" can be used:
    
      '3.6.1. Key distribution and generation
    
      A device may reject a distributed key by sending the Pairing Failed command
      with the reason set to "Key Rejected".
    
    Fixes: b28b4943660f ("Bluetooth: Add strict checks for allowed SMP PDUs")
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf: Reject %p% format string in bprintf-like helpers [+ + +]
Author: Paul Chaignon <paul.chaignon@gmail.com>
Date:   Tue Jul 1 21:47:30 2025 +0200

    bpf: Reject %p% format string in bprintf-like helpers
    
    [ Upstream commit f8242745871f81a3ac37f9f51853d12854fd0b58 ]
    
    static const char fmt[] = "%p%";
        bpf_trace_printk(fmt, sizeof(fmt));
    
    The above BPF program isn't rejected and causes a kernel warning at
    runtime:
    
        Please remove unsupported %\x00 in format string
        WARNING: CPU: 1 PID: 7244 at lib/vsprintf.c:2680 format_decode+0x49c/0x5d0
    
    This happens because bpf_bprintf_prepare skips over the second %,
    detected as punctuation, while processing %p. This patch fixes it by
    not skipping over punctuation. %\x00 is then processed in the next
    iteration and rejected.
    
    Reported-by: syzbot+e2c932aec5c8a6e1d31c@syzkaller.appspotmail.com
    Fixes: 48cac3f4a96d ("bpf: Implement formatted output helpers with bstr_printf")
    Acked-by: Yonghong Song <yonghong.song@linux.dev>
    Signed-off-by: Paul Chaignon <paul.chaignon@gmail.com>
    Link: https://lore.kernel.org/r/a0e06cc479faec9e802ae51ba5d66420523251ee.1751395489.git.paul.chaignon@gmail.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
cachefiles: Fix the incorrect return value in __cachefiles_write() [+ + +]
Author: Zizhi Wo <wozizhi@huawei.com>
Date:   Thu Jul 3 10:44:18 2025 +0800

    cachefiles: Fix the incorrect return value in __cachefiles_write()
    
    [ Upstream commit 6b89819b06d8d339da414f06ef3242f79508be5e ]
    
    In __cachefiles_write(), if the return value of the write operation > 0, it
    is set to 0. This makes it impossible to distinguish scenarios where a
    partial write has occurred, and will affect the outer calling functions:
    
     1) cachefiles_write_complete() will call "term_func" such as
    netfs_write_subrequest_terminated(). When "ret" in __cachefiles_write()
    is used as the "transferred_or_error" of this function, it can not
    distinguish the amount of data written, makes the WARN meaningless.
    
     2) cachefiles_ondemand_fd_write_iter() can only assume all writes were
    successful by default when "ret" is 0, and unconditionally return the full
    length specified by user space.
    
    Fix it by modifying "ret" to reflect the actual number of bytes written.
    Furthermore, returning a value greater than 0 from __cachefiles_write()
    does not affect other call paths, such as cachefiles_issue_write() and
    fscache_write().
    
    Fixes: 047487c947e8 ("cachefiles: Implement the I/O routines")
    Signed-off-by: Zizhi Wo <wozizhi@huawei.com>
    Link: https://lore.kernel.org/20250703024418.2809353-1-wozizhi@huaweicloud.com
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
clone_private_mnt(): make sure that caller has CAP_SYS_ADMIN in the right userns [+ + +]
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sun Jun 1 20:11:06 2025 -0400

    clone_private_mnt(): make sure that caller has CAP_SYS_ADMIN in the right userns
    
    commit c28f922c9dcee0e4876a2c095939d77fe7e15116 upstream.
    
    What we want is to verify there is that clone won't expose something
    hidden by a mount we wouldn't be able to undo.  "Wouldn't be able to undo"
    may be a result of MNT_LOCKED on a child, but it may also come from
    lacking admin rights in the userns of the namespace mount belongs to.
    
    clone_private_mnt() checks the former, but not the latter.
    
    There's a number of rather confusing CAP_SYS_ADMIN checks in various
    userns during the mount, especially with the new mount API; they serve
    different purposes and in case of clone_private_mnt() they usually,
    but not always end up covering the missing check mentioned above.
    
    Reviewed-by: Christian Brauner <brauner@kernel.org>
    Reported-by: "Orlando, Noah" <Noah.Orlando@deshaw.com>
    Fixes: 427215d85e8d ("ovl: prevent private clone if bind mount is not allowed")
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    [ merge conflict resolution: clone_private_mount() was reworked in
      db04662e2f4f ("fs: allow detached mounts in clone_private_mount()").
      Tweak the relevant ns_capable check so that it works on older kernels ]
    Signed-off-by: Noah Orlando <Noah.Orlando@deshaw.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
comedi: aio_iiro_16: Fix bit shift out of bounds [+ + +]
Author: Ian Abbott <abbotti@mev.co.uk>
Date:   Mon Jul 7 14:46:22 2025 +0100

    comedi: aio_iiro_16: Fix bit shift out of bounds
    
    commit 66acb1586737a22dd7b78abc63213b1bcaa100e4 upstream.
    
    When checking for a supported IRQ number, the following test is used:
    
            if ((1 << it->options[1]) & 0xdcfc) {
    
    However, `it->options[i]` is an unchecked `int` value from userspace, so
    the shift amount could be negative or out of bounds.  Fix the test by
    requiring `it->options[1]` to be within bounds before proceeding with
    the original test.  Valid `it->options[1]` values that select the IRQ
    will be in the range [1,15]. The value 0 explicitly disables the use of
    interrupts.
    
    Fixes: ad7a370c8be4 ("staging: comedi: aio_iiro_16: add command support for change of state detection")
    Cc: stable@vger.kernel.org # 5.13+
    Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
    Link: https://lore.kernel.org/r/20250707134622.75403-1-abbotti@mev.co.uk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

comedi: das16m1: Fix bit shift out of bounds [+ + +]
Author: Ian Abbott <abbotti@mev.co.uk>
Date:   Mon Jul 7 14:09:08 2025 +0100

    comedi: das16m1: Fix bit shift out of bounds
    
    commit ed93c6f68a3be06e4e0c331c6e751f462dee3932 upstream.
    
    When checking for a supported IRQ number, the following test is used:
    
            /* only irqs 2, 3, 4, 5, 6, 7, 10, 11, 12, 14, and 15 are valid */
            if ((1 << it->options[1]) & 0xdcfc) {
    
    However, `it->options[i]` is an unchecked `int` value from userspace, so
    the shift amount could be negative or out of bounds.  Fix the test by
    requiring `it->options[1]` to be within bounds before proceeding with
    the original test.
    
    Reported-by: syzbot+c52293513298e0fd9a94@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=c52293513298e0fd9a94
    Fixes: 729988507680 ("staging: comedi: das16m1: tidy up the irq support in das16m1_attach()")
    Tested-by: syzbot+c52293513298e0fd9a94@syzkaller.appspotmail.com
    Suggested-by: "Enju, Kohei" <enjuk@amazon.co.jp>
    Cc: stable@vger.kernel.org # 5.13+
    Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
    Link: https://lore.kernel.org/r/20250707130908.70758-1-abbotti@mev.co.uk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

comedi: das6402: Fix bit shift out of bounds [+ + +]
Author: Ian Abbott <abbotti@mev.co.uk>
Date:   Mon Jul 7 14:57:37 2025 +0100

    comedi: das6402: Fix bit shift out of bounds
    
    commit 70f2b28b5243df557f51c054c20058ae207baaac upstream.
    
    When checking for a supported IRQ number, the following test is used:
    
            /* IRQs 2,3,5,6,7, 10,11,15 are valid for "enhanced" mode */
            if ((1 << it->options[1]) & 0x8cec) {
    
    However, `it->options[i]` is an unchecked `int` value from userspace, so
    the shift amount could be negative or out of bounds.  Fix the test by
    requiring `it->options[1]` to be within bounds before proceeding with
    the original test.  Valid `it->options[1]` values that select the IRQ
    will be in the range [1,15]. The value 0 explicitly disables the use of
    interrupts.
    
    Fixes: 79e5e6addbb1 ("staging: comedi: das6402: rewrite broken driver")
    Cc: stable@vger.kernel.org # 5.13+
    Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
    Link: https://lore.kernel.org/r/20250707135737.77448-1-abbotti@mev.co.uk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

comedi: Fail COMEDI_INSNLIST ioctl if n_insns is too large [+ + +]
Author: Ian Abbott <abbotti@mev.co.uk>
Date:   Fri Jul 4 13:04:05 2025 +0100

    comedi: Fail COMEDI_INSNLIST ioctl if n_insns is too large
    
    commit 08ae4b20f5e82101d77326ecab9089e110f224cc upstream.
    
    The handling of the `COMEDI_INSNLIST` ioctl allocates a kernel buffer to
    hold the array of `struct comedi_insn`, getting the length from the
    `n_insns` member of the `struct comedi_insnlist` supplied by the user.
    The allocation will fail with a WARNING and a stack dump if it is too
    large.
    
    Avoid that by failing with an `-EINVAL` error if the supplied `n_insns`
    value is unreasonable.
    
    Define the limit on the `n_insns` value in the `MAX_INSNS` macro.  Set
    this to the same value as `MAX_SAMPLES` (65536), which is the maximum
    allowed sum of the values of the member `n` in the array of `struct
    comedi_insn`, and sensible comedi instructions will have an `n` of at
    least 1.
    
    Reported-by: syzbot+d6995b62e5ac7d79557a@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=d6995b62e5ac7d79557a
    Fixes: ed9eccbe8970 ("Staging: add comedi core")
    Tested-by: Ian Abbott <abbotti@mev.co.uk>
    Cc: stable@vger.kernel.org # 5.13+
    Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
    Link: https://lore.kernel.org/r/20250704120405.83028-1-abbotti@mev.co.uk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

comedi: Fix initialization of data for instructions that write to subdevice [+ + +]
Author: Ian Abbott <abbotti@mev.co.uk>
Date:   Mon Jul 7 17:14:39 2025 +0100

    comedi: Fix initialization of data for instructions that write to subdevice
    
    commit 46d8c744136ce2454aa4c35c138cc06817f92b8e upstream.
    
    Some Comedi subdevice instruction handlers are known to access
    instruction data elements beyond the first `insn->n` elements in some
    cases.  The `do_insn_ioctl()` and `do_insnlist_ioctl()` functions
    allocate at least `MIN_SAMPLES` (16) data elements to deal with this,
    but they do not initialize all of that.  For Comedi instruction codes
    that write to the subdevice, the first `insn->n` data elements are
    copied from user-space, but the remaining elements are left
    uninitialized.  That could be a problem if the subdevice instruction
    handler reads the uninitialized data.  Ensure that the first
    `MIN_SAMPLES` elements are initialized before calling these instruction
    handlers, filling the uncopied elements with 0.  For
    `do_insnlist_ioctl()`, the same data buffer elements are used for
    handling a list of instructions, so ensure the first `MIN_SAMPLES`
    elements are initialized for each instruction that writes to the
    subdevice.
    
    Fixes: ed9eccbe8970 ("Staging: add comedi core")
    Cc: stable@vger.kernel.org # 5.13+
    Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
    Link: https://lore.kernel.org/r/20250707161439.88385-1-abbotti@mev.co.uk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

comedi: Fix some signed shift left operations [+ + +]
Author: Ian Abbott <abbotti@mev.co.uk>
Date:   Mon Jul 7 13:15:55 2025 +0100

    comedi: Fix some signed shift left operations
    
    commit ab705c8c35e18652abc6239c07cf3441f03e2cda upstream.
    
    Correct some left shifts of the signed integer constant 1 by some
    unsigned number less than 32.  Change the constant to 1U to avoid
    shifting a 1 into the sign bit.
    
    The corrected functions are comedi_dio_insn_config(),
    comedi_dio_update_state(), and __comedi_device_postconfig().
    
    Fixes: e523c6c86232 ("staging: comedi: drivers: introduce comedi_dio_insn_config()")
    Fixes: 05e60b13a36b ("staging: comedi: drivers: introduce comedi_dio_update_state()")
    Fixes: 09567cb4373e ("staging: comedi: initialize subdevice s->io_bits in postconfig")
    Cc: stable@vger.kernel.org # 5.13+
    Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
    Link: https://lore.kernel.org/r/20250707121555.65424-1-abbotti@mev.co.uk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

comedi: Fix use of uninitialized data in insn_rw_emulate_bits() [+ + +]
Author: Ian Abbott <abbotti@mev.co.uk>
Date:   Mon Jul 7 16:33:54 2025 +0100

    comedi: Fix use of uninitialized data in insn_rw_emulate_bits()
    
    commit e9cb26291d009243a4478a7ffb37b3a9175bfce9 upstream.
    
    For Comedi `INSN_READ` and `INSN_WRITE` instructions on "digital"
    subdevices (subdevice types `COMEDI_SUBD_DI`, `COMEDI_SUBD_DO`, and
    `COMEDI_SUBD_DIO`), it is common for the subdevice driver not to have
    `insn_read` and `insn_write` handler functions, but to have an
    `insn_bits` handler function for handling Comedi `INSN_BITS`
    instructions.  In that case, the subdevice's `insn_read` and/or
    `insn_write` function handler pointers are set to point to the
    `insn_rw_emulate_bits()` function by `__comedi_device_postconfig()`.
    
    For `INSN_WRITE`, `insn_rw_emulate_bits()` currently assumes that the
    supplied `data[0]` value is a valid copy from user memory.  It will at
    least exist because `do_insnlist_ioctl()` and `do_insn_ioctl()` in
    "comedi_fops.c" ensure at lease `MIN_SAMPLES` (16) elements are
    allocated.  However, if `insn->n` is 0 (which is allowable for
    `INSN_READ` and `INSN_WRITE` instructions, then `data[0]` may contain
    uninitialized data, and certainly contains invalid data, possibly from a
    different instruction in the array of instructions handled by
    `do_insnlist_ioctl()`.  This will result in an incorrect value being
    written to the digital output channel (or to the digital input/output
    channel if configured as an output), and may be reflected in the
    internal saved state of the channel.
    
    Fix it by returning 0 early if `insn->n` is 0, before reaching the code
    that accesses `data[0]`.  Previously, the function always returned 1 on
    success, but it is supposed to be the number of data samples actually
    read or written up to `insn->n`, which is 0 in this case.
    
    Reported-by: syzbot+cb96ec476fb4914445c9@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=cb96ec476fb4914445c9
    Fixes: ed9eccbe8970 ("Staging: add comedi core")
    Cc: stable@vger.kernel.org # 5.13+
    Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
    Link: https://lore.kernel.org/r/20250707153355.82474-1-abbotti@mev.co.uk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

comedi: pcl812: Fix bit shift out of bounds [+ + +]
Author: Ian Abbott <abbotti@mev.co.uk>
Date:   Mon Jul 7 14:34:29 2025 +0100

    comedi: pcl812: Fix bit shift out of bounds
    
    commit b14b076ce593f72585412fc7fd3747e03a5e3632 upstream.
    
    When checking for a supported IRQ number, the following test is used:
    
            if ((1 << it->options[1]) & board->irq_bits) {
    
    However, `it->options[i]` is an unchecked `int` value from userspace, so
    the shift amount could be negative or out of bounds.  Fix the test by
    requiring `it->options[1]` to be within bounds before proceeding with
    the original test.  Valid `it->options[1]` values that select the IRQ
    will be in the range [1,15]. The value 0 explicitly disables the use of
    interrupts.
    
    Reported-by: syzbot+32de323b0addb9e114ff@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=32de323b0addb9e114ff
    Fixes: fcdb427bc7cf ("Staging: comedi: add pcl821 driver")
    Cc: stable@vger.kernel.org # 5.13+
    Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
    Link: https://lore.kernel.org/r/20250707133429.73202-1-abbotti@mev.co.uk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dmaengine: nbpfaxi: Fix memory corruption in probe() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Tue Jul 1 17:31:40 2025 -0500

    dmaengine: nbpfaxi: Fix memory corruption in probe()
    
    commit 188c6ba1dd925849c5d94885c8bbdeb0b3dcf510 upstream.
    
    The nbpf->chan[] array is allocated earlier in the nbpf_probe() function
    and it has "num_channels" elements.  These three loops iterate one
    element farther than they should and corrupt memory.
    
    The changes to the second loop are more involved.  In this case, we're
    copying data from the irqbuf[] array into the nbpf->chan[] array.  If
    the data in irqbuf[i] is the error IRQ then we skip it, so the iterators
    are not in sync.  I added a check to ensure that we don't go beyond the
    end of the irqbuf[] array.  I'm pretty sure this can't happen, but it
    seemed harmless to add a check.
    
    On the other hand, after the loop has ended there is a check to ensure
    that the "chan" iterator is where we expect it to be.  In the original
    code we went one element beyond the end of the array so the iterator
    wasn't in the correct place and it would always return -EINVAL.  However,
    now it will always be in the correct place.  I deleted the check since
    we know the result.
    
    Cc: stable@vger.kernel.org
    Fixes: b45b262cefd5 ("dmaengine: add a driver for AMBA AXI NBPF DMAC IP cores")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Link: https://lore.kernel.org/r/b13c5225-7eff-448c-badc-a2c98e9bcaca@sabinyo.mountain
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
HID: core: do not bypass hid_hw_raw_request [+ + +]
Author: Benjamin Tissoires <bentiss@kernel.org>
Date:   Thu Jul 10 16:01:35 2025 +0200

    HID: core: do not bypass hid_hw_raw_request
    
    commit c2ca42f190b6714d6c481dfd3d9b62ea091c946b upstream.
    
    hid_hw_raw_request() is actually useful to ensure the provided buffer
    and length are valid. Directly calling in the low level transport driver
    function bypassed those checks and allowed invalid paramto be used.
    
    Reported-by: Alan Stern <stern@rowland.harvard.edu>
    Closes: https://lore.kernel.org/linux-input/c75433e0-9b47-4072-bbe8-b1d14ea97b13@rowland.harvard.edu/
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20250710-report-size-null-v2-3-ccf922b7c4e5@kernel.org
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

HID: core: ensure __hid_request reserves the report ID as the first byte [+ + +]
Author: Benjamin Tissoires <bentiss@kernel.org>
Date:   Thu Jul 10 16:01:34 2025 +0200

    HID: core: ensure __hid_request reserves the report ID as the first byte
    
    commit 0d0777ccaa2d46609d05b66ba0096802a2746193 upstream.
    
    The low level transport driver expects the first byte to be the report
    ID, even when the report ID is not use (in which case they just shift
    the buffer).
    
    However, __hid_request() whas not offsetting the buffer it used by one
    in this case, meaning that the raw_request() callback emitted by the
    transport driver would be stripped of the first byte.
    
    Note: this changes the API for uhid devices when a request is made
    through hid_hw_request. However, several considerations makes me think
    this is fine:
    - every request to a HID device made through hid_hw_request() would see
      that change, but every request made through hid_hw_raw_request()
      already has the new behaviour. So that means that the users are
      already facing situations where they might have or not the first byte
      being the null report ID when it is 0. We are making things more
      straightforward in the end.
    - uhid is mainly used for BLE devices
    - uhid is also used for testing, but I don't see that change a big issue
    - for BLE devices, we can check which kernel module is calling
      hid_hw_request()
    - and in those modules, we can check which are using a Bluetooth device
    - and then we can check if the command is used with a report ID or not.
    - surprise: none of the kernel module are using a report ID 0
    - and finally, bluez, in its function set_report()[0], does the same
      shift if the report ID is 0 and the given buffer has a size > 0.
    
    [0] https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/profiles/input/hog-lib.c#n879
    
    Reported-by: Alan Stern <stern@rowland.harvard.edu>
    Closes: https://lore.kernel.org/linux-input/c75433e0-9b47-4072-bbe8-b1d14ea97b13@rowland.harvard.edu/
    Reported-by: syzbot+8258d5439c49d4c35f43@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=8258d5439c49d4c35f43
    Tested-by: syzbot+8258d5439c49d4c35f43@syzkaller.appspotmail.com
    Fixes: 4fa5a7f76cc7 ("HID: core: implement generic .request()")
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20250710-report-size-null-v2-2-ccf922b7c4e5@kernel.org
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

HID: core: ensure the allocated report buffer can contain the reserved report ID [+ + +]
Author: Benjamin Tissoires <bentiss@kernel.org>
Date:   Thu Jul 10 16:01:33 2025 +0200

    HID: core: ensure the allocated report buffer can contain the reserved report ID
    
    commit 4f15ee98304b96e164ff2340e1dfd6181c3f42aa upstream.
    
    When the report ID is not used, the low level transport drivers expect
    the first byte to be 0. However, currently the allocated buffer not
    account for that extra byte, meaning that instead of having 8 guaranteed
    bytes for implement to be working, we only have 7.
    
    Reported-by: Alan Stern <stern@rowland.harvard.edu>
    Closes: https://lore.kernel.org/linux-input/c75433e0-9b47-4072-bbe8-b1d14ea97b13@rowland.harvard.edu/
    Cc: stable@vger.kernel.org
    Suggested-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://patch.msgid.link/20250710-report-size-null-v2-1-ccf922b7c4e5@kernel.org
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

HID: mcp2221: Set driver data before I2C adapter add [+ + +]
Author: Hamish Martin <hamish.martin@alliedtelesis.co.nz>
Date:   Wed Oct 25 16:55:10 2023 +1300

    HID: mcp2221: Set driver data before I2C adapter add
    
    commit f2d4a5834638bbc967371b9168c0b481519f7c5e upstream.
    
    The process of adding an I2C adapter can invoke I2C accesses on that new
    adapter (see i2c_detect()).
    
    Ensure we have set the adapter's driver data to avoid null pointer
    dereferences in the xfer functions during the adapter add.
    
    This has been noted in the past and the same fix proposed but not
    completed. See:
    https://lore.kernel.org/lkml/ef597e73-ed71-168e-52af-0d19b03734ac@vigem.de/
    
    Signed-off-by: Hamish Martin <hamish.martin@alliedtelesis.co.nz>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Sumanth Gavini <sumanth.gavini@yahoo.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hwmon: (corsair-cpro) Validate the size of the received input buffer [+ + +]
Author: Marius Zachmann <mail@mariuszachmann.de>
Date:   Thu Jun 19 15:27:47 2025 +0200

    hwmon: (corsair-cpro) Validate the size of the received input buffer
    
    [ Upstream commit 495a4f0dce9c8c4478c242209748f1ee9e4d5820 ]
    
    Add buffer_recv_size to store the size of the received bytes.
    Validate buffer_recv_size in send_usb_cmd().
    
    Reported-by: syzbot+3bbbade4e1a7ab45ca3b@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/linux-hwmon/61233ba1-e5ad-4d7a-ba31-3b5d0adcffcc@roeck-us.net
    Fixes: 40c3a4454225 ("hwmon: add Corsair Commander Pro driver")
    Signed-off-by: Marius Zachmann <mail@mariuszachmann.de>
    Link: https://lore.kernel.org/r/20250619132817.39764-5-mail@mariuszachmann.de
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
i2c: stm32: fix the device used for the DMA map [+ + +]
Author: Clément Le Goffic <clement.legoffic@foss.st.com>
Date:   Fri Jul 4 10:39:14 2025 +0200

    i2c: stm32: fix the device used for the DMA map
    
    commit c870cbbd71fccda71d575f0acd4a8d2b7cd88861 upstream.
    
    If the DMA mapping failed, it produced an error log with the wrong
    device name:
    "stm32-dma3 40400000.dma-controller: rejecting DMA map of vmalloc memory"
    Fix this issue by replacing the dev with the I2C dev.
    
    Fixes: bb8822cbbc53 ("i2c: i2c-stm32: Add generic DMA API")
    Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com>
    Cc: <stable@vger.kernel.org> # v4.18+
    Acked-by: Alain Volmat <alain.volmat@foss.st.com>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Link: https://lore.kernel.org/r/20250704-i2c-upstream-v4-1-84a095a2c728@foss.st.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
iio: accel: fxls8962af: Fix use after free in fxls8962af_fifo_flush [+ + +]
Author: Sean Nyekjaer <sean@geanix.com>
Date:   Tue Jun 3 14:25:44 2025 +0200

    iio: accel: fxls8962af: Fix use after free in fxls8962af_fifo_flush
    
    commit 1fe16dc1a2f5057772e5391ec042ed7442966c9a upstream.
    
    fxls8962af_fifo_flush() uses indio_dev->active_scan_mask (with
    iio_for_each_active_channel()) without making sure the indio_dev
    stays in buffer mode.
    There is a race if indio_dev exits buffer mode in the middle of the
    interrupt that flushes the fifo. Fix this by calling
    synchronize_irq() to ensure that no interrupt is currently running when
    disabling buffer mode.
    
    Unable to handle kernel NULL pointer dereference at virtual address 00000000 when read
    [...]
    _find_first_bit_le from fxls8962af_fifo_flush+0x17c/0x290
    fxls8962af_fifo_flush from fxls8962af_interrupt+0x80/0x178
    fxls8962af_interrupt from irq_thread_fn+0x1c/0x7c
    irq_thread_fn from irq_thread+0x110/0x1f4
    irq_thread from kthread+0xe0/0xfc
    kthread from ret_from_fork+0x14/0x2c
    
    Fixes: 79e3a5bdd9ef ("iio: accel: fxls8962af: add hw buffered sampling")
    Cc: stable@vger.kernel.org
    Suggested-by: David Lechner <dlechner@baylibre.com>
    Signed-off-by: Sean Nyekjaer <sean@geanix.com>
    Link: https://patch.msgid.link/20250603-fxlsrace-v2-1-5381b36ba1db@geanix.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: adc: max1363: Fix MAX1363_4X_CHANS/MAX1363_8X_CHANS[] [+ + +]
Author: Fabio Estevam <festevam@denx.de>
Date:   Fri May 16 14:38:59 2025 -0300

    iio: adc: max1363: Fix MAX1363_4X_CHANS/MAX1363_8X_CHANS[]
    
    commit 6d21f2c2dd843bceefd9455f2919f6bb526797f0 upstream.
    
    Since commit 2718f15403fb ("iio: sanity check available_scan_masks array"),
    booting a board populated with a MAX11601 results in a flood of warnings:
    
    max1363 1-0064: available_scan_mask 8 subset of 0. Never used
    max1363 1-0064: available_scan_mask 9 subset of 0. Never used
    max1363 1-0064: available_scan_mask 10 subset of 0. Never used
    max1363 1-0064: available_scan_mask 11 subset of 0. Never used
    max1363 1-0064: available_scan_mask 12 subset of 0. Never used
    max1363 1-0064: available_scan_mask 13 subset of 0. Never used
    ...
    
    These warnings are caused by incorrect offsets used for differential
    channels in the MAX1363_4X_CHANS() and MAX1363_8X_CHANS() macros.
    
    The max1363_mode_table[] defines the differential channel mappings as
    follows:
    
    MAX1363_MODE_DIFF_SINGLE(0, 1, 1 << 12),
    MAX1363_MODE_DIFF_SINGLE(2, 3, 1 << 13),
    MAX1363_MODE_DIFF_SINGLE(4, 5, 1 << 14),
    MAX1363_MODE_DIFF_SINGLE(6, 7, 1 << 15),
    MAX1363_MODE_DIFF_SINGLE(8, 9, 1 << 16),
    MAX1363_MODE_DIFF_SINGLE(10, 11, 1 << 17),
    MAX1363_MODE_DIFF_SINGLE(1, 0, 1 << 18),
    MAX1363_MODE_DIFF_SINGLE(3, 2, 1 << 19),
    MAX1363_MODE_DIFF_SINGLE(5, 4, 1 << 20),
    MAX1363_MODE_DIFF_SINGLE(7, 6, 1 << 21),
    MAX1363_MODE_DIFF_SINGLE(9, 8, 1 << 22),
    MAX1363_MODE_DIFF_SINGLE(11, 10, 1 << 23),
    
    Update the macros to follow this same pattern, ensuring that the scan masks
    are valid and preventing the warnings.
    
    Cc: stable@vger.kernel.org
    Suggested-by: Jonathan Cameron <jic23@kernel.org>
    Signed-off-by: Fabio Estevam <festevam@denx.de>
    Acked-by: Matti Vaittinen <mazziesaccount@gmail.com>
    Link: https://patch.msgid.link/20250516173900.677821-1-festevam@gmail.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: adc: max1363: Reorder mode_list[] entries [+ + +]
Author: Fabio Estevam <festevam@denx.de>
Date:   Fri May 16 14:39:00 2025 -0300

    iio: adc: max1363: Reorder mode_list[] entries
    
    commit 8d8d7c1dbc46aa07a76acab7336a42ddd900be10 upstream.
    
    The IIO core issues warnings when a scan mask is a subset of a previous
    entry in the available_scan_masks array.
    
    On a board using a MAX11601, the following warning is observed:
    
    max1363 1-0064: available_scan_mask 7 subset of 6. Never used
    
    This occurs because the entries in the max11607_mode_list[] array are not
    ordered correctly. To fix this, reorder the entries so that no scan mask is
    a subset of an earlier one.
    
    While at it, reorder the mode_list[] arrays for other supported chips as
    well, to prevent similar warnings on different variants.
    
    Note fixes tag dropped as these were introduced over many commits a long
    time back and the side effect until recently was a reduction in sampling
    rate due to reading too many channels when only a few were desired.
    Now we have a sanity check that reports this error but that is not
    where the issue was introduced.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Fabio Estevam <festevam@denx.de>
    Acked-by: Matti Vaittinen <mazziesaccount@gmail.com>
    Link: https://patch.msgid.link/20250516173900.677821-2-festevam@gmail.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: adc: stm32-adc: Fix race in installing chained IRQ handler [+ + +]
Author: Chen Ni <nichen@iscas.ac.cn>
Date:   Thu May 15 16:31:01 2025 +0800

    iio: adc: stm32-adc: Fix race in installing chained IRQ handler
    
    commit e8ad595064f6ebd5d2d1a5d5d7ebe0efce623091 upstream.
    
    Fix a race where a pending interrupt could be received and the handler
    called before the handler's data has been setup, by converting to
    irq_set_chained_handler_and_data().
    
    Fixes: 1add69880240 ("iio: adc: Add support for STM32 ADC core")
    Signed-off-by: Chen Ni <nichen@iscas.ac.cn>
    Reviewed-by: Nuno Sá <nuno.sa@analog.com>
    Tested-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
    Reviewed-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
    Link: https://patch.msgid.link/20250515083101.3811350-1-nichen@iscas.ac.cn
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Input: xpad - set correct controller type for Acer NGR200 [+ + +]
Author: Nilton Perim Neto <niltonperimneto@gmail.com>
Date:   Sat Jul 19 22:07:36 2025 -0700

    Input: xpad - set correct controller type for Acer NGR200
    
    commit bcce05041b21888f10b80ea903dcfe51a25c586e upstream.
    
    The controller should have been set as XTYPE_XBOX360 and not XTYPE_XBOX.
    Also the entry is in the wrong place. Fix it.
    
    Reported-by: Vicki Pfau <vi@endrift.com>
    Signed-off-by: Nilton Perim Neto <niltonperimneto@gmail.com>
    Link: https://lore.kernel.org/r/20250708033126.26216-2-niltonperimneto@gmail.com
    Fixes: 22c69d786ef8 ("Input: xpad - support Acer NGR 200 Controller")
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
io_uring/poll: fix POLLERR handling [+ + +]
Author: Pavel Begunkov <asml.silence@gmail.com>
Date:   Wed Jul 16 17:20:17 2025 +0100

    io_uring/poll: fix POLLERR handling
    
    commit c7cafd5b81cc07fb402e3068d134c21e60ea688c upstream.
    
    8c8492ca64e7 ("io_uring/net: don't retry connect operation on EPOLLERR")
    is a little dirty hack that
    1) wrongfully assumes that POLLERR equals to a failed request, which
    breaks all POLLERR users, e.g. all error queue recv interfaces.
    2) deviates the connection request behaviour from connect(2), and
    3) racy and solved at a wrong level.
    
    Nothing can be done with 2) now, and 3) is beyond the scope of the
    patch. At least solve 1) by moving the hack out of generic poll handling
    into io_connect().
    
    Cc: stable@vger.kernel.org
    Fixes: 8c8492ca64e79 ("io_uring/net: don't retry connect operation on EPOLLERR")
    Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
    Link: https://lore.kernel.org/r/3dc89036388d602ebd84c28e5042e457bdfc952b.1752682444.git.asml.silence@gmail.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

    ipv6: mcast: Delay put pmc->idev in mld_del_delrec()
    
    [ Upstream commit ae3264a25a4635531264728859dbe9c659fad554 ]
    
    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 <yuehaibing@huawei.com>
    Link: https://patch.msgid.link/20250714141957.3301871-1-yuehaibing@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
isofs: Verify inode mode when loading from disk [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Wed Jul 9 11:55:46 2025 +0200

    isofs: Verify inode mode when loading from disk
    
    commit 0a9e7405131380b57e155f10242b2e25d2e51852 upstream.
    
    Verify that the inode mode is sane when loading it from the disk to
    avoid complaints from VFS about setting up invalid inodes.
    
    Reported-by: syzbot+895c23f6917da440ed0d@syzkaller.appspotmail.com
    CC: stable@vger.kernel.org
    Signed-off-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/20250709095545.31062-2-jack@suse.cz
    Acked-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: Linux 6.1.147 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu Jul 24 08:51:55 2025 +0200

    Linux 6.1.147
    
    Link: https://lore.kernel.org/r/20250722134328.384139905@linuxfoundation.org
    Tested-by: Brett A C Sheffield <bacs@librecast.net>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Miguel Ojeda <ojeda@kernel.org>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Tested-by: Hardik Garg <hargar@linux.microsoft.com>
    Tested-by: Ron Economos <re@w6rz.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
memstick: core: Zero initialize id_reg in h_memstick_read_dev_id() [+ + +]
Author: Nathan Chancellor <nathan@kernel.org>
Date:   Tue Jul 15 15:56:05 2025 -0700

    memstick: core: Zero initialize id_reg in h_memstick_read_dev_id()
    
    commit 21b34a3a204ed616373a12ec17dc127ebe51eab3 upstream.
    
    A new warning in clang [1] points out that id_reg is uninitialized then
    passed to memstick_init_req() as a const pointer:
    
      drivers/memstick/core/memstick.c:330:59: error: variable 'id_reg' is uninitialized when passed as a const pointer argument here [-Werror,-Wuninitialized-const-pointer]
        330 |                 memstick_init_req(&card->current_mrq, MS_TPC_READ_REG, &id_reg,
            |                                                                         ^~~~~~
    
    Commit de182cc8e882 ("drivers/memstick/core/memstick.c: avoid -Wnonnull
    warning") intentionally passed this variable uninitialized to avoid an
    -Wnonnull warning from a NULL value that was previously there because
    id_reg is never read from the call to memstick_init_req() in
    h_memstick_read_dev_id(). Just zero initialize id_reg to avoid the
    warning, which is likely happening in the majority of builds using
    modern compilers that support '-ftrivial-auto-var-init=zero'.
    
    Cc: stable@vger.kernel.org
    Fixes: de182cc8e882 ("drivers/memstick/core/memstick.c: avoid -Wnonnull warning")
    Link: https://github.com/llvm/llvm-project/commit/00dacf8c22f065cb52efb14cd091d441f19b319e [1]
    Closes: https://github.com/ClangBuiltLinux/linux/issues/2105
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    Link: https://lore.kernel.org/r/20250715-memstick-fix-uninit-const-pointer-v1-1-f6753829c27a@kernel.org
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/vmalloc: leave lazy MMU mode on PTE mapping error [+ + +]
Author: Alexander Gordeev <agordeev@linux.ibm.com>
Date:   Mon Jun 23 09:57:21 2025 +0200

    mm/vmalloc: leave lazy MMU mode on PTE mapping error
    
    commit fea18c686320a53fce7ad62a87a3e1d10ad02f31 upstream.
    
    vmap_pages_pte_range() enters the lazy MMU mode, but fails to leave it in
    case an error is encountered.
    
    Link: https://lkml.kernel.org/r/20250623075721.2817094-1-agordeev@linux.ibm.com
    Fixes: 2ba3e6947aed ("mm/vmalloc: track which page-table levels were modified")
    Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
    Reported-by: kernel test robot <lkp@intel.com>
    Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
    Closes: https://lore.kernel.org/r/202506132017.T1l1l6ME-lkp@intel.com/
    Reviewed-by: Ryan Roberts <ryan.roberts@arm.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mmc: bcm2835: Fix dma_unmap_sg() nents value [+ + +]
Author: Thomas Fourier <fourier.thomas@gmail.com>
Date:   Mon Jun 30 11:35:07 2025 +0200

    mmc: bcm2835: Fix dma_unmap_sg() nents value
    
    commit ff09b71bf9daeca4f21d6e5e449641c9fad75b53 upstream.
    
    The dma_unmap_sg() functions should be called with the same nents as the
    dma_map_sg(), not the value the map function returned.
    
    Fixes: 2f5da678351f ("mmc: bcm2835: Properly handle dmaengine_prep_slave_sg")
    Signed-off-by: Thomas Fourier <fourier.thomas@gmail.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20250630093510.82871-2-fourier.thomas@gmail.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: sdhci-pci: Quirk for broken command queuing on Intel GLK-based Positivo models [+ + +]
Author: Edson Juliano Drosdeck <edson.drosdeck@gmail.com>
Date:   Thu Jun 26 08:24:42 2025 -0300

    mmc: sdhci-pci: Quirk for broken command queuing on Intel GLK-based Positivo models
    
    commit 50c78f398e92fafa1cbba3469c95fe04b2e4206d upstream.
    
    Disable command queuing on Intel GLK-based Positivo models.
    
    Without this quirk, CQE (Command Queuing Engine) causes instability
    or I/O errors during operation. Disabling it ensures stable
    operation on affected devices.
    
    Signed-off-by: Edson Juliano Drosdeck <edson.drosdeck@gmail.com>
    Fixes: bedf9fc01ff1 ("mmc: sdhci: Workaround broken command queuing on Intel GLK")
    Cc: stable@vger.kernel.org
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Link: https://lore.kernel.org/r/20250626112442.9791-1-edson.drosdeck@gmail.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: sdhci_am654: Workaround for Errata i2312 [+ + +]
Author: Judith Mendez <jm@ti.com>
Date:   Thu Jun 26 18:14:52 2025 -0500

    mmc: sdhci_am654: Workaround for Errata i2312
    
    commit 6d0b1c01847fedd7c85a5cdf59b8cfc7d14512e6 upstream.
    
    Errata i2312 [0] for K3 silicon mentions the maximum obtainable
    timeout through MMC host controller is 700ms. And for commands taking
    longer than 700ms, hardware timeout should be disabled and software
    timeout should be used.
    
    The workaround for Errata i2312 can be achieved by adding
    SDHCI_QUIRK2_DISABLE_HW_TIMEOUT quirk in sdhci_am654.
    
    [0] https://www.ti.com/lit/pdf/sprz487
    
    Signed-off-by: Judith Mendez <jm@ti.com>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Fixes: 41fd4caeb00b ("mmc: sdhci_am654: Add Initial Support for AM654 SDHCI driver")
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20250626231452.3460987-1-jm@ti.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/mlx5: Correctly set gso_size when LRO is used [+ + +]
Author: Christoph Paasch <cpaasch@openai.com>
Date:   Tue Jul 15 13:20:53 2025 -0700

    net/mlx5: Correctly set gso_size when LRO is used
    
    [ Upstream commit 531d0d32de3e1b6b77a87bd37de0c2c6e17b496a ]
    
    gso_size is expected by the networking stack to be the size of the
    payload (thus, not including ethernet/IP/TCP-headers). However, cqe_bcnt
    is the full sized frame (including the headers). Dividing cqe_bcnt by
    lro_num_seg will then give incorrect results.
    
    For example, running a bpftrace higher up in the TCP-stack
    (tcp_event_data_recv), we commonly have gso_size set to 1450 or 1451 even
    though in reality the payload was only 1448 bytes.
    
    This can have unintended consequences:
    - In tcp_measure_rcv_mss() len will be for example 1450, but. rcv_mss
    will be 1448 (because tp->advmss is 1448). Thus, we will always
    recompute scaling_ratio each time an LRO-packet is received.
    - In tcp_gro_receive(), it will interfere with the decision whether or
    not to flush and thus potentially result in less gro'ed packets.
    
    So, we need to discount the protocol headers from cqe_bcnt so we can
    actually divide the payload by lro_num_seg to get the real gso_size.
    
    v2:
     - Use "(unsigned char *)tcp + tcp->doff * 4 - skb->data)" to compute header-len
       (Tariq Toukan <tariqt@nvidia.com>)
     - Improve commit-message (Gal Pressman <gal@nvidia.com>)
    
    Fixes: e586b3b0baee ("net/mlx5: Ethernet Datapath files")
    Signed-off-by: Christoph Paasch <cpaasch@openai.com>
    Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
    Reviewed-by: Gal Pressman <gal@nvidia.com>
    Link: https://patch.msgid.link/20250715-cpaasch-pf-925-investigate-incorrect-gso_size-on-cx-7-nic-v2-1-e06c3475f3ac@openai.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5: Update the list of the PCI supported devices [+ + +]
Author: Maor Gottlieb <maorg@nvidia.com>
Date:   Wed Jul 16 10:29:29 2025 +0300

    net/mlx5: Update the list of the PCI supported devices
    
    commit ad4f6df4f384905bc85f9fbfc1c0c198fb563286 upstream.
    
    Add the upcoming ConnectX-10 device ID to the table of supported
    PCI device IDs.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Maor Gottlieb <maorg@nvidia.com>
    Reviewed-by: Mark Bloch <mbloch@nvidia.com>
    Reviewed-by: Eran Ben Elisha <eranbe@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/1752650969-148501-1-git-send-email-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/sched: Return NULL when htb_lookup_leaf encounters an empty rbtree [+ + +]
Author: William Liu <will@willsroot.io>
Date:   Thu Jul 17 02:28:38 2025 +0000

    net/sched: Return NULL when htb_lookup_leaf encounters an empty rbtree
    
    [ Upstream commit 0e1d5d9b5c5966e2e42e298670808590db5ed628 ]
    
    htb_lookup_leaf has a BUG_ON that can trigger with the following:
    
    tc qdisc del dev lo root
    tc qdisc add dev lo root handle 1: htb default 1
    tc class add dev lo parent 1: classid 1:1 htb rate 64bit
    tc qdisc add dev lo parent 1:1 handle 2: netem
    tc qdisc add dev lo parent 2:1 handle 3: blackhole
    ping -I lo -c1 -W0.001 127.0.0.1
    
    The root cause is the following:
    
    1. htb_dequeue calls htb_dequeue_tree which calls the dequeue handler on
       the selected leaf qdisc
    2. netem_dequeue calls enqueue on the child qdisc
    3. blackhole_enqueue drops the packet and returns a value that is not
       just NET_XMIT_SUCCESS
    4. Because of this, netem_dequeue calls qdisc_tree_reduce_backlog, and
       since qlen is now 0, it calls htb_qlen_notify -> htb_deactivate ->
       htb_deactiviate_prios -> htb_remove_class_from_row -> htb_safe_rb_erase
    5. As this is the only class in the selected hprio rbtree,
       __rb_change_child in __rb_erase_augmented sets the rb_root pointer to
       NULL
    6. Because blackhole_dequeue returns NULL, netem_dequeue returns NULL,
       which causes htb_dequeue_tree to call htb_lookup_leaf with the same
       hprio rbtree, and fail the BUG_ON
    
    The function graph for this scenario is shown here:
     0)               |  htb_enqueue() {
     0) + 13.635 us   |    netem_enqueue();
     0)   4.719 us    |    htb_activate_prios();
     0) # 2249.199 us |  }
     0)               |  htb_dequeue() {
     0)   2.355 us    |    htb_lookup_leaf();
     0)               |    netem_dequeue() {
     0) + 11.061 us   |      blackhole_enqueue();
     0)               |      qdisc_tree_reduce_backlog() {
     0)               |        qdisc_lookup_rcu() {
     0)   1.873 us    |          qdisc_match_from_root();
     0)   6.292 us    |        }
     0)   1.894 us    |        htb_search();
     0)               |        htb_qlen_notify() {
     0)   2.655 us    |          htb_deactivate_prios();
     0)   6.933 us    |        }
     0) + 25.227 us   |      }
     0)   1.983 us    |      blackhole_dequeue();
     0) + 86.553 us   |    }
     0) # 2932.761 us |    qdisc_warn_nonwc();
     0)               |    htb_lookup_leaf() {
     0)               |      BUG_ON();
     ------------------------------------------
    
    The full original bug report can be seen here [1].
    
    We can fix this just by returning NULL instead of the BUG_ON,
    as htb_dequeue_tree returns NULL when htb_lookup_leaf returns
    NULL.
    
    [1] https://lore.kernel.org/netdev/pF5XOOIim0IuEfhI-SOxTgRvNoDwuux7UHKnE_Y5-zVd4wmGvNk2ceHjKb8ORnzw0cGwfmVu42g9dL7XyJLf1NEzaztboTWcm0Ogxuojoeo=@willsroot.io/
    
    Fixes: 512bb43eb542 ("pkt_sched: sch_htb: Optimize WARN_ONs in htb_dequeue_tree() etc.")
    Signed-off-by: William Liu <will@willsroot.io>
    Signed-off-by: Savino Dicanosa <savy@syst3mfailure.io>
    Link: https://patch.msgid.link/20250717022816.221364-1-will@willsroot.io
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/sched: sch_qfq: Fix race condition on qfq_aggregate [+ + +]
Author: Xiang Mei <xmei5@asu.edu>
Date:   Thu Jul 10 03:09:42 2025 -0700

    net/sched: sch_qfq: Fix race condition on qfq_aggregate
    
    [ Upstream commit 5e28d5a3f774f118896aec17a3a20a9c5c9dfc64 ]
    
    A race condition can occur when 'agg' is modified in qfq_change_agg
    (called during qfq_enqueue) while other threads access it
    concurrently. For example, qfq_dump_class may trigger a NULL
    dereference, and qfq_delete_class may cause a use-after-free.
    
    This patch addresses the issue by:
    
    1. Moved qfq_destroy_class into the critical section.
    
    2. Added sch_tree_lock protection to qfq_dump_class and
    qfq_dump_class_stats.
    
    Fixes: 462dbc9101ac ("pkt_sched: QFQ Plus: fair-queueing service at DRR cost")
    Signed-off-by: Xiang Mei <xmei5@asu.edu>
    Reviewed-by: Cong Wang <xiyou.wangcong@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net: bridge: Do not offload IGMP/MLD messages [+ + +]
Author: Joseph Huang <Joseph.Huang@garmin.com>
Date:   Wed Jul 16 11:35:50 2025 -0400

    net: bridge: Do not offload IGMP/MLD messages
    
    [ Upstream commit 683dc24da8bf199bb7446e445ad7f801c79a550e ]
    
    Do not offload IGMP/MLD messages as it could lead to IGMP/MLD Reports
    being unintentionally flooded to Hosts. Instead, let the bridge decide
    where to send these IGMP/MLD messages.
    
    Consider the case where the local host is sending out reports in response
    to a remote querier like the following:
    
           mcast-listener-process (IP_ADD_MEMBERSHIP)
              \
              br0
             /   \
          swp1   swp2
            |     |
      QUERIER     SOME-OTHER-HOST
    
    In the above setup, br0 will want to br_forward() reports for
    mcast-listener-process's group(s) via swp1 to QUERIER; but since the
    source hwdom is 0, the report is eligible for tx offloading, and is
    flooded by hardware to both swp1 and swp2, reaching SOME-OTHER-HOST as
    well. (Example and illustration provided by Tobias.)
    
    Fixes: 472111920f1c ("net: bridge: switchdev: allow the TX data plane forwarding to be offloaded")
    Signed-off-by: Joseph Huang <Joseph.Huang@garmin.com>
    Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://patch.msgid.link/20250716153551.1830255-1-Joseph.Huang@garmin.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: emaclite: Fix missing pointer increment in aligned_read() [+ + +]
Author: Alok Tiwari <alok.a.tiwari@oracle.com>
Date:   Thu Jul 10 10:38:46 2025 -0700

    net: emaclite: Fix missing pointer increment in aligned_read()
    
    [ Upstream commit 7727ec1523d7973defa1dff8f9c0aad288d04008 ]
    
    Add missing post-increment operators for byte pointers in the
    loop that copies remaining bytes in xemaclite_aligned_read().
    Without the increment, the same byte was written repeatedly
    to the destination.
    This update aligns with xemaclite_aligned_write()
    
    Fixes: bb81b2ddfa19 ("net: add Xilinx emac lite device driver")
    Signed-off-by: Alok Tiwari <alok.a.tiwari@oracle.com>
    Link: https://patch.msgid.link/20250710173849.2381003-1-alok.a.tiwari@oracle.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: vlan: fix VLAN 0 refcount imbalance of toggling filtering during runtime [+ + +]
Author: Dong Chenchen <dongchenchen2@huawei.com>
Date:   Wed Jul 16 11:45:03 2025 +0800

    net: vlan: fix VLAN 0 refcount imbalance of toggling filtering during runtime
    
    [ Upstream commit 579d4f9ca9a9a605184a9b162355f6ba131f678d ]
    
    Assuming the "rx-vlan-filter" feature is enabled on a net device, the
    8021q module will automatically add or remove VLAN 0 when the net device
    is put administratively up or down, respectively. There are a couple of
    problems with the above scheme.
    
    The first problem is a memory leak that can happen if the "rx-vlan-filter"
    feature is disabled while the device is running:
    
     # ip link add bond1 up type bond mode 0
     # ethtool -K bond1 rx-vlan-filter off
     # ip link del dev bond1
    
    When the device is put administratively down the "rx-vlan-filter"
    feature is disabled, so the 8021q module will not remove VLAN 0 and the
    memory will be leaked [1].
    
    Another problem that can happen is that the kernel can automatically
    delete VLAN 0 when the device is put administratively down despite not
    adding it when the device was put administratively up since during that
    time the "rx-vlan-filter" feature was disabled. null-ptr-unref or
    bug_on[2] will be triggered by unregister_vlan_dev() for refcount
    imbalance if toggling filtering during runtime:
    
    $ ip link add bond0 type bond mode 0
    $ ip link add link bond0 name vlan0 type vlan id 0 protocol 802.1q
    $ ethtool -K bond0 rx-vlan-filter off
    $ ifconfig bond0 up
    $ ethtool -K bond0 rx-vlan-filter on
    $ ifconfig bond0 down
    $ ip link del vlan0
    
    Root cause is as below:
    step1: add vlan0 for real_dev, such as bond, team.
    register_vlan_dev
        vlan_vid_add(real_dev,htons(ETH_P_8021Q),0) //refcnt=1
    step2: disable vlan filter feature and enable real_dev
    step3: change filter from 0 to 1
    vlan_device_event
        vlan_filter_push_vids
            ndo_vlan_rx_add_vid //No refcnt added to real_dev vlan0
    step4: real_dev down
    vlan_device_event
        vlan_vid_del(dev, htons(ETH_P_8021Q), 0); //refcnt=0
            vlan_info_rcu_free //free vlan0
    step5: delete vlan0
    unregister_vlan_dev
        BUG_ON(!vlan_info); //vlan_info is null
    
    Fix both problems by noting in the VLAN info whether VLAN 0 was
    automatically added upon NETDEV_UP and based on that decide whether it
    should be deleted upon NETDEV_DOWN, regardless of the state of the
    "rx-vlan-filter" feature.
    
    [1]
    unreferenced object 0xffff8880068e3100 (size 256):
      comm "ip", pid 384, jiffies 4296130254
      hex dump (first 32 bytes):
        00 20 30 0d 80 88 ff ff 00 00 00 00 00 00 00 00  . 0.............
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
      backtrace (crc 81ce31fa):
        __kmalloc_cache_noprof+0x2b5/0x340
        vlan_vid_add+0x434/0x940
        vlan_device_event.cold+0x75/0xa8
        notifier_call_chain+0xca/0x150
        __dev_notify_flags+0xe3/0x250
        rtnl_configure_link+0x193/0x260
        rtnl_newlink_create+0x383/0x8e0
        __rtnl_newlink+0x22c/0xa40
        rtnl_newlink+0x627/0xb00
        rtnetlink_rcv_msg+0x6fb/0xb70
        netlink_rcv_skb+0x11f/0x350
        netlink_unicast+0x426/0x710
        netlink_sendmsg+0x75a/0xc20
        __sock_sendmsg+0xc1/0x150
        ____sys_sendmsg+0x5aa/0x7b0
        ___sys_sendmsg+0xfc/0x180
    
    [2]
    kernel BUG at net/8021q/vlan.c:99!
    Oops: invalid opcode: 0000 [#1] SMP KASAN PTI
    CPU: 0 UID: 0 PID: 382 Comm: ip Not tainted 6.16.0-rc3 #61 PREEMPT(voluntary)
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996),
    BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
    RIP: 0010:unregister_vlan_dev (net/8021q/vlan.c:99 (discriminator 1))
    RSP: 0018:ffff88810badf310 EFLAGS: 00010246
    RAX: 0000000000000000 RBX: ffff88810da84000 RCX: ffffffffb47ceb9a
    RDX: dffffc0000000000 RSI: 0000000000000008 RDI: ffff88810e8b43c8
    RBP: 0000000000000000 R08: 0000000000000000 R09: fffffbfff6cefe80
    R10: ffffffffb677f407 R11: ffff88810badf3c0 R12: ffff88810e8b4000
    R13: 0000000000000000 R14: ffff88810642a5c0 R15: 000000000000017e
    FS:  00007f1ff68c20c0(0000) GS:ffff888163a24000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007f1ff5dad240 CR3: 0000000107e56000 CR4: 00000000000006f0
    Call Trace:
     <TASK>
    rtnl_dellink (net/core/rtnetlink.c:3511 net/core/rtnetlink.c:3553)
    rtnetlink_rcv_msg (net/core/rtnetlink.c:6945)
    netlink_rcv_skb (net/netlink/af_netlink.c:2535)
    netlink_unicast (net/netlink/af_netlink.c:1314 net/netlink/af_netlink.c:1339)
    netlink_sendmsg (net/netlink/af_netlink.c:1883)
    ____sys_sendmsg (net/socket.c:712 net/socket.c:727 net/socket.c:2566)
    ___sys_sendmsg (net/socket.c:2622)
    __sys_sendmsg (net/socket.c:2652)
    do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
    
    Fixes: ad1afb003939 ("vlan_dev: VLAN 0 should be treated as "no vlan tag" (802.1p packet)")
    Reported-by: syzbot+a8b046e462915c65b10b@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=a8b046e462915c65b10b
    Suggested-by: Ido Schimmel <idosch@idosch.org>
    Signed-off-by: Dong Chenchen <dongchenchen2@huawei.com>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://patch.msgid.link/20250716034504.2285203-2-dongchenchen2@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netfilter: nf_conntrack: fix crash due to removal of uninitialised entry [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Wed Jul 16 20:39:14 2025 +0200

    netfilter: nf_conntrack: fix crash due to removal of uninitialised entry
    
    [ Upstream commit 2d72afb340657f03f7261e9243b44457a9228ac7 ]
    
    A crash in conntrack was reported while trying to unlink the conntrack
    entry from the hash bucket list:
        [exception RIP: __nf_ct_delete_from_lists+172]
        [..]
     #7 [ff539b5a2b043aa0] nf_ct_delete at ffffffffc124d421 [nf_conntrack]
     #8 [ff539b5a2b043ad0] nf_ct_gc_expired at ffffffffc124d999 [nf_conntrack]
     #9 [ff539b5a2b043ae0] __nf_conntrack_find_get at ffffffffc124efbc [nf_conntrack]
        [..]
    
    The nf_conn struct is marked as allocated from slab but appears to be in
    a partially initialised state:
    
     ct hlist pointer is garbage; looks like the ct hash value
     (hence crash).
     ct->status is equal to IPS_CONFIRMED|IPS_DYING, which is expected
     ct->timeout is 30000 (=30s), which is unexpected.
    
    Everything else looks like normal udp conntrack entry.  If we ignore
    ct->status and pretend its 0, the entry matches those that are newly
    allocated but not yet inserted into the hash:
      - ct hlist pointers are overloaded and store/cache the raw tuple hash
      - ct->timeout matches the relative time expected for a new udp flow
        rather than the absolute 'jiffies' value.
    
    If it were not for the presence of IPS_CONFIRMED,
    __nf_conntrack_find_get() would have skipped the entry.
    
    Theory is that we did hit following race:
    
    cpu x                   cpu y                   cpu z
     found entry E          found entry E
     E is expired           <preemption>
     nf_ct_delete()
     return E to rcu slab
                                            init_conntrack
                                            E is re-inited,
                                            ct->status set to 0
                                            reply tuplehash hnnode.pprev
                                            stores hash value.
    
    cpu y found E right before it was deleted on cpu x.
    E is now re-inited on cpu z.  cpu y was preempted before
    checking for expiry and/or confirm bit.
    
                                            ->refcnt set to 1
                                            E now owned by skb
                                            ->timeout set to 30000
    
    If cpu y were to resume now, it would observe E as
    expired but would skip E due to missing CONFIRMED bit.
    
                                            nf_conntrack_confirm gets called
                                            sets: ct->status |= CONFIRMED
                                            This is wrong: E is not yet added
                                            to hashtable.
    
    cpu y resumes, it observes E as expired but CONFIRMED:
                            <resumes>
                            nf_ct_expired()
                             -> yes (ct->timeout is 30s)
                            confirmed bit set.
    
    cpu y will try to delete E from the hashtable:
                            nf_ct_delete() -> set DYING bit
                            __nf_ct_delete_from_lists
    
    Even this scenario doesn't guarantee a crash:
    cpu z still holds the table bucket lock(s) so y blocks:
    
                            wait for spinlock held by z
    
                                            CONFIRMED is set but there is no
                                            guarantee ct will be added to hash:
                                            "chaintoolong" or "clash resolution"
                                            logic both skip the insert step.
                                            reply hnnode.pprev still stores the
                                            hash value.
    
                                            unlocks spinlock
                                            return NF_DROP
                            <unblocks, then
                             crashes on hlist_nulls_del_rcu pprev>
    
    In case CPU z does insert the entry into the hashtable, cpu y will unlink
    E again right away but no crash occurs.
    
    Without 'cpu y' race, 'garbage' hlist is of no consequence:
    ct refcnt remains at 1, eventually skb will be free'd and E gets
    destroyed via: nf_conntrack_put -> nf_conntrack_destroy -> nf_ct_destroy.
    
    To resolve this, move the IPS_CONFIRMED assignment after the table
    insertion but before the unlock.
    
    Pablo points out that the confirm-bit-store could be reordered to happen
    before hlist add resp. the timeout fixup, so switch to set_bit and
    before_atomic memory barrier to prevent this.
    
    It doesn't matter if other CPUs can observe a newly inserted entry right
    before the CONFIRMED bit was set:
    
    Such event cannot be distinguished from above "E is the old incarnation"
    case: the entry will be skipped.
    
    Also change nf_ct_should_gc() to first check the confirmed bit.
    
    The gc sequence is:
     1. Check if entry has expired, if not skip to next entry
     2. Obtain a reference to the expired entry.
     3. Call nf_ct_should_gc() to double-check step 1.
    
    nf_ct_should_gc() is thus called only for entries that already failed an
    expiry check. After this patch, once the confirmed bit check passes
    ct->timeout has been altered to reflect the absolute 'best before' date
    instead of a relative time.  Step 3 will therefore not remove the entry.
    
    Without this change to nf_ct_should_gc() we could still get this sequence:
    
     1. Check if entry has expired.
     2. Obtain a reference.
     3. Call nf_ct_should_gc() to double-check step 1:
        4 - entry is still observed as expired
        5 - meanwhile, ct->timeout is corrected to absolute value on other CPU
          and confirm bit gets set
        6 - confirm bit is seen
        7 - valid entry is removed again
    
    First do check 6), then 4) so the gc expiry check always picks up either
    confirmed bit unset (entry gets skipped) or expiry re-check failure for
    re-inited conntrack objects.
    
    This change cannot be backported to releases before 5.19. Without
    commit 8a75a2c17410 ("netfilter: conntrack: remove unconfirmed list")
    |= IPS_CONFIRMED line cannot be moved without further changes.
    
    Cc: Razvan Cojocaru <rzvncj@gmail.com>
    Link: https://lore.kernel.org/netfilter-devel/20250627142758.25664-1-fw@strlen.de/
    Link: https://lore.kernel.org/netfilter-devel/4239da15-83ff-4ca4-939d-faef283471bb@gmail.com/
    Fixes: 1397af5bfd7d ("netfilter: conntrack: remove the percpu dying list")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvme: fix misaccounting of nvme-mpath inflight I/O [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Tue Jul 15 09:28:12 2025 +0800

    nvme: fix misaccounting of nvme-mpath inflight I/O
    
    [ Upstream commit 71257925e83eae1cb6913d65ca71927d2220e6d1 ]
    
    Procedures for nvme-mpath IO accounting:
    
     1) initialize nvme_request and clear flags;
     2) set NVME_MPATH_IO_STATS and increase inflight counter when IO
        started;
     3) check NVME_MPATH_IO_STATS and decrease inflight counter when IO is
        done;
    
    However, for the case nvme_fail_nonready_command(), both step 1) and 2)
    are skipped, and if old nvme_request set NVME_MPATH_IO_STATS and then
    request is reused, step 3) will still be executed, causing inflight I/O
    counter to be negative.
    
    Fix the problem by clearing nvme_request in nvme_fail_nonready_command().
    
    Fixes: ea5e5f42cd2c ("nvme-fabrics: avoid double completions in nvmf_fail_nonready_command")
    Reported-by: Yi Zhang <yi.zhang@redhat.com>
    Closes: https://lore.kernel.org/all/CAHj4cs_+dauobyYyP805t33WMJVzOWj=7+51p4_j9rA63D9sog@mail.gmail.com/
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvmem: layouts: u-boot-env: remove crc32 endianness conversion [+ + +]
Author: Michael C. Pratt <mcpratt@pm.me>
Date:   Wed Jul 16 15:42:10 2025 +0100

    nvmem: layouts: u-boot-env: remove crc32 endianness conversion
    
    commit 2d7521aa26ec2dc8b877bb2d1f2611a2df49a3cf upstream.
    
    On 11 Oct 2022, it was reported that the crc32 verification
    of the u-boot environment failed only on big-endian systems
    for the u-boot-env nvmem layout driver with the following error.
    
      Invalid calculated CRC32: 0x88cd6f09 (expected: 0x096fcd88)
    
    This problem has been present since the driver was introduced,
    and before it was made into a layout driver.
    
    The suggested fix at the time was to use further endianness
    conversion macros in order to have both the stored and calculated
    crc32 values to compare always represented in the system's endianness.
    This was not accepted due to sparse warnings
    and some disagreement on how to handle the situation.
    Later on in a newer revision of the patch, it was proposed to use
    cpu_to_le32() for both values to compare instead of le32_to_cpu()
    and store the values as __le32 type to remove compilation errors.
    
    The necessity of this is based on the assumption that the use of crc32()
    requires endianness conversion because the algorithm uses little-endian,
    however, this does not prove to be the case and the issue is unrelated.
    
    Upon inspecting the current kernel code,
    there already is an existing use of le32_to_cpu() in this driver,
    which suggests there already is special handling for big-endian systems,
    however, it is big-endian systems that have the problem.
    
    This, being the only functional difference between architectures
    in the driver combined with the fact that the suggested fix
    was to use the exact same endianness conversion for the values
    brings up the possibility that it was not necessary to begin with,
    as the same endianness conversion for two values expected to be the same
    is expected to be equivalent to no conversion at all.
    
    After inspecting the u-boot environment of devices of both endianness
    and trying to remove the existing endianness conversion,
    the problem is resolved in an equivalent way as the other suggested fixes.
    
    Ultimately, it seems that u-boot is agnostic to endianness
    at least for the purpose of environment variables.
    In other words, u-boot reads and writes the stored crc32 value
    with the same endianness that the crc32 value is calculated with
    in whichever endianness a certain architecture runs on.
    
    Therefore, the u-boot-env driver does not need to convert endianness.
    Remove the usage of endianness macros in the u-boot-env driver,
    and change the type of local variables to maintain the same return type.
    
    If there is a special situation in the case of endianness,
    it would be a corner case and should be handled by a unique "compatible".
    
    Even though it is not necessary to use endianness conversion macros here,
    it may be useful to use them in the future for consistent error printing.
    
    Fixes: d5542923f200 ("nvmem: add driver handling U-Boot environment variables")
    Reported-by: INAGAKI Hiroshi <musashino.open@gmail.com>
    Link: https://lore.kernel.org/all/20221011024928.1807-1-musashino.open@gmail.com
    Cc: stable@vger.kernel.org
    Signed-off-by: "Michael C. Pratt" <mcpratt@pm.me>
    Signed-off-by: Srinivas Kandagatla <srini@kernel.org>
    Link: https://lore.kernel.org/r/20250716144210.4804-1-srini@kernel.org
    [ applied changes to drivers/nvmem/u-boot-env.c before code was moved to
      drivers/nvmem/layouts/u-boot-env.c ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
pch_uart: Fix dma_sync_sg_for_device() nents value [+ + +]
Author: Thomas Fourier <fourier.thomas@gmail.com>
Date:   Tue Jul 1 13:34:52 2025 +0200

    pch_uart: Fix dma_sync_sg_for_device() nents value
    
    commit 6c0e9f05c9d7875995b0e92ace71be947f280bbd upstream.
    
    The dma_sync_sg_for_device() functions should be called with the same
    nents as the dma_map_sg(), not the value the map function returned
    according to the documentation in Documentation/core-api/dma-api.rst:450:
            With the sync_sg API, all the parameters must be the same
            as those passed into the sg mapping API.
    
    Fixes: da3564ee027e ("pch_uart: add multi-scatter processing")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Thomas Fourier <fourier.thomas@gmail.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20250701113452.18590-2-fourier.thomas@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
phonet/pep: Move call to pn_skb_get_dst_sockaddr() earlier in pep_sock_accept() [+ + +]
Author: Nathan Chancellor <nathan@kernel.org>
Date:   Tue Jul 15 16:15:40 2025 -0700

    phonet/pep: Move call to pn_skb_get_dst_sockaddr() earlier in pep_sock_accept()
    
    commit 17ba793f381eb813596d6de1cc6820bcbda5ed8b upstream.
    
    A new warning in clang [1] points out a place in pep_sock_accept() where
    dst is uninitialized then passed as a const pointer to pep_find_pipe():
    
      net/phonet/pep.c:829:37: error: variable 'dst' is uninitialized when passed as a const pointer argument here [-Werror,-Wuninitialized-const-pointer]
        829 |         newsk = pep_find_pipe(&pn->hlist, &dst, pipe_handle);
            |                                            ^~~:
    
    Move the call to pn_skb_get_dst_sockaddr(), which initializes dst, to
    before the call to pep_find_pipe(), so that dst is consistently used
    initialized throughout the function.
    
    Cc: stable@vger.kernel.org
    Fixes: f7ae8d59f661 ("Phonet: allocate sock from accept syscall rather than soft IRQ")
    Link: https://github.com/llvm/llvm-project/commit/00dacf8c22f065cb52efb14cd091d441f19b319e [1]
    Closes: https://github.com/ClangBuiltLinux/linux/issues/2101
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    Link: https://patch.msgid.link/20250715-net-phonet-fix-uninit-const-pointer-v1-1-8efd1bd188b3@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
phy: tegra: xusb: Fix unbalanced regulator disable in UTMI PHY mode [+ + +]
Author: Wayne Chang <waynec@nvidia.com>
Date:   Fri May 2 17:26:06 2025 +0800

    phy: tegra: xusb: Fix unbalanced regulator disable in UTMI PHY mode
    
    commit cefc1caee9dd06c69e2d807edc5949b329f52b22 upstream.
    
    When transitioning from USB_ROLE_DEVICE to USB_ROLE_NONE, the code
    assumed that the regulator should be disabled. However, if the regulator
    is marked as always-on, regulator_is_enabled() continues to return true,
    leading to an incorrect attempt to disable a regulator which is not
    enabled.
    
    This can result in warnings such as:
    
    [  250.155624] WARNING: CPU: 1 PID: 7326 at drivers/regulator/core.c:3004
    _regulator_disable+0xe4/0x1a0
    [  250.155652] unbalanced disables for VIN_SYS_5V0
    
    To fix this, we move the regulator control logic into
    tegra186_xusb_padctl_id_override() function since it's directly related
    to the ID override state. The regulator is now only disabled when the role
    transitions from USB_ROLE_HOST to USB_ROLE_NONE, by checking the VBUS_ID
    register. This ensures that regulator enable/disable operations are
    properly balanced and only occur when actually transitioning to/from host
    mode.
    
    Fixes: 49d46e3c7e59 ("phy: tegra: xusb: Add set_mode support for UTMI phy on Tegra186")
    Cc: stable@vger.kernel.org
    Signed-off-by: Wayne Chang <waynec@nvidia.com>
    Reviewed-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Link: https://lore.kernel.org/r/20250502092606.2275682-1-waynec@nvidia.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
pmdomain: governor: Consider CPU latency tolerance from pm_domain_cpu_gov [+ + +]
Author: Maulik Shah <maulik.shah@oss.qualcomm.com>
Date:   Wed Jul 9 14:00:11 2025 +0530

    pmdomain: governor: Consider CPU latency tolerance from pm_domain_cpu_gov
    
    commit 500ba33284416255b9a5b50ace24470b6fe77ea5 upstream.
    
    pm_domain_cpu_gov is selecting a cluster idle state but does not consider
    latency tolerance of child CPUs. This results in deeper cluster idle state
    whose latency does not meet latency tolerance requirement.
    
    Select deeper idle state only if global and device latency tolerance of all
    child CPUs meet.
    
    Test results on SM8750 with 300 usec PM-QoS on CPU0 which is less than
    domain idle state entry (2150) + exit (1983) usec latency mentioned in
    devicetree, demonstrate the issue.
    
            # echo 300 > /sys/devices/system/cpu/cpu0/power/pm_qos_resume_latency_us
    
    Before: (Usage is incrementing)
    ======
            # cat /sys/kernel/debug/pm_genpd/power-domain-cluster0/idle_states
            State          Time Spent(ms) Usage      Rejected   Above      Below
            S0             29817          537        8          270        0
    
            # cat /sys/kernel/debug/pm_genpd/power-domain-cluster0/idle_states
            State          Time Spent(ms) Usage      Rejected   Above      Below
            S0             30348          542        8          271        0
    
    After: (Usage is not incrementing due to latency tolerance)
    ======
            # cat /sys/kernel/debug/pm_genpd/power-domain-cluster0/idle_states
            State          Time Spent(ms) Usage      Rejected   Above      Below
            S0             39319          626        14         307        0
    
            # cat /sys/kernel/debug/pm_genpd/power-domain-cluster0/idle_states
            State          Time Spent(ms) Usage      Rejected   Above      Below
            S0             39319          626        14         307        0
    
    Signed-off-by: Maulik Shah <maulik.shah@oss.qualcomm.com>
    Fixes: e94999688e3a ("PM / Domains: Add genpd governor for CPUs")
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20250709-pmdomain_qos-v2-1-976b12257899@oss.qualcomm.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "cgroup_freezer: cgroup_freezing: Check if not frozen" [+ + +]
Author: Chen Ridong <chenridong@huawei.com>
Date:   Thu Jul 17 08:55:50 2025 +0000

    Revert "cgroup_freezer: cgroup_freezing: Check if not frozen"
    
    [ Upstream commit 14a67b42cb6f3ab66f41603c062c5056d32ea7dd ]
    
    This reverts commit cff5f49d433fcd0063c8be7dd08fa5bf190c6c37.
    
    Commit cff5f49d433f ("cgroup_freezer: cgroup_freezing: Check if not
    frozen") modified the cgroup_freezing() logic to verify that the FROZEN
    flag is not set, affecting the return value of the freezing() function,
    in order to address a warning in __thaw_task.
    
    A race condition exists that may allow tasks to escape being frozen. The
    following scenario demonstrates this issue:
    
    CPU 0 (get_signal path)         CPU 1 (freezer.state reader)
    try_to_freeze                   read freezer.state
    __refrigerator                  freezer_read
                                    update_if_frozen
    WRITE_ONCE(current->__state, TASK_FROZEN);
                                    ...
                                    /* Task is now marked frozen */
                                    /* frozen(task) == true */
                                    /* Assuming other tasks are frozen */
                                    freezer->state |= CGROUP_FROZEN;
    /* freezing(current) returns false */
    /* because cgroup is frozen (not freezing) */
    break out
    __set_current_state(TASK_RUNNING);
    /* Bug: Task resumes running when it should remain frozen */
    
    The existing !frozen(p) check in __thaw_task makes the
    WARN_ON_ONCE(freezing(p)) warning redundant. Removing this warning enables
    reverting the commit cff5f49d433f ("cgroup_freezer: cgroup_freezing: Check
    if not frozen") to resolve the issue.
    
    The warning has been removed in the previous patch. This patch revert the
    commit cff5f49d433f ("cgroup_freezer: cgroup_freezing: Check if not
    frozen") to complete the fix.
    
    Fixes: cff5f49d433f ("cgroup_freezer: cgroup_freezing: Check if not frozen")
    Reported-by: Zhong Jiawei<zhongjiawei1@huawei.com>
    Signed-off-by: Chen Ridong <chenridong@huawei.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rpl: Fix use-after-free in rpl_do_srh_inline(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@google.com>
Date:   Fri Jul 11 18:21:19 2025 +0000

    rpl: Fix use-after-free in rpl_do_srh_inline().
    
    [ Upstream commit b640daa2822a39ff76e70200cb2b7b892b896dce ]
    
    Running lwt_dst_cache_ref_loop.sh in selftest with KASAN triggers
    the splat below [0].
    
    rpl_do_srh_inline() fetches ipv6_hdr(skb) and accesses it after
    skb_cow_head(), which is illegal as the header could be freed then.
    
    Let's fix it by making oldhdr to a local struct instead of a pointer.
    
    [0]:
    [root@fedora net]# ./lwt_dst_cache_ref_loop.sh
    ...
    TEST: rpl (input)
    [   57.631529] ==================================================================
    BUG: KASAN: slab-use-after-free in rpl_do_srh_inline.isra.0 (net/ipv6/rpl_iptunnel.c:174)
    Read of size 40 at addr ffff888122bf96d8 by task ping6/1543
    
    CPU: 50 UID: 0 PID: 1543 Comm: ping6 Not tainted 6.16.0-rc5-01302-gfadd1e6231b1 #23 PREEMPT(voluntary)
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    Call Trace:
     <IRQ>
     dump_stack_lvl (lib/dump_stack.c:122)
     print_report (mm/kasan/report.c:409 mm/kasan/report.c:521)
     kasan_report (mm/kasan/report.c:221 mm/kasan/report.c:636)
     kasan_check_range (mm/kasan/generic.c:175 (discriminator 1) mm/kasan/generic.c:189 (discriminator 1))
     __asan_memmove (mm/kasan/shadow.c:94 (discriminator 2))
     rpl_do_srh_inline.isra.0 (net/ipv6/rpl_iptunnel.c:174)
     rpl_input (net/ipv6/rpl_iptunnel.c:201 net/ipv6/rpl_iptunnel.c:282)
     lwtunnel_input (net/core/lwtunnel.c:459)
     ipv6_rcv (./include/net/dst.h:471 (discriminator 1) ./include/net/dst.h:469 (discriminator 1) net/ipv6/ip6_input.c:79 (discriminator 1) ./include/linux/netfilter.h:317 (discriminator 1) ./include/linux/netfilter.h:311 (discriminator 1) net/ipv6/ip6_input.c:311 (discriminator 1))
     __netif_receive_skb_one_core (net/core/dev.c:5967)
     process_backlog (./include/linux/rcupdate.h:869 net/core/dev.c:6440)
     __napi_poll.constprop.0 (net/core/dev.c:7452)
     net_rx_action (net/core/dev.c:7518 net/core/dev.c:7643)
     handle_softirqs (kernel/softirq.c:579)
     do_softirq (kernel/softirq.c:480 (discriminator 20))
     </IRQ>
     <TASK>
     __local_bh_enable_ip (kernel/softirq.c:407)
     __dev_queue_xmit (net/core/dev.c:4740)
     ip6_finish_output2 (./include/linux/netdevice.h:3358 ./include/net/neighbour.h:526 ./include/net/neighbour.h:540 net/ipv6/ip6_output.c:141)
     ip6_finish_output (net/ipv6/ip6_output.c:215 net/ipv6/ip6_output.c:226)
     ip6_output (./include/linux/netfilter.h:306 net/ipv6/ip6_output.c:248)
     ip6_send_skb (net/ipv6/ip6_output.c:1983)
     rawv6_sendmsg (net/ipv6/raw.c:588 net/ipv6/raw.c:918)
     __sys_sendto (net/socket.c:714 (discriminator 1) net/socket.c:729 (discriminator 1) net/socket.c:2228 (discriminator 1))
     __x64_sys_sendto (net/socket.c:2231)
     do_syscall_64 (arch/x86/entry/syscall_64.c:63 (discriminator 1) arch/x86/entry/syscall_64.c:94 (discriminator 1))
     entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
    RIP: 0033:0x7f68cffb2a06
    Code: 5d e8 41 8b 93 08 03 00 00 59 5e 48 83 f8 fc 75 19 83 e2 39 83 fa 08 75 11 e8 26 ff ff ff 66 0f 1f 44 00 00 48 8b 45 10 0f 05 <48> 8b 5d f8 c9 c3 0f 1f 40 00 f3 0f 1e fa 55 48 89 e5 48 83 ec 08
    RSP: 002b:00007ffefb7c53d0 EFLAGS: 00000202 ORIG_RAX: 000000000000002c
    RAX: ffffffffffffffda RBX: 0000564cd69f10a0 RCX: 00007f68cffb2a06
    RDX: 0000000000000040 RSI: 0000564cd69f10a4 RDI: 0000000000000003
    RBP: 00007ffefb7c53f0 R08: 0000564cd6a032ac R09: 000000000000001c
    R10: 0000000000000000 R11: 0000000000000202 R12: 0000564cd69f10a4
    R13: 0000000000000040 R14: 00007ffefb7c66e0 R15: 0000564cd69f10a0
     </TASK>
    
    Allocated by task 1543:
     kasan_save_stack (mm/kasan/common.c:48)
     kasan_save_track (mm/kasan/common.c:60 (discriminator 1) mm/kasan/common.c:69 (discriminator 1))
     __kasan_slab_alloc (mm/kasan/common.c:319 mm/kasan/common.c:345)
     kmem_cache_alloc_node_noprof (./include/linux/kasan.h:250 mm/slub.c:4148 mm/slub.c:4197 mm/slub.c:4249)
     kmalloc_reserve (net/core/skbuff.c:581 (discriminator 88))
     __alloc_skb (net/core/skbuff.c:669)
     __ip6_append_data (net/ipv6/ip6_output.c:1672 (discriminator 1))
     ip6_append_data (net/ipv6/ip6_output.c:1859)
     rawv6_sendmsg (net/ipv6/raw.c:911)
     __sys_sendto (net/socket.c:714 (discriminator 1) net/socket.c:729 (discriminator 1) net/socket.c:2228 (discriminator 1))
     __x64_sys_sendto (net/socket.c:2231)
     do_syscall_64 (arch/x86/entry/syscall_64.c:63 (discriminator 1) arch/x86/entry/syscall_64.c:94 (discriminator 1))
     entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
    
    Freed by task 1543:
     kasan_save_stack (mm/kasan/common.c:48)
     kasan_save_track (mm/kasan/common.c:60 (discriminator 1) mm/kasan/common.c:69 (discriminator 1))
     kasan_save_free_info (mm/kasan/generic.c:579 (discriminator 1))
     __kasan_slab_free (mm/kasan/common.c:271)
     kmem_cache_free (mm/slub.c:4643 (discriminator 3) mm/slub.c:4745 (discriminator 3))
     pskb_expand_head (net/core/skbuff.c:2274)
     rpl_do_srh_inline.isra.0 (net/ipv6/rpl_iptunnel.c:158 (discriminator 1))
     rpl_input (net/ipv6/rpl_iptunnel.c:201 net/ipv6/rpl_iptunnel.c:282)
     lwtunnel_input (net/core/lwtunnel.c:459)
     ipv6_rcv (./include/net/dst.h:471 (discriminator 1) ./include/net/dst.h:469 (discriminator 1) net/ipv6/ip6_input.c:79 (discriminator 1) ./include/linux/netfilter.h:317 (discriminator 1) ./include/linux/netfilter.h:311 (discriminator 1) net/ipv6/ip6_input.c:311 (discriminator 1))
     __netif_receive_skb_one_core (net/core/dev.c:5967)
     process_backlog (./include/linux/rcupdate.h:869 net/core/dev.c:6440)
     __napi_poll.constprop.0 (net/core/dev.c:7452)
     net_rx_action (net/core/dev.c:7518 net/core/dev.c:7643)
     handle_softirqs (kernel/softirq.c:579)
     do_softirq (kernel/softirq.c:480 (discriminator 20))
     __local_bh_enable_ip (kernel/softirq.c:407)
     __dev_queue_xmit (net/core/dev.c:4740)
     ip6_finish_output2 (./include/linux/netdevice.h:3358 ./include/net/neighbour.h:526 ./include/net/neighbour.h:540 net/ipv6/ip6_output.c:141)
     ip6_finish_output (net/ipv6/ip6_output.c:215 net/ipv6/ip6_output.c:226)
     ip6_output (./include/linux/netfilter.h:306 net/ipv6/ip6_output.c:248)
     ip6_send_skb (net/ipv6/ip6_output.c:1983)
     rawv6_sendmsg (net/ipv6/raw.c:588 net/ipv6/raw.c:918)
     __sys_sendto (net/socket.c:714 (discriminator 1) net/socket.c:729 (discriminator 1) net/socket.c:2228 (discriminator 1))
     __x64_sys_sendto (net/socket.c:2231)
     do_syscall_64 (arch/x86/entry/syscall_64.c:63 (discriminator 1) arch/x86/entry/syscall_64.c:94 (discriminator 1))
     entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
    
    The buggy address belongs to the object at ffff888122bf96c0
     which belongs to the cache skbuff_small_head of size 704
    The buggy address is located 24 bytes inside of
     freed 704-byte region [ffff888122bf96c0, ffff888122bf9980)
    
    The buggy address belongs to the physical page:
    page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x122bf8
    head: order:3 mapcount:0 entire_mapcount:0 nr_pages_mapped:0 pincount:0
    flags: 0x200000000000040(head|node=0|zone=2)
    page_type: f5(slab)
    raw: 0200000000000040 ffff888101fc0a00 ffffea000464dc00 0000000000000002
    raw: 0000000000000000 0000000080270027 00000000f5000000 0000000000000000
    head: 0200000000000040 ffff888101fc0a00 ffffea000464dc00 0000000000000002
    head: 0000000000000000 0000000080270027 00000000f5000000 0000000000000000
    head: 0200000000000003 ffffea00048afe01 00000000ffffffff 00000000ffffffff
    head: 0000000000000000 0000000000000000 00000000ffffffff 0000000000000000
    page dumped because: kasan: bad access detected
    
    Memory state around the buggy address:
     ffff888122bf9580: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff888122bf9600: fb fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
    >ffff888122bf9680: fc fc fc fc fc fc fc fc fa fb fb fb fb fb fb fb
                                                        ^
     ffff888122bf9700: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff888122bf9780: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    
    Fixes: a7a29f9c361f8 ("net: ipv6: add rpl sr tunnel")
    Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sched: Change nr_uninterruptible type to unsigned long [+ + +]
Author: Aruna Ramakrishna <aruna.ramakrishna@oracle.com>
Date:   Wed Jul 9 17:33:28 2025 +0000

    sched: Change nr_uninterruptible type to unsigned long
    
    commit 36569780b0d64de283f9d6c2195fd1a43e221ee8 upstream.
    
    The commit e6fe3f422be1 ("sched: Make multiple runqueue task counters
    32-bit") changed nr_uninterruptible to an unsigned int. But the
    nr_uninterruptible values for each of the CPU runqueues can grow to
    large numbers, sometimes exceeding INT_MAX. This is valid, if, over
    time, a large number of tasks are migrated off of one CPU after going
    into an uninterruptible state. Only the sum of all nr_interruptible
    values across all CPUs yields the correct result, as explained in a
    comment in kernel/sched/loadavg.c.
    
    Change the type of nr_uninterruptible back to unsigned long to prevent
    overflows, and thus the miscalculation of load average.
    
    Fixes: e6fe3f422be1 ("sched: Make multiple runqueue task counters 32-bit")
    
    Signed-off-by: Aruna Ramakrishna <aruna.ramakrishna@oracle.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/20250709173328.606794-1-aruna.ramakrishna@oracle.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
selftests: net: increase inter-packet timeout in udpgro.sh [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Thu Jul 10 18:04:50 2025 +0200

    selftests: net: increase inter-packet timeout in udpgro.sh
    
    [ Upstream commit 0e9418961f897be59b1fab6e31ae1b09a0bae902 ]
    
    The mentioned test is not very stable when running on top of
    debug kernel build. Increase the inter-packet timeout to allow
    more slack in such environments.
    
    Fixes: 3327a9c46352 ("selftests: add functionals test for UDP GRO")
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/b0370c06ddb3235debf642c17de0284b2cd3c652.1752163107.git.pabeni@redhat.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
smb: client: fix use-after-free in cifs_oplock_break [+ + +]
Author: Wang Zhaolong <wangzhaolong@huaweicloud.com>
Date:   Mon Jul 7 09:09:26 2025 +0800

    smb: client: fix use-after-free in cifs_oplock_break
    
    [ Upstream commit 705c79101ccf9edea5a00d761491a03ced314210 ]
    
    A race condition can occur in cifs_oplock_break() leading to a
    use-after-free of the cinode structure when unmounting:
    
      cifs_oplock_break()
        _cifsFileInfo_put(cfile)
          cifsFileInfo_put_final()
            cifs_sb_deactive()
              [last ref, start releasing sb]
                kill_sb()
                  kill_anon_super()
                    generic_shutdown_super()
                      evict_inodes()
                        dispose_list()
                          evict()
                            destroy_inode()
                              call_rcu(&inode->i_rcu, i_callback)
        spin_lock(&cinode->open_file_lock)  <- OK
                                [later] i_callback()
                                  cifs_free_inode()
                                    kmem_cache_free(cinode)
        spin_unlock(&cinode->open_file_lock)  <- UAF
        cifs_done_oplock_break(cinode)       <- UAF
    
    The issue occurs when umount has already released its reference to the
    superblock. When _cifsFileInfo_put() calls cifs_sb_deactive(), this
    releases the last reference, triggering the immediate cleanup of all
    inodes under RCU. However, cifs_oplock_break() continues to access the
    cinode after this point, resulting in use-after-free.
    
    Fix this by holding an extra reference to the superblock during the
    entire oplock break operation. This ensures that the superblock and
    its inodes remain valid until the oplock break completes.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=220309
    Fixes: b98749cac4a6 ("CIFS: keep FileInfo handle live during oplock break")
    Reviewed-by: Paulo Alcantara (Red Hat) <pc@manguebit.org>
    Signed-off-by: Wang Zhaolong <wangzhaolong@huaweicloud.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

smb: client: fix use-after-free in crypt_message when using async crypto [+ + +]
Author: Wang Zhaolong <wangzhaolong@huaweicloud.com>
Date:   Sat Jul 5 10:51:18 2025 +0800

    smb: client: fix use-after-free in crypt_message when using async crypto
    
    commit b220bed63330c0e1733dc06ea8e75d5b9962b6b6 upstream.
    
    The CVE-2024-50047 fix removed asynchronous crypto handling from
    crypt_message(), assuming all crypto operations are synchronous.
    However, when hardware crypto accelerators are used, this can cause
    use-after-free crashes:
    
      crypt_message()
        // Allocate the creq buffer containing the req
        creq = smb2_get_aead_req(..., &req);
    
        // Async encryption returns -EINPROGRESS immediately
        rc = enc ? crypto_aead_encrypt(req) : crypto_aead_decrypt(req);
    
        // Free creq while async operation is still in progress
        kvfree_sensitive(creq, ...);
    
    Hardware crypto modules often implement async AEAD operations for
    performance. When crypto_aead_encrypt/decrypt() returns -EINPROGRESS,
    the operation completes asynchronously. Without crypto_wait_req(),
    the function immediately frees the request buffer, leading to crashes
    when the driver later accesses the freed memory.
    
    This results in a use-after-free condition when the hardware crypto
    driver later accesses the freed request structure, leading to kernel
    crashes with NULL pointer dereferences.
    
    The issue occurs because crypto_alloc_aead() with mask=0 doesn't
    guarantee synchronous operation. Even without CRYPTO_ALG_ASYNC in
    the mask, async implementations can be selected.
    
    Fix by restoring the async crypto handling:
    - DECLARE_CRYPTO_WAIT(wait) for completion tracking
    - aead_request_set_callback() for async completion notification
    - crypto_wait_req() to wait for operation completion
    
    This ensures the request buffer isn't freed until the crypto operation
    completes, whether synchronous or asynchronous, while preserving the
    CVE-2024-50047 fix.
    
    Fixes: b0abcd65ec54 ("smb: client: fix UAF in async decryption")
    Link: https://lore.kernel.org/all/8b784a13-87b0-4131-9ff9-7a8993538749@huaweicloud.com/
    Cc: stable@vger.kernel.org
    Reviewed-by: Paulo Alcantara (Red Hat) <pc@manguebit.org>
    Signed-off-by: Wang Zhaolong <wangzhaolong@huaweicloud.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
soc: aspeed: lpc-snoop: Cleanup resources in stack-order [+ + +]
Author: Andrew Jeffery <andrew@codeconstruct.com.au>
Date:   Mon Jun 16 22:43:38 2025 +0930

    soc: aspeed: lpc-snoop: Cleanup resources in stack-order
    
    commit 8481d59be606d2338dbfe14b04cdbd1a3402c150 upstream.
    
    Free the kfifo after unregistering the miscdev in
    aspeed_lpc_disable_snoop() as the kfifo is initialised before the
    miscdev in aspeed_lpc_enable_snoop().
    
    Fixes: 3772e5da4454 ("drivers/misc: Aspeed LPC snoop output using misc chardev")
    Cc: stable@vger.kernel.org
    Cc: Jean Delvare <jdelvare@suse.de>
    Acked-by: Jean Delvare <jdelvare@suse.de>
    Link: https://patch.msgid.link/20250616-aspeed-lpc-snoop-fixes-v2-1-3cdd59c934d3@codeconstruct.com.au
    Signed-off-by: Andrew Jeffery <andrew@codeconstruct.com.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

soc: aspeed: lpc-snoop: Don't disable channels that aren't enabled [+ + +]
Author: Andrew Jeffery <andrew@codeconstruct.com.au>
Date:   Mon Jun 16 22:43:39 2025 +0930

    soc: aspeed: lpc-snoop: Don't disable channels that aren't enabled
    
    commit 56448e78a6bb4e1a8528a0e2efe94eff0400c247 upstream.
    
    Mitigate e.g. the following:
    
        # echo 1e789080.lpc-snoop > /sys/bus/platform/drivers/aspeed-lpc-snoop/unbind
        ...
        [  120.363594] Unable to handle kernel NULL pointer dereference at virtual address 00000004 when write
        [  120.373866] [00000004] *pgd=00000000
        [  120.377910] Internal error: Oops: 805 [#1] SMP ARM
        [  120.383306] CPU: 1 UID: 0 PID: 315 Comm: sh Not tainted 6.15.0-rc1-00009-g926217bc7d7d-dirty #20 NONE
        ...
        [  120.679543] Call trace:
        [  120.679559]  misc_deregister from aspeed_lpc_snoop_remove+0x84/0xac
        [  120.692462]  aspeed_lpc_snoop_remove from platform_remove+0x28/0x38
        [  120.700996]  platform_remove from device_release_driver_internal+0x188/0x200
        ...
    
    Fixes: 9f4f9ae81d0a ("drivers/misc: add Aspeed LPC snoop driver")
    Cc: stable@vger.kernel.org
    Cc: Jean Delvare <jdelvare@suse.de>
    Acked-by: Jean Delvare <jdelvare@suse.de>
    Link: https://patch.msgid.link/20250616-aspeed-lpc-snoop-fixes-v2-2-3cdd59c934d3@codeconstruct.com.au
    Signed-off-by: Andrew Jeffery <andrew@codeconstruct.com.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
thunderbolt: Fix bit masking in tb_dp_port_set_hops() [+ + +]
Author: Alok Tiwari <alok.a.tiwari@oracle.com>
Date:   Sun Jun 22 10:17:02 2025 -0700

    thunderbolt: Fix bit masking in tb_dp_port_set_hops()
    
    commit 2cdde91c14ec358087f43287513946d493aef940 upstream.
    
    The tb_dp_port_set_hops() function was incorrectly clearing
    ADP_DP_CS_1_AUX_RX_HOPID_MASK twice. According to the function's
    purpose, it should clear both TX and RX AUX HopID fields.  Replace the
    first instance with ADP_DP_CS_1_AUX_TX_HOPID_MASK to ensure proper
    configuration of both AUX directions.
    
    Fixes: 98176380cbe5 ("thunderbolt: Convert DP adapter register names to follow the USB4 spec")
    Cc: stable@vger.kernel.org
    Signed-off-by: Alok Tiwari <alok.a.tiwari@oracle.com>
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tls: always refresh the queue when reading sock [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Wed Jul 16 07:38:50 2025 -0700

    tls: always refresh the queue when reading sock
    
    [ Upstream commit 4ab26bce3969f8fd925fe6f6f551e4d1a508c68b ]
    
    After recent changes in net-next TCP compacts skbs much more
    aggressively. This unearthed a bug in TLS where we may try
    to operate on an old skb when checking if all skbs in the
    queue have matching decrypt state and geometry.
    
        BUG: KASAN: slab-use-after-free in tls_strp_check_rcv+0x898/0x9a0 [tls]
        (net/tls/tls_strp.c:436 net/tls/tls_strp.c:530 net/tls/tls_strp.c:544)
        Read of size 4 at addr ffff888013085750 by task tls/13529
    
        CPU: 2 UID: 0 PID: 13529 Comm: tls Not tainted 6.16.0-rc5-virtme
        Call Trace:
         kasan_report+0xca/0x100
         tls_strp_check_rcv+0x898/0x9a0 [tls]
         tls_rx_rec_wait+0x2c9/0x8d0 [tls]
         tls_sw_recvmsg+0x40f/0x1aa0 [tls]
         inet_recvmsg+0x1c3/0x1f0
    
    Always reload the queue, fast path is to have the record in the queue
    when we wake, anyway (IOW the path going down "if !strp->stm.full_len").
    
    Fixes: 0d87bbd39d7f ("tls: strp: make sure the TCP skbs do not have overlapping data")
    Link: https://patch.msgid.link/20250716143850.1520292-1-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tracing: Add down_write(trace_event_sem) when adding trace event [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Fri Jul 18 22:31:58 2025 -0400

    tracing: Add down_write(trace_event_sem) when adding trace event
    
    commit b5e8acc14dcb314a9b61ff19dcd9fdd0d88f70df upstream.
    
    When a module is loaded, it adds trace events defined by the module. It
    may also need to modify the modules trace printk formats to replace enum
    names with their values.
    
    If two modules are loaded at the same time, the adding of the event to the
    ftrace_events list can corrupt the walking of the list in the code that is
    modifying the printk format strings and crash the kernel.
    
    The addition of the event should take the trace_event_sem for write while
    it adds the new event.
    
    Also add a lockdep_assert_held() on that semaphore in
    __trace_add_event_dirs() as it iterates the list.
    
    Cc: stable@vger.kernel.org
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Link: https://lore.kernel.org/20250718223158.799bfc0c@batman.local.home
    Reported-by: Fusheng Huang(黄富生)  <Fusheng.Huang@luxshare-ict.com>
    Closes: https://lore.kernel.org/all/20250717105007.46ccd18f@batman.local.home/
    Fixes: 110bf2b764eb6 ("tracing: add protection around module events unload")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: dwc3: qcom: Don't leave BCR asserted [+ + +]
Author: Krishna Kurapati <krishna.kurapati@oss.qualcomm.com>
Date:   Wed Jul 9 18:59:00 2025 +0530

    usb: dwc3: qcom: Don't leave BCR asserted
    
    commit ef8abc0ba49ce717e6bc4124e88e59982671f3b5 upstream.
    
    Leaving the USB BCR asserted prevents the associated GDSC to turn on. This
    blocks any subsequent attempts of probing the device, e.g. after a probe
    deferral, with the following showing in the log:
    
    [    1.332226] usb30_prim_gdsc status stuck at 'off'
    
    Leave the BCR deasserted when exiting the driver to avoid this issue.
    
    Cc: stable <stable@kernel.org>
    Fixes: a4333c3a6ba9 ("usb: dwc3: Add Qualcomm DWC3 glue driver")
    Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
    Signed-off-by: Krishna Kurapati <krishna.kurapati@oss.qualcomm.com>
    Link: https://lore.kernel.org/r/20250709132900.3408752-1-krishna.kurapati@oss.qualcomm.com
    [ adapted to individual clock management API instead of bulk clock operations ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: configfs: Fix OOB read on empty string write [+ + +]
Author: Xinyu Liu <1171169449@qq.com>
Date:   Wed Jul 9 11:55:33 2025 +0800

    usb: gadget: configfs: Fix OOB read on empty string write
    
    commit 3014168731b7930300aab656085af784edc861f6 upstream.
    
    When writing an empty string to either 'qw_sign' or 'landingPage'
    sysfs attributes, the store functions attempt to access page[l - 1]
    before validating that the length 'l' is greater than zero.
    
    This patch fixes the vulnerability by adding a check at the beginning
    of os_desc_qw_sign_store() and webusb_landingPage_store() to handle
    the zero-length input case gracefully by returning immediately.
    
    Signed-off-by: Xinyu Liu <katieeliu@tencent.com>
    Cc: stable <stable@kernel.org>
    Link: https://lore.kernel.org/r/tencent_B1C9481688D0E95E7362AB2E999DE8048207@qq.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: hub: Don't try to recover devices lost during warm reset. [+ + +]
Author: Mathias Nyman <mathias.nyman@linux.intel.com>
Date:   Mon Jun 23 16:39:47 2025 +0300

    usb: hub: Don't try to recover devices lost during warm reset.
    
    commit 2521106fc732b0b75fd3555c689b1ed1d29d273c upstream.
    
    Hub driver warm-resets ports in SS.Inactive or Compliance mode to
    recover a possible connected device. The port reset code correctly
    detects if a connection is lost during reset, but hub driver
    port_event() fails to take this into account in some cases.
    port_event() ends up using stale values and assumes there is a
    connected device, and will try all means to recover it, including
    power-cycling the port.
    
    Details:
    This case was triggered when xHC host was suspended with DbC (Debug
    Capability) enabled and connected. DbC turns one xHC port into a simple
    usb debug device, allowing debugging a system with an A-to-A USB debug
    cable.
    
    xhci DbC code disables DbC when xHC is system suspended to D3, and
    enables it back during resume.
    We essentially end up with two hosts connected to each other during
    suspend, and, for a short while during resume, until DbC is enabled back.
    The suspended xHC host notices some activity on the roothub port, but
    can't train the link due to being suspended, so xHC hardware sets a CAS
    (Cold Attach Status) flag for this port to inform xhci host driver that
    the port needs to be warm reset once xHC resumes.
    
    CAS is xHCI specific, and not part of USB specification, so xhci driver
    tells usb core that the port has a connection and link is in compliance
    mode. Recovery from complinace mode is similar to CAS recovery.
    
    xhci CAS driver support that fakes a compliance mode connection was added
    in commit 8bea2bd37df0 ("usb: Add support for root hub port status CAS")
    
    Once xHCI resumes and DbC is enabled back, all activity on the xHC
    roothub host side port disappears. The hub driver will anyway think
    port has a connection and link is in compliance mode, and hub driver
    will try to recover it.
    
    The port power-cycle during recovery seems to cause issues to the active
    DbC connection.
    
    Fix this by clearing connect_change flag if hub_port_reset() returns
    -ENOTCONN, thus avoiding the whole unnecessary port recovery and
    initialization attempt.
    
    Cc: stable@vger.kernel.org
    Fixes: 8bea2bd37df0 ("usb: Add support for root hub port status CAS")
    Tested-by: Łukasz Bartosik <ukaszb@chromium.org>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://lore.kernel.org/r/20250623133947.3144608-1-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: hub: fix detection of high tier USB3 devices behind suspended hubs [+ + +]
Author: Mathias Nyman <mathias.nyman@linux.intel.com>
Date:   Wed Jun 11 14:24:41 2025 +0300

    usb: hub: fix detection of high tier USB3 devices behind suspended hubs
    
    commit 8f5b7e2bec1c36578fdaa74a6951833541103e27 upstream.
    
    USB3 devices connected behind several external suspended hubs may not
    be detected when plugged in due to aggressive hub runtime pm suspend.
    
    The hub driver immediately runtime-suspends hubs if there are no
    active children or port activity.
    
    There is a delay between the wake signal causing hub resume, and driver
    visible port activity on the hub downstream facing ports.
    Most of the LFPS handshake, resume signaling and link training done
    on the downstream ports is not visible to the hub driver until completed,
    when device then will appear fully enabled and running on the port.
    
    This delay between wake signal and detectable port change is even more
    significant with chained suspended hubs where the wake signal will
    propagate upstream first. Suspended hubs will only start resuming
    downstream ports after upstream facing port resumes.
    
    The hub driver may resume a USB3 hub, read status of all ports, not
    yet see any activity, and runtime suspend back the hub before any
    port activity is visible.
    
    This exact case was seen when conncting USB3 devices to a suspended
    Thunderbolt dock.
    
    USB3 specification defines a 100ms tU3WakeupRetryDelay, indicating
    USB3 devices expect to be resumed within 100ms after signaling wake.
    if not then device will resend the wake signal.
    
    Give the USB3 hubs twice this time (200ms) to detect any port
    changes after resume, before allowing hub to runtime suspend again.
    
    Cc: stable <stable@kernel.org>
    Fixes: 2839f5bcfcfc ("USB: Turn on auto-suspend for USB 3.0 hubs.")
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20250611112441.2267883-1-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: hub: Fix flushing and scheduling of delayed work that tunes runtime pm [+ + +]
Author: Mathias Nyman <mathias.nyman@linux.intel.com>
Date:   Thu Jun 26 16:01:02 2025 +0300

    usb: hub: Fix flushing and scheduling of delayed work that tunes runtime pm
    
    commit a49e1e2e785fb3621f2d748581881b23a364998a upstream.
    
    Delayed work to prevent USB3 hubs from runtime-suspending immediately
    after resume was added in commit 8f5b7e2bec1c ("usb: hub: fix detection
    of high tier USB3 devices behind suspended hubs").
    
    This delayed work needs be flushed if system suspends, or hub needs to
    be quiesced for other reasons right after resume. Not flushing it
    triggered issues on QC SC8280XP CRD board during suspend/resume testing.
    
    Fix it by flushing the delayed resume work in hub_quiesce()
    
    The delayed work item that allow hub runtime suspend is also scheduled
    just before calling autopm get. Alan pointed out there is a small risk
    that work is run before autopm get, which would call autopm put before
    get, and mess up the runtime pm usage order.
    Swap the order of work sheduling and calling autopm get to solve this.
    
    Cc: stable <stable@kernel.org>
    Fixes: 8f5b7e2bec1c ("usb: hub: fix detection of high tier USB3 devices behind suspended hubs")
    Reported-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
    Closes: https://lore.kernel.org/linux-usb/acaaa928-832c-48ca-b0ea-d202d5cd3d6c@oss.qualcomm.com
    Reported-by: Alan Stern <stern@rowland.harvard.edu>
    Closes: https://lore.kernel.org/linux-usb/c73fbead-66d7-497a-8fa1-75ea4761090a@rowland.harvard.edu
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20250626130102.3639861-2-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: hub: Fix flushing of delayed work used for post resume purposes [+ + +]
Author: Mathias Nyman <mathias.nyman@linux.intel.com>
Date:   Fri Jun 27 19:43:48 2025 +0300

    usb: hub: Fix flushing of delayed work used for post resume purposes
    
    commit 9bd9c8026341f75f25c53104eb7e656e357ca1a2 upstream.
    
    Delayed work that prevents USB3 hubs from runtime-suspending too early
    needed to be flushed in hub_quiesce() to resolve issues detected on
    QC SC8280XP CRD board during suspend resume testing.
    
    This flushing did however trigger new issues on Raspberry Pi 3B+, which
    doesn't have USB3 ports, and doesn't queue any post resume delayed work.
    
    The flushed 'hub->init_work' item is used for several purposes, and
    is originally initialized with a 'NULL' work function. The work function
    is also changed on the fly, which may contribute to the issue.
    
    Solve this by creating a dedicated delayed work item for post resume work,
    and flush that delayed work in hub_quiesce()
    
    Cc: stable <stable@kernel.org>
    Fixes: a49e1e2e785f ("usb: hub: Fix flushing and scheduling of delayed work that tunes runtime pm")
    Reported-by: Mark Brown <broonie@kernel.org>
    Closes: https://lore.kernel.org/linux-usb/aF5rNp1l0LWITnEB@finisterre.sirena.org.uk
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Tested-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com> # SC8280XP CRD
    Tested-by: Mark Brown <broonie@kernel.org>
    Link: https://lore.kernel.org/r/20250627164348.3982628-2-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: musb: Add and use inline functions musb_{get,set}_state [+ + +]
Author: Paul Cercueil <paul@crapouillou.net>
Date:   Wed Oct 26 19:26:51 2022 +0100

    usb: musb: Add and use inline functions musb_{get,set}_state
    
    commit 21acc656a06e912341d9db66c67b58cc7ed071e7 upstream.
    
    Instead of manipulating musb->xceiv->otg->state directly, use the newly
    introduced musb_get_state() and musb_set_state() inline functions.
    
    Later, these inline functions will be modified to get rid of the
    musb->xceiv dependency, which prevents the musb code from using the
    generic PHY subsystem.
    
    Signed-off-by: Paul Cercueil <paul@crapouillou.net>
    Link: https://lore.kernel.org/r/20221026182657.146630-2-paul@crapouillou.net
    Stable-dep-of: 67a59f82196c ("usb: musb: fix gadget state on disconnect")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: musb: fix gadget state on disconnect [+ + +]
Author: Drew Hamilton <drew.hamilton@zetier.com>
Date:   Tue Jul 1 11:41:26 2025 -0400

    usb: musb: fix gadget state on disconnect
    
    commit 67a59f82196c8c4f50c83329f0577acfb1349b50 upstream.
    
    When unplugging the USB cable or disconnecting a gadget in usb peripheral mode with
    echo "" > /sys/kernel/config/usb_gadget/<your_gadget>/UDC,
    /sys/class/udc/musb-hdrc.0/state does not change from USB_STATE_CONFIGURED.
    
    Testing on dwc2/3 shows they both update the state to USB_STATE_NOTATTACHED.
    
    Add calls to usb_gadget_set_state in musb_g_disconnect and musb_gadget_stop
    to fix both cases.
    
    Fixes: 49401f4169c0 ("usb: gadget: introduce gadget state tracking")
    Cc: stable@vger.kernel.org
    Co-authored-by: Yehowshua Immanuel <yehowshua.immanuel@twosixtech.com>
    Signed-off-by: Yehowshua Immanuel <yehowshua.immanuel@twosixtech.com>
    Signed-off-by: Drew Hamilton <drew.hamilton@zetier.com>
    Link: https://lore.kernel.org/r/20250701154126.8543-1-drew.hamilton@zetier.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: net: sierra: check for no status endpoint [+ + +]
Author: Oliver Neukum <oneukum@suse.com>
Date:   Mon Jul 14 13:12:56 2025 +0200

    usb: net: sierra: check for no status endpoint
    
    [ Upstream commit 4c4ca3c46167518f8534ed70f6e3b4bf86c4d158 ]
    
    The driver checks for having three endpoints and
    having bulk in and out endpoints, but not that
    the third endpoint is interrupt input.
    Rectify the omission.
    
    Reported-by: syzbot+3f89ec3d1d0842e95d50@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/linux-usb/686d5a9f.050a0220.1ffab7.0017.GAE@google.com/
    Tested-by: syzbot+3f89ec3d1d0842e95d50@syzkaller.appspotmail.com
    Fixes: eb4fd8cd355c8 ("net/usb: add sierra_net.c driver")
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    Link: https://patch.msgid.link/20250714111326.258378-1-oneukum@suse.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
USB: serial: ftdi_sio: add support for NDI EMGUIDE GEMINI [+ + +]
Author: Ryan Mann (NDI) <rmann@ndigital.com>
Date:   Thu Jul 10 13:08:00 2025 +0000

    USB: serial: ftdi_sio: add support for NDI EMGUIDE GEMINI
    
    commit c980666b6958d9a841597331b38115a29a32250e upstream.
    
    NDI (Northern Digital Inc.) is introducing a new product called the
    EMGUIDE GEMINI that will use an FTDI chip for USB serial communications.
    Add the NDI EMGUIDE GEMINI product ID that uses the NDI Vendor ID
    rather than the FTDI Vendor ID, unlike older products.
    
    Signed-off-by: Ryan Mann <rmann@ndigital.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add Foxconn T99W640 [+ + +]
Author: Slark Xiao <slark_xiao@163.com>
Date:   Fri Jun 20 11:57:21 2025 +0800

    USB: serial: option: add Foxconn T99W640
    
    commit 08f49cdb71f3759368fded4dbc9dde35a404ec2b upstream.
    
    T99W640 is designed based on Qualconn SDX72 chip. There are 3
    serial ports to be enumerated: Diag, NMEA and AT.
    
    Test evidence as below:
    T:  Bus=04 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#=  2 Spd=5000 MxCh= 0
    D:  Ver= 3.20 Cls=ef(misc ) Sub=02 Prot=01 MxPS= 9 #Cfgs=  1
    P:  Vendor=0489 ProdID=e167 Rev=05.15
    S:  Manufacturer=QCOM
    S:  Product=SDXPINNL USB WWAN Adapter
    S:  SerialNumber=cc1f1d92
    C:  #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=896mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
    E:  Ad=85(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=87(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=88(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    
    0&1: MBIM, 2:Modem, 3:GNSS(non-serial port), 4: NMEA, 5:Diag
    
    Signed-off-by: Slark Xiao <slark_xiao@163.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add Telit Cinterion FE910C04 (ECM) composition [+ + +]
Author: Fabio Porcedda <fabio.porcedda@gmail.com>
Date:   Thu Jul 10 14:16:38 2025 +0200

    USB: serial: option: add Telit Cinterion FE910C04 (ECM) composition
    
    commit 252f4ac08cd2f16ecd20e4c5e41ac2a17dd86942 upstream.
    
    Add Telit Cinterion FE910C04 (ECM) composition:
    0x10c7: ECM + tty (AT) + tty (AT) + tty (diag)
    
    usb-devices output:
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  7 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10c7 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=06 Prot=00 Driver=cdc_ether
    E:  Ad=82(I) Atr=03(Int.) MxPS=  16 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>