Changelog in Linux kernel 6.12.88

 
ACPI: CPPC: Fix related_cpus inconsistency during CPU hotplug [+ + +]
Author: Jinjie Ruan <ruanjinjie@huawei.com>
Date:   Fri Apr 17 12:01:12 2026 +0800

    ACPI: CPPC: Fix related_cpus inconsistency during CPU hotplug
    
    commit 75141a770f4f8225d316f6c7e146723a32e9720e upstream.
    
    When concurrently bringing up and down two SMT threads of a physical
    core, many warning call traces occur as below:
    
    The issue timeline is as follows:
    
     1. When the system starts,
        cpufreq: CPU: 220, policy->related_cpus: 220-221, policy->cpus: 220-221
    
     2. Offline CPU 220 and CPU 221.
    
     3. Online CPU 220
        - CPU 221 is now offline, as acpi_get_psd_map() use
          for_each_online_cpu(), so the cpu_data->shared_cpu_map,
          policy->cpus, and related_cpus has only CPU 220.
    
        cpufreq: CPU: 220, policy->related_cpus: 220, policy->cpus: 220
    
     4. Offline CPU 220
    
     5. Online CPU 221, the below call trace occurs:
        - Since CPU 220 and CPU 221 share one policy, and
          policy->related_cpus = 220 after step 3, so CPU 221
          is not in policy->related_cpus but
          per_cpu(cpufreq_cpu_data, cpu221) is not NULL.
    
    After reverting commit 56eb0c0ed345 ("ACPI: CPPC: Fix remaining
    for_each_possible_cpu() to use online CPUs"), the issue disappeared.
    
    The _PSD (P-State Dependency) defines the hardware-level dependency of
    frequency control across CPU cores. Since this relationship is a physical
    attribute of the hardware topology, it remains constant regardless of the
    online or offline status of the CPUs.
    
    Using for_each_online_cpu() in acpi_get_psd_map() is problematic. If a
    CPU is offline, it will be excluded from the shared_cpu_map.
    Consequently, if that CPU is brought online later, the kernel will fail
    to recognize it as part of any shared frequency domain.
    
    Switch back to for_each_possible_cpu() to ensure that all cores defined
    in the ACPI tables are correctly mapped into their respective performance
    domains from the start. This aligns with the logic of policy->related_cpus,
    which must encompass all potentially available cores in the domain to
    prevent logic gaps during CPU hotplug operations.
    
    To resolve the original issue regarding the "nosmt" or "nosmt=force"
    boot parameter, as send_pcc_cmd() function already does if (!desc)
    continue, so reverting that loop back to for_each_possible_cpu() is ok,
    only need to change the match_cpc_ptr NULL case in acpi_get_psd_map() to
    continue as Sean suggested.
    
    How to reproduce, on arm64 machine with SMT support which use acpi cppc
    cpufreq driver:
    
            bash test.sh 220 & bash test.sh 221 &
    
            The test.sh is as below:
                    while true
                            do
                            echo 0 > /sys/devices/system/cpu/cpu${1}/online
                            sleep 0.5
                            cat /sys/devices/system/cpu/cpu${1}/cpufreq/related_cpus
                            echo 1 >  /sys/devices/system/cpu/cpu${1}/online
                            cat /sys/devices/system/cpu/cpu${1}/cpufreq/related_cpus
                    done
    
            CPU: 221 PID: 1119 Comm: cpuhp/221 Kdump: loaded Not tainted 6.6.0debug+ #5
            Hardware name: To be filled by O.E.M. S920X20/BC83AMDA01-7270Z, BIOS 20.39 09/04/2024
            pstate: a1400009 (NzCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--)
            pc : cpufreq_online+0x8ac/0xa90
            lr : cpuhp_cpufreq_online+0x18/0x30
            sp : ffff80008739bce0
            x29: ffff80008739bce0 x28: 0000000000000000 x27: ffff28400ca32200
            x26: 0000000000000000 x25: 0000000000000003 x24: ffffd483503ff000
            x23: ffffd483504051a0 x22: ffffd48350024a00 x21: 00000000000000dd
            x20: 000000000000001d x19: ffff28400ca32000 x18: 0000000000000000
            x17: 0000000000000020 x16: ffffd4834e6a3fc8 x15: 0000000000000020
            x14: 0000000000000008 x13: 0000000000000001 x12: 00000000ffffffff
            x11: 0000000000000040 x10: ffffd48350430728 x9 : ffffd4834f087c78
            x8 : 0000000000000001 x7 : ffff2840092bdf00 x6 : ffffd483504264f0
            x5 : ffffd48350405000 x4 : ffff283f7f95cc60 x3 : 0000000000000000
            x2 : ffff53bc2f94b000 x1 : 00000000000000dd x0 : 0000000000000000
            Call trace:
             cpufreq_online+0x8ac/0xa90
             cpuhp_cpufreq_online+0x18/0x30
             cpuhp_invoke_callback+0x128/0x580
             cpuhp_thread_fun+0x110/0x1b0
             smpboot_thread_fn+0x140/0x190
             kthread+0xec/0x100
             ret_from_fork+0x10/0x20
            ---[ end trace 0000000000000000 ]---
    
    Cc: All applicable <stable@vger.kernel.org>
    Fixes: 56eb0c0ed345 ("ACPI: CPPC: Fix remaining for_each_possible_cpu() to use online CPUs")
    Co-developed-by: Sean Kelley <skelley@nvidia.com>
    Signed-off-by: Sean Kelley <skelley@nvidia.com>
    Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
    [ rjw: Changelog edits ]
    Link: https://patch.msgid.link/20260417040112.3727756-1-ruanjinjie@huawei.com
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ACPI: scan: Use acpi_dev_put() in object add error paths [+ + +]
Author: Guangshuo Li <lgs201920130244@gmail.com>
Date:   Mon Apr 13 21:53:43 2026 +0800

    ACPI: scan: Use acpi_dev_put() in object add error paths
    
    commit 9c0acc169ac71535477caedea8315f7041c5f07c upstream.
    
    After acpi_init_device_object(), the lifetime of struct acpi_device is
    managed by the driver core through reference counting.
    
    Both acpi_add_power_resource() and acpi_add_single_object() call
    acpi_init_device_object() and then invoke acpi_device_add(). If that
    fails, their error paths call the release callback directly instead of
    dropping the device reference through acpi_dev_put().
    
    This bypasses the normal device lifetime rules and frees the object
    without releasing the reference acquired by device_initialize(), which
    may lead to a refcount leak.
    
    The issue was identified by a static analysis tool I developed and
    confirmed by manual review.
    
    Fix both error paths by using acpi_dev_put() and let the release
    callback handle the final cleanup.
    
    Fixes: 781d737c7466 ("ACPI: Drop power resources driver")
    Fixes: 718fb0de8ff88 ("ACPI: fix NULL bug for HID/UID string")
    Cc: All applicable <stable@vger.kernel.org>
    Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com>
    Link: https://patch.msgid.link/20260413135343.2884481-1-lgs201920130244@gmail.com
    Signed-off-by: Rafael J. Wysocki <rjw@rjwysocki.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ACPI: video: Add backlight=native quirk for Dell OptiPlex 7770 AIO [+ + +]
Author: Jan Schär <jan@jschaer.ch>
Date:   Sat Apr 11 11:26:06 2026 +0200

    ACPI: video: Add backlight=native quirk for Dell OptiPlex 7770 AIO
    
    commit ad7997f5a01af6f711fe6b6a2df578b964109d49 upstream.
    
    The Dell OptiPlex 7770 AIO needs the same quirk as the 7760 AIO. The
    backlight can be controlled with the native controller, intel_backlight,
    but not with dell_uart_backlight.
    
    I dumped the DSDT using acpidump, acpixtract and iasl, and confirmed
    that it contains the DELL0501 device. When loading the
    dell_uart_backlight driver with `rmmod dell_uart_backlight`, `modprobe
    dell_uart_backlight dyndbg`, it reports "Firmware version: GL_Re_V18".
    
    Fixes: cd8e468efb4f ("ACPI: video: Add Dell UART backlight controller detection")
    Cc: All applicable <stable@vger.kernel.org>
    Signed-off-by: Jan Schär <jan@jschaer.ch>
    Reviewed-by: Hans de Goede <johannes.goede@oss.qualcomm.com>
    Link: https://patch.msgid.link/20260411092606.47925-1-jan@jschaer.ch
    Signed-off-by: Rafael J. Wysocki <rjw@rjwysocki.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ACPI: video: force native backlight on HP OMEN 16 (8A44) [+ + +]
Author: Shivam Kalra <shivamkalra98@zohomail.in>
Date:   Sun Apr 26 19:38:41 2026 +0530

    ACPI: video: force native backlight on HP OMEN 16 (8A44)
    
    commit 4b506ea5351a1f5937ac632a4a5c35f6f796cc41 upstream.
    
    The HP OMEN 16 Gaming Laptop (board name 8A44) has a mux-less hybrid
    GPU configuration with AMD Rembrandt (Radeon 680M) and NVIDIA GA104
    (RTX 3070 Ti). The internal eDP panel is wired to the AMD iGPU.
    
    When Nouveau loads without GSP firmware, the ACPI video backlight
    device (acpi_video0) gets registered alongside the native AMD
    backlight (amdgpu_bl2). In this state, writes to amdgpu_bl2 update
    the software brightness value but fail to change the physical panel
    brightness.
    
    Force native backlight to prevent acpi_video0 from registering.
    Confirmed that booting with acpi_backlight=native resolves the
    issue.
    
    Cc: All applicable <stable@vger.kernel.org>
    Signed-off-by: Shivam Kalra <shivamkalra98@zohomail.in>
    Link: https://patch.msgid.link/20260426-omen-16-backlight-fix-v1-1-62364f268ea6@zohomail.in
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
af_unix: Reject SIOCATMARK on non-stream sockets [+ + +]
Author: Jiexun Wang <wangjiexun2025@gmail.com>
Date:   Wed May 6 22:08:23 2026 +0800

    af_unix: Reject SIOCATMARK on non-stream sockets
    
    commit d119775f2bad827edc28071c061fdd4a91f889a5 upstream.
    
    SIOCATMARK reports whether the receive queue is at the urgent mark for
    MSG_OOB.
    
    In AF_UNIX, MSG_OOB is supported only for SOCK_STREAM sockets.
    SOCK_DGRAM and SOCK_SEQPACKET reject MSG_OOB in sendmsg() and recvmsg(),
    so they should not support SIOCATMARK either.
    
    Return -EOPNOTSUPP for non-stream sockets before checking the receive
    queue.
    
    Fixes: 314001f0bf92 ("af_unix: Add OOB support")
    Cc: stable@kernel.org
    Reported-by: Yuan Tan <yuantan098@gmail.com>
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Reported-by: Xin Liu <bird@lzu.edu.cn>
    Suggested-by: Kuniyuki Iwashima <kuniyu@google.com>
    Signed-off-by: Jiexun Wang <wangjiexun2025@gmail.com>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
    Link: https://patch.msgid.link/20260506140825.2987635-1-n05ec@lzu.edu.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ALSA: aloop: Fix peer runtime UAF during format-change stop [+ + +]
Author: Cássio Gabriel <cassiogabrielcontato@gmail.com>
Date:   Sat May 9 22:35:15 2026 -0400

    ALSA: aloop: Fix peer runtime UAF during format-change stop
    
    [ Upstream commit e5c33cdc6f402eab8abd36ecf436b22c9d3a8aff ]
    
    loopback_check_format() may stop the capture side when playback starts
    with parameters that no longer match a running capture stream. Commit
    826af7fa62e3 ("ALSA: aloop: Fix racy access at PCM trigger") moved
    the peer lookup under cable->lock, but the actual snd_pcm_stop() still
    runs after dropping that lock.
    
    A concurrent close can clear the capture entry from cable->streams[] and
    detach or free its runtime while the playback trigger path still holds a
    stale peer substream pointer.
    
    Keep a per-cable count of in-flight peer stops before dropping
    cable->lock, and make free_cable() wait for those stops before
    detaching the runtime. This preserves the existing behavior while
    making the peer runtime lifetime explicit.
    
    Reported-by: syzbot+8fa95c41eafbc9d2ff6f@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=8fa95c41eafbc9d2ff6f
    Fixes: 597603d615d2 ("ALSA: introduce the snd-aloop module for the PCM loopback")
    Cc: stable@vger.kernel.org
    Suggested-by: Takashi Iwai <tiwai@suse.com>
    Signed-off-by: Cássio Gabriel <cassiogabrielcontato@gmail.com>
    Link: https://patch.msgid.link/20260424-alsa-aloop-peer-stop-uaf-v2-1-94e68101db8a@gmail.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    [ used scoped_guard(spinlock_irq) instead of guard(spinlock_irq) ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: firewire-tascam: Do not drop unread control events [+ + +]
Author: Cássio Gabriel <cassiogabrielcontato@gmail.com>
Date:   Sun May 3 21:55:52 2026 -0300

    ALSA: firewire-tascam: Do not drop unread control events
    
    commit 0749daa8eb5ab90334aaad3b0671efd7150d43b1 upstream.
    
    tscm_hwdep_read_queue() copies as many queued control events as fit in
    the userspace buffer. When the buffer is smaller than the current
    contiguous queue segment, length is rounded down to the number of bytes
    that can be copied.
    
    However, after copying that shortened length, the code advances pull_pos
    to the original tail_pos, marking the whole contiguous segment as
    consumed. Any events between the copied portion and tail_pos are lost.
    
    Limit tail_pos to the position after the entries actually copied before
    updating pull_pos. When the whole segment fits, this is equivalent to the
    old tail_pos update; when the buffer is smaller, the remaining events
    stay queued for the next read.
    
    Fixes: a8c0d13267a4 ("ALSA: firewire-tascam: notify events of change of state for userspace applications")
    Cc: stable@vger.kernel.org
    Suggested-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
    Signed-off-by: Cássio Gabriel <cassiogabrielcontato@gmail.com>
    Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
    Co-developed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
    Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Link: https://patch.msgid.link/20260503-alsa-firewire-tascam-read-queue-v2-1-126c6efd7642@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: pcm: oss: Fix data race at accessing runtime.oss.trigger [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Fri Apr 24 13:21:55 2026 +0200

    ALSA: pcm: oss: Fix data race at accessing runtime.oss.trigger
    
    commit 901ac0ff15edf9503162e2cf6579bd11a30f1ed4 upstream.
    
    Currently the runtime.oss.trigger field may be accessed concurrently
    without protection, which may lead to the data race.  And, in this
    case, it may lead to more severe problem because it's a bit field; as
    writing the data, it may overwrite other bit fields as well, which
    confuses the operation completely, as spotted by fuzzing.
    
    Fix it by covering runtime.oss.trigger bit fled also with the existing
    params_lock mutex in both snd_pcm_oss_get_trigger() and
    snd_pcm_oss_poll().
    
    Reported-and-tested-by: Jaeyoung Chung <jjy600901@snu.ac.kr>
    Closes: https://lore.kernel.org/20260423145330.210035-1-jjy600901@snu.ac.kr
    Cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/20260424112205.123703-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: usb-audio: Avoid potential endless loop in convert_chmap_v3() [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Mon Apr 27 17:22:15 2026 +0200

    ALSA: usb-audio: Avoid potential endless loop in convert_chmap_v3()
    
    commit 6e7247d8f5fefeceb0bb9cc80a5388a636b219cd upstream.
    
    The convert_chmap_v3() has a loop with its increment size of
    cs_desc->wLength, but we forgot to validate cs_desc->wLength itself,
    which may lead to potential endless loop by a malformed descriptor.
    
    Add a proper size check to abort the loop for plugging the hole.
    
    Fixes: ecfd41166b72 ("ALSA: usb-audio: Validate UAC3 cluster segment descriptors")
    Cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/20260427152224.15276-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: usb-audio: Fix UAC3 cluster descriptor size check [+ + +]
Author: Cássio Gabriel <cassiogabrielcontato@gmail.com>
Date:   Fri Apr 24 18:50:10 2026 -0300

    ALSA: usb-audio: Fix UAC3 cluster descriptor size check
    
    commit 26265dd69da32d88a88d21987853cec899d9e21f upstream.
    
    The UAC3 cluster descriptor length check in
    snd_usb_get_audioformat_uac3()was added to
    make sure that the buffer is large enough for
    a struct uac3_cluster_header_descriptor before the
    returned data is cast and used.
    
    However, the check uses sizeof(cluster), where cluster
    is a pointer, not the size of the descriptor header.
    This makes the validation depend on the architecture
    pointer size and does not match the intended object size.
    
    Check against sizeof(*cluster) instead.
    
    Fixes: fb4e2a6e8f28 ("ALSA: usb-audio: Fix out-of-bounds read in snd_usb_get_audioformat_uac3()")
    Cc: stable@vger.kernel.org
    Signed-off-by: Cássio Gabriel <cassiogabrielcontato@gmail.com>
    Link: https://patch.msgid.link/20260424-alsa-usb-uac3-cluster-size-v1-1-99a5808898a3@gmail.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: usb-audio: midi2: Restart output URBs on resume [+ + +]
Author: Cássio Gabriel <cassiogabrielcontato@gmail.com>
Date:   Mon May 4 11:08:45 2026 -0300

    ALSA: usb-audio: midi2: Restart output URBs on resume
    
    commit f3c57c9c2a49a21d784b7c04a2c883bffc070659 upstream.
    
    USB MIDI 2.0 suspend saves the endpoint running state, clears it and
    kills all endpoint URBs. Resume restores the running state, but only
    restarts input endpoints.
    
    For a running output endpoint, this leaves the endpoint marked running
    with an empty URB queue. Output transfer progress depends on either the
    rawmidi trigger path starting the queue or an output completion refilling
    it. After suspend there is no completion left, and output data that
    remains queued in the raw UMP or legacy rawmidi buffer can stay stalled
    until userspace happens to trigger the stream again.
    
    Restore the saved state with atomic accessors, keep input endpoints
    restarted as before, and restart output endpoints that were running before
    suspend. Clear the saved suspend state after restoring it.
    
    Fixes: ff49d1df79ae ("ALSA: usb-audio: USB MIDI 2.0 UMP support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Cássio Gabriel <cassiogabrielcontato@gmail.com>
    Link: https://patch.msgid.link/20260504-usb-midi2-output-resume-v1-1-c089cc8ad3c6@gmail.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ASoC: amd: yc: Add HP OMEN Gaming Laptop 16-ap0xxx product line in quirk table [+ + +]
Author: Tommaso Soncin <soncintommaso@gmail.com>
Date:   Wed Apr 29 18:08:57 2026 +0200

    ASoC: amd: yc: Add HP OMEN Gaming Laptop 16-ap0xxx product line in quirk table
    
    commit d63c219b7ff39f897da10c160a2edef76320f16c upstream.
    
    Add a DMI quirk for the HP OMEN Gaming Laptop 16-ap0xxx line fixing the
    issue where the internal microphone was not detected.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Tommaso Soncin <soncintommaso@gmail.com>
    Link: https://patch.msgid.link/20260429160858.538986-1-soncintommaso@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: fsl_easrc: fix comment typo [+ + +]
Author: Joseph Salisbury <joseph.salisbury@oracle.com>
Date:   Mon Mar 16 14:05:45 2026 -0400

    ASoC: fsl_easrc: fix comment typo
    
    commit 804dce6c73fdfa44184ee4e8b09abad7f5da408f upstream.
    
    The file contains a spelling error in a source comment (funciton).
    
    Typos in comments reduce readability and make text searches less reliable
    for developers and maintainers.
    
    Replace 'funciton' with 'function' in the affected comment. This is a
    comment-only cleanup and does not change behavior.
    
    Fixes: 955ac624058f ("ASoC: fsl_easrc: Add EASRC ASoC CPU DAI drivers")
    Cc: stable@vger.kernel.org
    Signed-off-by: Joseph Salisbury <joseph.salisbury@oracle.com>
    Link: https://patch.msgid.link/20260316180545.144032-1-joseph.salisbury@oracle.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: Intel: bytcr_wm5102: Fix MCLK leak on platform_clock_control error [+ + +]
Author: Cássio Gabriel <cassiogabrielcontato@gmail.com>
Date:   Mon Apr 27 23:38:41 2026 -0300

    ASoC: Intel: bytcr_wm5102: Fix MCLK leak on platform_clock_control error
    
    commit 13d30682e8dee191ac04e93642f0372a723e8b0c upstream.
    
    If byt_wm5102_prepare_and_enable_pll1() fails in the
    SND_SOC_DAPM_EVENT_ON() path, platform_clock_control() returns after
    clk_prepare_enable(priv->mclk) without disabling the clock again.
    
    This leaks an MCLK enable reference on failed power-up attempts. Add the
    missing clk_disable_unprepare() on the error path, matching the unwind
    used by the other Intel platform_clock_control() implementations.
    
    Fixes: 9a87fc1e0619 ("ASoC: Intel: bytcr_wm5102: Add machine driver for BYT/WM5102")
    Cc: stable@vger.kernel.org
    Signed-off-by: Cássio Gabriel <cassiogabrielcontato@gmail.com>
    Reviewed-by: Cezary Rojewski <cezary.rojewski@intel.com>
    Reviewed-by: Hans de Goede <johannes.goede@oss.qualcomm.com>
    Link: https://patch.msgid.link/20260427-bytcr-wm5102-mclk-leak-v1-1-02b96d08e99c@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: qcom: q6apm-dai: reset queue ptr on trigger stop [+ + +]
Author: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Date:   Thu Apr 2 08:11:10 2026 +0000

    ASoC: qcom: q6apm-dai: reset queue ptr on trigger stop
    
    commit cab45ab95ce7600fc0ff84585c77fd45b7b0d67c upstream.
    
    Reset queue pointer on SNDRV_PCM_TRIGGER_STOP event to be inline
    with resetting appl_ptr. Without this we will end up with a queue_ptr
    out of sync and driver could try to send data that is not ready yet.
    
    Fix this by resetting the queue_ptr.
    
    Fixes: 3d4a4411aa8bb ("ASoC: q6apm-dai: schedule all available frames to avoid dsp under-runs")
    Cc: Stable@vger.kernel.org
    Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
    Link: https://patch.msgid.link/20260402081118.348071-6-srinivas.kandagatla@oss.qualcomm.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: qcom: q6apm-lpass-dai: Fix multiple graph opens [+ + +]
Author: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Date:   Thu Apr 2 08:11:09 2026 +0000

    ASoC: qcom: q6apm-lpass-dai: Fix multiple graph opens
    
    commit 69acc488aaf39d0ddf6c3cf0e47c1873d39919a2 upstream.
    
    As prepare can be called mulitple times, this can result in multiple
    graph opens for playback path.
    
    This will result in a memory leaks, fix this by adding a check before
    opening.
    
    Fixes: be1fae62cf25 ("ASoC: q6apm-lpass-dai: close graph on prepare errors")
    Cc: Stable@vger.kernel.org
    Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
    Link: https://patch.msgid.link/20260402081118.348071-5-srinivas.kandagatla@oss.qualcomm.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: qcom: q6apm: remove child devices when apm is removed [+ + +]
Author: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Date:   Thu Apr 2 08:11:07 2026 +0000

    ASoC: qcom: q6apm: remove child devices when apm is removed
    
    commit 4a0e1bcc98f7281d1605768bd2fe71eacc34f9b7 upstream.
    
    looks like q6apm driver does not remove the child driver q6apm-dai and
    q6apm-bedais when the this driver is removed.
    
    Fix this by depopulating them in remove callback.
    
    With this change when the dsp is shutdown all the devices associated with
    q6apm will now be removed.
    
    Fixes: 5477518b8a0e ("ASoC: qdsp6: audioreach: add q6apm support")
    Cc: Stable@vger.kernel.org
    Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
    Link: https://patch.msgid.link/20260402081118.348071-3-srinivas.kandagatla@oss.qualcomm.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: SOF: Don't allow pointer operations on unconfigured streams [+ + +]
Author: Mark Brown <broonie@kernel.org>
Date:   Thu Mar 26 14:52:41 2026 +0000

    ASoC: SOF: Don't allow pointer operations on unconfigured streams
    
    commit c5b6285aae050ff1c3ea824ca3d88ac4be1e69c8 upstream.
    
    When reporting the pointer for a compressed stream we report the current
    I/O frame position by dividing the position by the number of channels
    multiplied by the number of container bytes. These values default to 0 and
    are only configured as part of setting the stream parameters so this allows
    a divide by zero to be configured. Validate that they are non zero,
    returning an error if not
    
    Fixes: c1a731c71359 ("ASoC: SOF: compress: Add support for computing timestamps")
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260326-asoc-compress-tstamp-params-v1-1-3dc735b3d599@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
block: add pgmap check to biovec_phys_mergeable [+ + +]
Author: Naman Jain <namjain@linux.microsoft.com>
Date:   Fri Apr 10 15:34:13 2026 +0000

    block: add pgmap check to biovec_phys_mergeable
    
    commit 13920e4b7b784b40cf4519ff1f0f3e513476a499 upstream.
    
    biovec_phys_mergeable() is used by the request merge, DMA mapping,
    and integrity merge paths to decide if two physically contiguous
    bvec segments can be coalesced into one. It currently has no check
    for whether the segments belong to different dev_pagemaps.
    
    When zone device memory is registered in multiple chunks, each chunk
    gets its own dev_pagemap. A single bio can legitimately contain
    bvecs from different pgmaps -- iov_iter_extract_bvecs() breaks at
    pgmap boundaries but the outer loop in bio_iov_iter_get_pages()
    continues filling the same bio. If such bvecs are physically
    contiguous, biovec_phys_mergeable() will coalesce them, making it
    impossible to recover the correct pgmap for the merged segment
    via page_pgmap().
    
    Add a zone_device_pages_have_same_pgmap() check to prevent merging
    bvec segments that span different pgmaps.
    
    Fixes: 49580e690755 ("block: add check when merging zone device pages")
    Cc: stable@vger.kernel.org
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Naman Jain <namjain@linux.microsoft.com>
    Link: https://patch.msgid.link/20260410153414.4159050-2-namjain@linux.microsoft.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Bluetooth: btmtk: validate WMT event SKB length before struct access [+ + +]
Author: Tristan Madani <tristan@talencesecurity.com>
Date:   Tue Apr 21 11:14:54 2026 +0000

    Bluetooth: btmtk: validate WMT event SKB length before struct access
    
    commit 634a4408c0615c523cf7531790f4f14a422b9206 upstream.
    
    btmtk_usb_hci_wmt_sync() casts the WMT event response SKB data to
    struct btmtk_hci_wmt_evt (7 bytes) and struct btmtk_hci_wmt_evt_funcc
    (9 bytes) without first checking that the SKB contains enough data.
    A short firmware response causes out-of-bounds reads from SKB tailroom.
    
    Use skb_pull_data() to validate and advance past the base WMT event
    header. For the FUNC_CTRL case, pull the additional status field bytes
    before accessing them.
    
    Fixes: d019930b0049 ("Bluetooth: btmtk: move btusb_mtk_hci_wmt_sync to btmtk.c")
    Cc: stable@vger.kernel.org
    Signed-off-by: Tristan Madani <tristan@talencesecurity.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: hci_event: Fix OOB read and infinite loop in hci_le_create_big_complete_evt [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Fri Apr 10 15:29:52 2026 -0400

    Bluetooth: hci_event: Fix OOB read and infinite loop in hci_le_create_big_complete_evt
    
    commit 5ddb8014261137cadaf83ab5617a588d80a22586 upstream.
    
    hci_le_create_big_complete_evt() iterates over BT_BOUND connections for
    a BIG handle using a while loop, accessing ev->bis_handle[i++] on each
    iteration.  However, there is no check that i stays within ev->num_bis
    before the array access.
    
    When a controller sends a LE_Create_BIG_Complete event with fewer
    bis_handle entries than there are BT_BOUND connections for that BIG,
    or with num_bis=0, the loop reads beyond the valid bis_handle[] flex
    array into adjacent heap memory.  Since the out-of-bounds values
    typically exceed HCI_CONN_HANDLE_MAX (0x0EFF), hci_conn_set_handle()
    rejects them and the connection remains in BT_BOUND state.  The same
    connection is then found again by hci_conn_hash_lookup_big_state(),
    creating an infinite loop with hci_dev_lock held.
    
    Fix this by terminating the BIG if in case not all BIS could be setup
    properly.
    
    Fixes: a0bfde167b50 ("Bluetooth: ISO: Add support for connecting multiple BISes")
    Cc: stable@vger.kernel.org
    Signed-off-by: ZhiTao Ou <hkbinbinbin@gmail.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: L2CAP: Fix deadlock in l2cap_conn_del() [+ + +]
Author: Hyunwoo Kim <imv4bel@gmail.com>
Date:   Mon May 11 15:44:11 2026 +0800

    Bluetooth: L2CAP: Fix deadlock in l2cap_conn_del()
    
    [ Upstream commit 00fdebbbc557a2fc21321ff2eaa22fd70c078608 ]
    
    l2cap_conn_del() calls cancel_delayed_work_sync() for both info_timer
    and id_addr_timer while holding conn->lock. However, the work functions
    l2cap_info_timeout() and l2cap_conn_update_id_addr() both acquire
    conn->lock, creating a potential AB-BA deadlock if the work is already
    executing when l2cap_conn_del() takes the lock.
    
    Move the work cancellations before acquiring conn->lock and use
    disable_delayed_work_sync() to additionally prevent the works from
    being rearmed after cancellation, consistent with the pattern used in
    hci_conn_del().
    
    Fixes: ab4eedb790ca ("Bluetooth: L2CAP: Fix corrupted list in hci_chan_del")
    Signed-off-by: Hyunwoo Kim <imv4bel@gmail.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    [ Minor context conflict resolved. ]
    Signed-off-by: Wenshan Lan <jetlan9@163.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: L2CAP: Fix null-ptr-deref in l2cap_sock_new_connection_cb() [+ + +]
Author: Siwei Zhang <oss@fourdim.xyz>
Date:   Wed Apr 15 16:49:59 2026 -0400

    Bluetooth: L2CAP: Fix null-ptr-deref in l2cap_sock_new_connection_cb()
    
    commit 0a120d96166301d7a95be75b52f843837dbd1219 upstream.
    
    Add the same NULL guard already present in
    l2cap_sock_resume_cb() and l2cap_sock_ready_cb().
    
    Fixes: 80808e431e1e ("Bluetooth: Add l2cap_chan_ops abstraction")
    Cc: stable@kernel.org
    Signed-off-by: Siwei Zhang <oss@fourdim.xyz>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: L2CAP: Fix null-ptr-deref in l2cap_sock_state_change_cb() [+ + +]
Author: Siwei Zhang <oss@fourdim.xyz>
Date:   Wed Apr 15 16:51:36 2026 -0400

    Bluetooth: L2CAP: Fix null-ptr-deref in l2cap_sock_state_change_cb()
    
    commit 2ff1a41a912de8517b4482e946dd951b7d80edbf upstream.
    
    Add the same NULL guard already present in
    l2cap_sock_resume_cb() and l2cap_sock_ready_cb().
    
    Fixes: 89bc500e41fc ("Bluetooth: Add state tracking to struct l2cap_chan")
    Cc: stable@kernel.org
    Signed-off-by: Siwei Zhang <oss@fourdim.xyz>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: virtio_bt: clamp rx length before skb_put [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Tue Apr 21 13:08:44 2026 -0400

    Bluetooth: virtio_bt: clamp rx length before skb_put
    
    commit 21bd244b6de5d2fe1063c23acc93fbdd2b20d112 upstream.
    
    virtbt_rx_work() calls skb_put(skb, len) where len comes directly
    from virtqueue_get_buf() with no validation against the buffer we
    posted to the device. The RX skb is allocated in virtbt_add_inbuf()
    and exposed to virtio as exactly 1000 bytes via sg_init_one().
    
    Checking len against skb_tailroom(skb) is not sufficient because
    alloc_skb() can leave more tailroom than the 1000 bytes actually
    handed to the device. A malicious or buggy backend can therefore
    report used.len between 1001 and skb_tailroom(skb), causing skb_put()
    to include uninitialized kernel heap bytes that were never written by
    the device.
    
    The same path also accepts len == 0, in which case skb_put(skb, 0)
    leaves the skb empty but virtbt_rx_handle() still reads the pkt_type
    byte from skb->data, consuming uninitialized memory.
    
    Define VIRTBT_RX_BUF_SIZE once and reuse it in alloc_skb() and
    sg_init_one(), and gate virtbt_rx_work() on that same constant so
    the bound checked matches the buffer actually exposed to the device.
    Reject used.len == 0 in the same gate so an empty completion can
    no longer reach virtbt_rx_handle().
    
    Use bt_dev_err_ratelimited() because the length value comes from an
    untrusted backend that can otherwise flood the kernel log.
    
    Same class of bug as commit c04db81cd028 ("net/9p: Fix buffer
    overflow in USB transport layer"), which hardened the USB 9p
    transport against unchecked device-reported length.
    
    Fixes: 160fbcf3bfb9 ("Bluetooth: virtio_bt: Use skb_put to set length")
    Cc: stable@vger.kernel.org
    Cc: Soenke Huster <soenke.huster@eknoes.de>
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: virtio_bt: validate rx pkt_type header length [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Tue Apr 21 13:08:45 2026 -0400

    Bluetooth: virtio_bt: validate rx pkt_type header length
    
    commit daf23014e5d975e72ea9c02b5160d3fcf070ea47 upstream.
    
    virtbt_rx_handle() reads the leading pkt_type byte from the RX skb
    and forwards the remainder to hci_recv_frame() for every
    event/ACL/SCO/ISO type, without checking that the remaining payload
    is at least the fixed HCI header for that type.
    
    After the preceding patch bounds the backend-supplied used.len to
    [1, VIRTBT_RX_BUF_SIZE], a one-byte completion still reaches
    hci_recv_frame() with skb->len already pulled to 0. If the byte
    happened to be HCI_ACLDATA_PKT, the ACL-vs-ISO classification
    fast-path in hci_dev_classify_pkt_type() dereferences
    hci_acl_hdr(skb)->handle whenever the HCI device has an active
    CIS_LINK, BIS_LINK, or PA_LINK connection, reading two bytes of
    uninitialized RX-buffer data. The same hazard exists for every
    packet type the driver accepts because none of the switch cases in
    virtbt_rx_handle() check skb->len against the per-type minimum HCI
    header size before handing the frame to the core.
    
    After stripping pkt_type, require skb->len to cover the fixed
    header size for the selected type (event 2, ACL 4, SCO 3, ISO 4)
    before calling hci_recv_frame(); drop ratelimited otherwise.
    Unknown pkt_type values still take the original kfree_skb() default
    path.
    
    Use bt_dev_err_ratelimited() because both the length and pkt_type
    values come from an untrusted backend that can otherwise flood the
    kernel log.
    
    Fixes: 160fbcf3bfb9 ("Bluetooth: virtio_bt: Use skb_put to set length")
    Cc: stable@vger.kernel.org
    Cc: Soenke Huster <soenke.huster@eknoes.de>
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
bpf: Fix use-after-free in arena_vm_close on fork [+ + +]
Author: Alexei Starovoitov <ast@kernel.org>
Date:   Mon Apr 13 12:42:45 2026 -0700

    bpf: Fix use-after-free in arena_vm_close on fork
    
    commit 4fddde2a732de60bb97e3307d4eb69ac5f1d2b74 upstream.
    
    arena_vm_open() only bumps vml->mmap_count but never registers the
    child VMA in arena->vma_list. The vml->vma always points at the
    parent VMA, so after parent munmap the pointer dangles. If the child
    then calls bpf_arena_free_pages(), zap_pages() reads the stale
    vml->vma triggering use-after-free.
    
    Fix this by preventing the arena VMA from being inherited across
    fork with VM_DONTCOPY, and preventing VMA splits via the may_split
    callback.
    
    Also reject mremap with a .mremap callback returning -EINVAL. A
    same-size mremap(MREMAP_FIXED) on the full arena VMA reaches
    copy_vma() through the following path:
    
      check_prep_vma()       - returns 0 early: new_len == old_len
                               skips VM_DONTEXPAND check
      prep_move_vma()        - vm_start == old_addr and
                               vm_end == old_addr + old_len
                               so may_split is never called
      move_vma()
        copy_vma_and_data()
          copy_vma()
            vm_area_dup()    - copies vm_private_data (vml pointer)
            vm_ops->open()   - bumps vml->mmap_count
          vm_ops->mremap()   - returns -EINVAL, rollback unmaps new VMA
    
    The refcount ensures the rollback's arena_vm_close does not free
    the vml shared with the original VMA.
    
    Reported-by: Weiming Shi <bestswngs@gmail.com>
    Reported-by: Xiang Mei <xmei5@asu.edu>
    Fixes: 317460317a02 ("bpf: Introduce bpf_arena.")
    Reviewed-by: Emil Tsalapatis <emil@etsalapatis.com>
    Link: https://lore.kernel.org/r/20260413194245.21449-1-alexei.starovoitov@gmail.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
btrfs: fix double free in create_space_info() error path [+ + +]
Author: Guangshuo Li <lgs201920130244@gmail.com>
Date:   Wed Apr 1 18:56:19 2026 +0800

    btrfs: fix double free in create_space_info() error path
    
    commit 3f487be81292702a59ea9dbc4088b3360a50e837 upstream.
    
    When kobject_init_and_add() fails, the call chain is:
    
    create_space_info()
    -> btrfs_sysfs_add_space_info_type()
    -> kobject_init_and_add()
    -> failure
    -> kobject_put(&space_info->kobj)
    -> space_info_release()
    -> kfree(space_info)
    
    Then control returns to create_space_info():
    
    btrfs_sysfs_add_space_info_type() returns error
    -> goto out_free
    -> kfree(space_info)
    
    This causes a double free.
    
    Keep the direct kfree(space_info) for the earlier failure path, but
    after btrfs_sysfs_add_space_info_type() has called kobject_put(), let
    the kobject release callback handle the cleanup.
    
    Fixes: a11224a016d6d ("btrfs: fix memory leaks in create_space_info() error paths")
    CC: stable@vger.kernel.org # 6.19+
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
cifs: abort open_cached_dir if we don't request leases [+ + +]
Author: Shyam Prasad N <sprasad@microsoft.com>
Date:   Tue Apr 28 21:37:47 2026 +0530

    cifs: abort open_cached_dir if we don't request leases
    
    commit d68ce834f8cf6cb2e77f3331df65166b35466b53 upstream.
    
    It is possible that SMB2_open_init may not set lease context based
    on the requested oplock level. This can happen when leases have been
    temporarily or permanently disabled. When this happens, we will have
    open_cached_dir making an open without lease context and the response
    will anyway be rejected by open_cached_dir (thereby forcing a close to
    discard this open). That's unnecessary two round-trips to the server.
    
    This change adds a check before making the open request to the server
    to make sure that SMB2_open_init did add the expected lease context
    to the open in open_cached_dir.
    
    Cc: <stable@vger.kernel.org>
    Reviewed-by: Bharath SM <bharathsm@microsoft.com>
    Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

cifs: change_conf needs to be called for session setup [+ + +]
Author: Shyam Prasad N <sprasad@microsoft.com>
Date:   Mon Mar 30 16:19:59 2026 +0530

    cifs: change_conf needs to be called for session setup
    
    commit c208a2b95811d6e1ebae65d0d2fc13f73707f8e7 upstream.
    
    Today we skip calling change_conf for negotiates and session setup
    requests. This can be a problem for mchan as the immediate next call
    after session setup could be due to an I/O that is made on the
    mount point. For single channel, this is not a problem as
    there will be several calls after setting up session.
    
    This change enforces calling change_conf when the total credits contain
    enough for reservations for echoes and oplocks. We expect this to happen
    during the last session setup response. This way, echoes and oplocks are
    not disabled before the first request to the server. So if that first
    request is an open, it does not need to disable requesting leases.
    
    Cc: <stable@vger.kernel.org>
    Reviewed-by: Bharath SM <bharathsm@microsoft.com>
    Signed-off-by: Shyam Prasad N <sprasad@microsoft.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
clk: imx: imx8-acm: fix flags for acm clocks [+ + +]
Author: Stefan Eichenberger <stefan.eichenberger@toradex.com>
Date:   Thu Feb 12 16:57:50 2026 +0800

    clk: imx: imx8-acm: fix flags for acm clocks
    
    commit f2c2fc93b4a3efdfcf3805ab74741826d343ff2c upstream.
    
    Currently, the flags for the ACM clocks are set to 0. This configuration
    causes the fsl-sai audio driver to fail when attempting to set the
    sysclk, returning an EINVAL error. The following error messages
    highlight the issue:
    fsl-sai 59090000.sai: ASoC: error at snd_soc_dai_set_sysclk on 59090000.sai: -22
    imx-hdmi sound-hdmi: failed to set cpu sysclk: -22
    
    By setting the flag CLK_SET_RATE_NO_REPARENT, we signal that the ACM
    driver does not support reparenting and instead relies on the clock tree
    as defined in the device tree. This change resolves the issue with the
    fsl-sai audio driver.
    
    CC: stable@vger.kernel.org
    Fixes: d3a0946d7ac9 ("clk: imx: imx8: add audio clock mux driver")
    Signed-off-by: Stefan Eichenberger <stefan.eichenberger@toradex.com>
    Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
    Reviewed-by: Peng Fan <peng.fan@nxp.com>
    Link: https://patch.msgid.link/20260212085750.3253187-1-shengjiu.wang@nxp.com
    Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

clk: microchip: mpfs-ccc: fix out of bounds access during output registration [+ + +]
Author: Conor Dooley <conor.dooley@microchip.com>
Date:   Tue Feb 24 09:35:25 2026 +0000

    clk: microchip: mpfs-ccc: fix out of bounds access during output registration
    
    commit 2f7ae8ab6aa73daaf080d5332110357c29df9c36 upstream.
    
    UBSAN reported an out of bounds access during registration of the last
    two outputs. This out of bounds access occurs because space is only
    allocated in the hws array for two PLLs and the four output dividers
    that each has, but the defined IDs contain two DLLS and their two
    outputs each, which are not supported by the driver. The ID order is
    PLLs -> DLLs -> PLL outputs -> DLL outputs. Decrement the PLL output IDs
    by two while adding them to the array to avoid the problem.
    
    Fixes: d39fb172760e ("clk: microchip: add PolarFire SoC fabric clock support")
    CC: stable@vger.kernel.org
    Reviewed-by: Brian Masney <bmasney@redhat.com>
    Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

clk: rk808: fix OF node reference imbalance [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Tue Apr 7 11:50:27 2026 +0200

    clk: rk808: fix OF node reference imbalance
    
    commit de019f203b0d472c98ead4081ad4f05d92c9b826 upstream.
    
    The driver reuses the OF node of the parent multi-function device but
    fails to take another reference to balance the one dropped by the
    platform bus code when unbinding the MFD and deregistering the child
    devices.
    
    Fix this by using the intended helper for reusing OF nodes.
    
    Fixes: 2dc51ca822e4 ("clk: RK808: Reduce 'struct rk808' usage")
    Cc: stable@vger.kernel.org      # 6.5
    Cc: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Reviewed-by: Brian Masney <bmasney@redhat.com>
    Reviewed-by: Heiko Stuebner <heiko@sntech.de>
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
cpuidle: powerpc: avoid double clear when breaking snooze [+ + +]
Author: Shrikanth Hegde <sshegde@linux.ibm.com>
Date:   Wed Mar 11 11:47:09 2026 +0530

    cpuidle: powerpc: avoid double clear when breaking snooze
    
    commit 64ed1e3e728afb57ba9acb59e69de930ead847d9 upstream.
    
    snooze_loop is done often in any system which has fair bit of
    idle time. So it qualifies for even micro-optimizations.
    
    When breaking the snooze due to timeout, TIF_POLLING_NRFLAG is cleared
    twice. Clearing the bit invokes atomics. Avoid double clear and thereby
    avoid one atomic write.
    
    dev->poll_time_limit indicates whether the loop was broken due to
    timeout. Use that instead of defining a new variable.
    
    Fixes: 7ded429152e8 ("cpuidle: powerpc: no memory barrier after break from idle")
    Cc: stable@vger.kernel.org
    Reviewed-by: Mukesh Kumar Chaurasiya (IBM) <mkchauras@gmail.com>
    Signed-off-by: Shrikanth Hegde <sshegde@linux.ibm.com>
    Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
    Link: https://patch.msgid.link/20260311061709.1230440-1-sshegde@linux.ibm.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
crypto: caam - guard HMAC key hex dumps in hash_digest_key [+ + +]
Author: Thorsten Blum <thorsten.blum@linux.dev>
Date:   Sat May 9 22:34:42 2026 -0400

    crypto: caam - guard HMAC key hex dumps in hash_digest_key
    
    [ Upstream commit 177730a273b18e195263ed953853273e901b5064 ]
    
    Use print_hex_dump_devel() for dumping sensitive HMAC key bytes in
    hash_digest_key() to avoid leaking secrets at runtime when
    CONFIG_DYNAMIC_DEBUG is enabled.
    
    Fixes: 045e36780f11 ("crypto: caam - ahash hmac support")
    Fixes: 3f16f6c9d632 ("crypto: caam/qi2 - add support for ahash algorithms")
    Cc: stable@vger.kernel.org
    Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

crypto: nx - fix bounce buffer leaks in nx842_crypto_{alloc,free}_ctx [+ + +]
Author: Thorsten Blum <thorsten.blum@linux.dev>
Date:   Fri May 8 23:16:39 2026 -0400

    crypto: nx - fix bounce buffer leaks in nx842_crypto_{alloc,free}_ctx
    
    [ Upstream commit adb3faf2db1a66d0f015b44ac909a32dfc7f2f9c ]
    
    The bounce buffers are allocated with __get_free_pages() using
    BOUNCE_BUFFER_ORDER (order 2 = 4 pages), but both the allocation error
    path and nx842_crypto_free_ctx() release the buffers with free_page().
    Use free_pages() with the matching order instead.
    
    Fixes: ed70b479c2c0 ("crypto: nx - add hardware 842 crypto comp alg")
    Cc: stable@vger.kernel.org
    Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dm-thin: fix metadata refcount underflow [+ + +]
Author: Mikulas Patocka <mpatocka@redhat.com>
Date:   Mon Apr 20 19:56:44 2026 +0200

    dm-thin: fix metadata refcount underflow
    
    commit 09a65adc7d8bbfce06392cb6d375468e2728ead5 upstream.
    
    There's a bug in dm-thin in the function rebalance_children. If the
    internal btree node has one entry, the code tries to copy all btree
    entries from the node's child to the node itself and then decrement the
    child's reference count.
    
    If the child node is shared (it has reference count > 1), we won't free
    it, so there would be two pointers to each of the grandchildren nodes.
    But the reference counts of the grandchildren is not increased, thus the
    reference count doesn't match the number of pointers that point to the
    grandchildren. This results in "device mapper: space map common: unable
    to decrement block" errors.
    
    Fix this bug by incrementing reference counts on the grandchildren if the
    btree node is shared.
    
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Fixes: 3241b1d3e0aa ("dm: add persistent data library")
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dm-verity-fec: correctly reject too-small FEC devices [+ + +]
Author: Eric Biggers <ebiggers@kernel.org>
Date:   Thu Feb 5 20:59:20 2026 -0800

    dm-verity-fec: correctly reject too-small FEC devices
    
    commit 2b14e0bb63cc671120e7791658f5c494fc66d072 upstream.
    
    Fix verity_fec_ctr() to reject too-small FEC devices by correctly
    computing the number of parity blocks as 'f->rounds * f->roots'.
    Previously it incorrectly used 'div64_u64(f->rounds * f->roots,
    v->fec->roots << SECTOR_SHIFT)' which is a much smaller value.
    
    Note that the units of 'rounds' are blocks, not bytes.  This matches the
    units of the value returned by dm_bufio_get_device_size(), which are
    also blocks.  A later commit will give 'rounds' a clearer name.
    
    Fixes: a739ff3f543a ("dm verity: add support for forward error correction")
    Cc: stable@vger.kernel.org
    Signed-off-by: Eric Biggers <ebiggers@kernel.org>
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dm-verity-fec: correctly reject too-small hash devices [+ + +]
Author: Eric Biggers <ebiggers@kernel.org>
Date:   Thu Feb 5 20:59:21 2026 -0800

    dm-verity-fec: correctly reject too-small hash devices
    
    commit 4355142245f7e55336dcc005ec03592df4d546f8 upstream.
    
    Fix verity_fec_ctr() to reject too-small hash devices by correctly
    taking hash_start into account.
    
    Note that this is necessary because dm-verity doesn't call
    dm_bufio_set_sector_offset() on the hash device's bufio client
    (v->bufio).  Thus, dm_bufio_get_device_size(v->bufio) returns a size
    relative to 0 rather than hash_start.  An alternative fix would be to
    call dm_bufio_set_sector_offset() on v->bufio, but then all the code
    that reads from the hash device would have to be adjusted accordingly.
    
    Fixes: a739ff3f543a ("dm verity: add support for forward error correction")
    Cc: stable@vger.kernel.org
    Signed-off-by: Eric Biggers <ebiggers@kernel.org>
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dm: don't report warning when doing deferred remove [+ + +]
Author: Mikulas Patocka <mpatocka@redhat.com>
Date:   Mon Mar 16 15:04:15 2026 +0100

    dm: don't report warning when doing deferred remove
    
    commit b7cce3e2cca9cd78418f3c3784474b778e7996fe upstream.
    
    If dm_hash_remove_all was called from dm_deferred_remove, it would write
    a warning "remove_all left %d open device(s)" if there are some other
    devices active.
    
    The warning is bogus, so let's disable it in this case.
    
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Reported-by: Zdenek Kabelac <zkabelac@redhat.com>
    Cc: stable@vger.kernel.org
    Fixes: 2c140a246dc0 ("dm: allow remove to be deferred")
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dm: fix a buffer overflow in ioctl processing [+ + +]
Author: Mikulas Patocka <mpatocka@redhat.com>
Date:   Thu Apr 9 17:49:58 2026 +0200

    dm: fix a buffer overflow in ioctl processing
    
    commit 2fa49cc884f6496a915c35621ba4da35649bf159 upstream.
    
    Tony Asleson (using Claude) found a buffer overflow in dm-ioctl in the
    function retrieve_status:
    
    1. The code in retrieve_status checks that the output string fits into
       the output buffer and writes the output string there
    2. Then, the code aligns the "outptr" variable to the next 8-byte
       boundary:
            outptr = align_ptr(outptr);
    3. The alignment doesn't check overflow, so outptr could point past the
       buffer end
    4. The "for" loop is iterated again, it executes:
            remaining = len - (outptr - outbuf);
    5. If "outptr" points past "outbuf + len", the arithmetics wraps around
       and the variable "remaining" contains unusually high number
    6. With "remaining" being high, the code writes more data past the end of
       the buffer
    
    Luckily, this bug has no security implications because:
    1. Only root can issue device mapper ioctls
    2. The commonly used libraries that communicate with device mapper
       (libdevmapper and devicemapper-rs) use buffer size that is aligned to
       8 bytes - thus, "outptr = align_ptr(outptr)" can't overshoot the input
       buffer and the bug can't happen accidentally
    
    Reported-by: Tony Asleson <tasleson@redhat.com>
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Reviewed-by: Bryn M. Reeves <bmr@redhat.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dma-mapping: add __dma_from_device_group_begin()/end() [+ + +]
Author: Michael S. Tsirkin <mst@redhat.com>
Date:   Tue May 5 01:59:20 2026 -0400

    dma-mapping: add __dma_from_device_group_begin()/end()
    
    [ Upstream commit ca085faabb42c31ee204235facc5a430cb9e78a9 ]
    
    When a structure contains a buffer that DMA writes to alongside fields
    that the CPU writes to, cache line sharing between the DMA buffer and
    CPU-written fields can cause data corruption on non-cache-coherent
    platforms.
    
    Add __dma_from_device_group_begin()/end() annotations to ensure proper
    alignment to prevent this:
    
    struct my_device {
            spinlock_t lock1;
            __dma_from_device_group_begin();
            char dma_buffer1[16];
            char dma_buffer2[16];
            __dma_from_device_group_end();
            spinlock_t lock2;
    };
    
    Message-ID: <19163086d5e4704c316f18f6da06bc1c72968904.1767601130.git.mst@redhat.com>
    Acked-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Reviewed-by: Petr Tesarik <ptesarik@suse.com>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Stable-dep-of: 3023c050af36 ("hwmon: (powerz) Avoid cacheline sharing for DMA buffer")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dma-mapping: drop unneeded includes from dma-mapping.h [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Tue May 5 01:59:19 2026 -0400

    dma-mapping: drop unneeded includes from dma-mapping.h
    
    [ Upstream commit be164349e173a8e71cd76f17c7ed720813b8d69b ]
    
    Back in the day a lot of logic was implemented inline in dma-mapping.h and
    needed various includes.  Move of this has long been moved out of line,
    so we can drop various includes to improve kernel rebuild times.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Stable-dep-of: 3023c050af36 ("hwmon: (powerz) Avoid cacheline sharing for DMA buffer")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
erofs: fix unsigned underflow in z_erofs_lz4_handle_overlap() [+ + +]
Author: Junrui Luo <moonafterrain@outlook.com>
Date:   Fri May 8 23:31:59 2026 -0400

    erofs: fix unsigned underflow in z_erofs_lz4_handle_overlap()
    
    [ Upstream commit 21e161de2dc660b1bb70ef5b156ab8e6e1cca3ab ]
    
    Some crafted images can have illegal (!partial_decoding &&
    m_llen < m_plen) extents, and the LZ4 inplace decompression path
    can be wrongly hit, but it cannot handle (outpages < inpages)
    properly: "outpages - inpages" wraps to a large value and
    the subsequent rq->out[] access reads past the decompressed_pages
    array.
    
    However, such crafted cases can correctly result in a corruption
    report in the normal LZ4 non-inplace path.
    
    Let's add an additional check to fix this for backporting.
    
    Reproducible image (base64-encoded gzipped blob):
    
    H4sIAJGR12kCA+3SPUoDQRgG4MkmkkZk8QRbRFIIi9hbpEjrHQI5ghfwCN5BLCzTGtLbBI+g
    dilSJo1CnIm7GEXFxhT6PDDwfrs73/ywIQD/1ePD4r7Ou6ETsrq4mu7XcWfj++Pb58nJU/9i
    PNtbjhan04/9GtX4qVYc814WDqt6FaX5s+ZwXXeq52lndT6IuVvlblytLMvh4Gzwaf90nsvz
    2DF/21+20T/ldgp5s1jXRaN4t/8izsy/OUB6e/Qa79r+JwAAAAAAAL52vQVuGQAAAP6+my1w
    ywAAAAAAAADwu14ATsEYtgBQAAA=
    
    $ mount -t erofs -o cache_strategy=disabled foo.erofs /mnt
    $ dd if=/mnt/data of=/dev/null bs=4096 count=1
    
    Fixes: 598162d05080 ("erofs: support decompress big pcluster for lz4 backend")
    Reported-by: Yuhao Jiang <danisjiang@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Junrui Luo <moonafterrain@outlook.com>
    Reviewed-by: Gao Xiang <hsiangkao@linux.alibaba.com>
    Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

erofs: move {in,out}pages into struct z_erofs_decompress_req [+ + +]
Author: Gao Xiang <xiang@kernel.org>
Date:   Fri May 8 23:31:57 2026 -0400

    erofs: move {in,out}pages into struct z_erofs_decompress_req
    
    [ Upstream commit 0243cc257ffa6d8cb210a3070b687fb510f113c7 ]
    
    It seems that all compressors need those two values, so just move
    them into the common structure.
    
    `struct z_erofs_lz4_decompress_ctx` can be dropped too.
    
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
    Link: https://lore.kernel.org/r/20250305124007.1810731-1-hsiangkao@linux.alibaba.com
    Stable-dep-of: 21e161de2dc6 ("erofs: fix unsigned underflow in z_erofs_lz4_handle_overlap()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

erofs: tidy up z_erofs_lz4_handle_overlap() [+ + +]
Author: Gao Xiang <xiang@kernel.org>
Date:   Fri May 8 23:31:58 2026 -0400

    erofs: tidy up z_erofs_lz4_handle_overlap()
    
    [ Upstream commit 9ae77198d4815c63fc8ebacc659c71d150d1e51b ]
    
     - Add some useful comments to explain inplace I/Os and decompression;
    
     - Rearrange the code to get rid of one unnecessary goto.
    
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
    Stable-dep-of: 21e161de2dc6 ("erofs: fix unsigned underflow in z_erofs_lz4_handle_overlap()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
eventfs: Hold eventfs_mutex and SRCU when remount walks events [+ + +]
Author: David Carlier <devnexen@gmail.com>
Date:   Sat Apr 18 20:17:37 2026 +0100

    eventfs: Hold eventfs_mutex and SRCU when remount walks events
    
    commit 07004a8c4b572171934390148ee48c4175c77eed upstream.
    
    Commit 340f0c7067a9 ("eventfs: Update all the eventfs_inodes from the
    events descriptor") had eventfs_set_attrs() recurse through ei->children
    on remount.  The walk only holds the rcu_read_lock() taken by
    tracefs_apply_options() over tracefs_inodes, which is wrong:
    
      - list_for_each_entry over ei->children races with the list_del_rcu()
        in eventfs_remove_rec() -- LIST_POISON1 deref, same shape as
        d2603279c7d6.
      - eventfs_inodes are freed via call_srcu(&eventfs_srcu, ...).
        rcu_read_lock() does not extend an SRCU grace period, so ti->private
        can be reclaimed under the walk.
      - The writes to ei->attr race with eventfs_set_attr(), which holds
        eventfs_mutex.
    
    Reproducer:
    
      while :; do mount -o remount,uid=$((RANDOM%1000)) /sys/kernel/tracing; done &
      while :; do
          echo "p:kp submit_bio" > /sys/kernel/tracing/kprobe_events
          echo > /sys/kernel/tracing/kprobe_events
      done
    
    Wrap the events portion of tracefs_apply_options() in
    eventfs_remount_lock()/_unlock() that take eventfs_mutex and
    srcu_read_lock(&eventfs_srcu).  eventfs_set_attrs() doesn't sleep so the
    nested rcu_read_lock() is fine; lockdep_assert_held() pins the contract.
    
    Comment in tracefs_drop_inode() said "RCU cycle" -- it is SRCU.
    
    Fixes: 340f0c7067a9 ("eventfs: Update all the eventfs_inodes from the events descriptor")
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260418191737.10289-1-devnexen@gmail.com
    Signed-off-by: David Carlier <devnexen@gmail.com>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
exit: prevent preemption of oopsing TASK_DEAD task [+ + +]
Author: Jann Horn <jannh@google.com>
Date:   Mon May 11 08:55:11 2026 -0700

    exit: prevent preemption of oopsing TASK_DEAD task
    
    commit c1fa0bb633e4a6b11e83ffc57fa5abe8ebb87891 upstream.
    
    When an already-exiting task oopses, make_task_dead() currently calls
    do_task_dead() with preemption enabled.  That is forbidden:
    do_task_dead() calls __schedule(), which has a comment saying "WARNING:
    must be called with preemption disabled!".
    
    If an oopsing task is preempted in do_task_dead(), between becoming
    TASK_DEAD and entering the scheduler explicitly, bad things happen:
    finish_task_switch() assumes that once the scheduler has switched away
    from a TASK_DEAD task, the task can never run again and its stack is no
    longer needed; but that assumption apparently doesn't hold if the dead
    task was preempted (the SM_PREEMPT case).
    
    This means that the scheduler ends up repeatedly dropping references on
    the dead task's stack, which can lead to use-after-free or double-free
    of the entire task stack; in other words, two tasks can end up running
    on the same stack, resulting in various kinds of memory corruption.
    
    (This does not just affect "recursively oopsing" tasks; it is enough to
    oops once during task exit, for example in a file_operations::release
    handler)
    
    Fixes: 7f80a2fd7db9 ("exit: Stop poorly open coding do_task_dead in make_task_dead")
    Cc: stable@kernel.org
    Signed-off-by: Jann Horn <jannh@google.com>
    Acked-by: Peter Zijlstra <peterz@infradead.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
extcon: ptn5150: handle pending IRQ events during system resume [+ + +]
Author: Xu Yang <xu.yang_2@nxp.com>
Date:   Sat Nov 15 10:59:05 2025 +0800

    extcon: ptn5150: handle pending IRQ events during system resume
    
    commit 4652fefcda3c604c83d1ae28ede94544e2142f06 upstream.
    
    When the system is suspended and ptn5150 wakeup interrupt is disabled,
    any changes on ptn5150 will only be record in interrupt status
    registers and won't fire an IRQ since its trigger type is falling
    edge. So the HW interrupt line will keep at low state and any further
    changes won't trigger IRQ anymore. To fix it, this will schedule a
    work to check whether any IRQ are pending and handle it accordingly.
    
    Fixes: 4ed754de2d66 ("extcon: Add support for ptn5150 extcon driver")
    Cc: stable@vger.kernel.org
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Acked-by: MyungJoo Ham <myungjoo.ham@samsung.com>
    Signed-off-by: Xu Yang <xu.yang_2@nxp.com>
    Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
    Link: https://lore.kernel.org/lkml/20251115025905.1395347-1-xu.yang_2@nxp.com/
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
f2fs: add READ_ONCE() for i_blocks in f2fs_update_inode() [+ + +]
Author: Cen Zhang <zzzccc427@gmail.com>
Date:   Wed Mar 18 15:32:53 2026 +0800

    f2fs: add READ_ONCE() for i_blocks in f2fs_update_inode()
    
    commit 5471834a96fb697874be2ca0b052e74bcf3c23d1 upstream.
    
    f2fs_update_inode() reads inode->i_blocks without holding i_lock to
    serialize it to the on-disk inode, while concurrent truncate or
    allocation paths may modify i_blocks under i_lock.  Since blkcnt_t is
    u64, this risks torn reads on 32-bit architectures.
    
    Following the approach in ext4_inode_blocks_set(), add READ_ONCE() to prevent
    potential compiler-induced tearing.
    
    Fixes: 19f99cee206c ("f2fs: add core inode operations")
    Cc: stable@vger.kernel.org
    Signed-off-by: Cen Zhang <zzzccc427@gmail.com>
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

f2fs: fix fiemap boundary handling when read extent cache is incomplete [+ + +]
Author: Yongpeng Yang <yangyongpeng@xiaomi.com>
Date:   Mon Mar 23 20:06:24 2026 +0800

    f2fs: fix fiemap boundary handling when read extent cache is incomplete
    
    commit 95e159ad3e52f7478cfd22e44ec37c9f334f8993 upstream.
    
    f2fs_fiemap() calls f2fs_map_blocks() to obtain the block mapping a
    file, and then merges contiguous mappings into extents. If the mapping
    is found in the read extent cache, node blocks do not need to be read.
    However, in the following scenario, a contiguous extent can be split
    into two extents:
    
    $ dd if=/dev/zero of=data.128M bs=1M count=128
    $ losetup -f data.128M
    $ mkfs.f2fs /dev/loop0 -f
    $ mount -o mode=lfs /dev/loop0 /mnt/f2fs/
    $ cd /mnt/f2fs/
    $ dd if=/dev/zero of=data.72M bs=1M count=72 && sync
    $ dd if=/dev/zero of=data.4M bs=1M count=4 && sync
    $ dd if=/dev/zero of=data.4M bs=1M count=2 seek=2 conv=notrunc && sync
    $ echo 3 > /proc/sys/vm/drop_caches
    $ dd if=/dev/zero of=data.4M bs=1M count=2 seek=0 conv=notrunc && sync
    $ dd if=/dev/zero of=data.4M bs=1M count=2 seek=0 conv=notrunc && sync
    $ f2fs_io fiemap 0 1024 data.4M
    Fiemap: offset = 0 len = 1024
    logical addr.    physical addr.   length           flags
    0       0000000000000000 0000000006400000 0000000000200000 00001000
    1       0000000000200000 0000000006600000 0000000000200000 00001001
    
    Although the physical addresses of the ranges 0~2MB and 2M~4MB are
    contiguous, the mapping for the 2M~4MB range is not present in memory.
    When the physical addresses for the 0~2MB range are updated, no merge
    happens because the adjacent mapping is missing from the in-memory
    cache. As a result, fiemap reports two separate extents instead of a
    single contiguous one.
    
    The root cause is that the read extent cache does not guarantee that all
    blocks of an extent are present in memory. Therefore, when the extent
    length returned by f2fs_map_blocks_cached() is smaller than maxblocks,
    the remaining mappings are retrieved via f2fs_get_dnode_of_data() to
    ensure correct fiemap extent boundary handling.
    
    Cc: stable@kernel.org
    Fixes: cd8fc5226bef ("f2fs: remove the create argument to f2fs_map_blocks")
    Signed-off-by: Yongpeng Yang <yangyongpeng@xiaomi.com>
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

f2fs: fix incorrect multidevice info in trace_f2fs_map_blocks() [+ + +]
Author: Yongpeng Yang <yangyongpeng@xiaomi.com>
Date:   Mon Mar 23 20:06:22 2026 +0800

    f2fs: fix incorrect multidevice info in trace_f2fs_map_blocks()
    
    commit eb2ca3ca983551a80e16a4a25df5a4ce59df8484 upstream.
    
    When f2fs_map_blocks()->f2fs_map_blocks_cached() hits the read extent
    cache, map->m_multidev_dio is not updated, which leads to incorrect
    multidevice information being reported by trace_f2fs_map_blocks().
    
    This patch updates map->m_multidev_dio in f2fs_map_blocks_cached() when
    the read extent cache is hit.
    
    Cc: stable@kernel.org
    Fixes: 0094e98bd147 ("f2fs: factor a f2fs_map_blocks_cached helper")
    Signed-off-by: Yongpeng Yang <yangyongpeng@xiaomi.com>
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

f2fs: fix node_cnt race between extent node destroy and writeback [+ + +]
Author: Yongpeng Yang <yangyongpeng@xiaomi.com>
Date:   Fri Apr 3 22:40:17 2026 +0800

    f2fs: fix node_cnt race between extent node destroy and writeback
    
    commit ed78aeebef05212ef7dca93bd931e4eff67c113f upstream.
    
    f2fs_destroy_extent_node() does not set FI_NO_EXTENT before clearing
    extent nodes. When called from f2fs_drop_inode() with I_SYNC set,
    concurrent kworker writeback can insert new extent nodes into the same
    extent tree, racing with the destroy and triggering f2fs_bug_on() in
    __destroy_extent_node(). The scenario is as follows:
    
    drop inode                            writeback
     - iput
      - f2fs_drop_inode  // I_SYNC set
       - f2fs_destroy_extent_node
        - __destroy_extent_node
         - while (node_cnt) {
            write_lock(&et->lock)
            __free_extent_tree
            write_unlock(&et->lock)
                                           - __writeback_single_inode
                                            - f2fs_outplace_write_data
                                             - f2fs_update_read_extent_cache
                                              - __update_extent_tree_range
                                               // FI_NO_EXTENT not set,
                                               // insert new extent node
           } // node_cnt == 0, exit while
         - f2fs_bug_on(node_cnt)  // node_cnt > 0
    
    Additionally, __update_extent_tree_range() only checks FI_NO_EXTENT for
    EX_READ type, leaving EX_BLOCK_AGE updates completely unprotected.
    
    This patch set FI_NO_EXTENT under et->lock in __destroy_extent_node(),
    consistent with other callers (__update_extent_tree_range and
    __drop_extent_tree) and check FI_NO_EXTENT for both EX_READ and
    EX_BLOCK_AGE tree.
    
    Fixes: 3fc5d5a182f6 ("f2fs: fix to shrink read extent node in batches")
    Cc: stable@vger.kernel.org
    Signed-off-by: Yongpeng Yang <yangyongpeng@xiaomi.com>
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

f2fs: fix uninitialized kobject put in f2fs_init_sysfs() [+ + +]
Author: Guangshuo Li <lgs201920130244@gmail.com>
Date:   Fri Apr 10 20:47:26 2026 +0800

    f2fs: fix uninitialized kobject put in f2fs_init_sysfs()
    
    commit b635f2ecdb5ad34f9c967cabb704d6bed9382fd0 upstream.
    
    In f2fs_init_sysfs(), all failure paths after kset_register() jump to
    put_kobject, which unconditionally releases both f2fs_tune and
    f2fs_feat.
    
    If kobject_init_and_add(&f2fs_feat, ...) fails, f2fs_tune has not been
    initialized yet, so calling kobject_put(&f2fs_tune) is invalid.
    
    Fix this by splitting the unwind path so each error path only releases
    objects that were successfully initialized.
    
    Fixes: a907f3a68ee26ba4 ("f2fs: add a sysfs entry to reclaim POSIX_FADV_NOREUSE pages")
    Cc: stable@vger.kernel.org
    Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com>
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fanotify: fix false positive on permission events [+ + +]
Author: Miklos Szeredi <mszeredi@redhat.com>
Date:   Fri Apr 10 16:49:47 2026 +0200

    fanotify: fix false positive on permission events
    
    commit 7746e3bd4cc19b5092e00d32d676e329bfcb6900 upstream.
    
    fsnotify_get_mark_safe() may return false for a mark on an unrelated group,
    which results in bypassing the permission check.
    
    Fix by skipping over detached marks that are not in the current group.
    
    CC: stable@vger.kernel.org
    Fixes: abc77577a669 ("fsnotify: Provide framework for dropping SRCU lock in ->handle_event")
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Link: https://patch.msgid.link/20260410144950.156160-1-mszeredi@redhat.com
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fbdev: defio: Disconnect deferred I/O from the lifetime of struct fb_info [+ + +]
Author: Thomas Zimmermann <tzimmermann@suse.de>
Date:   Mon May 4 20:14:53 2026 -0400

    fbdev: defio: Disconnect deferred I/O from the lifetime of struct fb_info
    
    [ Upstream commit 9ded47ad003f09a94b6a710b5c47f4aa5ceb7429 ]
    
    Hold state of deferred I/O in struct fb_deferred_io_state. Allocate an
    instance as part of initializing deferred I/O and remove it only after
    the final mapping has been closed. If the fb_info and the contained
    deferred I/O meanwhile goes away, clear struct fb_deferred_io_state.info
    to invalidate the mapping. Any access will then result in a SIGBUS
    signal.
    
    Fixes a long-standing problem, where a device hot-unplug happens while
    user space still has an active mapping of the graphics memory. The hot-
    unplug frees the instance of struct fb_info. Accessing the memory will
    operate on undefined state.
    
    Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
    Fixes: 60b59beafba8 ("fbdev: mm: Deferred IO support")
    Cc: Helge Deller <deller@gmx.de>
    Cc: linux-fbdev@vger.kernel.org
    Cc: dri-devel@lists.freedesktop.org
    Cc: stable@vger.kernel.org # v2.6.22+
    Signed-off-by: Helge Deller <deller@gmx.de>
    [ replaced `kzalloc_obj()` with `kzalloc(sizeof(*fbdefio_state), GFP_KERNEL)` ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

fbdev: udlfb: add vm_ops to dlfb_ops_mmap to prevent use-after-free [+ + +]
Author: Rajat Gupta <rajgupt@qti.qualcomm.com>
Date:   Sun May 3 20:51:10 2026 -0700

    fbdev: udlfb: add vm_ops to dlfb_ops_mmap to prevent use-after-free
    
    commit 8de779dc40d35d39fa07387b6f921eb11df0f511 upstream.
    
    dlfb_ops_mmap() uses remap_pfn_range() to map vmalloc framebuffer pages
    to userspace but sets no vm_ops on the VMA. This means the kernel cannot
    track active mmaps. When dlfb_realloc_framebuffer() replaces the backing
    buffer via FBIOPUT_VSCREENINFO, existing mmap PTEs are not invalidated.
    On USB disconnect, dlfb_ops_destroy() calls vfree() on the old pages
    while userspace PTEs still reference them, resulting in a use-after-free:
    the process retains read/write access to freed kernel pages.
    
    Add vm_operations_struct with open/close callbacks that maintain an
    atomic mmap_count on struct dlfb_data. In dlfb_realloc_framebuffer(),
    check mmap_count and return -EBUSY if the buffer is currently mapped,
    preventing buffer replacement while userspace holds stale PTEs.
    
    Tested with PoC using dummy_hcd + raw_gadget USB device emulation.
    
    Signed-off-by: Rajat Gupta <rajgupt@qti.qualcomm.com>
    Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
flow_dissector: do not dissect PPPoE PFC frames [+ + +]
Author: Qingfang Deng <qingfang.deng@linux.dev>
Date:   Wed Apr 15 10:24:50 2026 +0800

    flow_dissector: do not dissect PPPoE PFC frames
    
    [ Upstream commit d6c19b31a3c1d519fabdcf0aa239e6b6109b9473 ]
    
    RFC 2516 Section 7 states that Protocol Field Compression (PFC) is NOT
    RECOMMENDED for PPPoE. In practice, pppd does not support negotiating
    PFC for PPPoE sessions, and the flow dissector driver has assumed an
    uncompressed frame until the blamed commit.
    
    During the review process of that commit [1], support for PFC is
    suggested. However, having a compressed (1-byte) protocol field means
    the subsequent PPP payload is shifted by one byte, causing 4-byte
    misalignment for the network header and an unaligned access exception
    on some architectures.
    
    The exception can be reproduced by sending a PPPoE PFC frame to an
    ethernet interface of a MIPS board, with RPS enabled, even if no PPPoE
    session is active on that interface:
    
    $ 0   : 00000000 80c40000 00000000 85144817
    $ 4   : 00000008 00000100 80a75758 81dc9bb8
    $ 8   : 00000010 8087ae2c 0000003d 00000000
    $12   : 000000e0 00000039 00000000 00000000
    $16   : 85043240 80a75758 81dc9bb8 00006488
    $20   : 0000002f 00000007 85144810 80a70000
    $24   : 81d1bda0 00000000
    $28   : 81dc8000 81dc9aa8 00000000 805ead08
    Hi    : 00009d51
    Lo    : 2163358a
    epc   : 805e91f0 __skb_flow_dissect+0x1b0/0x1b50
    ra    : 805ead08 __skb_get_hash_net+0x74/0x12c
    Status: 11000403        KERNEL EXL IE
    Cause : 40800010 (ExcCode 04)
    BadVA : 85144817
    PrId  : 0001992f (MIPS 1004Kc)
    Call Trace:
    [<805e91f0>] __skb_flow_dissect+0x1b0/0x1b50
    [<805ead08>] __skb_get_hash_net+0x74/0x12c
    [<805ef330>] get_rps_cpu+0x1b8/0x3fc
    [<805fca70>] netif_receive_skb_list_internal+0x324/0x364
    [<805fd120>] napi_complete_done+0x68/0x2a4
    [<8058de5c>] mtk_napi_rx+0x228/0xfec
    [<805fd398>] __napi_poll+0x3c/0x1c4
    [<805fd754>] napi_threaded_poll_loop+0x234/0x29c
    [<805fd848>] napi_threaded_poll+0x8c/0xb0
    [<80053544>] kthread+0x104/0x12c
    [<80002bd8>] ret_from_kernel_thread+0x14/0x1c
    
    Code: 02d51821  1060045b  00000000 <8c640000> 3084000f  2c820005  144001a2  00042080  8e220000
    
    To reduce the attack surface and maintain performance, do not process
    PPPoE PFC frames.
    
    [1] https://lore.kernel.org/r/20220630231016.GA392@debian.home
    Fixes: 46126db9c861 ("flow_dissector: Add PPPoE dissectors")
    Signed-off-by: Qingfang Deng <qingfang.deng@linux.dev>
    Link: https://patch.msgid.link/20260415022456.141758-1-qingfang.deng@linux.dev
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fs: prepare for adding LSM blob to backing_file [+ + +]
Author: Amir Goldstein <amir73il@gmail.com>
Date:   Mon May 4 20:16:14 2026 -0400

    fs: prepare for adding LSM blob to backing_file
    
    [ Upstream commit 880bd496ec72a6dcb00cb70c430ef752ba242ae7 ]
    
    In preparation to adding LSM blob to backing_file struct, factor out
    helpers init_backing_file() and backing_file_free().
    
    Cc: stable@vger.kernel.org
    Cc: linux-fsdevel@vger.kernel.org
    Cc: linux-unionfs@vger.kernel.org
    Cc: linux-erofs@lists.ozlabs.org
    Signed-off-by: Amir Goldstein <amir73il@gmail.com>
    Reviewed-by: Serge Hallyn <serge@hallyn.com>
    [PM: use the term "LSM blob", fix comment style to match file]
    Signed-off-by: Paul Moore <paul@paul-moore.com>
    [ Used kfree() instead of kmem_cache_free(bfilp_cachep, ff) ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
gpio: of: clear OF_POPULATED on hog nodes in remove path [+ + +]
Author: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Date:   Mon Mar 9 13:42:37 2026 +0100

    gpio: of: clear OF_POPULATED on hog nodes in remove path
    
    commit bbee90e750262bfb406d66dc65c46d616d2b6673 upstream.
    
    The previously set OF_POPULATED flag should be cleared on the hog nodes
    when removing the chip.
    
    Cc: stable@vger.kernel.org
    Fixes: 63636d956c455 ("gpio: of: Add DT overlay support for GPIO hogs")
    Acked-by: Linus Walleij <linusw@kernel.org>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://patch.msgid.link/20260309-gpio-hog-fwnode-v2-1-4e61f3dbf06a@oss.qualcomm.com
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
gtp: disable BH before calling udp_tunnel_xmit_skb() [+ + +]
Author: David Carlier <devnexen@gmail.com>
Date:   Sat May 9 10:21:55 2026 -0400

    gtp: disable BH before calling udp_tunnel_xmit_skb()
    
    [ Upstream commit 5638504a2aa9e1b9d72af9060df1a160cce2d379 ]
    
    gtp_genl_send_echo_req() runs as a generic netlink doit handler in
    process context with BH not disabled. It calls udp_tunnel_xmit_skb(),
    which eventually invokes iptunnel_xmit() — that uses __this_cpu_inc/dec
    on softnet_data.xmit.recursion to track the tunnel xmit recursion level.
    
    Without local_bh_disable(), the task may migrate between
    dev_xmit_recursion_inc() and dev_xmit_recursion_dec(), breaking the
    per-CPU counter pairing. The result is stale or negative recursion
    levels that can later produce false-positive
    SKB_DROP_REASON_RECURSION_LIMIT drops on either CPU.
    
    The other udp_tunnel_xmit_skb() call sites in gtp.c are unaffected:
    the data path runs under ndo_start_xmit and the echo response handlers
    run from the UDP encap rx softirq, both with BH already disabled.
    
    Fix it by disabling BH around the udp_tunnel_xmit_skb() call, mirroring
    commit 2cd7e6971fc2 ("sctp: disable BH before calling
    udp_tunnel_xmit_skb()").
    
    Fixes: 6f1a9140ecda ("net: add xmit recursion limit to tunnel xmit functions")
    Cc: stable@vger.kernel.org
    Signed-off-by: David Carlier <devnexen@gmail.com>
    Link: https://patch.msgid.link/20260417055408.4667-1-devnexen@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ Context ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hfsplus: fix held lock freed on hfsplus_fill_super() [+ + +]
Author: Zilin Guan <zilin@seu.edu.cn>
Date:   Fri May 8 20:40:35 2026 -0400

    hfsplus: fix held lock freed on hfsplus_fill_super()
    
    [ Upstream commit 90c500e4fd83fa33c09bc7ee23b6d9cc487ac733 ]
    
    hfsplus_fill_super() calls hfs_find_init() to initialize a search
    structure, which acquires tree->tree_lock. If the subsequent call to
    hfsplus_cat_build_key() fails, the function jumps to the out_put_root
    error label without releasing the lock. The later cleanup path then
    frees the tree data structure with the lock still held, triggering a
    held lock freed warning.
    
    Fix this by adding the missing hfs_find_exit(&fd) call before jumping
    to the out_put_root error label. This ensures that tree->tree_lock is
    properly released on the error path.
    
    The bug was originally detected on v6.13-rc1 using an experimental
    static analysis tool we are developing, and we have verified that the
    issue persists in the latest mainline kernel. The tool is specifically
    designed to detect memory management issues. It is currently under active
    development and not yet publicly available.
    
    We confirmed the bug by runtime testing under QEMU with x86_64 defconfig,
    lockdep enabled, and CONFIG_HFSPLUS_FS=y. To trigger the error path, we
    used GDB to dynamically shrink the max_unistr_len parameter to 1 before
    hfsplus_asc2uni() is called. This forces hfsplus_asc2uni() to naturally
    return -ENAMETOOLONG, which propagates to hfsplus_cat_build_key() and
    exercises the faulty error path. The following warning was observed
    during mount:
    
            =========================
            WARNING: held lock freed!
            7.0.0-rc3-00016-gb4f0dd314b39 #4 Not tainted
            -------------------------
            mount/174 is freeing memory ffff888103f92000-ffff888103f92fff, with a lock still held there!
            ffff888103f920b0 (&tree->tree_lock){+.+.}-{4:4}, at: hfsplus_find_init+0x154/0x1e0
            2 locks held by mount/174:
            #0: ffff888103f960e0 (&type->s_umount_key#42/1){+.+.}-{4:4}, at: alloc_super.constprop.0+0x167/0xa40
            #1: ffff888103f920b0 (&tree->tree_lock){+.+.}-{4:4}, at: hfsplus_find_init+0x154/0x1e0
    
            stack backtrace:
            CPU: 2 UID: 0 PID: 174 Comm: mount Not tainted 7.0.0-rc3-00016-gb4f0dd314b39 #4 PREEMPT(lazy)
            Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.15.0-1 04/01/2014
            Call Trace:
            <TASK>
            dump_stack_lvl+0x82/0xd0
            debug_check_no_locks_freed+0x13a/0x180
            kfree+0x16b/0x510
            ? hfsplus_fill_super+0xcb4/0x18a0
            hfsplus_fill_super+0xcb4/0x18a0
            ? __pfx_hfsplus_fill_super+0x10/0x10
            ? srso_return_thunk+0x5/0x5f
            ? bdev_open+0x65f/0xc30
            ? srso_return_thunk+0x5/0x5f
            ? pointer+0x4ce/0xbf0
            ? trace_contention_end+0x11c/0x150
            ? __pfx_pointer+0x10/0x10
            ? srso_return_thunk+0x5/0x5f
            ? bdev_open+0x79b/0xc30
            ? srso_return_thunk+0x5/0x5f
            ? srso_return_thunk+0x5/0x5f
            ? vsnprintf+0x6da/0x1270
            ? srso_return_thunk+0x5/0x5f
            ? __mutex_unlock_slowpath+0x157/0x740
            ? __pfx_vsnprintf+0x10/0x10
            ? srso_return_thunk+0x5/0x5f
            ? srso_return_thunk+0x5/0x5f
            ? mark_held_locks+0x49/0x80
            ? srso_return_thunk+0x5/0x5f
            ? srso_return_thunk+0x5/0x5f
            ? irqentry_exit+0x17b/0x5e0
            ? trace_irq_disable.constprop.0+0x116/0x150
            ? __pfx_hfsplus_fill_super+0x10/0x10
            ? __pfx_hfsplus_fill_super+0x10/0x10
            get_tree_bdev_flags+0x302/0x580
            ? __pfx_get_tree_bdev_flags+0x10/0x10
            ? vfs_parse_fs_qstr+0x129/0x1a0
            ? __pfx_vfs_parse_fs_qstr+0x3/0x10
            vfs_get_tree+0x89/0x320
            fc_mount+0x10/0x1d0
            path_mount+0x5c5/0x21c0
            ? __pfx_path_mount+0x10/0x10
            ? trace_irq_enable.constprop.0+0x116/0x150
            ? trace_irq_enable.constprop.0+0x116/0x150
            ? srso_return_thunk+0x5/0x5f
            ? srso_return_thunk+0x5/0x5f
            ? kmem_cache_free+0x307/0x540
            ? user_path_at+0x51/0x60
            ? __x64_sys_mount+0x212/0x280
            ? srso_return_thunk+0x5/0x5f
            __x64_sys_mount+0x212/0x280
            ? __pfx___x64_sys_mount+0x10/0x10
            ? srso_return_thunk+0x5/0x5f
            ? trace_irq_enable.constprop.0+0x116/0x150
            ? srso_return_thunk+0x5/0x5f
            do_syscall_64+0x111/0x680
            entry_SYSCALL_64_after_hwframe+0x77/0x7f
            RIP: 0033:0x7ffacad55eae
            Code: 48 8b 0d 85 1f 0f 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 49 89 ca b8 a5 00 00 8
            RSP: 002b:00007fff1ab55718 EFLAGS: 00000246 ORIG_RAX: 00000000000000a5
            RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007ffacad55eae
            RDX: 000055740c64e5b0 RSI: 000055740c64e630 RDI: 000055740c651ab0
            RBP: 000055740c64e380 R08: 0000000000000000 R09: 0000000000000001
            R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
            R13: 000055740c64e5b0 R14: 000055740c651ab0 R15: 000055740c64e380
            </TASK>
    
    After applying this patch, the warning no longer appears.
    
    Fixes: 89ac9b4d3d1a ("hfsplus: fix longname handling")
    CC: stable@vger.kernel.org
    Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
    Reviewed-by: Viacheslav Dubeyko <slava@dubeyko.com>
    Tested-by: Viacheslav Dubeyko <slava@dubeyko.com>
    Signed-off-by: Viacheslav Dubeyko <slava@dubeyko.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

hfsplus: fix uninit-value by validating catalog record size [+ + +]
Author: Deepanshu Kartikey <kartikey406@gmail.com>
Date:   Fri May 8 20:40:34 2026 -0400

    hfsplus: fix uninit-value by validating catalog record size
    
    [ Upstream commit b6b592275aeff184aa82fcf6abccd833fb71b393 ]
    
    Syzbot reported a KMSAN uninit-value issue in hfsplus_strcasecmp(). The
    root cause is that hfs_brec_read() doesn't validate that the on-disk
    record size matches the expected size for the record type being read.
    
    When mounting a corrupted filesystem, hfs_brec_read() may read less data
    than expected. For example, when reading a catalog thread record, the
    debug output showed:
    
      HFSPLUS_BREC_READ: rec_len=520, fd->entrylength=26
      HFSPLUS_BREC_READ: WARNING - entrylength (26) < rec_len (520) - PARTIAL READ!
    
    hfs_brec_read() only validates that entrylength is not greater than the
    buffer size, but doesn't check if it's less than expected. It successfully
    reads 26 bytes into a 520-byte structure and returns success, leaving 494
    bytes uninitialized.
    
    This uninitialized data in tmp.thread.nodeName then gets copied by
    hfsplus_cat_build_key_uni() and used by hfsplus_strcasecmp(), triggering
    the KMSAN warning when the uninitialized bytes are used as array indices
    in case_fold().
    
    Fix by introducing hfsplus_brec_read_cat() wrapper that:
    1. Calls hfs_brec_read() to read the data
    2. Validates the record size based on the type field:
       - Fixed size for folder and file records
       - Variable size for thread records (depends on string length)
    3. Returns -EIO if size doesn't match expected
    
    For thread records, check against HFSPLUS_MIN_THREAD_SZ before reading
    nodeName.length to avoid reading uninitialized data at call sites that
    don't zero-initialize the entry structure.
    
    Also initialize the tmp variable in hfsplus_find_cat() as defensive
    programming to ensure no uninitialized data even if validation is
    bypassed.
    
    Reported-by: syzbot+d80abb5b890d39261e72@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=d80abb5b890d39261e72
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Tested-by: syzbot+d80abb5b890d39261e72@syzkaller.appspotmail.com
    Reviewed-by: Viacheslav Dubeyko <slava@dubeyko.com>
    Tested-by: Viacheslav Dubeyko <slava@dubeyko.com>
    Suggested-by: Charalampos Mitrodimas <charmitro@posteo.net>
    Link: https://lore.kernel.org/all/20260120051114.1281285-1-kartikey406@gmail.com/ [v1]
    Link: https://lore.kernel.org/all/20260121063109.1830263-1-kartikey406@gmail.com/ [v2]
    Link: https://lore.kernel.org/all/20260212014233.2422046-1-kartikey406@gmail.com/ [v3]
    Link: https://lore.kernel.org/all/20260214002100.436125-1-kartikey406@gmail.com/T/ [v4]
    Link: https://lore.kernel.org/all/20260221061626.15853-1-kartikey406@gmail.com/T/ [v5]
    Signed-off-by: Deepanshu Kartikey <kartikey406@gmail.com>
    Signed-off-by: Viacheslav Dubeyko <slava@dubeyko.com>
    Link: https://lore.kernel.org/r/20260307010302.41547-1-kartikey406@gmail.com
    Signed-off-by: Viacheslav Dubeyko <slava@dubeyko.com>
    Stable-dep-of: 90c500e4fd83 ("hfsplus: fix held lock freed on hfsplus_fill_super()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hv_sock: fix ARM64 support [+ + +]
Author: Hamza Mahfooz <hamzamahfooz@linux.microsoft.com>
Date:   Tue Apr 28 08:53:39 2026 -0400

    hv_sock: fix ARM64 support
    
    commit b31681206e3f527970a7c7ed807fbf6a028fc25b upstream.
    
    VMBUS ring buffers must be page aligned. Therefore, the current value of
    24K presents a challenge on ARM64 kernels (with 64K pages). So, use
    VMBUS_RING_SIZE() to ensure they are always aligned and large enough to
    hold all of the relevant data.
    
    Cc: stable@vger.kernel.org
    Fixes: 77ffe33363c0 ("hv_sock: use HV_HYP_PAGE_SIZE for Hyper-V communication")
    Tested-by: Dexuan Cui <decui@microsoft.com>
    Reviewed-by: Dexuan Cui <decui@microsoft.com>
    Signed-off-by: Hamza Mahfooz <hamzamahfooz@linux.microsoft.com>
    Acked-by: Stefano Garzarella <sgarzare@redhat.com>
    Link: https://patch.msgid.link/20260428125339.13963-1-hamzamahfooz@linux.microsoft.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hwmon: (corsair-psu) Close HID device on probe errors [+ + +]
Author: Myeonghun Pak <mhun512@gmail.com>
Date:   Fri Apr 24 22:50:51 2026 +0900

    hwmon: (corsair-psu) Close HID device on probe errors
    
    commit 174606451fbb17db506ebaacdd5e203e57773d5f upstream.
    
    corsairpsu_probe() opens the HID device before sending the device init
    and firmware-info commands. If either command fails, the error path jumps
    directly to fail_and_stop and skips hid_hw_close().
    
    Use the existing fail_and_close label for those post-open failures so the
    open count and low-level close callback are balanced before hid_hw_stop().
    
    Fixes: d115b51e0e56 ("hwmon: add Corsair PSU HID controller driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Myeonghun Pak <mhun512@gmail.com>
    Reviewed-by: Wilken Gottwalt <wilken.gottwalt@posteo.net>
    Link: https://lore.kernel.org/r/20260424135107.13720-1-mhun512@gmail.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

hwmon: (ltc2992) Clamp threshold writes to hardware range [+ + +]
Author: Sanman Pradhan <psanman@juniper.net>
Date:   Thu Apr 16 21:59:30 2026 +0000

    hwmon: (ltc2992) Clamp threshold writes to hardware range
    
    commit d6cc7c99bf1f73eda7d565d224d791d16239bb41 upstream.
    
    ltc2992_set_voltage(), ltc2992_set_current(), and ltc2992_set_power()
    do not validate the user-supplied value before converting it to a
    register value. This can result in:
    
    1. Negative input values wrapping to large positive register values.
       For power, the negative long is implicitly cast to u64 in
       mul_u64_u32_div(), producing an incorrect value. For voltage and
       current, the negative converted value wraps when passed to
       ltc2992_write_reg() as a u32.
    
    2. Intermediate arithmetic exceeding the range representable in u64 on
       64-bit platforms. In ltc2992_set_voltage(), (u64)val * 1000 can
       exceed U64_MAX when val is a large positive long. In
       ltc2992_set_current(), (u64)val * r_sense_uohm can overflow
       similarly. In ltc2992_set_power(), the computed value may not fit
       in u64.
    
    3. Register values exceeding the hardware field width. Voltage and
       current threshold registers are 12-bit (stored left-justified in
       16 bits), and power threshold registers are 24-bit. Without
       clamping, bits above the field width are truncated in
       ltc2992_write_reg().
    
    Fix by clamping negative values to zero, clamping positive values to
    the rounded hardware-representable maximum (the value returned by the
    read path for a full-scale register) to prevent intermediate overflow,
    and clamping the converted register value to the hardware field width
    before writing. The existing conversion formula and rounding behavior
    are preserved.
    
    In the power write path, cancel the factor of 1000 from both the
    numerator (r_sense_uohm * 1000) and the denominator
    (VADC_UV_LSB * IADC_NANOV_LSB) to also eliminate a u32 overflow of
    r_sense_uohm * 1000 when r_sense_uohm exceeds about 4.29 ohms.
    
    Fixes: b0bd407e94b03 ("hwmon: (ltc2992) Add support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Sanman Pradhan <psanman@juniper.net>
    Link: https://lore.kernel.org/r/20260416215904.101969-2-sanman.pradhan@hpe.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

hwmon: (ltc2992) Fix u32 overflow in power read path [+ + +]
Author: Sanman Pradhan <psanman@juniper.net>
Date:   Thu Apr 16 21:59:40 2026 +0000

    hwmon: (ltc2992) Fix u32 overflow in power read path
    
    commit 2da0c1fd01dbd6b22844e8676585153dfc660cbe upstream.
    
    ltc2992_get_power() computes the divisor for mul_u64_u32_div() as
    r_sense_uohm * 1000. This multiplication overflows u32 when
    r_sense_uohm exceeds about 4.29 ohms (4294967 micro-ohms), producing
    a truncated divisor and an incorrect power reading.
    
    Cancel the factor of 1000 from both the numerator
    (VADC_UV_LSB * IADC_NANOV_LSB = 312500000) and the divisor
    (r_sense_uohm * 1000), giving (VADC_UV_LSB / 1000) * IADC_NANOV_LSB
    = 312500 as the numerator and plain r_sense_uohm as the divisor.
    The cancellation is exact because LTC2992_VADC_UV_LSB (25000) is
    divisible by 1000.
    
    This is the read-path counterpart of the write-path fix applied in
    the preceding patch.
    
    Fixes: b0bd407e94b03 ("hwmon: (ltc2992) Add support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Sanman Pradhan <psanman@juniper.net>
    Link: https://lore.kernel.org/r/20260416215904.101969-3-sanman.pradhan@hpe.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

hwmon: (powerz) Avoid cacheline sharing for DMA buffer [+ + +]
Author: Thomas Weißschuh <linux@weissschuh.net>
Date:   Tue May 5 01:59:21 2026 -0400

    hwmon: (powerz) Avoid cacheline sharing for DMA buffer
    
    [ Upstream commit 3023c050af3600bf451153335dea5e073c9a3088 ]
    
    Depending on the architecture the transfer buffer may share a cacheline
    with the following mutex. As the buffer may be used for DMA, that is
    problematic.
    
    Use the high-level DMA helpers to make sure that cacheline sharing can
    not happen.
    
    Also drop the comment, as the helpers are documentation enough.
    
    https://sashiko.dev/#/message/20260408175814.934BFC19421%40smtp.kernel.org
    
    Fixes: 4381a36abdf1c ("hwmon: add POWER-Z driver")
    Cc: stable@vger.kernel.org # ca085faabb42: dma-mapping: add __dma_from_device_group_begin()/end()
    Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
    Link: https://lore.kernel.org/r/20260408-powerz-cacheline-alias-v1-1-1254891be0dd@weissschuh.net
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ibmveth: Disable GSO for packets with small MSS [+ + +]
Author: Mingming Cao <mmc@linux.ibm.com>
Date:   Fri Apr 24 09:29:17 2026 -0700

    ibmveth: Disable GSO for packets with small MSS
    
    commit cc427d24ac6442ffdeafd157a63c7c5b73ed4de4 upstream.
    
    Some physical adapters on Power systems do not support segmentation
    offload when the MSS is less than 224 bytes. Attempting to send such
    packets causes the adapter to freeze, stopping all traffic until
    manually reset.
    
    Implement ndo_features_check to disable GSO for packets with small MSS
    values. The network stack will perform software segmentation instead.
    
    The 224-byte minimum matches ibmvnic
    commit <f10b09ef687f> ("ibmvnic: Enforce stronger sanity checks
    on GSO packets")
    which uses the same physical adapters in SEA configurations.
    
    The issue occurs specifically when the hardware attempts to perform
    segmentation (gso_segs > 1) with a small MSS. Single-segment GSO packets
    (gso_segs == 1) do not trigger the problematic LSO code path and are
    transmitted normally without segmentation.
    
    Add an ndo_features_check callback to disable GSO when MSS < 224 bytes.
    Also call vlan_features_check() to ensure proper handling of VLAN packets,
    particularly QinQ (802.1ad) configurations where the hardware parser may
    not support certain offload features.
    
    Validated using iptables to force small MSS values. Without the fix,
    the adapter freezes. With the fix, packets are segmented in software
    and transmission succeeds. Comprehensive regression testing completedd
    (MSS tests, performance, stability).
    
    Fixes: 8641dd85799f ("ibmveth: Add support for TSO")
    Cc: stable@vger.kernel.org
    Reviewed-by: Brian King <bjking1@linux.ibm.com>
    Tested-by: Shaik Abdulla <shaik.abdulla1@ibm.com>
    Tested-by: Naveed Ahmed <naveedaus@in.ibm.com>
    Signed-off-by: Mingming Cao <mmc@linux.ibm.com>
    Link: https://patch.msgid.link/20260424162917.65725-1-mmc@linux.ibm.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ice: fix double free in ice_sf_eth_activate() error path [+ + +]
Author: Guangshuo Li <lgs201920130244@gmail.com>
Date:   Thu Apr 16 17:53:27 2026 -0700

    ice: fix double free in ice_sf_eth_activate() error path
    
    commit 9aab1c3d7299285e2569cbc0ed5892d631a241b2 upstream.
    
    When auxiliary_device_add() fails, ice_sf_eth_activate() jumps to
    aux_dev_uninit and calls auxiliary_device_uninit(&sf_dev->adev).
    
    The device release callback ice_sf_dev_release() frees sf_dev, but
    the current error path falls through to sf_dev_free and calls
    kfree(sf_dev) again, causing a double free.
    
    Keep kfree(sf_dev) for the auxiliary_device_init() failure path, but
    avoid falling through to sf_dev_free after auxiliary_device_uninit().
    
    Fixes: 13acc5c4cdbe ("ice: subfunction activation and base devlink ops")
    Cc: stable@vger.kernel.org
    Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
    Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
    Link: https://patch.msgid.link/20260416-iwl-net-submission-2026-04-14-v2-3-686c33c9828d@intel.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
iommu/amd: serialize sequence allocation under concurrent TLB invalidations [+ + +]
Author: Ankit Soni <Ankit.Soni@amd.com>
Date:   Thu Jan 22 15:30:38 2026 +0000

    iommu/amd: serialize sequence allocation under concurrent TLB invalidations
    
    commit 9e249c48412828e807afddc21527eb734dc9bd3d upstream.
    
    With concurrent TLB invalidations, completion wait randomly gets timed out
    because cmd_sem_val was incremented outside the IOMMU spinlock, allowing
    CMD_COMPL_WAIT commands to be queued out of sequence and breaking the
    ordering assumption in wait_on_sem().
    Move the cmd_sem_val increment under iommu->lock so completion sequence
    allocation is serialized with command queuing.
    And remove the unnecessary return.
    
    Fixes: d2a0cac10597 ("iommu/amd: move wait_on_sem() out of spinlock")
    
    Tested-by: Srikanth Aithal <sraithal@amd.com>
    Reported-by: Srikanth Aithal <sraithal@amd.com>
    Signed-off-by: Ankit Soni <Ankit.Soni@amd.com>
    Reviewed-by: Vasant Hegde <vasant.hegde@amd.com>
    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
    [Salvatore Bonaccorso: Backport to v6.12.y where f32fe7cb0198
    ("iommu/amd: Add support to remap/unmap IOMMU buffers for kdump") is not
    present]
    Signed-off-by: Salvatore Bonaccorso <carnil@debian.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

iommu/amd: Use atomic64_inc_return() in iommu.c [+ + +]
Author: Uros Bizjak <ubizjak@gmail.com>
Date:   Mon Oct 7 10:43:31 2024 +0200

    iommu/amd: Use atomic64_inc_return() in iommu.c
    
    commit 5ce73c524f5fb5abd7b1bfed0115474b4fb437b4 upstream.
    
    Use atomic64_inc_return(&ref) instead of atomic64_add_return(1, &ref)
    to use optimized implementation and ease register pressure around
    the primitive for targets that implement optimized variant.
    
    Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
    Cc: Joerg Roedel <joro@8bytes.org>
    Cc: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
    Cc: Will Deacon <will@kernel.org>
    Cc: Robin Murphy <robin.murphy@arm.com>
    Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
    Link: https://lore.kernel.org/r/20241007084356.47799-1-ubizjak@gmail.com
    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    Signed-off-by: Salvatore Bonaccorso <carnil@debian.org>
    Stable-dep-of: 9e249c48412828e807afddc21527eb734dc9bd3d ("iommu/amd: serialize sequence allocation under concurrent TLB invalidations")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iommu/arm-smmu-v3: Add a missing dma_wmb() for hitless STE update [+ + +]
Author: Nicolin Chen <nicolinc@nvidia.com>
Date:   Tue Mar 17 00:59:16 2026 -0700

    iommu/arm-smmu-v3: Add a missing dma_wmb() for hitless STE update
    
    commit 6fabce53f6b9c2419012a9103e1a46d40888cefa upstream.
    
    When writing a new (previously invalid) valid IOPTE to a page table, then
    installing the page table into an STE hitlesslessly (e.g. in S2TTB field),
    there is a window before an STE invalidation, where the page-table may be
    accessed by SMMU but the new IOPTE is still siting in the CPU cache.
    
    This could occur when we allocate an iommu_domain and immediately install
    it hitlessly, while there would be no dma_wmb() for the page table memory
    prior to the earliest point of HW reading the STE.
    
    Fix it by adding a dma_wmb() prior to updating the STE.
    
    Fixes: 56e1a4cc2588 ("iommu/arm-smmu-v3: Add unit tests for arm_smmu_write_entry")
    Cc: stable@vger.kernel.org
    Reported-by: Will Deacon <will@kernel.org>
    Closes: https://lore.kernel.org/linux-iommu/aXdlnLLFUBwjT0V5@willie-the-truck/
    Suggested-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Nicolin Chen <nicolinc@nvidia.com>
    Signed-off-by: Will Deacon <will@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
iommufd: Fix a race with concurrent allocation and unmap [+ + +]
Author: Sina Hassani <sina@openai.com>
Date:   Fri Apr 10 11:32:44 2026 -0700

    iommufd: Fix a race with concurrent allocation and unmap
    
    commit 8602018b1f17fbdaa5e5d79f4c8603ad20640c12 upstream.
    
    iopt_unmap_iova_range() releases the lock on iova_rwsem inside the loop
    body when getting to the more expensive unmap operations. This is fine on
    its own, except the loop condition is based on the first area that matches
    the unmap address range. If a concurrent call to map picks an area that
    was unmapped in previous iterations, the loop mistakenly tries to unmap
    it.
    
    This is reproducible by having one userspace thread map buffers and pass
    them to another thread that unmaps them. The problem manifests as EBUSY
    errors with single page mappings.
    
    Fix this by advancing the start pointer after unmapping an area. This
    ensures each iteration only examines the IOVA range that remains mapped,
    which is guaranteed not to have overlaps.
    
    Cc: stable@vger.kernel.org
    Fixes: 51fe6141f0f6 ("iommufd: Data structure to provide IOVA to PFN mapping")
    Link: https://patch.msgid.link/r/CAAJpGJSR4r_ds1JOjmkqHtsBPyxu8GntoeW08Sk5RNQPmgi+tg@mail.gmail.com
    Signed-off-by: Sina Hassani <sina@openai.com>
    Reviewed-by: Kevin Tian <kevin.tian@intel.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ip6_gre: Use cached t->net in ip6erspan_changelink(). [+ + +]
Author: Maoyi Xie <maoyixie.tju@gmail.com>
Date:   Thu Apr 30 18:33:18 2026 +0800

    ip6_gre: Use cached t->net in ip6erspan_changelink().
    
    commit 1d324c2f43f70c965f25c58cc3611c779adbe47e upstream.
    
    After commit 5e72ce3e3980 ("net: ipv6: Use link netns in newlink() of
    rtnl_link_ops"), ip6erspan_newlink() correctly resolves the per-netns
    ip6gre hash via link_net. ip6erspan_changelink() was not converted in
    that series and still uses dev_net(dev), which diverges from the
    device's creation netns after IFLA_NET_NS_FD migration.
    
    This re-inserts the tunnel into the wrong per-netns hash. The
    original netns keeps a stale entry. When that netns is later
    destroyed, ip6gre_exit_rtnl_net() walks the stale entry, producing a
    slab-use-after-free reported by KASAN, followed by a kernel BUG at
    net/core/dev.c (LIST_POISON1) in unregister_netdevice_many_notify().
    
    Reachable from an unprivileged user namespace (unshare --user
    --map-root-user --net).
    
    ip6gre_changelink() earlier in the same file already uses the cached
    t->net; only ip6erspan_changelink() has the wrong shape.
    
    Fixes: 2d665034f239 ("net: ip6_gre: Fix ip6erspan hlen calculation")
    Cc: stable@vger.kernel.org # v5.15+
    Signed-off-by: Maoyi Xie <maoyi.xie@ntu.edu.sg>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
    Link: https://patch.msgid.link/20260430103318.3206018-1-maoyi.xie@ntu.edu.sg
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ipmi: Add limits to event and receive message requests [+ + +]
Author: Corey Minyard <corey@minyard.net>
Date:   Mon Apr 20 12:39:51 2026 -0500

    ipmi: Add limits to event and receive message requests
    
    commit c4cca236968683eb0d59abfb12d5c7e4d8514227 upstream.
    
    The driver would just fetch events and receive messages until the
    BMC said it was done.  To avoid issues with BMCs that never say they are
    done, add a limit of 10 fetches at a time.
    
    In addition, an si interface has an attn state it can return from the
    hardware which is supposed to cause a flag fetch to see if the driver
    needs to fetch events or message or a few other things.  If the attn
    bit gets stuck, it's a similar problem.  So allow messages in between
    flag fetches so the driver itself doesn't get stuck.
    
    This is a more general fix than the previous fix for the specific bad
    BMC, but should fix the more general issue of a BMC that won't stop
    saying it has data.
    
    This has been there from the beginning of the driver.  It's not a bug
    per-se, but it is accounting for bugs in BMCs.
    
    Reported-by: Matt Fleming <mfleming@cloudflare.com>
    Closes: https://lore.kernel.org/lkml/20260415115930.3428942-1-matt@readmodwrite.com/
    Fixes: <1da177e4c3f4> ("Linux-2.6.12-rc2")
    Cc: stable@vger.kernel.org
    Signed-off-by: Corey Minyard <corey@minyard.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ipmi: Check event message buffer response for bad data [+ + +]
Author: Corey Minyard <corey@minyard.net>
Date:   Mon Apr 20 12:50:09 2026 -0500

    ipmi: Check event message buffer response for bad data
    
    commit 36920f30e78e69df01f9691c470b6f3ba8aebf98 upstream.
    
    The event message buffer response data size got checked later when
    processing, but check it right after the response comes back.  It
    appears some BMCs may return an empty message instead of an error
    when fetching events.
    
    There are apparently some new BMCs that make this error, so we need to
    compensate.
    
    Reported-by: Matt Fleming <mfleming@cloudflare.com>
    Closes: https://lore.kernel.org/lkml/20260415115930.3428942-1-matt@readmodwrite.com/
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Corey Minyard <corey@minyard.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: ipmi:si: Return state to normal if message allocation fails [+ + +]
Author: Corey Minyard <corey@minyard.net>
Date:   Mon Apr 20 13:02:18 2026 -0500

    ipmi:si: Return state to normal if message allocation fails
    
    commit 09dd798270ff582d7309f285d4aaf5dbebae01cb upstream.
    
    There were places where nothing would get started if a message
    allocation failed, so the driver needs to return to normal state.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Corey Minyard <corey@minyard.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ipv6: xfrm6: release dst on error in xfrm6_rcv_encap() [+ + +]
Author: Yilin Zhu <zylzyl2333@gmail.com>
Date:   Sun Apr 12 13:07:54 2026 +0800

    ipv6: xfrm6: release dst on error in xfrm6_rcv_encap()
    
    commit bc0fcb9823cd0894934cf968b525c575833d7078 upstream.
    
    xfrm6_rcv_encap() performs an IPv6 route lookup when the skb does not
    already have a dst attached. ip6_route_input_lookup() returns a
    referenced dst entry even when the lookup resolves to an error route.
    
    If dst->error is set, xfrm6_rcv_encap() drops the skb without attaching
    the dst to the skb and without releasing the reference returned by the
    lookup. Repeated packets hitting this path therefore leak dst entries.
    
    Release the dst before jumping to the drop path.
    
    Fixes: 0146dca70b87 ("xfrm: add support for UDPv6 encapsulation of ESP")
    Cc: stable@kernel.org
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Co-developed-by: Yuan Tan <yuantan098@gmail.com>
    Signed-off-by: Yuan Tan <yuantan098@gmail.com>
    Suggested-by: Xin Liu <bird@lzu.edu.cn>
    Tested-by: Ruide Cao <caoruide123@gmail.com>
    Signed-off-by: Yilin Zhu <zylzyl2333@gmail.com>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
isofs: validate block number from NFS file handle in isofs_export_iget [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Sun Apr 19 17:21:55 2026 -0400

    isofs: validate block number from NFS file handle in isofs_export_iget
    
    commit 24376458138387fb251e782e624c7776e9826796 upstream.
    
    isofs_fh_to_dentry() and isofs_fh_to_parent() pass an attacker-
    controlled block number (ifid->block or ifid->parent_block) from
    the NFS file handle to isofs_export_iget(), which only rejects
    block == 0 before calling isofs_iget() and ultimately sb_bread().
    A crafted file handle with fh_len sufficient to pass the check
    added by commit 0405d4b63d08 ("isofs: Prevent the use of too small
    fid") can still drive the server to read any in-range block on the
    backing device as if it were an iso_directory_record.  That earlier
    fix was assigned CVE-2025-37780.
    
    sb_bread() on an out-of-range block returns NULL cleanly via the
    EIO path, so there is no memory-safety violation.  For in-range
    reads of adjacent-partition data on the same block device, the
    unrelated bytes end up in iso_inode_info fields that reach the NFS
    client as dentry metadata.  The deployment surface (isofs exported
    over NFS from loop-mounted images) is narrow and requires an
    authenticated NFS peer, but the malformed-file-handle class is
    reportable as hardening next to the existing CVE-2025-37780 fix.
    
    Reject block >= ISOFS_SB(sb)->s_nzones in isofs_export_iget() so
    the check covers both isofs_fh_to_dentry() and isofs_fh_to_parent()
    call sites with a single line.
    
    Fixes: 0405d4b63d08 ("isofs: Prevent the use of too small fid")
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Link: https://patch.msgid.link/20260419212155.2169382-3-michael.bommarito@gmail.com
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

isofs: validate Rock Ridge CE continuation extent against volume size [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Sun Apr 19 17:21:54 2026 -0400

    isofs: validate Rock Ridge CE continuation extent against volume size
    
    commit a36d990f591320e9dd379ab30063ebfe91d47e1f upstream.
    
    rock_continue() reads rs->cont_extent verbatim from the Rock Ridge CE
    record and passes it to sb_bread() without checking that the block
    number is within the mounted ISO 9660 volume.  commit e595447e177b
    ("[PATCH] rock.c: handle corrupted directories") added cont_offset
    and cont_size rejection for the CE continuation but did not validate
    the extent block number itself.  commit f54e18f1b831 ("isofs: Fix
    infinite looping over CE entries") later capped the CE chain length
    at RR_MAX_CE_ENTRIES = 32 but again left the block number unchecked.
    
    With a crafted ISO mounted via udisks2 (desktop optical auto-mount)
    or via CAP_SYS_ADMIN mount, rs->cont_extent can therefore point at
    an out-of-range block or at blocks belonging to an adjacent
    filesystem on the same block device.  sb_bread() on an out-of-range
    block returns NULL cleanly via the block layer EIO path, so there
    is no memory-safety violation.  For in-range reads of adjacent-
    filesystem data, the CE buffer is parsed as Rock Ridge records and
    only the text of SL sub-records reaches userspace through
    readlink(), which makes the info-leak channel narrow and difficult
    to exploit; still, rejecting the malformed CE outright matches the
    rejection shape already present in the same function for
    cont_offset and cont_size.
    
    Add an ISOFS_SB(sb)->s_nzones bounds check to rock_continue() next
    to the existing offset/size rejection, printing the same
    corrupted-directory-entry notice.
    
    Fixes: f54e18f1b831 ("isofs: Fix infinite looping over CE entries")
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Link: https://patch.msgid.link/20260419212155.2169382-2-michael.bommarito@gmail.com
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ksmbd: rewrite stop_sessions() with restartable iteration [+ + +]
Author: DaeMyung Kang <charsyam@gmail.com>
Date:   Sat Apr 25 18:38:28 2026 +0900

    ksmbd: rewrite stop_sessions() with restartable iteration
    
    commit c444139cb747bf6de1922b39900fdf02281490f4 upstream.
    
    stop_sessions() walks conn_list with hash_for_each() and, for every
    entry, drops conn_list_lock across the transport ->shutdown() call
    before re-acquiring the read lock to continue the loop.  The hash
    walk relies on cross-iteration state (the current bucket and the
    hlist position), which is not preserved across unlock/relock: if
    another thread performs a list mutation during the unlocked window,
    the ongoing iteration becomes unreliable and can re-visit
    connections that have already been handled or skip connections that
    have not.  The outer `if (!hash_empty(conn_list)) goto again;` retry
    masks the symptom in the common case but does not address the
    unsafe iteration itself.
    
    Reframe the loop so it never relies on iterator state across
    unlock/relock.  Under conn_list_lock held for read, pick the first
    connection whose ->shutdown() has not yet been issued by this path,
    pin it by taking an extra reference, record that fact on the
    connection and mark it EXITING while still inside the locked walk,
    then drop the lock.  Then call ->shutdown() outside the lock, drop
    the pin (freeing the connection if the handler already released its
    reference), and restart from the top.
    
    Use a new per-connection flag, conn->stop_called, as the "shutdown
    issued from stop_sessions()" marker rather than reusing the status
    state.  ksmbd_conn_set_exiting() is also invoked by
    ksmbd_sessions_deregister() on sibling channels of a multichannel
    session without issuing a transport shutdown, so treating
    KSMBD_SESS_EXITING as "already handled here" would skip connections
    that still need shutdown() to wake their handler out of recv(),
    leaving the outer retry waiting indefinitely for the hash to drain.
    stop_sessions() is serialised by init_lock in
    ksmbd_conn_transport_destroy(), so writing stop_called under the
    read lock has no other writer.
    
    Set EXITING inside the locked walk so the selection, the stop_called
    marker, and the status transition all happen together, and guard
    against regressing a connection that has already advanced to
    KSMBD_SESS_RELEASING on its own (for example, if the handler exited
    its receive loop for an unrelated reason between teardown steps).
    
    When the pin drop is the last put, release the transport and pair
    ida_destroy(&target->async_ida) with the ida_init() done in
    ksmbd_conn_alloc(), so stop_sessions() retiring a connection on its
    own does not leak the xarray backing of the embedded async_ida.
    
    The outer retry with msleep() is kept to wait for handler threads to
    reach ksmbd_conn_free() and drain the hash.
    
    Observed with an instrumented build that logs one line per visit and
    widens the unlocked window before ->shutdown() by 200 ms, under
    five concurrent cifs mounts (nosharesock, one connection each):
    
      * Current code: the same connection address is revisited many
        times during a single stop_sessions() call and ->shutdown() is
        invoked well beyond the number of live connections before the
        hash finally drains.
    
      * Rewritten code: each live connection produces exactly one
        ->shutdown() call; the function returns as soon as the hash is
        empty.
    
    Functional teardown via `ksmbd.control --shutdown` with the same
    five mounts completes cleanly on the rewritten path.
    
    Performance is observably unchanged.  Tearing down N concurrent
    nosharesock cifs connections with `ksmbd.control --shutdown` +
    `rmmod ksmbd` takes essentially the same wall time before and after
    the rewrite:
    
        N        before        after
        10       4.93s         5.34s
        30       7.34s         7.03s
        50       7.31s         7.01s     (3-run avg: 7.04s vs 7.25s)
       100       6.98s         6.78s
       200       6.77s         6.89s
    
    and the number of ->shutdown() calls equals the number of live
    connections on both paths when the race is not widened.  The
    teardown is dominated by the msleep(100)-based outer retry waiting
    for handler threads to run ksmbd_conn_free(), not by the iteration
    itself; the restartable loop's worst-case O(N^2) visit cost is in
    the microseconds even at N=200 and sits far below the msleep(100)
    granularity.
    
    Applied alone on top of ksmbd-for-next-next, this patch does not
    introduce a new leak site.  Under the same reproducer (10x
    concurrent-holders + ss -K + ksmbd.control --shutdown + rmmod), the
    tree still shows the pre-existing per-connection transport leak
    count that arises when the last refcount drop lands in one of
    ksmbd_conn_r_count_dec(), __free_opinfo() or session_fd_check() -
    all of which end with a bare kfree() today.  kmemleak backtraces
    for the unreferenced objects point into the TCP accept path
    (sk_clone -> inet_csk_clone_lock, sock_alloc_inode) and none
    involve stop_sessions().  Plugging those bare-kfree sites is the
    responsibility of the follow-up patch.
    
    Fixes: e2f34481b24d ("cifsd: add server-side procedures for SMB3")
    Cc: stable@vger.kernel.org
    Signed-off-by: DaeMyung Kang <charsyam@gmail.com>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ksmbd: validate inherited ACE SID length [+ + +]
Author: Shota Zaizen <s@zaizen.me>
Date:   Tue Apr 28 19:02:55 2026 +0900

    ksmbd: validate inherited ACE SID length
    
    commit 996454bc0da84d5a1dedb1a7861823087e01a7ae upstream.
    
    smb_inherit_dacl() walks the parent directory DACL loaded from the
    security descriptor xattr. It verifies that each ACE contains the fixed
    SID header before using it, but does not verify that the variable-length
    SID described by sid.num_subauth is fully contained in the ACE.
    
    A malformed inheritable ACE can advertise more subauthorities than are
    present in the ACE. compare_sids() may then read past the ACE.
    smb_set_ace() also clamps the copied destination SID, but used the
    unchecked source SID count to compute the inherited ACE size. That could
    advance the temporary inherited ACE buffer pointer and nt_size accounting
    past the allocated buffer.
    
    Fix this by validating the parent ACE SID count and SID length before
    using the SID during inheritance. Compute the inherited ACE size from the
    copied SID so the size matches the bounded destination SID. Reject the
    inherited DACL if size accumulation would overflow smb_acl.size or the
    security descriptor allocation size.
    
    Fixes: e2f34481b24d ("cifsd: add server-side procedures for SMB3")
    Signed-off-by: Shota Zaizen <s@zaizen.me>
    Acked-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: Fix initialisation order in __pkvm_init_finalise() [+ + +]
Author: Quentin Perret <qperret@google.com>
Date:   Fri Apr 24 09:49:08 2026 +0100

    KVM: arm64: Fix initialisation order in __pkvm_init_finalise()
    
    commit 5bb0aed57ba944f8c201e4e82ec066e0187e0f85 upstream.
    
    fix_host_ownership() walks the hypervisor's stage-1 page-table to
    adjust the host's stage-2 accordingly. Any such adjustment that
    requires cache maintenance operations depends on the per-CPU hyp
    fixmap being present. However, fix_host_ownership() is currently
    called before fix_hyp_pgtable_refcnt() and hyp_create_fixmap(), so
    the fixmap does not yet exist when it runs.
    
    This is benign today because the host stage-2 starts empty and no
    CMOs are needed, but it becomes a latent crash as soon as
    fix_host_ownership() is extended to operate on a non-empty
    page-table.
    
    Reorder the calls so that fix_hyp_pgtable_refcnt() and
    hyp_create_fixmap() complete before fix_host_ownership() is invoked.
    
    Fixes: 0d16d12eb26e ("KVM: arm64: Fix-up hyp stage-1 refcounts for all pages mapped at EL2")
    Signed-off-by: Quentin Perret <qperret@google.com>
    Signed-off-by: Fuad Tabba <tabba@google.com>
    Link: https://patch.msgid.link/20260424084908.370776-7-tabba@google.com
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: arm64: Fix kvm_vcpu_initialized() macro parameter [+ + +]
Author: Fuad Tabba <tabba@google.com>
Date:   Fri Apr 24 09:49:06 2026 +0100

    KVM: arm64: Fix kvm_vcpu_initialized() macro parameter
    
    commit d89fdda7dd8a488f922e1175e6782f781ba8a23b upstream.
    
    The macro is defined with parameter 'v' but the body references the
    literal token 'vcpu' instead, causing it to silently operate on whatever
    'vcpu' resolves to in the caller's scope rather than the value passed by
    the caller. All current call sites happen to use a variable named 'vcpu',
    so the bug is latent.
    
    Fixes: e016333745c7 ("KVM: arm64: Only reset vCPU-scoped feature ID regs once")
    Signed-off-by: Fuad Tabba <tabba@google.com>
    Link: https://patch.msgid.link/20260424084908.370776-5-tabba@google.com
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: arm64: vgic: Fix IIDR revision field extracted from wrong value [+ + +]
Author: David Woodhouse <dwmw@amazon.co.uk>
Date:   Tue Apr 7 21:27:02 2026 +0100

    KVM: arm64: vgic: Fix IIDR revision field extracted from wrong value
    
    commit a0e6ae45af17e8b27958830595799c702ffbab8d upstream.
    
    The uaccess write handlers for GICD_IIDR in both GICv2 and GICv3
    extract the revision field from 'reg' (the current IIDR value read back
    from the emulated distributor) instead of 'val' (the value userspace is
    trying to write). This means userspace can never actually change the
    implementation revision — the extracted value is always the current one.
    
    Fix the FIELD_GET to use 'val' so that userspace can select a different
    revision for migration compatibility.
    
    Fixes: 49a1a2c70a7f ("KVM: arm64: vgic-v3: Advertise GICR_CTLR.{IR, CES} as a new GICD_IIDR revision")
    Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
    Link: https://patch.msgid.link/20260407210949.2076251-2-dwmw2@infradead.org
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: arm64: Wake-up from WFI when iqrchip is in userspace [+ + +]
Author: Marc Zyngier <maz@kernel.org>
Date:   Tue May 12 15:49:34 2026 +0100

    KVM: arm64: Wake-up from WFI when iqrchip is in userspace
    
    commit 4ce98bf0865c349e7026ad9c14f48da264920953 upstream
    
    It appears that there is nothing in the wake-up path that
    evaluates whether the in-kernel interrupts are pending unless
    we have a vgic.
    
    This means that the userspace irqchip support has been broken for
    about four years, and nobody noticed. It was also broken before
    as we wouldn't wake-up on a PMU interrupt, but hey, who cares...
    
    It is probably time to remove the feature altogether, because it
    was a terrible idea 10 years ago, and it still is.
    
    Fixes: b57de4ffd7c6d ("KVM: arm64: Simplify kvm_cpu_has_pending_timer()")
    Link: https://patch.msgid.link/20260423163607.486345-1-maz@kernel.org
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: SVM: check validity of VMCB controls when returning from SMM [+ + +]
Author: Paolo Bonzini <pbonzini@redhat.com>
Date:   Mon Mar 9 12:40:52 2026 +0100

    KVM: SVM: check validity of VMCB controls when returning from SMM
    
    commit be5fa8737d42c5ba16d2ea72c23681f8abbb07e8 upstream.
    
    The VMCB12 is stored in guest memory and can be mangled while in SMM; it
    is then reloaded by svm_leave_smm(), but it is not checked again for
    validity.
    
    Move the cached vmcb12 control and save consistency checks out of
    svm_set_nested_state() and into a helper, and reuse it in
    svm_leave_smm().
    
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: x86: check for nEPT/nNPT in slow flush hypercalls [+ + +]
Author: Paolo Bonzini <pbonzini@redhat.com>
Date:   Mon Apr 27 14:25:40 2026 +0200

    KVM: x86: check for nEPT/nNPT in slow flush hypercalls
    
    commit 464af6fc2b1dcc74005b7f58ee3812b17777efee upstream.
    
    Checking is_guest_mode(vcpu) is incorrect, because translate_nested_gpa()
    is only valid if an L2 guest is running *with nested EPT/NPT enabled*.
    Instead use the same condition as translate_nested_gpa() itself.
    
    Cc: stable@vger.kernel.org
    Reviewed-by: Sean Christopherson <seanjc@google.com>
    Fixes: aee738236dca ("KVM: x86: Prepare kvm_hv_flush_tlb() to handle L2's GPAs", 2022-11-18)
    Link: https://patch.msgid.link/20260503200905.106077-1-pbonzini@redhat.com/
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: x86: Fix shadow paging use-after-free due to unexpected GFN [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Tue May 5 08:59:56 2026 +0200

    KVM: x86: Fix shadow paging use-after-free due to unexpected GFN
    
    commit 0cb2af2ea66ad8ff195c156ea690f11216285bdf upstream.
    
    The shadow MMU computes GFNs for direct shadow pages using sp->gfn plus
    the SPTE index. This assumption breaks for shadow paging if the guest
    page tables are modified between VM entries (similar to commit
    aad885e77496, "KVM: x86/mmu: Drop/zap existing present SPTE even
    when creating an MMIO SPTE", 2026-03-27).  The flow is as follows:
    
    - a PDE is installed for a 2MB mapping, and a page in that area is
      accessed.  KVM creates a kvm_mmu_page consisting of 512 4KB pages;
      the kvm_mmu_page is marked by FNAME(fetch) as direct-mapped because
      the guest's mapping is a huge page (and thus contiguous).
    
    - the PDE mapping is changed from outside the guest.
    
    - the guest accesses another page in the same 2MB area.  KVM installs
      a new leaf SPTE and rmap entry; the SPTE uses the "correct" GFN
      (i.e. based on the new mapping, as changed in the previous step) but
      that GFN is outside of the [sp->gfn, sp->gfn + 511] range; therefore
      the rmap entry cannot be found and removed when the kvm_mmu_page
      is zapped.
    
    - the memslot that covers the first 2MB mapping is deleted, and the
      kvm_mmu_page for the now-invalid GPA is zapped.  However, rmap_remove()
      only looks at the [sp->gfn, sp->gfn + 511] range established in step 1,
      and fails to find the rmap entry that was recorded by step 3.
    
    - any operation that causes an rmap walk for the same page accessed
      by step 3 then walks a stale rmap and dereferences a freed kvm_mmu_page.
      This includes dirty logging or MMU notifier invalidations (e.g., from
      MADV_DONTNEED).
    
    The underlying issue is that KVM's walking of shadow PTEs assumes that
    if a SPTE is present when KVM wants to install a non-leaf SPTE, then the
    existing kvm_mmu_page must be for the correct gfn.  Because the only way
    for the gfn to be wrong is if KVM messed up and failed to zap a SPTE...
    which shouldn't happen, but *actually* only happens in response to a
    guest write.
    
    That bug dates back literally forever, as even the first version of KVM
    assumes that the GFN matches and walks into the "wrong" shadow page.
    However, that was only an imprecision until 2032a93d66fa ("KVM: MMU:
    Don't allocate gfns page for direct mmu pages") came along.
    
    Fix it by checking for a target gfn mismatch and zapping the existing
    SPTE.  That way the old SP and rmap entries are gone, KVM installs
    the rmap in the right location, and everyone is happy.
    
    Fixes: 2032a93d66fa ("KVM: MMU: Don't allocate gfns page for direct mmu pages")
    Fixes: 6aa8b732ca01 ("kvm: userspace interface")
    Reported-by: Alexander Bulekov <bkov@amazon.com>
    Reported-by: Fred Griffoul <fgriffo@amazon.co.uk>
    Cc: stable@vger.kernel.org
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Link: https://patch.msgid.link/20260503201029.106481-1-pbonzini@redhat.com/
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
lib/crypto: mpi: Fix integer underflow in mpi_read_raw_from_sgl() [+ + +]
Author: Lukas Wunner <lukas@wunner.de>
Date:   Sun Apr 12 16:19:47 2026 +0200

    lib/crypto: mpi: Fix integer underflow in mpi_read_raw_from_sgl()
    
    commit 8c2f1288250a90a4b5cabed5d888d7e3aeed4035 upstream.
    
    Yiming reports an integer underflow in mpi_read_raw_from_sgl() when
    subtracting "lzeros" from the unsigned "nbytes".
    
    For this to happen, the scatterlist "sgl" needs to occupy more bytes
    than the "nbytes" parameter and the first "nbytes + 1" bytes of the
    scatterlist must be zero.  Under these conditions, the while loop
    iterating over the scatterlist will count more zeroes than "nbytes",
    subtract the number of zeroes from "nbytes" and cause the underflow.
    
    When commit 2d4d1eea540b ("lib/mpi: Add mpi sgl helpers") originally
    introduced the bug, it couldn't be triggered because all callers of
    mpi_read_raw_from_sgl() passed a scatterlist whose length was equal to
    "nbytes".
    
    However since commit 63ba4d67594a ("KEYS: asymmetric: Use new crypto
    interface without scatterlists"), the underflow can now actually be
    triggered.  When invoking a KEYCTL_PKEY_ENCRYPT system call with a
    larger "out_len" than "in_len" and filling the "in" buffer with zeroes,
    crypto_akcipher_sync_prep() will create an all-zero scatterlist used for
    both the "src" and "dst" member of struct akcipher_request and thereby
    fulfil the conditions to trigger the bug:
    
      sys_keyctl()
        keyctl_pkey_e_d_s()
          asymmetric_key_eds_op()
            software_key_eds_op()
              crypto_akcipher_sync_encrypt()
                crypto_akcipher_sync_prep()
                  crypto_akcipher_encrypt()
                    rsa_enc()
                      mpi_read_raw_from_sgl()
    
    To the user this will be visible as a DoS as the kernel spins forever,
    causing soft lockup splats as a side effect.
    
    Fix it.
    
    Reported-by: Yiming Qian <yimingqian591@gmail.com> # off-list
    Fixes: 2d4d1eea540b ("lib/mpi: Add mpi sgl helpers")
    Signed-off-by: Lukas Wunner <lukas@wunner.de>
    Cc: stable@vger.kernel.org # v4.4+
    Reviewed-by: Ignat Korchagin <ignat@linux.win>
    Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
    Link: https://lore.kernel.org/r/59eca92ff4f87e2081777f1423a0efaaadcfdb39.1776003111.git.lukas@wunner.de
    Signed-off-by: Eric Biggers <ebiggers@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
lib/scatterlist: fix length calculations in extract_kvec_to_sg [+ + +]
Author: Christian A. Ehrhardt <lk@c--e.de>
Date:   Thu Mar 26 22:49:01 2026 +0100

    lib/scatterlist: fix length calculations in extract_kvec_to_sg
    
    commit 07b7d66e65d9cfe6b9c2c34aa22cfcaac37a5c45 upstream.
    
    Patch series "Fix bugs in extract_iter_to_sg()", v3.
    
    Fix bugs in the kvec and user variants of extract_iter_to_sg.  This series
    is growing due to useful remarks made by sashiko.dev.
    
    The main bugs are:
    - The length for an sglist entry when extracting from
      a kvec can exceed the number of bytes in the page. This
      is obviously not intended.
    - When extracting a user buffer the sglist is temporarily
      used as a scratch buffer for extracted page pointers.
      If the sglist already contains some elements this scratch
      buffer could overlap with existing entries in the sglist.
    
    The series adds test cases to the kunit_iov_iter test that demonstrate all
    of these bugs.  Additionally, there is a memory leak fix for the test
    itself.
    
    The bugs were orignally introduced into kernel v6.3 where the function
    lived in fs/netfs/iterator.c.  It was later moved to lib/scatterlist.c in
    v6.5.  Thus the actual fix is only marked for backports to v6.5+.
    
    
    This patch (of 5):
    
    When extracting from a kvec to a scatterlist, do not cross page
    boundaries.  The required length was already calculated but not used as
    intended.
    
    Adjust the copied length if the loop runs out of sglist entries without
    extracting everything.
    
    While there, return immediately from extract_iter_to_sg if there are no
    sglist entries at all.
    
    A subsequent commit will add kunit test cases that demonstrate that the
    patch is necessary.
    
    Link: https://lkml.kernel.org/r/20260326214905.818170-1-lk@c--e.de
    Link: https://lkml.kernel.org/r/20260326214905.818170-2-lk@c--e.de
    Fixes: 018584697533 ("netfs: Add a function to extract an iterator into a scatterlist")
    Signed-off-by: Christian A. Ehrhardt <lk@c--e.de>
    Cc: David Gow <davidgow@google.com>
    Cc: David Howells <dhowells@redhat.com>
    Cc: Kees Cook <kees@kernel.org>
    Cc: Petr Mladek <pmladek@suse.com>
    Cc: <stable@vger.kernel.org>    [v6.5+]
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

lib/scatterlist: fix temp buffer in extract_user_to_sg() [+ + +]
Author: Christian A. Ehrhardt <lk@c--e.de>
Date:   Thu Mar 26 22:49:02 2026 +0100

    lib/scatterlist: fix temp buffer in extract_user_to_sg()
    
    commit 118cf3f55975352ac357fb194405031458186819 upstream.
    
    Instead of allocating a temporary buffer for extracted user pages
    extract_user_to_sg() uses the end of the to be filled scatterlist as a
    temporary buffer.
    
    Fix the calculation of the start address if the scatterlist already
    contains elements.  The unused space starts at sgtable->sgl +
    sgtable->nents not directly at sgtable->nents and the temporary buffer is
    placed at the end of this unused space.
    
    A subsequent commit will add kunit test cases that demonstrate that the
    patch is necessary.
    
    Pointed out by sashiko.dev on a previous iteration of this series.
    
    Link: https://lkml.kernel.org/r/20260326214905.818170-3-lk@c--e.de
    Fixes: 018584697533 ("netfs: Add a function to extract an iterator into a scatterlist")
    Signed-off-by: Christian A. Ehrhardt <lk@c--e.de>
    Cc: David Howells <dhowells@redhat.com>
    Cc: David Gow <davidgow@google.com>
    Cc: Kees Cook <kees@kernel.org>
    Cc: Petr Mladek <pmladek@suse.com>
    Cc: <stable@vger.kernel.org>    [v6.5+]
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
libceph: Fix slab-out-of-bounds access in auth message processing [+ + +]
Author: Raphael Zimmer <raphael.zimmer@tu-ilmenau.de>
Date:   Tue Apr 21 10:27:01 2026 +0200

    libceph: Fix slab-out-of-bounds access in auth message processing
    
    commit 1c439de70b1c3eb3c6bffa8245c16b9fc318f114 upstream.
    
    If a (potentially corrupted) message of type CEPH_MSG_AUTH_REPLY
    contains a positive value in its result field, it is treated as an
    error code by ceph_handle_auth_reply() and returned to
    handle_auth_reply(). Thereafter, an attempt is made to send the
    preallocated message of type CEPH_MSG_AUTH, where the returned value is
    interpreted as the size of the front segment to send. If the result
    value in the message is greater than the size of the memory buffer
    allocated for the front segment, an out-of-bounds access occurs, and
    the content of the memory region beyond this buffer is sent out.
    
    This patch fixes the issue by treating only negative values in the
    result field as errors. Positive values are therefore treated as success
    in the same way as a zero value. Additionally, a BUG_ON is added to
    __send_prepared_auth_request() comparing the len parameter to
    front_alloc_len to prevent sending the message if it exceeds the bounds
    of the allocation and to make it easier to catch any logic flaws leading
    to this.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Raphael Zimmer <raphael.zimmer@tu-ilmenau.de>
    Reviewed-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: Linux 6.12.88 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu May 14 15:29:29 2026 +0200

    Linux 6.12.88
    
    Link: https://lore.kernel.org/r/20260512173932.810559588@linuxfoundation.org
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Tested-by: Pavel Machek (CIP) <pavel@nabladev.com>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Dominique Martinet <dominique.martinet@atmark-techno.com>
    Tested-by: Brett A C Sheffield <bacs@librecast.net>
    Tested-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Tested-by: Barry K. Nathan <barryn@pobox.com>
    Tested-by: Mark Brown <broonie@kerenl.org>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
    Link: https://lore.kernel.org/r/20260513153743.326058350@linuxfoundation.org
    Tested-by: Brett A C Sheffield <bacs@librecast.net>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Dominique Martinet <dominique.martinet@atmark-techno.com>
    Tested-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Tested-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
LoongArch: Fix potential ADE in loongson_gpu_fixup_dma_hang() [+ + +]
Author: Wentao Guan <guanwentao@uniontech.com>
Date:   Mon May 4 09:00:20 2026 +0800

    LoongArch: Fix potential ADE in loongson_gpu_fixup_dma_hang()
    
    commit 8dfa2f8780e486d05b9a0ffce70b8f5fbd62053e upstream.
    
    The switch case in loongson_gpu_fixup_dma_hang() may not DC2 or DC3, and
    readl(crtc_reg) will access with random address, because the "device" is
    from "base+PCI_DEVICE_ID", "base" is from "pdev->devfn+1". This is wrong
    when my platform inserts a discrete GPU:
    
    lspci -tv
    -[0000:00]-+-00.0  Loongson Technology LLC Hyper Transport Bridge Controller
    ...
               +-06.0  Loongson Technology LLC LG100 GPU
               +-06.2  Loongson Technology LLC Device 7a37
    ...
    
    Add a default switch case to fix the panic as below:
    
     Kernel ade access[#1]:
     CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.6.136-loong64-desktop-hwe+ #4
     pc 90000000017e5534 ra 90000000017e54c0 tp 90000001002f8000 sp 90000001002fb6c0
     a0 80000efe00003100 a1 0000000000003100 a2 0000000000000000 a3 0000000000000002
     a4 90000001002fb6b4 a5 900000087cdb58fd a6 90000000027af000 a7 0000000000000001
     t0 00000000000085b9 t1 000000000000ffff t2 0000000000000000 t3 0000000000000000
     t4 fffffffffffffffd t5 00000000fffb6d9c t6 0000000000083b00 t7 00000000000070c0
     t8 900000087cdb4d94 u0 900000087cdb58fd s9 90000001002fb826 s0 90000000031c12c8
     s1 7fffffffffffff00 s2 90000000031c12d0 s3 0000000000002710 s4 0000000000000000
     s5 0000000000000000 s6 9000000100053000 s7 7fffffffffffff00 s8 90000000030d4000
        ra: 90000000017e54c0 loongson_gpu_fixup_dma_hang+0x40/0x210
       ERA: 90000000017e5534 loongson_gpu_fixup_dma_hang+0xb4/0x210
      CRMD: 000000b0 (PLV0 -IE -DA +PG DACF=CC DACM=CC -WE)
      PRMD: 00000004 (PPLV0 +PIE -PWE)
      EUEN: 00000000 (-FPE -SXE -ASXE -BTE)
      ECFG: 00071c1d (LIE=0,2-4,10-12 VS=7)
     ESTAT: 00480000 [ADEM] (IS= ECode=8 EsubCode=1)
      BADV: 7fffffffffffff00
      PRID: 0014d000 (Loongson-64bit, Loongson-3A6000-HV)
     Modules linked in:
     Process swapper/0 (pid: 1, threadinfo=(____ptrval____), task=(____ptrval____))
     Stack : 0000000000000006 90000001002fb778 90000001002fb704 0000000000000007
             0000000016a65700 90000000017e5690 000000000000ffff ffffffffffffffff
             900000000209f7c0 9000000100053000 900000000209f7a8 9000000000eebc08
             0000000000000000 0000000000000000 0000000000000006 90000001002fb778
             90000001000530b8 90000000027af000 0000000000000000 9000000100054000
             9000000100053000 9000000000ebb70c 9000000100004c00 9000000004000001
             90000001002fb7e4 bae765461f31cb12 0000000000000000 0000000000000000
             0000000000000006 90000000027af000 0000000000000030 90000000027af000
             900000087cd6f800 9000000100053000 0000000000000000 9000000000ebc560
             7a2500147cdaf720 bae765461f31cb12 0000000000000001 0000000000000030
             ...
     Call Trace:
     [<90000000017e5534>] loongson_gpu_fixup_dma_hang+0xb4/0x210
     [<9000000000eebc08>] pci_fixup_device+0x108/0x280
     [<9000000000ebb70c>] pci_setup_device+0x24c/0x690
     [<9000000000ebc560>] pci_scan_single_device+0xe0/0x140
     [<9000000000ebc684>] pci_scan_slot+0xc4/0x280
     [<9000000000ebdd00>] pci_scan_child_bus_extend+0x60/0x3f0
     [<9000000000f5bc94>] acpi_pci_root_create+0x2b4/0x420
     [<90000000017e5e74>] pci_acpi_scan_root+0x2d4/0x440
     [<9000000000f5b02c>] acpi_pci_root_add+0x21c/0x3a0
     [<9000000000f4ee54>] acpi_bus_attach+0x1a4/0x3c0
     [<90000000010e200c>] device_for_each_child+0x6c/0xe0
     [<9000000000f4bbf4>] acpi_dev_for_each_child+0x44/0x70
     [<9000000000f4ef40>] acpi_bus_attach+0x290/0x3c0
     [<90000000010e200c>] device_for_each_child+0x6c/0xe0
     [<9000000000f4bbf4>] acpi_dev_for_each_child+0x44/0x70
     [<9000000000f4ef40>] acpi_bus_attach+0x290/0x3c0
     [<9000000000f5211c>] acpi_bus_scan+0x6c/0x280
     [<900000000189c028>] acpi_scan_init+0x194/0x310
     [<900000000189bc6c>] acpi_init+0xcc/0x140
     [<9000000000220cdc>] do_one_initcall+0x4c/0x310
     [<90000000018618fc>] kernel_init_freeable+0x258/0x2d4
     [<900000000184326c>] kernel_init+0x28/0x13c
     [<9000000000222008>] ret_from_kernel_thread+0xc/0xa4
    
    Cc: stable@vger.kernel.org
    Fixes: 95db0c9f526d ("LoongArch: Workaround LS2K/LS7A GPU DMA hang bug")
    Link: https://gist.github.com/opsiff/ebf2dac51b4013d22462f2124c55f807
    Link: https://gist.github.com/opsiff/a62f2a73db0492b3c49bf223a339b133
    Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

LoongArch: Fix SYM_SIGFUNC_START definition for 32BIT [+ + +]
Author: Huacai Chen <chenhuacai@kernel.org>
Date:   Mon May 4 09:00:01 2026 +0800

    LoongArch: Fix SYM_SIGFUNC_START definition for 32BIT
    
    commit 98b8aebb14fdc0133939fd8fe07d0d98333dc976 upstream.
    
    The SYM_SIGFUNC_START definition should match sigcontext that the length
    of GPRs are 8 bytes for both 32BIT and 64BIT. So replace SZREG with 8 to
    fix it.
    
    Cc: stable@vger.kernel.org
    Fixes: e4878c37f6679fde ("LoongArch: vDSO: Emit GNU_EH_FRAME correctly")
    Suggested-by: Xi Ruoyao <xry111@xry111.site>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

LoongArch: KVM: Cap KVM_CAP_NR_VCPUS by KVM_CAP_MAX_VCPUS [+ + +]
Author: Qiang Ma <maqianga@uniontech.com>
Date:   Mon May 4 09:00:37 2026 +0800

    LoongArch: KVM: Cap KVM_CAP_NR_VCPUS by KVM_CAP_MAX_VCPUS
    
    commit b3e31a6650d4cab63f0814c37c0b360372c6ee9e upstream.
    
    It doesn't make sense to return the recommended maximum number of vCPUs
    which exceeds the maximum possible number of vCPUs.
    
    Other architectures have already done this, such as commit 57a2e13ebdda
    ("KVM: MIPS: Cap KVM_CAP_NR_VCPUS by KVM_CAP_MAX_VCPUS")
    
    Cc: stable@vger.kernel.org
    Reviewed-by: Bibo Mao <maobibo@loongson.cn>
    Signed-off-by: Qiang Ma <maqianga@uniontech.com>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

LoongArch: KVM: Fix "unreliable stack" for kvm_exc_entry [+ + +]
Author: Xianglai Li <lixianglai@loongson.cn>
Date:   Mon May 4 09:00:37 2026 +0800

    LoongArch: KVM: Fix "unreliable stack" for kvm_exc_entry
    
    commit b323a441da602dfdfc24f30d3190cac786ffebf2 upstream.
    
    Insert the appropriate UNWIND hint into the kvm_exc_entry assembly
    function to guide the generation of correct ORC table entries, thereby
    solving the timeout problem ("unreliable stack") while loading the
    livepatch-sample module on a physical machine running virtual machines
    with multiple vcpus.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Xianglai Li <lixianglai@loongson.cn>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

LoongArch: KVM: Fix HW timer interrupt lost when inject interrupt by software [+ + +]
Author: Bibo Mao <maobibo@loongson.cn>
Date:   Mon May 4 09:00:48 2026 +0800

    LoongArch: KVM: Fix HW timer interrupt lost when inject interrupt by software
    
    commit 2433f3f5724b3af569d9fb411ba728629524738b upstream.
    
    With passthrough HW timer, timer interrupt is injected by HW. When
    inject emulated CPU interrupt by software such SIP0/SIP1/IPI, HW timer
    interrupt may be lost.
    
    Here check whether there is timer tick value inversion before and after
    injecting emulated CPU interrupt by software, timer enabling by reading
    timer cfg register is skipped. If the timer tick value is detected with
    changing, then timer should be enabled. And inject a timer interrupt by
    software if there is.
    
    Cc: <stable@vger.kernel.org>
    Fixes: f45ad5b8aa93 ("LoongArch: KVM: Implement vcpu interrupt operations").
    Signed-off-by: Bibo Mao <maobibo@loongson.cn>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

LoongArch: KVM: Fix missing EMULATE_FAIL in kvm_emu_mmio_read() [+ + +]
Author: Tao Cui <cuitao@kylinos.cn>
Date:   Mon May 4 09:00:38 2026 +0800

    LoongArch: KVM: Fix missing EMULATE_FAIL in kvm_emu_mmio_read()
    
    commit f26faae96c411a70641e4d21b759475caa6122d5 upstream.
    
    In the ldptr (0x24...0x27) opcode decoding path, the default case only
    breaks out but without setting "ret" value to EMULATE_FAIL. This leaves
    run->mmio.len uninitialized (stale from a previous MMIO operation) while
    "ret" value remains EMULATE_DO_MMIO, causing the code to proceed with an
    incorrect MMIO length.
    
    Add "ret = EMULATE_FAIL" to match the other default branches in the same
    function (e.g. the 0x28...0x2e and 0x38 cases).
    
    Cc: stable@vger.kernel.org
    Reviewed-by: Bibo Mao <maobibo@loongson.cn>
    Signed-off-by: Tao Cui <cuitao@kylinos.cn>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

LoongArch: KVM: Move unconditional delay into timer clear scenery [+ + +]
Author: Bibo Mao <maobibo@loongson.cn>
Date:   Mon May 4 09:00:48 2026 +0800

    LoongArch: KVM: Move unconditional delay into timer clear scenery
    
    commit 5a873d77ba792410a796595a917be6a440f9b7d2 upstream.
    
    When timer interrupt arrives in guest kernel, guest kernel clears the
    timer interrupt and program timer with the next incoming event.
    
    During this stage, timer tick is -1 and timer interrupt status is
    disabled in ESTAT register. KVM hypervisor need write zero with timer
    tick register and wait timer interrupt injection from HW side, and
    then clear timer interrupt.
    
    So there is 2 cycle delay in KVM hypervisor to emulate such scenery,
    and the delay is unnecessary if there is no need to clear the timer
    interrupt.
    
    Here move 2 cycle delay into timer clear scenery and add timer ESTAT
    checking after delay, and set max timer expire value if timer interrupt
    does not arrive still.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Bibo Mao <maobibo@loongson.cn>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

LoongArch: KVM: Use kvm_set_pte() in kvm_flush_pte() [+ + +]
Author: Tao Cui <cuitao@kylinos.cn>
Date:   Mon May 4 09:00:38 2026 +0800

    LoongArch: KVM: Use kvm_set_pte() in kvm_flush_pte()
    
    commit 81e18777d61440511451866c7c80b34a8bdd6b33 upstream.
    
    kvm_flush_pte() is the only caller that directly assigns *pte instead
    of using the kvm_set_pte() wrapper. Use the wrapper for consistency with
    the rest of the file.
    
    No functional change intended.
    
    Cc: stable@vger.kernel.org
    Reviewed-by: Bibo Mao <maobibo@loongson.cn>
    Signed-off-by: Tao Cui <cuitao@kylinos.cn>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

LoongArch: Use per-root-bridge PCIH flag to skip mem resource fixup [+ + +]
Author: Huacai Chen <chenhuacai@kernel.org>
Date:   Mon May 4 09:00:20 2026 +0800

    LoongArch: Use per-root-bridge PCIH flag to skip mem resource fixup
    
    commit 49f33840dcc907d21313d369e34872880846b61c upstream.
    
    When firmware enables 64-bit PCI host bridge support, some root bridges
    already provide valid 64-bit mem resource windows through ACPI.
    
    In this case, the LoongArch-specific mem resource high-bits fixup in
    acpi_prepare_root_resources() should not be applied unconditionally.
    Otherwise, the kernel may override the native resource layout derived
    from firmware, and later BAR assignment can fail to place device BARs
    into the intended 64-bit address space correctly.
    
    Add a per-root-bridge ACPI flag, PCIH, and evaluate it from the current
    root bridge device scope. When PCIH is set, skip the mem resource high-
    bits fixup path and let the kernel use the firmware-provided resource
    description directly. When PCIH is absent or cleared, keep the existing
    behavior and continue filling the high address bits from the host bridge
    address.
    
    This makes the behavior per-root-bridge configurable and avoids breaking
    valid 64-bit BAR space allocation on bridges whose 64-bit windows have
    already been fully described by firmware.
    
    Cc: stable@vger.kernel.org
    Suggested-by: Chao Li <lichao@loongson.cn>
    Tested-by: Dongyan Qian <qiandongyan@loongson.cn>
    Signed-off-by: Dongyan Qian <qiandongyan@loongson.cn>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
md/raid10: fix divide-by-zero in setup_geo() with zero far_copies [+ + +]
Author: Junrui Luo <moonafterrain@outlook.com>
Date:   Thu Apr 16 11:39:56 2026 +0800

    md/raid10: fix divide-by-zero in setup_geo() with zero far_copies
    
    commit 9aa6d860b0930e2f72795665c42c44252a558a0c upstream.
    
    setup_geo() extracts near_copies (nc) and far_copies (fc) from the
    user-provided layout parameter without checking for zero. When fc=0
    with the "improved" far set layout selected, 'geo->far_set_size =
    disks / fc' triggers a divide-by-zero.
    
    Validate nc and fc immediately after extraction, returning -1 if
    either is zero.
    
    Fixes: 475901aff158 ("MD RAID10: Improve redundancy for 'far' and 'offset' algorithms (part 1)")
    Cc: stable@vger.kernel.org
    Signed-off-by: Junrui Luo <moonafterrain@outlook.com>
    Link: https://lore.kernel.org/linux-raid/SYBPR01MB7881A5E2556806CC1D318582AF232@SYBPR01MB7881.ausprd01.prod.outlook.com
    Signed-off-by: Yu Kuai <yukuai@fnnas.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/damon/sysfs-schemes: protect memcg_path kfree() with damon_sysfs_lock [+ + +]
Author: SeongJae Park <sj@kernel.org>
Date:   Thu Apr 23 08:02:51 2026 -0700

    mm/damon/sysfs-schemes: protect memcg_path kfree() with damon_sysfs_lock
    
    commit 1e68eb96e8beb1abefd12dd22c5637795d8a877e upstream.
    
    Patch series "mm/damon/sysfs-schemes: fix use-after-free for [memcg_]path".
    
    Reads of 'memcg_path' and 'path' files in DAMON sysfs interface could race
    with their writes, results in use-after-free.  Fix those.
    
    
    This patch (of 2):
    
    damon_sysfs_scheme_filter->mmecg_path can be read and written by users,
    via DAMON sysfs memcg_path file.  It can also be indirectly read, for the
    parameters {on,off}line committing to DAMON.  The reads for parameters
    committing are protected by damon_sysfs_lock to avoid the sysfs files
    being destroyed while any of the parameters are being read.  But the
    user-driven direct reads and writes are not protected by any lock, while
    the write is deallocating the memcg_path-pointing buffer.  As a result,
    the readers could read the already freed buffer (user-after-free).  Note
    that the user-reads don't race when the same open file is used by the
    writer, due to kernfs's open file locking.  Nonetheless, doing the reads
    and writes with separate open files would be common.  Fix it by protecting
    both the user-direct reads and writes with damon_sysfs_lock.
    
    Link: https://lore.kernel.org/20260423150253.111520-1-sj@kernel.org
    Link: https://lore.kernel.org/20260423150253.111520-2-sj@kernel.org
    Fixes: 4f489fe6afb3 ("mm/damon/sysfs-schemes: free old damon_sysfs_scheme_filter->memcg_path on write")
    Co-developed-by: Junxi Qian <qjx1298677004@gmail.com>
    Signed-off-by: Junxi Qian <qjx1298677004@gmail.com>
    Signed-off-by: SeongJae Park <sj@kernel.org>
    Cc: <stable@vger.kernel.org> # 6.16.x
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm: convert mm_lock_seq to a proper seqcount [+ + +]
Author: Suren Baghdasaryan <surenb@google.com>
Date:   Fri Nov 22 09:44:15 2024 -0800

    mm: convert mm_lock_seq to a proper seqcount
    
    [ Upstream commit eb449bd96954b1c1e491d19066cfd2a010f0aa47 ]
    
    Convert mm_lock_seq to be seqcount_t and change all mmap_write_lock
    variants to increment it, in-line with the usual seqcount usage pattern.
    This lets us check whether the mmap_lock is write-locked by checking
    mm_lock_seq.sequence counter (odd=locked, even=unlocked). This will be
    used when implementing mmap_lock speculation functions.
    As a result vm_lock_seq is also change to be unsigned to match the type
    of mm_lock_seq.sequence.
    
    Suggested-by: Peter Zijlstra <peterz@infradead.org>
    Signed-off-by: Suren Baghdasaryan <surenb@google.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
    Link: https://lkml.kernel.org/r/20241122174416.1367052-2-surenb@google.com
    Stable-dep-of: 52f657e34d7b ("x86: shadow stacks: proper error handling for mmap lock")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mmc: core: Optimize time for secure erase/trim for some Kingston eMMCs [+ + +]
Author: Luke Wang <ziniu.wang_1@nxp.com>
Date:   Fri May 8 09:22:34 2026 -0400

    mmc: core: Optimize time for secure erase/trim for some Kingston eMMCs
    
    [ Upstream commit d6bf2e64dec87322f2b11565ddb59c0e967f96e3 ]
    
    Kingston eMMC IY2964 and IB2932 takes a fixed ~2 seconds for each secure
    erase/trim operation regardless of size - that is, a single secure
    erase/trim operation of 1MB takes the same time as 1GB. With default
    calculated 3.5MB max discard size, secure erase 1GB requires ~300 separate
    operations taking ~10 minutes total.
    
    Add a card quirk, MMC_QUIRK_FIXED_SECURE_ERASE_TRIM_TIME, to set maximum
    secure erase size for those devices. This allows 1GB secure erase to
    complete in a single operation, reducing time from 10 minutes to just 2
    seconds.
    
    Signed-off-by: Luke Wang <ziniu.wang_1@nxp.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    [ adapted to use mmc_can_secure_erase_trim()/mmc_can_trim() and placed helper after mmc_card_no_uhs_ddr50_tuning() ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mptcp: fastclose msk when linger time is 0 [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Mon Apr 27 21:54:35 2026 +0200

    mptcp: fastclose msk when linger time is 0
    
    commit f14d6e9c3678a067f304abba561e0c5446c7e845 upstream.
    
    The SO_LINGER socket option has been supported for a while with MPTCP
    sockets [1], but it didn't cause the equivalent of a TCP reset as
    expected when enabled and its time was set to 0. This was causing some
    behavioural differences with TCP where some connections were not
    promptly stopped as expected.
    
    To fix that, an extra condition is checked at close() time before
    sending an MP_FASTCLOSE, the MPTCP equivalent of a TCP reset.
    
    Note that backporting up to [1] will be difficult as more changes are
    needed to be able to send MP_FASTCLOSE. It seems better to stop at [2],
    which was supposed to already imitate TCP.
    
    Validated with MPTCP packetdrill tests [3].
    
    Fixes: 268b12387460 ("mptcp: setsockopt: support SO_LINGER") [1]
    Fixes: d21f83485518 ("mptcp: use fastclose on more edge scenarios") [2]
    Cc: stable@vger.kernel.org
    Reported-by: Lance Tuller <lance@lance0.com>
    Closes: https://github.com/lance0/xfr/pull/67
    Link: https://github.com/multipath-tcp/packetdrill/pull/196 [3]
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260427-net-mptcp-misc-fixes-7-1-rc2-v1-3-7432b7f279fa@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: fix scheduling with atomic in timestamp sockopt [+ + +]
Author: Gang Yan <yangang@kylinos.cn>
Date:   Mon Apr 27 21:54:34 2026 +0200

    mptcp: fix scheduling with atomic in timestamp sockopt
    
    commit b5c52908d52c6c8eb8933264aa6087a0600fd892 upstream.
    
    Using lock_sock_fast() (atomic context) around sock_set_timestamp()
    and sock_set_timestamping() is unsafe, as both helpers can sleep.
    
    Replace lock_sock_fast() with sleepable lock_sock()/release_sock()
    to avoid scheduling while atomic panic.
    
    Fixes: 9061f24bf82e ("mptcp: sockopt: propagate timestamp request to subflows")
    Cc: stable@vger.kernel.org
    Reported-by: Sashiko <sashiko-bot@kernel.org>
    Closes: https://sashiko.dev/#/patchset/20260420093343.16443-1-gang.yan@linux.dev
    Signed-off-by: Gang Yan <yangang@kylinos.cn>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260427-net-mptcp-misc-fixes-7-1-rc2-v1-2-7432b7f279fa@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: sockopt: set timestamp flags on subflow socket, not msk [+ + +]
Author: Gang Yan <yangang@kylinos.cn>
Date:   Mon Apr 27 21:54:33 2026 +0200

    mptcp: sockopt: set timestamp flags on subflow socket, not msk
    
    commit 5f95c21fc23a7ef22b4d27d1ed9bb55557ffb926 upstream.
    
    Both mptcp_setsockopt_sol_socket_tstamp() and
    mptcp_setsockopt_sol_socket_timestamping() iterate over subflows,
    acquire the subflow socket lock, but then erroneously pass the MPTCP
    msk socket to sock_set_timestamp() / sock_set_timestamping() instead
    of the subflow ssk. As a result, the timestamp flags are set on the
    wrong socket and have no effect on the actual subflows.
    
    Pass ssk instead of sk to both helpers.
    
    Fixes: 9061f24bf82e ("mptcp: sockopt: propagate timestamp request to subflows")
    Cc: stable@vger.kernel.org
    Signed-off-by: Gang Yan <yangang@kylinos.cn>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260427-net-mptcp-misc-fixes-7-1-rc2-v1-1-7432b7f279fa@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: use MPJoinSynAckHMacFailure for SynAck HMAC failure [+ + +]
Author: Shardul Bankar <shardul.b@mpiricsoftware.com>
Date:   Fri May 1 21:35:34 2026 +0200

    mptcp: use MPJoinSynAckHMacFailure for SynAck HMAC failure
    
    commit c4a99a921949cddc590b22bb14eeb23dffcc3ba6 upstream.
    
    In subflow_finish_connect(), HMAC validation of the server's HMAC
    in SYN/ACK + MP_JOIN increments MPTCP_MIB_JOINACKMAC ("HMAC was
    wrong on ACK + MP_JOIN") on failure. The function processes the
    SYN/ACK, not the ACK; the matching MPTCP_MIB_JOINSYNACKMAC counter
    ("HMAC was wrong on SYN/ACK + MP_JOIN") exists but is not
    incremented anywhere in the tree.
    
    The mirror site on the server, subflow_syn_recv_sock(), already
    uses JOINACKMAC correctly for ACK HMAC failure. Use JOINSYNACKMAC
    at the SYN/ACK validation site so each counter reflects the packet
    whose HMAC actually failed.
    
    Suggested-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Fixes: fc518953bc9c ("mptcp: add and use MIB counter infrastructure")
    Cc: stable@vger.kernel.org
    Signed-off-by: Shardul Bankar <shardul.b@mpiricsoftware.com>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260501-net-mptcp-misc-fixes-7-1-rc3-v1-1-b70118df778e@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: use MPTCP_RST_EMPTCP for ACK HMAC validation failure [+ + +]
Author: Shardul Bankar <shardul.b@mpiricsoftware.com>
Date:   Fri May 1 21:35:35 2026 +0200

    mptcp: use MPTCP_RST_EMPTCP for ACK HMAC validation failure
    
    commit a6da02d4c00fdda2417e42ad2b762a9209e6cc49 upstream.
    
    When HMAC validation fails on a received ACK + MP_JOIN in
    subflow_syn_recv_sock(), the subflow is reset with reason
    MPTCP_RST_EPROHIBIT ("Administratively prohibited"). This is
    incorrect: HMAC validation failure is an MPTCP protocol-level
    error, not an administrative policy denial.
    
    The mirror site on the client, in subflow_finish_connect(), already
    uses MPTCP_RST_EMPTCP ("MPTCP-specific error") for the same kind of
    HMAC failure on the SYN/ACK + MP_JOIN. Use the same reason on the
    server side for symmetry and accuracy.
    
    Suggested-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Fixes: 443041deb5ef ("mptcp: fix NULL pointer in can_accept_new_subflow")
    Cc: stable@vger.kernel.org
    Signed-off-by: Shardul Bankar <shardul.b@mpiricsoftware.com>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260501-net-mptcp-misc-fixes-7-1-rc3-v1-2-b70118df778e@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mtd: spi-nor: debugfs: fix out-of-bounds read in spi_nor_params_show() [+ + +]
Author: Tudor Ambarus <tudor.ambarus@linaro.org>
Date:   Fri Apr 17 15:24:39 2026 +0000

    mtd: spi-nor: debugfs: fix out-of-bounds read in spi_nor_params_show()
    
    commit e47029b977e747cb3a9174308fd55762cce70147 upstream.
    
    Sashiko noticed an out-of-bounds read [1].
    
    In spi_nor_params_show(), the snor_f_names array is passed to
    spi_nor_print_flags() using sizeof(snor_f_names).
    
    Since snor_f_names is an array of pointers, sizeof() returns the total
    number of bytes occupied by the pointers
            (element_count * sizeof(void *))
    rather than the element count itself. On 64-bit systems, this makes the
    passed length 8x larger than intended.
    
    Inside spi_nor_print_flags(), the 'names_len' argument is used to
    bounds-check the 'names' array access. An out-of-bounds read occurs
    if a flag bit is set that exceeds the array's actual element count
    but is within the inflated byte-size count.
    
    Correct this by using ARRAY_SIZE() to pass the actual number of
    string pointers in the array.
    
    Cc: stable@vger.kernel.org
    Fixes: 0257be79fc4a ("mtd: spi-nor: expose internal parameters via debugfs")
    Closes: https://sashiko.dev/#/patchset/20260417-die-erase-fix-v2-1-73bb7004ebad%40infineon.com [1]
    Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org>
    Reviewed-by: Takahiro Kuwano <takahiro.kuwano@infineon.com>
    Reviewed-by: Michael Walle <mwalle@kernel.org>
    Reviewed-by: Pratyush Yadav <pratyush@kernel.org>
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mtd: spinand: winbond: Declare the QE bit on W25NxxJW [+ + +]
Author: Miquel Raynal <miquel.raynal@bootlin.com>
Date:   Fri May 8 15:52:17 2026 -0400

    mtd: spinand: winbond: Declare the QE bit on W25NxxJW
    
    [ Upstream commit 7866ce992cf0d3c3b50fe8bf4acb1dbb173a2304 ]
    
    Factory default for this bit is "set" (at least on the chips I have),
    but we must make sure it is actually set by Linux explicitly, as the
    bit is writable by an earlier stage.
    
    Fixes: 6a804fb72de5 ("mtd: spinand: winbond: add support for serial NAND flash")
    Cc: stable@vger.kernel.org
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    [ adapted chip name W25N02JW to W25N02JWZEIF and applied flag change via read_cache_variants context instead of read_cache_dual_quad_dtr_variants ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/rds: handle zerocopy send cleanup before the message is queued [+ + +]
Author: Nan Li <tonanli66@gmail.com>
Date:   Fri May 1 09:08:44 2026 +0800

    net/rds: handle zerocopy send cleanup before the message is queued
    
    commit 44b550d88b267320459d518c0743a241ab2108fa upstream.
    
    A zerocopy send can fail after user pages have been pinned but before
    the message is attached to the sending socket.
    
    The purge path currently infers zerocopy state from rm->m_rs, so an
    unqueued message can be cleaned up as if it owned normal payload pages.
    However, zerocopy ownership is really determined by the presence of
    op_mmp_znotifier, regardless of whether the message has reached the
    socket queue.
    
    Capture op_mmp_znotifier up front in rds_message_purge() and use it as
    the cleanup discriminator. If the message is already associated with a
    socket, keep the existing completion path. Otherwise, drop the pinned
    page accounting directly and release the notifier before putting the
    payload pages.
    
    This keeps early send failure cleanup consistent with the zerocopy
    lifetime rules without changing the normal queued completion path.
    
    Fixes: 0cebaccef3ac ("rds: zerocopy Tx support.")
    Cc: stable@kernel.org
    Reported-by: Yuan Tan <yuantan098@gmail.com>
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Reported-by: Xin Liu <bird@lzu.edu.cn>
    Co-developed-by: Xiao Liu <lx24@stu.ynu.edu.cn>
    Signed-off-by: Xiao Liu <lx24@stu.ynu.edu.cn>
    Signed-off-by: Nan Li <tonanli66@gmail.com>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Reviewed-by: Allison Henderson <achender@kernel.org>
    Link: https://patch.msgid.link/d2ea98a6313d5467bac00f7c9fef8c7acddb9258.1777550074.git.tonanli66@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/sched: sch_red: Replace direct dequeue call with peek and qdisc_dequeue_peeked [+ + +]
Author: Jamal Hadi Salim <jhs@mojatatu.com>
Date:   Thu Apr 30 11:29:55 2026 -0400

    net/sched: sch_red: Replace direct dequeue call with peek and qdisc_dequeue_peeked
    
    commit 458d5615272d3de535748342eb68ca492343048c upstream.
    
    When red qdisc has children (eg qfq qdisc) whose peek() callback is
    qdisc_peek_dequeued(), we could get a kernel panic. When the parent of such
    qdiscs (eg illustrated in patch #3 as tbf) wants to retrieve an skb from
    its child (red in this case), it will do the following:
     1a. do a peek() - and when sensing there's an skb the child can offer, then
         - the child in this case(red) calls its child's (qfq) peek.
            qfq does the right thing and will return the gso_skb queue packet.
            Note: if there wasnt a gso_skb entry then qfq will store it there.
     1b. invoke a dequeue() on the child (red). And herein lies the problem.
         - red will call the child's dequeue() which will essentially just
           try to grab something of qfq's queue.
    
    [   78.667668][  T363] KASAN: null-ptr-deref in range [0x0000000000000048-0x000000000000004f]
    [   78.667927][  T363] CPU: 1 UID: 0 PID: 363 Comm: ping Not tainted 7.1.0-rc1-00033-g46f74a3f7d57-dirty #790 PREEMPT(full)
    [   78.668263][  T363] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
    [   78.668486][  T363] RIP: 0010:qfq_dequeue+0x446/0xc90 [sch_qfq]
    [   78.668718][  T363] Code: 54 c0 e8 dd 90 00 f1 48 c7 c7 e0 03 54 c0 48 89 de e8 ce 90 00 f1 48 8d 7b 48 b8 ff ff 37 00 48 89 fa 48 c1 e0 2a 48 c1 ea 03 <80> 3c 02 00 74 05 e8 ef a1 e1 f1 48 8b 7b 48 48 8d 54 24 58 48 8d
    [   78.669312][  T363] RSP: 0018:ffff88810de573e0 EFLAGS: 00010216
    [   78.669533][  T363] RAX: dffffc0000000000 RBX: 0000000000000000 RCX: 0000000000000000
    [   78.669790][  T363] RDX: 0000000000000009 RSI: 0000000000000004 RDI: 0000000000000048
    [   78.670044][  T363] RBP: ffff888110dc4000 R08: ffffffffb1b0885a R09: fffffbfff6ba9078
    [   78.670297][  T363] R10: 0000000000000003 R11: ffff888110e31c80 R12: 0000001880000000
    [   78.670560][  T363] R13: ffff888110dc4150 R14: ffff888110dc42b8 R15: 0000000000000200
    [   78.670814][  T363] FS:  00007f66a8f09c40(0000) GS:ffff888163428000(0000) knlGS:0000000000000000
    [   78.671110][  T363] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   78.671324][  T363] CR2: 000055db4c6a30a8 CR3: 000000010da67000 CR4: 0000000000750ef0
    [   78.671585][  T363] PKRU: 55555554
    [   78.671713][  T363] Call Trace:
    [   78.671843][  T363]  <TASK>
    [   78.671936][  T363]  ? __pfx_qfq_dequeue+0x10/0x10 [sch_qfq]
    [   78.672148][  T363]  ? __pfx__printk+0x10/0x10
    [   78.672322][  T363]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   78.672496][  T363]  ? lockdep_hardirqs_on_prepare+0xa8/0x1a0
    [   78.672706][  T363]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   78.672875][  T363]  ? trace_hardirqs_on+0x19/0x1a0
    [   78.673047][  T363]  red_dequeue+0x65/0x270 [sch_red]
    [   78.673217][  T363]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   78.673385][  T363]  tbf_dequeue.cold+0xb0/0x70c [sch_tbf]
    [   78.673566][  T363]  __qdisc_run+0x169/0x1900
    
    The right thing to do in #1b is to grab the skb off gso_skb queue.
    This patchset fixes that issue by changing #1b to use qdisc_dequeue_peeked()
    method instead.
    
    Fixes: 77be155cba4e ("pkt_sched: Add peek emulation for non-work-conserving qdiscs.")
    Reported-by: Manas <ghandatmanas@gmail.com>
    Reported-by: Rakshit Awasthi <rakshitawasthi17@gmail.com>
    Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20260430152957.194015-2-jhs@mojatatu.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net: af_key: zero aligned sockaddr tail in PF_KEY exports [+ + +]
Author: Zhengchuan Liang <zcliangcn@gmail.com>
Date:   Sun Mar 22 11:46:08 2026 -0700

    net: af_key: zero aligned sockaddr tail in PF_KEY exports
    
    [ Upstream commit 426c355742f02cf743b347d9d7dbdc1bfbfa31ef ]
    
    PF_KEY export paths use `pfkey_sockaddr_size()` when reserving sockaddr
    payload space, so IPv6 addresses occupy 32 bytes on the wire. However,
    `pfkey_sockaddr_fill()` initializes only the first 28 bytes of
    `struct sockaddr_in6`, leaving the final 4 aligned bytes uninitialized.
    
    Not every PF_KEY message is affected. The state and policy dump builders
    already zero the whole message buffer before filling the sockaddr
    payloads. Keep the fix to the export paths that still append aligned
    sockaddr payloads with plain `skb_put()`:
    
      - `SADB_ACQUIRE`
      - `SADB_X_NAT_T_NEW_MAPPING`
      - `SADB_X_MIGRATE`
    
    Fix those paths by clearing only the aligned sockaddr tail after
    `pfkey_sockaddr_fill()`.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Fixes: 08de61beab8a ("[PFKEYV2]: Extension for dynamic update of endpoint address(es)")
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Co-developed-by: Yuan Tan <yuantan098@gmail.com>
    Signed-off-by: Yuan Tan <yuantan098@gmail.com>
    Suggested-by: Xin Liu <bird@lzu.edu.cn>
    Tested-by: Xiao Liu <lx24@stu.ynu.edu.cn>
    Signed-off-by: Zhengchuan Liang <zcliangcn@gmail.com>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: libwx: fix VF illegal register access [+ + +]
Author: Jiawen Wu <jiawenwu@trustnetic.com>
Date:   Wed Apr 29 16:37:42 2026 +0800

    net: libwx: fix VF illegal register access
    
    commit 694de316f607fe2473d52ca0707e3918e72c1562 upstream.
    
    Register WX_CFG_PORT_ST is a PF restricted register. When a VF is
    initialized, attempting to read this register triggers an illegal
    register access, which lead to a system hang.
    
    When the device is VF, the bus function ID can be obtained directly from
    the PCI_FUNC(pdev->devfn).
    
    Fixes: a04ea57aae37 ("net: libwx: fix device bus LAN ID")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
    Link: https://patch.msgid.link/4D1F4452D21DE107+20260429083743.88961-1-jiawenwu@trustnetic.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: rtnetlink: zero ifla_vf_broadcast to avoid stack infoleak in rtnl_fill_vfinfo [+ + +]
Author: Kai Zen <kai.aizen.dev@gmail.com>
Date:   Thu Apr 30 18:26:48 2026 +0300

    net: rtnetlink: zero ifla_vf_broadcast to avoid stack infoleak in rtnl_fill_vfinfo
    
    commit 4b9e327991815e128ad3af75c3a04630a63ce3e0 upstream.
    
    rtnl_fill_vfinfo() declares struct ifla_vf_broadcast on the stack
    without initialisation:
    
            struct ifla_vf_broadcast vf_broadcast;
    
    The struct contains a single fixed 32-byte field:
    
            /* include/uapi/linux/if_link.h */
            struct ifla_vf_broadcast {
                    __u8 broadcast[32];
            };
    
    The function then copies dev->broadcast into it using dev->addr_len
    as the length:
    
            memcpy(vf_broadcast.broadcast, dev->broadcast, dev->addr_len);
    
    On Ethernet devices (the overwhelming majority of SR-IOV NICs)
    dev->addr_len is 6, so only the first 6 bytes of broadcast[] are
    written. The remaining 26 bytes retain whatever was previously on
    the kernel stack. The full struct is then handed to userspace via:
    
            nla_put(skb, IFLA_VF_BROADCAST,
                    sizeof(vf_broadcast), &vf_broadcast)
    
    leaking up to 26 bytes of uninitialised kernel stack per VF per
    RTM_GETLINK request, repeatable.
    
    The other vf_* structs in the same function are explicitly zeroed
    for exactly this reason - see the memset() calls for ivi,
    vf_vlan_info, node_guid and port_guid a few lines above.
    vf_broadcast was simply missed when it was added.
    
    Reachability: any unprivileged local process can open AF_NETLINK /
    NETLINK_ROUTE without capabilities and send RTM_GETLINK with an
    IFLA_EXT_MASK attribute carrying RTEXT_FILTER_VF. The kernel walks
    each VF and emits IFLA_VF_BROADCAST, leaking 26 bytes of stack per
    VF per request. Stack residue at this call site can include return
    addresses and transient sensitive data; KASAN with stack
    instrumentation, or KMSAN, will flag the nla_put() when reproduced.
    
    Zero the on-stack struct before the partial memcpy, matching the
    existing pattern used for the other vf_* structs in the same
    function.
    
    Fixes: 75345f888f70 ("ipoib: show VF broadcast address")
    Cc: stable@vger.kernel.org
    Signed-off-by: Kai Zen <kai.aizen.dev@gmail.com>
    Link: https://patch.msgid.link/3c506e8f936e52b57620269b55c348af05d413a2.1777557228.git.kai.aizen.dev@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: stmmac: avoid shadowing global buf_sz [+ + +]
Author: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Date:   Sun May 10 10:22:45 2026 -0400

    net: stmmac: avoid shadowing global buf_sz
    
    [ Upstream commit 876cfb20e8892143c0c967b3657074f9131f9b5f ]
    
    stmmac_rx() declares a local variable named "buf_sz" but there is also
    a global variable for a module parameter which is called the same. To
    avoid confusion, rename the local variable.
    
    Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Reviewed-by: Furong Xu <0x1207@gmail.com>
    Link: https://patch.msgid.link/E1tpswi-005U6C-Py@rmk-PC.armlinux.org.uk
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 0bb05e6adfa9 ("net: stmmac: Prevent NULL deref when RX memory exhausted")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: stmmac: Prevent NULL deref when RX memory exhausted [+ + +]
Author: Sam Edwards <cfsworks@gmail.com>
Date:   Sun May 10 10:22:47 2026 -0400

    net: stmmac: Prevent NULL deref when RX memory exhausted
    
    [ Upstream commit 0bb05e6adfa99a2ea1fee1125cc0953409f83ed8 ]
    
    The CPU receives frames from the MAC through conventional DMA: the CPU
    allocates buffers for the MAC, then the MAC fills them and returns
    ownership to the CPU. For each hardware RX queue, the CPU and MAC
    coordinate through a shared ring array of DMA descriptors: one
    descriptor per DMA buffer. Each descriptor includes the buffer's
    physical address and a status flag ("OWN") indicating which side owns
    the buffer: OWN=0 for CPU, OWN=1 for MAC. The CPU is only allowed to set
    the flag and the MAC is only allowed to clear it, and both must move
    through the ring in sequence: thus the ring is used for both
    "submissions" and "completions."
    
    In the stmmac driver, stmmac_rx() bookmarks its position in the ring
    with the `cur_rx` index. The main receive loop in that function checks
    for rx_descs[cur_rx].own=0, gives the corresponding buffer to the
    network stack (NULLing the pointer), and increments `cur_rx` modulo the
    ring size. After the loop exits, stmmac_rx_refill(), which bookmarks its
    position with `dirty_rx`, allocates fresh buffers and rearms the
    descriptors (setting OWN=1). If it fails any allocation, it simply stops
    early (leaving OWN=0) and will retry where it left off when next called.
    
    This means descriptors have a three-stage lifecycle (terms my own):
    - `empty` (OWN=1, buffer valid)
    - `full` (OWN=0, buffer valid and populated)
    - `dirty` (OWN=0, buffer NULL)
    
    But because stmmac_rx() only checks OWN, it confuses `full`/`dirty`. In
    the past (see 'Fixes:'), there was a bug where the loop could cycle
    `cur_rx` all the way back to the first descriptor it dirtied, resulting
    in a NULL dereference when mistaken for `full`. The aforementioned
    commit resolved that *specific* failure by capping the loop's iteration
    limit at `dma_rx_size - 1`, but this is only a partial fix: if the
    previous stmmac_rx_refill() didn't complete, then there are leftover
    `dirty` descriptors that the loop might encounter without needing to
    cycle fully around. The current code therefore panics (see 'Closes:')
    when stmmac_rx_refill() is memory-starved long enough for `cur_rx` to
    catch up to `dirty_rx`.
    
    Fix this by explicitly checking, before advancing `cur_rx`, if the next
    entry is dirty; exit the loop if so. This prevents processing of the
    final, used descriptor until stmmac_rx_refill() succeeds, but
    fully prevents the `cur_rx == dirty_rx` ambiguity as the previous bugfix
    intended: so remove the clamp as well. Since stmmac_rx_zc() is a
    copy-paste-and-tweak of stmmac_rx() and the code structure is identical,
    any fix to stmmac_rx() will also need a corresponding fix for
    stmmac_rx_zc(). Therefore, apply the same check there.
    
    In stmmac_rx() (not stmmac_rx_zc()), a related bug remains: after the
    MAC sets OWN=0 on the final descriptor, it will be unable to send any
    further DMA-complete IRQs until it's given more `empty` descriptors.
    Currently, the driver simply *hopes* that the next stmmac_rx_refill()
    succeeds, risking an indefinite stall of the receive process if not. But
    this is not a regression, so it can be addressed in a future change.
    
    Fixes: b6cb4541853c7 ("net: stmmac: avoid rx queue overrun")
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=221010
    Cc: stable@vger.kernel.org
    Suggested-by: Russell King <linux@armlinux.org.uk>
    Signed-off-by: Sam Edwards <CFSworks@gmail.com>
    Link: https://patch.msgid.link/20260422044503.5349-1-CFSworks@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: stmmac: rename STMMAC_GET_ENTRY() -> STMMAC_NEXT_ENTRY() [+ + +]
Author: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Date:   Sun May 10 10:22:46 2026 -0400

    net: stmmac: rename STMMAC_GET_ENTRY() -> STMMAC_NEXT_ENTRY()
    
    [ Upstream commit 6b4286e0550814cdc4b897f881ec1fa8b0313227 ]
    
    STMMAC_GET_ENTRY() doesn't describe what this macro is doing - it is
    incrementing the provided index for the circular array of descriptors.
    Replace "GET" with "NEXT" as this better describes the action here.
    
    Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Link: https://patch.msgid.link/E1w2vba-0000000DbWo-1oL5@rmk-PC.armlinux.org.uk
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 0bb05e6adfa9 ("net: stmmac: Prevent NULL deref when RX memory exhausted")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: txgbe: fix RTNL assertion warning when remove module [+ + +]
Author: Jiawen Wu <jiawenwu@trustnetic.com>
Date:   Wed May 6 14:29:26 2026 +0800

    net: txgbe: fix RTNL assertion warning when remove module
    
    [ Upstream commit e159f05e12cc1111a3103b99375ddf0dfd0e7d63 ]
    
    For the copper NIC with external PHY, the driver called
    phylink_connect_phy() during probe and phylink_disconnect_phy() during
    remove. It caused an RTNL assertion warning in phylink_disconnect_phy()
    upon module remove.
    
    To fix this, add rtnl_lock() and rtnl_unlock() around the
    phylink_disconnect_phy() in remove function.
    
     ------------[ cut here ]------------
     RTNL: assertion failed at drivers/net/phy/phylink.c (2351)
     WARNING: drivers/net/phy/phylink.c:2351 at
    phylink_disconnect_phy+0xd8/0xf0 [phylink], CPU#0: rmmod/4464
     Modules linked in: ...
     CPU: 0 UID: 0 PID: 4464 Comm: rmmod Kdump: loaded Not tainted 7.0.0-rc4+
     Hardware name: Micro-Star International Co., Ltd. MS-7E16/X670E GAMING
    PLUS WIFI (MS-7E16), BIOS 1.90 12/31/2024
     RIP: 0010:phylink_disconnect_phy+0xe4/0xf0 [phylink]
     Code: 5b 41 5c 41 5d 41 5e 41 5f 5d 31 c0 31 d2 31 f6 31 ff e9 3a 38 8f e7
    48 8d 3d 48 87 e2 ff ba 2f 09 00 00 48 c7 c6 c1 22 24 c0 <67> 48 0f b9 3a
    e9 34 ff ff ff 66 90 90 90 90 90 90 90 90 90 90 90
     RSP: 0018:ffffce7288363ac0 EFLAGS: 00010246
     RAX: 0000000000000000 RBX: ffff89654b2a1a00 RCX: 0000000000000000
     RDX: 000000000000092f RSI: ffffffffc02422c1 RDI: ffffffffc0239020
     RBP: ffffce7288363ae8 R08: 0000000000000000 R09: 0000000000000000
     R10: 0000000000000000 R11: 0000000000000000 R12: ffff8964c4022000
     R13: ffff89654fce3028 R14: ffff89654ebb4000 R15: ffffffffc0226348
     FS:  0000795e80d93780(0000) GS:ffff896c52857000(0000)
    knlGS:0000000000000000
     CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: 00005b528b592000 CR3: 0000000170d0f000 CR4: 0000000000f50ef0
     PKRU: 55555554
     Call Trace:
      <TASK>
      txgbe_remove_phy+0xbb/0xd0 [txgbe]
      txgbe_remove+0x4c/0xb0 [txgbe]
      pci_device_remove+0x41/0xb0
      device_remove+0x43/0x80
      device_release_driver_internal+0x206/0x270
      driver_detach+0x4a/0xa0
      bus_remove_driver+0x83/0x120
      driver_unregister+0x2f/0x60
      pci_unregister_driver+0x40/0x90
      txgbe_driver_exit+0x10/0x850 [txgbe]
      __do_sys_delete_module.isra.0+0x1c3/0x2f0
      __x64_sys_delete_module+0x12/0x20
      x64_sys_call+0x20c3/0x2390
      do_syscall_64+0x11c/0x1500
      ? srso_alias_return_thunk+0x5/0xfbef5
      ? do_syscall_64+0x15a/0x1500
      ? srso_alias_return_thunk+0x5/0xfbef5
      ? do_fault+0x312/0x580
      ? srso_alias_return_thunk+0x5/0xfbef5
      ? __handle_mm_fault+0x9d5/0x1040
      ? srso_alias_return_thunk+0x5/0xfbef5
      ? count_memcg_events+0x101/0x1d0
      ? srso_alias_return_thunk+0x5/0xfbef5
      ? handle_mm_fault+0x1e8/0x2f0
      ? srso_alias_return_thunk+0x5/0xfbef5
      ? do_user_addr_fault+0x2f8/0x820
      ? srso_alias_return_thunk+0x5/0xfbef5
      ? irqentry_exit+0xb2/0x600
      ? srso_alias_return_thunk+0x5/0xfbef5
      ? exc_page_fault+0x92/0x1c0
      entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Fixes: 02b2a6f91b90 ("net: txgbe: support copper NIC with external PHY")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
    Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Link: https://patch.msgid.link/8B47A5872884147D+20260407094041.4646-1-jiawenwu@trustnetic.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: wwan: t7xx: validate port_count against message length in t7xx_port_enum_msg_handler [+ + +]
Author: Pavitra Jha <jhapavitra98@gmail.com>
Date:   Fri May 1 07:07:12 2026 -0400

    net: wwan: t7xx: validate port_count against message length in t7xx_port_enum_msg_handler
    
    commit 0e7c074cfcd9bd93765505f9eb8b42f03ed2a744 upstream.
    
    t7xx_port_enum_msg_handler() uses the modem-supplied port_count field as
    a loop bound over port_msg->data[] without checking that the message buffer
    contains sufficient data. A modem sending port_count=65535 in a 12-byte
    buffer triggers a slab-out-of-bounds read of up to 262140 bytes.
    
    Add a sizeof(*port_msg) check before accessing the port message header
    fields to guard against undersized messages.
    
    Add a struct_size() check after extracting port_count and before the loop.
    
    In t7xx_parse_host_rt_data(), guard the rt_feature header read with a
    remaining-buffer check before accessing data_len, validate feat_data_len
    against the actual remaining buffer to prevent OOB reads and signed
    integer overflow on offset.
    
    Pass msg_len from both call sites: skb->len at the DPMAIF path after
    skb_pull(), and the validated feat_data_len at the handshake path.
    
    Fixes: da45d2566a1d ("net: wwan: t7xx: Add control port")
    Cc: stable@vger.kernel.org
    Signed-off-by: Pavitra Jha <jhapavitra98@gmail.com>
    Link: https://patch.msgid.link/20260501110713.145563-1-jhapavitra98@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nvme-apple: drop invalid put of admin queue reference count [+ + +]
Author: Fedor Pchelkin <pchelkin@ispras.ru>
Date:   Wed Apr 8 17:18:14 2026 +0300

    nvme-apple: drop invalid put of admin queue reference count
    
    commit ba9d308ccd6732dd97ed8080d834a4a89e758e14 upstream.
    
    Commit 03b3bcd319b3 ("nvme: fix admin request_queue lifetime") moved the
    admin queue reference ->put call into nvme_free_ctrl() - a controller
    device release callback performed for every nvme driver doing
    nvme_init_ctrl().
    
    nvme-apple sets refcount of the admin queue to 1 at allocation during the
    probe function and then puts it twice now:
    
    nvme_free_ctrl()
      blk_put_queue(ctrl->admin_q) // #1
      ->free_ctrl()
        apple_nvme_free_ctrl()
          blk_put_queue(anv->ctrl.admin_q) // #2
    
    Note that there is a commit 941f7298c70c ("nvme-apple: remove an extra
    queue reference") which intended to drop taking an extra admin queue
    reference.  Looks like at that moment it accidentally fixed a refcount
    leak, which existed since the driver's introduction.  There were two ->get
    calls at driver's probe function and a single ->put inside
    apple_nvme_free_ctrl().
    
    However now after commit 03b3bcd319b3 ("nvme: fix admin request_queue
    lifetime") the refcount is imbalanced again.  Fix it by removing extra
    ->put call from apple_nvme_free_ctrl().  anv->dev and ctrl->dev point to
    the same device, so use ctrl->dev directly for simplification.  Compile
    tested only.
    
    Found by Linux Verification Center (linuxtesting.org).
    
    Fixes: 03b3bcd319b3 ("nvme: fix admin request_queue lifetime")
    Cc: stable@vger.kernel.org
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Fedor Pchelkin <pchelkin@ispras.ru>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nvmet-tcp: fix race between ICReq handling and queue teardown [+ + +]
Author: Chaitanya Kulkarni <kch@nvidia.com>
Date:   Wed Apr 8 00:51:31 2026 -0700

    nvmet-tcp: fix race between ICReq handling and queue teardown
    
    commit 5293a8882c549fab4a878bc76b0b6c951f980a61 upstream.
    
    nvmet_tcp_handle_icreq() updates queue->state after sending an
    Initialization Connection Response (ICResp), but it does so without
    serializing against target-side queue teardown.
    
    If an NVMe/TCP host sends an Initialization Connection Request
    (ICReq) and immediately closes the connection, target-side teardown
    may start in softirq context before io_work drains the already
    buffered ICReq. In that case, nvmet_tcp_schedule_release_queue()
    sets queue->state to NVMET_TCP_Q_DISCONNECTING and drops the queue
    reference under state_lock.
    
    If io_work later processes that ICReq, nvmet_tcp_handle_icreq() can
    still overwrite the state back to NVMET_TCP_Q_LIVE. That defeats the
    DISCONNECTING-state guard in nvmet_tcp_schedule_release_queue() and
    allows a later socket state change to re-enter teardown and issue a
    second kref_put() on an already released queue.
    
    The ICResp send failure path has the same problem. If teardown has
    already moved the queue to DISCONNECTING, a send error can still
    overwrite the state with NVMET_TCP_Q_FAILED, again reopening the
    window for a second teardown path to drop the queue reference.
    
    Fix this by serializing both post-send state transitions with
    state_lock and bailing out if teardown has already started.
    
    Use -ESHUTDOWN as an internal sentinel for that bail-out path rather
    than propagating it as a transport error like -ECONNRESET. Keep
    nvmet_tcp_socket_error() setting rcv_state to NVMET_TCP_RECV_ERR before
    honoring that sentinel so receive-side parsing stays quiesced until the
    existing release path completes.
    
    Fixes: c46a6465bac2 ("nvmet-tcp: add NVMe over TCP target driver")
    Cc: stable@vger.kernel.org
    Reported-by: Shivam Kumar <skumar47@syr.edu>
    Tested-by: Shivam Kumar <kumar.shivam43666@gmail.com>
    Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nvmet: avoid recursive nvmet-wq flush in nvmet_ctrl_free [+ + +]
Author: Chaitanya Kulkarni <kch@nvidia.com>
Date:   Wed Apr 8 17:56:47 2026 -0700

    nvmet: avoid recursive nvmet-wq flush in nvmet_ctrl_free
    
    commit aade8abd8b868b6ffa9697aadaea28ec7f65bee6 upstream.
    
    nvmet_tcp_release_queue_work() runs on nvmet-wq and can drop the
    final controller reference through nvmet_cq_put(). If that triggers
    nvmet_ctrl_free(), the teardown path flushes ctrl->async_event_work on
    the same nvmet-wq.
    
    Call chain:
    
     nvmet_tcp_schedule_release_queue()
       kref_put(&queue->kref, nvmet_tcp_release_queue)
         nvmet_tcp_release_queue()
           queue_work(nvmet_wq, &queue->release_work) <--- nvmet_wq
             process_one_work()
               nvmet_tcp_release_queue_work()
                 nvmet_cq_put(&queue->nvme_cq)
                   nvmet_cq_destroy()
                     nvmet_ctrl_put(cq->ctrl)
                       nvmet_ctrl_free()
                         flush_work(&ctrl->async_event_work) <--- nvmet_wq
    
                          Previously Scheduled by :-
                            nvmet_add_async_event
                              queue_work(nvmet_wq, &ctrl->async_event_work);
    
    This trips lockdep with a possible recursive locking warning.
    
    [ 5223.015876] run blktests nvme/003 at 2026-04-07 20:53:55
    [ 5223.061801] loop0: detected capacity change from 0 to 2097152
    [ 5223.072206] nvmet: adding nsid 1 to subsystem blktests-subsystem-1
    [ 5223.088368] nvmet_tcp: enabling port 0 (127.0.0.1:4420)
    [ 5223.126086] nvmet: Created discovery controller 1 for subsystem nqn.2014-08.org.nvmexpress.discovery for NQN nqn.2014-08.org.nvmexpress:uuid:0f01fb42-9f7f-4856-b0b3-51e60b8de349.
    [ 5223.128453] nvme nvme1: new ctrl: NQN "nqn.2014-08.org.nvmexpress.discovery", addr 127.0.0.1:4420, hostnqn: nqn.2014-08.org.nvmexpress:uuid:0f01fb42-9f7f-4856-b0b3-51e60b8de349
    [ 5233.199447] nvme nvme1: Removing ctrl: NQN "nqn.2014-08.org.nvmexpress.discovery"
    
    [ 5233.227718] ============================================
    [ 5233.231283] WARNING: possible recursive locking detected
    [ 5233.234696] 7.0.0-rc3nvme+ #20 Tainted: G           O     N
    [ 5233.238434] --------------------------------------------
    [ 5233.241852] kworker/u192:6/2413 is trying to acquire lock:
    [ 5233.245429] ffff888111632548 ((wq_completion)nvmet-wq){+.+.}-{0:0}, at: touch_wq_lockdep_map+0x26/0x90
    [ 5233.251438]
                   but task is already holding lock:
    [ 5233.255254] ffff888111632548 ((wq_completion)nvmet-wq){+.+.}-{0:0}, at: process_one_work+0x5cc/0x6e0
    [ 5233.261125]
                   other info that might help us debug this:
    [ 5233.265333]  Possible unsafe locking scenario:
    
    [ 5233.269217]        CPU0
    [ 5233.270795]        ----
    [ 5233.272436]   lock((wq_completion)nvmet-wq);
    [ 5233.275241]   lock((wq_completion)nvmet-wq);
    [ 5233.278020]
                    *** DEADLOCK ***
    
    [ 5233.281793]  May be due to missing lock nesting notation
    
    [ 5233.286195] 3 locks held by kworker/u192:6/2413:
    [ 5233.289192]  #0: ffff888111632548 ((wq_completion)nvmet-wq){+.+.}-{0:0}, at: process_one_work+0x5cc/0x6e0
    [ 5233.294569]  #1: ffffc9000e2a7e40 ((work_completion)(&queue->release_work)){+.+.}-{0:0}, at: process_one_work+0x1c5/0x6e0
    [ 5233.300128]  #2: ffffffff82d7dc40 (rcu_read_lock){....}-{1:3}, at: __flush_work+0x62/0x530
    [ 5233.304290]
                   stack backtrace:
    [ 5233.306520] CPU: 4 UID: 0 PID: 2413 Comm: kworker/u192:6 Tainted: G           O     N  7.0.0-rc3nvme+ #20 PREEMPT(full)
    [ 5233.306524] Tainted: [O]=OOT_MODULE, [N]=TEST
    [ 5233.306525] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.17.0-0-gb52ca86e094d-prebuilt.qemu.org 04/01/2014
    [ 5233.306527] Workqueue: nvmet-wq nvmet_tcp_release_queue_work [nvmet_tcp]
    [ 5233.306532] Call Trace:
    [ 5233.306534]  <TASK>
    [ 5233.306536]  dump_stack_lvl+0x73/0xb0
    [ 5233.306552]  print_deadlock_bug+0x225/0x2f0
    [ 5233.306556]  __lock_acquire+0x13f0/0x2290
    [ 5233.306563]  lock_acquire+0xd0/0x300
    [ 5233.306565]  ? touch_wq_lockdep_map+0x26/0x90
    [ 5233.306571]  ? __flush_work+0x20b/0x530
    [ 5233.306573]  ? touch_wq_lockdep_map+0x26/0x90
    [ 5233.306577]  touch_wq_lockdep_map+0x3b/0x90
    [ 5233.306580]  ? touch_wq_lockdep_map+0x26/0x90
    [ 5233.306583]  ? __flush_work+0x20b/0x530
    [ 5233.306585]  __flush_work+0x268/0x530
    [ 5233.306588]  ? __pfx_wq_barrier_func+0x10/0x10
    [ 5233.306594]  ? xen_error_entry+0x30/0x60
    [ 5233.306600]  nvmet_ctrl_free+0x140/0x310 [nvmet]
    [ 5233.306617]  nvmet_cq_put+0x74/0x90 [nvmet]
    [ 5233.306629]  nvmet_tcp_release_queue_work+0x19f/0x360 [nvmet_tcp]
    [ 5233.306634]  process_one_work+0x206/0x6e0
    [ 5233.306640]  worker_thread+0x184/0x320
    [ 5233.306643]  ? __pfx_worker_thread+0x10/0x10
    [ 5233.306646]  kthread+0xf1/0x130
    [ 5233.306648]  ? __pfx_kthread+0x10/0x10
    [ 5233.306651]  ret_from_fork+0x355/0x450
    [ 5233.306653]  ? __pfx_kthread+0x10/0x10
    [ 5233.306656]  ret_from_fork_asm+0x1a/0x30
    [ 5233.306664]  </TASK>
    
    There is also no need to flush async_event_work from controller
    teardown. The admin queue teardown already fails outstanding AER
    requests before the final controller put :-
    
     nvmet_sq_destroy(admin sq)
        nvmet_async_events_failall(ctrl)
    
    The controller has already been removed from the subsystem list before
    nvmet_ctrl_free() quiesces outstanding work.
    
    Replace flush_work() with cancel_work_sync() so a pending
    async_event_work item is canceled and a running instance is waited on
    without recursing into the same workqueue.
    
    Fixes: 06406d81a2d7 ("nvmet: cancel fatal error and flush async work before free controller")
    Cc: stable@vger.kernel.org
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
octeon_ep_vf: add NULL check for napi_build_skb() [+ + +]
Author: David Carlier <devnexen@gmail.com>
Date:   Tue May 5 05:54:50 2026 -0400

    octeon_ep_vf: add NULL check for napi_build_skb()
    
    [ Upstream commit dd66b42854705e4e4ee7f14d260f86c578bed3e3 ]
    
    napi_build_skb() can return NULL on allocation failure. In
    __octep_vf_oq_process_rx(), the result is used directly without a NULL
    check in both the single-buffer and multi-fragment paths, leading to a
    NULL pointer dereference.
    
    Add NULL checks after both napi_build_skb() calls, properly advancing
    descriptors and consuming remaining fragments on failure.
    
    Fixes: 1cd3b407977c ("octeon_ep_vf: add Tx/Rx processing and interrupt support")
    Cc: stable@vger.kernel.org
    Signed-off-by: David Carlier <devnexen@gmail.com>
    Link: https://patch.msgid.link/20260409184009.930359-3-devnexen@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ inlined missing octep_vf_oq_next_idx() helper as read_idx++ with wraparound ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
openvswitch: vport: fix self-deadlock on release of tunnel ports [+ + +]
Author: Ilya Maximets <i.maximets@ovn.org>
Date:   Fri May 1 01:38:37 2026 +0200

    openvswitch: vport: fix self-deadlock on release of tunnel ports
    
    commit aa69918bd418e700309fdd08509dba324fb24296 upstream.
    
    vports are used concurrently and protected by RCU, so netdev_put()
    must happen after the RCU grace period.  So, either in an RCU call or
    after the synchronize_net().  The rtnl_delete_link() must happen under
    RTNL and so can't be executed in RCU context.  Calling synchronize_net()
    while holding RTNL is not a good idea for performance and system
    stability under load in general, so calling netdev_put() in RCU call
    is the right solution here.
    
    However,
    when the device is deleted, rtnl_unlock() will call netdev_run_todo()
    and block until all the references are gone.  In the current code this
    means that we never reach the call_rcu() and the vport is never freed
    and the reference is never released, causing a self-deadlock on device
    removal.
    
    Fix that by moving the rcu_call() before the rtnl_unlock(), so the
    scheduled RCU callback will be executed when synchronize_net() is
    called from the rtnl_unlock()->netdev_run_todo() while the RTNL itself
    is already released.
    
    Fixes: 6931d21f87bc ("openvswitch: defer tunnel netdev_put to RCU release")
    Cc: stable@vger.kernel.org
    Acked-by: Eelco Chaudron <echaudro@redhat.com>
    Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
    Acked-by: Aaron Conole <aconole@redhat.com>
    Link: https://patch.msgid.link/20260430233848.440994-2-i.maximets@ovn.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
parisc: Fix IRQ leak in LASI driver [+ + +]
Author: Hongling Zeng <zenghongling@kylinos.cn>
Date:   Sun May 3 12:17:44 2026 +0800

    parisc: Fix IRQ leak in LASI driver
    
    commit 37b0dc5e279f35036fb638d1e187197b6c05a76d upstream.
    
    When request_irq() succeeds but gsc_common_setup() fails later,
    the IRQ is never released. Fix this by adding proper error handling
    with goto labels to ensure resources are released in LIFO order.
    
    Detected by Smatch:
      drivers/parisc/lasi.c:216 lasi_init_chip() warn: 'lasi->gsc_irq.irq'
    from request_irq() not released on lines: 207.
    
    Reported-by: kernel test robot <lkp@intel.com>
    Reported-by: Dan Carpenter <error27@gmail.com>
    Closes: https://lore.kernel.org/r/202604180957.4QdAIxP6-lkp@intel.com/
    Signed-off-by: Hongling Zeng <zenghongling@kylinos.cn>
    Cc: stable@vger.kernel.org
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
PCI/AER: Clear only error bits in PCIe Device Status [+ + +]
Author: Shuai Xue <xueshuai@linux.alibaba.com>
Date:   Wed Feb 11 20:46:24 2026 +0800

    PCI/AER: Clear only error bits in PCIe Device Status
    
    commit a8aeea1bf3c80cc87983689e0118770e019bd4f3 upstream.
    
    Currently, pcie_clear_device_status() clears the entire PCIe Device Status
    register (PCI_EXP_DEVSTA) by writing back the value read from the register,
    which affects not only the error status bits but also other writable bits.
    
    According to PCIe r7.0, sec 7.5.3.5, this register contains:
    
      - RW1C error status bits (CED, NFED, FED, URD at bits 0-3): These are the
        four error status bits that need to be cleared.
    
      - Read-only bits (AUXPD at bit 4, TRPND at bit 5): Writing to these has
        no effect.
    
      - Emergency Power Reduction Detected (bit 6): A RW1C non-error bit
        introduced in PCIe r5.0 (2019). This is currently the only writable
        non-error bit in the Device Status register. Unconditionally clearing
        this bit can interfere with other software components that rely on this
        power management indication.
    
      - Reserved bits (RsvdZ): These bits are required to be written as zero.
        Writing 1s to them (as the current implementation may do) violates the
        specification.
    
    To prevent unintended side effects, modify pcie_clear_device_status() to
    only write 1s to the four error status bits (CED, NFED, FED, URD), leaving
    the Emergency Power Reduction Detected bit and reserved bits unaffected.
    
    Fixes: ec752f5d54d7 ("PCI/AER: Clear device status bits during ERR_FATAL and ERR_NONFATAL")
    Suggested-by: Lukas Wunner <lukas@wunner.de>
    Signed-off-by: Shuai Xue <xueshuai@linux.alibaba.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
    Reviewed-by: Lukas Wunner <lukas@wunner.de>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260211124624.49656-1-xueshuai@linux.alibaba.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

PCI/AER: Stop ruling out unbound devices as error source [+ + +]
Author: Lukas Wunner <lukas@wunner.de>
Date:   Fri Mar 27 10:56:43 2026 +0100

    PCI/AER: Stop ruling out unbound devices as error source
    
    commit 1ab4a3c805084d752ec571efc78272295a9f2f74 upstream.
    
    When searching for the error source, the AER driver rules out devices whose
    enable_cnt is zero.  This was introduced in 2009 by commit 28eb27cf0839
    ("PCI AER: support invalid error source IDs") without providing a
    rationale.
    
    Drivers typically call pci_enable_device() on probe, hence the enable_cnt
    check essentially filters out unbound devices.  At the time of the commit,
    drivers had to opt in to AER by calling pci_enable_pcie_error_reporting()
    and so any AER-enabled device could be assumed to be bound to a driver.
    The check thus made sense because it allowed skipping config space accesses
    to devices which were known not to be the error source.
    
    But since 2022, AER is universally enabled on all devices when they are
    enumerated, cf. commit f26e58bf6f54 ("PCI/AER: Enable error reporting when
    AER is native").
    
    Errors may very well be reported by unbound devices, e.g. due to link
    instability.  By ruling them out as error source, errors reported by them
    are neither logged nor cleared.  When they do get bound and another error
    occurs, the earlier error is reported together with the new error, which
    may confuse users.  Stop doing so.
    
    Fixes: f26e58bf6f54 ("PCI/AER: Enable error reporting when AER is native")
    Signed-off-by: Lukas Wunner <lukas@wunner.de>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Stefan Roese <stefan.roese@mailbox.org>
    Cc: stable@vger.kernel.org # v6.0+
    Link: https://patch.msgid.link/734338c2e8b669db5a5a3b45d34131b55ffebfca.1774605029.git.lukas@wunner.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
PCI/ASPM: Fix pci_clear_and_set_config_dword() usage [+ + +]
Author: Lukas Wunner <lukas@wunner.de>
Date:   Mon Feb 16 08:46:13 2026 +0100

    PCI/ASPM: Fix pci_clear_and_set_config_dword() usage
    
    commit cc33985d26c92a5c908c0185239c59ec35b8637c upstream.
    
    When aspm_calc_l12_info() programs the L1 PM Substates Control 1 register
    fields Common_Mode_Restore_Time, LTR_L1.2_THRESHOLD_Value and _Scale, it
    invokes pci_clear_and_set_config_dword() in an incorrect way:
    
    For the bits to clear it selects those corresponding to the field.  So far
    so good.  But for the bits to set it passes a full register value.
    pci_clear_and_set_config_dword() performs a boolean OR operation which
    sets all bits of that value, not just the ones that were just cleared.
    
    Thus, when setting the LTR_L1.2_THRESHOLD_Value and _Scale on the child of
    an ASPM link, aspm_calc_l12_info() also sets the Common_Mode_Restore_Time.
    That's a spec violation:  PCIe r7.0 sec 7.8.3.3 says this field is RsvdP
    for Upstream Ports.  On Adrià's Pixelbook Eve, Common_Mode_Restore_Time
    of the Intel 7265 "Stone Peak" wifi card is zero, yet aspm_calc_l12_info()
    does not preserve the zero bits but instead programs the value calculated
    for the Root Port into the wifi card.
    
    Likewise, when setting the Common_Mode_Restore_Time on the Root Port,
    aspm_calc_l12_info() also changes the LTR_L1.2_THRESHOLD_Value and _Scale
    from the initial 163840 nsec to 237568 nsec (due to ORing those fields),
    only to reduce it afterwards to 106496 nsec.
    
    Amend all invocations of pci_clear_and_set_config_dword() to only set bits
    which are cleared.
    
    Finally, when setting the T_POWER_ON_Value and _Scale on the Root Port and
    the wifi card, aspm_calc_l12_info() fails to preserve bits declared RsvdP
    and instead overwrites them with zeroes.  Replace pci_write_config_dword()
    with pci_clear_and_set_config_dword() to avoid this.
    
    Fixes: aeda9adebab8 ("PCI/ASPM: Configure L1 substate settings")
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=220705#c22
    Signed-off-by: Lukas Wunner <lukas@wunner.de>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Tested-by: Adrià Vilanova Martínez <me@avm99963.com>
    Cc: stable@vger.kernel.org # v4.11+
    Link: https://patch.msgid.link/5c1752d7512eed0f4ea57b84b12d7ee08ca61fc5.1771226659.git.lukas@wunner.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
PCI: Update saved_config_space upon resource assignment [+ + +]
Author: Lukas Wunner <lukas@wunner.de>
Date:   Wed Apr 15 17:56:06 2026 +0200

    PCI: Update saved_config_space upon resource assignment
    
    commit 909f7bf9b080c10df3c3b38533906dbf09ff1d8b upstream.
    
    Bernd reports passthrough failure of a Digital Devices Cine S2 V6 DVB
    adapter plugged into an ASRock X570S PG Riptide board with BIOS version
    P5.41 (09/07/2023):
    
      ddbridge 0000:05:00.0: detected Digital Devices Cine S2 V6 DVB adapter
      ddbridge 0000:05:00.0: cannot read registers
      ddbridge 0000:05:00.0: fail
    
    BIOS assigns an incorrect BAR to the DVB adapter which doesn't fit into the
    upstream bridge window.  The kernel corrects the BAR assignment:
    
      pci 0000:07:00.0: BAR 0 [mem 0xfffffffffc500000-0xfffffffffc50ffff 64bit]: can't claim; no compatible bridge window
      pci 0000:07:00.0: BAR 0 [mem 0xfc500000-0xfc50ffff 64bit]: assigned
    
    Correction of the BAR assignment happens in an x86-specific fs_initcall,
    pcibios_assign_resources(), after device enumeration in a subsys_initcall.
    This order was introduced at the behest of Linus in 2004:
    
      https://git.kernel.org/tglx/history/c/a06a30144bbc
    
    No other architecture performs such a late BAR correction.
    
    Bernd bisected the issue to commit a2f1e22390ac ("PCI/ERR: Ensure error
    recoverability at all times"), but it only occurs in the absence of commit
    4d4c10f763d7 ("PCI: Explicitly put devices into D0 when initializing").
    This combination exists in stable kernel v6.12.70, but not in mainline,
    hence Bernd cannot reproduce the issue with mainline.
    
    Since a2f1e22390ac, config space is saved on enumeration, prior to BAR
    correction.  Upon passthrough, the corrected BAR is overwritten with the
    incorrect saved value by:
    
      vfio_pci_core_register_device()
        vfio_pci_set_power_state()
          pci_restore_state()
    
    But only if the device's current_state is PCI_UNKNOWN, as it was prior to
    commit 4d4c10f763d7.  Since the commit, it is PCI_D0, which changes the
    behavior of vfio_pci_set_power_state() to no longer restore the state
    without saving it first.
    
    Alexandre is reporting the same issue as Bernd, but in his case, mainline
    is affected as well.  The difference is that on Alexandre's system, the
    host kernel binds a driver to the device which is unbound prior to
    passthrough, whereas on Bernd's system no driver gets bound by the host
    kernel.
    
    Unbinding sets current_state to PCI_UNKNOWN in pci_device_remove(), so when
    vfio-pci is subsequently bound to the device, pci_restore_state() is once
    again called without invoking pci_save_state() first.
    
    To robustly fix the issue, always update saved_config_space upon resource
    assignment.
    
    Reported-by: Bernd Schumacher <bernd@bschu.de>
    Closes: https://lore.kernel.org/r/acfZrlP0Ua_5D3U4@eldamar.lan/
    Reported-by: Alexandre N. <an.tech@mailo.com>
    Closes: https://lore.kernel.org/r/dd3c3358-de0f-4a56-9c81-04aceaab4058@mailo.com/
    Fixes: a2f1e22390ac ("PCI/ERR: Ensure error recoverability at all times")
    Signed-off-by: Lukas Wunner <lukas@wunner.de>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Tested-by: Bernd Schumacher <bernd@bschu.de>
    Tested-by: Alexandre N. <an.tech@mailo.com>
    Cc: stable@vger.kernel.org # v6.12+
    Link: https://patch.msgid.link/febc3f354e0c1f5a9f5b3ee9ffddaa44caccf651.1776268054.git.lukas@wunner.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
pmdomain: core: Fix detach procedure for virtual devices in genpd [+ + +]
Author: Ulf Hansson <ulfh@kernel.org>
Date:   Fri Apr 17 13:13:31 2026 +0200

    pmdomain: core: Fix detach procedure for virtual devices in genpd
    
    commit 26735dfdd8930d9ef1fa92e590a9bf77726efdf6 upstream.
    
    If a device is attached to a PM domain through genpd_dev_pm_attach_by_id(),
    genpd calls pm_runtime_enable() for the corresponding virtual device that
    it registers. While this avoids boilerplate code in drivers, there is no
    corresponding call to pm_runtime_disable() in genpd_dev_pm_detach().
    
    This means these virtual devices are typically detached from its genpd,
    while runtime PM remains enabled for them, which is not how things are
    designed to work. In worst cases it may lead to critical errors, like a
    NULL pointer dereference bug in genpd_runtime_suspend(), which was recently
    reported. For another case, we may end up keeping an unnecessary vote for a
    performance state for the device.
    
    To fix these problems, let's add this missing call to pm_runtime_disable()
    in genpd_dev_pm_detach().
    
    Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Closes: https://lore.kernel.org/all/CAMuHMdWapT40hV3c+CSBqFOW05aWcV1a6v_NiJYgoYi0i9_PDQ@mail.gmail.com/
    Fixes: 3c095f32a92b ("PM / Domains: Add support for multi PM domains per device to genpd")
    Cc: stable@vger.kernel.org
    Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
power: supply: max17042: avoid overflow when determining health [+ + +]
Author: André Draszik <andre.draszik@linaro.org>
Date:   Mon Mar 2 13:32:05 2026 +0000

    power: supply: max17042: avoid overflow when determining health
    
    commit 9a44949da669708f19d29141e65b3ac774d08f5a upstream.
    
    If vmax has the default value of INT_MAX (e.g. because not specified in
    DT), battery health is reported as over-voltage. This is because adding
    any value to vmax (the vmax tolerance in this case) causes it to wrap
    around, making it negative and smaller than the measured battery
    voltage.
    
    Avoid that by using size_add().
    
    Fixes: edd4ab055931 ("power: max17042_battery: add HEALTH and TEMP_* properties support")
    Cc: stable@vger.kernel.org
    Signed-off-by: André Draszik <andre.draszik@linaro.org>
    Link: https://patch.msgid.link/20260302-max77759-fg-v3-6-3c5f01dbda23@linaro.org
    Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
powerpc/kdump: fix KASAN sanitization flag for core_$(BITS).o [+ + +]
Author: Sourabh Jain <sourabhjain@linux.ibm.com>
Date:   Tue Apr 7 18:13:44 2026 +0530

    powerpc/kdump: fix KASAN sanitization flag for core_$(BITS).o
    
    commit b3a97f9484080c6e71db9e803e3cc1bb372a9bc7 upstream.
    
    KASAN instrumentation is intended to be disabled for the kexec core
    code, but the existing Makefile entry misses the object suffix. As a
    result, the flag is not applied correctly to core_$(BITS).o.
    
    So when KASAN is enabled, kexec_copy_flush and copy_segments in
    kexec/core_64.c are instrumented, which can result in accesses to
    shadow memory via normal address translation paths. Since these run
    with the MMU disabled, such accesses may trigger page faults
    (bad_page_fault) that cannot be handled in the kdump path, ultimately
    causing a hang and preventing the kdump kernel from booting. The same
    is true for kexec as well, since the same functions are used there.
    
    Update the entry to include the “.o” suffix so that KASAN
    instrumentation is properly disabled for this object file.
    
    Fixes: 2ab2d5794f14 ("powerpc/kasan: Disable address sanitization in kexec paths")
    Reported-by: Venkat Rao Bagalkote <venkat88@linux.ibm.com>
    Closes: https://lore.kernel.org/all/1dee8891-8bcc-46b4-93f3-fc3a774abd5b@linux.ibm.com/
    Cc: stable@vger.kernel.org
    Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
    Tested-by: Venkat Rao Bagalkote <venkat88@linux.ibm.com>
    Acked-by: Mahesh Salgaonkar <mahesh@linux.ibm.com>
    Reviewed-by: Aboorva Devarajan <aboorvad@linux.ibm.com>
    Tested-by: Aboorva Devarajan <aboorvad@linux.ibm.com>
    Signed-off-by: Sourabh Jain <sourabhjain@linux.ibm.com>
    Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
    Link: https://patch.msgid.link/20260407124349.1698552-1-sourabhjain@linux.ibm.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
printk: add print_hex_dump_devel() [+ + +]
Author: Thorsten Blum <thorsten.blum@linux.dev>
Date:   Sat May 9 22:34:41 2026 -0400

    printk: add print_hex_dump_devel()
    
    [ Upstream commit d134feeb5df33fbf77f482f52a366a44642dba09 ]
    
    Add print_hex_dump_devel() as the hex dump equivalent of pr_devel(),
    which emits output only when DEBUG is enabled, but keeps call sites
    compiled otherwise.
    
    Suggested-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
    Reviewed-by: John Ogness <john.ogness@linutronix.de>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Stable-dep-of: 177730a273b1 ("crypto: caam - guard HMAC key hex dumps in hash_digest_key")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
RDMA/hns: Fix unlocked call to hns_roce_qp_remove() [+ + +]
Author: Jason Gunthorpe <jgg@ziepe.ca>
Date:   Tue Apr 28 13:17:48 2026 -0300

    RDMA/hns: Fix unlocked call to hns_roce_qp_remove()
    
    commit 0c99acbc8b6c6dd526ae475a48ee1897b61072fb upstream.
    
    Sashiko points out that hns_roce_qp_remove() requires the caller to hold
    locks.  The error flow in hns_roce_create_qp_common() doesn't hold those
    locks for the error unwind so it risks corrupting memory.
    
    Grab the same locks the other two callers use.
    
    Cc: stable@vger.kernel.org
    Fixes: e088a685eae9 ("RDMA/hns: Support rq record doorbell for the user space")
    Link: https://sashiko.dev/#/patchset/0-v2-1c49eeb88c48%2B91-rdma_udata_rep_jgg%40nvidia.com?part=9
    Link: https://patch.msgid.link/r/15-v1-41f3135e5565+9d2-rdma_ai_fixes1_jgg@nvidia.com
    Reviewed-by: Junxian Huang <huangjunxian6@hisilicon.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
RDMA/mana: Fix error unwind in mana_ib_create_qp_rss() [+ + +]
Author: Jason Gunthorpe <jgg@ziepe.ca>
Date:   Tue Apr 28 13:17:40 2026 -0300

    RDMA/mana: Fix error unwind in mana_ib_create_qp_rss()
    
    commit 6aaa978c6b6218cfac15fe1dab17c76fe229ce3f upstream.
    
    Sashiko points out that mana_ib_cfg_vport_steering() is leaked, the normal
    destroy path cleans it up.
    
    Cc: stable@vger.kernel.org
    Fixes: 0266a177631d ("RDMA/mana_ib: Add a driver for Microsoft Azure Network Adapter")
    Link: https://sashiko.dev/#/patchset/0-v1-e911b76a94d1%2B65d95-rdma_udata_rep_jgg%40nvidia.com?part=4
    Link: https://patch.msgid.link/r/7-v1-41f3135e5565+9d2-rdma_ai_fixes1_jgg@nvidia.com
    Reviewed-by: Long Li <longli@microsoft.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

RDMA/mana: Fix mana_destroy_wq_obj() cleanup in mana_ib_create_qp_rss() [+ + +]
Author: Jason Gunthorpe <jgg@ziepe.ca>
Date:   Tue Apr 28 13:17:39 2026 -0300

    RDMA/mana: Fix mana_destroy_wq_obj() cleanup in mana_ib_create_qp_rss()
    
    commit 34ecf795692ee57c393109f4a24ccc313091e137 upstream.
    
    Sashiko points out there are two bugs here in the error unwind flow, both
    related to how the WQ table is unwound.
    
    First there is a double i-- on the first failure path due to the while loop
    having a i--, remove it.
    
    Second if mana_ib_install_cq_cb() fails then mana_create_wq_obj() is not
    undone due to the above i--.
    
    Cc: stable@vger.kernel.org
    Fixes: c15d7802a424 ("RDMA/mana_ib: Add CQ interrupt support for RAW QP")
    Link: https://sashiko.dev/#/patchset/0-v2-1c49eeb88c48%2B91-rdma_udata_rep_jgg%40nvidia.com?part=1
    Link: https://patch.msgid.link/r/6-v1-41f3135e5565+9d2-rdma_ai_fixes1_jgg@nvidia.com
    Reviewed-by: Long Li <longli@microsoft.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

RDMA/mana: Validate rx_hash_key_len [+ + +]
Author: Jason Gunthorpe <jgg@ziepe.ca>
Date:   Tue Apr 28 13:17:37 2026 -0300

    RDMA/mana: Validate rx_hash_key_len
    
    commit 6dd2d4ad9c8429523b1c220c5132bd551c006425 upstream.
    
    Sashiko points out that rx_hash_key_len comes from a uAPI structure and is
    blindly passed to memcpy, allowing the userspace to trash kernel
    memory. Bounds check it so the memcpy cannot overflow.
    
    Cc: stable@vger.kernel.org
    Fixes: 0266a177631d ("RDMA/mana_ib: Add a driver for Microsoft Azure Network Adapter")
    Link: https://sashiko.dev/#/patchset/0-v2-1c49eeb88c48%2B91-rdma_udata_rep_jgg%40nvidia.com?part=1
    Link: https://patch.msgid.link/r/4-v1-41f3135e5565+9d2-rdma_ai_fixes1_jgg@nvidia.com
    Reviewed-by: Long Li <longli@microsoft.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
RDMA/mlx4: Fix resource leak on error in mlx4_ib_create_srq() [+ + +]
Author: Jason Gunthorpe <jgg@ziepe.ca>
Date:   Tue Apr 28 13:17:44 2026 -0300

    RDMA/mlx4: Fix resource leak on error in mlx4_ib_create_srq()
    
    commit c54c7e4cb679c0aaa1cb489b9c3f2cd98e63a44c upstream.
    
    Sashiko points out that mlx4_srq_alloc() was not undone during error
    unwind, add the missing call to mlx4_srq_free().
    
    Cc: stable@vger.kernel.org
    Fixes: 225c7b1feef1 ("IB/mlx4: Add a driver Mellanox ConnectX InfiniBand adapters")
    Link: https://sashiko.dev/#/patchset/0-v1-e911b76a94d1%2B65d95-rdma_udata_rep_jgg%40nvidia.com?part=8
    Link: https://patch.msgid.link/r/11-v1-41f3135e5565+9d2-rdma_ai_fixes1_jgg@nvidia.com
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
RDMA/mlx5: Fix error path fall-through in mlx5_ib_dev_res_srq_init() [+ + +]
Author: Junrui Luo <moonafterrain@outlook.com>
Date:   Fri Apr 24 13:51:02 2026 +0800

    RDMA/mlx5: Fix error path fall-through in mlx5_ib_dev_res_srq_init()
    
    commit c488df06bd552bb8b6e14fa0cfd5ad986c6e9525 upstream.
    
    mlx5_ib_dev_res_srq_init() allocates two SRQs, s0 and s1. When
    ib_create_srq() fails for s1, the error branch destroys s0 but falls
    through and unconditionally assigns the freed s0 and the ERR_PTR s1 to
    devr->s0 and devr->s1.
    
    This leads to several problems: the lock-free fast path checks
    "if (devr->s1) return 0;" and treats the ERR_PTR as already initialised;
    users in mlx5_ib_create_qp() dereference the freed SRQ or ERR_PTR via
    to_msrq(devr->s0)->msrq.srqn; and mlx5_ib_dev_res_cleanup() dereferences
    the ERR_PTR and double-frees s0 on teardown.
    
    Fix by adding the same `goto unlock` in the s1 failure path.
    
    Cc: stable@vger.kernel.org
    Fixes: 5895e70f2e6e ("IB/mlx5: Allocate resources just before first QP/SRQ is created")
    Link: https://patch.msgid.link/r/SYBPR01MB7881E1E0970268BD69C0BA75AF2B2@SYBPR01MB7881.ausprd01.prod.outlook.com
    Reported-by: Yuhao Jiang <danisjiang@gmail.com>
    Signed-off-by: Junrui Luo <moonafterrain@outlook.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
RDMA/ocrdma: Don't NULL deref uctx on errors in ocrdma_copy_pd_uresp() [+ + +]
Author: Jason Gunthorpe <jgg@ziepe.ca>
Date:   Tue Apr 28 13:17:42 2026 -0300

    RDMA/ocrdma: Don't NULL deref uctx on errors in ocrdma_copy_pd_uresp()
    
    commit 34fbf48cf3b410d2a6e8c586fa952a36331ca5ba upstream.
    
    Sashiko points out that pd->uctx isn't initialized until late in the
    function so all these error flow references are NULL and will crash. Use
    the uctx that isn't NULL.
    
    Cc: stable@vger.kernel.org
    Fixes: fe2caefcdf58 ("RDMA/ocrdma: Add driver for Emulex OneConnect IBoE RDMA adapter")
    Link: https://sashiko.dev/#/patchset/0-v1-e911b76a94d1%2B65d95-rdma_udata_rep_jgg%40nvidia.com?part=4
    Link: https://patch.msgid.link/r/9-v1-41f3135e5565+9d2-rdma_ai_fixes1_jgg@nvidia.com
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
RDMA/rxe: Reject non-8-byte ATOMIC_WRITE payloads [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Sat Apr 18 12:21:41 2026 -0400

    RDMA/rxe: Reject non-8-byte ATOMIC_WRITE payloads
    
    commit 1114c87aa6f195cf07da55a27b2122ae26557b26 upstream.
    
    atomic_write_reply() at drivers/infiniband/sw/rxe/rxe_resp.c
    unconditionally dereferences 8 bytes at payload_addr(pkt):
    
        value = *(u64 *)payload_addr(pkt);
    
    check_rkey() previously accepted an ATOMIC_WRITE request with pktlen ==
    resid == 0 because the length validation only compared pktlen against
    resid. A remote initiator that sets the RETH length to 0 therefore reaches
    atomic_write_reply() with a zero-byte logical payload, and the responder
    reads sizeof(u64) bytes from past the logical end of the packet into
    skb->head tailroom, then writes those 8 bytes into the attacker's MR via
    rxe_mr_do_atomic_write(). That is a remote disclosure of 4 bytes of kernel
    tailroom per probe (the other 4 bytes are the packet's own trailing ICRC).
    
    IBA oA19-28 defines ATOMIC_WRITE as exactly 8 bytes. Anything else is
    protocol-invalid. Hoist a strict length check into check_rkey() so the
    responder never reaches the unchecked dereference, and keep the existing
    WRITE-family length logic for the normal RDMA WRITE path.
    
    Reproduced on mainline with an unmodified rxe driver: a sustained
    zero-length ATOMIC_WRITE probe repeatedly leaks adjacent skb head-buffer
    bytes into the attacker's MR, including recognisable kernel strings and
    partial kernel-direct-map pointer words.  With this patch applied the
    responder rejects the PDU and the MR stays all-zero.
    
    Cc: stable@vger.kernel.org
    Fixes: 034e285f8b99 ("RDMA/rxe: Make responder support atomic write on RC service")
    Link: https://patch.msgid.link/r/20260418162141.3610201-1-michael.bommarito@gmail.com
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Reviewed-by: Zhu Yanjun <yanjun.zhu@linux.dev>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

RDMA/rxe: Reject unknown opcodes before ICRC processing [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Tue Apr 14 07:15:55 2026 -0400

    RDMA/rxe: Reject unknown opcodes before ICRC processing
    
    commit 4c6f86d85d03cdb33addce86aa69aa795ca6c47a upstream.
    
    Even after applying commit 7244491dab34 ("RDMA/rxe: Validate pad and ICRC
    before payload_size() in rxe_rcv"), a single unauthenticated UDP packet
    can still trigger panic.  That patch handled payload_size() underflow only
    for valid opcodes with short packets, not for packets carrying an unknown
    opcode.  The unknown-opcode OOB read described below predates that commit
    and reaches back to the initial Soft RoCE driver.
    
    The check added there reads
    
        pkt->paylen < header_size(pkt) + bth_pad(pkt) + RXE_ICRC_SIZE
    
    where header_size(pkt) expands to rxe_opcode[pkt->opcode].length.  The
    rxe_opcode[] array has 256 entries but is only populated for defined IB
    opcodes; any other entry (for example opcode 0xff) is zero-initialized, so
    length == 0 and the check degenerates to
    
        pkt->paylen < 0 + bth_pad(pkt) + RXE_ICRC_SIZE
    
    which does not constrain pkt->paylen enough.  rxe_icrc_hdr() then computes
    
        rxe_opcode[pkt->opcode].length - RXE_BTH_BYTES
    
    which underflows when length == 0 and passes a huge value to rxe_crc32(),
    causing an out-of-bounds read of the skb payload.
    
    Reproduced on v7.0-rc7 with that fix applied, QEMU/KVM with
    CONFIG_RDMA_RXE=y and CONFIG_KASAN=y, after
    
        rdma link add rxe0 type rxe netdev eth0
    
    A single 48-byte UDP packet to port 4791 with BTH opcode=0xff and
    QPN=IB_MULTICAST_QPN triggers:
    
        BUG: KASAN: slab-out-of-bounds in crc32_le+0x115/0x170
        Read of size 1 at addr ...
        The buggy address is located 0 bytes to the right of
         allocated 704-byte region
        Call Trace:
         crc32_le+0x115/0x170
         rxe_icrc_hdr.isra.0+0x226/0x300
         rxe_icrc_check+0x13f/0x3a0
         rxe_rcv+0x6e1/0x16e0
         rxe_udp_encap_recv+0x20a/0x320
         udp_queue_rcv_one_skb+0x7ed/0x12c0
    
    Subsequent packets with the same shape fault on unmapped memory and panic
    the kernel.  The trigger requires only module load and "rdma link add"; no
    QP, no connection, and no authentication.
    
    Fix this by rejecting packets whose opcode has no rxe_opcode[] entry,
    detected via the zero mask or zero length, before any length arithmetic
    runs.
    
    Cc: stable@vger.kernel.org
    Fixes: 8700e3e7c485 ("Soft RoCE driver")
    Link: https://patch.msgid.link/r/20260414111555.3386793-1-michael.bommarito@gmail.com
    Assisted-by: Claude:claude-opus-4-6
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Reviewed-by: Zhu Yanjun <yanjun.zhu@linux.dev>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
RDMA/vmw_pvrdma: Fix double free on pvrdma_alloc_ucontext() error path [+ + +]
Author: Jason Gunthorpe <jgg@ziepe.ca>
Date:   Tue Apr 28 13:17:43 2026 -0300

    RDMA/vmw_pvrdma: Fix double free on pvrdma_alloc_ucontext() error path
    
    commit e38e86995df27f1f854063dab1f0c6a513db3faf upstream.
    
    Sashiko points out that pvrdma_uar_free() is already called within
    pvrdma_dealloc_ucontext(), so calling it before triggers a double free.
    
    Cc: stable@vger.kernel.org
    Fixes: 29c8d9eba550 ("IB: Add vmw_pvrdma driver")
    Link: https://sashiko.dev/#/patchset/0-v1-e911b76a94d1%2B65d95-rdma_udata_rep_jgg%40nvidia.com?part=4
    Link: https://patch.msgid.link/r/10-v1-41f3135e5565+9d2-rdma_ai_fixes1_jgg@nvidia.com
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rxrpc: Also unshare DATA/RESPONSE packets when paged frags are present [+ + +]
Author: Hyunwoo Kim <imv4bel@gmail.com>
Date:   Mon May 11 15:41:19 2026 +0800

    rxrpc: Also unshare DATA/RESPONSE packets when paged frags are present
    
    commit aa54b1d27fe0c2b78e664a34fd0fdf7cd1960d71 upstream.
    
    The DATA-packet handler in rxrpc_input_call_event() and the RESPONSE
    handler in rxrpc_verify_response() copy the skb to a linear one before
    calling into the security ops only when skb_cloned() is true.  An skb
    that is not cloned but still carries externally-owned paged fragments
    (e.g. SKBFL_SHARED_FRAG set by splice() into a UDP socket via
    __ip_append_data, or a chained skb_has_frag_list()) falls through to
    the in-place decryption path, which binds the frag pages directly into
    the AEAD/skcipher SGL via skb_to_sgvec().
    
    Extend the gate to also unshare when skb_has_frag_list() or
    skb_has_shared_frag() is true.  This catches the splice-loopback vector
    and other externally-shared frag sources while preserving the
    zero-copy fast path for skbs whose frags are kernel-private (e.g. NIC
    page_pool RX, GRO).  The OOM/trace handling already in place is reused.
    
    Fixes: d0d5c0cd1e71 ("rxrpc: Use skb_unshare() rather than skb_cow_data()")
    Cc: stable@vger.kernel.org
    Signed-off-by: Hyunwoo Kim <imv4bel@gmail.com>
    Reviewed-by: Jiayuan Chen <jiayuan.chen@linux.dev>
    Acked-by: David Howells <dhowells@redhat.com>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

rxrpc: Fix conn-level packet handling to unshare RESPONSE packets [+ + +]
Author: David Howells <dhowells@redhat.com>
Date:   Mon May 11 15:41:04 2026 +0800

    rxrpc: Fix conn-level packet handling to unshare RESPONSE packets
    
    commit 24481a7f573305706054c59e275371f8d0fe919f upstream.
    
    The security operations that verify the RESPONSE packets decrypt bits of it
    in place - however, the sk_buff may be shared with a packet sniffer, which
    would lead to the sniffer seeing an apparently corrupt packet (actually
    decrypted).
    
    Fix this by handing a copy of the packet off to the specific security
    handler if the packet was cloned.
    
    Fixes: 17926a79320a ("[AF_RXRPC]: Provide secure RxRPC sockets for use by userspace and kernel both")
    Closes: https://sashiko.dev/#/patchset/20260408121252.2249051-1-dhowells%40redhat.com
    Signed-off-by: David Howells <dhowells@redhat.com>
    cc: Marc Dionne <marc.dionne@auristor.com>
    cc: Jeffrey Altman <jaltman@auristor.com>
    cc: Simon Horman <horms@kernel.org>
    cc: linux-afs@lists.infradead.org
    cc: stable@kernel.org
    Link: https://patch.msgid.link/20260422161438.2593376-5-dhowells@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [Readd rxrpc_skb_put_response_copy which missed in bf20f46d94f1 in v6.12.86]
    Stable-dep-of: aa54b1d27fe0 ("rxrpc: Also unshare DATA/RESPONSE packets when
    paged frags are present")
    Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/debug: Reject zero-length input in debug_input_flush_fn() [+ + +]
Author: Vasily Gorbik <gor@linux.ibm.com>
Date:   Fri Apr 17 14:33:43 2026 +0200

    s390/debug: Reject zero-length input in debug_input_flush_fn()
    
    commit e14622a7584f9608927c59a7d6ae4a0999dc545e upstream.
    
    debug_input_flush_fn() always copies one byte from the userspace buffer
    with copy_from_user() regardless of the supplied write length. A
    zero-length write therefore reads one byte beyond the caller's buffer.
    If the stale byte happens to be '-' or a digit the debug log is
    silently flushed. With an unmapped buffer the call returns -EFAULT.
    
    Reject zero-length writes before copying from userspace.
    
    Cc: stable@vger.kernel.org # v5.10+
    Acked-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
scsi: target: configfs: Bound snprintf() return in tg_pt_gp_members_show() [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Sat Apr 11 14:06:00 2026 +0200

    scsi: target: configfs: Bound snprintf() return in tg_pt_gp_members_show()
    
    commit 772a896a56e0e3ef9424a025cec9176f9d8f4552 upstream.
    
    target_tg_pt_gp_members_show() formats LUN paths with snprintf() into a
    256-byte stack buffer, then will memcpy() cur_len bytes from that
    buffer.  snprintf() returns the length the output would have had, which
    can exceed the buffer size when the fabric WWN is long because iSCSI IQN
    names can be up to 223 bytes.  The check at the memcpy() site only
    guards the destination page write, not the source read, so memcpy() will
    read past the stack buffer and copy adjacent stack contents to the sysfs
    reader, which when CONFIG_FORTIFY_SOURCE is enabled, fortify_panic()
    will be triggered.
    
    Commit 27e06650a5ea ("scsi: target: target_core_configfs: Add length
    check to avoid buffer overflow") added the same bound to the
    target_lu_gp_members_show() but the tg_pt_gp variant was missed so
    resolve that here.
    
    Cc: Martin K. Petersen <martin.petersen@oracle.com>
    Fixes: c66ac9db8d4a ("[SCSI] target: Add LIO target core v4.0.0-rc6")
    Assisted-by: gregkh_clanker_t1000
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Link: https://patch.msgid.link/2026041159-garter-theft-3be0@gregkh
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
selftests: mptcp: check output: catch cmd errors [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Tue May 5 17:00:58 2026 +0200

    selftests: mptcp: check output: catch cmd errors
    
    commit 65db7b27b90e2ea8d4966935aa9a50b6a60c31ac upstream.
    
    Using '${?}' inside the if-statement to check the returned value from
    the command that was evaluated as part of the if-statement is not
    correct: here, '${?}' will be linked to the previous instruction, not
    the one that is expected here (${cmd}).
    
    Instead, simply mark the error, except if an error is expected. If
    that's the case, 1 can be passed as the 4th argument of this helper.
    Three checks from pm_netlink.sh expect an error.
    
    While at it, improve the error message when the command unexpectedly
    fails or succeeds.
    
    Note that we could expect a specific returned value, but the checks
    currently expecting an error can be used with 'ip mptcp' or 'pm_nl_ctl',
    and these two tools don't return the same error code.
    
    Fixes: 2d0c1d27ea4e ("selftests: mptcp: add mptcp_lib_check_output helper")
    Cc: stable@vger.kernel.org
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260505-net-mptcp-pm-fixes-7-1-rc3-v1-10-fca8091060a4@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

selftests: mptcp: pm: restrict 'unknown' check to pm_nl_ctl [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Tue May 5 17:00:59 2026 +0200

    selftests: mptcp: pm: restrict 'unknown' check to pm_nl_ctl
    
    commit 53705ddfa18408f8e1f064331b6387509fa19f7f upstream.
    
    When pm_netlink.sh is executed with '-i', 'ip mptcp' is used instead of
    'pm_nl_ctl'. IPRoute2 doesn't support the 'unknown' flag, which has only
    been added to 'pm_nl_ctl' for this specific check: to ensure that the
    kernel ignores such unsupported flag.
    
    No reason to add this flag to 'ip mptcp'. Then, this check should be
    skipped when 'ip mptcp' is used.
    
    Fixes: 0cef6fcac24d ("selftests: mptcp: ip_mptcp option for more scripts")
    Cc: stable@vger.kernel.org
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260505-net-mptcp-pm-fixes-7-1-rc3-v1-11-fca8091060a4@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
selinux: don't reserve xattr slot when we won't fill it [+ + +]
Author: David Windsor <dwindsor@gmail.com>
Date:   Sun Apr 26 19:23:49 2026 -0400

    selinux: don't reserve xattr slot when we won't fill it
    
    commit 1e5a8eed7821e7a43a31b4c1b3675a91be6bc6f6 upstream.
    
    Move lsm_get_xattr_slot() below the SBLABEL_MNT check so we don't leave
    a NULL-named slot in the array when returning -EOPNOTSUPP; filesystem
    initxattrs() callbacks stop iterating at the first NULL ->name, silently
    dropping xattrs installed by later LSMs.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: David Windsor <dwindsor@gmail.com>
    Signed-off-by: Paul Moore <paul@paul-moore.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

selinux: prune /sys/fs/selinux/disable [+ + +]
Author: Stephen Smalley <stephen.smalley.work@gmail.com>
Date:   Tue May 5 08:49:49 2026 -0400

    selinux: prune /sys/fs/selinux/disable
    
    commit 19cfa0099024bb9cd40f6d950caa7f47ff8e77f6 upstream.
    
    Commit f22f9aaf6c3d ("selinux: remove the runtime disable
    functionality") removed the underlying SELinux runtime disable
    functionality but left everything else intact and started logging an
    error message to warn any residual users.
    
    Prune it to just log an error message once and to return count
    (i.e. all bytes written successfully) to avoid breaking
    userspace. This also fixes a local DoS from logspam.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Stephen Smalley <stephen.smalley.work@gmail.com>
    Signed-off-by: Paul Moore <paul@paul-moore.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

selinux: shrink critical section in sel_write_load() [+ + +]
Author: Stephen Smalley <stephen.smalley.work@gmail.com>
Date:   Thu Apr 30 14:36:52 2026 -0400

    selinux: shrink critical section in sel_write_load()
    
    commit 868f31e4061eca8c3cd607d79d954d5e54f204aa upstream.
    
    Currently sel_write_load() takes the policy mutex earlier than
    necessary. Move the taking of the mutex later. This avoids
    holding it unnecessarily across the vmalloc() and copy_from_user()
    of the policy data.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Stephen Smalley <stephen.smalley.work@gmail.com>
    Signed-off-by: Paul Moore <paul@paul-moore.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
smb/client: fix out-of-bounds read in smb2_compound_op() [+ + +]
Author: Zisen Ye <zisenye@stu.xidian.edu.cn>
Date:   Wed May 6 11:49:08 2026 +0800

    smb/client: fix out-of-bounds read in smb2_compound_op()
    
    commit 8d09328dfda089675e4c049f3f256064a1d1996b upstream.
    
    If a server sends a truncated response but a large OutputBufferLength, and
    terminates the EA list early, check_wsl_eas() returns success without
    validating that the entire OutputBufferLength fits within iov_len.
    
    Then smb2_compound_op() does:
        memcpy(idata->wsl.eas, data[0], size[0]);
    
    Where size[0] is OutputBufferLength. If iov_len is smaller than size[0],
    memcpy can read beyond the end of the rsp_iov allocation and leak adjacent
    kernel heap memory.
    
    Link: https://lore.kernel.org/linux-cifs/d998240c-aca9-420d-9dbd-f5ba24af19e0@chenxiaosong.com/
    Fixes: ea41367b2a60 ("smb: client: introduce SMB2_OP_QUERY_WSL_EA")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zisen Ye <zisenye@stu.xidian.edu.cn>
    Reviewed-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

smb/client: fix out-of-bounds read in symlink_data() [+ + +]
Author: Zisen Ye <zisenye@stu.xidian.edu.cn>
Date:   Sat May 2 18:48:36 2026 +0800

    smb/client: fix out-of-bounds read in symlink_data()
    
    commit d62b8d236fab503c6fec1d3e9a38bea71feaca20 upstream.
    
    Since smb2_check_message() returns success without length validation for
    the symlink error response, in symlink_data() it is possible for
    iov->iov_len to be smaller than sizeof(struct smb2_err_rsp). If the buffer
    only contains the base SMB2 header (64 bytes), accessing
    err->ErrorContextCount (at offset 66) or err->ByteCount later in
    symlink_data() will cause an out-of-bounds read.
    
    Link: https://lore.kernel.org/linux-cifs/297d8d9b-adf7-42fd-a1c2-5b1f230032bc@chenxiaosong.com/
    Fixes: 76894f3e2f71 ("cifs: improve symlink handling for smb2+")
    Cc: Stable@vger.kernel.org
    Signed-off-by: Zisen Ye <zisenye@stu.xidian.edu.cn>
    Reviewed-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
smb: client: use kzalloc to zero-initialize security descriptor buffer [+ + +]
Author: Bjoern Doebel <doebel@amazon.de>
Date:   Thu Apr 30 08:57:17 2026 +0000

    smb: client: use kzalloc to zero-initialize security descriptor buffer
    
    commit 5e489c6c47a2ac15edbaca153b9348e42c1eacab upstream.
    
    Commit 62e7dd0a39c2d ("smb: common: change the data type of num_aces
    to le16") split struct smb_acl's __le32 num_aces field into __le16
    num_aces and __le16 reserved. The reserved field corresponds to Sbz2
    in the MS-DTYP ACL wire format, which must be zero [1].
    
    When building an ACL descriptor in build_sec_desc(), we are using a
    kmalloc()'ed descriptor buffer and writing the fields explicitly using
    le16() writes now. This never writes to the 2 byte reserved field,
    leaving it as uninitialized heap data.
    
    When the reserved field happens to contain non-zero slab garbage,
    Samba rejects the security descriptor with "ndr_pull_security_descriptor
    failed: Range Error", causing chmod to fail with EINVAL.
    
    Change kmalloc() to kzalloc() to ensure the entire buffer is
    zero-initialized.
    
    Fixes: 62e7dd0a39c2d ("smb: common: change the data type of num_aces to le16")
    Cc: stable@vger.kernel.org
    
    Signed-off-by: Bjoern Doebel <doebel@amazon.de>
    Assisted-by: Kiro:claude-opus-4.6
    [1] https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dtyp/20233ed8-a6c6-4097-aafa-dd545ed24428
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

smb: client: validate dacloffset before building DACL pointers [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Mon Apr 20 10:47:47 2026 -0400

    smb: client: validate dacloffset before building DACL pointers
    
    commit f98b48151cc502ada59d9778f0112d21f2586ca3 upstream.
    
    parse_sec_desc(), build_sec_desc(), and the chown path in
    id_mode_to_cifs_acl() all add the server-supplied dacloffset to pntsd
    before proving a DACL header fits inside the returned security
    descriptor.
    
    On 32-bit builds a malicious server can return dacloffset near
    U32_MAX, wrap the derived DACL pointer below end_of_acl, and then slip
    past the later pointer-based bounds checks. build_sec_desc() and
    id_mode_to_cifs_acl() can then dereference DACL fields from the wrapped
    pointer in the chmod/chown rewrite paths.
    
    Validate dacloffset numerically before building any DACL pointer and
    reuse the same helper at the three DACL entry points.
    
    Fixes: bc3e9dd9d104 ("cifs: Change SIDs in ACEs while transferring file ownership.")
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-opus-4-6
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sound: ua101: fix division by zero at probe [+ + +]
Author: SeungJu Cheon <suunj1331@gmail.com>
Date:   Sun Apr 26 20:12:39 2026 +0900

    sound: ua101: fix division by zero at probe
    
    commit d1f73f169c1014463b5060e3f60813e13ddc7b87 upstream.
    
    Add a missing sanity check for bNrChannels in detect_usb_format()
    to prevent a division by zero in playback_urb_complete() and
    capture_urb_complete().
    
    USB core does not validate class-specific descriptor fields such
    as bNrChannels, so drivers must verify them before use. If a
    device provides bNrChannels = 0, frame_bytes becomes zero and is
    later used as a divisor in the URB completion handlers, leading
    to a kernel crash.
    
    Fixes: 63978ab3e3e9 ("sound: add Edirol UA-101 support")
    Cc: stable@vger.kernel.org
    Signed-off-by: SeungJu Cheon <suunj1331@gmail.com>
    Link: https://patch.msgid.link/20260426111239.103296-1-suunj1331@gmail.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
spi: microchip-core-qspi: fix controller deregistration [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Thu Apr 9 14:04:17 2026 +0200

    spi: microchip-core-qspi: fix controller deregistration
    
    commit e6464140d439f2d42f072eb422a5b1fec470c5a6 upstream.
    
    Make sure to deregister the controller before disabling underlying
    resources like interrupts during driver unbind.
    
    Fixes: 8596124c4c1b ("spi: microchip-core-qspi: Add support for microchip fpga qspi controllers")
    Cc: stable@vger.kernel.org      # 6.1
    Cc: Naga Sureshkumar Relli <nagasuresh.relli@microchip.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Acked-by: Conor Dooley <conor.dooley@microchip.com>
    Link: https://patch.msgid.link/20260409120419.388546-19-johan@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

spi: rockchip: fix controller deregistration [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Tue Mar 24 09:23:23 2026 +0100

    spi: rockchip: fix controller deregistration
    
    commit 53e7a16070feb7d1d4d81a583eaac5e25048b9c3 upstream.
    
    Make sure to deregister the controller before freeing underlying
    resources like DMA channels during driver unbind.
    
    Fixes: 64e36824b32b ("spi/rockchip: add driver for Rockchip RK3xxx SoCs integrated SPI")
    Cc: stable@vger.kernel.org      # 3.17
    Cc: addy ke <addy.ke@rock-chips.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20260324082326.901043-3-johan@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

spi: s3c64xx: fix NULL-deref on driver unbind [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Apr 10 11:49:25 2026 +0200

    spi: s3c64xx: fix NULL-deref on driver unbind
    
    commit 45daacbead8a009844bd5dba6cfa731332184d17 upstream.
    
    A change moving DMA channel allocation from probe() back to
    s3c64xx_spi_prepare_transfer() failed to remove the corresponding
    deallocation from remove().
    
    Drop the bogus DMA channel release from remove() to avoid triggering a
    NULL-pointer dereference on driver unbind.
    
    This issue was flagged by Sashiko when reviewing a controller
    deregistration fix.
    
    Fixes: f52b03c70744 ("spi: s3c64xx: requests spi-dma channel only during data transfer")
    Cc: stable@vger.kernel.org      # 6.0
    Cc: Adithya K V <adithya.kv@samsung.com>
    Link: https://sashiko.dev/#/patchset/20260410081757.503099-1-johan%40kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20260410094925.518343-1-johan@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

spi: sun4i: fix controller deregistration [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Apr 10 10:17:48 2026 +0200

    spi: sun4i: fix controller deregistration
    
    commit 42108a2f03e0fdeabe9d02d085bdb058baa1189f upstream.
    
    Make sure to deregister the controller before disabling underlying
    resources like clocks during driver unbind.
    
    Fixes: b5f6517948cc ("spi: sunxi: Add Allwinner A10 SPI controller driver")
    Cc: stable@vger.kernel.org      # 3.15
    Cc: Maxime Ripard <mripard@kernel.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20260410081757.503099-19-johan@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

spi: sun6i: fix controller deregistration [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Apr 10 10:17:49 2026 +0200

    spi: sun6i: fix controller deregistration
    
    commit d874a1c33aee0d88fb4ba2f8aeadaa9f1965209a upstream.
    
    Make sure to deregister the controller before disabling underlying
    resources like clocks during driver unbind.
    
    Fixes: 3558fe900e8a ("spi: sunxi: Add Allwinner A31 SPI controller driver")
    Cc: stable@vger.kernel.org      # 3.15
    Cc: Maxime Ripard <mripard@kernel.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20260410081757.503099-20-johan@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

spi: syncuacer: fix controller deregistration [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Apr 10 10:17:50 2026 +0200

    spi: syncuacer: fix controller deregistration
    
    commit 75d849c3452e9611de031db45b3149ba9a99035f upstream.
    
    Make sure to deregister the controller before disabling underlying
    resources like clocks during driver unbind.
    
    Fixes: b0823ee35cf9 ("spi: Add spi driver for Socionext SynQuacer platform")
    Cc: stable@vger.kernel.org      # 5.3
    Cc: Masahisa Kojima <masahisa.kojima@linaro.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20260410081757.503099-21-johan@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

spi: ti-qspi: fix controller deregistration [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Apr 10 10:17:53 2026 +0200

    spi: ti-qspi: fix controller deregistration
    
    commit 0c18a1bacbb1d8b8aa34d3d004a2cb8226c8b1ea upstream.
    
    Make sure to deregister the controller before disabling underlying
    resources like clocks during driver unbind.
    
    Note that the controller is suspended before disabling and releasing
    resources since commit 3ac066e2227c ("spi: spi-ti-qspi: Suspend the
    queue before removing the device") which avoids issues like unclocked
    accesses but prevents SPI device drivers from doing I/O during
    deregistration.
    
    Fixes: 3b3a80019ff1 ("spi: ti-qspi: one only one interrupt handler")
    Cc: stable@vger.kernel.org      # 3.13
    Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20260410081757.503099-24-johan@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

spi: topcliff-pch: fix controller deregistration [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Tue Apr 14 15:43:18 2026 +0200

    spi: topcliff-pch: fix controller deregistration
    
    commit 5d6f477d6fc0767c57c5e1e6f55a1662820eef87 upstream.
    
    Make sure to deregister the controller before disabling and releasing
    underlying resources like interrupts and DMA during driver unbind.
    
    Fixes: e8b17b5b3f30 ("spi/topcliff: Add topcliff platform controller hub (PCH) spi bus driver")
    Cc: stable@vger.kernel.org      # 2.6.37
    Cc: Masayuki Ohtake <masa-korg@dsn.okisemi.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20260414134319.978196-8-johan@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

spi: topcliff-pch: fix use-after-free on unbind [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Tue Apr 14 15:43:19 2026 +0200

    spi: topcliff-pch: fix use-after-free on unbind
    
    commit 9d72732fe70c11424bc90ed466c7ccfa58b42a9a upstream.
    
    Give the driver a chance to flush its queue before releasing the DMA
    buffers on driver unbind
    
    Fixes: c37f3c2749b5 ("spi/topcliff_pch: DMA support")
    Cc: stable@vger.kernel.org      # 3.1
    Cc: Tomoya MORINAGA <tomoya-linux@dsn.okisemi.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20260414134319.978196-9-johan@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

spi: zynqmp-gqspi: fix controller deregistration [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Apr 10 10:17:55 2026 +0200

    spi: zynqmp-gqspi: fix controller deregistration
    
    commit 6895fc4faafc9082e15e4e624b23dd5f0c98feb5 upstream.
    
    Make sure to deregister the controller before disabling underlying
    resources like clocks during driver unbind.
    
    Fixes: dfe11a11d523 ("spi: Add support for Zynq Ultrascale+ MPSoC GQSPI controller")
    Cc: stable@vger.kernel.org      # 4.2: 64640f6c972e
    Cc: stable@vger.kernel.org      # 4.2
    Cc: Ranjit Waghmode <ranjit.waghmode@xilinx.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20260410081757.503099-26-johan@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
staging: vme_user: fix root device leak on init failure [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Apr 24 12:49:10 2026 +0200

    staging: vme_user: fix root device leak on init failure
    
    commit 32c91e8ee039777d0b95b914633fc6a42607959c upstream.
    
    Make sure to deregister and free the root device in case module
    initialisation fails.
    
    Fixes: 658bcdae9c67 ("vme: Adding Fake VME driver")
    Cc: stable@vger.kernel.org      # 4.9
    Cc: Martyn Welch <martyn@welchs.me.uk>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://patch.msgid.link/20260424104910.2619349-1-johan@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
thermal/drivers/sprd: Fix raw temperature clamping in sprd_thm_rawdata_to_temp [+ + +]
Author: Thorsten Blum <thorsten.blum@linux.dev>
Date:   Sat Mar 7 11:24:21 2026 +0100

    thermal/drivers/sprd: Fix raw temperature clamping in sprd_thm_rawdata_to_temp
    
    commit b3414148bbc1f9cd56217e58a558c6ac4fd1b4a6 upstream.
    
    The raw temperature data was never clamped to SPRD_THM_RAW_DATA_LOW or
    SPRD_THM_RAW_DATA_HIGH because the return value of clamp() was not used.
    Fix this by assigning the clamped value to 'rawdata'.
    
    Casting SPRD_THM_RAW_DATA_LOW and SPRD_THM_RAW_DATA_HIGH to u32 is also
    redundant and can be removed.
    
    Fixes: 554fdbaf19b1 ("thermal: sprd: Add Spreadtrum thermal driver support")
    Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
    Signed-off-by: Daniel Lezcano <daniel.lezcano@kernel.org>
    Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260307102422.306055-2-thorsten.blum@linux.dev
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

thermal/drivers/sprd: Fix temperature clamping in sprd_thm_temp_to_rawdata [+ + +]
Author: Thorsten Blum <thorsten.blum@linux.dev>
Date:   Sat Mar 7 11:24:20 2026 +0100

    thermal/drivers/sprd: Fix temperature clamping in sprd_thm_temp_to_rawdata
    
    commit 83c0f9a5d679a6f8d84fc49b2f62ea434ccab4b6 upstream.
    
    The temperature was never clamped to SPRD_THM_TEMP_LOW or
    SPRD_THM_TEMP_HIGH because the return value of clamp() was not used. Fix
    this by assigning the clamped value to 'temp'.
    
    Casting SPRD_THM_TEMP_LOW and SPRD_THM_TEMP_HIGH to int is also
    redundant and can be removed.
    
    Fixes: 554fdbaf19b1 ("thermal: sprd: Add Spreadtrum thermal driver support")
    Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
    Signed-off-by: Daniel Lezcano <daniel.lezcano@kernel.org>
    Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260307102422.306055-1-thorsten.blum@linux.dev
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
thermal: core: Free thermal zone ID later during removal [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Tue Apr 7 15:58:34 2026 +0200

    thermal: core: Free thermal zone ID later during removal
    
    commit daae9c18feec74566e023fc88cfb0ce26e39d868 upstream.
    
    The thermal zone removal ordering is different from the thermal zone
    registration rollback path ordering and the former is arguably
    problematic because freeing a thermal zone ID prematurely may cause
    it to be used during the registration of another thermal zone which
    may fail as a result.
    
    Prevent that from occurring by changing the thermal zone removal
    ordering to reflect the thermal zone registration rollback path
    ordering.
    
    Also more the ida_destroy() call from thermal_zone_device_unregister()
    to thermal_release() for consistency.
    
    Fixes: b31ef8285b19 ("thermal core: convert ID allocation to IDA")
    Cc: All applicable <stable@vger.kernel.org>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Link: https://patch.msgid.link/5063934.GXAFRqVoOG@rafael.j.wysocki
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tracepoint: balance regfunc() on func_add() failure in tracepoint_add_func() [+ + +]
Author: David Carlier <devnexen@gmail.com>
Date:   Sun May 10 13:20:59 2026 -0400

    tracepoint: balance regfunc() on func_add() failure in tracepoint_add_func()
    
    [ Upstream commit fad217e16fded7f3c09f8637b0f6a224d58b5f2e ]
    
    When a tracepoint goes through the 0 -> 1 transition, tracepoint_add_func()
    invokes the subsystem's ext->regfunc() before attempting to install the
    new probe via func_add(). If func_add() then fails (for example, when
    allocate_probes() cannot allocate a new probe array under memory pressure
    and returns -ENOMEM), the function returns the error without calling the
    matching ext->unregfunc(), leaving the side effects of regfunc() behind
    with no installed probe to justify them.
    
    For syscall tracepoints this is particularly unpleasant: syscall_regfunc()
    bumps sys_tracepoint_refcount and sets SYSCALL_TRACEPOINT on every task.
    After a leaked failure, the refcount is stuck at a non-zero value with no
    consumer, and every task continues paying the syscall trace entry/exit
    overhead until reboot. Other subsystems providing regfunc()/unregfunc()
    pairs exhibit similarly scoped persistent state.
    
    Mirror the existing 1 -> 0 cleanup and call ext->unregfunc() in the
    func_add() error path, gated on the same condition used there so the
    unwind is symmetric with the registration.
    
    Fixes: 8cf868affdc4 ("tracing: Have the reg function allow to fail")
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Link: https://patch.msgid.link/20260413190601.21993-1-devnexen@gmail.com
    Signed-off-by: David Carlier <devnexen@gmail.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    [ changed `tp->ext->unregfunc` to `tp->unregfunc` to match older struct layout ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
udf: fix partition descriptor append bookkeeping [+ + +]
Author: Seohyeon Maeng <bioloidgp@gmail.com>
Date:   Fri May 8 15:52:20 2026 -0400

    udf: fix partition descriptor append bookkeeping
    
    [ Upstream commit 08841b06fa64d8edbd1a21ca6e613420c90cc4b8 ]
    
    Mounting a crafted UDF image with repeated partition descriptors can
    trigger a heap out-of-bounds write in part_descs_loc[].
    
    handle_partition_descriptor() deduplicates entries by partition number,
    but appended slots never record partnum. As a result duplicate
    Partition Descriptors are appended repeatedly and num_part_descs keeps
    growing.
    
    Once the table is full, the growth path still sizes the allocation from
    partnum even though inserts are indexed by num_part_descs. If partnum is
    already aligned to PART_DESC_ALLOC_STEP, ALIGN(partnum, step) can keep
    the old capacity and the next append writes past the end of the table.
    
    Store partnum in the appended slot and size growth from the next append
    count so deduplication and capacity tracking follow the same model.
    
    Fixes: ee4af50ca94f ("udf: Fix mounting of Win7 created UDF filesystems")
    Cc: stable@vger.kernel.org
    Signed-off-by: Seohyeon Maeng <bioloidgp@gmail.com>
    Link: https://patch.msgid.link/20260310081652.21220-1-bioloidgp@gmail.com
    Signed-off-by: Jan Kara <jack@suse.cz>
    [ replaced kzalloc_objs() helper with equivalent kcalloc() ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

udf: reject descriptors with oversized CRC length [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Mon Apr 13 17:12:40 2026 -0400

    udf: reject descriptors with oversized CRC length
    
    commit 55d41b0a20128e86b9e960dd2e3f0a2d69a18df7 upstream.
    
    udf_read_tagged() skips CRC verification when descCRCLength +
    sizeof(struct tag) exceeds the block size.  A crafted UDF image can
    set descCRCLength to an oversized value to bypass CRC validation
    entirely; the descriptor is then accepted based solely on the 8-bit
    tag checksum, which is trivially recomputable.
    
    Reject such descriptors instead of silently accepting them.  A
    legitimate single-block descriptor should never have a CRC length that
    exceeds the block.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-opus-4-6
    Assisted-by: Codex:gpt-5-4
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Link: https://patch.msgid.link/20260413211240.853662-1-michael.bommarito@gmail.com
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: omap_udc: DMA: Don't enable burst 4 mode [+ + +]
Author: Aaro Koskinen <aaro.koskinen@iki.fi>
Date:   Mon Apr 13 21:49:12 2026 +0300

    USB: omap_udc: DMA: Don't enable burst 4 mode
    
    commit 3f91484f6c13c434bd573ca6b6779c26adb0ddab upstream.
    
    Commit 65111084c63d7 ("USB: more omap_udc updates (dma and omap1710)")
    added setting for DMA burst 4 mode. But I think this should be undone for
    two reasons:
    
    - It breaks DMA on 15xx boards - transfers just silently stall.
    
    - On newer OMAP1 boards, like Nokia 770 (omap1710), there is no measurable
    performance impact when testing TCP throughput with g_ether with large
    15000 byte MTU size.
    
    It's also worth noting that when the original change was made, the
    OMAP_DMA_DATA_BURST_4 handling in arch/arm/plat-omap/dma.c was broken, and
    actually resulted in the same as the OMAP_DMA_DATA_BURST_DIS i.e. burst
    disabled. This was fixed not until a couple kernel releases later in an
    unrelated commit 1a8bfa1eb998a ("[ARM] 3142/1: OMAP 2/5: Update files
    common to omap1 and omap2").
    
    So based on this it seems there was never really a very good reason to
    enable this burst mode in omap_udc, so remove it now to allow 15xx DMA
    to work again (it provides 2x throughput compared to PIO mode).
    
    Fixes: 65111084c63d ("[PATCH] USB: more omap_udc updates (dma and omap1710)")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Aaro Koskinen <aaro.koskinen@iki.fi>
    Link: https://patch.msgid.link/ad06qHLclWHeSGnV@darkstar.musicnaut.iki.fi
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add Telit Cinterion LE910Cx compositions [+ + +]
Author: Fabio Porcedda <fabio.porcedda@gmail.com>
Date:   Mon Apr 27 11:17:46 2026 +0200

    USB: serial: option: add Telit Cinterion LE910Cx compositions
    
    commit 100201d349edd226ca3470c894c92dccc67ee7a8 upstream.
    
    Add the following Telit Cinterion LE910Cx compositions:
    
    0x1251: RNDIS + tty (AT/NMEA) + tty (AT) + tty (AT) + tty (SAP)
    T:  Bus=01 Lev=01 Prnt=21 Port=06 Cnt=01 Dev#=108 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=1251 Rev=03.18
    S:  Manufacturer=Android
    S:  Product=LE910C1-EU
    S:  SerialNumber=0123456789ABCDEF
    C:  #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=02 Prot=ff Driver=rndis_host
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8a(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    
    0x1253: ECM + tty (AT/NMEA) + tty (AT) + tty (AT) + tty (SAP)
    T:  Bus=01 Lev=01 Prnt=21 Port=06 Cnt=01 Dev#=121 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=1253 Rev=03.18
    S:  Manufacturer=Android
    S:  Product=LE910C1-EU
    S:  SerialNumber=0123456789ABCDEF
    C:  #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=06 Prot=00 Driver=cdc_ether
    E:  Ad=82(I) Atr=03(Int.) MxPS=  16 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8a(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    
    0x1254: tty (AT) + tty (AT)
    T:  Bus=01 Lev=01 Prnt=21 Port=06 Cnt=01 Dev#=122 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=1254 Rev=03.18
    S:  Manufacturer=Android
    S:  Product=LE910C1-EU
    S:  SerialNumber=0123456789ABCDEF
    C:  #Ifs= 2 Cfg#= 1 Atr=a0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    
    0x1255: tty (AT/NMEA) + tty (AT) + tty (AT) + tty (SAP)
    T:  Bus=01 Lev=01 Prnt=21 Port=06 Cnt=01 Dev#=123 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=1255 Rev=03.18
    S:  Manufacturer=Android
    S:  Product=LE910C1-EU
    S:  SerialNumber=0123456789ABCDEF
    C:  #Ifs= 4 Cfg#= 1 Atr=a0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: ulpi: fix memory leak on ulpi_register() error paths [+ + +]
Author: Felix Gu <ustc.gu@gmail.com>
Date:   Tue Apr 7 21:21:22 2026 +0800

    usb: ulpi: fix memory leak on ulpi_register() error paths
    
    commit 0b9fcab1b8608d429e5f239afb197de928d4de7d upstream.
    
    Commit 01af542392b5 ("usb: ulpi: fix double free in
    ulpi_register_interface() error path") removed kfree(ulpi) from
    ulpi_register_interface() to fix a double-free when device_register()
    fails.
    
    But when ulpi_of_register() or ulpi_read_id() fail before
    device_register() is called, the ulpi allocation is leaked.
    
    Add kfree(ulpi) on both error paths to properly clean up the allocation.
    
    Fixes: 01af542392b5 ("usb: ulpi: fix double free in ulpi_register_interface() error path")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Felix Gu <ustc.gu@gmail.com>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Link: https://patch.msgid.link/20260407-ulpi-v1-1-f3fafe53f7b2@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: usblp: fix heap leak in IEEE 1284 device ID via short response [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon Apr 20 18:11:03 2026 +0200

    usb: usblp: fix heap leak in IEEE 1284 device ID via short response
    
    commit 7a400c6fe3617e31e690e3f7ca37bb335e0498f3 upstream.
    
    usblp_ctrl_msg() collapses the usb_control_msg() return value to
    0/-errno, discarding the actual number of bytes transferred.  A broken
    printer can complete the GET_DEVICE_ID control transfer short and the
    driver has no way to know.
    
    usblp_cache_device_id_string() reads the 2-byte big-endian length prefix
    from the response and trusts it (clamped only to the buffer bounds).
    The buffer is kmalloc(1024) at probe time. A device that sends exactly
    two bytes (e.g. 0x03 0xFF, claiming a 1023-byte ID) leaves
    device_id_string[2..1022] holding stale kmalloc heap.
    
    That stale data is then exposed:
      - via the ieee1284_id sysfs attribute (sprintf("%s", buf+2), truncated
        at the first NUL in the stale heap), and
      - via the IOCNR_GET_DEVICE_ID ioctl, which copy_to_user()s the full
        claimed length regardless of NULs, up to 1021 bytes of uninitialized
        heap, with the leak size chosen by the device.
    
    Fix this up by just zapping the buffer with zeros before each request
    sent to the device.
    
    Cc: Pete Zaitcev <zaitcev@redhat.com>
    Assisted-by: gkh_clanker_t1000
    Cc: stable <stable@kernel.org>
    Link: https://patch.msgid.link/2026042002-unicorn-greedily-3c63@gregkh
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: usblp: fix uninitialized heap leak via LPGETSTATUS ioctl [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon Apr 20 18:11:04 2026 +0200

    usb: usblp: fix uninitialized heap leak via LPGETSTATUS ioctl
    
    commit b38e53cbfb9d84732e5984fbd73e128d592415c5 upstream.
    
    Just like in a previous problem in this driver, usblp_ctrl_msg() will
    collapse the usb_control_msg() return value to 0/-errno, discarding the
    actual number of bytes transferred.
    
    Ideally that short command should be detected and error out, but many
    printers are known to send "incorrect" responses back so we can't just
    do that.
    
    statusbuf is kmalloc(8) at probe time and never filled before the first
    LPGETSTATUS ioctl.
    
    usblp_read_status() requests 1 byte. If a malicious printer responds
    with zero bytes, *statusbuf is one byte of stale kmalloc heap,
    sign-extended into the local int status, which the LPGETSTATUS path then
    copy_to_user()s directly to the ioctl caller.
    
    Fix this all by just zapping out the memory buffer when allocated at
    probe time.  If a later call does a short read, the data will be
    identical to what the device sent it the last time, so there is no
    "leak" of information happening.
    
    Cc: Pete Zaitcev <zaitcev@redhat.com>
    Assisted-by: gkh_clanker_t1000
    Cc: stable <stable@kernel.org>
    Link: https://patch.msgid.link/2026042011-shredder-savage-48c6@gregkh
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
wifi: ath5k: do not access array OOB [+ + +]
Author: Jiri Slaby (SUSE) <jirislaby@kernel.org>
Date:   Tue Dec 9 11:04:59 2025 +0100

    wifi: ath5k: do not access array OOB
    
    commit d748603f12baff112caa3ab7d39f50100f010dbd upstream.
    
    Vincent reports:
    > The ath5k driver seems to do an array-index-out-of-bounds access as
    > shown by the UBSAN kernel message:
    > UBSAN: array-index-out-of-bounds in drivers/net/wireless/ath/ath5k/base.c:1741:20
    > index 4 is out of range for type 'ieee80211_tx_rate [4]'
    > ...
    > Call Trace:
    >  <TASK>
    >  dump_stack_lvl+0x5d/0x80
    >  ubsan_epilogue+0x5/0x2b
    >  __ubsan_handle_out_of_bounds.cold+0x46/0x4b
    >  ath5k_tasklet_tx+0x4e0/0x560 [ath5k]
    >  tasklet_action_common+0xb5/0x1c0
    
    It is real. 'ts->ts_final_idx' can be 3 on 5212, so:
       info->status.rates[ts->ts_final_idx + 1].idx = -1;
    with the array defined as:
       struct ieee80211_tx_rate rates[IEEE80211_TX_MAX_RATES];
    while the size is:
       #define IEEE80211_TX_MAX_RATES  4
    is indeed bogus.
    
    Set this 'idx = -1' sentinel only if the array index is less than the
    array size. As mac80211 will not look at rates beyond the size
    (IEEE80211_TX_MAX_RATES).
    
    Note: The effect of the OOB write is negligible. It just overwrites the
    next member of info->status, i.e. ack_signal.
    
    Signed-off-by: Jiri Slaby (SUSE) <jirislaby@kernel.org>
    Reported-by: Vincent Danjean <vdanjean@debian.org>
    Link: https://lore.kernel.org/all/aQYUkIaT87ccDCin@eldamar.lan
    Closes: https://bugs.debian.org/1119093
    Fixes: 6d7b97b23e11 ("ath5k: fix tx status reporting issues")
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20251209100459.2253198-1-jirislaby@kernel.org
    Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: b43: enforce bounds check on firmware key index in b43_rx() [+ + +]
Author: Tristan Madani <tristan@talencesecurity.com>
Date:   Fri Apr 17 11:11:44 2026 +0000

    wifi: b43: enforce bounds check on firmware key index in b43_rx()
    
    commit 1f4f78bf8549e6ac4f04fba4176854f3a6e0c332 upstream.
    
    The firmware-controlled key index in b43_rx() can exceed the dev->key[]
    array size (58 entries). The existing B43_WARN_ON is non-enforcing in
    production builds, allowing an out-of-bounds read.
    
    Make the B43_WARN_ON check enforcing by dropping the frame when the
    firmware returns an invalid key index.
    
    Suggested-by: Jonas Gorski <jonas.gorski@gmail.com>
    Acked-by: Michael Büsch <m@bues.ch>
    Fixes: e4d6b7951812 ("[B43]: add mac80211-based driver for modern BCM43xx devices")
    Cc: stable@vger.kernel.org
    Signed-off-by: Tristan Madani <tristan@talencesecurity.com>
    Link: https://patch.msgid.link/20260417111145.2694196-1-tristmd@gmail.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: b43legacy: enforce bounds check on firmware key index in RX path [+ + +]
Author: Tristan Madani <tristan@talencesecurity.com>
Date:   Fri Apr 17 11:11:45 2026 +0000

    wifi: b43legacy: enforce bounds check on firmware key index in RX path
    
    commit a035766f970bde2d4298346a31a80685be5c0205 upstream.
    
    Same fix as b43: the firmware-controlled key index in b43legacy_rx()
    can exceed dev->max_nr_keys. The existing B43legacy_WARN_ON is
    non-enforcing in production builds, allowing an out-of-bounds read of
    dev->key[].
    
    Make the check enforcing by dropping the frame for invalid indices.
    
    Fixes: 75388acd0cd8 ("[B43LEGACY]: add mac80211-based driver for legacy BCM43xx devices")
    Cc: stable@vger.kernel.org
    Signed-off-by: Tristan Madani <tristan@talencesecurity.com>
    Link: https://patch.msgid.link/20260417111145.2694196-2-tristmd@gmail.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: brcmfmac: Fix potential use-after-free issue when stopping watchdog task [+ + +]
Author: Marek Szyprowski <m.szyprowski@samsung.com>
Date:   Thu Apr 16 11:33:39 2026 +0200

    wifi: brcmfmac: Fix potential use-after-free issue when stopping watchdog task
    
    commit c623b63580880cc742255eaed3d79804c1b91143 upstream.
    
    Watchdog task might end between send_sig() and kthread_stop() calls, what
    results in the use-after-free issue. Fix this by increasing watchdog task
    reference count before calling send_sig() and dropping it by switching to
    kthread_stop_put().
    
    Cc: stable@vger.kernel.org
    Fixes: 373c83a801f1 ("brcmfmac: stop watchdog before detach and free everything")
    Fixes: a9ffda88be74 ("brcm80211: fmac: abstract bus_stop interface function pointer")
    Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
    Link: https://patch.msgid.link/20260416093339.2066829-1-m.szyprowski@samsung.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: mac80211: drop stray 'static' from fast-RX rx_result [+ + +]
Author: Catherine <enderaoelyther@gmail.com>
Date:   Fri Apr 24 21:14:36 2026 +0800

    wifi: mac80211: drop stray 'static' from fast-RX rx_result
    
    commit 7a5b81e0c87a075afd572f659d8eb68c9c4cd2ba upstream.
    
    ieee80211_invoke_fast_rx() is documented as safe for parallel RX, but
    its per-invocation rx_result is declared static. Concurrent callers then
    share one instance and can overwrite each other's result between
    ieee80211_rx_mesh_data() and the switch on res.
    
    That can make a packet that was queued or consumed by
    ieee80211_rx_mesh_data() fall through into ieee80211_rx_8023(), or make
    a packet that should continue return as queued.
    
    Make res an automatic variable so each invocation keeps its own result.
    
    Fixes: 3468e1e0c639 ("wifi: mac80211: add mesh fast-rx support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Catherine <enderaoelyther@gmail.com>
    Link: https://patch.msgid.link/20260424131435.83212-2-enderaoelyther@gmail.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: mac80211: remove station if connection prep fails [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Tue May 5 15:15:34 2026 +0200

    wifi: mac80211: remove station if connection prep fails
    
    commit 283fc9e44ff5b5ac967439b4951b80bd4299f4e4 upstream.
    
    If connection preparation fails for MLO connections, then the
    interface is completely reset to non-MLD. In this case, we must
    not keep the station since it's related to the link of the vif
    being removed. Delete an existing station. Any "new_sta" is
    already being removed, so that doesn't need changes.
    
    This fixes a use-after-free/double-free in debugfs if that's
    enabled, because a vif going from MLD (and to MLD, but that's
    not relevant here) recreates its entire debugfs.
    
    Cc: stable@vger.kernel.org
    Fixes: 81151ce462e5 ("wifi: mac80211: support MLO authentication/association with one link")
    Reviewed-by: Miriam Rachel Korenblit <miriam.rachel.korenblit@intel.com>
    Link: https://patch.msgid.link/20260505151533.c4e52deb06ad.Iafe56cec7de8512626169496b134bce3a6c17010@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: mac80211: use safe list iteration in radar detect work [+ + +]
Author: Benjamin Berg <benjamin.berg@intel.com>
Date:   Tue May 5 15:15:40 2026 +0200

    wifi: mac80211: use safe list iteration in radar detect work
    
    commit ac8eb3e18f41e2cc8492cc1d358bcb786c850270 upstream.
    
    The call to ieee80211_dfs_cac_cancel can cause the iterated chanctx to
    be freed and removed from the list. Guard against this to avoid a
    slab-use-after-free error.
    
    Cc: stable@vger.kernel.org
    Fixes: bca8bc0399ac ("wifi: mac80211: handle ieee80211_radar_detected() for MLO")
    Signed-off-by: Benjamin Berg <benjamin.berg@intel.com>
    Link: https://patch.msgid.link/20260505151539.236d63a1b736.I35dbb9e96a2d4a480be208770fdd99ba3b817b79@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: mt76: mt7921: fix a potential clc buffer length underflow [+ + +]
Author: Leon Yen <leon.yen@mediatek.com>
Date:   Thu Oct 9 10:01:58 2025 +0800

    wifi: mt76: mt7921: fix a potential clc buffer length underflow
    
    commit 5373f8b19e568b5c217832b9bbef165bd2b2df14 upstream.
    
    The buf_len is used to limit the iterations for retrieving the country
    power setting and may underflow under certain conditions due to changes
    in the power table in CLC.
    
    This underflow leads to an almost infinite loop or an invalid power
    setting resulting in driver initialization failure.
    
    Cc: stable@vger.kernel.org
    Fixes: fa6ad88e023d ("wifi: mt76: mt7921: fix country count limitation for CLC")
    Signed-off-by: Leon Yen <leon.yen@mediatek.com>
    Signed-off-by: Ming Yen Hsieh <mingyen.hsieh@mediatek.com>
    Link: https://patch.msgid.link/20251009020158.1923429-1-mingyen.hsieh@mediatek.com
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: mt76: mt7921: fix ROC abort flow interruption in mt7921_roc_work [+ + +]
Author: Quan Zhou <quan.zhou@mediatek.com>
Date:   Fri Jan 23 10:16:25 2026 +0800

    wifi: mt76: mt7921: fix ROC abort flow interruption in mt7921_roc_work
    
    commit fdfa39f9f4fbae532b162da913a67b2410caf38f upstream.
    
    The mt7921_set_roc API may be executed concurrently with mt7921_roc_work,
    specifically between the following code paths:
    
    - The check and clear of MT76_STATE_ROC in mt7921_roc_work:
        if (!test_and_clear_bit(MT76_STATE_ROC, &phy->mt76->state))
            return;
    
    - The execution of ieee80211_iterate_active_interfaces.
    
    This race condition can interrupt the ROC abort flow, resulting in
    the ROC process failing to abort as expected.
    
    To address this defect, the modification of MT76_STATE_ROC is now
    protected by mt792x_mutex_acquire(phy->dev). This ensures that
    changes to the ROC state are properly synchronized, preventing
    race conditions and ensuring the ROC abort flow is not interrupted.
    
    Fixes: 034ae28b56f1 ("wifi: mt76: mt7921: introduce remain_on_channel support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Quan Zhou <quan.zhou@mediatek.com>
    Reviewed-by: Sean Wang <sean.wang@mediatek.com>
    Link: https://patch.msgid.link/2568ece8b557e5dda79391414c834ef3233049b6.1769133724.git.quan.zhou@mediatek.com
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: mt76: mt7925: fix AMPDU state handling in mt7925_tx_check_aggr [+ + +]
Author: Quan Zhou <quan.zhou@mediatek.com>
Date:   Thu Nov 27 15:49:11 2025 +0800

    wifi: mt76: mt7925: fix AMPDU state handling in mt7925_tx_check_aggr
    
    commit bb8e38fcdbf7290d7f0cd572d2d8fdb2b641b492 upstream.
    
    Previously, the AMPDU state bit for a given TID was set before attempting
    to start a BA session, which could result in the AMPDU state being marked
    active even if ieee80211_start_tx_ba_session() failed. This patch changes
    the logic to only set the AMPDU state bit after successfully starting a BA
    session, ensuring proper synchronization between AMPDU state and BA session
    status.
    
    This fixes potential issues with aggregation state tracking and improves
    compatibility with mac80211 BA session management.
    
    Fixes: 44eb173bdd4f ("wifi: mt76: mt7925: add link handling in mt7925_txwi_free")
    Cc: stable@vger.kernel.org
    
    Signed-off-by: Quan Zhou <quan.zhou@mediatek.com>
    Reviewed-by: Sean Wang <sean.wang@mediatek.com>
    Link: https://patch.msgid.link/d5960fbced0beaf33c30203f7f8fb91d0899c87b.1764228973.git.quan.zhou@mediatek.com
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: mt76: mt7925: fix incorrect length field in txpower command [+ + +]
Author: Ming Yen Hsieh <mingyen.hsieh@mediatek.com>
Date:   Mon Sep 8 15:25:26 2025 +0800

    wifi: mt76: mt7925: fix incorrect length field in txpower command
    
    commit ccb186326bb6b7f20d77982f855568e7087ad0d7 upstream.
    
    Set `tx_power_tlv->len` to `msg_len` instead of `sizeof(*tx_power_tlv)`
    to ensure the correct message length is sent to firmware.
    
    Cc: stable@vger.kernel.org
    Fixes: c948b5da6bbe ("wifi: mt76: mt7925: add Mediatek Wi-Fi7 driver for mt7925 chips")
    Signed-off-by: Ming Yen Hsieh <mingyen.hsieh@mediatek.com>
    Link: https://patch.msgid.link/20250908072526.1833938-1-mingyen.hsieh@mediatek.com
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: mt76: mt7925: fix incorrect TLV length in CLC command [+ + +]
Author: Quan Zhou <quan.zhou@mediatek.com>
Date:   Sun May 10 13:20:48 2026 -0400

    wifi: mt76: mt7925: fix incorrect TLV length in CLC command
    
    [ Upstream commit 62e037aa8cf5a69b7ea63336705a35c897b9db2b ]
    
    The previous implementation of __mt7925_mcu_set_clc() set the TLV length
    field (.len) incorrectly during CLC command construction. The length was
    initialized as sizeof(req) - 4, regardless of the actual segment length.
    This could cause the WiFi firmware to misinterpret the command payload,
    resulting in command execution errors.
    
    This patch moves the TLV length assignment to after the segment is
    selected, and sets .len to sizeof(req) + seg->len - 4, matching the
    actual command content. This ensures the firmware receives the
    correct TLV length and parses the command properly.
    
    Fixes: c948b5da6bbe ("wifi: mt76: mt7925: add Mediatek Wi-Fi7 driver for mt7925 chips")
    Cc: stable@vger.kernel.org
    Signed-off-by: Quan Zhou <quan.zhou@mediatek.com>
    Acked-by: Sean Wang <sean.wang@mediatek.com>
    Link: https://patch.msgid.link/f56ae0e705774dfa8aab3b99e5bbdc92cd93523e.1772011204.git.quan.zhou@mediatek.com
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: rsi: fix kthread lifetime race between self-exit and external-stop [+ + +]
Author: Jeongjun Park <aha310510@gmail.com>
Date:   Thu Apr 23 02:38:46 2026 +0900

    wifi: rsi: fix kthread lifetime race between self-exit and external-stop
    
    commit db57a1aa54ff68669781976e4edb045e09e2b65b upstream.
    
    RSI driver use both self-exit(kthread_complete_and_exit) and external-stop
    (kthread_stop) when killing a kthread. Generally, kthread_stop() is called
    first, and in this case, no particular issues occur.
    
    However, in rare instances where kthread_complete_and_exit() is called
    first and then kthread_stop() is called, a UAF occurs because the kthread
    object, which has already exited and been freed, is accessed again.
    
    Therefore, to prevent this with minimal modification, you must remove
    kthread_stop() and change the code to wait until the self-exit operation
    is completed.
    
    Cc: <stable@vger.kernel.org>
    Reported-by: syzbot+5de83f57cd8531f55596@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/all/69e5d03b.a00a0220.1bd0ca.0064.GAE@google.com/
    Fixes: 4c62764d0fc2 ("rsi: improve kernel thread handling to fix kernel panic")
    Signed-off-by: Jeongjun Park <aha310510@gmail.com>
    Link: https://patch.msgid.link/20260422173846.37640-1-aha310510@gmail.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/CPU/AMD: Prevent improper isolation of shared resources in Zen2's op cache [+ + +]
Author: Prathyushi Nangia <prathyushi.nangia@amd.com>
Date:   Tue Dec 9 10:01:33 2025 -0600

    x86/CPU/AMD: Prevent improper isolation of shared resources in Zen2's op cache
    
    commit c21b90f77687075115d989e53a8ec5e2bb427ab1 upstream.
    
    Make sure resources are not improperly shared in the op cache and
    cause instruction corruption this way.
    
    Signed-off-by: Prathyushi Nangia <prathyushi.nangia@amd.com>
    Co-developed-by: Borislav Petkov (AMD) <bp@alien8.de>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/shstk: Prevent deadlock during shstk sigreturn [+ + +]
Author: Rick Edgecombe <rick.p.edgecombe@intel.com>
Date:   Thu May 7 16:53:48 2026 -0700

    x86/shstk: Prevent deadlock during shstk sigreturn
    
    [ Upstream commit 9874b2917b9fbc30956fee209d3c4aa47201c64e ]
    
    During sigreturn the shadow stack signal frame is popped. The kernel does
    this by reading the shadow stack using normal read accesses. When it can't
    assume the memory is shadow stack, it takes extra steps to makes sure it is
    reading actual shadow stack memory and not other normal readable memory. It
    does this by holding the mmap read lock while doing the access and checking
    the flags of the VMA.
    
    Unfortunately that is not safe. If the read of the shadow stack sigframe
    hits a page fault, the fault handler will try to recursively grab another
    mmap read lock. This normally works ok, but if a writer on another CPU is
    also waiting, the second read lock could fail and cause a deadlock.
    
    Fix this by doing the read of the userspace memory via gup. Embed it in the
    get_shstk_data() helper.
    
    Currently there is a check that skips the lookup work when the SSP can be
    assumed to be on a shadow stack. While reorganizing the function, remove
    the optimization to make the tricky code flows more common, such that
    issues like this cannot escape detection for so long.
    
    [Due to missing per-vma MM sequence counter, use a simpler GUP based
    solution for the backport]
    Cc: <stable@vger.kernel.org> # Depends on https://lore.kernel.org/all/20260504205856.536296-1-rick.p.edgecombe@intel.com/
    Signed-off-by: Rick Edgecombe <rick.p.edgecombe@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86: shadow stacks: proper error handling for mmap lock [+ + +]
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Wed Apr 8 13:18:57 2026 -0700

    x86: shadow stacks: proper error handling for mmap lock
    
    [ Upstream commit 52f657e34d7b21b47434d9d8b26fa7f6778b63a0 ]
    
    김영민 reports that shstk_pop_sigframe() doesn't check for errors from
    mmap_read_lock_killable(), which is a silly oversight, and also shows
    that we haven't marked those functions with "__must_check", which would
    have immediately caught it.
    
    So let's fix both issues.
    
    Reported-by: 김영민 <osori@hspace.io>
    Acked-by: Oleg Nesterov <oleg@redhat.com>
    Acked-by: Dave Hansen <dave.hansen@intel.com>
    Acked-by: Rick Edgecombe <rick.p.edgecombe@intel.com>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
xfrm: ah: account for ESN high bits in async callbacks [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Sun Apr 19 18:35:42 2026 -0400

    xfrm: ah: account for ESN high bits in async callbacks
    
    commit ec54093e6a8f87e800bb6aa15eb7fc1e33faa524 upstream.
    
    AH allocates its temporary auth/ICV layout differently when ESN is enabled:
    the async ahash setup appends a 4-byte seqhi slot before the ICV or
    auth_data area, but the async completion callbacks still reconstruct the
    temporary layout as if seqhi were absent.
    
    With an async AH implementation selected, that makes AH copy or compare
    the wrong bytes on both the IPv4 and IPv6 paths. In UML repro on IPv4 AH
    with ESN and forced async hmac(sha1), ping fails with 100% packet loss,
    and the callback logs show the pre-fix drift:
    
      ah4 output_done: esn=1 err=0 icv_off=20 expected_off=24
      ah4 input_done: esn=1 auth_off=20 expected_auth_off=24 icv_off=32 expected_icv_off=36
    
    Reconstruct the callback-side layout the same way the setup path built it
    by skipping the ESN seqhi slot before locating the saved auth_data or ICV.
    Per RFC 4302, the ESN high-order 32 bits participate in the AH ICV
    computation, so the async callbacks must account for the seqhi slot.
    
    Post-fix, the same IPv4 AH+ESN+forced-async-hmac(sha1) UML repro shows
    the corrected offset (ah4 output_done: esn=1 err=0 icv_off=24
    expected_off=24) and ping succeeds; net/ipv4/ah4.o and net/ipv6/ah6.o
    build clean at W=1. IPv6 AH+ESN was not exercised at runtime, and the
    change has not been tested against a real async hardware AH engine.
    
    Fixes: d4d573d0334d ("{IPv4,xfrm} Add ESN support for AH egress part")
    Fixes: d8b2a8600b0e ("{IPv4,xfrm} Add ESN support for AH ingress part")
    Fixes: 26dd70c3fad3 ("{IPv6,xfrm} Add ESN support for AH egress part")
    Fixes: 8d6da6f32557 ("{IPv6,xfrm} Add ESN support for AH ingress part")
    Cc: stable@vger.kernel.org
    Assisted-by: Codex:gpt-5-4
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfrm: defensively unhash xfrm_state lists in __xfrm_state_delete [+ + +]
Author: Michal Kosiorek <mkosiorek121@gmail.com>
Date:   Wed Apr 29 10:54:51 2026 +0200

    xfrm: defensively unhash xfrm_state lists in __xfrm_state_delete
    
    commit 14acf9652e5690de3c7486c6db5fb8dafd0a32a3 upstream.
    
    KASAN reproduces a slab-use-after-free in __xfrm_state_delete()'s
    hlist_del_rcu calls under syzkaller load on linux-6.12.y stable
    (reproduced on 6.12.47, also reachable via the same code path on
    torvalds/master and on the ipsec tree). Nine unique signatures cluster
    in the xfrm_state lifecycle, the load-bearing one being:
    
      BUG: KASAN: slab-use-after-free in __hlist_del include/linux/list.h:990 [inline]
      BUG: KASAN: slab-use-after-free in hlist_del_rcu include/linux/rculist.h:516 [inline]
      BUG: KASAN: slab-use-after-free in __xfrm_state_delete net/xfrm/xfrm_state.c
      Write of size 8 at addr ffff8881198bcb70 by task kworker/u8:9/435
    
      Workqueue: netns cleanup_net
      Call Trace:
       __hlist_del / hlist_del_rcu
       __xfrm_state_delete
       xfrm_state_delete
       xfrm_state_flush
       xfrm_state_fini
       ops_exit_list
       cleanup_net
    
    The other observed signatures hit the same slab object from
    __xfrm_state_lookup, xfrm_alloc_spi, __xfrm_state_insert and an OOB
    write variant of __xfrm_state_delete, all on the byseq/byspi
    hash chains.
    
    __xfrm_state_delete() guards its byseq and byspi unhashes with
    value-based predicates:
    
            if (x->km.seq)
                    hlist_del_rcu(&x->byseq);
            if (x->id.spi)
                    hlist_del_rcu(&x->byspi);
    
    while everywhere else in the file (e.g. state_cache, state_cache_input)
    the safer hlist_unhashed() check is used. xfrm_alloc_spi() sets
    x->id.spi = newspi inside xfrm_state_lock and then immediately inserts
    into byspi, but a path that observes x->id.spi != 0 outside of
    xfrm_state_lock can still skip-or-hit the byspi unhash inconsistently
    with whether x is actually on the list. The same holds for x->km.seq
    versus byseq, and the bydst/bysrc unhashes have no predicate at all,
    so a second __xfrm_state_delete() on the same object writes through
    LIST_POISON pprev.
    
    The defensive change here:
    
      - Use hlist_del_init_rcu() instead of hlist_del_rcu() on bydst,
        bysrc, byseq and byspi so a second deletion is a no-op rather
        than a write through LIST_POISON pprev. The byseq/byspi nodes
        are already initialised in xfrm_state_alloc().
      - Test hlist_unhashed() rather than the value predicate for
        byseq/byspi, so the unhash decision tracks list state rather than
        mutable scalar fields.
    
    Empirical verification: applied this patch on top of v6.12.47, rebuilt,
    and re-ran the same syzkaller harness for 1h16m on a previously-crashy
    configuration that produced ~100 hits each of slab-use-after-free
    Read in xfrm_alloc_spi / Read in __xfrm_state_lookup / Write in
    __xfrm_state_delete. After the patch, 7.1M execs across 32 VMs at
    ~1550 exec/sec produced zero xfrm_state UAF/OOB hits. /proc/slabinfo
    confirms the xfrm_state slab is actively allocated and freed during
    the run (~143 KiB resident), so the fuzzer is still exercising those
    code paths -- they just no longer crash.
    
    Reproduction:
    
      - Linux 6.12.47 x86_64 + KASAN_GENERIC + KASAN_INLINE + KCOV
      - syzkaller @ 746545b8b1e4c3a128db8652b340d3df90ce61db
      - 32 QEMU/KVM VMs x 2 vCPU on AWS c5.metal bare metal
      - 9 unique signatures collected in ~9h, all within xfrm_state
        lifecycle
    
    Fixes: fe9f1d8779cb ("xfrm: add state hashtable keyed by seq")
    Fixes: 7b4dc3600e48 ("[XFRM]: Do not add a state whose SPI is zero to the SPI hash.")
    Reported-by: Michal Kosiorek <mkosiorek121@gmail.com>
    Tested-by: Michal Kosiorek <mkosiorek121@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Michal Kosiorek <mkosiorek121@gmail.com>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfrm: provide message size for XFRM_MSG_MAPPING [+ + +]
Author: Ruijie Li <ruijieli51@gmail.com>
Date:   Wed Apr 29 00:41:43 2026 +0800

    xfrm: provide message size for XFRM_MSG_MAPPING
    
    commit 28465227c80fe417b4013c432be1f3737cb9f9a3 upstream.
    
    The compat 64=>32 translation path handles XFRM_MSG_MAPPING, but
    xfrm_msg_min[] does not provide the native payload size for this
    message type.
    
    Add the missing XFRM_MSG_MAPPING entry so compat translation can size
    and translate mapping notifications correctly.
    
    Fixes: 5461fc0c8d9f ("xfrm/compat: Add 64=>32-bit messages translator")
    Cc: stable@kernel.org
    Reported-by: Yuan Tan <yuantan098@gmail.com>
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Reported-by: Xin Liu <bird@lzu.edu.cn>
    Signed-off-by: Ruijie Li <ruijieli51@gmail.com>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>