Changelog in Linux kernel 6.6.85

 
accel/qaic: Fix integer overflow in qaic_validate_req() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Fri Mar 7 11:41:48 2025 +0300

    accel/qaic: Fix integer overflow in qaic_validate_req()
    
    commit 67d15c7aa0864dfd82325c7e7e7d8548b5224c7b upstream.
    
    These are u64 variables that come from the user via
    qaic_attach_slice_bo_ioctl().  Use check_add_overflow() to ensure that
    the math doesn't have an integer wrapping bug.
    
    Cc: stable@vger.kernel.org
    Fixes: ff13be830333 ("accel/qaic: Add datapath")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Reviewed-by: Jeff Hugo <jeff.hugo@oss.qualcomm.com>
    Signed-off-by: Jeff Hugo <jeff.hugo@oss.qualcomm.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/176388fa-40fe-4cb4-9aeb-2c91c22130bd@stanley.mountain
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

accel/qaic: Fix possible data corruption in BOs > 2G [+ + +]
Author: Jeffrey Hugo <quic_jhugo@quicinc.com>
Date:   Thu Mar 6 10:19:59 2025 -0700

    accel/qaic: Fix possible data corruption in BOs > 2G
    
    [ Upstream commit 84a833d90635e4b846333e2df0ae72f9cbecac39 ]
    
    When slicing a BO, we need to iterate through the BO's sgt to find the
    right pieces to construct the slice. Some of the data types chosen for
    this process are incorrectly too small, and can overflow. This can
    result in the incorrect slice construction, which can lead to data
    corruption in workload execution.
    
    The device can only handle 32-bit sized transfers, and the scatterlist
    struct only supports 32-bit buffer sizes, so our upper limit for an
    individual transfer is an unsigned int. Using an int is incorrect due to
    the reservation of the sign bit. Upgrade the length of a scatterlist
    entry and the offsets into a scatterlist entry to unsigned int for a
    correct representation.
    
    While each transfer may be limited to 32-bits, the overall BO may exceed
    that size. For counting the total length of the BO, we need a type that
    can represent the largest allocation possible on the system. That is the
    definition of size_t, so use it.
    
    Fixes: ff13be830333 ("accel/qaic: Add datapath")
    Signed-off-by: Jeffrey Hugo <quic_jhugo@quicinc.com>
    Signed-off-by: Jeff Hugo <jeff.hugo@oss.qualcomm.com>
    Reviewed-by: Lizhi Hou <lizhi.hou@amd.com>
    Reviewed-by: Troy Hanson <quic_thanson@quicinc.com>
    Reviewed-by: Youssef Samir <quic_yabdulra@quicinc.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250306171959.853466-1-jeff.hugo@oss.qualcomm.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
arm64: dts: freescale: imx8mm-verdin-dahlia: add Microphone Jack to sound card [+ + +]
Author: Stefan Eichenberger <stefan.eichenberger@toradex.com>
Date:   Mon Feb 17 15:56:41 2025 +0100

    arm64: dts: freescale: imx8mm-verdin-dahlia: add Microphone Jack to sound card
    
    commit 2c1092823eb03f8508d6769e2f38eef7e1fe62a0 upstream.
    
    The simple-audio-card's microphone widget currently connects to the
    headphone jack. Routing the microphone input to the microphone jack
    allows for independent operation of the microphone and headphones.
    
    This resolves the following boot-time kernel log message, which
    indicated a conflict when the microphone and headphone functions were
    not separated:
      debugfs: File 'Headphone Jack' in directory 'dapm' already present!
    
    Fixes: 6a57f224f734 ("arm64: dts: freescale: add initial support for verdin imx8m mini")
    Signed-off-by: Stefan Eichenberger <stefan.eichenberger@toradex.com>
    Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: dts: freescale: imx8mp-verdin-dahlia: add Microphone Jack to sound card [+ + +]
Author: Stefan Eichenberger <stefan.eichenberger@toradex.com>
Date:   Mon Feb 17 15:56:40 2025 +0100

    arm64: dts: freescale: imx8mp-verdin-dahlia: add Microphone Jack to sound card
    
    commit b0612fdba9afdce261bfb8684e0cece6f2e2b0bb upstream.
    
    The simple-audio-card's microphone widget currently connects to the
    headphone jack. Routing the microphone input to the microphone jack
    allows for independent operation of the microphone and headphones.
    
    This resolves the following boot-time kernel log message, which
    indicated a conflict when the microphone and headphone functions were
    not separated:
      debugfs: File 'Headphone Jack' in directory 'dapm' already present!
    
    Fixes: 874958916844 ("arm64: dts: freescale: verdin-imx8mp: dahlia: add sound card")
    Signed-off-by: Stefan Eichenberger <stefan.eichenberger@toradex.com>
    Reviewed-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: dts: freescale: tqma8mpql: Fix vqmmc-supply [+ + +]
Author: Alexander Stein <alexander.stein@ew.tq-group.com>
Date:   Tue Jan 7 16:03:09 2025 +0100

    arm64: dts: freescale: tqma8mpql: Fix vqmmc-supply
    
    [ Upstream commit 38f59e0e8bd2b3e1319716e4aeaeb9a6223b006d ]
    
    eMMC is supplied by BUCK5 rail. Use the actual regulator instead of
    a virtual fixed regulator.
    
    Fixes: 418d1d840e421 ("arm64: dts: freescale: add initial device tree for TQMa8MPQL with i.MX8MP")
    Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: rockchip: fix pinmux of UART0 for PX30 Ringneck on Haikou [+ + +]
Author: Quentin Schulz <quentin.schulz@cherry.de>
Date:   Tue Feb 25 12:53:29 2025 +0100

    arm64: dts: rockchip: fix pinmux of UART0 for PX30 Ringneck on Haikou
    
    commit 2db7d29c7b1629ced3cbab3de242511eb3c22066 upstream.
    
    UART0 pinmux by default configures GPIO0_B5 in its UART RTS function for
    UART0. However, by default on Haikou, it is used as GPIO as UART RTS for
    UART5.
    
    Therefore, let's update UART0 pinmux to not configure the pin in that
    mode, a later commit will make UART5 request the GPIO pinmux.
    
    Fixes: c484cf93f61b ("arm64: dts: rockchip: add PX30-µQ7 (Ringneck) SoM with Haikou baseboard")
    Cc: stable@vger.kernel.org
    Signed-off-by: Quentin Schulz <quentin.schulz@cherry.de>
    Link: https://lore.kernel.org/r/20250225-ringneck-dtbos-v3-1-853a9a6dd597@cherry.de
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: dts: rockchip: fix u2phy1_host status for NanoPi R4S [+ + +]
Author: Justin Klaassen <justin@tidylabs.net>
Date:   Tue Feb 25 17:03:58 2025 +0000

    arm64: dts: rockchip: fix u2phy1_host status for NanoPi R4S
    
    commit 38f4aa34a5f737ea8588dac320d884cc2e762c03 upstream.
    
    The u2phy1_host should always have the same status as usb_host1_ehci
    and usb_host1_ohci, otherwise the EHCI and OHCI drivers may be
    initialized for a disabled usb port.
    
    Per the NanoPi R4S schematic, the phy-supply for u2phy1_host is set to
    the vdd_5v regulator.
    
    Fixes: db792e9adbf8 ("rockchip: rk3399: Add support for FriendlyARM NanoPi R4S")
    Cc: stable@vger.kernel.org
    Signed-off-by: Justin Klaassen <justin@tidylabs.net>
    Reviewed-by: Dragan Simic <dsimic@manjaro.org>
    Link: https://lore.kernel.org/r/20250225170420.3898-1-justin@tidylabs.net
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: dts: rockchip: Remove undocumented sdmmc property from lubancat-1 [+ + +]
Author: Yao Zi <ziyao@disroot.org>
Date:   Fri Feb 28 16:31:18 2025 +0000

    arm64: dts: rockchip: Remove undocumented sdmmc property from lubancat-1
    
    [ Upstream commit 43c854c65e47d2f3763345683b06257b4d12e4e3 ]
    
    Property "supports-sd" isn't documented anywhere and is unnecessary for
    mainline driver to function. It seems a property used by downstream
    kernel was brought into mainline.
    
    This should be reported by dtbs_check, but mmc-controller-common.yaml
    defaults additionalProperties to true thus allows it. Remove the
    property to clean the devicetree up and avoid possible confusion.
    
    Fixes: 8d94da58de53 ("arm64: dts: rockchip: Add EmbedFire LubanCat 1")
    Signed-off-by: Yao Zi <ziyao@disroot.org>
    Link: https://lore.kernel.org/r/20250228163117.47318-2-ziyao@disroot.org
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ARM: davinci: da850: fix selecting ARCH_DAVINCI_DA8XX [+ + +]
Author: David Lechner <dlechner@baylibre.com>
Date:   Mon Apr 1 10:09:46 2024 -0500

    ARM: davinci: da850: fix selecting ARCH_DAVINCI_DA8XX
    
    [ Upstream commit 45d5fe1c53baaed1fb3043f45d1e15ebb4bbe86a ]
    
    Chips in the DA850 family need to have ARCH_DAVINCI_DA8XX to be selected
    in order to enable some peripheral drivers.
    
    This was accidentally removed in a previous commit.
    
    Fixes: dec85a95167a ("ARM: davinci: clean up platform support")
    Signed-off-by: David Lechner <dlechner@baylibre.com>
    Acked-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: bcm2711: Don't mark timer regs unconfigured [+ + +]
Author: Phil Elwell <phil@raspberrypi.com>
Date:   Sat Feb 22 10:41:13 2025 +0100

    ARM: dts: bcm2711: Don't mark timer regs unconfigured
    
    [ Upstream commit c24f272ae751a9f54f8816430e7f2d56031892cc ]
    
    During upstream process of Raspberry Pi 4 back in 2019 the ARMv7 stubs
    didn't configured the ARM architectural timer. This firmware issue has
    been fixed in 2020, which gave users enough time to update their system.
    
    So drop this property to allow the use of the vDSO version of
    clock_gettime.
    
    Link: https://github.com/raspberrypi/tools/pull/113
    Fixes: 7dbe8c62ceeb ("ARM: dts: Add minimal Raspberry Pi 4 support")
    Signed-off-by: Phil Elwell <phil@raspberrypi.com>
    Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://lore.kernel.org/r/20250222094113.48198-1-wahrenst@gmx.net
    Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: bcm2711: PL011 UARTs are actually r1p5 [+ + +]
Author: Phil Elwell <phil@raspberrypi.com>
Date:   Sun Feb 23 13:56:13 2025 +0100

    ARM: dts: bcm2711: PL011 UARTs are actually r1p5
    
    [ Upstream commit 0de09025f161f67c07978c4742e221243d070d41 ]
    
    The ARM PL011 UART instances in BCM2711 are r1p5 spec, which means they
    have 32-entry FIFOs. The correct periphid value for this is 0x00341011.
    Thanks to N Buchwitz for pointing this out.
    
    Signed-off-by: Phil Elwell <phil@raspberrypi.com>
    Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
    Link: https://lore.kernel.org/r/20250223125614.3592-2-wahrenst@gmx.net
    Fixes: 7dbe8c62ceeb ("ARM: dts: Add minimal Raspberry Pi 4 support")
    Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: imx6qdl-apalis: Fix poweroff on Apalis iMX6 [+ + +]
