Changelog in Linux kernel 6.6.100

 
af_packet: fix soft lockup issue caused by tpacket_snd() [+ + +]
Author: Yun Lu <[email protected]>
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: [email protected]
    Suggested-by: LongJun Tang <[email protected]>
    Signed-off-by: Yun Lu <[email protected]>
    Reviewed-by: Willem de Bruijn <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

af_packet: fix the SO_SNDTIMEO constraint not effective on tpacked_snd() [+ + +]
Author: Yun Lu <[email protected]>
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: [email protected]
    Suggested-by: Eric Dumazet <[email protected]>
    Signed-off-by: Yun Lu <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Reviewed-by: Willem de Bruijn <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ALSA: hda/realtek: Add quirk for ASUS ROG Strix G712LWS [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Tue Jul 15 08:29:04 2025 +0200

    ALSA: hda/realtek: Add quirk for ASUS ROG Strix G712LWS
    
    commit e201c19ddeed6b37f05617e529d8efa079657ed7 upstream.
    
    ASUS ROG Strix G712LWS (PCI SSID 1043:1a83) requires the quirk for
    ALC294 headset mode in order to make the speaker and headset I/O
    working properly.
    
    Cc: <[email protected]>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=220334
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
arm64: dts: freescale: imx8mm-verdin: Keep LDO5 always on [+ + +]
Author: Francesco Dolcini <[email protected]>
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: [email protected]
    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 <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Signed-off-by: Shawn Guo <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

arm64: dts: imx8mp-venice-gw74xx: fix TPM SPI frequency [+ + +]
Author: Tim Harvey <[email protected]>
Date:   Wed Jun 4 15:56:30 2025 -0700

    arm64: dts: imx8mp-venice-gw74xx: fix TPM SPI frequency
    
    commit 0bdaca0922175478ddeadf8e515faa5269f6fae6 upstream.
    
    The IMX8MPDS Table 37 [1] shows that the max SPI master read frequency
    depends on the pins the interface is muxed behind with ECSPI2
    muxed behind ECSPI2 supporting up to 25MHz.
    
    Adjust the spi-max-frequency based on these findings.
    
    [1] https://www.nxp.com/webapp/Download?colCode=IMX8MPIEC
    
    Fixes: 531936b218d8 ("arm64: dts: imx8mp-venice-gw74xx: update to revB PCB")
    Cc: [email protected]
    Signed-off-by: Tim Harvey <[email protected]>
    Signed-off-by: Shawn Guo <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

arm64: dts: rockchip: use cs-gpios for spi1 on ringneck [+ + +]
Author: Jakob Unterwurzacher <[email protected]>
Date:   Fri Jun 27 15:17:12 2025 +0200

    arm64: dts: rockchip: use cs-gpios for spi1 on ringneck
    
    commit 53b6445ad08f07b6f4a84f1434f543196009ed89 upstream.
    
    Hardware CS has a very slow rise time of about 6us,
    causing transmission errors when CS does not reach
    high between transaction.
    
    It looks like it's not driven actively when transitioning
    from low to high but switched to input, so only the CPU
    pull-up pulls it high, slowly. Transitions from high to low
    are fast. On the oscilloscope, CS looks like an irregular sawtooth
    pattern like this:
                             _____
                  ^         /     |
          ^      /|        /      |
         /|     / |       /       |
        / |    /  |      /        |
    ___/  |___/   |_____/         |___
    
    With cs-gpios we have a CS rise time of about 20ns, as it should be,
    and CS looks rectangular.
    
    This fixes the data errors when running a flashcp loop against a
    m25p40 spi flash.
    
    With the Rockchip 6.1 kernel we see the same slow rise time, but
    for some reason CS is always high for long enough to reach a solid
    high.
    
    The RK3399 and RK3588 SoCs use the same SPI driver, so we also
    checked our "Puma" (RK3399) and "Tiger" (RK3588) boards.
    They do not have this problem. Hardware CS rise time is good.
    
    Fixes: c484cf93f61b ("arm64: dts: rockchip: add PX30-µQ7 (Ringneck) SoM with Haikou baseboard")
    Cc: [email protected]
    Reviewed-by: Quentin Schulz <[email protected]>
    Signed-off-by: Jakob Unterwurzacher <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Heiko Stuebner <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

arm64: Filter out SME hwcaps when FEAT_SME isn't implemented [+ + +]
Author: Mark Brown <[email protected]>
Date:   Fri Jun 20 12:28:48 2025 +0100

    arm64: Filter out SME hwcaps when FEAT_SME isn't implemented
    
    commit a75ad2fc76a2ab70817c7eed3163b66ea84ca6ac upstream.
    
    We have a number of hwcaps for various SME subfeatures enumerated via
    ID_AA64SMFR0_EL1. Currently we advertise these without cross checking
    against the main SME feature, advertised in ID_AA64PFR1_EL1.SME which
    means that if the two are out of sync userspace can see a confusing
    situation where SME subfeatures are advertised without the base SME
    hwcap. This can be readily triggered by using the arm64.nosme override
    which only masks out ID_AA64PFR1_EL1.SME, and there have also been
    reports of VMMs which do the same thing.
    
    Fix this as we did previously for SVE in 064737920bdb ("arm64: Filter
    out SVE hwcaps when FEAT_SVE isn't implemented") by filtering out the
    SME subfeature hwcaps when FEAT_SME is not present.
    
    Fixes: 5e64b862c482 ("arm64/sme: Basic enumeration support")
    Reported-by: Yury Khrustalev <[email protected]>
    Signed-off-by: Mark Brown <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Will Deacon <[email protected]>
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ASoC: fsl_sai: Force a software reset when starting in consumer mode [+ + +]
Author: Arun Raghavan <[email protected]>
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 <[email protected]>
    Reported-by: Pieterjan Camerlynck <[email protected]>
    Fixes: 3e3f8bd56955 ("ASoC: fsl_sai: fix no frame clk in master mode")
    Cc: [email protected]
    Reviewed-by: Fabio Estevam <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
block: fix kobject leak in blk_unregister_queue [+ + +]
Author: Ming Lei <[email protected]>
Date:   Fri Jul 11 16:30:09 2025 +0800

    block: fix kobject leak in blk_unregister_queue
    
    [ Upstream commit 3051247e4faa32a3d90c762a243c2c62dde310db ]
    
    The kobject for the queue, `disk->queue_kobj`, is initialized with a
    reference count of 1 via `kobject_init()` in `blk_register_queue()`.
    While `kobject_del()` is called during the unregister path to remove
    the kobject from sysfs, the initial reference is never released.
    
    Add a call to `kobject_put()` in `blk_unregister_queue()` to properly
    decrement the reference count and fix the leak.
    
    Fixes: 2bd85221a625 ("block: untangle request_queue refcounting from sysfs")
    Cc: Christoph Hellwig <[email protected]>
    Signed-off-by: Ming Lei <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Bluetooth: btusb: QCA: Fix downloading wrong NVM for WCN6855 GF variant without board ID [+ + +]
Author: Zijun Hu <[email protected]>
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 <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: Fix null-ptr-deref in l2cap_sock_resume_cb() [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
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: [email protected]
    Closes: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: hci_sync: fix connectable extended advertising when using static random address [+ + +]
Author: Alessandro Gasbarroni <[email protected]>
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 <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: L2CAP: Fix attempting to adjust outgoing MTU [+ + +]
Author: Luiz Augusto von Dentz <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: SMP: Fix using HCI_ERROR_REMOTE_USER_TERM on timeout [+ + +]
Author: Luiz Augusto von Dentz <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: SMP: If an unallowed command is received consider it a failure [+ + +]
Author: Luiz Augusto von Dentz <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf: Reject %p% format string in bprintf-like helpers [+ + +]
Author: Paul Chaignon <[email protected]>
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: [email protected]
    Fixes: 48cac3f4a96d ("bpf: Implement formatted output helpers with bstr_printf")
    Acked-by: Yonghong Song <[email protected]>
    Signed-off-by: Paul Chaignon <[email protected]>
    Link: https://lore.kernel.org/r/a0e06cc479faec9e802ae51ba5d66420523251ee.1751395489.git.paul.chaignon@gmail.com
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
cachefiles: Fix the incorrect return value in __cachefiles_write() [+ + +]
Author: Zizhi Wo <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
clone_private_mnt(): make sure that caller has CAP_SYS_ADMIN in the right userns [+ + +]
Author: Al Viro <[email protected]>
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 <[email protected]>
    Reported-by: "Orlando, Noah" <[email protected]>
    Fixes: 427215d85e8d ("ovl: prevent private clone if bind mount is not allowed")
    Signed-off-by: Al Viro <[email protected]>
    [ 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 <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
comedi: aio_iiro_16: Fix bit shift out of bounds [+ + +]
Author: Ian Abbott <[email protected]>
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: [email protected] # 5.13+
    Signed-off-by: Ian Abbott <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

comedi: das16m1: Fix bit shift out of bounds [+ + +]
Author: Ian Abbott <[email protected]>
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: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=c52293513298e0fd9a94
    Fixes: 729988507680 ("staging: comedi: das16m1: tidy up the irq support in das16m1_attach()")
    Tested-by: [email protected]
    Suggested-by: "Enju, Kohei" <[email protected]>
    Cc: [email protected] # 5.13+
    Signed-off-by: Ian Abbott <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

comedi: das6402: Fix bit shift out of bounds [+ + +]
Author: Ian Abbott <[email protected]>
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: [email protected] # 5.13+
    Signed-off-by: Ian Abbott <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

comedi: Fail COMEDI_INSNLIST ioctl if n_insns is too large [+ + +]
Author: Ian Abbott <[email protected]>
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: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=d6995b62e5ac7d79557a
    Fixes: ed9eccbe8970 ("Staging: add comedi core")
    Tested-by: Ian Abbott <[email protected]>
    Cc: [email protected] # 5.13+
    Signed-off-by: Ian Abbott <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

comedi: Fix initialization of data for instructions that write to subdevice [+ + +]
Author: Ian Abbott <[email protected]>
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: [email protected] # 5.13+
    Signed-off-by: Ian Abbott <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

comedi: Fix some signed shift left operations [+ + +]
Author: Ian Abbott <[email protected]>
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: [email protected] # 5.13+
    Signed-off-by: Ian Abbott <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

comedi: Fix use of uninitialized data in insn_rw_emulate_bits() [+ + +]
Author: Ian Abbott <[email protected]>
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: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=cb96ec476fb4914445c9
    Fixes: ed9eccbe8970 ("Staging: add comedi core")
    Cc: [email protected] # 5.13+
    Signed-off-by: Ian Abbott <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

comedi: pcl812: Fix bit shift out of bounds [+ + +]
Author: Ian Abbott <[email protected]>
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: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=32de323b0addb9e114ff
    Fixes: fcdb427bc7cf ("Staging: comedi: add pcl821 driver")
    Cc: [email protected] # 5.13+
    Signed-off-by: Ian Abbott <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dm-bufio: fix sched in atomic context [+ + +]
Author: Sheng Yong <[email protected]>
Date:   Thu Jul 10 14:48:55 2025 +0800

    dm-bufio: fix sched in atomic context
    
    commit b1bf1a782fdf5c482215c0c661b5da98b8e75773 upstream.
    
    If "try_verify_in_tasklet" is set for dm-verity, DM_BUFIO_CLIENT_NO_SLEEP
    is enabled for dm-bufio. However, when bufio tries to evict buffers, there
    is a chance to trigger scheduling in spin_lock_bh, the following warning
    is hit:
    
    BUG: sleeping function called from invalid context at drivers/md/dm-bufio.c:2745
    in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 123, name: kworker/2:2
    preempt_count: 201, expected: 0
    RCU nest depth: 0, expected: 0
    4 locks held by kworker/2:2/123:
     #0: ffff88800a2d1548 ((wq_completion)dm_bufio_cache){....}-{0:0}, at: process_one_work+0xe46/0x1970
     #1: ffffc90000d97d20 ((work_completion)(&dm_bufio_replacement_work)){....}-{0:0}, at: process_one_work+0x763/0x1970
     #2: ffffffff8555b528 (dm_bufio_clients_lock){....}-{3:3}, at: do_global_cleanup+0x1ce/0x710
     #3: ffff88801d5820b8 (&c->spinlock){....}-{2:2}, at: do_global_cleanup+0x2a5/0x710
    Preemption disabled at:
    [<0000000000000000>] 0x0
    CPU: 2 UID: 0 PID: 123 Comm: kworker/2:2 Not tainted 6.16.0-rc3-g90548c634bd0 #305 PREEMPT(voluntary)
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014
    Workqueue: dm_bufio_cache do_global_cleanup
    Call Trace:
     <TASK>
     dump_stack_lvl+0x53/0x70
     __might_resched+0x360/0x4e0
     do_global_cleanup+0x2f5/0x710
     process_one_work+0x7db/0x1970
     worker_thread+0x518/0xea0
     kthread+0x359/0x690
     ret_from_fork+0xf3/0x1b0
     ret_from_fork_asm+0x1a/0x30
     </TASK>
    
    That can be reproduced by:
    
      veritysetup format --data-block-size=4096 --hash-block-size=4096 /dev/vda /dev/vdb
      SIZE=$(blockdev --getsz /dev/vda)
      dmsetup create myverity -r --table "0 $SIZE verity 1 /dev/vda /dev/vdb 4096 4096 <data_blocks> 1 sha256 <root_hash> <salt> 1 try_verify_in_tasklet"
      mount /dev/dm-0 /mnt -o ro
      echo 102400 > /sys/module/dm_bufio/parameters/max_cache_size_bytes
      [read files in /mnt]
    
    Cc: [email protected]      # v6.4+
    Fixes: 450e8dee51aa ("dm bufio: improve concurrent IO performance")
    Signed-off-by: Wang Shuai <[email protected]>
    Signed-off-by: Sheng Yong <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dmaengine: nbpfaxi: Fix memory corruption in probe() [+ + +]
Author: Dan Carpenter <[email protected]>
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: [email protected]
    Fixes: b45b262cefd5 ("dmaengine: add a driver for AMBA AXI NBPF DMAC IP cores")
    Signed-off-by: Dan Carpenter <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdgpu/gfx8: reset compute ring wptr on the GPU on resume [+ + +]
Author: Eeli Haapalainen <[email protected]>
Date:   Mon Jul 14 08:13:09 2025 +0300

    drm/amdgpu/gfx8: reset compute ring wptr on the GPU on resume
    
    commit 83261934015c434fabb980a3e613b01d9976e877 upstream.
    
    Commit 42cdf6f687da ("drm/amdgpu/gfx8: always restore kcq MQDs") made the
    ring pointer always to be reset on resume from suspend. This caused compute
    rings to fail since the reset was done without also resetting it for the
    firmware. Reset wptr on the GPU to avoid a disconnect between the driver
    and firmware wptr.
    
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3911
    Fixes: 42cdf6f687da ("drm/amdgpu/gfx8: always restore kcq MQDs")
    Signed-off-by: Eeli Haapalainen <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 2becafc319db3d96205320f31cc0de4ee5a93747)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
HID: core: do not bypass hid_hw_raw_request [+ + +]
Author: Benjamin Tissoires <[email protected]>
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 <[email protected]>
    Closes: https://lore.kernel.org/linux-input/[email protected]/
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Benjamin Tissoires <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

HID: core: ensure __hid_request reserves the report ID as the first byte [+ + +]
Author: Benjamin Tissoires <[email protected]>
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 <[email protected]>
    Closes: https://lore.kernel.org/linux-input/[email protected]/
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=8258d5439c49d4c35f43
    Tested-by: [email protected]
    Fixes: 4fa5a7f76cc7 ("HID: core: implement generic .request()")
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Benjamin Tissoires <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

HID: core: ensure the allocated report buffer can contain the reserved report ID [+ + +]
Author: Benjamin Tissoires <[email protected]>
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 <[email protected]>
    Closes: https://lore.kernel.org/linux-input/[email protected]/
    Cc: [email protected]
    Suggested-by: Alan Stern <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Benjamin Tissoires <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
hv_netvsc: Set VF priv_flags to IFF_NO_ADDRCONF before open to prevent IPv6 addrconf [+ + +]
Author: Li Tian <[email protected]>
Date:   Wed Jul 16 08:26:05 2025 +0800

    hv_netvsc: Set VF priv_flags to IFF_NO_ADDRCONF before open to prevent IPv6 addrconf
    
    [ Upstream commit d7501e076d859d2f381d57bd984ff6db13172727 ]
    
    Set an additional flag IFF_NO_ADDRCONF to prevent ipv6 addrconf.
    
    Commit under Fixes added a new flag change that was not made
    to hv_netvsc resulting in the VF being assinged an IPv6.
    
    Fixes: 8a321cf7becc ("net: add IFF_NO_ADDRCONF and use it in bonding to prevent ipv6 addrconf")
    Suggested-by: Cathy Avery <[email protected]>
    Signed-off-by: Li Tian <[email protected]>
    Reviewed-by: Xin Long <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
hwmon: (corsair-cpro) Validate the size of the received input buffer [+ + +]
Author: Marius Zachmann <[email protected]>
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: [email protected]
    Closes: https://lore.kernel.org/linux-hwmon/[email protected]
    Fixes: 40c3a4454225 ("hwmon: add Corsair Commander Pro driver")
    Signed-off-by: Marius Zachmann <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
i2c: omap: Add support for setting mux [+ + +]
Author: Jayesh Choudhary <[email protected]>
Date:   Tue Mar 18 16:06:22 2025 +0530

    i2c: omap: Add support for setting mux
    
    commit b6ef830c60b6f4adfb72d0780b4363df3a1feb9c upstream.
    
    Some SoCs require muxes in the routing for SDA and SCL lines.
    Therefore, add support for setting the mux by reading the mux-states
    property from the dt-node.
    
    Signed-off-by: Jayesh Choudhary <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Andi Shyti <[email protected]>
    Stable-dep-of: a9503a2ecd95 ("i2c: omap: Handle omap_i2c_init() errors in omap_i2c_probe()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

i2c: omap: Fix an error handling path in omap_i2c_probe() [+ + +]
Author: Christophe JAILLET <[email protected]>
Date:   Sat Jun 14 16:59:26 2025 +0200

    i2c: omap: Fix an error handling path in omap_i2c_probe()
    
    commit 666c23af755dccca8c25b5d5200ca28153c69a05 upstream.
    
    If an error occurs after calling mux_state_select(), mux_state_deselect()
    should be called as already done in the remove function.
    
    Fixes: b6ef830c60b6 ("i2c: omap: Add support for setting mux")
    Signed-off-by: Christophe JAILLET <[email protected]>
    Cc: <[email protected]> # v6.15+
    Signed-off-by: Andi Shyti <[email protected]>
    Link: https://lore.kernel.org/r/998542981b6d2435c057dd8b9fe71743927babab.1749913149.git.christophe.jaillet@wanadoo.fr
    Stable-dep-of: a9503a2ecd95 ("i2c: omap: Handle omap_i2c_init() errors in omap_i2c_probe()")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

i2c: omap: fix deprecated of_property_read_bool() use [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Tue Apr 15 09:52:30 2025 +0200

    i2c: omap: fix deprecated of_property_read_bool() use
    
    commit e66b0a8f048bc8590eb1047480f946898a3f80c9 upstream.
    
    Using of_property_read_bool() for non-boolean properties is deprecated
    and results in a warning during runtime since commit c141ecc3cecd ("of:
    Warn when of_property_read_bool() is used on non-boolean properties").
    
    Fixes: b6ef830c60b6 ("i2c: omap: Add support for setting mux")
    Cc: Jayesh Choudhary <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Acked-by: Mukesh Kumar Savaliya <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Andi Shyti <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

i2c: omap: Handle omap_i2c_init() errors in omap_i2c_probe() [+ + +]
Author: Christophe JAILLET <[email protected]>
Date:   Sat Jul 5 09:57:37 2025 +0200

    i2c: omap: Handle omap_i2c_init() errors in omap_i2c_probe()
    
    commit a9503a2ecd95e23d7243bcde7138192de8c1c281 upstream.
    
    omap_i2c_init() can fail. Handle this error in omap_i2c_probe().
    
    Fixes: 010d442c4a29 ("i2c: New bus driver for TI OMAP boards")
    Signed-off-by: Christophe JAILLET <[email protected]>
    Cc: <[email protected]> # v2.6.19+
    Signed-off-by: Andi Shyti <[email protected]>
    Link: https://lore.kernel.org/r/565311abf9bafd7291ca82bcecb48c1fac1e727b.1751701715.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

i2c: stm32: fix the device used for the DMA map [+ + +]
Author: Clément Le Goffic <[email protected]>
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 <[email protected]>
    Cc: <[email protected]> # v4.18+
    Acked-by: Alain Volmat <[email protected]>
    Signed-off-by: Andi Shyti <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ice: add NULL check in eswitch lag check [+ + +]
Author: Dave Ertman <[email protected]>
Date:   Thu May 22 13:16:57 2025 -0400

    ice: add NULL check in eswitch lag check
    
    [ Upstream commit 3ce58b01ada408b372f15b7c992ed0519840e3cf ]
    
    The function ice_lag_is_switchdev_running() is being called from outside of
    the LAG event handler code.  This results in the lag->upper_netdev being
    NULL sometimes.  To avoid a NULL-pointer dereference, there needs to be a
    check before it is dereferenced.
    
    Fixes: 776fe19953b0 ("ice: block default rule setting on LAG interface")
    Signed-off-by: Dave Ertman <[email protected]>
    Reviewed-by: Aleksandr Loktionov <[email protected]>
    Tested-by: Sujai Buvaneswaran <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
iio: accel: fxls8962af: Fix use after free in fxls8962af_fifo_flush [+ + +]
Author: Sean Nyekjaer <[email protected]>
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: [email protected]
    Suggested-by: David Lechner <[email protected]>
    Signed-off-by: Sean Nyekjaer <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: adc: max1363: Fix MAX1363_4X_CHANS/MAX1363_8X_CHANS[] [+ + +]
Author: Fabio Estevam <[email protected]>
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: [email protected]
    Suggested-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Fabio Estevam <[email protected]>
    Acked-by: Matti Vaittinen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: adc: max1363: Reorder mode_list[] entries [+ + +]
Author: Fabio Estevam <[email protected]>
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: [email protected]
    Signed-off-by: Fabio Estevam <[email protected]>
    Acked-by: Matti Vaittinen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: adc: stm32-adc: Fix race in installing chained IRQ handler [+ + +]
Author: Chen Ni <[email protected]>
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 <[email protected]>
    Reviewed-by: Nuno Sá <[email protected]>
    Tested-by: Fabrice Gasnier <[email protected]>
    Reviewed-by: Fabrice Gasnier <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Input: xpad - set correct controller type for Acer NGR200 [+ + +]
Author: Nilton Perim Neto <[email protected]>
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 <[email protected]>
    Signed-off-by: Nilton Perim Neto <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Fixes: 22c69d786ef8 ("Input: xpad - support Acer NGR 200 Controller")
    Cc: [email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
io_uring/poll: fix POLLERR handling [+ + +]
Author: Pavel Begunkov <[email protected]>
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: [email protected]
    Fixes: 8c8492ca64e79 ("io_uring/net: don't retry connect operation on EPOLLERR")
    Signed-off-by: Pavel Begunkov <[email protected]>
    Link: https://lore.kernel.org/r/3dc89036388d602ebd84c28e5042e457bdfc952b.1752682444.git.asml.silence@gmail.com
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ipv6: make addrconf_wq single threaded [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Feb 1 17:30:31 2024 +0000

    ipv6: make addrconf_wq single threaded
    
    commit dfd2ee086a63c730022cb095576a8b3a5a752109 upstream.
    
    Both addrconf_verify_work() and addrconf_dad_work() acquire rtnl,
    there is no point trying to have one thread per cpu.
    
    Signed-off-by: Eric Dumazet <[email protected]>
    Reviewed-by: David Ahern <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Brett A C Sheffield <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

    ipv6: mcast: Delay put pmc->idev in mld_del_delrec()
    
    [ 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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
isofs: Verify inode mode when loading from disk [+ + +]
Author: Jan Kara <[email protected]>
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: [email protected]
    CC: [email protected]
    Signed-off-by: Jan Kara <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Acked-by: Christian Brauner <[email protected]>
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
KVM: x86/xen: Fix cleanup logic in emulation of Xen schedop poll hypercalls [+ + +]
Author: Manuel Andreas <[email protected]>
Date:   Wed Jul 23 17:51:20 2025 +0200

    KVM: x86/xen: Fix cleanup logic in emulation of Xen schedop poll hypercalls
    
    commit 5a53249d149f48b558368c5338b9921b76a12f8c upstream.
    
    kvm_xen_schedop_poll does a kmalloc_array() when a VM polls the host
    for more than one event channel potr (nr_ports > 1).
    
    After the kmalloc_array(), the error paths need to go through the
    "out" label, but the call to kvm_read_guest_virt() does not.
    
    Fixes: 92c58965e965 ("KVM: x86/xen: Use kvm_read_guest_virt() instead of open-coding it badly")
    Reviewed-by: David Woodhouse <[email protected]>
    Signed-off-by: Manuel Andreas <[email protected]>
    [Adjusted commit message. - Paolo]
    Signed-off-by: Paolo Bonzini <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Linux: Linux 6.6.100 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Thu Jul 24 08:53:22 2025 +0200

    Linux 6.6.100
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Brett A C Sheffield <[email protected]>
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Shuah Khan <[email protected]>
    Tested-by: Miguel Ojeda <[email protected]>
    Tested-by: Peter Schneider <[email protected]>
    Tested-by: Mark Brown <[email protected]>
    Tested-by: Harshit Mogalapalli <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Tested-by: Linux Kernel Functional Testing <[email protected]>
    Tested-by: Hardik Garg <[email protected]>
    Tested-by: Ron Economos <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
memstick: core: Zero initialize id_reg in h_memstick_read_dev_id() [+ + +]
Author: Nathan Chancellor <[email protected]>
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: [email protected]
    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 <[email protected]>
    Link: https://lore.kernel.org/r/20250715-memstick-fix-uninit-const-pointer-v1-1-f6753829c27a@kernel.org
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mmc: bcm2835: Fix dma_unmap_sg() nents value [+ + +]
Author: Thomas Fourier <[email protected]>
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 <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mmc: sdhci-pci: Quirk for broken command queuing on Intel GLK-based Positivo models [+ + +]
Author: Edson Juliano Drosdeck <[email protected]>
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 <[email protected]>
    Fixes: bedf9fc01ff1 ("mmc: sdhci: Workaround broken command queuing on Intel GLK")
    Cc: [email protected]
    Acked-by: Adrian Hunter <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mmc: sdhci_am654: Workaround for Errata i2312 [+ + +]
Author: Judith Mendez <[email protected]>
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 <[email protected]>
    Acked-by: Adrian Hunter <[email protected]>
    Fixes: 41fd4caeb00b ("mmc: sdhci_am654: Add Initial Support for AM654 SDHCI driver")
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net/mlx5: Correctly set gso_size when LRO is used [+ + +]
Author: Christoph Paasch <[email protected]>
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 <[email protected]>)
     - Improve commit-message (Gal Pressman <[email protected]>)
    
    Fixes: e586b3b0baee ("net/mlx5: Ethernet Datapath files")
    Signed-off-by: Christoph Paasch <[email protected]>
    Reviewed-by: Tariq Toukan <[email protected]>
    Reviewed-by: Gal Pressman <[email protected]>
    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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/mlx5: Update the list of the PCI supported devices [+ + +]
Author: Maor Gottlieb <[email protected]>
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: [email protected]
    Signed-off-by: Maor Gottlieb <[email protected]>
    Reviewed-by: Mark Bloch <[email protected]>
    Reviewed-by: Eran Ben Elisha <[email protected]>
    Signed-off-by: Tariq Toukan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net/sched: Return NULL when htb_lookup_leaf encounters an empty rbtree [+ + +]
Author: William Liu <[email protected]>
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 <[email protected]>
    Signed-off-by: Savino Dicanosa <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: sch_qfq: Fix race condition on qfq_aggregate [+ + +]
Author: Xiang Mei <[email protected]>
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 <[email protected]>
    Reviewed-by: Cong Wang <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net: bridge: Do not offload IGMP/MLD messages [+ + +]
Author: Joseph Huang <[email protected]>
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 <[email protected]>
    Acked-by: Nikolay Aleksandrov <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: emaclite: Fix missing pointer increment in aligned_read() [+ + +]
Author: Alok Tiwari <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: libwx: fix the using of Rx buffer DMA [+ + +]
Author: Jiawen Wu <[email protected]>
Date:   Mon Jul 14 10:47:54 2025 +0800

    net: libwx: fix the using of Rx buffer DMA
    
    commit 5fd77cc6bd9b368431a815a780e407b7781bcca0 upstream.
    
    The wx_rx_buffer structure contained two DMA address fields: 'dma' and
    'page_dma'. However, only 'page_dma' was actually initialized and used
    to program the Rx descriptor. But 'dma' was uninitialized and used in
    some paths.
    
    This could lead to undefined behavior, including DMA errors or
    use-after-free, if the uninitialized 'dma' was used. Althrough such
    error has not yet occurred, it is worth fixing in the code.
    
    Fixes: 3c47e8ae113a ("net: libwx: Support to receive packets in NAPI")
    Cc: [email protected]
    Signed-off-by: Jiawen Wu <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: libwx: properly reset Rx ring descriptor [+ + +]
Author: Jiawen Wu <[email protected]>
Date:   Mon Jul 14 10:47:55 2025 +0800

    net: libwx: properly reset Rx ring descriptor
    
    commit d992ed7e1b687ad7df0763d3e015a5358646210b upstream.
    
    When device reset is triggered by feature changes such as toggling Rx
    VLAN offload, wx->do_reset() is called to reinitialize Rx rings. The
    hardware descriptor ring may retain stale values from previous sessions.
    And only set the length to 0 in rx_desc[0] would result in building
    malformed SKBs. Fix it to ensure a clean slate after device reset.
    
    [  549.186435] [     C16] ------------[ cut here ]------------
    [  549.186457] [     C16] kernel BUG at net/core/skbuff.c:2814!
    [  549.186468] [     C16] Oops: invalid opcode: 0000 [#1] SMP NOPTI
    [  549.186472] [     C16] CPU: 16 UID: 0 PID: 0 Comm: swapper/16 Kdump: loaded Not tainted 6.16.0-rc4+ #23 PREEMPT(voluntary)
    [  549.186476] [     C16] Hardware name: Micro-Star International Co., Ltd. MS-7E16/X670E GAMING PLUS WIFI (MS-7E16), BIOS 1.90 12/31/2024
    [  549.186478] [     C16] RIP: 0010:__pskb_pull_tail+0x3ff/0x510
    [  549.186484] [     C16] Code: 06 f0 ff 4f 34 74 7b 4d 8b 8c 24 c8 00 00 00 45 8b 84 24 c0 00 00 00 e9 c8 fd ff ff 48 c7 44 24 08 00 00 00 00 e9 5e fe ff ff <0f> 0b 31 c0 e9 23 90 5b ff 41 f7 c6 ff 0f 00 00 75 bf 49 8b 06 a8
    [  549.186487] [     C16] RSP: 0018:ffffb391c0640d70 EFLAGS: 00010282
    [  549.186490] [     C16] RAX: 00000000fffffff2 RBX: ffff8fe7e4d40200 RCX: 00000000fffffff2
    [  549.186492] [     C16] RDX: ffff8fe7c3a4bf8e RSI: 0000000000000180 RDI: ffff8fe7c3a4bf40
    [  549.186494] [     C16] RBP: ffffb391c0640da8 R08: ffff8fe7c3a4c0c0 R09: 000000000000000e
    [  549.186496] [     C16] R10: ffffb391c0640d88 R11: 000000000000000e R12: ffff8fe7e4d40200
    [  549.186497] [     C16] R13: 00000000fffffff2 R14: ffff8fe7fa01a000 R15: 00000000fffffff2
    [  549.186499] [     C16] FS:  0000000000000000(0000) GS:ffff8fef5ae40000(0000) knlGS:0000000000000000
    [  549.186502] [     C16] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  549.186503] [     C16] CR2: 00007f77d81d6000 CR3: 000000051a032000 CR4: 0000000000750ef0
    [  549.186505] [     C16] PKRU: 55555554
    [  549.186507] [     C16] Call Trace:
    [  549.186510] [     C16]  <IRQ>
    [  549.186513] [     C16]  ? srso_alias_return_thunk+0x5/0xfbef5
    [  549.186517] [     C16]  __skb_pad+0xc7/0xf0
    [  549.186523] [     C16]  wx_clean_rx_irq+0x355/0x3b0 [libwx]
    [  549.186533] [     C16]  wx_poll+0x92/0x120 [libwx]
    [  549.186540] [     C16]  __napi_poll+0x28/0x190
    [  549.186544] [     C16]  net_rx_action+0x301/0x3f0
    [  549.186548] [     C16]  ? srso_alias_return_thunk+0x5/0xfbef5
    [  549.186551] [     C16]  ? __raw_spin_lock_irqsave+0x1e/0x50
    [  549.186554] [     C16]  ? srso_alias_return_thunk+0x5/0xfbef5
    [  549.186557] [     C16]  ? wake_up_nohz_cpu+0x35/0x160
    [  549.186559] [     C16]  ? srso_alias_return_thunk+0x5/0xfbef5
    [  549.186563] [     C16]  handle_softirqs+0xf9/0x2c0
    [  549.186568] [     C16]  __irq_exit_rcu+0xc7/0x130
    [  549.186572] [     C16]  common_interrupt+0xb8/0xd0
    [  549.186576] [     C16]  </IRQ>
    [  549.186577] [     C16]  <TASK>
    [  549.186579] [     C16]  asm_common_interrupt+0x22/0x40
    [  549.186582] [     C16] RIP: 0010:cpuidle_enter_state+0xc2/0x420
    [  549.186585] [     C16] Code: 00 00 e8 11 0e 5e ff e8 ac f0 ff ff 49 89 c5 0f 1f 44 00 00 31 ff e8 0d ed 5c ff 45 84 ff 0f 85 40 02 00 00 fb 0f 1f 44 00 00 <45> 85 f6 0f 88 84 01 00 00 49 63 d6 48 8d 04 52 48 8d 04 82 49 8d
    [  549.186587] [     C16] RSP: 0018:ffffb391c0277e78 EFLAGS: 00000246
    [  549.186590] [     C16] RAX: ffff8fef5ae40000 RBX: 0000000000000003 RCX: 0000000000000000
    [  549.186591] [     C16] RDX: 0000007fde0faac5 RSI: ffffffff826e53f6 RDI: ffffffff826fa9b3
    [  549.186593] [     C16] RBP: ffff8fe7c3a20800 R08: 0000000000000002 R09: 0000000000000000
    [  549.186595] [     C16] R10: 0000000000000000 R11: 000000000000ffff R12: ffffffff82ed7a40
    [  549.186596] [     C16] R13: 0000007fde0faac5 R14: 0000000000000003 R15: 0000000000000000
    [  549.186601] [     C16]  ? cpuidle_enter_state+0xb3/0x420
    [  549.186605] [     C16]  cpuidle_enter+0x29/0x40
    [  549.186609] [     C16]  cpuidle_idle_call+0xfd/0x170
    [  549.186613] [     C16]  do_idle+0x7a/0xc0
    [  549.186616] [     C16]  cpu_startup_entry+0x25/0x30
    [  549.186618] [     C16]  start_secondary+0x117/0x140
    [  549.186623] [     C16]  common_startup_64+0x13e/0x148
    [  549.186628] [     C16]  </TASK>
    
    Fixes: 3c47e8ae113a ("net: libwx: Support to receive packets in NAPI")
    Cc: [email protected]
    Signed-off-by: Jiawen Wu <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: libwx: remove duplicate page_pool_put_full_page() [+ + +]
Author: Jiawen Wu <[email protected]>
Date:   Mon Jul 14 10:47:53 2025 +0800

    net: libwx: remove duplicate page_pool_put_full_page()
    
    commit 1b7e585c04cd5f0731dd25ffd396277e55fae0e6 upstream.
    
    page_pool_put_full_page() should only be invoked when freeing Rx buffers
    or building a skb if the size is too short. At other times, the pages
    need to be reused. So remove the redundant page put. In the original
    code, double free pages cause kernel panic:
    
    [  876.949834]  __irq_exit_rcu+0xc7/0x130
    [  876.949836]  common_interrupt+0xb8/0xd0
    [  876.949838]  </IRQ>
    [  876.949838]  <TASK>
    [  876.949840]  asm_common_interrupt+0x22/0x40
    [  876.949841] RIP: 0010:cpuidle_enter_state+0xc2/0x420
    [  876.949843] Code: 00 00 e8 d1 1d 5e ff e8 ac f0 ff ff 49 89 c5 0f 1f 44 00 00 31 ff e8 cd fc 5c ff 45 84 ff 0f 85 40 02 00 00 fb 0f 1f 44 00 00 <45> 85 f6 0f 88 84 01 00 00 49 63 d6 48 8d 04 52 48 8d 04 82 49 8d
    [  876.949844] RSP: 0018:ffffaa7340267e78 EFLAGS: 00000246
    [  876.949845] RAX: ffff9e3f135be000 RBX: 0000000000000002 RCX: 0000000000000000
    [  876.949846] RDX: 000000cc2dc4cb7c RSI: ffffffff89ee49ae RDI: ffffffff89ef9f9e
    [  876.949847] RBP: ffff9e378f940800 R08: 0000000000000002 R09: 00000000000000ed
    [  876.949848] R10: 000000000000afc8 R11: ffff9e3e9e5a9b6c R12: ffffffff8a6d8580
    [  876.949849] R13: 000000cc2dc4cb7c R14: 0000000000000002 R15: 0000000000000000
    [  876.949852]  ? cpuidle_enter_state+0xb3/0x420
    [  876.949855]  cpuidle_enter+0x29/0x40
    [  876.949857]  cpuidle_idle_call+0xfd/0x170
    [  876.949859]  do_idle+0x7a/0xc0
    [  876.949861]  cpu_startup_entry+0x25/0x30
    [  876.949862]  start_secondary+0x117/0x140
    [  876.949864]  common_startup_64+0x13e/0x148
    [  876.949867]  </TASK>
    [  876.949868] ---[ end trace 0000000000000000 ]---
    [  876.949869] ------------[ cut here ]------------
    [  876.949870] list_del corruption, ffffead40445a348->next is NULL
    [  876.949873] WARNING: CPU: 14 PID: 0 at lib/list_debug.c:52 __list_del_entry_valid_or_report+0x67/0x120
    [  876.949875] Modules linked in: snd_hrtimer(E) bnep(E) binfmt_misc(E) amdgpu(E) squashfs(E) vfat(E) loop(E) fat(E) amd_atl(E) snd_hda_codec_realtek(E) intel_rapl_msr(E) snd_hda_codec_generic(E) intel_rapl_common(E) snd_hda_scodec_component(E) snd_hda_codec_hdmi(E) snd_hda_intel(E) edac_mce_amd(E) snd_intel_dspcfg(E) snd_hda_codec(E) snd_hda_core(E) amdxcp(E) kvm_amd(E) snd_hwdep(E) gpu_sched(E) drm_panel_backlight_quirks(E) cec(E) snd_pcm(E) drm_buddy(E) snd_seq_dummy(E) drm_ttm_helper(E) btusb(E) kvm(E) snd_seq_oss(E) btrtl(E) ttm(E) btintel(E) snd_seq_midi(E) btbcm(E) drm_exec(E) snd_seq_midi_event(E) i2c_algo_bit(E) snd_rawmidi(E) bluetooth(E) drm_suballoc_helper(E) irqbypass(E) snd_seq(E) ghash_clmulni_intel(E) sha512_ssse3(E) drm_display_helper(E) aesni_intel(E) snd_seq_device(E) rfkill(E) snd_timer(E) gf128mul(E) drm_client_lib(E) drm_kms_helper(E) snd(E) i2c_piix4(E) joydev(E) soundcore(E) wmi_bmof(E) ccp(E) k10temp(E) i2c_smbus(E) gpio_amdpt(E) i2c_designware_platform(E) gpio_generic(E) sg(E)
    [  876.949914]  i2c_designware_core(E) sch_fq_codel(E) parport_pc(E) drm(E) ppdev(E) lp(E) parport(E) fuse(E) nfnetlink(E) ip_tables(E) ext4 crc16 mbcache jbd2 sd_mod sfp mdio_i2c i2c_core txgbe ahci ngbe pcs_xpcs libahci libwx r8169 phylink libata realtek ptp pps_core video wmi
    [  876.949933] CPU: 14 UID: 0 PID: 0 Comm: swapper/14 Kdump: loaded Tainted: G        W   E       6.16.0-rc2+ #20 PREEMPT(voluntary)
    [  876.949935] Tainted: [W]=WARN, [E]=UNSIGNED_MODULE
    [  876.949936] Hardware name: Micro-Star International Co., Ltd. MS-7E16/X670E GAMING PLUS WIFI (MS-7E16), BIOS 1.90 12/31/2024
    [  876.949936] RIP: 0010:__list_del_entry_valid_or_report+0x67/0x120
    [  876.949938] Code: 00 00 00 48 39 7d 08 0f 85 a6 00 00 00 5b b8 01 00 00 00 5d 41 5c e9 73 0d 93 ff 48 89 fe 48 c7 c7 a0 31 e8 89 e8 59 7c b3 ff <0f> 0b 31 c0 5b 5d 41 5c e9 57 0d 93 ff 48 89 fe 48 c7 c7 c8 31 e8
    [  876.949940] RSP: 0018:ffffaa73405d0c60 EFLAGS: 00010282
    [  876.949941] RAX: 0000000000000000 RBX: ffffead40445a348 RCX: 0000000000000000
    [  876.949942] RDX: 0000000000000105 RSI: 0000000000000001 RDI: 00000000ffffffff
    [  876.949943] RBP: 0000000000000000 R08: 000000010006dfde R09: ffffffff8a47d150
    [  876.949944] R10: ffffffff8a47d150 R11: 0000000000000003 R12: dead000000000122
    [  876.949945] R13: ffff9e3e9e5af700 R14: ffffead40445a348 R15: ffff9e3e9e5af720
    [  876.949946] FS:  0000000000000000(0000) GS:ffff9e3f135be000(0000) knlGS:0000000000000000
    [  876.949947] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  876.949948] CR2: 00007fa58b480048 CR3: 0000000156724000 CR4: 0000000000750ef0
    [  876.949949] PKRU: 55555554
    [  876.949950] Call Trace:
    [  876.949951]  <IRQ>
    [  876.949952]  __rmqueue_pcplist+0x53/0x2c0
    [  876.949955]  alloc_pages_bulk_noprof+0x2e0/0x660
    [  876.949958]  __page_pool_alloc_pages_slow+0xa9/0x400
    [  876.949961]  page_pool_alloc_pages+0xa/0x20
    [  876.949963]  wx_alloc_rx_buffers+0xd7/0x110 [libwx]
    [  876.949967]  wx_clean_rx_irq+0x262/0x430 [libwx]
    [  876.949971]  wx_poll+0x92/0x130 [libwx]
    [  876.949975]  __napi_poll+0x28/0x190
    [  876.949977]  net_rx_action+0x301/0x3f0
    [  876.949980]  ? srso_alias_return_thunk+0x5/0xfbef5
    [  876.949981]  ? profile_tick+0x30/0x70
    [  876.949983]  ? srso_alias_return_thunk+0x5/0xfbef5
    [  876.949984]  ? srso_alias_return_thunk+0x5/0xfbef5
    [  876.949986]  ? timerqueue_add+0xa3/0xc0
    [  876.949988]  ? srso_alias_return_thunk+0x5/0xfbef5
    [  876.949989]  ? __raise_softirq_irqoff+0x16/0x70
    [  876.949991]  ? srso_alias_return_thunk+0x5/0xfbef5
    [  876.949993]  ? srso_alias_return_thunk+0x5/0xfbef5
    [  876.949994]  ? wx_msix_clean_rings+0x41/0x50 [libwx]
    [  876.949998]  handle_softirqs+0xf9/0x2c0
    
    Fixes: 3c47e8ae113a ("net: libwx: Support to receive packets in NAPI")
    Cc: [email protected]
    Signed-off-by: Jiawen Wu <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: phy: Don't register LEDs for genphy [+ + +]
Author: Sean Anderson <[email protected]>
Date:   Mon Jul 7 15:58:03 2025 -0400

    net: phy: Don't register LEDs for genphy
    
    [ Upstream commit f0f2b992d8185a0366be951685e08643aae17d6d ]
    
    If a PHY has no driver, the genphy driver is probed/removed directly in
    phy_attach/detach. If the PHY's ofnode has an "leds" subnode, then the
    LEDs will be (un)registered when probing/removing the genphy driver.
    This could occur if the leds are for a non-generic driver that isn't
    loaded for whatever reason. Synchronously removing the PHY device in
    phy_detach leads to the following deadlock:
    
    rtnl_lock()
    ndo_close()
        ...
        phy_detach()
            phy_remove()
                phy_leds_unregister()
                    led_classdev_unregister()
                        led_trigger_set()
                            netdev_trigger_deactivate()
                                unregister_netdevice_notifier()
                                    rtnl_lock()
    
    There is a corresponding deadlock on the open/register side of things
    (and that one is reported by lockdep), but it requires a race while this
    one is deterministic.
    
    Generic PHYs do not support LEDs anyway, so don't bother registering
    them.
    
    Fixes: 01e5b728e9e4 ("net: phy: Add a binding for PHY LEDs")
    Signed-off-by: Sean Anderson <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: vlan: fix VLAN 0 refcount imbalance of toggling filtering during runtime [+ + +]
Author: Dong Chenchen <[email protected]>
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: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=a8b046e462915c65b10b
    Suggested-by: Ido Schimmel <[email protected]>
    Signed-off-by: Dong Chenchen <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
netfilter: nf_conntrack: fix crash due to removal of uninitialised entry [+ + +]
Author: Florian Westphal <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/netfilter-devel/[email protected]/
    Link: https://lore.kernel.org/netfilter-devel/[email protected]/
    Fixes: 1397af5bfd7d ("netfilter: conntrack: remove the percpu dying list")
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nvme: fix inconsistent RCU list manipulation in nvme_ns_add_to_ctrl_list() [+ + +]
Author: Zheng Qixing <[email protected]>
Date:   Tue Jul 1 15:17:17 2025 +0800

    nvme: fix inconsistent RCU list manipulation in nvme_ns_add_to_ctrl_list()
    
    [ Upstream commit 80d7762e0a42307ee31b21f090e21349b98c14f6 ]
    
    When inserting a namespace into the controller's namespace list, the
    function uses list_add_rcu() when the namespace is inserted in the middle
    of the list, but falls back to a regular list_add() when adding at the
    head of the list.
    
    This inconsistency could lead to race conditions during concurrent
    access, as users might observe a partially updated list. Fix this by
    consistently using list_add_rcu() in both code paths to ensure proper
    RCU protection throughout the entire function.
    
    Fixes: be647e2c76b2 ("nvme: use srcu for iterating namespace list")
    Signed-off-by: Zheng Qixing <[email protected]>
    Signed-off-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

nvme: fix misaccounting of nvme-mpath inflight I/O [+ + +]
Author: Yu Kuai <[email protected]>
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 <[email protected]>
    Closes: https://lore.kernel.org/all/CAHj4cs_+dauobyYyP805t33WMJVzOWj=7+51p4_j9rA63D9sog@mail.gmail.com/
    Signed-off-by: Yu Kuai <[email protected]>
    Signed-off-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nvmem: imx-ocotp: fix MAC address byte length [+ + +]
Author: Steffen Bätz <[email protected]>
Date:   Sat Jul 12 19:17:27 2025 +0100

    nvmem: imx-ocotp: fix MAC address byte length
    
    commit 2aa4ad626ee7f817a8f4715a47b318cfdc1714c9 upstream.
    
    The commit "13bcd440f2ff nvmem: core: verify cell's raw_len" caused an
    extension of the "mac-address" cell from 6 to 8 bytes due to word_size
    of 4 bytes. This led to a required byte swap of the full buffer length,
    which caused truncation of the mac-address when read.
    
    Previously, the mac-address was incorrectly truncated from
    70:B3:D5:14:E9:0E to 00:00:70:B3:D5:14.
    
    Fix the issue by swapping only the first 6 bytes to correctly pass the
    mac-address to the upper layers.
    
    Fixes: 13bcd440f2ff ("nvmem: core: verify cell's raw_len")
    Cc: [email protected]
    Signed-off-by: Steffen Bätz <[email protected]>
    Tested-by: Alexander Stein <[email protected]>
    Signed-off-by: Srinivas Kandagatla <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

nvmem: layouts: u-boot-env: remove crc32 endianness conversion [+ + +]
Author: Michael C. Pratt <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]
    Cc: [email protected]
    Signed-off-by: "Michael C. Pratt" <[email protected]>
    Signed-off-by: Srinivas Kandagatla <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    [ 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 <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
pch_uart: Fix dma_sync_sg_for_device() nents value [+ + +]
Author: Thomas Fourier <[email protected]>
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 <[email protected]>
    Signed-off-by: Thomas Fourier <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
phonet/pep: Move call to pn_skb_get_dst_sockaddr() earlier in pep_sock_accept() [+ + +]
Author: Nathan Chancellor <[email protected]>
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: [email protected]
    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 <[email protected]>
    Link: https://patch.msgid.link/20250715-net-phonet-fix-uninit-const-pointer-v1-1-8efd1bd188b3@kernel.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
phy: tegra: xusb: Decouple CYA_TRK_CODE_UPDATE_ON_IDLE from trk_hw_mode [+ + +]
Author: Wayne Chang <[email protected]>
Date:   Mon May 19 17:09:28 2025 +0800

    phy: tegra: xusb: Decouple CYA_TRK_CODE_UPDATE_ON_IDLE from trk_hw_mode
    
    commit 24c63c590adca310e0df95c77cf7aa5552bc3fc5 upstream.
    
    The logic that drives the pad calibration values resides in the
    controller reset domain and so the calibration values are only being
    captured when the controller is out of reset. However, by clearing the
    CYA_TRK_CODE_UPDATE_ON_IDLE bit, the calibration values can be set
    while the controller is in reset.
    
    The CYA_TRK_CODE_UPDATE_ON_IDLE bit was previously cleared based on the
    trk_hw_mode flag, but this dependency is not necessary. Instead,
    introduce a new flag, trk_update_on_idle, to independently control this
    bit.
    
    Fixes: d8163a32ca95 ("phy: tegra: xusb: Add Tegra234 support")
    Cc: [email protected]
    Signed-off-by: Wayne Chang <[email protected]>
    Reviewed-by: Jon Hunter <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

phy: tegra: xusb: Disable periodic tracking on Tegra234 [+ + +]
Author: Haotien Hsu <[email protected]>
Date:   Mon May 19 17:09:29 2025 +0800

    phy: tegra: xusb: Disable periodic tracking on Tegra234
    
    commit 7be54870e9bf5ed0b4fe2a23b41a630527882de5 upstream.
    
    Periodic calibration updates (~10µs) may overlap with transfers when
    PCIe NVMe SSD, LPDDR, and USB2 devices operate simultaneously, causing
    crosstalk on Tegra234 devices. Hence disable periodic calibration updates
    and make this a one-time calibration.
    
    Fixes: d8163a32ca95 ("phy: tegra: xusb: Add Tegra234 support")
    Cc: [email protected]
    Signed-off-by: Haotien Hsu <[email protected]>
    Signed-off-by: Wayne Chang <[email protected]>
    Reviewed-by: Jon Hunter <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

phy: tegra: xusb: Fix unbalanced regulator disable in UTMI PHY mode [+ + +]
Author: Wayne Chang <[email protected]>
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: [email protected]
    Signed-off-by: Wayne Chang <[email protected]>
    Reviewed-by: Jon Hunter <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
 
pmdomain: governor: Consider CPU latency tolerance from pm_domain_cpu_gov [+ + +]
Author: Maulik Shah <[email protected]>
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 <[email protected]>
    Fixes: e94999688e3a ("PM / Domains: Add genpd governor for CPUs")
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
regulator: pwm-regulator: Calculate the output voltage for disabled PWMs [+ + +]
Author: Martin Blumenstingl <[email protected]>
Date:   Sat Jan 13 23:46:27 2024 +0100

    regulator: pwm-regulator: Calculate the output voltage for disabled PWMs
    
    commit 6a7d11efd6915d80a025f2a0be4ae09d797b91ec upstream.
    
    If a PWM output is disabled then it's voltage has to be calculated
    based on a zero duty cycle (for normal polarity) or duty cycle being
    equal to the PWM period (for inverted polarity). Add support for this
    to pwm_regulator_get_voltage().
    
    Signed-off-by: Martin Blumenstingl <[email protected]>
    Link: https://msgid.link/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Chukun Pan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

regulator: pwm-regulator: Manage boot-on with disabled PWM channels [+ + +]
Author: Martin Blumenstingl <[email protected]>
Date:   Sat Jan 13 23:46:28 2024 +0100

    regulator: pwm-regulator: Manage boot-on with disabled PWM channels
    
    commit b3cbdcc191819b75c04178142e2d0d4c668f68c0 upstream.
    
    Odroid-C1 uses a Monolithic Power Systems MP2161 controlled via PWM for
    the VDDEE voltage supply of the Meson8b SoC. Commit 6b9352f3f8a1 ("pwm:
    meson: modify and simplify calculation in meson_pwm_get_state") results
    in my Odroid-C1 crashing with memory corruption in many different places
    (seemingly at random). It turns out that this is due to a currently not
    supported corner case.
    
    The VDDEE regulator can generate between 860mV (duty cycle of ~91%) and
    1140mV (duty cycle of 0%). We consider it to be enabled by the bootloader
    (which is why it has the regulator-boot-on flag in .dts) as well as
    being always-on (which is why it has the regulator-always-on flag in
    .dts) because the VDDEE voltage is generally required for the Meson8b
    SoC to work. The public S805 datasheet [0] states on page 17 (where "A5"
    refers to the Cortex-A5 CPU cores):
      [...] So if EE domains is shut off, A5 memory is also shut off. That
      does not matter. Before EE power domain is shut off, A5 should be shut
      off at first.
    
    It turns out that at least some bootloader versions are keeping the PWM
    output disabled. This is not a problem due to the specific design of the
    regulator: when the PWM output is disabled the output pin is pulled LOW,
    effectively achieving a 0% duty cycle (which in return means that VDDEE
    voltage is at 1140mV).
    
    The problem comes when the pwm-regulator driver tries to initialize the
    PWM output. To do so it reads the current state from the hardware, which
    is:
      period: 3666ns
      duty cycle: 3333ns (= ~91%)
      enabled: false
    Then those values are translated using the continuous voltage range to
    860mV.
    Later, when the regulator is being enabled (either by the regulator core
    due to the always-on flag or first consumer - in this case the lima
    driver for the Mali-450 GPU) the pwm-regulator driver tries to keep the
    voltage (at 860mV) and just enable the PWM output. This is when things
    start to go wrong as the typical voltage used for VDDEE is 1100mV.
    
    Commit 6b9352f3f8a1 ("pwm: meson: modify and simplify calculation in
    meson_pwm_get_state") triggers above condition as before that change
    period and duty cycle were both at 0. Since the change to the pwm-meson
    driver is considered correct the solution is to be found in the
    pwm-regulator driver. Update the duty cycle during driver probe if the
    regulator is flagged as boot-on so that a call to pwm_regulator_enable()
    (by the regulator core during initialization of a regulator flagged with
    boot-on) without any preceding call to pwm_regulator_set_voltage() does
    not change the output voltage.
    
    [0] https://dn.odroid.com/S805/Datasheet/S805_Datasheet%20V0.8%2020150126.pdf
    
    Signed-off-by: Martin Blumenstingl <[email protected]>
    Link: https://msgid.link/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Chukun Pan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "cgroup_freezer: cgroup_freezing: Check if not frozen" [+ + +]
Author: Chen Ridong <[email protected]>
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<[email protected]>
    Signed-off-by: Chen Ridong <[email protected]>
    Signed-off-by: Tejun Heo <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Revert "selftests/bpf: adjust dummy_st_ops_success to detect additional error" [+ + +]
Author: Shung-Hsi Yu <[email protected]>
Date:   Thu Jul 17 16:09:24 2025 +0800

    Revert "selftests/bpf: adjust dummy_st_ops_success to detect additional error"
    
    This reverts commit 264451a364dba5ca6cb2878126a9798dfc0b1a06 which is
    commit 3b3b84aacb4420226576c9732e7b539ca7b79633 upstream.
    
    The updated dummy_st_ops test requires commit 1479eaff1f16 ("bpf: mark
    bpf_dummy_struct_ops.test_1 parameter as nullable"), which in turn depends on
    "Support PTR_MAYBE_NULL for struct_ops arguments" series (see link below),
    neither are backported to stable 6.6.
    
    Without them the kernel simply panics from null pointer dereference half way
    through running BPF selftests.
    
        #68/1    deny_namespace/unpriv_userns_create_no_bpf:OK
        #68/2    deny_namespace/userns_create_bpf:OK
        #68      deny_namespace:OK
        [   26.829153] BUG: kernel NULL pointer dereference, address: 0000000000000000
        [   26.831136] #PF: supervisor read access in kernel mode
        [   26.832635] #PF: error_code(0x0000) - not-present page
        [   26.833999] PGD 0 P4D 0
        [   26.834771] Oops: 0000 [#1] PREEMPT SMP PTI
        [   26.835997] CPU: 2 PID: 119 Comm: test_progs Tainted: G           OE      6.6.66-00003-gd80551078e71 #3
        [   26.838774] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.14.0-2 04/01/2014
        [   26.841152] RIP: 0010:bpf_prog_8ee9cbe7c9b5a50f_test_1+0x17/0x24
        [   26.842877] Code: 00 00 00 cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc f3 0f 1e fa 0f 1f 44 00 00 66 90 55 48 89 e5 f3 0f 1e fa 48 8b 7f 00 <8b> 47 00 be 5a 00 00 00 89 77 00 c9 c3 cc cc cc cc cc cc cc cc c0
        [   26.847953] RSP: 0018:ffff9e6b803b7d88 EFLAGS: 00010202
        [   26.849425] RAX: 0000000000000001 RBX: 0000000000000001 RCX: 2845e103d7dffb60
        [   26.851483] RDX: 0000000000000000 RSI: 0000000084d09025 RDI: 0000000000000000
        [   26.853508] RBP: ffff9e6b803b7d88 R08: 0000000000000001 R09: 0000000000000000
        [   26.855670] R10: 0000000000000000 R11: 0000000000000000 R12: ffff9754c0b5f700
        [   26.857824] R13: ffff9754c09cc800 R14: ffff9754c0b5f680 R15: ffff9754c0b5f760
        [   26.859741] FS:  00007f77dee12740(0000) GS:ffff9754fbc80000(0000) knlGS:0000000000000000
        [   26.862087] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
        [   26.863705] CR2: 0000000000000000 CR3: 00000001020e6003 CR4: 0000000000170ee0
        [   26.865689] Call Trace:
        [   26.866407]  <TASK>
        [   26.866982]  ? __die+0x24/0x70
        [   26.867774]  ? page_fault_oops+0x15b/0x450
        [   26.868882]  ? search_bpf_extables+0xb0/0x160
        [   26.870076]  ? fixup_exception+0x26/0x330
        [   26.871214]  ? exc_page_fault+0x64/0x190
        [   26.872293]  ? asm_exc_page_fault+0x26/0x30
        [   26.873352]  ? bpf_prog_8ee9cbe7c9b5a50f_test_1+0x17/0x24
        [   26.874705]  ? __bpf_prog_enter+0x3f/0xc0
        [   26.875718]  ? bpf_struct_ops_test_run+0x1b8/0x2c0
        [   26.876942]  ? __sys_bpf+0xc4e/0x2c30
        [   26.877898]  ? __x64_sys_bpf+0x20/0x30
        [   26.878812]  ? do_syscall_64+0x37/0x90
        [   26.879704]  ? entry_SYSCALL_64_after_hwframe+0x78/0xe2
        [   26.880918]  </TASK>
        [   26.881409] Modules linked in: bpf_testmod(OE) [last unloaded: bpf_testmod(OE)]
        [   26.883095] CR2: 0000000000000000
        [   26.883934] ---[ end trace 0000000000000000 ]---
        [   26.885099] RIP: 0010:bpf_prog_8ee9cbe7c9b5a50f_test_1+0x17/0x24
        [   26.886452] Code: 00 00 00 cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc f3 0f 1e fa 0f 1f 44 00 00 66 90 55 48 89 e5 f3 0f 1e fa 48 8b 7f 00 <8b> 47 00 be 5a 00 00 00 89 77 00 c9 c3 cc cc cc cc cc cc cc cc c0
        [   26.890379] RSP: 0018:ffff9e6b803b7d88 EFLAGS: 00010202
        [   26.891450] RAX: 0000000000000001 RBX: 0000000000000001 RCX: 2845e103d7dffb60
        [   26.892779] RDX: 0000000000000000 RSI: 0000000084d09025 RDI: 0000000000000000
        [   26.894254] RBP: ffff9e6b803b7d88 R08: 0000000000000001 R09: 0000000000000000
        [   26.895630] R10: 0000000000000000 R11: 0000000000000000 R12: ffff9754c0b5f700
        [   26.897008] R13: ffff9754c09cc800 R14: ffff9754c0b5f680 R15: ffff9754c0b5f760
        [   26.898337] FS:  00007f77dee12740(0000) GS:ffff9754fbc80000(0000) knlGS:0000000000000000
        [   26.899972] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
        [   26.901076] CR2: 0000000000000000 CR3: 00000001020e6003 CR4: 0000000000170ee0
        [   26.902336] Kernel panic - not syncing: Fatal exception
        [   26.903639] Kernel Offset: 0x36000000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
        [   26.905693] ---[ end Kernel panic - not syncing: Fatal exception ]---
    
    Link: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Shung-Hsi Yu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Revert "selftests/bpf: dummy_st_ops should reject 0 for non-nullable params" [+ + +]
Author: Shung-Hsi Yu <[email protected]>
Date:   Thu Jul 17 16:09:25 2025 +0800

    Revert "selftests/bpf: dummy_st_ops should reject 0 for non-nullable params"
    
    This reverts commit e7d193073a223663612301c659e53795b991ca89 which is
    commit 6a2d30d3c5bf9f088dcfd5f3746b04d84f2fab83 upstream.
    
    The dummy_st_ops/dummy_sleepable_reject_null test requires commit 980ca8ceeae6
    ("bpf: check bpf_dummy_struct_ops program params for test runs"), which in turn
    depends on "Support PTR_MAYBE_NULL for struct_ops arguments" series (see link
    below), neither are backported to stable 6.6.
    
    Link: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Shung-Hsi Yu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
rpl: Fix use-after-free in rpl_do_srh_inline(). [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
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 <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
rxrpc: Fix recv-recv race of completed call [+ + +]
Author: David Howells <[email protected]>
Date:   Thu Jul 17 08:43:42 2025 +0100

    rxrpc: Fix recv-recv race of completed call
    
    [ Upstream commit 962fb1f651c2cf2083e0c3ef53ba69e3b96d3fbc ]
    
    If a call receives an event (such as incoming data), the call gets placed
    on the socket's queue and a thread in recvmsg can be awakened to go and
    process it.  Once the thread has picked up the call off of the queue,
    further events will cause it to be requeued, and once the socket lock is
    dropped (recvmsg uses call->user_mutex to allow the socket to be used in
    parallel), a second thread can come in and its recvmsg can pop the call off
    the socket queue again.
    
    In such a case, the first thread will be receiving stuff from the call and
    the second thread will be blocked on call->user_mutex.  The first thread
    can, at this point, process both the event that it picked call for and the
    event that the second thread picked the call for and may see the call
    terminate - in which case the call will be "released", decoupling the call
    from the user call ID assigned to it (RXRPC_USER_CALL_ID in the control
    message).
    
    The first thread will return okay, but then the second thread will wake up
    holding the user_mutex and, if it sees that the call has been released by
    the first thread, it will BUG thusly:
    
            kernel BUG at net/rxrpc/recvmsg.c:474!
    
    Fix this by just dequeuing the call and ignoring it if it is seen to be
    already released.  We can't tell userspace about it anyway as the user call
    ID has become stale.
    
    Fixes: 248f219cb8bc ("rxrpc: Rewrite the data and ack handling code")
    Reported-by: Junvyyang, Tencent Zhuque Lab <[email protected]>
    Signed-off-by: David Howells <[email protected]>
    Reviewed-by: Jeffrey Altman <[email protected]>
    cc: LePremierHomme <[email protected]>
    cc: Marc Dionne <[email protected]>
    cc: Simon Horman <[email protected]>
    cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

rxrpc: Fix transmission of an abort in response to an abort [+ + +]
Author: David Howells <[email protected]>
Date:   Thu Jul 17 08:43:44 2025 +0100

    rxrpc: Fix transmission of an abort in response to an abort
    
    [ Upstream commit e9c0b96ec0a34fcacdf9365713578d83cecac34c ]
    
    Under some circumstances, such as when a server socket is closing, ABORT
    packets will be generated in response to incoming packets.  Unfortunately,
    this also may include generating aborts in response to incoming aborts -
    which may cause a cycle.  It appears this may be made possible by giving
    the client a multicast address.
    
    Fix this such that rxrpc_reject_packet() will refuse to generate aborts in
    response to aborts.
    
    Fixes: 248f219cb8bc ("rxrpc: Rewrite the data and ack handling code")
    Signed-off-by: David Howells <[email protected]>
    Reviewed-by: Jeffrey Altman <[email protected]>
    cc: Marc Dionne <[email protected]>
    cc: Junvyyang, Tencent Zhuque Lab <[email protected]>
    cc: LePremierHomme <[email protected]>
    cc: Linus Torvalds <[email protected]>
    cc: Simon Horman <[email protected]>
    cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
s390/bpf: Fix bpf_arch_text_poke() with new_addr == NULL again [+ + +]
Author: Ilya Leoshkevich <[email protected]>
Date:   Wed Jul 16 21:35:06 2025 +0200

    s390/bpf: Fix bpf_arch_text_poke() with new_addr == NULL again
    
    commit 6a5abf8cf182f577c7ae6c62f14debc9754ec986 upstream.
    
    Commit 7ded842b356d ("s390/bpf: Fix bpf_plt pointer arithmetic") has
    accidentally removed the critical piece of commit c730fce7c70c
    ("s390/bpf: Fix bpf_arch_text_poke() with new_addr == NULL"), causing
    intermittent kernel panics in e.g. perf's on_switch() prog to reappear.
    
    Restore the fix and add a comment.
    
    Fixes: 7ded842b356d ("s390/bpf: Fix bpf_plt pointer arithmetic")
    Cc: [email protected]
    Signed-off-by: Ilya Leoshkevich <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sched: Change nr_uninterruptible type to unsigned long [+ + +]
Author: Aruna Ramakrishna <[email protected]>
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 <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
selftests: net: increase inter-packet timeout in udpgro.sh [+ + +]
Author: Paolo Abeni <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/b0370c06ddb3235debf642c17de0284b2cd3c652.1752163107.git.pabeni@redhat.com
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
smb: client: fix use-after-free in cifs_oplock_break [+ + +]
Author: Wang Zhaolong <[email protected]>
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) <[email protected]>
    Signed-off-by: Wang Zhaolong <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

smb: client: fix use-after-free in crypt_message when using async crypto [+ + +]
Author: Wang Zhaolong <[email protected]>
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/[email protected]/
    Cc: [email protected]
    Reviewed-by: Paulo Alcantara (Red Hat) <[email protected]>
    Signed-off-by: Wang Zhaolong <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
soc: aspeed: lpc-snoop: Cleanup resources in stack-order [+ + +]
Author: Andrew Jeffery <[email protected]>
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: [email protected]
    Cc: Jean Delvare <[email protected]>
    Acked-by: Jean Delvare <[email protected]>
    Link: https://patch.msgid.link/20250616-aspeed-lpc-snoop-fixes-v2-1-3cdd59c934d3@codeconstruct.com.au
    Signed-off-by: Andrew Jeffery <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

soc: aspeed: lpc-snoop: Don't disable channels that aren't enabled [+ + +]
Author: Andrew Jeffery <[email protected]>
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: [email protected]
    Cc: Jean Delvare <[email protected]>
    Acked-by: Jean Delvare <[email protected]>
    Link: https://patch.msgid.link/20250616-aspeed-lpc-snoop-fixes-v2-2-3cdd59c934d3@codeconstruct.com.au
    Signed-off-by: Andrew Jeffery <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
soundwire: amd: fix for clearing command status register [+ + +]
Author: Vijendar Mukunda <[email protected]>
Date:   Fri Jun 20 15:55:19 2025 +0530

    soundwire: amd: fix for clearing command status register
    
    [ Upstream commit a628e69b6412dc02757a6a23f7f16ce0c14d71f1 ]
    
    To clear the valid result status, 1 should be written to
    ACP_SDW_IMM_CMD_STS register. Update the ACP_SW_IMM_CMD_STS register value
    as 1.
    
    Fixes: d8f48fbdfd9a ("soundwire: amd: Add support for AMD Manager driver")
    Signed-off-by: Vijendar Mukunda <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

soundwire: amd: fix for handling slave alerts after link is down [+ + +]
Author: Vijendar Mukunda <[email protected]>
Date:   Fri May 30 11:13:39 2025 +0530

    soundwire: amd: fix for handling slave alerts after link is down
    
    [ Upstream commit 86a4371b76976158be875dc654ceee35c574b27b ]
    
    Sometimes, its observed that during system level suspend callback
    execution, after link is down, handling pending slave status workqueue
    results in mipi register access failures as shown below.
    
    soundwire sdw-master-0-0: trf on Slave 1 failed:-110 read addr 0 count 1
    rt722-sdca sdw:0:0:025d:0722:01: SDW_DP0_INT recheck read failed:-110
    rt722-sdca sdw:0:0:025d:0722:01: Slave 1 alert handling failed: -110
    amd_sdw_manager amd_sdw_manager.0: SDW0 cmd response timeout occurred
    amd_sdw_manager amd_sdw_manager.0: command timeout for Slave 1
    soundwire sdw-master-0-0: trf on Slave 1 failed:-110 write addr 5c count 1
    amd_sdw_manager amd_sdw_manager.0: SDW0 previous cmd status clear failed
    amd_sdw_manager amd_sdw_manager.0: command timeout for Slave 1
    soundwire sdw-master-0-0: trf on Slave 1 failed:-110 write addr 5d count 1
    amd_sdw_manager amd_sdw_manager.0: SDW0 previous cmd status clear failed
    amd_sdw_manager amd_sdw_manager.0: command timeout for Slave 1
    
    Cancel the pending slave status workqueue prior to initiating clock stop
    sequence during suspend callback execution for both the power modes.
    
    Fixes: 9cf1efc5ed2d ("soundwire: amd: add pm_prepare callback and pm ops support")
    Signed-off-by: Vijendar Mukunda <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
spi: Add check for 8-bit transfer with 8 IO mode support [+ + +]
Author: Cheng Ming Lin <[email protected]>
Date:   Mon Jul 14 11:10:23 2025 +0800

    spi: Add check for 8-bit transfer with 8 IO mode support
    
    commit 710505212e3272396394f8cf78e3ddfd05df3f22 upstream.
    
    The current SPI framework does not verify if the SPI device supports
    8 IO mode when doing an 8-bit transfer. This patch adds a check to
    ensure that if the transfer tx_nbits or rx_nbits is 8, the SPI mode must
    support 8 IO. If not, an error is returned, preventing undefined behavior.
    
    Fixes: d6a711a898672 ("spi: Fix OCTAL mode support")
    Cc: [email protected]
    Signed-off-by: Cheng Ming Lin <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
thunderbolt: Fix bit masking in tb_dp_port_set_hops() [+ + +]
Author: Alok Tiwari <[email protected]>
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: [email protected]
    Signed-off-by: Alok Tiwari <[email protected]>
    Signed-off-by: Mika Westerberg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

thunderbolt: Fix wake on connect at runtime [+ + +]
Author: Mario Limonciello <[email protected]>
Date:   Thu Jun 19 16:38:30 2025 -0500

    thunderbolt: Fix wake on connect at runtime
    
    commit 58d71d4242ce057955c783a14c82270c71f9e1e8 upstream.
    
    commit 1a760d10ded37 ("thunderbolt: Fix a logic error in wake on connect")
    fixated on the USB4 port sysfs wakeup file not working properly to control
    policy, but it had an unintended side effect that the sysfs file controls
    policy both at runtime and at suspend time. The sysfs file is supposed to
    only control behavior while system is suspended.
    
    Pass whether programming a port for runtime into usb4_switch_set_wake()
    and if runtime then ignore the value in the sysfs file.
    
    Cc: [email protected]
    Reported-by: Alexander Kovacs <[email protected]>
    Tested-by: Alexander Kovacs <[email protected]>
    Fixes: 1a760d10ded37 ("thunderbolt: Fix a logic error in wake on connect")
    Signed-off-by: Mario Limonciello <[email protected]>
    Signed-off-by: Mika Westerberg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tls: always refresh the queue when reading sock [+ + +]
Author: Jakub Kicinski <[email protected]>
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/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tracing/osnoise: Fix crash in timerlat_dump_stack() [+ + +]
Author: Tomas Glozar <[email protected]>
Date:   Wed Jul 16 16:36:01 2025 +0200

    tracing/osnoise: Fix crash in timerlat_dump_stack()
    
    commit 85a3bce695b361d85fc528e6fbb33e4c8089c806 upstream.
    
    We have observed kernel panics when using timerlat with stack saving,
    with the following dmesg output:
    
    memcpy: detected buffer overflow: 88 byte write of buffer size 0
    WARNING: CPU: 2 PID: 8153 at lib/string_helpers.c:1032 __fortify_report+0x55/0xa0
    CPU: 2 UID: 0 PID: 8153 Comm: timerlatu/2 Kdump: loaded Not tainted 6.15.3-200.fc42.x86_64 #1 PREEMPT(lazy)
    Call Trace:
     <TASK>
     ? trace_buffer_lock_reserve+0x2a/0x60
     __fortify_panic+0xd/0xf
     __timerlat_dump_stack.cold+0xd/0xd
     timerlat_dump_stack.part.0+0x47/0x80
     timerlat_fd_read+0x36d/0x390
     vfs_read+0xe2/0x390
     ? syscall_exit_to_user_mode+0x1d5/0x210
     ksys_read+0x73/0xe0
     do_syscall_64+0x7b/0x160
     ? exc_page_fault+0x7e/0x1a0
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    __timerlat_dump_stack() constructs the ftrace stack entry like this:
    
    struct stack_entry *entry;
    ...
    memcpy(&entry->caller, fstack->calls, size);
    entry->size = fstack->nr_entries;
    
    Since commit e7186af7fb26 ("tracing: Add back FORTIFY_SOURCE logic to
    kernel_stack event structure"), struct stack_entry marks its caller
    field with __counted_by(size). At the time of the memcpy, entry->size
    contains garbage from the ringbuffer, which under some circumstances is
    zero, triggering a kernel panic by buffer overflow.
    
    Populate the size field before the memcpy so that the out-of-bounds
    check knows the correct size. This is analogous to
    __ftrace_trace_stack().
    
    Cc: [email protected]
    Cc: John Kacur <[email protected]>
    Cc: Luis Goncalves <[email protected]>
    Cc: Attila Fazekas <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Fixes: e7186af7fb26 ("tracing: Add back FORTIFY_SOURCE logic to kernel_stack event structure")
    Signed-off-by: Tomas Glozar <[email protected]>
    Acked-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tracing/probes: Avoid using params uninitialized in parse_btf_arg() [+ + +]
Author: Nathan Chancellor <[email protected]>
Date:   Tue Jul 15 20:19:44 2025 -0700

    tracing/probes: Avoid using params uninitialized in parse_btf_arg()
    
    commit 1ed171a3afe81531b3ace96bd151a372dda3ee25 upstream.
    
    After a recent change in clang to strengthen uninitialized warnings [1],
    it points out that in one of the error paths in parse_btf_arg(), params
    is used uninitialized:
    
      kernel/trace/trace_probe.c:660:19: warning: variable 'params' is uninitialized when used here [-Wuninitialized]
        660 |                         return PTR_ERR(params);
            |                                        ^~~~~~
    
    Match many other NO_BTF_ENTRY error cases and return -ENOENT, clearing
    up the warning.
    
    Link: https://lore.kernel.org/all/20250715-trace_probe-fix-const-uninit-warning-v1-1-98960f91dd04@kernel.org/
    
    Cc: [email protected]
    Closes: https://github.com/ClangBuiltLinux/linux/issues/2110
    Fixes: d157d7694460 ("tracing/probes: Support BTF field access from $retval")
    Link: https://github.com/llvm/llvm-project/commit/2464313eef01c5b1edf0eccf57a32cdee01472c7 [1]
    Signed-off-by: Nathan Chancellor <[email protected]>
    Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tracing: Add down_write(trace_event_sem) when adding trace event [+ + +]
Author: Steven Rostedt <[email protected]>
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: [email protected]
    Cc: Mathieu Desnoyers <[email protected]>
    Acked-by: Masami Hiramatsu (Google) <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Reported-by: Fusheng Huang(黄富生)  <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Fixes: 110bf2b764eb6 ("tracing: add protection around module events unload")
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usb: dwc3: qcom: Don't leave BCR asserted [+ + +]
Author: Krishna Kurapati <[email protected]>
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 <[email protected]>
    Fixes: a4333c3a6ba9 ("usb: dwc3: Add Qualcomm DWC3 glue driver")
    Acked-by: Thinh Nguyen <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Signed-off-by: Krishna Kurapati <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    [ adapted to individual clock management instead of bulk clock operations ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: configfs: Fix OOB read on empty string write [+ + +]
Author: Xinyu Liu <[email protected]>
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 <[email protected]>
    Cc: stable <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: hub: Don't try to recover devices lost during warm reset. [+ + +]
Author: Mathias Nyman <[email protected]>
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: [email protected]
    Fixes: 8bea2bd37df0 ("usb: Add support for root hub port status CAS")
    Tested-by: Łukasz Bartosik <[email protected]>
    Signed-off-by: Mathias Nyman <[email protected]>
    Acked-by: Alan Stern <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: hub: fix detection of high tier USB3 devices behind suspended hubs [+ + +]
Author: Mathias Nyman <[email protected]>
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 <[email protected]>
    Fixes: 2839f5bcfcfc ("USB: Turn on auto-suspend for USB 3.0 hubs.")
    Acked-by: Alan Stern <[email protected]>
    Signed-off-by: Mathias Nyman <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: hub: Fix flushing and scheduling of delayed work that tunes runtime pm [+ + +]
Author: Mathias Nyman <[email protected]>
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 <[email protected]>
    Fixes: 8f5b7e2bec1c ("usb: hub: fix detection of high tier USB3 devices behind suspended hubs")
    Reported-by: Konrad Dybcio <[email protected]>
    Closes: https://lore.kernel.org/linux-usb/[email protected]
    Reported-by: Alan Stern <[email protected]>
    Closes: https://lore.kernel.org/linux-usb/[email protected]
    Signed-off-by: Mathias Nyman <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: hub: Fix flushing of delayed work used for post resume purposes [+ + +]
Author: Mathias Nyman <[email protected]>
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 <[email protected]>
    Fixes: a49e1e2e785f ("usb: hub: Fix flushing and scheduling of delayed work that tunes runtime pm")
    Reported-by: Mark Brown <[email protected]>
    Closes: https://lore.kernel.org/linux-usb/[email protected]
    Signed-off-by: Mathias Nyman <[email protected]>
    Tested-by: Konrad Dybcio <[email protected]> # SC8280XP CRD
    Tested-by: Mark Brown <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: musb: fix gadget state on disconnect [+ + +]
Author: Drew Hamilton <[email protected]>
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: [email protected]
    Co-authored-by: Yehowshua Immanuel <[email protected]>
    Signed-off-by: Yehowshua Immanuel <[email protected]>
    Signed-off-by: Drew Hamilton <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: net: sierra: check for no status endpoint [+ + +]
Author: Oliver Neukum <[email protected]>
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: [email protected]
    Closes: https://lore.kernel.org/linux-usb/[email protected]/
    Tested-by: [email protected]
    Fixes: eb4fd8cd355c8 ("net/usb: add sierra_net.c driver")
    Signed-off-by: Oliver Neukum <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
USB: serial: ftdi_sio: add support for NDI EMGUIDE GEMINI [+ + +]
Author: Ryan Mann (NDI) <[email protected]>
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 <[email protected]>
    Cc: [email protected]
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: option: add Foxconn T99W640 [+ + +]
Author: Slark Xiao <[email protected]>
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 <[email protected]>
    Cc: [email protected]
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: option: add Telit Cinterion FE910C04 (ECM) composition [+ + +]
Author: Fabio Porcedda <[email protected]>
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: [email protected]
    Signed-off-by: Fabio Porcedda <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
wifi: cfg80211: remove scan request n_channels counted_by [+ + +]
Author: Johannes Berg <[email protected]>
Date:   Mon Jul 14 14:21:30 2025 +0200

    wifi: cfg80211: remove scan request n_channels counted_by
    
    [ Upstream commit 444020f4bf06fb86805ee7e7ceec0375485fd94d ]
    
    This reverts commit e3eac9f32ec0 ("wifi: cfg80211: Annotate struct
    cfg80211_scan_request with __counted_by").
    
    This really has been a completely failed experiment. There were
    no actual bugs found, and yet at this point we already have four
    "fixes" to it, with nothing to show for but code churn, and it
    never even made the code any safer.
    
    In all of the cases that ended up getting "fixed", the structure
    is also internally inconsistent after the n_channels setting as
    the channel list isn't actually filled yet. You cannot scan with
    such a structure, that's just wrong. In mac80211, the struct is
    also reused multiple times, so initializing it once is no good.
    
    Some previous "fixes" (e.g. one in brcm80211) are also just setting
    n_channels before accessing the array, under the assumption that the
    code is correct and the array can be accessed, further showing that
    the whole thing is just pointless when the allocation count and use
    count are not separate.
    
    If we really wanted to fix it, we'd need to separately track the
    number of channels allocated and the number of channels currently
    used, but given that no bugs were found despite the numerous syzbot
    reports, that'd just be a waste of time.
    
    Remove the __counted_by() annotation. We really should also remove
    a number of the n_channels settings that are setting up a structure
    that's inconsistent, but that can wait.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=e834e757bd9b3d3e1251
    Fixes: e3eac9f32ec0 ("wifi: cfg80211: Annotate struct cfg80211_scan_request with __counted_by")
    Link: https://patch.msgid.link/20250714142130.9b0bbb7e1f07.I09112ccde72d445e11348fc2bef68942cb2ffc94@changeid
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>