Author: Stefan Eichenberger <stefan.eichenberger@toradex.com>
Date:   Fri Jan 10 16:18:29 2025 +0100

    ARM: dts: imx6qdl-apalis: Fix poweroff on Apalis iMX6
    
    commit 83964a29379cb08929a39172780a4c2992bc7c93 upstream.
    
    The current solution for powering off the Apalis iMX6 is not functioning
    as intended. To resolve this, it is necessary to power off the
    vgen2_reg, which will also set the POWER_ENABLE_MOCI signal to a low
    state. This ensures the carrier board is properly informed to initiate
    its power-off sequence.
    
    The new solution uses the regulator-poweroff driver, which will power
    off the regulator during a system shutdown.
    
    Cc: <stable@vger.kernel.org>
    Fixes: 4eb56e26f92e ("ARM: dts: imx6q-apalis: Command pmic to standby for poweroff")
    Signed-off-by: Stefan Eichenberger <stefan.eichenberger@toradex.com>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ARM: OMAP1: select CONFIG_GENERIC_IRQ_CHIP [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Wed Feb 5 13:11:33 2025 +0100

    ARM: OMAP1: select CONFIG_GENERIC_IRQ_CHIP
    
    [ Upstream commit 98f3ab18a0a55aa1ff2cd6b74bd0c02c8f76f17e ]
    
    When GENERIC_IRQ_CHIP is disabled, OMAP1 kernels fail to link:
    
    arm-linux-gnueabi-ld: arch/arm/mach-omap1/irq.o: in function `omap1_init_irq':
    irq.c:(.init.text+0x1e8): undefined reference to `irq_alloc_generic_chip'
    arm-linux-gnueabi-ld: irq.c:(.init.text+0x228): undefined reference to `irq_setup_generic_chip'
    arm-linux-gnueabi-ld: irq.c:(.init.text+0x2a8): undefined reference to `irq_gc_set_wake'
    arm-linux-gnueabi-ld: irq.c:(.init.text+0x2b0): undefined reference to `irq_gc_mask_set_bit'
    arm-linux-gnueabi-ld: irq.c:(.init.text+0x2b4): undefined reference to `irq_gc_mask_clr_bit'
    
    This has apparently been the case for many years, but I never caught it
    in randconfig builds until now, as there are dozens of other drivers
    that also 'select GENERIC_IRQ_CHIP' and statistically there is almost
    always one of them enabled.
    
    Fixes: 55b447744389 ("ARM: OMAP1: Switch to use generic irqchip in preparation for sparse IRQ")
    Link: https://lore.kernel.org/r/20250205121151.289535-1-arnd@kernel.org
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: shmobile: smp: Enforce shmobile_smp_* alignment [+ + +]
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Mon Mar 10 14:12:20 2025 +0100

    ARM: shmobile: smp: Enforce shmobile_smp_* alignment
    
    commit 379c590113ce46f605439d4887996c60ab8820cc upstream.
    
    When the addresses of the shmobile_smp_mpidr, shmobile_smp_fn, and
    shmobile_smp_arg variables are not multiples of 4 bytes, secondary CPU
    bring-up fails:
    
        smp: Bringing up secondary CPUs ...
        CPU1: failed to come online
        CPU2: failed to come online
        CPU3: failed to come online
        smp: Brought up 1 node, 1 CPU
    
    Fix this by adding the missing alignment directive.
    
    Fixes: 4e960f52fce16a3b ("ARM: shmobile: Move shmobile_smp_{mpidr, fn, arg}[] from .text to .bss")
    Closes: https://lore.kernel.org/r/CAMuHMdU=QR-JLgEHKWpsr6SbaZRc-Hz9r91JfpP8c3n2G-OjqA@mail.gmail.com
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
    Link: https://lore.kernel.org/c499234d559a0d95ad9472883e46077311051cd8.1741612208.git.geert+renesas@glider.be
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
batman-adv: Ignore own maximum aggregation size during RX [+ + +]
Author: Sven Eckelmann <sven@narfation.org>
Date:   Sun Feb 2 17:04:13 2025 +0100

    batman-adv: Ignore own maximum aggregation size during RX
    
    commit 548b0c5de7619ef53bbde5590700693f2f6d2a56 upstream.
    
    An OGMv1 and OGMv2 packet receive processing were not only limited by the
    number of bytes in the received packet but also by the nodes maximum
    aggregation packet size limit. But this limit is relevant for TX and not
    for RX. It must not be enforced by batadv_(i)v_ogm_aggr_packet to avoid
    loss of information in case of a different limit for sender and receiver.
    
    This has a minor side effect for B.A.T.M.A.N. IV because the
    batadv_iv_ogm_aggr_packet is also used for the preprocessing for the TX.
    But since the aggregation code itself will not allow more than
    BATADV_MAX_AGGREGATION_BYTES bytes, this check was never triggering (in
    this context) prior of removing it.
    
    Cc: stable@vger.kernel.org
    Fixes: c6c8fea29769 ("net: Add batman-adv meshing protocol")
    Fixes: 9323158ef9f4 ("batman-adv: OGMv2 - implement originators logic")
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Bluetooth: Fix error code in chan_alloc_skb_cb() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Mon Mar 10 22:46:56 2025 +0300

    Bluetooth: Fix error code in chan_alloc_skb_cb()
    
    [ Upstream commit 72d061ee630d0dbb45c2920d8d19b3861c413e54 ]
    
    The chan_alloc_skb_cb() function is supposed to return error pointers on
    error.  Returning NULL will lead to a NULL dereference.
    
    Fixes: 6b8d4a6a0314 ("Bluetooth: 6LoWPAN: Use connected oriented channel instead of fixed one")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: hci_event: Fix connection regression between LE and non-LE adapters [+ + +]
Author: Arkadiusz Bokowy <arkadiusz.bokowy@gmail.com>
Date:   Wed Mar 12 20:09:43 2025 +0100

    Bluetooth: hci_event: Fix connection regression between LE and non-LE adapters
    
    [ Upstream commit f6685a96c8c8a07e260e39bac86d4163cfb38a4d ]
    
    Due to a typo during defining HCI errors it is not possible to connect
    LE-capable device with BR/EDR only adapter. The connection is terminated
    by the LE adapter because the invalid LL params error code is treated
    as unsupported remote feature.
    
    Fixes: 79c0868ad65a ("Bluetooth: hci_event: Use HCI error defines instead of magic values")
    Signed-off-by: Arkadiusz Bokowy <arkadiusz.bokowy@gmail.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bnxt_en: Fix receive ring space parameters when XDP is active [+ + +]
Author: Shravya KN <shravya.k-n@broadcom.com>
Date:   Fri Nov 22 14:45:44 2024 -0800

    bnxt_en: Fix receive ring space parameters when XDP is active
    
    commit 3051a77a09dfe3022aa012071346937fdf059033 upstream.
    
    The MTU setting at the time an XDP multi-buffer is attached
    determines whether the aggregation ring will be used and the
    rx_skb_func handler.  This is done in bnxt_set_rx_skb_mode().
    
    If the MTU is later changed, the aggregation ring setting may need
    to be changed and it may become out-of-sync with the settings
    initially done in bnxt_set_rx_skb_mode().  This may result in
    random memory corruption and crashes as the HW may DMA data larger
    than the allocated buffer size, such as:
    
    BUG: kernel NULL pointer dereference, address: 00000000000003c0
    PGD 0 P4D 0
    Oops: 0000 [#1] PREEMPT SMP NOPTI
    CPU: 17 PID: 0 Comm: swapper/17 Kdump: loaded Tainted: G S         OE      6.1.0-226bf9805506 #1
    Hardware name: Wiwynn Delta Lake PVT BZA.02601.0150/Delta Lake-Class1, BIOS F0E_3A12 08/26/2021
    RIP: 0010:bnxt_rx_pkt+0xe97/0x1ae0 [bnxt_en]
    Code: 8b 95 70 ff ff ff 4c 8b 9d 48 ff ff ff 66 41 89 87 b4 00 00 00 e9 0b f7 ff ff 0f b7 43 0a 49 8b 95 a8 04 00 00 25 ff 0f 00 00 <0f> b7 14 42 48 c1 e2 06 49 03 95 a0 04 00 00 0f b6 42 33f
    RSP: 0018:ffffa19f40cc0d18 EFLAGS: 00010202
    RAX: 00000000000001e0 RBX: ffff8e2c805c6100 RCX: 00000000000007ff
    RDX: 0000000000000000 RSI: ffff8e2c271ab990 RDI: ffff8e2c84f12380
    RBP: ffffa19f40cc0e48 R08: 000000000001000d R09: 974ea2fcddfa4cbf
    R10: 0000000000000000 R11: ffffa19f40cc0ff8 R12: ffff8e2c94b58980
    R13: ffff8e2c952d6600 R14: 0000000000000016 R15: ffff8e2c271ab990
    FS:  0000000000000000(0000) GS:ffff8e3b3f840000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00000000000003c0 CR3: 0000000e8580a004 CR4: 00000000007706e0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    PKRU: 55555554
    Call Trace:
     <IRQ>
     __bnxt_poll_work+0x1c2/0x3e0 [bnxt_en]
    
    To address the issue, we now call bnxt_set_rx_skb_mode() within
    bnxt_change_mtu() to properly set the AGG rings configuration and
    update rx_skb_func based on the new MTU value.
    Additionally, BNXT_FLAG_NO_AGG_RINGS is cleared at the beginning of
    bnxt_set_rx_skb_mode() to make sure it gets set or cleared based on
    the current MTU.
    
    Fixes: 08450ea98ae9 ("bnxt_en: Fix max_mtu setting for multi-buf XDP")
    Co-developed-by: Somnath Kotur <somnath.kotur@broadcom.com>
    Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com>
    Signed-off-by: Shravya KN <shravya.k-n@broadcom.com>
    Signed-off-by: Michael Chan <michael.chan@broadcom.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Jianqi Ren <jianqi.ren.cn@windriver.com>
    Signed-off-by: He Zhe <zhe.he@windriver.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
btrfs: make sure that WRITTEN is set on all metadata blocks [+ + +]
Author: Josef Bacik <josef@toxicpanda.com>
Date:   Mon Apr 29 09:03:35 2024 -0400

    btrfs: make sure that WRITTEN is set on all metadata blocks
    
    commit e03418abde871314e1a3a550f4c8afb7b89cb273 upstream.
    
    We previously would call btrfs_check_leaf() if we had the check
    integrity code enabled, which meant that we could only run the extended
    leaf checks if we had WRITTEN set on the header flags.
    
    This leaves a gap in our checking, because we could end up with
    corruption on disk where WRITTEN isn't set on the leaf, and then the
    extended leaf checks don't get run which we rely on to validate all of
    the item pointers to make sure we don't access memory outside of the
    extent buffer.
    
    However, since 732fab95abe2 ("btrfs: check-integrity: remove
    CONFIG_BTRFS_FS_CHECK_INTEGRITY option") we no longer call
    btrfs_check_leaf() from btrfs_mark_buffer_dirty(), which means we only
    ever call it on blocks that are being written out, and thus have WRITTEN
    set, or that are being read in, which should have WRITTEN set.
    
    Add checks to make sure we have WRITTEN set appropriately, and then make
    sure __btrfs_check_leaf() always does the item checking.  This will
    protect us from file systems that have been corrupted and no longer have
    WRITTEN set on some of the blocks.
    
    This was hit on a crafted image tweaking the WRITTEN bit and reported by
    KASAN as out-of-bound access in the eb accessors. The example is a dir
    item at the end of an eb.
    
      [2.042] BTRFS warning (device loop1): bad eb member start: ptr 0x3fff start 30572544 member offset 16410 size 2
      [2.040] general protection fault, probably for non-canonical address 0xe0009d1000000003: 0000 [#1] PREEMPT SMP KASAN NOPTI
      [2.537] KASAN: maybe wild-memory-access in range [0x0005088000000018-0x000508800000001f]
      [2.729] CPU: 0 PID: 2587 Comm: mount Not tainted 6.8.2 #1
      [2.729] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
      [2.621] RIP: 0010:btrfs_get_16+0x34b/0x6d0
      [2.621] RSP: 0018:ffff88810871fab8 EFLAGS: 00000206
      [2.621] RAX: 0000a11000000003 RBX: ffff888104ff8720 RCX: ffff88811b2288c0
      [2.621] RDX: dffffc0000000000 RSI: ffffffff81dd8aca RDI: ffff88810871f748
      [2.621] RBP: 000000000000401a R08: 0000000000000001 R09: ffffed10210e3ee9
      [2.621] R10: ffff88810871f74f R11: 205d323430333737 R12: 000000000000001a
      [2.621] R13: 000508800000001a R14: 1ffff110210e3f5d R15: ffffffff850011e8
      [2.621] FS:  00007f56ea275840(0000) GS:ffff88811b200000(0000) knlGS:0000000000000000
      [2.621] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [2.621] CR2: 00007febd13b75c0 CR3: 000000010bb50000 CR4: 00000000000006f0
      [2.621] Call Trace:
      [2.621]  <TASK>
      [2.621]  ? show_regs+0x74/0x80
      [2.621]  ? die_addr+0x46/0xc0
      [2.621]  ? exc_general_protection+0x161/0x2a0
      [2.621]  ? asm_exc_general_protection+0x26/0x30
      [2.621]  ? btrfs_get_16+0x33a/0x6d0
      [2.621]  ? btrfs_get_16+0x34b/0x6d0
      [2.621]  ? btrfs_get_16+0x33a/0x6d0
      [2.621]  ? __pfx_btrfs_get_16+0x10/0x10
      [2.621]  ? __pfx_mutex_unlock+0x10/0x10
      [2.621]  btrfs_match_dir_item_name+0x101/0x1a0
      [2.621]  btrfs_lookup_dir_item+0x1f3/0x280
      [2.621]  ? __pfx_btrfs_lookup_dir_item+0x10/0x10
      [2.621]  btrfs_get_tree+0xd25/0x1910
    
    Reported-by: lei lu <llfamsec@gmail.com>
    CC: stable@vger.kernel.org # 6.7+
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Josef Bacik <josef@toxicpanda.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    [ copy more details from report ]
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Jianqi Ren <jianqi.ren.cn@windriver.com>
    Signed-off-by: He Zhe <zhe.he@windriver.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
can: flexcan: disable transceiver during system PM [+ + +]
Author: Haibo Chen <haibo.chen@nxp.com>
Date:   Fri Mar 14 19:01:45 2025 +0800

    can: flexcan: disable transceiver during system PM
    
    commit 5a19143124be42900b3fbc9ada3c919632eb45eb upstream.
    
    During system PM, if no wakeup requirement, disable transceiver to
    save power.
    
    Fixes: 4de349e786a3 ("can: flexcan: fix resume function")
    Cc: stable@vger.kernel.org
    Reviewed-by: Frank Li <frank.li@nxp.com>
    Signed-off-by: Haibo Chen <haibo.chen@nxp.com>
    Link: https://patch.msgid.link/20250314110145.899179-2-haibo.chen@nxp.com
    [mkl: add newlines]
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: flexcan: only change CAN state when link up in system PM [+ + +]
Author: Haibo Chen <haibo.chen@nxp.com>
Date:   Fri Mar 14 19:01:44 2025 +0800

    can: flexcan: only change CAN state when link up in system PM
    
    commit fd99d6ed20234b83d65b9c5417794343577cf3e5 upstream.
    
    After a suspend/resume cycle on a down interface, it will come up as
    ERROR-ACTIVE.
    
    $ ip -details -s -s a s dev flexcan0
    3: flexcan0: <NOARP,ECHO> mtu 16 qdisc pfifo_fast state DOWN group default qlen 10
        link/can  promiscuity 0 allmulti 0 minmtu 0 maxmtu 0
        can state STOPPED (berr-counter tx 0 rx 0) restart-ms 1000
    
    $ sudo systemctl suspend
    
    $ ip -details -s -s a s dev flexcan0
    3: flexcan0: <NOARP,ECHO> mtu 16 qdisc pfifo_fast state DOWN group default qlen 10
        link/can  promiscuity 0 allmulti 0 minmtu 0 maxmtu 0
        can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 1000
    
    And only set CAN state to CAN_STATE_ERROR_ACTIVE when resume process
    has no issue, otherwise keep in CAN_STATE_SLEEPING as suspend did.
    
    Fixes: 4de349e786a3 ("can: flexcan: fix resume function")
    Cc: stable@vger.kernel.org
    Signed-off-by: Haibo Chen <haibo.chen@nxp.com>
    Link: https://patch.msgid.link/20250314110145.899179-1-haibo.chen@nxp.com
    Reported-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Closes: https://lore.kernel.org/all/20250314-married-polar-elephant-b15594-mkl@pengutronix.de
    [mkl: add newlines]
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: rcar_canfd: Fix page entries in the AFL list [+ + +]
Author: Biju Das <biju.das.jz@bp.renesas.com>
Date:   Fri Mar 7 17:03:27 2025 +0000

    can: rcar_canfd: Fix page entries in the AFL list
    
    commit 1dba0a37644ed3022558165bbb5cb9bda540eaf7 upstream.
    
    There are a total of 96 AFL pages and each page has 16 entries with
    registers CFDGAFLIDr, CFDGAFLMr, CFDGAFLP0r, CFDGAFLP1r holding
    the rule entries (r = 0..15).
    
    Currently, RCANFD_GAFL* macros use a start variable to find AFL entries,
    which is incorrect as the testing on RZ/G3E shows ch1 and ch4
    gets a start value of 0 and the register contents are overwritten.
    
    Fix this issue by using rule_entry corresponding to the channel
    to find the page entries in the AFL list.
    
    Fixes: dd3bd23eb438 ("can: rcar_canfd: Add Renesas R-Car CAN FD driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
    Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Link: https://patch.msgid.link/20250307170330.173425-3-biju.das.jz@bp.renesas.com
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: ucan: fix out of bound read in strscpy() source [+ + +]
Author: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Date:   Tue Feb 18 23:32:28 2025 +0900

    can: ucan: fix out of bound read in strscpy() source
    
    commit 1d22a122ffb116c3cf78053e812b8b21f8852ee9 upstream.
    
    Commit 7fdaf8966aae ("can: ucan: use strscpy() to instead of strncpy()")
    unintentionally introduced a one byte out of bound read on strscpy()'s
    source argument (which is kind of ironic knowing that strscpy() is meant
    to be a more secure alternative :)).
    
    Let's consider below buffers:
    
      dest[len + 1]; /* will be NUL terminated */
      src[len]; /* may not be NUL terminated */
    
    When doing:
    
      strncpy(dest, src, len);
      dest[len] = '\0';
    
    strncpy() will read up to len bytes from src.
    
    On the other hand:
    
      strscpy(dest, src, len + 1);
    
    will read up to len + 1 bytes from src, that is to say, an out of bound
    read of one byte will occur on src if it is not NUL terminated. Note
    that the src[len] byte is never copied, but strscpy() still needs to
    read it to check whether a truncation occurred or not.
    
    This exact pattern happened in ucan.
    
    The root cause is that the source is not NUL terminated. Instead of
    doing a copy in a local buffer, directly NUL terminate it as soon as
    usb_control_msg() returns. With this, the local firmware_str[] variable
    can be removed.
    
    On top of this do a couple refactors:
    
      - ucan_ctl_payload->raw is only used for the firmware string, so
        rename it to ucan_ctl_payload->fw_str and change its type from u8 to
        char.
    
      - ucan_device_request_in() is only used to retrieve the firmware
        string, so rename it to ucan_get_fw_str() and refactor it to make it
        directly handle all the string termination logic.
    
    Reported-by: syzbot+d7d8c418e8317899e88c@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/linux-can/67b323a4.050a0220.173698.002b.GAE@google.com/
    Fixes: 7fdaf8966aae ("can: ucan: use strscpy() to instead of strncpy()")
    Signed-off-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
    Link: https://patch.msgid.link/20250218143515.627682-2-mailhol.vincent@wanadoo.fr
    Cc: stable@vger.kernel.org
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amd/display: should support dmub hw lock on Replay [+ + +]
Author: Martin Tsai <martin.tsai@amd.com>
Date:   Fri Feb 2 14:39:29 2024 +0800

    drm/amd/display: should support dmub hw lock on Replay
    
    commit bfeefe6ea5f18cabb8fda55364079573804623f9 upstream.
    
    [Why]
    Without acquiring DMCUB hw lock, a race condition is caused with
    Panel Replay feature, which will trigger a hang. Indicate that a
    lock is necessary to prevent this when replay feature is enabled.
    
    [How]
    To allow dmub hw lock on Replay.
    
    Reviewed-by: Robin Chen <robin.chen@amd.com>
    Acked-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
    Signed-off-by: Martin Tsai <martin.tsai@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: Use HW lock mgr for PSR1 when only one eDP [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Fri Mar 7 15:55:20 2025 -0600

    drm/amd/display: Use HW lock mgr for PSR1 when only one eDP
    
    commit acbf16a6ae775b4db86f537448cc466288aa307e upstream.
    
    [WHY]
    DMUB locking is important to make sure that registers aren't accessed
    while in PSR.  Previously it was enabled but caused a deadlock in
    situations with multiple eDP panels.
    
    [HOW]
    Detect if multiple eDP panels are in use to decide whether to use
    lock. Refactor the function so that the first check is for PSR-SU
    and then replay is in use to prevent having to look up number
    of eDP panels for those configurations.
    
    Fixes: f245b400a223 ("Revert "drm/amd/display: Use HW lock mgr for PSR1"")
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3965
    Reviewed-by: ChiaHsuan Chung <chiahsuan.chung@amd.com>
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Alex Hung <alex.hung@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit ed569e1279a3045d6b974226c814e071fa0193a6)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu: Fix JPEG video caps max size for navi1x and raven [+ + +]
Author: David Rosca <david.rosca@amd.com>
Date:   Fri Feb 28 13:34:49 2025 +0100

    drm/amdgpu: Fix JPEG video caps max size for navi1x and raven
    
    commit ec33964d9d88488fa954a03d476a8b811efc6e85 upstream.
    
    8192x8192 is the maximum supported resolution.
    
    Signed-off-by: David Rosca <david.rosca@amd.com>
    Acked-by: Alex Deucher <alexander.deucher@amd.com>
    Reviewed-by: Ruijing Dong <ruijing.dong@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 6e0d2fde3ae8fdb5b47e10389f23ed2cb4daec5d)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amdgpu: Fix MPEG2, MPEG4 and VC1 video caps max size [+ + +]
Author: David Rosca <david.rosca@amd.com>
Date:   Fri Feb 28 13:32:46 2025 +0100

    drm/amdgpu: Fix MPEG2, MPEG4 and VC1 video caps max size
    
    commit f0105e173103c9d30a2bb959f7399437d536c848 upstream.
    
    1920x1088 is the maximum supported resolution.
    
    Signed-off-by: David Rosca <david.rosca@amd.com>
    Acked-by: Alex Deucher <alexander.deucher@amd.com>
    Reviewed-by: Ruijing Dong <ruijing.dong@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 1a0807feb97082bff2b1342dbbe55a2a9a8bdb88)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/radeon: fix uninitialized size issue in radeon_vce_cs_parse() [+ + +]
Author: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Date:   Tue Mar 11 14:14:59 2025 +0300

    drm/radeon: fix uninitialized size issue in radeon_vce_cs_parse()
    
    commit dd8689b52a24807c2d5ce0a17cb26dc87f75235c upstream.
    
    On the off chance that command stream passed from userspace via
    ioctl() call to radeon_vce_cs_parse() is weirdly crafted and
    first command to execute is to encode (case 0x03000001), the function
    in question will attempt to call radeon_vce_cs_reloc() with size
    argument that has not been properly initialized. Specifically, 'size'
    will point to 'tmp' variable before the latter had a chance to be
    assigned any value.
    
    Play it safe and init 'tmp' with 0, thus ensuring that
    radeon_vce_cs_reloc() will catch an early error in cases like these.
    
    Found by Linux Verification Center (linuxtesting.org) with static
    analysis tool SVACE.
    
    Fixes: 2fc5703abda2 ("drm/radeon: check VCE relocation buffer range v3")
    Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 2d52de55f9ee7aaee0e09ac443f77855989c6b68)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/sched: Fix fence reference count leak [+ + +]
Author: qianyi liu <liuqianyi125@gmail.com>
Date:   Tue Mar 11 14:02:51 2025 +0800

    drm/sched: Fix fence reference count leak
    
    commit a952f1ab696873be124e31ce5ef964d36bce817f upstream.
    
    The last_scheduled fence leaks when an entity is being killed and adding
    the cleanup callback fails.
    
    Decrement the reference count of prev when dma_fence_add_callback()
    fails, ensuring proper balance.
    
    Cc: stable@vger.kernel.org      # v6.2+
    [phasta: add git tag info for stable kernel]
    Fixes: 2fdb8a8f07c2 ("drm/scheduler: rework entity flush, kill and fini")
    Signed-off-by: qianyi liu <liuqianyi125@gmail.com>
    Signed-off-by: Philipp Stanner <phasta@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250311060251.4041101-1-liuqianyi125@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/v3d: Don't run jobs that have errors flagged in its fence [+ + +]
Author: Maíra Canal <mcanal@igalia.com>
Date:   Thu Mar 13 11:43:26 2025 -0300

    drm/v3d: Don't run jobs that have errors flagged in its fence
    
    commit 80cbee810e4e13cdbd3ae9654e9ecddf17f3e828 upstream.
    
    The V3D driver still relies on `drm_sched_increase_karma()` and
    `drm_sched_resubmit_jobs()` for resubmissions when a timeout occurs.
    The function `drm_sched_increase_karma()` marks the job as guilty, while
    `drm_sched_resubmit_jobs()` sets an error (-ECANCELED) in the DMA fence of
    that guilty job.
    
    Because of this, we must check whether the job’s DMA fence has been
    flagged with an error before executing the job. Otherwise, the same guilty
    job may be resubmitted indefinitely, causing repeated GPU resets.
    
    This patch adds a check for an error on the job's fence to prevent running
    a guilty job that was previously flagged when the GPU timed out.
    
    Note that the CPU and CACHE_CLEAN queues do not require this check, as
    their jobs are executed synchronously once the DRM scheduler starts them.
    
    Cc: stable@vger.kernel.org
    Fixes: d223f98f0209 ("drm/v3d: Add support for compute shader dispatch.")
    Fixes: 1584f16ca96e ("drm/v3d: Add support for submitting jobs to the TFU.")
    Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
    Signed-off-by: Maíra Canal <mcanal@igalia.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20250313-v3d-gpu-reset-fixes-v4-1-c1e780d8e096@igalia.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
efi/libstub: Avoid physical address 0x0 when doing random allocation [+ + +]
Author: Ard Biesheuvel <ardb@kernel.org>
Date:   Fri Mar 14 12:03:33 2025 +0100

    efi/libstub: Avoid physical address 0x0 when doing random allocation
    
    commit cb16dfed0093217a68c0faa9394fa5823927e04c upstream.
    
    Ben reports spurious EFI zboot failures on a system where physical RAM
    starts at 0x0. When doing random memory allocation from the EFI stub on
    such a platform, a random seed of 0x0 (which means no entropy source is
    available) will result in the allocation to be placed at address 0x0 if
    sufficient space is available.
    
    When this allocation is subsequently passed on to the decompression
    code, the 0x0 address is mistaken for NULL and the code complains and
    gives up.
    
    So avoid address 0x0 when doing random allocation, and set the minimum
    address to the minimum alignment.
    
    Cc: <stable@vger.kernel.org>
    Reported-by: Ben Schneider <ben@bens.haus>
    Tested-by: Ben Schneider <ben@bens.haus>
    Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
    Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
firmware: imx-scu: fix OF node leak in .probe() [+ + +]
Author: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Date:   Tue Dec 24 12:34:56 2024 +0900

    firmware: imx-scu: fix OF node leak in .probe()
    
    [ Upstream commit fbf10b86f6057cf79300720da4ea4b77e6708b0d ]
    
    imx_scu_probe() calls of_parse_phandle_with_args(), but does not
    release the OF node reference obtained by it. Add a of_node_put() call
    after done with the node.
    
    Fixes: f25a066d1a07 ("firmware: imx-scu: Support one TX and one RX")
    Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
 
i2c: omap: fix IRQ storms [+ + +]
Author: Andreas Kemnade <andreas@kemnade.info>
Date:   Fri Feb 28 15:04:20 2025 +0100

    i2c: omap: fix IRQ storms
    
    commit 285df995f90e3d61d97f327d34b9659d92313314 upstream.
    
    On the GTA04A5 writing a reset command to the gyroscope causes IRQ
    storms because NACK IRQs are enabled and therefore triggered but not
    acked.
    
    Sending a reset command to the gyroscope by
    i2cset 1 0x69 0x14 0xb6
    with an additional debug print in the ISR (not the thread) itself
    causes
    
    [ 363.353515] i2c i2c-1: ioctl, cmd=0x720, arg=0xbe801b00
    [ 363.359039] omap_i2c 48072000.i2c: addr: 0x0069, len: 2, flags: 0x0, stop: 1
    [ 363.366180] omap_i2c 48072000.i2c: IRQ LL (ISR = 0x1110)
    [ 363.371673] omap_i2c 48072000.i2c: IRQ (ISR = 0x0010)
    [ 363.376892] omap_i2c 48072000.i2c: IRQ LL (ISR = 0x0102)
    [ 363.382263] omap_i2c 48072000.i2c: IRQ LL (ISR = 0x0102)
    [ 363.387664] omap_i2c 48072000.i2c: IRQ LL (ISR = 0x0102)
    repeating till infinity
    [...]
    (0x2 = NACK, 0x100 = Bus free, which is not enabled)
    Apparently no other IRQ bit gets set, so this stalls.
    
    Do not ignore enabled interrupts and make sure they are acked.
    If the NACK IRQ is not needed, it should simply not enabled, but
    according to the above log, caring about it is necessary unless
    the Bus free IRQ is enabled and handled. The assumption that is
    will always come with a ARDY IRQ, which was the idea behind
    ignoring it, proves wrong.
    It is true for simple reads from an unused address.
    
    To still avoid the i2cdetect trouble which is the reason for
    commit c770657bd261 ("i2c: omap: Fix standard mode false ACK readings"),
    avoid doing much about NACK in omap_i2c_xfer_data() which is used
    by both IRQ mode and polling mode, so also the false detection fix
    is extended to polling usage and IRQ storms are avoided.
    
    By changing this, the hardirq handler is not needed anymore to filter
    stuff.
    
    The mentioned gyro reset now just causes a -ETIMEDOUT instead of
    hanging the system.
    
    Fixes: c770657bd261 ("i2c: omap: Fix standard mode false ACK readings").
    CC: stable@kernel.org
    Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
    Tested-by: Nishanth Menon <nm@ti.com>
    Reviewed-by: Aniket Limaye <a-limaye@ti.com>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Link: https://lore.kernel.org/r/20250228140420.379498-1-andreas@kemnade.info
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ipv6: Fix memleak of nhc_pcpu_rth_output in fib_check_nh_v6_gw(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Tue Mar 11 18:03:25 2025 -0700

    ipv6: Fix memleak of nhc_pcpu_rth_output in fib_check_nh_v6_gw().
    
    [ Upstream commit 9740890ee20e01f99ff1dde84c63dcf089fabb98 ]
    
    fib_check_nh_v6_gw() expects that fib6_nh_init() cleans up everything
    when it fails.
    
    Commit 7dd73168e273 ("ipv6: Always allocate pcpu memory in a fib6_nh")
    moved fib_nh_common_init() before alloc_percpu_gfp() within fib6_nh_init()
    but forgot to add cleanup for fib6_nh->nh_common.nhc_pcpu_rth_output in
    case it fails to allocate fib6_nh->rt6i_pcpu, resulting in memleak.
    
    Let's call fib_nh_common_release() and clear nhc_pcpu_rth_output in the
    error path.
    
    Note that we can remove the fib6_nh_release() call in nh_create_ipv6()
    later in net-next.git.
    
    Fixes: 7dd73168e273 ("ipv6: Always allocate pcpu memory in a fib6_nh")
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20250312010333.56001-1-kuniyu@amazon.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv6: Set errno after ip_fib_metrics_init() in ip6_route_info_create(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Tue Mar 11 18:38:48 2025 -0700

    ipv6: Set errno after ip_fib_metrics_init() in ip6_route_info_create().
    
    [ Upstream commit 9a81fc3480bf5dbe2bf80e278c440770f6ba2692 ]
    
    While creating a new IPv6, we could get a weird -ENOMEM when
    RTA_NH_ID is set and either of the conditions below is true:
    
      1) CONFIG_IPV6_SUBTREES is enabled and rtm_src_len is specified
      2) nexthop_get() fails
    
    e.g.)
    
      # strace ip -6 route add fe80::dead:beef:dead:beef nhid 1 from ::
      recvmsg(3, {msg_iov=[{iov_base=[...[
        {error=-ENOMEM, msg=[... [...]]},
        [{nla_len=49, nla_type=NLMSGERR_ATTR_MSG}, "Nexthops can not be used with so"...]
      ]], iov_len=32768}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 148
    
    Let's set err explicitly after ip_fib_metrics_init() in
    ip6_route_info_create().
    
    Fixes: f88d8ea67fbd ("ipv6: Plumb support for nexthop object in a fib6_info")
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Link: https://patch.msgid.link/20250312013854.61125-1-kuniyu@amazon.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ksmbd: fix incorrect validation for num_aces field of smb_acl [+ + +]
Author: Namjae Jeon <linkinjeon@kernel.org>
Date:   Wed Feb 12 09:32:11 2025 +0900

    ksmbd: fix incorrect validation for num_aces field of smb_acl
    
    commit 1b8b67f3c5e5169535e26efedd3e422172e2db64 upstream.
    
    parse_dcal() validate num_aces to allocate posix_ace_state_array.
    
    if (num_aces > ULONG_MAX / sizeof(struct smb_ace *))
    
    It is an incorrect validation that we can create an array of size ULONG_MAX.
    smb_acl has ->size field to calculate actual number of aces in request buffer
    size. Use this to check invalid num_aces.
    
    Reported-by: Igor Leite Ladessa <igor-ladessa@hotmail.com>
    Tested-by: Igor Leite Ladessa <igor-ladessa@hotmail.com>
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
KVM: arm64: Calculate cptr_el2 traps on activating traps [+ + +]
Author: Fuad Tabba <tabba@google.com>
Date:   Fri Mar 21 00:16:01 2025 +0000

    KVM: arm64: Calculate cptr_el2 traps on activating traps
    
    [ Upstream commit 2fd5b4b0e7b440602455b79977bfa64dea101e6c ]
    
    Similar to VHE, calculate the value of cptr_el2 from scratch on
    activate traps. This removes the need to store cptr_el2 in every
    vcpu structure. Moreover, some traps, such as whether the guest
    owns the fp registers, need to be set on every vcpu run.
    
    Reported-by: James Clark <james.clark@linaro.org>
    Fixes: 5294afdbf45a ("KVM: arm64: Exclude FP ownership from kvm_vcpu_arch")
    Signed-off-by: Fuad Tabba <tabba@google.com>
    Link: https://lore.kernel.org/r/20241216105057.579031-13-tabba@google.com
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: arm64: Eagerly switch ZCR_EL{1,2} [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Fri Mar 21 00:16:08 2025 +0000

    KVM: arm64: Eagerly switch ZCR_EL{1,2}
    
    [ Upstream commit 59419f10045bc955d2229819c7cf7a8b0b9c5b59 ]
    
    In non-protected KVM modes, while the guest FPSIMD/SVE/SME state is live on the
    CPU, the host's active SVE VL may differ from the guest's maximum SVE VL:
    
    * For VHE hosts, when a VM uses NV, ZCR_EL2 contains a value constrained
      by the guest hypervisor, which may be less than or equal to that
      guest's maximum VL.
    
      Note: in this case the value of ZCR_EL1 is immaterial due to E2H.
    
    * For nVHE/hVHE hosts, ZCR_EL1 contains a value written by the guest,
      which may be less than or greater than the guest's maximum VL.
    
      Note: in this case hyp code traps host SVE usage and lazily restores
      ZCR_EL2 to the host's maximum VL, which may be greater than the
      guest's maximum VL.
    
    This can be the case between exiting a guest and kvm_arch_vcpu_put_fp().
    If a softirq is taken during this period and the softirq handler tries
    to use kernel-mode NEON, then the kernel will fail to save the guest's
    FPSIMD/SVE state, and will pend a SIGKILL for the current thread.
    
    This happens because kvm_arch_vcpu_ctxsync_fp() binds the guest's live
    FPSIMD/SVE state with the guest's maximum SVE VL, and
    fpsimd_save_user_state() verifies that the live SVE VL is as expected
    before attempting to save the register state:
    
    | if (WARN_ON(sve_get_vl() != vl)) {
    |         force_signal_inject(SIGKILL, SI_KERNEL, 0, 0);
    |         return;
    | }
    
    Fix this and make this a bit easier to reason about by always eagerly
    switching ZCR_EL{1,2} at hyp during guest<->host transitions. With this
    happening, there's no need to trap host SVE usage, and the nVHE/nVHE
    __deactivate_cptr_traps() logic can be simplified to enable host access
    to all present FPSIMD/SVE/SME features.
    
    In protected nVHE/hVHE modes, the host's state is always saved/restored
    by hyp, and the guest's state is saved prior to exit to the host, so
    from the host's PoV the guest never has live FPSIMD/SVE/SME state, and
    the host's ZCR_EL1 is never clobbered by hyp.
    
    Fixes: 8c8010d69c132273 ("KVM: arm64: Save/restore SVE state for nVHE")
    Fixes: 2e3cf82063a00ea0 ("KVM: arm64: nv: Ensure correct VL is loaded before saving SVE state")
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Reviewed-by: Mark Brown <broonie@kernel.org>
    Tested-by: Mark Brown <broonie@kernel.org>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Fuad Tabba <tabba@google.com>
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: Oliver Upton <oliver.upton@linux.dev>
    Cc: Will Deacon <will@kernel.org>
    Reviewed-by: Oliver Upton <oliver.upton@linux.dev>
    Link: https://lore.kernel.org/r/20250210195226.1215254-9-mark.rutland@arm.com
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    [ v6.6 lacks pKVM saving of host SVE state, pull in discovery of maximum
      host VL separately -- broonie ]
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: arm64: Mark some header functions as inline [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Fri Mar 21 00:16:07 2025 +0000

    KVM: arm64: Mark some header functions as inline
    
    [ Upstream commit f9dd00de1e53a47763dfad601635d18542c3836d ]
    
    The shared hyp switch header has a number of static functions which
    might not be used by all files that include the header, and when unused
    they will provoke compiler warnings, e.g.
    
    | In file included from arch/arm64/kvm/hyp/nvhe/hyp-main.c:8:
    | ./arch/arm64/kvm/hyp/include/hyp/switch.h:703:13: warning: 'kvm_hyp_handle_dabt_low' defined but not used [-Wunused-function]
    |   703 | static bool kvm_hyp_handle_dabt_low(struct kvm_vcpu *vcpu, u64 *exit_code)
    |       |             ^~~~~~~~~~~~~~~~~~~~~~~
    | ./arch/arm64/kvm/hyp/include/hyp/switch.h:682:13: warning: 'kvm_hyp_handle_cp15_32' defined but not used [-Wunused-function]
    |   682 | static bool kvm_hyp_handle_cp15_32(struct kvm_vcpu *vcpu, u64 *exit_code)
    |       |             ^~~~~~~~~~~~~~~~~~~~~~
    | ./arch/arm64/kvm/hyp/include/hyp/switch.h:662:13: warning: 'kvm_hyp_handle_sysreg' defined but not used [-Wunused-function]
    |   662 | static bool kvm_hyp_handle_sysreg(struct kvm_vcpu *vcpu, u64 *exit_code)
    |       |             ^~~~~~~~~~~~~~~~~~~~~
    | ./arch/arm64/kvm/hyp/include/hyp/switch.h:458:13: warning: 'kvm_hyp_handle_fpsimd' defined but not used [-Wunused-function]
    |   458 | static bool kvm_hyp_handle_fpsimd(struct kvm_vcpu *vcpu, u64 *exit_code)
    |       |             ^~~~~~~~~~~~~~~~~~~~~
    | ./arch/arm64/kvm/hyp/include/hyp/switch.h:329:13: warning: 'kvm_hyp_handle_mops' defined but not used [-Wunused-function]
    |   329 | static bool kvm_hyp_handle_mops(struct kvm_vcpu *vcpu, u64 *exit_code)
    |       |             ^~~~~~~~~~~~~~~~~~~
    
    Mark these functions as 'inline' to suppress this warning. This
    shouldn't result in any functional change.
    
    At the same time, avoid the use of __alias() in the header and alias
    kvm_hyp_handle_iabt_low() and kvm_hyp_handle_watchpt_low() to
    kvm_hyp_handle_memory_fault() using CPP, matching the style in the rest
    of the kernel. For consistency, kvm_hyp_handle_memory_fault() is also
    marked as 'inline'.
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Reviewed-by: Mark Brown <broonie@kernel.org>
    Tested-by: Mark Brown <broonie@kernel.org>
    Acked-by: Will Deacon <will@kernel.org>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Fuad Tabba <tabba@google.com>
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: Oliver Upton <oliver.upton@linux.dev>
    Reviewed-by: Oliver Upton <oliver.upton@linux.dev>
    Link: https://lore.kernel.org/r/20250210195226.1215254-8-mark.rutland@arm.com
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: arm64: Refactor exit handlers [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Fri Mar 21 00:16:06 2025 +0000

    KVM: arm64: Refactor exit handlers
    
    [ Upstream commit 9b66195063c5a145843547b1d692bd189be85287 ]
    
    The hyp exit handling logic is largely shared between VHE and nVHE/hVHE,
    with common logic in arch/arm64/kvm/hyp/include/hyp/switch.h. The code
    in the header depends on function definitions provided by
    arch/arm64/kvm/hyp/vhe/switch.c and arch/arm64/kvm/hyp/nvhe/switch.c
    when they include the header.
    
    This is an unusual header dependency, and prevents the use of
    arch/arm64/kvm/hyp/include/hyp/switch.h in other files as this would
    result in compiler warnings regarding missing definitions, e.g.
    
    | In file included from arch/arm64/kvm/hyp/nvhe/hyp-main.c:8:
    | ./arch/arm64/kvm/hyp/include/hyp/switch.h:733:31: warning: 'kvm_get_exit_handler_array' used but never defined
    |   733 | static const exit_handler_fn *kvm_get_exit_handler_array(struct kvm_vcpu *vcpu);
    |       |                               ^~~~~~~~~~~~~~~~~~~~~~~~~~
    | ./arch/arm64/kvm/hyp/include/hyp/switch.h:735:13: warning: 'early_exit_filter' used but never defined
    |   735 | static void early_exit_filter(struct kvm_vcpu *vcpu, u64 *exit_code);
    |       |             ^~~~~~~~~~~~~~~~~
    
    Refactor the logic such that the header doesn't depend on anything from
    the C files. There should be no functional change as a result of this
    patch.
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Reviewed-by: Mark Brown <broonie@kernel.org>
    Tested-by: Mark Brown <broonie@kernel.org>
    Acked-by: Will Deacon <will@kernel.org>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Fuad Tabba <tabba@google.com>
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: Oliver Upton <oliver.upton@linux.dev>
    Reviewed-by: Oliver Upton <oliver.upton@linux.dev>
    Link: https://lore.kernel.org/r/20250210195226.1215254-7-mark.rutland@arm.com
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: arm64: Remove host FPSIMD saving for non-protected KVM [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Fri Mar 21 00:16:03 2025 +0000

    KVM: arm64: Remove host FPSIMD saving for non-protected KVM
    
    [ Upstream commit 8eca7f6d5100b6997df4f532090bc3f7e0203bef ]
    
    Now that the host eagerly saves its own FPSIMD/SVE/SME state,
    non-protected KVM never needs to save the host FPSIMD/SVE/SME state,
    and the code to do this is never used. Protected KVM still needs to
    save/restore the host FPSIMD/SVE state to avoid leaking guest state to
    the host (and to avoid revealing to the host whether the guest used
    FPSIMD/SVE/SME), and that code needs to be retained.
    
    Remove the unused code and data structures.
    
    To avoid the need for a stub copy of kvm_hyp_save_fpsimd_host() in the
    VHE hyp code, the nVHE/hVHE version is moved into the shared switch
    header, where it is only invoked when KVM is in protected mode.
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Reviewed-by: Mark Brown <broonie@kernel.org>
    Tested-by: Mark Brown <broonie@kernel.org>
    Acked-by: Will Deacon <will@kernel.org>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Fuad Tabba <tabba@google.com>
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: Oliver Upton <oliver.upton@linux.dev>
    Reviewed-by: Oliver Upton <oliver.upton@linux.dev>
    Link: https://lore.kernel.org/r/20250210195226.1215254-3-mark.rutland@arm.com
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: arm64: Remove VHE host restore of CPACR_EL1.SMEN [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Fri Mar 21 00:16:05 2025 +0000

    KVM: arm64: Remove VHE host restore of CPACR_EL1.SMEN
    
    [ Upstream commit 407a99c4654e8ea65393f412c421a55cac539f5b ]
    
    When KVM is in VHE mode, the host kernel tries to save and restore the
    configuration of CPACR_EL1.SMEN (i.e. CPTR_EL2.SMEN when HCR_EL2.E2H=1)
    across kvm_arch_vcpu_load_fp() and kvm_arch_vcpu_put_fp(), since the
    configuration may be clobbered by hyp when running a vCPU. This logic
    has historically been broken, and is currently redundant.
    
    This logic was originally introduced in commit:
    
      861262ab86270206 ("KVM: arm64: Handle SME host state when running guests")
    
    At the time, the VHE hyp code would reset CPTR_EL2.SMEN to 0b00 when
    returning to the host, trapping host access to SME state. Unfortunately,
    this was unsafe as the host could take a softirq before calling
    kvm_arch_vcpu_put_fp(), and if a softirq handler were to use kernel mode
    NEON the resulting attempt to save the live FPSIMD/SVE/SME state would
    result in a fatal trap.
    
    That issue was limited to VHE mode. For nVHE/hVHE modes, KVM always
    saved/restored the host kernel's CPACR_EL1 value, and configured
    CPTR_EL2.TSM to 0b0, ensuring that host usage of SME would not be
    trapped.
    
    The issue above was incidentally fixed by commit:
    
      375110ab51dec5dc ("KVM: arm64: Fix resetting SME trap values on reset for (h)VHE")
    
    That commit changed the VHE hyp code to configure CPTR_EL2.SMEN to 0b01
    when returning to the host, permitting host kernel usage of SME,
    avoiding the issue described above. At the time, this was not identified
    as a fix for commit 861262ab86270206.
    
    Now that the host eagerly saves and unbinds its own FPSIMD/SVE/SME
    state, there's no need to save/restore the state of the EL0 SME trap.
    The kernel can safely save/restore state without trapping, as described
    above, and will restore userspace state (including trap controls) before
    returning to userspace.
    
    Remove the redundant logic.
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Reviewed-by: Mark Brown <broonie@kernel.org>
    Tested-by: Mark Brown <broonie@kernel.org>
    Acked-by: Will Deacon <will@kernel.org>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Fuad Tabba <tabba@google.com>
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: Oliver Upton <oliver.upton@linux.dev>
    Reviewed-by: Oliver Upton <oliver.upton@linux.dev>
    Link: https://lore.kernel.org/r/20250210195226.1215254-5-mark.rutland@arm.com
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    [Update for rework of flags storage -- broonie]
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: arm64: Remove VHE host restore of CPACR_EL1.ZEN [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Fri Mar 21 00:16:04 2025 +0000

    KVM: arm64: Remove VHE host restore of CPACR_EL1.ZEN
    
    [ Upstream commit 459f059be702056d91537b99a129994aa6ccdd35 ]
    
    When KVM is in VHE mode, the host kernel tries to save and restore the
    configuration of CPACR_EL1.ZEN (i.e. CPTR_EL2.ZEN when HCR_EL2.E2H=1)
    across kvm_arch_vcpu_load_fp() and kvm_arch_vcpu_put_fp(), since the
    configuration may be clobbered by hyp when running a vCPU. This logic is
    currently redundant.
    
    The VHE hyp code unconditionally configures CPTR_EL2.ZEN to 0b01 when
    returning to the host, permitting host kernel usage of SVE.
    
    Now that the host eagerly saves and unbinds its own FPSIMD/SVE/SME
    state, there's no need to save/restore the state of the EL0 SVE trap.
    The kernel can safely save/restore state without trapping, as described
    above, and will restore userspace state (including trap controls) before
    returning to userspace.
    
    Remove the redundant logic.
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Reviewed-by: Mark Brown <broonie@kernel.org>
    Tested-by: Mark Brown <broonie@kernel.org>
    Acked-by: Will Deacon <will@kernel.org>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Fuad Tabba <tabba@google.com>
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: Oliver Upton <oliver.upton@linux.dev>
    Reviewed-by: Oliver Upton <oliver.upton@linux.dev>
    Link: https://lore.kernel.org/r/20250210195226.1215254-4-mark.rutland@arm.com
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    [Rework for refactoring of where the flags are stored -- broonie]
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: arm64: Unconditionally save+flush host FPSIMD/SVE/SME state [+ + +]
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Fri Mar 21 00:16:02 2025 +0000

    KVM: arm64: Unconditionally save+flush host FPSIMD/SVE/SME state
    
    [ Upstream commit fbc7e61195e23f744814e78524b73b59faa54ab4 ]
    
    There are several problems with the way hyp code lazily saves the host's
    FPSIMD/SVE state, including:
    
    * Host SVE being discarded unexpectedly due to inconsistent
      configuration of TIF_SVE and CPACR_ELx.ZEN. This has been seen to
      result in QEMU crashes where SVE is used by memmove(), as reported by
      Eric Auger:
    
      https://issues.redhat.com/browse/RHEL-68997
    
    * Host SVE state is discarded *after* modification by ptrace, which was an
      unintentional ptrace ABI change introduced with lazy discarding of SVE state.
    
    * The host FPMR value can be discarded when running a non-protected VM,
      where FPMR support is not exposed to a VM, and that VM uses
      FPSIMD/SVE. In these cases the hyp code does not save the host's FPMR
      before unbinding the host's FPSIMD/SVE/SME state, leaving a stale
      value in memory.
    
    Avoid these by eagerly saving and "flushing" the host's FPSIMD/SVE/SME
    state when loading a vCPU such that KVM does not need to save any of the
    host's FPSIMD/SVE/SME state. For clarity, fpsimd_kvm_prepare() is
    removed and the necessary call to fpsimd_save_and_flush_cpu_state() is
    placed in kvm_arch_vcpu_load_fp(). As 'fpsimd_state' and 'fpmr_ptr'
    should not be used, they are set to NULL; all uses of these will be
    removed in subsequent patches.
    
    Historical problems go back at least as far as v5.17, e.g. erroneous
    assumptions about TIF_SVE being clear in commit:
    
      8383741ab2e773a9 ("KVM: arm64: Get rid of host SVE tracking/saving")
    
    ... and so this eager save+flush probably needs to be backported to ALL
    stable trees.
    
    Fixes: 93ae6b01bafee8fa ("KVM: arm64: Discard any SVE state when entering KVM guests")
    Fixes: 8c845e2731041f0f ("arm64/sve: Leave SVE enabled on syscall if we don't context switch")
    Fixes: ef3be86021c3bdf3 ("KVM: arm64: Add save/restore support for FPMR")
    Reported-by: Eric Auger <eauger@redhat.com>
    Reported-by: Wilco Dijkstra <wilco.dijkstra@arm.com>
    Reviewed-by: Mark Brown <broonie@kernel.org>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Eric Auger <eric.auger@redhat.com>
    Acked-by: Will Deacon <will@kernel.org>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Florian Weimer <fweimer@redhat.com>
    Cc: Fuad Tabba <tabba@google.com>
    Cc: Jeremy Linton <jeremy.linton@arm.com>
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: Oliver Upton <oliver.upton@linux.dev>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Reviewed-by: Oliver Upton <oliver.upton@linux.dev>
    Link: https://lore.kernel.org/r/20250210195226.1215254-2-mark.rutland@arm.com
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    [ Mark: Handle vcpu/host flag conflict ]
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: Linux 6.6.85 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Fri Mar 28 21:59:57 2025 +0100

    Linux 6.6.85
    
    Link: https://lore.kernel.org/r/20250325122144.259256924@linuxfoundation.org
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://lore.kernel.org/r/20250326154346.820929475@linuxfoundation.org
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Hardik Garg <hargar@linux.microsoft.com>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
    Link: https://lore.kernel.org/r/20250328145011.672606157@linuxfoundation.org
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/migrate: fix shmem xarray update during migration [+ + +]
Author: Zi Yan <ziy@nvidia.com>
Date:   Wed Mar 5 15:04:03 2025 -0500

    mm/migrate: fix shmem xarray update during migration
    
    commit 60cf233b585cdf1f3c5e52d1225606b86acd08b0 upstream.
    
    A shmem folio can be either in page cache or in swap cache, but not at the
    same time.  Namely, once it is in swap cache, folio->mapping should be
    NULL, and the folio is no longer in a shmem mapping.
    
    In __folio_migrate_mapping(), to determine the number of xarray entries to
    update, folio_test_swapbacked() is used, but that conflates shmem in page
    cache case and shmem in swap cache case.  It leads to xarray multi-index
    entry corruption, since it turns a sibling entry to a normal entry during
    xas_store() (see [1] for a userspace reproduction).  Fix it by only using
    folio_test_swapcache() to determine whether xarray is storing swap cache
    entries or not to choose the right number of xarray entries to update.
    
    [1] https://lore.kernel.org/linux-mm/Z8idPCkaJW1IChjT@casper.infradead.org/
    
    Note:
    In __split_huge_page(), folio_test_anon() && folio_test_swapcache() is
    used to get swap_cache address space, but that ignores the shmem folio in
    swap cache case.  It could lead to NULL pointer dereferencing when a
    in-swap-cache shmem folio is split at __xa_store(), since
    !folio_test_anon() is true and folio->mapping is NULL.  But fortunately,
    its caller split_huge_page_to_list_to_order() bails out early with EBUSY
    when folio->mapping is NULL.  So no need to take care of it here.
    
    Link: https://lkml.kernel.org/r/20250305200403.2822855-1-ziy@nvidia.com
    Fixes: fc346d0a70a1 ("mm: migrate high-order folios in swap cache correctly")
    Signed-off-by: Zi Yan <ziy@nvidia.com>
    Reported-by: Liu Shixin <liushixin2@huawei.com>
    Closes: https://lore.kernel.org/all/28546fb4-5210-bf75-16d6-43e1f8646080@huawei.com/
    Suggested-by: Hugh Dickins <hughd@google.com>
    Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
    Cc: Barry Song <baohua@kernel.org>
    Cc: Charan Teja Kalla <quic_charante@quicinc.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
    Cc: Lance Yang <ioworker0@gmail.com>
    Cc: Ryan Roberts <ryan.roberts@arm.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm: fix error handling in __filemap_get_folio() with FGP_NOWAIT [+ + +]
Author: Raphael S. Carvalho <raphaelsc@scylladb.com>
Date:   Mon Feb 24 11:37:00 2025 -0300

    mm: fix error handling in __filemap_get_folio() with FGP_NOWAIT
    
    commit 182db972c9568dc530b2f586a2f82dfd039d9f2a upstream.
    
    original report:
    https://lore.kernel.org/all/CAKhLTr1UL3ePTpYjXOx2AJfNk8Ku2EdcEfu+CH1sf3Asr=B-Dw@mail.gmail.com/T/
    
    When doing buffered writes with FGP_NOWAIT, under memory pressure, the
    system returned ENOMEM despite there being plenty of available memory, to
    be reclaimed from page cache.  The user space used io_uring interface,
    which in turn submits I/O with FGP_NOWAIT (the fast path).
    
    retsnoop pointed to iomap_get_folio:
    
    00:34:16.180612 -> 00:34:16.180651 TID/PID 253786/253721
    (reactor-1/combined_tests):
    
                        entry_SYSCALL_64_after_hwframe+0x76
                        do_syscall_64+0x82
                        __do_sys_io_uring_enter+0x265
                        io_submit_sqes+0x209
                        io_issue_sqe+0x5b
                        io_write+0xdd
                        xfs_file_buffered_write+0x84
                        iomap_file_buffered_write+0x1a6
        32us [-ENOMEM]  iomap_write_begin+0x408
    iter=&{.inode=0xffff8c67aa031138,.len=4096,.flags=33,.iomap={.addr=0xffffffffffffffff,.length=4096,.type=1,.flags=3,.bdev=0x…
    pos=0 len=4096 foliop=0xffffb32c296b7b80
    !    4us [-ENOMEM]  iomap_get_folio
    iter=&{.inode=0xffff8c67aa031138,.len=4096,.flags=33,.iomap={.addr=0xffffffffffffffff,.length=4096,.type=1,.flags=3,.bdev=0x…
    pos=0 len=4096
    
    This is likely a regression caused by 66dabbb65d67 ("mm: return an ERR_PTR
    from __filemap_get_folio"), which moved error handling from
    io_map_get_folio() to __filemap_get_folio(), but broke FGP_NOWAIT
    handling, so ENOMEM is being escaped to user space.  Had it correctly
    returned -EAGAIN with NOWAIT, either io_uring or user space itself would
    be able to retry the request.
    
    It's not enough to patch io_uring since the iomap interface is the one
    responsible for it, and pwritev2(RWF_NOWAIT) and AIO interfaces must
    return the proper error too.
    
    The patch was tested with scylladb test suite (its original reproducer),
    and the tests all pass now when memory is pressured.
    
    Link: https://lkml.kernel.org/r/20250224143700.23035-1-raphaelsc@scylladb.com
    Fixes: 66dabbb65d67 ("mm: return an ERR_PTR from __filemap_get_folio")
    Signed-off-by: Raphael S. Carvalho <raphaelsc@scylladb.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Dave Chinner <dchinner@redhat.com>
    Cc: "Darrick J. Wong" <djwong@kernel.org>
    Cc: Matthew Wilcow (Oracle) <willy@infradead.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mmc: atmel-mci: Add missing clk_disable_unprepare() [+ + +]
Author: Gu Bowen <gubowen5@huawei.com>
Date:   Tue Feb 25 10:28:56 2025 +0800

    mmc: atmel-mci: Add missing clk_disable_unprepare()
    
    commit e51a349d2dcf1df8422dabb90b2f691dc7df6f92 upstream.
    
    The error path when atmci_configure_dma() set dma fails in atmci driver
    does not correctly disable the clock.
    Add the missing clk_disable_unprepare() to the error path for pair with
    clk_prepare_enable().
    
    Fixes: 467e081d23e6 ("mmc: atmel-mci: use probe deferring if dma controller is not ready yet")
    Signed-off-by: Gu Bowen <gubowen5@huawei.com>
    Acked-by: Aubin Constans <aubin.constans@microchip.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20250225022856.3452240-1-gubowen5@huawei.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: sdhci-brcmstb: add cqhci suspend/resume to PM ops [+ + +]
Author: Kamal Dasu <kamal.dasu@broadcom.com>
Date:   Tue Mar 11 12:59:35 2025 -0400

    mmc: sdhci-brcmstb: add cqhci suspend/resume to PM ops
    
    commit 723ef0e20dbb2aa1b5406d2bb75374fc48187daa upstream.
    
    cqhci timeouts observed on brcmstb platforms during suspend:
      ...
      [  164.832853] mmc0: cqhci: timeout for tag 18
      ...
    
    Adding cqhci_suspend()/resume() calls to disable cqe
    in sdhci_brcmstb_suspend()/resume() respectively to fix
    CQE timeouts seen on PM suspend.
    
    Fixes: d46ba2d17f90 ("mmc: sdhci-brcmstb: Add support for Command Queuing (CQE)")
    Cc: stable@vger.kernel.org
    Signed-off-by: Kamal Dasu <kamal.dasu@broadcom.com>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://lore.kernel.org/r/20250311165946.28190-1-kamal.dasu@broadcom.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mptcp: Fix data stream corruption in the address announcement [+ + +]
Author: Arthur Mongodin <amongodin@randorisec.fr>
Date:   Fri Mar 14 21:11:31 2025 +0100

    mptcp: Fix data stream corruption in the address announcement
    
    commit 2c1f97a52cb827a5f2768e67a9dddffae1ed47ab upstream.
    
    Because of the size restriction in the TCP options space, the MPTCP
    ADD_ADDR option is exclusive and cannot be sent with other MPTCP ones.
    For this reason, in the linked mptcp_out_options structure, group of
    fields linked to different options are part of the same union.
    
    There is a case where the mptcp_pm_add_addr_signal() function can modify
    opts->addr, but not ended up sending an ADD_ADDR. Later on, back in
    mptcp_established_options, other options will be sent, but with
    unexpected data written in other fields due to the union, e.g. in
    opts->ext_copy. This could lead to a data stream corruption in the next
    packet.
    
    Using an intermediate variable, prevents from corrupting previously
    established DSS option. The assignment of the ADD_ADDR option
    parameters is now done once we are sure this ADD_ADDR option can be set
    in the packet, e.g. after having dropped other suboptions.
    
    Fixes: 1bff1e43a30e ("mptcp: optimize out option generation")
    Cc: stable@vger.kernel.org
    Suggested-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Arthur Mongodin <amongodin@randorisec.fr>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    [ Matt: the commit message has been updated: long lines splits and some
      clarifications. ]
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20250314-net-mptcp-fix-data-stream-corr-sockopt-v1-1-122dbb249db3@kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/neighbor: add missing policy for NDTPA_QUEUE_LENBYTES [+ + +]
Author: Lin Ma <linma@zju.edu.cn>
Date:   Sun Mar 16 00:51:13 2025 +0800

    net/neighbor: add missing policy for NDTPA_QUEUE_LENBYTES
    
    [ Upstream commit 90a7138619a0c55e2aefaad27b12ffc2ddbeed78 ]
    
    Previous commit 8b5c171bb3dc ("neigh: new unresolved queue limits")
    introduces new netlink attribute NDTPA_QUEUE_LENBYTES to represent
    approximative value for deprecated QUEUE_LEN. However, it forgot to add
    the associated nla_policy in nl_ntbl_parm_policy array. Fix it with one
    simple NLA_U32 type policy.
    
    Fixes: 8b5c171bb3dc ("neigh: new unresolved queue limits")
    Signed-off-by: Lin Ma <linma@zju.edu.cn>
    Link: https://patch.msgid.link/20250315165113.37600-1-linma@zju.edu.cn
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net: atm: fix use after free in lec_send() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Fri Mar 14 13:10:57 2025 +0300

    net: atm: fix use after free in lec_send()
    
    [ Upstream commit f3009d0d6ab78053117f8857b921a8237f4d17b3 ]
    
    The ->send() operation frees skb so save the length before calling
    ->send() to avoid a use after free.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/c751531d-4af4-42fe-affe-6104b34b791d@stanley.mountain
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: lwtunnel: fix recursion loops [+ + +]
Author: Justin Iurman <justin.iurman@uliege.be>
Date:   Fri Mar 14 13:00:46 2025 +0100

    net: lwtunnel: fix recursion loops
    
    [ Upstream commit 986ffb3a57c5650fb8bf6d59a8f0f07046abfeb6 ]
    
    This patch acts as a parachute, catch all solution, by detecting
    recursion loops in lwtunnel users and taking care of them (e.g., a loop
    between routes, a loop within the same route, etc). In general, such
    loops are the consequence of pathological configurations. Each lwtunnel
    user is still free to catch such loops early and do whatever they want
    with them. It will be the case in a separate patch for, e.g., seg6 and
    seg6_local, in order to provide drop reasons and update statistics.
    Another example of a lwtunnel user taking care of loops is ioam6, which
    has valid use cases that include loops (e.g., inline mode), and which is
    addressed by the next patch in this series. Overall, this patch acts as
    a last resort to catch loops and drop packets, since we don't want to
    leak something unintentionally because of a pathological configuration
    in lwtunnels.
    
    The solution in this patch reuses dev_xmit_recursion(),
    dev_xmit_recursion_inc(), and dev_xmit_recursion_dec(), which seems fine
    considering the context.
    
    Closes: https://lore.kernel.org/netdev/2bc9e2079e864a9290561894d2a602d6@akamai.com/
    Closes: https://lore.kernel.org/netdev/Z7NKYMY7fJT5cYWu@shredder/
    Fixes: ffce41962ef6 ("lwtunnel: support dst output redirect function")
    Fixes: 2536862311d2 ("lwt: Add support to redirect dst.input")
    Fixes: 14972cbd34ff ("net: lwtunnel: Handle fragmentation")
    Signed-off-by: Justin Iurman <justin.iurman@uliege.be>
    Link: https://patch.msgid.link/20250314120048.12569-2-justin.iurman@uliege.be
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netfilter: nft_counter: Use u64_stats_t for statistic. [+ + +]
Author: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date:   Tue Aug 20 09:54:32 2024 +0200

    netfilter: nft_counter: Use u64_stats_t for statistic.
    
    commit 4a1d3acd6ea86075e77fcc1188c3fc372833ba73 upstream.
    
    The nft_counter uses two s64 counters for statistics. Those two are
    protected by a seqcount to ensure that the 64bit variable is always
    properly seen during updates even on 32bit architectures where the store
    is performed by two writes. A side effect is that the two counter (bytes
    and packet) are written and read together in the same window.
    
    This can be replaced with u64_stats_t. write_seqcount_begin()/ end() is
    replaced with u64_stats_update_begin()/ end() and behaves the same way
    as with seqcount_t on 32bit architectures. Additionally there is a
    preempt_disable on PREEMPT_RT to ensure that a reader does not preempt a
    writer.
    On 64bit architectures the macros are removed and the reads happen
    without any retries. This also means that the reader can observe one
    counter (bytes) from before the update and the other counter (packets)
    but that is okay since there is no requirement to have both counter from
    the same update window.
    
    Convert the statistic to u64_stats_t. There is one optimisation:
    nft_counter_do_init() and nft_counter_clone() allocate a new per-CPU
    counter and assign a value to it. During this assignment preemption is
    disabled which is not needed because the counter is not yet exposed to
    the system so there can not be another writer or reader. Therefore
    disabling preemption is omitted and raw_cpu_ptr() is used to obtain a
    pointer to a counter for the assignment.
    
    Cc: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Felix Moessbauer <felix.moessbauer@siemens.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
proc: fix UAF in proc_get_inode() [+ + +]
Author: Ye Bin <yebin10@huawei.com>
Date:   Sat Mar 1 15:06:24 2025 +0300

    proc: fix UAF in proc_get_inode()
    
    commit 654b33ada4ab5e926cd9c570196fefa7bec7c1df upstream.
    
    Fix race between rmmod and /proc/XXX's inode instantiation.
    
    The bug is that pde->proc_ops don't belong to /proc, it belongs to a
    module, therefore dereferencing it after /proc entry has been registered
    is a bug unless use_pde/unuse_pde() pair has been used.
    
    use_pde/unuse_pde can be avoided (2 atomic ops!) because pde->proc_ops
    never changes so information necessary for inode instantiation can be
    saved _before_ proc_register() in PDE itself and used later, avoiding
    pde->proc_ops->...  dereference.
    
          rmmod                         lookup
    sys_delete_module
                             proc_lookup_de
                               pde_get(de);
                               proc_get_inode(dir->i_sb, de);
      mod->exit()
        proc_remove
          remove_proc_subtree
           proc_entry_rundown(de);
      free_module(mod);
    
                                   if (S_ISREG(inode->i_mode))
                                     if (de->proc_ops->proc_read_iter)
                               --> As module is already freed, will trigger UAF
    
    BUG: unable to handle page fault for address: fffffbfff80a702b
    PGD 817fc4067 P4D 817fc4067 PUD 817fc0067 PMD 102ef4067 PTE 0
    Oops: Oops: 0000 [#1] PREEMPT SMP KASAN PTI
    CPU: 26 UID: 0 PID: 2667 Comm: ls Tainted: G
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996)
    RIP: 0010:proc_get_inode+0x302/0x6e0
    RSP: 0018:ffff88811c837998 EFLAGS: 00010a06
    RAX: dffffc0000000000 RBX: ffffffffc0538140 RCX: 0000000000000007
    RDX: 1ffffffff80a702b RSI: 0000000000000001 RDI: ffffffffc0538158
    RBP: ffff8881299a6000 R08: 0000000067bbe1e5 R09: 1ffff11023906f20
    R10: ffffffffb560ca07 R11: ffffffffb2b43a58 R12: ffff888105bb78f0
    R13: ffff888100518048 R14: ffff8881299a6004 R15: 0000000000000001
    FS:  00007f95b9686840(0000) GS:ffff8883af100000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: fffffbfff80a702b CR3: 0000000117dd2000 CR4: 00000000000006f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     proc_lookup_de+0x11f/0x2e0
     __lookup_slow+0x188/0x350
     walk_component+0x2ab/0x4f0
     path_lookupat+0x120/0x660
     filename_lookup+0x1ce/0x560
     vfs_statx+0xac/0x150
     __do_sys_newstat+0x96/0x110
     do_syscall_64+0x5f/0x170
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    [adobriyan@gmail.com: don't do 2 atomic ops on the common path]
    Link: https://lkml.kernel.org/r/3d25ded0-1739-447e-812b-e34da7990dcf@p183
    Fixes: 778f3dd5a13c ("Fix procfs compat_ioctl regression")
    Signed-off-by: Ye Bin <yebin10@huawei.com>
    Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
RDMA/bnxt_re: Add missing paranthesis in map_qp_id_to_tbl_indx [+ + +]
Author: Kashyap Desai <kashyap.desai@broadcom.com>
Date:   Mon Mar 3 08:59:37 2025 -0800

    RDMA/bnxt_re: Add missing paranthesis in map_qp_id_to_tbl_indx
    
    [ Upstream commit 67ee8d496511ad8e1cb88f72944847e7b3e4e47c ]
    
    The modulo operation returns wrong result without the
    paranthesis and that resulted in wrong QP table indexing.
    
    Fixes: 84cf229f4001 ("RDMA/bnxt_re: Fix the qp table indexing")
    Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Link: https://patch.msgid.link/1741021178-2569-3-git-send-email-selvin.xavier@broadcom.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Avoid clearing VLAN_ID mask in modify qp path [+ + +]
Author: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
Date:   Mon Mar 10 22:16:36 2025 -0700

    RDMA/bnxt_re: Avoid clearing VLAN_ID mask in modify qp path
    
    [ Upstream commit 81c0db302a674f8004ed805393d17fd76f552e83 ]
    
    Driver is always clearing the mask that sets the VLAN ID/Service Level
    in the adapter. Recent change for supporting multiple traffic class
    exposed this issue.
    
    Allow setting SL and VLAN_ID while QP is moved from INIT to RTR state.
    
    Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver")
    Fixes: c64b16a37b6d ("RDMA/bnxt_re: Support different traffic class")
    Signed-off-by: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Link: https://patch.msgid.link/1741670196-2919-1-git-send-email-selvin.xavier@broadcom.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/hns: Fix a missing rollback in error path of hns_roce_create_qp_common() [+ + +]
Author: Junxian Huang <huangjunxian6@hisilicon.com>
Date:   Tue Mar 11 16:48:55 2025 +0800

    RDMA/hns: Fix a missing rollback in error path of hns_roce_create_qp_common()
    
    [ Upstream commit 444907dd45cbe62fd69398805b6e2c626fab5b3a ]
    
    When ib_copy_to_udata() fails in hns_roce_create_qp_common(),
    hns_roce_qp_remove() should be called in the error path to
    clean up resources in hns_roce_qp_store().
    
    Fixes: 0f00571f9433 ("RDMA/hns: Use new SQ doorbell register for HIP09")
    Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
    Link: https://patch.msgid.link/20250311084857.3803665-6-huangjunxian6@hisilicon.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Fix soft lockup during bt pages loop [+ + +]
Author: Junxian Huang <huangjunxian6@hisilicon.com>
Date:   Tue Mar 11 16:48:52 2025 +0800

    RDMA/hns: Fix soft lockup during bt pages loop
    
    [ Upstream commit 25655580136de59ec89f09089dd28008ea440fc9 ]
    
    Driver runs a for-loop when allocating bt pages and mapping them with
    buffer pages. When a large buffer (e.g. MR over 100GB) is being allocated,
    it may require a considerable loop count. This will lead to soft lockup:
    
            watchdog: BUG: soft lockup - CPU#27 stuck for 22s!
            ...
            Call trace:
             hem_list_alloc_mid_bt+0x124/0x394 [hns_roce_hw_v2]
             hns_roce_hem_list_request+0xf8/0x160 [hns_roce_hw_v2]
             hns_roce_mtr_create+0x2e4/0x360 [hns_roce_hw_v2]
             alloc_mr_pbl+0xd4/0x17c [hns_roce_hw_v2]
             hns_roce_reg_user_mr+0xf8/0x190 [hns_roce_hw_v2]
             ib_uverbs_reg_mr+0x118/0x290
    
            watchdog: BUG: soft lockup - CPU#35 stuck for 23s!
            ...
            Call trace:
             hns_roce_hem_list_find_mtt+0x7c/0xb0 [hns_roce_hw_v2]
             mtr_map_bufs+0xc4/0x204 [hns_roce_hw_v2]
             hns_roce_mtr_create+0x31c/0x3c4 [hns_roce_hw_v2]
             alloc_mr_pbl+0xb0/0x160 [hns_roce_hw_v2]
             hns_roce_reg_user_mr+0x108/0x1c0 [hns_roce_hw_v2]
             ib_uverbs_reg_mr+0x120/0x2bc
    
    Add a cond_resched() to fix soft lockup during these loops. In order not
    to affect the allocation performance of normal-size buffer, set the loop
    count of a 100GB MR as the threshold to call cond_resched().
    
    Fixes: 38389eaa4db1 ("RDMA/hns: Add mtr support for mixed multihop addressing")
    Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
    Link: https://patch.msgid.link/20250311084857.3803665-3-huangjunxian6@hisilicon.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Fix unmatched condition in error path of alloc_user_qp_db() [+ + +]
Author: Junxian Huang <huangjunxian6@hisilicon.com>
Date:   Tue Mar 11 16:48:53 2025 +0800

    RDMA/hns: Fix unmatched condition in error path of alloc_user_qp_db()
    
    [ Upstream commit b9f59a24ba35a7d955a9f8e148dd9f85b7b40a01 ]
    
    Currently the condition of unmapping sdb in error path is not exactly
    the same as the condition of mapping in alloc_user_qp_db(). This may
    cause a problem of unmapping an unmapped db in some case, such as
    when the QP is XRC TGT. Unified the two conditions.
    
    Fixes: 90ae0b57e4a5 ("RDMA/hns: Combine enable flags of qp")
    Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
    Link: https://patch.msgid.link/20250311084857.3803665-4-huangjunxian6@hisilicon.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Fix wrong value of max_sge_rd [+ + +]
Author: Junxian Huang <huangjunxian6@hisilicon.com>
Date:   Tue Mar 11 16:48:57 2025 +0800

    RDMA/hns: Fix wrong value of max_sge_rd
    
    [ Upstream commit 6b5e41a8b51fce520bb09bd651a29ef495e990de ]
    
    There is no difference between the sge of READ and non-READ
    operations in hns RoCE. Set max_sge_rd to the same value as
    max_send_sge.
    
    Fixes: 9a4435375cd1 ("IB/hns: Add driver files for hns RoCE driver")
    Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
    Link: https://patch.msgid.link/20250311084857.3803665-8-huangjunxian6@hisilicon.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/mlx5: Handle errors returned from mlx5r_ib_rate() [+ + +]
Author: Qasim Ijaz <qasdev00@gmail.com>
Date:   Tue Mar 4 14:02:46 2025 +0000

    RDMA/mlx5: Handle errors returned from mlx5r_ib_rate()
    
    [ Upstream commit 556f93b90c1872ad85e216e613c0b33803e621cb ]
    
    In function create_ib_ah() the following line attempts
    to left shift the return value of mlx5r_ib_rate() by 4
    and store it in the stat_rate_sl member of av:
    
    However the code overlooks the fact that mlx5r_ib_rate()
    may return -EINVAL if the rate passed to it is less than
    IB_RATE_2_5_GBPS or greater than IB_RATE_800_GBPS.
    
    Because of this, the code may invoke undefined behaviour when
    shifting a signed negative value when doing "-EINVAL << 4".
    
    To fix this check for errors before assigning stat_rate_sl and
    propagate any error value to the callers.
    
    Fixes: c534ffda781f ("RDMA/mlx5: Fix AH static rate parsing")
    Signed-off-by: Qasim Ijaz <qasdev00@gmail.com>
    Link: https://patch.msgid.link/20250304140246.205919-1-qasdev00@gmail.com
    Reviewed-by: Patrisious Haddad <phaddad@nvidia.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
regulator: check that dummy regulator has been probed before using it [+ + +]
Author: Christian Eggers <ceggers@arri.de>
Date:   Thu Mar 13 11:27:39 2025 +0100

    regulator: check that dummy regulator has been probed before using it
    
    commit 2c7a50bec4958f1d1c84d19cde518d0e96a676fd upstream.
    
    Due to asynchronous driver probing there is a chance that the dummy
    regulator hasn't already been probed when first accessing it.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Christian Eggers <ceggers@arri.de>
    Link: https://patch.msgid.link/20250313103051.32430-3-ceggers@arri.de
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

regulator: dummy: force synchronous probing [+ + +]
Author: Christian Eggers <ceggers@arri.de>
Date:   Tue Mar 11 10:18:02 2025 +0100

    regulator: dummy: force synchronous probing
    
    commit 8619909b38eeebd3e60910158d7d68441fc954e9 upstream.
    
    Sometimes I get a NULL pointer dereference at boot time in kobject_get()
    with the following call stack:
    
    anatop_regulator_probe()
     devm_regulator_register()
      regulator_register()
       regulator_resolve_supply()
        kobject_get()
    
    By placing some extra BUG_ON() statements I could verify that this is
    raised because probing of the 'dummy' regulator driver is not completed
    ('dummy_regulator_rdev' is still NULL).
    
    In the JTAG debugger I can see that dummy_regulator_probe() and
    anatop_regulator_probe() can be run by different kernel threads
    (kworker/u4:*).  I haven't further investigated whether this can be
    changed or if there are other possibilities to force synchronization
    between these two probe routines.  On the other hand I don't expect much
    boot time penalty by probing the 'dummy' regulator synchronously.
    
    Cc: stable@vger.kernel.org
    Fixes: 259b93b21a9f ("regulator: Set PROBE_PREFER_ASYNCHRONOUS for drivers that existed in 4.14")
    Signed-off-by: Christian Eggers <ceggers@arri.de>
    Link: https://patch.msgid.link/20250311091803.31026-1-ceggers@arri.de
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "gre: Fix IPv6 link-local address generation." [+ + +]
Author: Guillaume Nault <gnault@redhat.com>
Date:   Wed Mar 19 22:26:50 2025 +0100

    Revert "gre: Fix IPv6 link-local address generation."
    
    [ Upstream commit fc486c2d060f67d672ddad81724f7c8a4d329570 ]
    
    This reverts commit 183185a18ff96751db52a46ccf93fff3a1f42815.
    
    This patch broke net/forwarding/ip6gre_custom_multipath_hash.sh in some
    circumstances (https://lore.kernel.org/netdev/Z9RIyKZDNoka53EO@mini-arch/).
    Let's revert it while the problem is being investigated.
    
    Fixes: 183185a18ff9 ("gre: Fix IPv6 link-local address generation.")
    Signed-off-by: Guillaume Nault <gnault@redhat.com>
    Link: https://patch.msgid.link/8b1ce738eb15dd841aab9ef888640cab4f6ccfea.1742418408.git.gnault@redhat.com
    Acked-by: Stanislav Fomichev <sdf@fomichev.me>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Revert "sched/core: Reduce cost of sched_move_task when config autogroup" [+ + +]
Author: Dietmar Eggemann <dietmar.eggemann@arm.com>
Date:   Fri Mar 14 16:13:45 2025 +0100

    Revert "sched/core: Reduce cost of sched_move_task when config autogroup"
    
    commit 76f970ce51c80f625eb6ddbb24e9cb51b977b598 upstream.
    
    This reverts commit eff6c8ce8d4d7faef75f66614dd20bb50595d261.
    
    Hazem reported a 30% drop in UnixBench spawn test with commit
    eff6c8ce8d4d ("sched/core: Reduce cost of sched_move_task when config
    autogroup") on a m6g.xlarge AWS EC2 instance with 4 vCPUs and 16 GiB RAM
    (aarch64) (single level MC sched domain):
    
      https://lkml.kernel.org/r/20250205151026.13061-1-hagarhem@amazon.com
    
    There is an early bail from sched_move_task() if p->sched_task_group is
    equal to p's 'cpu cgroup' (sched_get_task_group()). E.g. both are
    pointing to taskgroup '/user.slice/user-1000.slice/session-1.scope'
    (Ubuntu '22.04.5 LTS').
    
    So in:
    
      do_exit()
    
        sched_autogroup_exit_task()
    
          sched_move_task()
    
            if sched_get_task_group(p) == p->sched_task_group
              return
    
            /* p is enqueued */
            dequeue_task()              \
            sched_change_group()        |
              task_change_group_fair()  |
                detach_task_cfs_rq()    |                              (1)
                set_task_rq()           |
                attach_task_cfs_rq()    |
            enqueue_task()              /
    
    (1) isn't called for p anymore.
    
    Turns out that the regression is related to sgs->group_util in
    group_is_overloaded() and group_has_capacity(). If (1) isn't called for
    all the 'spawn' tasks then sgs->group_util is ~900 and
    sgs->group_capacity = 1024 (single CPU sched domain) and this leads to
    group_is_overloaded() returning true (2) and group_has_capacity() false
    (3) much more often compared to the case when (1) is called.
    
    I.e. there are much more cases of 'group_is_overloaded' and
    'group_fully_busy' in WF_FORK wakeup sched_balance_find_dst_cpu() which
    then returns much more often a CPU != smp_processor_id() (5).
    
    This isn't good for these extremely short running tasks (FORK + EXIT)
    and also involves calling sched_balance_find_dst_group_cpu() unnecessary
    (single CPU sched domain).
    
    Instead if (1) is called for 'p->flags & PF_EXITING' then the path
    (4),(6) is taken much more often.
    
      select_task_rq_fair(..., wake_flags = WF_FORK)
    
        cpu = smp_processor_id()
    
        new_cpu = sched_balance_find_dst_cpu(..., cpu, ...)
    
          group = sched_balance_find_dst_group(..., cpu)
    
            do {
    
              update_sg_wakeup_stats()
    
                sgs->group_type = group_classify()
    
                  if group_is_overloaded()                             (2)
                    return group_overloaded
    
                  if !group_has_capacity()                             (3)
                    return group_fully_busy
    
                  return group_has_spare                               (4)
    
            } while group
    
            if local_sgs.group_type > idlest_sgs.group_type
              return idlest                                            (5)
    
            case group_has_spare:
    
              if local_sgs.idle_cpus >= idlest_sgs.idle_cpus
                return NULL                                            (6)
    
    Unixbench Tests './Run -c 4 spawn' on:
    
    (a) VM AWS instance (m7gd.16xlarge) with v6.13 ('maxcpus=4 nr_cpus=4')
        and Ubuntu 22.04.5 LTS (aarch64).
    
        Shell & test run in '/user.slice/user-1000.slice/session-1.scope'.
    
        w/o patch   w/ patch
        21005       27120
    
    (b) i7-13700K with tip/sched/core ('nosmt maxcpus=8 nr_cpus=8') and
        Ubuntu 22.04.5 LTS (x86_64).
    
        Shell & test run in '/A'.
    
        w/o patch   w/ patch
        67675       88806
    
    CONFIG_SCHED_AUTOGROUP=y & /sys/proc/kernel/sched_autogroup_enabled equal
    0 or 1.
    
    Reported-by: Hazem Mohamed Abuelfotoh <abuehaze@amazon.com>
    Signed-off-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>
    Tested-by: Hagar Hemdan <hagarhem@amazon.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Link: https://lore.kernel.org/r/20250314151345.275739-1-dietmar.eggemann@arm.com
    [Hagar: clean revert of eff6c8ce8dd7 to make it work on 6.6]
    Signed-off-by: Hagar Hemdan <hagarhem@amazon.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
riscv: dts: starfive: Fix a typo in StarFive JH7110 pin function definitions [+ + +]
Author: E Shattow <e@freeshell.de>
Date:   Mon Dec 9 20:19:56 2024 -0800

    riscv: dts: starfive: Fix a typo in StarFive JH7110 pin function definitions
    
    commit 1b133129ad6b28186214259af3bd5fc651a85509 upstream.
    
    Fix a typo in StarFive JH7110 pin function definitions for GPOUT_SYS_SDIO1_DATA4
    
    Fixes: e22f09e598d12 ("riscv: dts: starfive: Add StarFive JH7110 pin function definitions")
    Signed-off-by: E Shattow <e@freeshell.de>
    Acked-by: Hal Feng <hal.feng@starfivetech.com>
    CC: stable@vger.kernel.org
    Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
soc: imx8m: Remove global soc_uid [+ + +]
Author: Marek Vasut <marex@denx.de>
Date:   Sun Sep 29 20:49:17 2024 +0200

    soc: imx8m: Remove global soc_uid
    
    [ Upstream commit 9c1c02fe8d7f33c18547b79c41f3fa41ef7bae8f ]
    
    The static global soc_uid is only ever used as kasprintf() parameter in
    imx8m_soc_probe(). Pass pointer to local u64 variable to .soc_revision()
    callback instead and let the .soc_revision() callback fill in the content.
    Remove the unnecessary static global variable.
    
    Signed-off-by: Marek Vasut <marex@denx.de>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Stable-dep-of: cf7139aac463 ("soc: imx8m: Unregister cpufreq and soc dev in cleanup path")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

soc: imx8m: Unregister cpufreq and soc dev in cleanup path [+ + +]
Author: Peng Fan <peng.fan@nxp.com>
Date:   Fri Feb 14 16:47:51 2025 +0800

    soc: imx8m: Unregister cpufreq and soc dev in cleanup path
    
    [ Upstream commit cf7139aac463880cbd5c5e999c118fbe91631411 ]
    
    Unregister the cpufreq device and soc device when resource unwinding,
    otherwise there will be warning when do removing test:
    sysfs: cannot create duplicate filename '/devices/platform/imx-cpufreq-dt'
    CPU: 0 UID: 0 PID: 1 Comm: swapper/0 Not tainted 6.13.0-rc1-next-20241204
    Hardware name: NXP i.MX8MPlus EVK board (DT)
    
    Fixes: 9cc832d37799 ("soc: imx8m: Probe the SoC driver as platform driver")
    Cc: Marco Felsch <m.felsch@pengutronix.de>
    Signed-off-by: Peng Fan <peng.fan@nxp.com>
    Reviewed-by: Marco Felsch <m.felsch@pengutronix.de>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

soc: imx8m: Use devm_* to simplify probe failure handling [+ + +]
Author: Marek Vasut <marex@denx.de>
Date:   Sun Sep 29 20:49:18 2024 +0200

    soc: imx8m: Use devm_* to simplify probe failure handling
    
    [ Upstream commit 22b03a4e957e462b380a982759ccf0f6554735d3 ]
    
    Use device managed functions to simplify handling of failures during
    probe. Remove fail paths which are no longer necessary.
    
    Signed-off-by: Marek Vasut <marex@denx.de>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Stable-dep-of: cf7139aac463 ("soc: imx8m: Unregister cpufreq and soc dev in cleanup path")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

soc: qcom: pdr: Fix the potential deadlock [+ + +]
Author: Saranya R <quic_sarar@quicinc.com>
Date:   Wed Feb 12 22:07:20 2025 +0530

    soc: qcom: pdr: Fix the potential deadlock
    
    commit 2eeb03ad9f42dfece63051be2400af487ddb96d2 upstream.
    
    When some client process A call pdr_add_lookup() to add the look up for
    the service and does schedule locator work, later a process B got a new
    server packet indicating locator is up and call pdr_locator_new_server()
    which eventually sets pdr->locator_init_complete to true which process A
    sees and takes list lock and queries domain list but it will timeout due
    to deadlock as the response will queued to the same qmi->wq and it is
    ordered workqueue and process B is not able to complete new server
    request work due to deadlock on list lock.
    
    Fix it by removing the unnecessary list iteration as the list iteration
    is already being done inside locator work, so avoid it here and just
    call schedule_work() here.
    
           Process A                        Process B
    
                                         process_scheduled_works()
    pdr_add_lookup()                      qmi_data_ready_work()
     process_scheduled_works()             pdr_locator_new_server()
                                             pdr->locator_init_complete=true;
       pdr_locator_work()
        mutex_lock(&pdr->list_lock);
    
         pdr_locate_service()                  mutex_lock(&pdr->list_lock);
    
          pdr_get_domain_list()
           pr_err("PDR: %s get domain list
                   txn wait failed: %d\n",
                   req->service_name,
                   ret);
    
    Timeout error log due to deadlock:
    
    "
     PDR: tms/servreg get domain list txn wait failed: -110
     PDR: service lookup for msm/adsp/sensor_pd:tms/servreg failed: -110
    "
    
    Thanks to Bjorn and Johan for letting me know that this commit also fixes
    an audio regression when using the in-kernel pd-mapper as that makes it
    easier to hit this race. [1]
    
    Link: https://lore.kernel.org/lkml/Zqet8iInnDhnxkT9@hovoldconsulting.com/ # [1]
    Fixes: fbe639b44a82 ("soc: qcom: Introduce Protection Domain Restart helpers")
    CC: stable@vger.kernel.org
    Reviewed-by: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>
    Tested-by: Bjorn Andersson <bjorn.andersson@oss.qualcomm.com>
    Tested-by: Johan Hovold <johan+linaro@kernel.org>
    Signed-off-by: Saranya R <quic_sarar@quicinc.com>
    Co-developed-by: Mukesh Ojha <mukesh.ojha@oss.qualcomm.com>
    Signed-off-by: Mukesh Ojha <mukesh.ojha@oss.qualcomm.com>
    Link: https://lore.kernel.org/r/20250212163720.1577876-1-mukesh.ojha@oss.qualcomm.com
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
wifi: iwlwifi: mvm: ensure offloading TID queue exists [+ + +]
Author: Benjamin Berg <benjamin.berg@intel.com>
Date:   Sun Feb 18 19:51:47 2024 +0200

    wifi: iwlwifi: mvm: ensure offloading TID queue exists
    
    commit 78f65fbf421a61894c14a1b91fe2fb4437b3fe5f upstream.
    
    The resume code path assumes that the TX queue for the offloading TID
    has been configured. At resume time it then tries to sync the write
    pointer as it may have been updated by the firmware.
    
    In the unusual event that no packets have been send on TID 0, the queue
    will not have been allocated and this causes a crash. Fix this by
    ensuring the queue exist at suspend time.
    
    Signed-off-by: Benjamin Berg <benjamin.berg@intel.com>
    Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
    Link: https://msgid.link/20240218194912.6632e6dc7b35.Ie6e6a7488c9c7d4529f13d48f752b5439d8ac3c4@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Jianqi Ren <jianqi.ren.cn@windriver.com>
    Signed-off-by: He Zhe <zhe.he@windriver.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: iwlwifi: support BIOS override for 5G9 in CA also in LARI version 8 [+ + +]
Author: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Date:   Thu Dec 26 17:44:49 2024 +0200

    wifi: iwlwifi: support BIOS override for 5G9 in CA also in LARI version 8
    
    commit b1e8102a4048003097c7054cbc00bbda91a5ced7 upstream.
    
    Commit 6b3e87cc0ca5 ("iwlwifi: Add support for LARI_CONFIG_CHANGE_CMD
    cmd v9")
    added a few bits to iwl_lari_config_change_cmd::oem_unii4_allow_bitmap
    if the FW has LARI version >= 9.
    But we also need to send those bits for version 8 if the FW is capable
    of this feature (indicated with capability bits)
    Add the FW capability bit, and set the additional bits in the cmd when
    the version is 8 and the FW capability bit is set.
    
    Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
    Reviewed-by: Johannes Berg <johannes.berg@intel.com>
    Link: https://patch.msgid.link/20241226174257.dc5836f84514.I1e38f94465a36731034c94b9811de10cb6ee5921@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xfrm: fix tunnel mode TX datapath in packet offload mode [+ + +]
Author: Alexandre Cassen <acassen@corp.free.fr>
Date:   Wed Feb 19 12:20:37 2025 +0200

    xfrm: fix tunnel mode TX datapath in packet offload mode
    
    [ Upstream commit 5eddd76ec2fd1988f0a3450fde9730b10dd22992 ]
    
    Packets that match the output xfrm policy are delivered to the netstack.
    In IPsec packet mode for tunnel mode, the HW is responsible for building
    the hard header and outer IP header. In such a situation, the inner
    header may refer to a network that is not directly reachable by the host,
    resulting in a failed neighbor resolution. The packet is then dropped.
    xfrm policy defines the netdevice to use for xmit so we can send packets
    directly to it.
    
    Makes direct xmit exclusive to tunnel mode, since some rules may apply
    in transport mode.
    
    Fixes: f8a70afafc17 ("xfrm: add TX datapath support for IPsec packet offload mode")
    Signed-off-by: Alexandre Cassen <acassen@corp.free.fr>
    Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
xfrm_output: Force software GSO only in tunnel mode [+ + +]
Author: Cosmin Ratiu <cratiu@nvidia.com>
Date:   Wed Feb 19 12:52:48 2025 +0200

    xfrm_output: Force software GSO only in tunnel mode
    
    [ Upstream commit 0aae2867aa6067f73d066bc98385e23c8454a1d7 ]
    
    The cited commit fixed a software GSO bug with VXLAN + IPSec in tunnel
    mode. Unfortunately, it is slightly broader than necessary, as it also
    severely affects performance for Geneve + IPSec transport mode over a
    device capable of both HW GSO and IPSec crypto offload. In this case,
    xfrm_output unnecessarily triggers software GSO instead of letting the
    HW do it. In simple iperf3 tests over Geneve + IPSec transport mode over
    a back-2-back pair of NICs with MTU 1500, the performance was observed
    to be up to 6x worse when doing software GSO compared to leaving it to
    the hardware.
    
    This commit makes xfrm_output only trigger software GSO in crypto
    offload cases for already encapsulated packets in tunnel mode, as not
    doing so would then cause the inner tunnel skb->inner_networking_header
    to be overwritten and break software GSO for that packet later if the
    device turns out to not be capable of HW GSO.
    
    Taking a closer look at the conditions for the original bug, to better
    understand the reasons for this change:
    - vxlan_build_skb -> iptunnel_handle_offloads sets inner_protocol and
      inner network header.
    - then, udp_tunnel_xmit_skb -> ip_tunnel_xmit adds outer transport and
      network headers.
    - later in the xmit path, xfrm_output -> xfrm_outer_mode_output ->
      xfrm4_prepare_output -> xfrm4_tunnel_encap_add overwrites the inner
      network header with the one set in ip_tunnel_xmit before adding the
      second outer header.
    - __dev_queue_xmit -> validate_xmit_skb checks whether GSO segmentation
      needs to happen based on dev features. In the original bug, the hw
      couldn't segment the packets, so skb_gso_segment was invoked.
    - deep in the .gso_segment callback machinery, __skb_udp_tunnel_segment
      tries to use the wrong inner network header, expecting the one set in
      iptunnel_handle_offloads but getting the one set by xfrm instead.
    - a bit later, ipv6_gso_segment accesses the wrong memory based on that
      wrong inner network header.
    
    With the new change, the original bug (or similar ones) cannot happen
    again, as xfrm will now trigger software GSO before applying a tunnel.
    This concern doesn't exist in packet offload mode, when the HW adds
    encapsulation headers. For the non-offloaded packets (crypto in SW),
    software GSO is still done unconditionally in the else branch.
    
    Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com>
    Reviewed-by: Yael Chemla <ychemla@nvidia.com>
    Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
    Fixes: a204aef9fd77 ("xfrm: call xfrm_output_gso when inner_protocol is set in xfrm_output")
    Signed-off-by: Cosmin Ratiu <cratiu@nvidia.com>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
xsk: fix an integer overflow in xp_create_and_assign_umem() [+ + +]
Author: Gavrilov Ilia <Ilia.Gavrilov@infotecs.ru>
Date:   Thu Mar 13 08:50:08 2025 +0000

    xsk: fix an integer overflow in xp_create_and_assign_umem()
    
    commit 559847f56769037e5b2e0474d3dbff985b98083d upstream.
    
    Since the i and pool->chunk_size variables are of type 'u32',
    their product can wrap around and then be cast to 'u64'.
    This can lead to two different XDP buffers pointing to the same
    memory area.
    
    Found by InfoTeCS on behalf of Linux Verification Center
    (linuxtesting.org) with SVACE.
    
    Fixes: 94033cd8e73b ("xsk: Optimize for aligned case")
    Cc: stable@vger.kernel.org
    Signed-off-by: Ilia Gavrilov <Ilia.Gavrilov@infotecs.ru>
    Link: https://patch.msgid.link/20250313085007.3116044-1-Ilia.Gavrilov@infotecs.ru
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>