Changelog in Linux kernel 6.12.83

 
af_unix: read UNIX_DIAG_VFS data under unix_state_lock [+ + +]
Author: Jiexun Wang <[email protected]>
Date:   Tue Apr 7 16:00:14 2026 +0800

    af_unix: read UNIX_DIAG_VFS data under unix_state_lock
    
    [ Upstream commit 39897df386376912d561d4946499379effa1e7ef ]
    
    Exact UNIX diag lookups hold a reference to the socket, but not to
    u->path. Meanwhile, unix_release_sock() clears u->path under
    unix_state_lock() and drops the path reference after unlocking.
    
    Read the inode and device numbers for UNIX_DIAG_VFS while holding
    unix_state_lock(), then emit the netlink attribute after dropping the
    lock.
    
    This keeps the VFS data stable while the reply is being built.
    
    Fixes: 5f7b0569460b ("unix_diag: Unix inode info NLA")
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Co-developed-by: Yuan Tan <[email protected]>
    Signed-off-by: Yuan Tan <[email protected]>
    Suggested-by: Xin Liu <[email protected]>
    Tested-by: Ren Wei <[email protected]>
    Signed-off-by: Jiexun Wang <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ALSA: 6fire: fix use-after-free on disconnect [+ + +]
Author: Berk Cem Goksel <[email protected]>
Date:   Fri Apr 10 08:13:41 2026 +0300

    ALSA: 6fire: fix use-after-free on disconnect
    
    commit b9c826916fdce6419b94eb0cd8810fdac18c2386 upstream.
    
    In usb6fire_chip_abort(), the chip struct is allocated as the card's
    private data (via snd_card_new with sizeof(struct sfire_chip)).  When
    snd_card_free_when_closed() is called and no file handles are open, the
    card and embedded chip are freed synchronously.  The subsequent
    chip->card = NULL write then hits freed slab memory.
    
    Call trace:
      usb6fire_chip_abort sound/usb/6fire/chip.c:59 [inline]
      usb6fire_chip_disconnect+0x348/0x358 sound/usb/6fire/chip.c:182
      usb_unbind_interface+0x1a8/0x88c drivers/usb/core/driver.c:458
      ...
      hub_event+0x1a04/0x4518 drivers/usb/core/hub.c:5953
    
    Fix by moving the card lifecycle out of usb6fire_chip_abort() and into
    usb6fire_chip_disconnect().  The card pointer is saved in a local
    before any teardown, snd_card_disconnect() is called first to prevent
    new opens, URBs are aborted while chip is still valid, and
    snd_card_free_when_closed() is called last so chip is never accessed
    after the card may be freed.
    
    Fixes: a0810c3d6dd2 ("ALSA: 6fire: Release resources at card release")
    Cc: [email protected]
    Cc: Andrey Konovalov <[email protected]>
    Signed-off-by: Berk Cem Goksel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: asihpi: avoid write overflow check warning [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Wed Mar 18 13:40:07 2026 +0100

    ALSA: asihpi: avoid write overflow check warning
    
    [ Upstream commit 591721223be9e28f83489a59289579493b8e3d83 ]
    
    clang-22 rightfully warns that the memcpy() in adapter_prepare() copies
    between different structures, crossing the boundary of nested
    structures inside it:
    
    In file included from sound/pci/asihpi/hpimsgx.c:13:
    In file included from include/linux/string.h:386:
    include/linux/fortify-string.h:569:4: error: call to '__write_overflow_field' declared with 'warning' attribute: detected write beyond size of field (1st parameter); maybe use struct_group()? [-Werror,-Wattribute-warning]
      569 |                         __write_overflow_field(p_size_field, size);
    
    The two structures seem to refer to the same layout, despite the
    separate definitions, so the code is in fact correct.
    
    Avoid the warning by copying the two inner structures separately.
    I see the same pattern happens in other functions in the same file,
    so there is a chance that this may come back in the future, but
    this instance is the only one that I saw in practice, hitting it
    multiple times per day in randconfig build.
    
    Signed-off-by: Arnd Bergmann <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: ctxfi: Limit PTP to a single page [+ + +]
Author: Harin Lee <[email protected]>
Date:   Mon Apr 6 16:48:57 2026 +0900

    ALSA: ctxfi: Limit PTP to a single page
    
    commit e9418da50d9e5c496c22fe392e4ad74c038a94eb upstream.
    
    Commit 391e69143d0a increased CT_PTP_NUM from 1 to 4 to support 256
    playback streams, but the additional pages are not used by the card
    correctly. The CT20K2 hardware already has multiple VMEM_PTPAL
    registers, but using them separately would require refactoring the
    entire virtual memory allocation logic.
    
    ct_vm_map() always uses PTEs in vm->ptp[0].area regardless of
    CT_PTP_NUM. On AMD64 systems, a single PTP covers 512 PTEs (2M). When
    aggregate memory allocations exceed this limit, ct_vm_map() tries to
    access beyond the allocated space and causes a page fault:
    
      BUG: unable to handle page fault for address: ffffd4ae8a10a000
      Oops: Oops: 0002 [#1] SMP PTI
      RIP: 0010:ct_vm_map+0x17c/0x280 [snd_ctxfi]
      Call Trace:
      atc_pcm_playback_prepare+0x225/0x3b0
      ct_pcm_playback_prepare+0x38/0x60
      snd_pcm_do_prepare+0x2f/0x50
      snd_pcm_action_single+0x36/0x90
      snd_pcm_action_nonatomic+0xbf/0xd0
      snd_pcm_ioctl+0x28/0x40
      __x64_sys_ioctl+0x97/0xe0
      do_syscall_64+0x81/0x610
      entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Revert CT_PTP_NUM to 1. The 256 SRC_RESOURCE_NUM and playback_count
    remain unchanged.
    
    Fixes: 391e69143d0a ("ALSA: ctxfi: Bump playback substreams to 256")
    Cc: [email protected]
    Signed-off-by: Harin Lee <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: fireworks: bound device-supplied status before string array lookup [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Thu Apr 9 16:05:54 2026 +0200

    ALSA: fireworks: bound device-supplied status before string array lookup
    
    commit 07704bbf36f57e4379e4cadf96410dab14621e3b upstream.
    
    The status field in an EFW response is a 32-bit value supplied by the
    firewire device.  efr_status_names[] has 17 entries so a status value
    outside that range goes off into the weeds when looking at the %s value.
    
    Even worse, the status could return EFR_STATUS_INCOMPLETE which is
    0x80000000, and is obviously not in that array of potential strings.
    
    Fix this up by properly bounding the index against the array size and
    printing "unknown" if it's not recognized.
    
    Cc: Clemens Ladisch <[email protected]>
    Cc: Takashi Sakamoto <[email protected]>
    Cc: Jaroslav Kysela <[email protected]>
    Cc: Takashi Iwai <[email protected]>
    Fixes: bde8a8f23bbe ("ALSA: fireworks: Add transaction and some commands")
    Cc: stable <[email protected]>
    Assisted-by: gregkh_clanker_t1000
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Reviewed-by: Takashi Sakamoto <[email protected]>
    Link: https://patch.msgid.link/2026040953-astute-camera-1aa1@gregkh
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: hda/realtek: Add HP ENVY Laptop 13-ba0xxx quirk [+ + +]
Author: Andrii Kovalchuk <[email protected]>
Date:   Sun Mar 15 01:08:51 2026 +0000

    ALSA: hda/realtek: Add HP ENVY Laptop 13-ba0xxx quirk
    
    [ Upstream commit 793b008cd39516385791a1d1d223d817e947a471 ]
    
    Add a PCI quirk for HP ENVY Laptop 13-ba0xxx (PCI device ID 0x8756)
    to enable proper mute LED and mic mute behavior using the
    ALC245_FIXUP_HP_X360_MUTE_LEDS fixup.
    
    Signed-off-by: Andrii Kovalchuk <[email protected]>
    Link: https://patch.msgid.link/u0s-uRVegF9BN0t-4JnOUwsIAR-mVc4U4FJfJHdEHX7ro_laErHD9y35NebWybcN16gVaVHPJo1ap3AoJ1a2gqJImPvThgeNt_SYVY1KaDw=@proton.me
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda/realtek: Add mute LED quirk for HP Pavilion 15-eg0xxx [+ + +]
Author: César Montoya <[email protected]>
Date:   Sat Mar 21 10:36:03 2026 -0500

    ALSA: hda/realtek: Add mute LED quirk for HP Pavilion 15-eg0xxx
    
    [ Upstream commit 2f388b4e8fdd6b0f27cafd281658daacfd85807e ]
    
    The HP Pavilion 15-eg0xxx with subsystem ID 0x103c87cb uses a Realtek
    ALC287 codec with a mute LED wired to GPIO pin 4 (mask 0x10). The
    existing ALC287_FIXUP_HP_GPIO_LED fixup already handles this correctly,
    but the subsystem ID was missing from the quirk table.
    
    GPIO pin confirmed via manual hda-verb testing:
      hda-verb SET_GPIO_MASK 0x10
      hda-verb SET_GPIO_DIRECTION 0x10
      hda-verb SET_GPIO_DATA 0x10
    
    Signed-off-by: César Montoya <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda/realtek: Add quirk for ASUS ROG Flow Z13-KJP GZ302EAC [+ + +]
Author: Matthew Schwartz <[email protected]>
Date:   Fri Mar 13 10:25:03 2026 -0700

    ALSA: hda/realtek: Add quirk for ASUS ROG Flow Z13-KJP GZ302EAC
    
    [ Upstream commit 59f68dc1d8df3142cb58fd2568966a9bb7b0ed8a ]
    
    Fixes lack of audio output on the ASUS ROG Flow Z13-KJP GZ302EAC model,
    similar to the ASUS ROG Flow Z13 GZ302EA.
    
    Signed-off-by: Matthew Schwartz <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda/realtek: add quirk for Framework F111:000F [+ + +]
Author: Dustin L. Howett <[email protected]>
Date:   Fri Mar 27 10:54:40 2026 -0500

    ALSA: hda/realtek: add quirk for Framework F111:000F
    
    [ Upstream commit bac1e57adf08c9ee33e95fb09cd032f330294e70 ]
    
    Similar to commit 7b509910b3ad ("ALSA hda/realtek: Add quirk for
    Framework F111:000C") and previous quirks for Framework systems with
    Realtek codecs.
    
    000F is another new platform with an ALC285 which needs the same quirk.
    
    Signed-off-by: Dustin L. Howett <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda/realtek: Add quirk for Lenovo Yoga Pro 7 14IAH10 [+ + +]
Author: songxiebing <[email protected]>
Date:   Sun Apr 5 09:26:51 2026 +0800

    ALSA: hda/realtek: Add quirk for Lenovo Yoga Pro 7 14IAH10
    
    [ Upstream commit f0541edb2e7333f320642c7b491a67912c1f65db ]
    
    The bass speakers are not working, and add the following entry
    in /etc/modprobe.d/snd.conf:
    options snd-sof-intel-hda-generic hda_model=alc287-yoga9-bass-spk-pin
    Fixes the bass speakers.
    
    So add the quick ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN here.
    
    Reported-by: Fernando Garcia Corona <[email protected]>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=221317
    Signed-off-by: songxiebing <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda/realtek: Add quirk for Lenovo Yoga Pro 7 14IMH9 [+ + +]
Author: Alexander Savenko <[email protected]>
Date:   Tue Mar 31 11:29:28 2026 +0300

    ALSA: hda/realtek: Add quirk for Lenovo Yoga Pro 7 14IMH9
    
    [ Upstream commit 217d5bc9f96272316ac5a3215c7cc32a5127bbf3 ]
    
    The Lenovo Yoga Pro 7 14IMH9 (DMI: 83E2) shares PCI SSID 17aa:3847
    with the Legion 7 16ACHG6, but has a different codec subsystem ID
    (17aa:38cf). The existing SND_PCI_QUIRK for 17aa:3847 applies
    ALC287_FIXUP_LEGION_16ACHG6, which attempts to initialize an external
    I2C amplifier (CLSA0100) that is not present on the Yoga Pro 7 14IMH9.
    
    As a result, pin 0x17 (bass speakers) is connected to DAC 0x06 which
    has no volume control, making hardware volume adjustment completely
    non-functional. Audio is either silent or at maximum volume regardless
    of the slider position.
    
    Add a HDA_CODEC_QUIRK entry using the codec subsystem ID (17aa:38cf)
    to correctly identify the Yoga Pro 7 14IMH9 and apply
    ALC287_FIXUP_YOGA9_14IMH9_BASS_SPK_PIN, which redirects pin 0x17 to
    DAC 0x02 and restores proper volume control. The existing Legion entry
    is preserved unchanged.
    
    This follows the same pattern used for 17aa:386e, where Legion Y9000X
    and Yoga Pro 7 14ARP8 share a PCI SSID but are distinguished via
    HDA_CODEC_QUIRK.
    
    Link: https://github.com/nomad4tech/lenovo-yoga-pro-7-linux
    Tested-by: Alexander Savenko <[email protected]>
    Signed-off-by: Alexander Savenko <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda/realtek: Add quirk for Samsung Book2 Pro 360 (NP950QED) [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Mon Mar 30 18:22:20 2026 +0200

    ALSA: hda/realtek: Add quirk for Samsung Book2 Pro 360 (NP950QED)
    
    [ Upstream commit ea31be8a2c8c99eac198f3b7f2dc770111f2b182 ]
    
    There is another Book2 Pro model (NP950QED) that seems equipped with
    the same speaker module as the non-360 model, which requires
    ALC298_FIXUP_SAMSUNG_AMP_V2_2_AMPS quirk.
    
    Reported-by: Throw <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: usb-audio: Fix quirk flags for NeuralDSP Quad Cortex [+ + +]
Author: Phil Willoughby <[email protected]>
Date:   Sat Mar 28 08:07:34 2026 +0000

    ALSA: usb-audio: Fix quirk flags for NeuralDSP Quad Cortex
    
    [ Upstream commit bc5b4e5ae1a67700a618328217b6a3bd0f296e97 ]
    
    The NeuralDSP Quad Cortex does not support DSD playback. We need
    this product-specific entry with zero quirks because otherwise it
    falls through to the vendor-specific entry which marks it as
    supporting DSD playback.
    
    Cc: Yue Wang <[email protected]>
    Cc: Jaroslav Kysela <[email protected]>
    Cc: Takashi Iwai <[email protected]>
    Signed-off-by: Phil Willoughby <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: usb-audio: Improve Focusrite sample rate filtering [+ + +]
Author: Geoffrey D. Bennett <[email protected]>
Date:   Sat Feb 21 02:33:45 2026 +1030

    ALSA: usb-audio: Improve Focusrite sample rate filtering
    
    [ Upstream commit 24d2d3c5f94007a5a0554065ab7349bb69e28bcb ]
    
    Replace the bLength == 10 max_rate check in
    focusrite_valid_sample_rate() with filtering that also examines the
    bmControls VAL_ALT_SETTINGS bit.
    
    When VAL_ALT_SETTINGS is readable, the device uses strict
    per-altsetting rate filtering (only the highest rate pair for that
    altsetting is valid). When it is not readable, all rates up to
    max_rate are valid.
    
    For devices without the bLength == 10 Format Type descriptor extension
    but with VAL_ALT_SETTINGS readable and multiple altsettings (only seen
    in Scarlett 18i8 3rd Gen playback), fall back to the Focusrite
    convention: alt 1 = 48kHz, alt 2 = 96kHz, alt 3 = 192kHz.
    
    This produces correct rate tables for all tested Focusrite devices
    (all Scarlett 2nd, 3rd, and 4th Gen, Clarett+, and Vocaster) using
    only USB descriptors, allowing QUIRK_FLAG_VALIDATE_RATES to be removed
    for Focusrite in the next commit.
    
    Signed-off-by: Geoffrey D. Bennett <[email protected]>
    Signed-off-by: Takashi Iwai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
arm64: dts: imx8mq: Set the correct gpu_ahb clock frequency [+ + +]
Author: Sebastian Krzyszkowiak <[email protected]>
Date:   Wed Jan 28 00:28:28 2026 +0100

    arm64: dts: imx8mq: Set the correct gpu_ahb clock frequency
    
    [ Upstream commit 1f99b5d93d99ca17d50b386a674d0ce1f20932d8 ]
    
    According to i.MX 8M Quad Reference Manual, GPU_AHB_CLK_ROOT's maximum
    frequency is 400MHz.
    
    Fixes: 45d2c84eb3a2 ("arm64: dts: imx8mq: add GPU node")
    Reviewed-by: Frank Li <[email protected]>
    Signed-off-by: Sebastian Krzyszkowiak <[email protected]>
    Reviewed-by: Peng Fan <[email protected]>
    Reviewed-by: Fabio Estevam <[email protected]>
    Signed-off-by: Frank Li <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: imx93-9x9-qsb: change usdhc tuning step for eMMC and SD [+ + +]
Author: Luke Wang <[email protected]>
Date:   Tue Feb 3 19:23:08 2026 +0800

    arm64: dts: imx93-9x9-qsb: change usdhc tuning step for eMMC and SD
    
    [ Upstream commit 08903184553def7ba1ad6ba4fa8afe1ba2ee0a21 ]
    
    During system resume, the following errors occurred:
    
      [  430.638625] mmc1: error -84 writing Cache Enable bit
      [  430.643618] mmc1: error -84 doing runtime resume
    
    For eMMC and SD, there are two tuning pass windows and the gap between
    those two windows may only have one cell. If tuning step > 1, the gap may
    just be skipped and host assumes those two windows as a continuous
    windows. This will cause a wrong delay cell near the gap to be selected.
    
    Set the tuning step to 1 to avoid selecting the wrong delay cell.
    
    For SDIO, the gap is sufficiently large, so the default tuning step does
    not cause this issue.
    
    Fixes: 0565d20cd8c2 ("arm64: dts: freescale: Support i.MX93 9x9 Quick Start Board")
    Signed-off-by: Luke Wang <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Signed-off-by: Frank Li <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: imx93-tqma9352: improve eMMC pad configuration [+ + +]
Author: Markus Niebel <[email protected]>
Date:   Mon Feb 9 16:50:14 2026 +0100

    arm64: dts: imx93-tqma9352: improve eMMC pad configuration
    
    [ Upstream commit b6c94c71f349479b76fcc0ef0dc7147f3f326dff ]
    
    Use DSE x4 an PullUp for CMD an DAT, DSE x4 and PullDown for CLK to improve
    stability and detection at low temperatures under -25°C.
    
    Fixes: 0b5fdfaa8e45 ("arm64: dts: freescale: imx93-tqma9352: set SION for cmd and data pad of USDHC")
    Signed-off-by: Markus Niebel <[email protected]>
    Signed-off-by: Alexander Stein <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Signed-off-by: Frank Li <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: qcom: hamoa/x1: fix idle exit latency [+ + +]
Author: Daniel J Blueman <[email protected]>
Date:   Fri Feb 20 20:44:58 2026 +0800

    arm64: dts: qcom: hamoa/x1: fix idle exit latency
    
    [ Upstream commit 3ecea84d2b90bbf934d5ca75514fa902fd71e03f ]
    
    Designs based on the Qualcomm X1 Hamoa reference platform report:
    driver: Idle state 1 target residency too low
    
    This is because the declared X1 idle entry plus exit latency of 680us
    exceeds the declared minimum 600us residency time:
      entry-latency-us = <180>;
      exit-latency-us = <500>;
      min-residency-us = <600>;
    
    Fix this to be 320us so the sum of the entry and exit latencies matches
    the downstream 500us exit latency, as directed by Maulik.
    
    Tested on a Lenovo Yoga Slim 7x with Qualcomm X1E-80-100.
    
    Fixes: 2e65616ef07f ("arm64: dts: qcom: x1e80100: Update C4/C5 residency/exit numbers")
    Signed-off-by: Daniel J Blueman <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ASoC: amd: yc: Add DMI entry for HP Laptop 15-fc0xxx [+ + +]
Author: Gilson Marquato Júnior <[email protected]>
Date:   Mon Mar 30 02:43:48 2026 +0100

    ASoC: amd: yc: Add DMI entry for HP Laptop 15-fc0xxx
    
    [ Upstream commit 8ec017cf31299c4b6287ebe27afe81c986aeef88 ]
    
    The HP Laptop 15-fc0xxx (subsystem ID 0x103c8dc9) has an internal
    DMIC connected to the AMD ACP6x audio coprocessor. Add a DMI quirk
    entry so the internal microphone is properly detected on this model.
    
    Tested on HP Laptop 15-fc0237ns with Fedora 43 (kernel 6.19.9).
    
    Signed-off-by: Gilson Marquato Júnior <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: amd: yc: Add DMI quirk for ASUS EXPERTBOOK BM1403CDA [+ + +]
Author: Vee Satayamas <[email protected]>
Date:   Sun Mar 15 21:25:12 2026 +0700

    ASoC: amd: yc: Add DMI quirk for ASUS EXPERTBOOK BM1403CDA
    
    [ Upstream commit f200b2f9a810c440c6750b56fc647b73337749a1 ]
    
    Add a DMI quirk for the Asus Expertbook BM1403CDA to resolve the issue of the
    internal microphone not being detected.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=221236
    Signed-off-by: Vee Satayamas <[email protected]>
    Reviewed-by: Zhang Heng <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: amd: yc: Add DMI quirk for Thin A15 B7VF [+ + +]
Author: Zhang Heng <[email protected]>
Date:   Mon Mar 16 16:02:18 2026 +0800

    ASoC: amd: yc: Add DMI quirk for Thin A15 B7VF
    
    [ Upstream commit 1f182ec9d7084db7dfdb2372d453c28f0e5c3f0a ]
    
    Add a DMI quirk for the Thin A15 B7VF fixing the issue where
    the internal microphone was not detected.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=220833
    Signed-off-by: Zhang Heng <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: qcom: q6apm: move component registration to unmanaged version [+ + +]
Author: Srinivas Kandagatla <[email protected]>
Date:   Thu Apr 2 08:11:06 2026 +0000

    ASoC: qcom: q6apm: move component registration to unmanaged version
    
    commit 6ec1235fc941dac6c011b30ee01d9220ff87e0cd upstream.
    
    q6apm component registers dais dynamically from ASoC toplology, which
    are allocated using device managed version apis. Allocating both
    component and dynamic dais using managed version could lead to incorrect
    free ordering, dai will be freed while component still holding references
    to it.
    
    Fix this issue by moving component to unmanged version so
    that the dai pointers are only freeded after the component is removed.
    
    ==================================================================
    BUG: KASAN: slab-use-after-free in snd_soc_del_component_unlocked+0x3d4/0x400 [snd_soc_core]
    Read of size 8 at addr ffff00084493a6e8 by task kworker/u48:0/3426
    Tainted: [W]=WARN
    Hardware name: LENOVO 21N2ZC5PUS/21N2ZC5PUS, BIOS N42ET57W (1.31 ) 08/08/2024
    Workqueue: pdr_notifier_wq pdr_notifier_work [pdr_interface]
    Call trace:
     show_stack+0x28/0x7c (C)
     dump_stack_lvl+0x60/0x80
     print_report+0x160/0x4b4
     kasan_report+0xac/0xfc
     __asan_report_load8_noabort+0x20/0x34
     snd_soc_del_component_unlocked+0x3d4/0x400 [snd_soc_core]
     snd_soc_unregister_component_by_driver+0x50/0x88 [snd_soc_core]
     devm_component_release+0x30/0x5c [snd_soc_core]
     devres_release_all+0x13c/0x210
     device_unbind_cleanup+0x20/0x190
     device_release_driver_internal+0x350/0x468
     device_release_driver+0x18/0x30
     bus_remove_device+0x1a0/0x35c
     device_del+0x314/0x7f0
     device_unregister+0x20/0xbc
     apr_remove_device+0x5c/0x7c [apr]
     device_for_each_child+0xd8/0x160
     apr_pd_status+0x7c/0xa8 [apr]
     pdr_notifier_work+0x114/0x240 [pdr_interface]
     process_one_work+0x500/0xb70
     worker_thread+0x630/0xfb0
     kthread+0x370/0x6c0
     ret_from_fork+0x10/0x20
    
    Allocated by task 77:
     kasan_save_stack+0x40/0x68
     kasan_save_track+0x20/0x40
     kasan_save_alloc_info+0x44/0x58
     __kasan_kmalloc+0xbc/0xdc
     __kmalloc_node_track_caller_noprof+0x1f4/0x620
     devm_kmalloc+0x7c/0x1c8
     snd_soc_register_dai+0x50/0x4f0 [snd_soc_core]
     soc_tplg_pcm_elems_load+0x55c/0x1eb8 [snd_soc_core]
     snd_soc_tplg_component_load+0x4f8/0xb60 [snd_soc_core]
     audioreach_tplg_init+0x124/0x1fc [snd_q6apm]
     q6apm_audio_probe+0x10/0x1c [snd_q6apm]
     snd_soc_component_probe+0x5c/0x118 [snd_soc_core]
     soc_probe_component+0x44c/0xaf0 [snd_soc_core]
     snd_soc_bind_card+0xad0/0x2370 [snd_soc_core]
     snd_soc_register_card+0x3b0/0x4c0 [snd_soc_core]
     devm_snd_soc_register_card+0x50/0xc8 [snd_soc_core]
     x1e80100_platform_probe+0x208/0x368 [snd_soc_x1e80100]
     platform_probe+0xc0/0x188
     really_probe+0x188/0x804
     __driver_probe_device+0x158/0x358
     driver_probe_device+0x60/0x190
     __device_attach_driver+0x16c/0x2a8
     bus_for_each_drv+0x100/0x194
     __device_attach+0x174/0x380
     device_initial_probe+0x14/0x20
     bus_probe_device+0x124/0x154
     deferred_probe_work_func+0x140/0x220
     process_one_work+0x500/0xb70
     worker_thread+0x630/0xfb0
     kthread+0x370/0x6c0
     ret_from_fork+0x10/0x20
    
    Freed by task 3426:
     kasan_save_stack+0x40/0x68
     kasan_save_track+0x20/0x40
     __kasan_save_free_info+0x4c/0x80
     __kasan_slab_free+0x78/0xa0
     kfree+0x100/0x4a4
     devres_release_all+0x144/0x210
     device_unbind_cleanup+0x20/0x190
     device_release_driver_internal+0x350/0x468
     device_release_driver+0x18/0x30
     bus_remove_device+0x1a0/0x35c
     device_del+0x314/0x7f0
     device_unregister+0x20/0xbc
     apr_remove_device+0x5c/0x7c [apr]
     device_for_each_child+0xd8/0x160
     apr_pd_status+0x7c/0xa8 [apr]
     pdr_notifier_work+0x114/0x240 [pdr_interface]
     process_one_work+0x500/0xb70
     worker_thread+0x630/0xfb0
     kthread+0x370/0x6c0
     ret_from_fork+0x10/0x20
    
    Fixes: 5477518b8a0e ("ASoC: qdsp6: audioreach: add q6apm support")
    Cc: [email protected]
    Signed-off-by: Srinivas Kandagatla <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: soc-core: call missing INIT_LIST_HEAD() for card_aux_list [+ + +]
Author: Kuninori Morimoto <[email protected]>
Date:   Fri Mar 27 02:43:54 2026 +0000

    ASoC: soc-core: call missing INIT_LIST_HEAD() for card_aux_list
    
    [ Upstream commit b9eff9732cb0f86a68c9d1592a98ceab47c01e95 ]
    
    Component has "card_aux_list" which is added/deled in bind/unbind aux dev
    function (A), and used in for_each_card_auxs() loop (B).
    
            static void soc_unbind_aux_dev(...)
            {
                    ...
                    for_each_card_auxs_safe(...) {
                            ...
    (A)                     list_del(&component->card_aux_list);
                    }                            ^^^^^^^^^^^^^
            }
    
            static int soc_bind_aux_dev(...)
            {
                    ...
                    for_each_card_pre_auxs(...) {
                            ...
    (A)                     list_add(&component->card_aux_list, ...);
                    }                            ^^^^^^^^^^^^^
                    ...
            }
    
            #define for_each_card_auxs(card, component)     \
    (B)             list_for_each_entry(component, ..., card_aux_list)
                                                        ^^^^^^^^^^^^^
    
    But it has been used without calling INIT_LIST_HEAD().
    
            > git grep card_aux_list sound/soc
            sound/soc/soc-core.c:           list_del(&component->card_aux_list);
            sound/soc/soc-core.c:           list_add(&component->card_aux_list, ...);
    
    call missing INIT_LIST_HEAD() for it.
    
    Signed-off-by: Kuninori Morimoto <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: SOF: topology: reject invalid vendor array size in token parser [+ + +]
Author: Cássio Gabriel <[email protected]>
Date:   Thu Mar 19 21:45:26 2026 -0300

    ASoC: SOF: topology: reject invalid vendor array size in token parser
    
    [ Upstream commit 215e5fe75881a7e2425df04aeeed47a903d5cd5d ]
    
    sof_parse_token_sets() accepts array->size values that can be invalid
    for a vendor tuple array header. In particular, a zero size does not
    advance the parser state and can lead to non-progress parsing on
    malformed topology data.
    
    Validate array->size against the minimum header size and reject values
    smaller than sizeof(*array) before parsing. This preserves behavior for
    valid topologies and hardens malformed-input handling.
    
    Signed-off-by: Cássio Gabriel <[email protected]>
    Acked-by: Peter Ujfalusi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: stm32_sai: fix incorrect BCLK polarity for DSP_A/B, LEFT_J [+ + +]
Author: Tomasz Merta <[email protected]>
Date:   Wed Apr 8 10:40:56 2026 +0200

    ASoC: stm32_sai: fix incorrect BCLK polarity for DSP_A/B, LEFT_J
    
    [ Upstream commit 0669631dbccd41cf3ca7aa70213fcd8bb41c4b38 ]
    
    The STM32 SAI driver do not set the clock strobing bit (CKSTR) for DSP_A,
    DSP_B and LEFT_J formats, causing data to be sampled on the wrong BCLK
    edge when SND_SOC_DAIFMT_NB_NF is used.
    
    Per ALSA convention, NB_NF requires sampling on the rising BCLK edge.
    The STM32MP25 SAI reference manual states that CKSTR=1 is required for
    signals received by the SAI to be sampled on the SCK rising edge.
    Without setting CKSTR=1, the SAI samples on the falling edge, violating
    the NB_NF convention. For comparison, the NXP FSL SAI driver correctly
    sets FSL_SAI_CR2_BCP for DSP_A, DSP_B and LEFT_J, consistent with its
    I2S handling.
    
    This patch adds SAI_XCR1_CKSTR for DSP_A, DSP_B and LEFT_J in
    stm32_sai_set_dai_fmt which was verified empirically with a cs47l35 codec.
    RIGHT_J (LSB) is not investigated and addressed by this patch.
    
    Note: the STM32 I2S driver (stm32_i2s_set_dai_fmt) may have the same issue
    for DSP_A mode, as I2S_CGFR_CKPOL is not set. This has not been verified
    and is left for a separate investigation.
    
    Signed-off-by: Tomasz Merta <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ata: ahci: force 32-bit DMA for JMicron JMB582/JMB585 [+ + +]
Author: Arthur Husband <[email protected]>
Date:   Mon Apr 6 15:23:35 2026 -0700

    ata: ahci: force 32-bit DMA for JMicron JMB582/JMB585
    
    [ Upstream commit 105c42566a550e2d05fc14f763216a8765ee5d0e ]
    
    The JMicron JMB585 (and JMB582) SATA controllers advertise 64-bit DMA
    support via the S64A bit in the AHCI CAP register, but their 64-bit DMA
    implementation is defective. Under sustained I/O, DMA transfers targeting
    addresses above 4GB silently corrupt data -- writes land at incorrect
    memory addresses with no errors logged.
    
    The failure pattern is similar to the ASMedia ASM1061
    (commit 20730e9b2778 ("ahci: add 43-bit DMA address quirk for ASMedia
    ASM1061 controllers")), which also falsely advertised full 64-bit DMA
    support. However, the JMB585 requires a stricter 32-bit DMA mask rather
    than 43-bit, as corruption occurs with any address above 4GB.
    
    On the Minisforum N5 Pro specifically, the combination of the JMB585's
    broken 64-bit DMA with the AMD Family 1Ah (Strix Point) IOMMU causes
    silent data corruption that is only detectable via checksumming
    filesystems (BTRFS/ZFS scrub). The corruption occurs when 32-bit IOVA
    space is exhausted and the kernel transparently switches to 64-bit DMA
    addresses.
    
    Add device-specific PCI ID entries for the JMB582 (0x0582) and JMB585
    (0x0585) before the generic JMicron class match, using a new board type
    that combines AHCI_HFLAG_IGN_IRQ_IF_ERR (preserving existing behavior)
    with AHCI_HFLAG_32BIT_ONLY to force 32-bit DMA masks.
    
    Signed-off-by: Arthur Husband <[email protected]>
    Reviewed-by: Damien Le Moal <[email protected]>
    Signed-off-by: Niklas Cassel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bcache: fix cached_dev.sb_bio use-after-free and crash [+ + +]
Author: Mingzhe Zou <[email protected]>
Date:   Sun Mar 22 21:41:02 2026 +0800

    bcache: fix cached_dev.sb_bio use-after-free and crash
    
    commit fec114a98b8735ee89c75216c45a78e28be0f128 upstream.
    
    In our production environment, we have received multiple crash reports
    regarding libceph, which have caught our attention:
    
    ```
    [6888366.280350] Call Trace:
    [6888366.280452]  blk_update_request+0x14e/0x370
    [6888366.280561]  blk_mq_end_request+0x1a/0x130
    [6888366.280671]  rbd_img_handle_request+0x1a0/0x1b0 [rbd]
    [6888366.280792]  rbd_obj_handle_request+0x32/0x40 [rbd]
    [6888366.280903]  __complete_request+0x22/0x70 [libceph]
    [6888366.281032]  osd_dispatch+0x15e/0xb40 [libceph]
    [6888366.281164]  ? inet_recvmsg+0x5b/0xd0
    [6888366.281272]  ? ceph_tcp_recvmsg+0x6f/0xa0 [libceph]
    [6888366.281405]  ceph_con_process_message+0x79/0x140 [libceph]
    [6888366.281534]  ceph_con_v1_try_read+0x5d7/0xf30 [libceph]
    [6888366.281661]  ceph_con_workfn+0x329/0x680 [libceph]
    ```
    
    After analyzing the coredump file, we found that the address of
    dc->sb_bio has been freed. We know that cached_dev is only freed when it
    is stopped.
    
    Since sb_bio is a part of struct cached_dev, rather than an alloc every
    time.  If the device is stopped while writing to the superblock, the
    released address will be accessed at endio.
    
    This patch hopes to wait for sb_write to complete in cached_dev_free.
    
    It should be noted that we analyzed the cause of the problem, then tell
    all details to the QWEN and adopted the modifications it made.
    
    Signed-off-by: Mingzhe Zou <[email protected]>
    Fixes: cafe563591446 ("bcache: A block layer cache")
    Cc: [email protected] # 3.10+
    Signed-off-by: Coly Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Bluetooth: hci_sync: annotate data-races around hdev->req_status [+ + +]
Author: Cen Zhang <[email protected]>
Date:   Sun Mar 15 20:07:26 2026 +0800

    Bluetooth: hci_sync: annotate data-races around hdev->req_status
    
    [ Upstream commit b6807cfc195ef99e1ac37b2e1e60df40295daa8c ]
    
    __hci_cmd_sync_sk() sets hdev->req_status under hdev->req_lock:
    
        hdev->req_status = HCI_REQ_PEND;
    
    However, several other functions read or write hdev->req_status without
    holding any lock:
    
      - hci_send_cmd_sync() reads req_status in hci_cmd_work (workqueue)
      - hci_cmd_sync_complete() reads/writes from HCI event completion
      - hci_cmd_sync_cancel() / hci_cmd_sync_cancel_sync() read/write
      - hci_abort_conn() reads in connection abort path
    
    Since __hci_cmd_sync_sk() runs on hdev->req_workqueue while
    hci_send_cmd_sync() runs on hdev->workqueue, these are different
    workqueues that can execute concurrently on different CPUs. The plain
    C accesses constitute a data race.
    
    Add READ_ONCE()/WRITE_ONCE() annotations on all concurrent accesses
    to hdev->req_status to prevent potential compiler optimizations that
    could affect correctness (e.g., load fusing in the wait_event
    condition or store reordering).
    
    Signed-off-by: Cen Zhang <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
btrfs: tracepoints: get correct superblock from dentry in event btrfs_sync_file() [+ + +]
Author: Goldwyn Rodrigues <[email protected]>
Date:   Fri Mar 13 14:11:39 2026 -0400

    btrfs: tracepoints: get correct superblock from dentry in event btrfs_sync_file()
    
    [ Upstream commit a85b46db143fda5869e7d8df8f258ccef5fa1719 ]
    
    If overlay is used on top of btrfs, dentry->d_sb translates to overlay's
    super block and fsid assignment will lead to a crash.
    
    Use file_inode(file)->i_sb to always get btrfs_sb.
    
    Reviewed-by: Boris Burkov <[email protected]>
    Signed-off-by: Goldwyn Rodrigues <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
can: mcp251x: add error handling for power enable in open and resume [+ + +]
Author: Wenyuan Li <[email protected]>
Date:   Mon Mar 16 00:00:22 2026 +0800

    can: mcp251x: add error handling for power enable in open and resume
    
    [ Upstream commit 7a57354756c7df223abe2c33774235ad70cb4231 ]
    
    Add missing error handling for mcp251x_power_enable() calls in both
    mcp251x_open() and mcp251x_can_resume() functions.
    
    In mcp251x_open(), if power enable fails, jump to error path to close
    candev without attempting to disable power again.
    
    In mcp251x_can_resume(), properly check return values of power enable calls
    for both power and transceiver regulators. If any fails, return the error
    code to the PM framework and log the failure.
    
    This ensures the driver properly handles power control failures and
    maintains correct device state.
    
    Signed-off-by: Wenyuan Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [mkl: fix patch description]
    [mkl: mcp251x_can_resume(): replace goto by return]
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

can: raw: fix ro->uniq use-after-free in raw_rcv() [+ + +]
Author: Samuel Page <[email protected]>
Date:   Wed Apr 8 15:30:13 2026 +0100

    can: raw: fix ro->uniq use-after-free in raw_rcv()
    
    commit a535a9217ca3f2fccedaafb2fddb4c48f27d36dc upstream.
    
    raw_release() unregisters raw CAN receive filters via can_rx_unregister(),
    but receiver deletion is deferred with call_rcu(). This leaves a window
    where raw_rcv() may still be running in an RCU read-side critical section
    after raw_release() frees ro->uniq, leading to a use-after-free of the
    percpu uniq storage.
    
    Move free_percpu(ro->uniq) out of raw_release() and into a raw-specific
    socket destructor. can_rx_unregister() takes an extra reference to the
    socket and only drops it from the RCU callback, so freeing uniq from
    sk_destruct ensures the percpu area is not released until the relevant
    callbacks have drained.
    
    Fixes: 514ac99c64b2 ("can: fix multiple delivery of a single CAN frame for overlapping CAN filters")
    Cc: [email protected] # v4.1+
    Assisted-by: Bynario AI
    Signed-off-by: Samuel Page <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Acked-by: Oliver Hartkopp <[email protected]>
    [mkl: applied manually]
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
checkpatch: add support for Assisted-by tag [+ + +]
Author: Sasha Levin <[email protected]>
Date:   Wed Mar 11 17:58:17 2026 -0400

    checkpatch: add support for Assisted-by tag
    
    commit d1db4118489fffd2b2f612140b7acbb477880839 upstream.
    
    The Assisted-by tag was introduced in
    Documentation/process/coding-assistants.rst for attributing AI tool
    contributions to kernel patches.  However, checkpatch.pl did not recognize
    this tag, causing two issues:
    
      WARNING: Non-standard signature: Assisted-by:
      ERROR: Unrecognized email address: 'AGENT_NAME:MODEL_VERSION'
    
    Fix this by:
    1. Adding Assisted-by to the recognized $signature_tags list
    2. Skipping email validation for Assisted-by lines since they use the
       AGENT_NAME:MODEL_VERSION format instead of an email address
    3. Warning when the Assisted-by value doesn't match the expected format
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Reported-by: Bart Van Assche <[email protected]>
    Acked-by: Joe Perches <[email protected]>
    Cc: Andy Whitcroft <[email protected]>
    Cc: Dwaipayan Ray <[email protected]>
    Cc: Jonathan Corbet <[email protected]>
    Cc: Lukas Bulwahn <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
crypto: af_alg - limit RX SG extraction by receive buffer budget [+ + +]
Author: Douya Le <[email protected]>
Date:   Thu Apr 2 23:34:55 2026 +0800

    crypto: af_alg - limit RX SG extraction by receive buffer budget
    
    [ Upstream commit 8eceab19eba9dcbfd2a0daec72e1bf48aa100170 ]
    
    Make af_alg_get_rsgl() limit each RX scatterlist extraction to the
    remaining receive buffer budget.
    
    af_alg_get_rsgl() currently uses af_alg_readable() only as a gate
    before extracting data into the RX scatterlist. Limit each extraction
    to the remaining af_alg_rcvbuf(sk) budget so that receive-side
    accounting matches the amount of data attached to the request.
    
    If skcipher cannot obtain enough RX space for at least one chunk while
    more data remains to be processed, reject the recvmsg call instead of
    rounding the request length down to zero.
    
    Fixes: e870456d8e7c8d57c059ea479b5aadbb55ff4c3a ("crypto: algif_skcipher - overhaul memory management")
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Co-developed-by: Yuan Tan <[email protected]>
    Signed-off-by: Yuan Tan <[email protected]>
    Suggested-by: Xin Liu <[email protected]>
    Signed-off-by: Douya Le <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: algif_aead - Fix minimum RX size check for decryption [+ + +]
Author: Herbert Xu <[email protected]>
Date:   Sun Apr 12 13:32:21 2026 +0800

    crypto: algif_aead - Fix minimum RX size check for decryption
    
    [ Upstream commit 3d14bd48e3a77091cbce637a12c2ae31b4a1687c ]
    
    The check for the minimum receive buffer size did not take the
    tag size into account during decryption.  Fix this by adding the
    required extra length.
    
    Reported-by: [email protected]
    Reported-by: Daniel Pouzzner <[email protected]>
    Fixes: d887c52d6ae4 ("crypto: algif_aead - overhaul memory management")
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dcache: Limit the minimal number of bucket to two [+ + +]
Author: Zhihao Cheng <[email protected]>
Date:   Fri Jan 30 11:48:53 2026 +0800

    dcache: Limit the minimal number of bucket to two
    
    commit f08fe8891c3eeb63b73f9f1f6d97aa629c821579 upstream.
    
    There is an OOB read problem on dentry_hashtable when user sets
    'dhash_entries=1':
      BUG: unable to handle page fault for address: ffff888b30b774b0
      #PF: supervisor read access in kernel mode
      #PF: error_code(0x0000) - not-present page
      Oops: Oops: 0000 [#1] SMP PTI
      RIP: 0010:__d_lookup+0x56/0x120
       Call Trace:
        d_lookup.cold+0x16/0x5d
        lookup_dcache+0x27/0xf0
        lookup_one_qstr_excl+0x2a/0x180
        start_dirop+0x55/0xa0
        simple_start_creating+0x8d/0xa0
        debugfs_start_creating+0x8c/0x180
        debugfs_create_dir+0x1d/0x1c0
        pinctrl_init+0x6d/0x140
        do_one_initcall+0x6d/0x3d0
        kernel_init_freeable+0x39f/0x460
        kernel_init+0x2a/0x260
    
    There will be only one bucket in dentry_hashtable when dhash_entries is
    set as one, and d_hash_shift is calculated as 32 by dcache_init(). Then,
    following process will access more than one buckets(which memory region
    is not allocated) in dentry_hashtable:
     d_lookup
      b = d_hash(hash)
        dentry_hashtable + ((u32)hashlen >> d_hash_shift)
        // The C standard defines the behavior of right shift amounts
        // exceeding the bit width of the operand as undefined. The
        // result of '(u32)hashlen >> d_hash_shift' becomes 'hashlen',
        // so 'b' will point to an unallocated memory region.
      hlist_bl_for_each_entry_rcu(b)
       hlist_bl_first_rcu(head)
        h->first  // read OOB!
    
    Fix it by limiting the minimal number of dentry_hashtable bucket to two,
    so that 'd_hash_shift' won't exceeds the bit width of type u32.
    
    Cc: [email protected]
    Signed-off-by: Zhihao Cheng <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Yang Erkun <[email protected]>
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Docs/admin-guide/mm/damon/reclaim: warn commit_inputs vs param updates race [+ + +]
Author: SeongJae Park <[email protected]>
Date:   Sun Mar 29 08:30:49 2026 -0700

    Docs/admin-guide/mm/damon/reclaim: warn commit_inputs vs param updates race
    
    commit 0beba407d4585a15b0dc09f2064b5b3ddcb0e857 upstream.
    
    Patch series "Docs/admin-guide/mm/damon: warn commit_inputs vs other
    params race".
    
    Writing 'Y' to the commit_inputs parameter of DAMON_RECLAIM and
    DAMON_LRU_SORT, and writing other parameters before the commit_inputs
    request is completely processed can cause race conditions.  While the
    consequence can be bad, the documentation is not clearly describing that.
    Add clear warnings.
    
    The issue was discovered [1,2] by sashiko.
    
    
    This patch (of 2):
    
    DAMON_RECLAIM handles commit_inputs request inside kdamond thread,
    reading the module parameters.  If the user updates the module
    parameters while the kdamond thread is reading those, races can happen.
    To avoid this, the commit_inputs parameter shows whether it is still in
    the progress, assuming users wouldn't update parameters in the middle of
    the work.  Some users might ignore that.  Add a warning about the
    behavior.
    
    The issue was discovered in [1] by sashiko.
    
    Link: https://lore.kernel.org/[email protected]
    Link: https://lore.kernel.org/[email protected] [1]
    Link: https://lore.kernel.org/[email protected] [3]
    Fixes: 81a84182c343 ("Docs/admin-guide/mm/damon/reclaim: document 'commit_inputs' parameter")
    Signed-off-by: SeongJae Park <[email protected]>
    Cc: <[email protected]> # 5.19.x
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdgpu: Handle GPU page faults correctly on non-4K page systems [+ + +]
Author: Donet Tom <[email protected]>
Date:   Mon Mar 23 09:58:36 2026 +0530

    drm/amdgpu: Handle GPU page faults correctly on non-4K page systems
    
    [ Upstream commit 4e9597f22a3cb8600c72fc266eaac57981d834c8 ]
    
    During a GPU page fault, the driver restores the SVM range and then maps it
    into the GPU page tables. The current implementation passes a GPU-page-size
    (4K-based) PFN to svm_range_restore_pages() to restore the range.
    
    SVM ranges are tracked using system-page-size PFNs. On systems where the
    system page size is larger than 4K, using GPU-page-size PFNs to restore the
    range causes two problems:
    
    Range lookup fails:
    Because the restore function receives PFNs in GPU (4K) units, the SVM
    range lookup does not find the existing range. This will result in a
    duplicate SVM range being created.
    
    VMA lookup failure:
    The restore function also tries to locate the VMA for the faulting address.
    It converts the GPU-page-size PFN into an address using the system page
    size, which results in an incorrect address on non-4K page-size systems.
    As a result, the VMA lookup fails with the message: "address 0xxxx VMA is
    removed".
    
    This patch passes the system-page-size PFN to svm_range_restore_pages() so
    that the SVM range is restored correctly on non-4K page systems.
    
    Acked-by: Christian König <[email protected]>
    Signed-off-by: Donet Tom <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 074fe395fb13247b057f60004c7ebcca9f38ef46)
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/vc4: Fix a memory leak in hang state error path [+ + +]
Author: Maíra Canal <[email protected]>
Date:   Mon Mar 30 14:51:45 2026 -0300

    drm/vc4: Fix a memory leak in hang state error path
    
    [ Upstream commit 9525d169e5fd481538cf8c663cc5839e54f2e481 ]
    
    When vc4_save_hang_state() encounters an early return condition, it
    returns without freeing the previously allocated `kernel_state`,
    leaking memory.
    
    Add the missing kfree() calls by consolidating the early return paths
    into a single place.
    
    Fixes: 214613656b51 ("drm/vc4: Add an interface for capturing the GPU state after a hang.")
    Reviewed-by: Melissa Wen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Maíra Canal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/vc4: Fix memory leak of BO array in hang state [+ + +]
Author: Maíra Canal <[email protected]>
Date:   Mon Mar 30 14:51:44 2026 -0300

    drm/vc4: Fix memory leak of BO array in hang state
    
    [ Upstream commit f4dfd6847b3e5d24e336bca6057485116d17aea4 ]
    
    The hang state's BO array is allocated separately with kzalloc() in
    vc4_save_hang_state() but never freed in vc4_free_hang_state(). Add the
    missing kfree() for the BO array before freeing the hang state struct.
    
    Fixes: 214613656b51 ("drm/vc4: Add an interface for capturing the GPU state after a hang.")
    Reviewed-by: Melissa Wen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Maíra Canal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/vc4: platform_get_irq_byname() returns an int [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Mon Feb 23 16:53:39 2026 +0100

    drm/vc4: platform_get_irq_byname() returns an int
    
    commit e597a809a2b97e927060ba182f58eb3e6101bc70 upstream.
    
    platform_get_irq_byname() will return a negative value if an error
    happens, so it should be checked and not just passed directly into
    devm_request_threaded_irq() hoping all will be ok.
    
    Cc: Maxime Ripard <[email protected]>
    Cc: Dave Stevenson <[email protected]>
    Cc: Maíra Canal <[email protected]>
    Cc: Raspberry Pi Kernel Maintenance <[email protected]>
    Cc: Maarten Lankhorst <[email protected]>
    Cc: Thomas Zimmermann <[email protected]>
    Cc: David Airlie <[email protected]>
    Cc: Simona Vetter <[email protected]>
    Cc: stable <[email protected]>
    Assisted-by: gkh_clanker_2000
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Link: https://patch.msgid.link/2026022339-cornflake-t-shirt-2471@gregkh
    Signed-off-by: Maíra Canal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/vc4: Protect madv read in vc4_gem_object_mmap() with madv_lock [+ + +]
Author: Maíra Canal <[email protected]>
Date:   Mon Mar 30 14:51:46 2026 -0300

    drm/vc4: Protect madv read in vc4_gem_object_mmap() with madv_lock
    
    [ Upstream commit 338c56050d8e892604da97f67bfa8cc4015a955f ]
    
    The mmap callback reads bo->madv without holding madv_lock, racing with
    concurrent DRM_IOCTL_VC4_GEM_MADVISE calls that modify the field under
    the same lock. Add the missing locking to prevent the data race.
    
    Fixes: b9f19259b84d ("drm/vc4: Add the DRM_IOCTL_VC4_GEM_MADVISE ioctl")
    Reviewed-by: Melissa Wen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Maíra Canal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/vc4: Release runtime PM reference after binding V3D [+ + +]
Author: Maíra Canal <[email protected]>
Date:   Mon Mar 30 14:51:43 2026 -0300

    drm/vc4: Release runtime PM reference after binding V3D
    
    [ Upstream commit aaefbdde9abdc43699e110679c0e10972a5e1c59 ]
    
    The vc4_v3d_bind() function acquires a runtime PM reference via
    pm_runtime_resume_and_get() to access V3D registers during setup.
    However, this reference is never released after a successful bind.
    This prevents the device from ever runtime suspending, since the
    reference count never reaches zero.
    
    Release the runtime PM reference by adding pm_runtime_put_autosuspend()
    after autosuspend is configured, allowing the device to runtime suspend
    after the delay.
    
    Fixes: 266cff37d7fc ("drm/vc4: v3d: Rework the runtime_pm setup")
    Reviewed-by: Melissa Wen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Maíra Canal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dt-bindings: net: Fix Tegra234 MGBE PTP clock [+ + +]
Author: Jon Hunter <[email protected]>
Date:   Wed Apr 1 11:29:40 2026 +0100

    dt-bindings: net: Fix Tegra234 MGBE PTP clock
    
    [ Upstream commit fb22b1fc5bca3c0aad95388933497ceb30f1fb26 ]
    
    The PTP clock for the Tegra234 MGBE device is incorrectly named
    'ptp-ref' and should be 'ptp_ref'. This is causing the following
    warning to be observed on Tegra234 platforms that use this device:
    
     ERR KERN tegra-mgbe 6800000.ethernet eth0: Invalid PTP clock rate
     WARNING KERN tegra-mgbe 6800000.ethernet eth0: PTP init failed
    
    Although this constitutes an ABI breakage in the binding for this
    device, PTP support has clearly never worked and so fix this now
    so we can correct the device-tree for this device. Note that the
    MGBE driver still supports the legacy 'ptp-ref' clock name and so
    older/existing device-trees will still work, but given that this
    is not the correct name, there is no point to advertise this in the
    binding.
    
    Fixes: 189c2e5c7669 ("dt-bindings: net: Add Tegra234 MGBE")
    Signed-off-by: Jon Hunter <[email protected]>
    Reviewed-by: Krzysztof Kozlowski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
e1000: check return value of e1000_read_eeprom [+ + +]
Author: Agalakov Daniil <[email protected]>
Date:   Wed Mar 18 15:05:05 2026 +0300

    e1000: check return value of e1000_read_eeprom
    
    [ Upstream commit d3baa34a470771399c1495bc04b1e26ac15d598e ]
    
    [Why]
    e1000_set_eeprom() performs a read-modify-write operation when the write
    range is not word-aligned. This requires reading the first and last words
    of the range from the EEPROM to preserve the unmodified bytes.
    
    However, the code does not check the return value of e1000_read_eeprom().
    If the read fails, the operation continues using uninitialized data from
    eeprom_buff. This results in corrupted data being written back to the
    EEPROM for the boundary words.
    
    Add the missing error checks and abort the operation if reading fails.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Co-developed-by: Iskhakov Daniil <[email protected]>
    Signed-off-by: Iskhakov Daniil <[email protected]>
    Signed-off-by: Agalakov Daniil <[email protected]>
    Reviewed-by: Aleksandr Loktionov <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
eventpoll: defer struct eventpoll free to RCU grace period [+ + +]
Author: Nicholas Carlini <[email protected]>
Date:   Tue Mar 31 15:25:32 2026 +0200

    eventpoll: defer struct eventpoll free to RCU grace period
    
    [ Upstream commit 07712db80857d5d09ae08f3df85a708ecfc3b61f ]
    
    In certain situations, ep_free() in eventpoll.c will kfree the epi->ep
    eventpoll struct while it still being used by another concurrent thread.
    Defer the kfree() to an RCU callback to prevent UAF.
    
    Fixes: f2e467a48287 ("eventpoll: Fix semi-unbounded recursion")
    Signed-off-by: Nicholas Carlini <[email protected]>
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
fbdev: tdfxfb: avoid divide-by-zero on FBIOPUT_VSCREENINFO [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Thu Apr 9 15:23:14 2026 +0200

    fbdev: tdfxfb: avoid divide-by-zero on FBIOPUT_VSCREENINFO
    
    commit 8f98b81fe011e1879e6a7b1247e69e06a5e17af2 upstream.
    
    Much like commit 19f953e74356 ("fbdev: fb_pm2fb: Avoid potential divide
    by zero error"), we also need to prevent that same crash from happening
    in the udlfb driver as it uses pixclock directly when dividing, which
    will crash.
    
    Cc: Helge Deller <[email protected]>
    Assisted-by: gregkh_clanker_t1000
    Cc: stable <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

fbdev: udlfb: avoid divide-by-zero on FBIOPUT_VSCREENINFO [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Thu Apr 9 15:23:46 2026 +0200

    fbdev: udlfb: avoid divide-by-zero on FBIOPUT_VSCREENINFO
    
    commit a31e4518bec70333a0a98f2946a12b53b45fe5b9 upstream.
    
    Much like commit 19f953e74356 ("fbdev: fb_pm2fb: Avoid potential divide
    by zero error"), we also need to prevent that same crash from happening
    in the udlfb driver as it uses pixclock directly when dividing, which
    will crash.
    
    Cc: Bernie Thompson <[email protected]>
    Cc: Helge Deller <[email protected]>
    Fixes: 59277b679f8b ("Staging: udlfb: add dynamic modeset support")
    Assisted-by: gregkh_clanker_t1000
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fs/smb/client: fix out-of-bounds read in cifs_sanitize_prepath [+ + +]
Author: Fredric Cover <[email protected]>
Date:   Mon Mar 30 13:11:27 2026 -0700

    fs/smb/client: fix out-of-bounds read in cifs_sanitize_prepath
    
    [ Upstream commit 78ec5bf2f589ec7fd8f169394bfeca541b077317 ]
    
    When cifs_sanitize_prepath is called with an empty string or a string
    containing only delimiters (e.g., "/"), the current logic attempts to
    check *(cursor2 - 1) before cursor2 has advanced. This results in an
    out-of-bounds read.
    
    This patch adds an early exit check after stripping prepended
    delimiters. If no path content remains, the function returns NULL.
    
    The bug was identified via manual audit and verified using a
    standalone test case compiled with AddressSanitizer, which
    triggered a SEGV on affected inputs.
    
    Signed-off-by: Fredric Cover <[email protected]>
    Reviewed-by: Henrique Carvalho <[2][email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
gpio: tegra: fix irq_release_resources calling enable instead of disable [+ + +]
Author: Samasth Norway Ananda <[email protected]>
Date:   Tue Apr 7 14:02:47 2026 -0700

    gpio: tegra: fix irq_release_resources calling enable instead of disable
    
    [ Upstream commit 1561d96f5f55c1bca9ff047ace5813f4f244eea6 ]
    
    tegra_gpio_irq_release_resources() erroneously calls tegra_gpio_enable()
    instead of tegra_gpio_disable(). When IRQ resources are released, the
    GPIO configuration bit (CNF) should be cleared to deconfigure the pin as
    a GPIO. Leaving it enabled wastes power and can cause unexpected behavior
    if the pin is later reused for an alternate function via pinctrl.
    
    Fixes: 66fecef5bde0 ("gpio: tegra: Convert to gpio_irq_chip")
    Signed-off-by: Samasth Norway Ananda <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
gpiolib: fix race condition for gdev->srcu [+ + +]
Author: Paweł Narewski <[email protected]>
Date:   Wed Apr 15 13:15:41 2026 +0200

    gpiolib: fix race condition for gdev->srcu
    
    [ Upstream commit a7ac22d53d0990152b108c3f4fe30df45fcb0181 ]
    
    If two drivers were calling gpiochip_add_data_with_key(), one may be
    traversing the srcu-protected list in gpio_name_to_desc(), meanwhile
    other has just added its gdev in gpiodev_add_to_list_unlocked().
    This creates a non-mutexed and non-protected timeframe, when one
    instance is dereferencing and using &gdev->srcu, before the other
    has initialized it, resulting in crash:
    
    [    4.935481] Unable to handle kernel paging request at virtual address ffff800272bcc000
    [    4.943396] Mem abort info:
    [    4.943400]   ESR = 0x0000000096000005
    [    4.943403]   EC = 0x25: DABT (current EL), IL = 32 bits
    [    4.943407]   SET = 0, FnV = 0
    [    4.943410]   EA = 0, S1PTW = 0
    [    4.943413]   FSC = 0x05: level 1 translation fault
    [    4.943416] Data abort info:
    [    4.943418]   ISV = 0, ISS = 0x00000005, ISS2 = 0x00000000
    [    4.946220]   CM = 0, WnR = 0, TnD = 0, TagAccess = 0
    [    4.955261]   GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
    [    4.955268] swapper pgtable: 4k pages, 48-bit VAs, pgdp=0000000038e6c000
    [    4.961449] [ffff800272bcc000] pgd=0000000000000000
    [    4.969203] , p4d=1000000039739003
    [    4.979730] , pud=0000000000000000
    [    4.980210] phandle (CPU): 0x0000005e, phandle (BE): 0x5e000000 for node "reset"
    [    4.991736] Internal error: Oops: 0000000096000005 [#1] PREEMPT SMP
    ...
    [    5.121359] pc : __srcu_read_lock+0x44/0x98
    [    5.131091] lr : gpio_name_to_desc+0x60/0x1a0
    [    5.153671] sp : ffff8000833bb430
    [    5.298440]
    [    5.298443] Call trace:
    [    5.298445]  __srcu_read_lock+0x44/0x98
    [    5.309484]  gpio_name_to_desc+0x60/0x1a0
    [    5.320692]  gpiochip_add_data_with_key+0x488/0xf00
        5.946419] ---[ end trace 0000000000000000 ]---
    
    Move initialization code for gdev fields before it is added to
    gpio_devices, with adjacent initialization code.
    Adjust goto statements  to reflect modified order of operations
    
    Fixes: 47d8b4c1d868 ("gpio: add SRCU infrastructure to struct gpio_device")
    Reviewed-by: Jakub Lewalski <[email protected]>
    Signed-off-by: Paweł Narewski <[email protected]>
    [Bartosz: fixed a build issue, removed stray newline]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    [missing commit fcc8b637c542 ("gpiolib: switch the line state notifier
     to atomic"), commit dcb73cbaaeb3 ("gpio: cdev: use raw notifier for
     line state events") and commit d4f335b410dd ("gpiolib: rename GPIO chip
     printk macros") in 6.12.y.
     Both notifiers as well as both srcu inits are moved before the
     scoped_guard, following same logic as in a7ac22d53d09.
     Rest is changes to git context only.]
    Cc: [email protected] # 6.12
    Signed-off-by: Quentin Schulz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

gpiolib: unify two loops initializing GPIO descriptors [+ + +]
Author: Bartosz Golaszewski <[email protected]>
Date:   Wed Apr 15 13:15:40 2026 +0200

    gpiolib: unify two loops initializing GPIO descriptors
    
    [ Upstream commit fa17f749ee5bc6afdaa9e0ddbe6a816b490dad7d ]
    
    We currently iterate over the descriptors owned by the GPIO device we're
    adding twice with the first loop just setting the gdev pointer. It's not
    used anywhere between this and the second loop so just drop the first
    one and move the assignment to the second.
    
    Reviewed-by: Kent Gibson <[email protected]>
    Link: https://lore.kernel.org/r/20241004-gpio-notify-in-kernel-events-v1-2-8ac29e1df4fe@linaro.org
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Cc: [email protected] # 6.12
    Signed-off-by: Quentin Schulz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
HID: alps: fix NULL pointer dereference in alps_raw_event() [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Mon Apr 6 16:03:25 2026 +0200

    HID: alps: fix NULL pointer dereference in alps_raw_event()
    
    commit 1badfc4319224820d5d890f8eab6aa52e4e83339 upstream.
    
    Commit ecfa6f34492c ("HID: Add HID_CLAIMED_INPUT guards in raw_event
    callbacks missing them") attempted to fix up the HID drivers that had
    missed the previous fix that was done in 2ff5baa9b527 ("HID: appleir:
    Fix potential NULL dereference at raw event handle"), but the alps
    driver was missed.
    
    Fix this up by properly checking in the hid-alps driver that it had been
    claimed correctly before attempting to process the raw event.
    
    Fixes: 73196ebe134d ("HID: alps: add support for Alps T4 Touchpad device")
    Cc: stable <[email protected]>
    Cc: Jiri Kosina <[email protected]>
    Cc: Benjamin Tissoires <[email protected]>
    Cc: Masaki Ota <[email protected]>
    Cc: [email protected]
    Assisted-by: gregkh_clanker_t1000
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

HID: amd_sfh: don't log error when device discovery fails with -EOPNOTSUPP [+ + +]
Author: Maximilian Pezzullo <[email protected]>
Date:   Wed Mar 4 09:25:22 2026 +0100

    HID: amd_sfh: don't log error when device discovery fails with -EOPNOTSUPP
    
    [ Upstream commit 743677a8cb30b09f16a7f167f497c2c927891b5a ]
    
    When sensor discovery fails on systems without AMD SFH sensors, the
    code already emits a warning via dev_warn() in amd_sfh_hid_client_init().
    The subsequent dev_err() in sfh_init_work() for the same -EOPNOTSUPP
    return value is redundant and causes unnecessary alarm.
    
    Suppress the dev_err() for -EOPNOTSUPP to avoid confusing users who
    have no AMD SFH sensors.
    
    Fixes: 2105e8e00da4 ("HID: amd_sfh: Improve boot time when SFH is available")
    Reported-by: Casey Croy <[email protected]>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=221099
    Signed-off-by: Maximilian Pezzullo <[email protected]>
    Acked-by: Basavaraj Natikar <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

HID: core: clamp report_size in s32ton() to avoid undefined shift [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Mon Apr 6 16:04:10 2026 +0200

    HID: core: clamp report_size in s32ton() to avoid undefined shift
    
    commit 69c02ffde6ed4d535fa4e693a9e572729cad3d0d upstream.
    
    s32ton() shifts by n-1 where n is the field's report_size, a value that
    comes directly from a HID device.  The HID parser bounds report_size
    only to <= 256, so a broken HID device can supply a report descriptor
    with a wide field that triggers shift exponents up to 256 on a 32-bit
    type when an output report is built via hid_output_field() or
    hid_set_field().
    
    Commit ec61b41918587 ("HID: core: fix shift-out-of-bounds in
    hid_report_raw_event") added the same n > 32 clamp to the function
    snto32(), but s32ton() was never given the same fix as I guess syzbot
    hadn't figured out how to fuzz a device the same way.
    
    Fix this up by just clamping the max value of n, just like snto32()
    does.
    
    Cc: stable <[email protected]>
    Cc: Jiri Kosina <[email protected]>
    Cc: Benjamin Tissoires <[email protected]>
    Cc: [email protected]
    Assisted-by: gregkh_clanker_t1000
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

HID: quirks: add HID_QUIRK_ALWAYS_POLL for 8BitDo Pro 3 [+ + +]
Author: leo vriska <[email protected]>
Date:   Wed Mar 4 13:36:59 2026 -0500

    HID: quirks: add HID_QUIRK_ALWAYS_POLL for 8BitDo Pro 3
    
    [ Upstream commit 532743944324a873bbaf8620fcabcd0e69e30c36 ]
    
    According to a mailing list report [1], this controller's predecessor
    has the same issue. However, it uses the xpad driver instead of HID, so
    this quirk wouldn't apply.
    
    [1]: https://lore.kernel.org/linux-input/[email protected]/
    
    Signed-off-by: leo vriska <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

HID: roccat: fix use-after-free in roccat_report_event [+ + +]
Author: Benoît Sevens <[email protected]>
Date:   Mon Mar 23 16:11:07 2026 +0000

    HID: roccat: fix use-after-free in roccat_report_event
    
    [ Upstream commit d802d848308b35220f21a8025352f0c0aba15c12 ]
    
    roccat_report_event() iterates over the device->readers list without
    holding the readers_lock. This allows a concurrent roccat_release() to
    remove and free a reader while it's still being accessed, leading to a
    use-after-free.
    
    Protect the readers list traversal with the readers_lock mutex.
    
    Signed-off-by: Benoît Sevens <[email protected]>
    Reviewed-by: Silvan Jegen <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
hwmon: (powerz) Fix use-after-free on USB disconnect [+ + +]
Author: Sanman Pradhan <[email protected]>
Date:   Fri Apr 10 00:25:35 2026 +0000

    hwmon: (powerz) Fix use-after-free on USB disconnect
    
    commit 08e57f5e1a9067d5fbf33993aa7f51d60b3d13a4 upstream.
    
    After powerz_disconnect() frees the URB and releases the mutex, a
    subsequent powerz_read() call can acquire the mutex and call
    powerz_read_data(), which dereferences the freed URB pointer.
    
    Fix by:
     - Setting priv->urb to NULL in powerz_disconnect() so that
       powerz_read_data() can detect the disconnected state.
     - Adding a !priv->urb check at the start of powerz_read_data()
       to return -ENODEV on a disconnected device.
     - Moving usb_set_intfdata() before hwmon registration so the
       disconnect handler can always find the priv pointer.
    
    Fixes: 4381a36abdf1c ("hwmon: add POWER-Z driver")
    Cc: [email protected]
    Signed-off-by: Sanman Pradhan <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
i2c: s3c24xx: check the size of the SMBUS message before using it [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Mon Feb 23 18:05:15 2026 +0100

    i2c: s3c24xx: check the size of the SMBUS message before using it
    
    commit c0128c7157d639a931353ea344fb44aad6d6e17a upstream.
    
    The first byte of an i2c SMBUS message is the size, and it should be
    verified to ensure that it is in the range of 0..I2C_SMBUS_BLOCK_MAX
    before processing it.
    
    This is the same logic that was added in commit a6e04f05ce0b ("i2c:
    tegra: check msg length in SMBUS block read") to the i2c tegra driver.
    
    Cc: Krzysztof Kozlowski <[email protected]>
    Cc: Alim Akhtar <[email protected]>
    Cc: Andi Shyti <[email protected]>
    Cc: stable <[email protected]>
    Assisted-by: gkh_clanker_2000
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Andi Shyti <[email protected]>
    Link: https://lore.kernel.org/r/2026022314-rely-scrubbed-4839@gregkh
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
idpf: fix PREEMPT_RT raw/bh spinlock nesting for async VC handling [+ + +]
Author: Emil Tantilov <[email protected]>
Date:   Mon Apr 13 10:07:50 2026 -0700

    idpf: fix PREEMPT_RT raw/bh spinlock nesting for async VC handling
    
    [ Upstream commit 591478118293c1bd628de330a99eb1eb2ef8d76b ]
    
    Switch from using the completion's raw spinlock to a local lock in the
    idpf_vc_xn struct. The conversion is safe because complete/_all() are
    called outside the lock and there is no reason to share the completion
    lock in the current logic. This avoids invalid wait context reported by
    the kernel due to the async handler taking BH spinlock:
    
    [  805.726977] =============================
    [  805.726991] [ BUG: Invalid wait context ]
    [  805.727006] 7.0.0-rc2-net-devq-031026+ #28 Tainted: G S         OE
    [  805.727026] -----------------------------
    [  805.727038] kworker/u261:0/572 is trying to lock:
    [  805.727051] ff190da6a8dbb6a0 (&vport_config->mac_filter_list_lock){+...}-{3:3}, at: idpf_mac_filter_async_handler+0xe9/0x260 [idpf]
    [  805.727099] other info that might help us debug this:
    [  805.727111] context-{5:5}
    [  805.727119] 3 locks held by kworker/u261:0/572:
    [  805.727132]  #0: ff190da6db3e6148 ((wq_completion)idpf-0000:83:00.0-mbx){+.+.}-{0:0}, at: process_one_work+0x4b5/0x730
    [  805.727163]  #1: ff3c6f0a6131fe50 ((work_completion)(&(&adapter->mbx_task)->work)){+.+.}-{0:0}, at: process_one_work+0x1e5/0x730
    [  805.727191]  #2: ff190da765190020 (&x->wait#34){+.+.}-{2:2}, at: idpf_recv_mb_msg+0xc8/0x710 [idpf]
    [  805.727218] stack backtrace:
    ...
    [  805.727238] Workqueue: idpf-0000:83:00.0-mbx idpf_mbx_task [idpf]
    [  805.727247] Call Trace:
    [  805.727249]  <TASK>
    [  805.727251]  dump_stack_lvl+0x77/0xb0
    [  805.727259]  __lock_acquire+0xb3b/0x2290
    [  805.727268]  ? __irq_work_queue_local+0x59/0x130
    [  805.727275]  lock_acquire+0xc6/0x2f0
    [  805.727277]  ? idpf_mac_filter_async_handler+0xe9/0x260 [idpf]
    [  805.727284]  ? _printk+0x5b/0x80
    [  805.727290]  _raw_spin_lock_bh+0x38/0x50
    [  805.727298]  ? idpf_mac_filter_async_handler+0xe9/0x260 [idpf]
    [  805.727303]  idpf_mac_filter_async_handler+0xe9/0x260 [idpf]
    [  805.727310]  idpf_recv_mb_msg+0x1c8/0x710 [idpf]
    [  805.727317]  process_one_work+0x226/0x730
    [  805.727322]  worker_thread+0x19e/0x340
    [  805.727325]  ? __pfx_worker_thread+0x10/0x10
    [  805.727328]  kthread+0xf4/0x130
    [  805.727333]  ? __pfx_kthread+0x10/0x10
    [  805.727336]  ret_from_fork+0x32c/0x410
    [  805.727345]  ? __pfx_kthread+0x10/0x10
    [  805.727347]  ret_from_fork_asm+0x1a/0x30
    [  805.727354]  </TASK>
    
    Fixes: 34c21fa894a1 ("idpf: implement virtchnl transaction manager")
    Cc: [email protected]
    Suggested-by: Sebastian Andrzej Siewior <[email protected]>
    Reported-by: Ray Zhang <[email protected]>
    Signed-off-by: Emil Tantilov <[email protected]>
    Reviewed-by: Aleksandr Loktionov <[email protected]>
    Acked-by: Sebastian Andrzej Siewior <[email protected]>
    Tested-by: Samuel Salin <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ipv4: icmp: fix null-ptr-deref in icmp_build_probe() [+ + +]
Author: Yiqi Sun <[email protected]>
Date:   Thu Apr 2 15:04:19 2026 +0800

    ipv4: icmp: fix null-ptr-deref in icmp_build_probe()
    
    [ Upstream commit fde29fd9349327acc50d19a0b5f3d5a6c964dfd8 ]
    
    ipv6_stub->ipv6_dev_find() may return ERR_PTR(-EAFNOSUPPORT) when the
    IPv6 stack is not active (CONFIG_IPV6=m and not loaded), and passing
    this error pointer to dev_hold() will cause a kernel crash with
    null-ptr-deref.
    
    Instead, silently discard the request. RFC 8335 does not appear to
    define a specific response for the case where an IPv6 interface
    identifier is syntactically valid but the implementation cannot perform
    the lookup at runtime, and silently dropping the request may safer than
    misreporting "No Such Interface".
    
    Fixes: d329ea5bd884 ("icmp: add response to RFC 8335 PROBE messages")
    Signed-off-by: Yiqi Sun <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ipv4: nexthop: allocate skb dynamically in rtm_get_nexthop() [+ + +]
Author: Fernando Fernandez Mancera <[email protected]>
Date:   Thu Apr 2 09:26:13 2026 +0200

    ipv4: nexthop: allocate skb dynamically in rtm_get_nexthop()
    
    [ Upstream commit 14cf0cd35361f4e94824bf8a42f72713d7702a73 ]
    
    When querying a nexthop object via RTM_GETNEXTHOP, the kernel currently
    allocates a fixed-size skb using NLMSG_GOODSIZE. While sufficient for
    single nexthops and small Equal-Cost Multi-Path groups, this fixed
    allocation fails for large nexthop groups like 512 nexthops.
    
    This results in the following warning splat:
    
     WARNING: net/ipv4/nexthop.c:3395 at rtm_get_nexthop+0x176/0x1c0, CPU#20: rep/4608
     [...]
     RIP: 0010:rtm_get_nexthop (net/ipv4/nexthop.c:3395)
     [...]
     Call Trace:
      <TASK>
      rtnetlink_rcv_msg (net/core/rtnetlink.c:6989)
      netlink_rcv_skb (net/netlink/af_netlink.c:2550)
      netlink_unicast (net/netlink/af_netlink.c:1319 net/netlink/af_netlink.c:1344)
      netlink_sendmsg (net/netlink/af_netlink.c:1894)
      ____sys_sendmsg (net/socket.c:721 net/socket.c:736 net/socket.c:2585)
      ___sys_sendmsg (net/socket.c:2641)
      __sys_sendmsg (net/socket.c:2671)
      do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
      entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
      </TASK>
    
    Fix this by allocating the size dynamically using nh_nlmsg_size() and
    using nlmsg_new(), this is consistent with nexthop_notify() behavior. In
    addition, adjust nh_nlmsg_size_grp() so it calculates the size needed
    based on flags passed. While at it, also add the size of NHA_FDB for
    nexthop group size calculation as it was missing too.
    
    This cannot be reproduced via iproute2 as the group size is currently
    limited and the command fails as follows:
    
    addattr_l ERROR: message exceeded bound of 1048
    
    Fixes: 430a049190de ("nexthop: Add support for nexthop groups")
    Reported-by: Yiming Qian <[email protected]>
    Closes: https://lore.kernel.org/netdev/CAL_bE8Li2h4KO+AQFXW4S6Yb_u5X4oSKnkywW+LPFjuErhqELA@mail.gmail.com/
    Signed-off-by: Fernando Fernandez Mancera <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ipv4: nexthop: avoid duplicate NHA_HW_STATS_ENABLE on nexthop group dump [+ + +]
Author: Fernando Fernandez Mancera <[email protected]>
Date:   Thu Apr 2 09:26:12 2026 +0200

    ipv4: nexthop: avoid duplicate NHA_HW_STATS_ENABLE on nexthop group dump
    
    [ Upstream commit 06aaf04ca815f7a1f17762fd847b7bc14b8833fb ]
    
    Currently NHA_HW_STATS_ENABLE is included twice everytime a dump of
    nexthop group is performed with NHA_OP_FLAG_DUMP_STATS. As all the stats
    querying were moved to nla_put_nh_group_stats(), leave only that
    instance of the attribute querying.
    
    Fixes: 5072ae00aea4 ("net: nexthop: Expose nexthop group HW stats to user space")
    Signed-off-by: Fernando Fernandez Mancera <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ipv6: add NULL checks for idev in SRv6 paths [+ + +]
Author: Minhong He <[email protected]>
Date:   Mon Apr 20 13:42:41 2026 +0800

    ipv6: add NULL checks for idev in SRv6 paths
    
    [ Upstream commit 06413793526251870e20402c39930804f14d59c0 ]
    
    __in6_dev_get() can return NULL when the device has no IPv6 configuration
    (e.g. MTU < IPV6_MIN_MTU or after NETDEV_UNREGISTER).
    
    Add NULL checks for idev returned by __in6_dev_get() in both
    seg6_hmac_validate_skb() and ipv6_srh_rcv() to prevent potential NULL
    pointer dereferences.
    
    Fixes: 1ababeba4a21 ("ipv6: implement dataplane support for rthdr type 4 (Segment Routing Header)")
    Fixes: bf355b8d2c30 ("ipv6: sr: add core files for SR HMAC support")
    Signed-off-by: Minhong He <[email protected]>
    Reviewed-by: Andrea Mayer <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Li hongliang <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ipvs: fix NULL deref in ip_vs_add_service error path [+ + +]
Author: Weiming Shi <[email protected]>
Date:   Wed Apr 1 15:58:01 2026 +0800

    ipvs: fix NULL deref in ip_vs_add_service error path
    
    [ Upstream commit 9a91797e61d286805ae10a92cc48959c30800556 ]
    
    When ip_vs_bind_scheduler() succeeds in ip_vs_add_service(), the local
    variable sched is set to NULL.  If ip_vs_start_estimator() subsequently
    fails, the out_err cleanup calls ip_vs_unbind_scheduler(svc, sched)
    with sched == NULL.  ip_vs_unbind_scheduler() passes the cur_sched NULL
    check (because svc->scheduler was set by the successful bind) but then
    dereferences the NULL sched parameter at sched->done_service, causing a
    kernel panic at offset 0x30 from NULL.
    
     Oops: general protection fault, [..] [#1] PREEMPT SMP KASAN NOPTI
     KASAN: null-ptr-deref in range [0x0000000000000030-0x0000000000000037]
     RIP: 0010:ip_vs_unbind_scheduler (net/netfilter/ipvs/ip_vs_sched.c:69)
     Call Trace:
      <TASK>
      ip_vs_add_service.isra.0 (net/netfilter/ipvs/ip_vs_ctl.c:1500)
      do_ip_vs_set_ctl (net/netfilter/ipvs/ip_vs_ctl.c:2809)
      nf_setsockopt (net/netfilter/nf_sockopt.c:102)
      [..]
    
    Fix by simply not clearing the local sched variable after a successful
    bind.  ip_vs_unbind_scheduler() already detects whether a scheduler is
    installed via svc->scheduler, and keeping sched non-NULL ensures the
    error path passes the correct pointer to both ip_vs_unbind_scheduler()
    and ip_vs_scheduler_put().
    
    While the bug is older, the problem popups in more recent kernels (6.2),
    when the new error path is taken after the ip_vs_start_estimator() call.
    
    Fixes: 705dd3444081 ("ipvs: use kthreads for stats estimation")
    Reported-by: Xiang Mei <[email protected]>
    Signed-off-by: Weiming Shi <[email protected]>
    Acked-by: Simon Horman <[email protected]>
    Acked-by: Julian Anastasov <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ixgbevf: add missing negotiate_features op to Hyper-V ops table [+ + +]
Author: Michal Schmidt <[email protected]>
Date:   Fri Mar 13 09:22:29 2026 +0100

    ixgbevf: add missing negotiate_features op to Hyper-V ops table
    
    [ Upstream commit 4821d563cd7f251ae728be1a6d04af82a294a5b9 ]
    
    Commit a7075f501bd3 ("ixgbevf: fix mailbox API compatibility by
    negotiating supported features") added the .negotiate_features callback
    to ixgbe_mac_operations and populated it in ixgbevf_mac_ops, but forgot
    to add it to ixgbevf_hv_mac_ops. This leaves the function pointer NULL
    on Hyper-V VMs.
    
    During probe, ixgbevf_negotiate_api() calls ixgbevf_set_features(),
    which unconditionally dereferences hw->mac.ops.negotiate_features().
    On Hyper-V this results in a NULL pointer dereference:
    
      BUG: kernel NULL pointer dereference, address: 0000000000000000
      [...]
      Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine [...]
      Workqueue: events work_for_cpu_fn
      RIP: 0010:0x0
      [...]
      Call Trace:
       ixgbevf_negotiate_api+0x66/0x160 [ixgbevf]
       ixgbevf_sw_init+0xe4/0x1f0 [ixgbevf]
       ixgbevf_probe+0x20f/0x4a0 [ixgbevf]
       local_pci_probe+0x50/0xa0
       work_for_cpu_fn+0x1a/0x30
       [...]
    
    Add ixgbevf_hv_negotiate_features_vf() that returns -EOPNOTSUPP and
    wire it into ixgbevf_hv_mac_ops. The caller already handles -EOPNOTSUPP
    gracefully.
    
    Fixes: a7075f501bd3 ("ixgbevf: fix mailbox API compatibility by negotiating supported features")
    Reported-by: Xiaoqiang Xiong <[email protected]>
    Closes: https://issues.redhat.com/browse/RHEL-155455
    Assisted-by: Claude:claude-4.6-opus-high Cursor
    Tested-by: Xiaoqiang Xiong <[email protected]>
    Signed-off-by: Michal Schmidt <[email protected]>
    Reviewed-by: Aleksandr Loktionov <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
kernel: be more careful about dup_mmap() failures and uprobe registering [+ + +]
Author: Liam R. Howlett <[email protected]>
Date:   Wed Apr 15 20:06:23 2026 +0200

    kernel: be more careful about dup_mmap() failures and uprobe registering
    
    [ Upstream commit 64c37e134b120fb462fb4a80694bfb8e7be77b14 ]
    
    If a memory allocation fails during dup_mmap(), the maple tree can be left
    in an unsafe state for other iterators besides the exit path.  All the
    locks are dropped before the exit_mmap() call (in mm/mmap.c), but the
    incomplete mm_struct can be reached through (at least) the rmap finding
    the vmas which have a pointer back to the mm_struct.
    
    Up to this point, there have been no issues with being able to find an
    mm_struct that was only partially initialised.  Syzbot was able to make
    the incomplete mm_struct fail with recent forking changes, so it has been
    proven unsafe to use the mm_struct that hasn't been initialised, as
    referenced in the link below.
    
    Although 8ac662f5da19f ("fork: avoid inappropriate uprobe access to
    invalid mm") fixed the uprobe access, it does not completely remove the
    race.
    
    This patch sets the MMF_OOM_SKIP to avoid the iteration of the vmas on the
    oom side (even though this is extremely unlikely to be selected as an oom
    victim in the race window), and sets MMF_UNSTABLE to avoid other potential
    users from using a partially initialised mm_struct.
    
    When registering vmas for uprobe, skip the vmas in an mm that is marked
    unstable.  Modifying a vma in an unstable mm may cause issues if the mm
    isn't fully initialised.
    
    Link: https://lore.kernel.org/all/[email protected]/
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: d24062914837 ("fork: use __mt_dup() to duplicate maple tree in dup_mmap()")
    Signed-off-by: Liam R. Howlett <[email protected]>
    Reviewed-by: Lorenzo Stoakes <[email protected]>
    Cc: Oleg Nesterov <[email protected]>
    Cc: Masami Hiramatsu <[email protected]>
    Cc: Jann Horn <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Peng Zhang <[email protected]>
    Cc: Matthew Wilcox <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    [resolved conflict from missing header includes:
     - linux/workqueue.h missing, introduced by commit 2bf8e5aceff8 ("uprobes:
       allow put_uprobe() from non-sleepable softirq context")
     - linux/srcu.h missing, introduced by commit dd1a7567784e ("uprobes:
       SRCU-protect uretprobe lifetime (with timeout)") ]
    Signed-off-by: Heiko Stuebner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ksmbd: fix mechToken leak when SPNEGO decode fails after token alloc [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Mon Apr 6 15:46:48 2026 +0200

    ksmbd: fix mechToken leak when SPNEGO decode fails after token alloc
    
    commit ad0057fb91218914d6c98268718ceb9d59b388e1 upstream.
    
    The kernel ASN.1 BER decoder calls action callbacks incrementally as it
    walks the input.  When ksmbd_decode_negTokenInit() reaches the mechToken
    [2] OCTET STRING element, ksmbd_neg_token_alloc() allocates
    conn->mechToken immediately via kmemdup_nul().  If a later element in
    the same blob is malformed, then the decoder will return nonzero after
    the allocation is already live.  This could happen if mechListMIC [3]
    overrunse the enclosing SEQUENCE.
    
    decode_negotiation_token() then sets conn->use_spnego = false because
    both the negTokenInit and negTokenTarg grammars failed.  The cleanup at
    the bottom of smb2_sess_setup() is gated on use_spnego:
    
            if (conn->use_spnego && conn->mechToken) {
                    kfree(conn->mechToken);
                    conn->mechToken = NULL;
            }
    
    so the kfree is skipped, causing the mechToken to never be freed.
    
    This codepath is reachable pre-authentication, so untrusted clients can
    cause slow memory leaks on a server without even being properly
    authenticated.
    
    Fix this up by not checking check for use_spnego, as it's not required,
    so the memory will always be properly freed.  At the same time, always
    free the memory in ksmbd_conn_free() incase some other failure path
    forgot to free it.
    
    Cc: Namjae Jeon <[email protected]>
    Cc: Steve French <[email protected]>
    Cc: Sergey Senozhatsky <[email protected]>
    Cc: Tom Talpey <[email protected]>
    Cc: [email protected]
    Cc: <[email protected]>
    Assisted-by: gregkh_clanker_t1000
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ksmbd: require 3 sub-authorities before reading sub_auth[2] [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Mon Apr 6 15:46:47 2026 +0200

    ksmbd: require 3 sub-authorities before reading sub_auth[2]
    
    commit 53370cf9090777774e07fd9a8ebce67c6cc333ab upstream.
    
    parse_dacl() compares each ACE SID against sid_unix_NFS_mode and on
    match reads sid.sub_auth[2] as the file mode.  If sid_unix_NFS_mode is
    the prefix S-1-5-88-3 with num_subauth = 2 then compare_sids() compares
    only min(num_subauth, 2) sub-authorities so a client SID with
    num_subauth = 2 and sub_auth = {88, 3} will match.
    
    If num_subauth = 2 and the ACE is placed at the very end of the security
    descriptor, sub_auth[2] will be  4 bytes past end_of_acl.  The
    out-of-band bytes will then be masked to the low 9 bits and applied as
    the file's POSIX mode, probably not something that is good to have
    happen.
    
    Fix this up by forcing the SID to actually carry a third sub-authority
    before reading it at all.
    
    Cc: Namjae Jeon <[email protected]>
    Cc: Steve French <[email protected]>
    Cc: Sergey Senozhatsky <[email protected]>
    Cc: Tom Talpey <[email protected]>
    Cc: [email protected]
    Cc: <[email protected]>
    Assisted-by: gregkh_clanker_t1000
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ksmbd: validate EaNameLength in smb2_get_ea() [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Mon Apr 6 15:46:46 2026 +0200

    ksmbd: validate EaNameLength in smb2_get_ea()
    
    commit 66751841212c2cc196577453c37f7774ff363f02 upstream.
    
    smb2_get_ea() reads ea_req->EaNameLength from the client request and
    passes it directly to strncmp() as the comparison length without
    verifying that the length of the name really is the size of the input
    buffer received.
    
    Fix this up by properly checking the size of the name based on the value
    received and the overall size of the request, to prevent a later
    strncmp() call to use the length as a "trusted" size of the buffer.
    Without this check, uninitialized heap values might be slowly leaked to
    the client.
    
    Cc: Namjae Jeon <[email protected]>
    Cc: Steve French <[email protected]>
    Cc: Sergey Senozhatsky <[email protected]>
    Cc: Tom Talpey <[email protected]>
    Cc: [email protected]
    Cc: <[email protected]>
    Assisted-by: gregkh_clanker_t1000
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
KVM: Remove subtle "struct kvm_stats_desc" pseudo-overlay [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Fri Dec 5 15:26:55 2025 -0800

    KVM: Remove subtle "struct kvm_stats_desc" pseudo-overlay
    
    [ Upstream commit da142f3d373a6ddaca0119615a8db2175ddc4121 ]
    
    Remove KVM's internal pseudo-overlay of kvm_stats_desc, which subtly
    aliases the flexible name[] in the uAPI definition with a fixed-size array
    of the same name.  The unusual embedded structure results in compiler
    warnings due to -Wflex-array-member-not-at-end, and also necessitates an
    extra level of dereferencing in KVM.  To avoid the "overlay", define the
    uAPI structure to have a fixed-size name when building for the kernel.
    
    Opportunistically clean up the indentation for the stats macros, and
    replace spaces with tabs.
    
    No functional change intended.
    
    Reported-by: Gustavo A. R. Silva <[email protected]>
    Closes: https://lore.kernel.org/all/aPfNKRpLfhmhYqfP@kspp
    Acked-by: Marc Zyngier <[email protected]>
    Acked-by: Christian Borntraeger <[email protected]>
    [..]
    Acked-by: Anup Patel <[email protected]>
    Reviewed-by: Bibo Mao <[email protected]>
    Acked-by: Gustavo A. R. Silva <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

KVM: SEV: Disallow LAUNCH_FINISH if vCPUs are actively being created [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Tue Mar 10 16:48:12 2026 -0700

    KVM: SEV: Disallow LAUNCH_FINISH if vCPUs are actively being created
    
    commit 624bf3440d7214b62c22d698a0a294323f331d5d upstream.
    
    Reject LAUNCH_FINISH for SEV-ES and SNP VMs if KVM is actively creating
    one or more vCPUs, as KVM needs to process and encrypt each vCPU's VMSA.
    Letting userspace create vCPUs while LAUNCH_FINISH is in-progress is
    "fine", at least in the current code base, as kvm_for_each_vcpu() operates
    on online_vcpus, LAUNCH_FINISH (all SEV+ sub-ioctls) holds kvm->mutex, and
    fully onlining a vCPU in kvm_vm_ioctl_create_vcpu() is done under
    kvm->mutex.  I.e. there's no difference between an in-progress vCPU and a
    vCPU that is created entirely after LAUNCH_FINISH.
    
    However, given that concurrent LAUNCH_FINISH and vCPU creation can't
    possibly work (for any reasonable definition of "work"), since userspace
    can't guarantee whether a particular vCPU will be encrypted or not,
    disallow the combination as a hardening measure, to reduce the probability
    of introducing bugs in the future, and to avoid having to reason about the
    safety of future changes related to LAUNCH_FINISH.
    
    Cc: Jethro Beekman <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: SEV: Drop WARN on large size for KVM_MEMORY_ENCRYPT_REG_REGION [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Thu Mar 12 17:32:58 2026 -0700

    KVM: SEV: Drop WARN on large size for KVM_MEMORY_ENCRYPT_REG_REGION
    
    commit 8acffeef5ef720c35e513e322ab08e32683f32f2 upstream.
    
    Drop the WARN in sev_pin_memory() on npages overflowing an int, as the
    WARN is comically trivially to trigger from userspace, e.g. by doing:
    
      struct kvm_enc_region range = {
              .addr = 0,
              .size = -1ul,
      };
    
      __vm_ioctl(vm, KVM_MEMORY_ENCRYPT_REG_REGION, &range);
    
    Note, the checks in sev_mem_enc_register_region() that presumably exist to
    verify the incoming address+size are completely worthless, as both "addr"
    and "size" are u64s and SEV is 64-bit only, i.e. they _can't_ be greater
    than ULONG_MAX.  That wart will be cleaned up in the near future.
    
            if (range->addr > ULONG_MAX || range->size > ULONG_MAX)
                    return -EINVAL;
    
    Opportunistically add a comment to explain why the code calculates the
    number of pages the "hard" way, e.g. instead of just shifting @ulen.
    
    Fixes: 78824fabc72e ("KVM: SVM: fix svn_pin_memory()'s use of get_user_pages_fast()")
    Cc: [email protected]
    Reviewed-by: Liam Merwick <[email protected]>
    Tested-by: Liam Merwick <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: SEV: Reject attempts to sync VMSA of an already-launched/encrypted vCPU [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Tue Mar 10 16:48:10 2026 -0700

    KVM: SEV: Reject attempts to sync VMSA of an already-launched/encrypted vCPU
    
    commit 9b9f7962e3e879d12da2bf47e02a24ec51690e3d upstream.
    
    Reject synchronizing vCPU state to its associated VMSA if the vCPU has
    already been launched, i.e. if the VMSA has already been encrypted.  On a
    host with SNP enabled, accessing guest-private memory generates an RMP #PF
    and panics the host.
    
      BUG: unable to handle page fault for address: ff1276cbfdf36000
      #PF: supervisor write access in kernel mode
      #PF: error_code(0x80000003) - RMP violation
      PGD 5a31801067 P4D 5a31802067 PUD 40ccfb5063 PMD 40e5954063 PTE 80000040fdf36163
      SEV-SNP: PFN 0x40fdf36, RMP entry: [0x6010fffffffff001 - 0x000000000000001f]
      Oops: Oops: 0003 [#1] SMP NOPTI
      CPU: 33 UID: 0 PID: 996180 Comm: qemu-system-x86 Tainted: G           OE
      Tainted: [O]=OOT_MODULE, [E]=UNSIGNED_MODULE
      Hardware name: Dell Inc. PowerEdge R7625/0H1TJT, BIOS 1.5.8 07/21/2023
      RIP: 0010:sev_es_sync_vmsa+0x54/0x4c0 [kvm_amd]
      Call Trace:
       <TASK>
       snp_launch_update_vmsa+0x19d/0x290 [kvm_amd]
       snp_launch_finish+0xb6/0x380 [kvm_amd]
       sev_mem_enc_ioctl+0x14e/0x720 [kvm_amd]
       kvm_arch_vm_ioctl+0x837/0xcf0 [kvm]
       kvm_vm_ioctl+0x3fd/0xcc0 [kvm]
       __x64_sys_ioctl+0xa3/0x100
       x64_sys_call+0xfe0/0x2350
       do_syscall_64+0x81/0x10f0
       entry_SYSCALL_64_after_hwframe+0x76/0x7e
      RIP: 0033:0x7ffff673287d
       </TASK>
    
    Note, the KVM flaw has been present since commit ad73109ae7ec ("KVM: SVM:
    Provide support to launch and run an SEV-ES guest"), but has only been
    actively dangerous for the host since SNP support was added.  With SEV-ES,
    KVM would "just" clobber guest state, which is totally fine from a host
    kernel perspective since userspace can clobber guest state any time before
    sev_launch_update_vmsa().
    
    Fixes: ad27ce155566 ("KVM: SEV: Add KVM_SEV_SNP_LAUNCH_FINISH command")
    Reported-by: Jethro Beekman <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: x86: Use __DECLARE_FLEX_ARRAY() for UAPI structures with VLAs [+ + +]
Author: David Woodhouse <[email protected]>
Date:   Thu Mar 5 20:49:55 2026 +0100

    KVM: x86: Use __DECLARE_FLEX_ARRAY() for UAPI structures with VLAs
    
    [ Upstream commit 2619da73bb2f10d88f7e1087125c40144fdf0987 ]
    
    Commit 94dfc73e7cf4 ("treewide: uapi: Replace zero-length arrays with
    flexible-array members") broke the userspace API for C++.
    
    These structures ending in VLAs are typically a *header*, which can be
    followed by an arbitrary number of entries. Userspace typically creates
    a larger structure with some non-zero number of entries, for example in
    QEMU's kvm_arch_get_supported_msr_feature():
    
        struct {
            struct kvm_msrs info;
            struct kvm_msr_entry entries[1];
        } msr_data = {};
    
    While that works in C, it fails in C++ with an error like:
     flexible array member 'kvm_msrs::entries' not at end of 'struct msr_data'
    
    Fix this by using __DECLARE_FLEX_ARRAY() for the VLA, which uses [0]
    for C++ compilation.
    
    Fixes: 94dfc73e7cf4 ("treewide: uapi: Replace zero-length arrays with flexible-array members")
    Cc: [email protected]
    Signed-off-by: David Woodhouse <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [sean: tag for stable@]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

KVM: x86: Use scratch field in MMIO fragment to hold small write values [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Tue Feb 24 17:20:36 2026 -0800

    KVM: x86: Use scratch field in MMIO fragment to hold small write values
    
    commit 0b16e69d17d8c35c5c9d5918bf596c75a44655d3 upstream.
    
    When exiting to userspace to service an emulated MMIO write, copy the
    to-be-written value to a scratch field in the MMIO fragment if the size
    of the data payload is 8 bytes or less, i.e. can fit in a single chunk,
    instead of pointing the fragment directly at the source value.
    
    This fixes a class of use-after-free bugs that occur when the emulator
    initiates a write using an on-stack, local variable as the source, the
    write splits a page boundary, *and* both pages are MMIO pages.  Because
    KVM's ABI only allows for physically contiguous MMIO requests, accesses
    that split MMIO pages are separated into two fragments, and are sent to
    userspace one at a time.  When KVM attempts to complete userspace MMIO in
    response to KVM_RUN after the first fragment, KVM will detect the second
    fragment and generate a second userspace exit, and reference the on-stack
    variable.
    
    The issue is most visible if the second KVM_RUN is performed by a separate
    task, in which case the stack of the initiating task can show up as truly
    freed data.
    
      ==================================================================
      BUG: KASAN: use-after-free in complete_emulated_mmio+0x305/0x420
      Read of size 1 at addr ffff888009c378d1 by task syz-executor417/984
    
      CPU: 1 PID: 984 Comm: syz-executor417 Not tainted 5.10.0-182.0.0.95.h2627.eulerosv2r13.x86_64 #3
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.15.0-0-g2dd4b9b3f840-prebuilt.qemu.org 04/01/2014 Call Trace:
      dump_stack+0xbe/0xfd
      print_address_description.constprop.0+0x19/0x170
      __kasan_report.cold+0x6c/0x84
      kasan_report+0x3a/0x50
      check_memory_region+0xfd/0x1f0
      memcpy+0x20/0x60
      complete_emulated_mmio+0x305/0x420
      kvm_arch_vcpu_ioctl_run+0x63f/0x6d0
      kvm_vcpu_ioctl+0x413/0xb20
      __se_sys_ioctl+0x111/0x160
      do_syscall_64+0x30/0x40
      entry_SYSCALL_64_after_hwframe+0x67/0xd1
      RIP: 0033:0x42477d
      Code: <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b0 ff ff ff f7 d8 64 89 01 48
      RSP: 002b:00007faa8e6890e8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
      RAX: ffffffffffffffda RBX: 00000000004d7338 RCX: 000000000042477d
      RDX: 0000000000000000 RSI: 000000000000ae80 RDI: 0000000000000005
      RBP: 00000000004d7330 R08: 00007fff28d546df R09: 0000000000000000
      R10: 0000000000000000 R11: 0000000000000246 R12: 00000000004d733c
      R13: 0000000000000000 R14: 000000000040a200 R15: 00007fff28d54720
    
      The buggy address belongs to the page:
      page:0000000029f6a428 refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x9c37
      flags: 0xfffffc0000000(node=0|zone=1|lastcpupid=0x1fffff)
      raw: 000fffffc0000000 0000000000000000 ffffea0000270dc8 0000000000000000
      raw: 0000000000000000 0000000000000000 00000000ffffffff 0000000000000000 page dumped because: kasan: bad access detected
    
      Memory state around the buggy address:
      ffff888009c37780: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
      ffff888009c37800: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
      >ffff888009c37880: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
                                                       ^
      ffff888009c37900: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
      ffff888009c37980: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
      ==================================================================
    
    The bug can also be reproduced with a targeted KVM-Unit-Test by hacking
    KVM to fill a large on-stack variable in complete_emulated_mmio(), i.e. by
    overwrite the data value with garbage.
    
    Limit the use of the scratch fields to 8-byte or smaller accesses, and to
    just writes, as larger accesses and reads are not affected thanks to
    implementation details in the emulator, but add a sanity check to ensure
    those details don't change in the future.  Specifically, KVM never uses
    on-stack variables for accesses larger that 8 bytes, e.g. uses an operand
    in the emulator context, and *all* reads are buffered through the mem_read
    cache.
    
    Note!  Using the scratch field for reads is not only unnecessary, it's
    also extremely difficult to handle correctly.  As above, KVM buffers all
    reads through the mem_read cache, and heavily relies on that behavior when
    re-emulating the instruction after a userspace MMIO read exit.  If a read
    splits a page, the first page is NOT an MMIO page, and the second page IS
    an MMIO page, then the MMIO fragment needs to point at _just_ the second
    chunk of the destination, i.e. its position in the mem_read cache.  Taking
    the "obvious" approach of copying the fragment value into the destination
    when re-emulating the instruction would clobber the first chunk of the
    destination, i.e. would clobber the data that was read from guest memory.
    
    Fixes: f78146b0f923 ("KVM: Fix page-crossing MMIO")
    Suggested-by: Yashu Zhang <[email protected]>
    Reported-by: Yashu Zhang <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]
    Cc: [email protected]
    Tested-by: Tom Lendacky <[email protected]>
    Tested-by: Rick Edgecombe <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
l2tp: Drop large packets with UDP encap [+ + +]
Author: Alice Mikityanska <[email protected]>
Date:   Fri Apr 3 20:49:49 2026 +0300

    l2tp: Drop large packets with UDP encap
    
    [ Upstream commit ebe560ea5f54134279356703e73b7f867c89db13 ]
    
    syzbot reported a WARN on my patch series [1]. The actual issue is an
    overflow of 16-bit UDP length field, and it exists in the upstream code.
    My series added a debug WARN with an overflow check that exposed the
    issue, that's why syzbot tripped on my patches, rather than on upstream
    code.
    
    syzbot's repro:
    
    r0 = socket$pppl2tp(0x18, 0x1, 0x1)
    r1 = socket$inet6_udp(0xa, 0x2, 0x0)
    connect$inet6(r1, &(0x7f00000000c0)={0xa, 0x0, 0x0, @loopback, 0xfffffffc}, 0x1c)
    connect$pppl2tp(r0, &(0x7f0000000240)=@pppol2tpin6={0x18, 0x1, {0x0, r1, 0x4, 0x0, 0x0, 0x0, {0xa, 0x4e22, 0xffff, @ipv4={'\x00', '\xff\xff', @empty}}}}, 0x32)
    writev(r0, &(0x7f0000000080)=[{&(0x7f0000000000)="ee", 0x34000}], 0x1)
    
    It basically sends an oversized (0x34000 bytes) PPPoL2TP packet with UDP
    encapsulation, and l2tp_xmit_core doesn't check for overflows when it
    assigns the UDP length field. The value gets trimmed to 16 bites.
    
    Add an overflow check that drops oversized packets and avoids sending
    packets with trimmed UDP length to the wire.
    
    syzbot's stack trace (with my patch applied):
    
    len >= 65536u
    WARNING: ./include/linux/udp.h:38 at udp_set_len_short include/linux/udp.h:38 [inline], CPU#1: syz.0.17/5957
    WARNING: ./include/linux/udp.h:38 at l2tp_xmit_core net/l2tp/l2tp_core.c:1293 [inline], CPU#1: syz.0.17/5957
    WARNING: ./include/linux/udp.h:38 at l2tp_xmit_skb+0x1204/0x18d0 net/l2tp/l2tp_core.c:1327, CPU#1: syz.0.17/5957
    Modules linked in:
    CPU: 1 UID: 0 PID: 5957 Comm: syz.0.17 Not tainted syzkaller #0 PREEMPT(full)
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
    RIP: 0010:udp_set_len_short include/linux/udp.h:38 [inline]
    RIP: 0010:l2tp_xmit_core net/l2tp/l2tp_core.c:1293 [inline]
    RIP: 0010:l2tp_xmit_skb+0x1204/0x18d0 net/l2tp/l2tp_core.c:1327
    Code: 0f 0b 90 e9 21 f9 ff ff e8 e9 05 ec f6 90 0f 0b 90 e9 8d f9 ff ff e8 db 05 ec f6 90 0f 0b 90 e9 cc f9 ff ff e8 cd 05 ec f6 90 <0f> 0b 90 e9 de fa ff ff 44 89 f1 80 e1 07 80 c1 03 38 c1 0f 8c 4f
    RSP: 0018:ffffc90003d67878 EFLAGS: 00010293
    RAX: ffffffff8ad985e3 RBX: ffff8881a6400090 RCX: ffff8881697f0000
    RDX: 0000000000000000 RSI: 0000000000034010 RDI: 000000000000ffff
    RBP: dffffc0000000000 R08: 0000000000000003 R09: 0000000000000004
    R10: dffffc0000000000 R11: fffff520007acf00 R12: ffff8881baf20900
    R13: 0000000000034010 R14: ffff8881a640008e R15: ffff8881760f7000
    FS:  000055557e81f500(0000) GS:ffff8882a9467000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000200000033000 CR3: 00000001612f4000 CR4: 00000000000006f0
    Call Trace:
     <TASK>
     pppol2tp_sendmsg+0x40a/0x5f0 net/l2tp/l2tp_ppp.c:302
     sock_sendmsg_nosec net/socket.c:727 [inline]
     __sock_sendmsg net/socket.c:742 [inline]
     sock_write_iter+0x503/0x550 net/socket.c:1195
     do_iter_readv_writev+0x619/0x8c0 fs/read_write.c:-1
     vfs_writev+0x33c/0x990 fs/read_write.c:1059
     do_writev+0x154/0x2e0 fs/read_write.c:1105
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0x14d/0xf80 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7f636479c629
    Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 e8 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007ffffd4241c8 EFLAGS: 00000246 ORIG_RAX: 0000000000000014
    RAX: ffffffffffffffda RBX: 00007f6364a15fa0 RCX: 00007f636479c629
    RDX: 0000000000000001 RSI: 0000200000000080 RDI: 0000000000000003
    RBP: 00007f6364832b39 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    R13: 00007f6364a15fac R14: 00007f6364a15fa0 R15: 00007f6364a15fa0
     </TASK>
    
    [1]: https://lore.kernel.org/all/[email protected]/
    
    Fixes: 3557baabf280 ("[L2TP]: PPP over L2TP driver core")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/
    Signed-off-by: Alice Mikityanska <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Linux: Linux 6.12.83 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Wed Apr 22 13:19:04 2026 +0200

    Linux 6.12.83
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Peter Schneider <[email protected]>
    Tested-by: Salvatore Bonaccorso <[email protected]>
    Tested-by: Barry K. Nathan <[email protected]>
    Tested-by: Ron Economos <[email protected]>
    Tested-by: Brett A C Sheffield <[email protected]>
    Tested-by: Francesco Dolcini <[email protected]>
    Tested-by: Vitaly Chikunov <[email protected]>
    Tested-by: Miguel Ojeda <[email protected]>
    Tested-by: Shuah Khan <[email protected]>
    Tested-by: Pavel Machek (CIP) <[email protected]>
    Tested-by: Josh Law <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
media: as102: fix to not free memory after the device is registered in as102_usb_probe() [+ + +]
Author: Jeongjun Park <[email protected]>
Date:   Sun Jan 11 00:17:53 2026 +0900

    media: as102: fix to not free memory after the device is registered in as102_usb_probe()
    
    commit 8bd29dbe03fc5b0f039ab2395ff37b64236d2f0c upstream.
    
    In as102_usb driver, the following race condition occurs:
    ```
                    CPU0                                            CPU1
    as102_usb_probe()
      kzalloc(); // alloc as102_dev_t
      ....
      usb_register_dev();
                                                    fd = sys_open("/path/to/dev"); // open as102 fd
                                                    ....
      usb_deregister_dev();
      ....
      kfree(); // free as102_dev_t
      ....
                                                    sys_close(fd);
                                                      as102_release() // UAF!!
                                                        as102_usb_release()
                                                          kfree(); // DFB!!
    ```
    
    When a USB character device registered with usb_register_dev() is later
    unregistered (via usb_deregister_dev() or disconnect), the device node is
    removed so new open() calls fail. However, file descriptors that are
    already open do not go away immediately: they remain valid until the last
    reference is dropped and the driver's .release() is invoked.
    
    In as102, as102_usb_probe() calls usb_register_dev() and then, on an
    error path, does usb_deregister_dev() and frees as102_dev_t right away.
    If userspace raced a successful open() before the deregistration, that
    open FD will later hit as102_release() --> as102_usb_release() and access
    or free as102_dev_t again, occur a race to use-after-free and
    double-free vuln.
    
    The fix is to never kfree(as102_dev_t) directly once usb_register_dev()
    has succeeded. After deregistration, defer freeing memory to .release().
    
    In other words, let release() perform the last kfree when the final open
    FD is closed.
    
    Cc: <[email protected]>
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=47321e8fd5a4c84088db
    Fixes: cd19f7d3e39b ("[media] as102: fix leaks at failure paths in as102_usb_probe()")
    Signed-off-by: Jeongjun Park <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: em28xx: fix use-after-free in em28xx_v4l2_open() [+ + +]
Author: Abhishek Kumar <[email protected]>
Date:   Tue Mar 10 22:14:37 2026 +0530

    media: em28xx: fix use-after-free in em28xx_v4l2_open()
    
    commit a66485a934c7187ae8e36517d40615fa2e961cff upstream.
    
    em28xx_v4l2_open() reads dev->v4l2 without holding dev->lock,
    creating a race with em28xx_v4l2_init()'s error path and
    em28xx_v4l2_fini(), both of which free the em28xx_v4l2 struct
    and set dev->v4l2 to NULL under dev->lock.
    
    This race leads to two issues:
     - use-after-free in v4l2_fh_init() when accessing vdev->ctrl_handler,
       since the video_device is embedded in the freed em28xx_v4l2 struct.
     - NULL pointer dereference in em28xx_resolution_set() when accessing
       v4l2->norm, since dev->v4l2 has been set to NULL.
    
    Fix this by moving the mutex_lock() before the dev->v4l2 read and
    adding a NULL check for dev->v4l2 under the lock.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=c025d34b8eaa54c571b8
    Fixes: 8139a4d583ab ("[media] em28xx: move v4l2 user counting fields from struct em28xx to struct v4l2")
    Cc: [email protected]
    Signed-off-by: Abhishek Kumar <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: hackrf: fix to not free memory after the device is registered in hackrf_probe() [+ + +]
Author: Jeongjun Park <[email protected]>
Date:   Sat Jan 10 23:58:29 2026 +0900

    media: hackrf: fix to not free memory after the device is registered in hackrf_probe()
    
    commit 3b7da2b4d0fe014eff181ed37e3bf832eb8ed258 upstream.
    
    In hackrf driver, the following race condition occurs:
    ```
                    CPU0                                            CPU1
    hackrf_probe()
      kzalloc(); // alloc hackrf_dev
      ....
      v4l2_device_register();
      ....
                                                    fd = sys_open("/path/to/dev"); // open hackrf fd
                                                    ....
      v4l2_device_unregister();
      ....
      kfree(); // free hackrf_dev
      ....
                                                    sys_ioctl(fd, ...);
                                                      v4l2_ioctl();
                                                        video_is_registered() // UAF!!
                                                    ....
                                                    sys_close(fd);
                                                      v4l2_release() // UAF!!
                                                        hackrf_video_release()
                                                          kfree(); // DFB!!
    ```
    
    When a V4L2 or video device is unregistered, the device node is removed so
    new open() calls are blocked.
    
    However, file descriptors that are already open-and any in-flight I/O-do
    not terminate immediately; they remain valid until the last reference is
    dropped and the driver's release() is invoked.
    
    Therefore, freeing device memory on the error path after hackrf_probe()
    has registered dev it will lead to a race to use-after-free vuln, since
    those already-open handles haven't been released yet.
    
    And since release() free memory too, race to use-after-free and
    double-free vuln occur.
    
    To prevent this, if device is registered from probe(), it should be
    modified to free memory only through release() rather than calling
    kfree() directly.
    
    Cc: <[email protected]>
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=6ffd76b5405c006a46b7
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=f1b20958f93d2d250727
    Fixes: 8bc4a9ed8504 ("[media] hackrf: add support for transmitter")
    Signed-off-by: Jeongjun Park <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: mediatek: vcodec: fix use-after-free in encoder release path [+ + +]
Author: Fan Wu <[email protected]>
Date:   Wed Mar 4 09:35:06 2026 +0000

    media: mediatek: vcodec: fix use-after-free in encoder release path
    
    commit 76e35091ffc722ba39b303e48bc5d08abb59dd56 upstream.
    
    The fops_vcodec_release() function frees the context structure (ctx)
    without first cancelling any pending or running work in ctx->encode_work.
    This creates a race window where the workqueue handler (mtk_venc_worker)
    may still be accessing the context memory after it has been freed.
    
    Race condition:
    
        CPU 0 (release path)               CPU 1 (workqueue)
        ---------------------               ------------------
        fops_vcodec_release()
          v4l2_m2m_ctx_release()
            v4l2_m2m_cancel_job()
            // waits for m2m job "done"
                                            mtk_venc_worker()
                                              v4l2_m2m_job_finish()
                                              // m2m job "done"
                                              // BUT worker still running!
                                              // post-job_finish access:
                                            other ctx dereferences
                                              // UAF if ctx already freed
            // returns (job "done")
          kfree(ctx)  // ctx freed
    
    Root cause: The v4l2_m2m_ctx_release() only waits for the m2m job
    lifecycle (via TRANS_RUNNING flag), not the workqueue lifecycle.
    After v4l2_m2m_job_finish() is called, the m2m framework considers
    the job complete and v4l2_m2m_ctx_release() returns, but the worker
    function continues executing and may still access ctx.
    
    The work is queued during encode operations via:
      queue_work(ctx->dev->encode_workqueue, &ctx->encode_work)
    The worker function accesses ctx->m2m_ctx, ctx->dev, and other ctx
    fields even after calling v4l2_m2m_job_finish().
    
    This vulnerability was confirmed with KASAN by running an instrumented
    test module that widens the post-job_finish race window. KASAN detected:
    
      BUG: KASAN: slab-use-after-free in mtk_venc_worker+0x159/0x180
      Read of size 4 at addr ffff88800326e000 by task kworker/u8:0/12
    
      Workqueue: mtk_vcodec_enc_wq mtk_venc_worker
    
      Allocated by task 47:
        __kasan_kmalloc+0x7f/0x90
        fops_vcodec_open+0x85/0x1a0
    
      Freed by task 47:
        __kasan_slab_free+0x43/0x70
        kfree+0xee/0x3a0
        fops_vcodec_release+0xb7/0x190
    
    Fix this by calling cancel_work_sync(&ctx->encode_work) before kfree(ctx).
    This ensures the workqueue handler is both cancelled (if pending) and
    synchronized (waits for any running handler to complete) before the
    context is freed.
    
    Placement rationale: The fix is placed after v4l2_ctrl_handler_free()
    and before list_del_init(&ctx->list). At this point, all m2m operations
    are done (v4l2_m2m_ctx_release() has returned), and we need to ensure
    the workqueue is synchronized before removing ctx from the list and
    freeing it.
    
    Note: The open error path does NOT need cancel_work_sync() because
    INIT_WORK() only initializes the work structure - it does not schedule
    it. Work is only scheduled later during device_run() operations.
    
    Fixes: 0934d3759615 ("media: mediatek: vcodec: separate decoder and encoder")
    Cc: [email protected]
    Signed-off-by: Fan Wu <[email protected]>
    Reviewed-by: Nicolas Dufresne <[email protected]>
    Signed-off-by: Nicolas Dufresne <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: rkvdec: reduce stack usage in rkvdec_init_v4l2_vp9_count_tbl() [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Mon Feb 2 10:47:51 2026 +0100

    media: rkvdec: reduce stack usage in rkvdec_init_v4l2_vp9_count_tbl()
    
    [ Upstream commit c03b7dec3c4ddc97872fa12bfca75bae9cb46510 ]
    
    The deeply nested loop in rkvdec_init_v4l2_vp9_count_tbl() needs a lot
    of registers, so when the clang register allocator runs out, it ends up
    spilling countless temporaries to the stack:
    
    drivers/media/platform/rockchip/rkvdec/rkvdec-vp9.c:966:12: error: stack frame size (1472) exceeds limit (1280) in 'rkvdec_vp9_start' [-Werror,-Wframe-larger-than]
    
    Marking this function as noinline_for_stack keeps it out of
    rkvdec_vp9_start(), giving the compiler more room for optimization.
    
    The resulting code is good enough that both the total stack usage
    and the loop get enough better to stay under the warning limit,
    though it's still slow, and would need a larger rework if this
    function ends up being called in a fast path.
    
    Signed-off-by: Arnd Bergmann <[email protected]>
    Reviewed-by: Nicolas Dufresne <[email protected]>
    Signed-off-by: Nicolas Dufresne <[email protected]>
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: vidtv: fix nfeeds state corruption on start_streaming failure [+ + +]
Author: Ruslan Valiyev <[email protected]>
Date:   Sun Mar 1 21:07:35 2026 +0000

    media: vidtv: fix nfeeds state corruption on start_streaming failure
    
    commit a0e5a598fe9a4612b852406b51153b881592aede upstream.
    
    syzbot reported a memory leak in vidtv_psi_service_desc_init [1].
    
    When vidtv_start_streaming() fails inside vidtv_start_feed(), the
    nfeeds counter is left incremented even though no feed was actually
    started. This corrupts the driver state: subsequent start_feed calls
    see nfeeds > 1 and skip starting the mux, while stop_feed calls
    eventually try to stop a non-existent stream.
    
    This state corruption can also lead to memory leaks, since the mux
    and channel resources may be partially allocated during a failed
    start_streaming but never cleaned up, as the stop path finds
    dvb->streaming == false and returns early.
    
    Fix by decrementing nfeeds back when start_streaming fails, keeping
    the counter in sync with the actual number of active feeds.
    
    [1]
    BUG: memory leak
    unreferenced object 0xffff888145b50820 (size 32):
     comm "syz.0.17", pid 6068, jiffies 4294944486
     backtrace (crc 90a0c7d4):
      vidtv_psi_service_desc_init+0x74/0x1b0 drivers/media/test-drivers/vidtv/vidtv_psi.c:288
      vidtv_channel_s302m_init+0xb1/0x2a0 drivers/media/test-drivers/vidtv/vidtv_channel.c:83
      vidtv_channels_init+0x1b/0x40 drivers/media/test-drivers/vidtv/vidtv_channel.c:524
      vidtv_mux_init+0x516/0xbe0 drivers/media/test-drivers/vidtv/vidtv_mux.c:518
      vidtv_start_streaming drivers/media/test-drivers/vidtv/vidtv_bridge.c:194 [inline]
      vidtv_start_feed+0x33e/0x4d0 drivers/media/test-drivers/vidtv/vidtv_bridge.c:239
    
    Fixes: f90cf6079bf67 ("media: vidtv: add a bridge driver")
    Cc: [email protected]
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=639ebc6ec75e96674741
    Signed-off-by: Ruslan Valiyev <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: vidtv: fix NULL pointer dereference in vidtv_channel_pmt_match_sections [+ + +]
Author: Ruslan Valiyev <[email protected]>
Date:   Tue Mar 3 11:27:54 2026 +0000

    media: vidtv: fix NULL pointer dereference in vidtv_channel_pmt_match_sections
    
    commit f8e1fc918a9fe67103bcda01d20d745f264d00a7 upstream.
    
    syzbot reported a general protection fault in vidtv_psi_desc_assign [1].
    
    vidtv_psi_pmt_stream_init() can return NULL on memory allocation
    failure, but vidtv_channel_pmt_match_sections() does not check for
    this. When tail is NULL, the subsequent call to
    vidtv_psi_desc_assign(&tail->descriptor, desc) dereferences a NULL
    pointer offset, causing a general protection fault.
    
    Add a NULL check after vidtv_psi_pmt_stream_init(). On failure, clean
    up the already-allocated stream chain and return.
    
    [1]
    Oops: general protection fault, probably for non-canonical address 0xdffffc0000000000: 0000 [#1] SMP KASAN PTI
    KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
    RIP: 0010:vidtv_psi_desc_assign+0x24/0x90 drivers/media/test-drivers/vidtv/vidtv_psi.c:629
    Call Trace:
     <TASK>
     vidtv_channel_pmt_match_sections drivers/media/test-drivers/vidtv/vidtv_channel.c:349 [inline]
     vidtv_channel_si_init+0x1445/0x1a50 drivers/media/test-drivers/vidtv/vidtv_channel.c:479
     vidtv_mux_init+0x526/0xbe0 drivers/media/test-drivers/vidtv/vidtv_mux.c:519
     vidtv_start_streaming drivers/media/test-drivers/vidtv/vidtv_bridge.c:194 [inline]
     vidtv_start_feed+0x33e/0x4d0 drivers/media/test-drivers/vidtv/vidtv_bridge.c:239
    
    Fixes: f90cf6079bf67 ("media: vidtv: add a bridge driver")
    Cc: [email protected]
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=1f5bcc7c919ec578777a
    Signed-off-by: Ruslan Valiyev <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: vidtv: fix pass-by-value structs causing MSAN warnings [+ + +]
Author: Abd-Alrhman Masalkhi <[email protected]>
Date:   Sat Feb 21 13:56:18 2026 +0100

    media: vidtv: fix pass-by-value structs causing MSAN warnings
    
    commit 5f8e73bde67e931468bc2a1860d78d72f0c6ba41 upstream.
    
    vidtv_ts_null_write_into() and vidtv_ts_pcr_write_into() take their
    argument structs by value, causing MSAN to report uninit-value warnings.
    While only vidtv_ts_null_write_into() has triggered a report so far,
    both functions share the same issue.
    
    Fix by passing both structs by const pointer instead, avoiding the
    stack copy of the struct along with its MSAN shadow and origin metadata.
    The functions do not modify the structs, which is enforced by the const
    qualifier.
    
    Fixes: f90cf6079bf67 ("media: vidtv: add a bridge driver")
    Cc: [email protected]
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=96f901260a0b2d29cd1a
    Tested-by: [email protected]
    Suggested-by: Yihan Ding <[email protected]>
    Signed-off-by: Abd-Alrhman Masalkhi <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/kasan: fix double free for kasan pXds [+ + +]
Author: Ritesh Harjani (IBM) <[email protected]>
Date:   Tue Feb 24 18:53:16 2026 +0530

    mm/kasan: fix double free for kasan pXds
    
    commit 51d8c78be0c27ddb91bc2c0263941d8b30a47d3b upstream.
    
    kasan_free_pxd() assumes the page table is always struct page aligned.
    But that's not always the case for all architectures.  E.g.  In case of
    powerpc with 64K pagesize, PUD table (of size 4096) comes from slab cache
    named pgtable-2^9.  Hence instead of page_to_virt(pxd_page()) let's just
    directly pass the start of the pxd table which is passed as the 1st
    argument.
    
    This fixes the below double free kasan issue seen with PMEM:
    
    radix-mmu: Mapped 0x0000047d10000000-0x0000047f90000000 with 2.00 MiB pages
    ==================================================================
    BUG: KASAN: double-free in kasan_remove_zero_shadow+0x9c4/0xa20
    Free of addr c0000003c38e0000 by task ndctl/2164
    
    CPU: 34 UID: 0 PID: 2164 Comm: ndctl Not tainted 6.19.0-rc1-00048-gea1013c15392 #157 VOLUNTARY
    Hardware name: IBM,9080-HEX POWER10 (architected) 0x800200 0xf000006 of:IBM,FW1060.00 (NH1060_012) hv:phyp pSeries
    Call Trace:
     dump_stack_lvl+0x88/0xc4 (unreliable)
     print_report+0x214/0x63c
     kasan_report_invalid_free+0xe4/0x110
     check_slab_allocation+0x100/0x150
     kmem_cache_free+0x128/0x6e0
     kasan_remove_zero_shadow+0x9c4/0xa20
     memunmap_pages+0x2b8/0x5c0
     devm_action_release+0x54/0x70
     release_nodes+0xc8/0x1a0
     devres_release_all+0xe0/0x140
     device_unbind_cleanup+0x30/0x120
     device_release_driver_internal+0x3e4/0x450
     unbind_store+0xfc/0x110
     drv_attr_store+0x78/0xb0
     sysfs_kf_write+0x114/0x140
     kernfs_fop_write_iter+0x264/0x3f0
     vfs_write+0x3bc/0x7d0
     ksys_write+0xa4/0x190
     system_call_exception+0x190/0x480
     system_call_vectored_common+0x15c/0x2ec
    ---- interrupt: 3000 at 0x7fff93b3d3f4
    NIP:  00007fff93b3d3f4 LR: 00007fff93b3d3f4 CTR: 0000000000000000
    REGS: c0000003f1b07e80 TRAP: 3000   Not tainted  (6.19.0-rc1-00048-gea1013c15392)
    MSR:  800000000280f033 <SF,VEC,VSX,EE,PR,FP,ME,IR,DR,RI,LE>  CR: 48888208  XER: 00000000
    <...>
    NIP [00007fff93b3d3f4] 0x7fff93b3d3f4
    LR [00007fff93b3d3f4] 0x7fff93b3d3f4
    ---- interrupt: 3000
    
     The buggy address belongs to the object at c0000003c38e0000
      which belongs to the cache pgtable-2^9 of size 4096
     The buggy address is located 0 bytes inside of
      4096-byte region [c0000003c38e0000, c0000003c38e1000)
    
     The buggy address belongs to the physical page:
     page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x3c38c
     head: order:2 mapcount:0 entire_mapcount:0 nr_pages_mapped:0 pincount:0
     memcg:c0000003bfd63e01
     flags: 0x63ffff800000040(head|node=6|zone=0|lastcpupid=0x7ffff)
     page_type: f5(slab)
     raw: 063ffff800000040 c000000140058980 5deadbeef0000122 0000000000000000
     raw: 0000000000000000 0000000080200020 00000000f5000000 c0000003bfd63e01
     head: 063ffff800000040 c000000140058980 5deadbeef0000122 0000000000000000
     head: 0000000000000000 0000000080200020 00000000f5000000 c0000003bfd63e01
     head: 063ffff800000002 c00c000000f0e301 00000000ffffffff 00000000ffffffff
     head: ffffffffffffffff 0000000000000000 00000000ffffffff 0000000000000004
     page dumped because: kasan: bad access detected
    
    [  138.953636] [   T2164] Memory state around the buggy address:
    [  138.953643] [   T2164]  c0000003c38dff00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [  138.953652] [   T2164]  c0000003c38dff80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [  138.953661] [   T2164] >c0000003c38e0000: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [  138.953669] [   T2164]                    ^
    [  138.953675] [   T2164]  c0000003c38e0080: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [  138.953684] [   T2164]  c0000003c38e0100: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [  138.953692] [   T2164] ==================================================================
    [  138.953701] [   T2164] Disabling lock debugging due to kernel taint
    
    Link: https://lkml.kernel.org/r/2f9135c7866c6e0d06e960993b8a5674a9ebc7ec.1771938394.git.ritesh.list@gmail.com
    Fixes: 0207df4fa1a8 ("kernel/memremap, kasan: make ZONE_DEVICE with work with KASAN")
    Signed-off-by: Ritesh Harjani (IBM) <[email protected]>
    Reported-by: Venkat Rao Bagalkote <[email protected]>
    Reviewed-by: Alexander Potapenko <[email protected]>
    Cc: Andrey Konovalov <[email protected]>
    Cc: Andrey Ryabinin <[email protected]>
    Cc: Dmitry Vyukov <[email protected]>
    Cc: "Ritesh Harjani (IBM)" <[email protected]>
    Cc: Vincenzo Frascino <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm: blk-cgroup: fix use-after-free in cgwb_release_workfn() [+ + +]
Author: Breno Leitao <[email protected]>
Date:   Mon Apr 13 03:09:19 2026 -0700

    mm: blk-cgroup: fix use-after-free in cgwb_release_workfn()
    
    commit 8f5857be99f1ed1fa80991c72449541f634626ee upstream.
    
    cgwb_release_workfn() calls css_put(wb->blkcg_css) and then later accesses
    wb->blkcg_css again via blkcg_unpin_online().  If css_put() drops the last
    reference, the blkcg can be freed asynchronously (css_free_rwork_fn ->
    blkcg_css_free -> kfree) before blkcg_unpin_online() dereferences the
    pointer to access blkcg->online_pin, resulting in a use-after-free:
    
      BUG: KASAN: slab-use-after-free in blkcg_unpin_online (./include/linux/instrumented.h:112 ./include/linux/atomic/atomic-instrumented.h:400 ./include/linux/refcount.h:389 ./include/linux/refcount.h:432 ./include/linux/refcount.h:450 block/blk-cgroup.c:1367)
      Write of size 4 at addr ff11000117aa6160 by task kworker/71:1/531
       Workqueue: cgwb_release cgwb_release_workfn
       Call Trace:
        <TASK>
         blkcg_unpin_online (./include/linux/instrumented.h:112 ./include/linux/atomic/atomic-instrumented.h:400 ./include/linux/refcount.h:389 ./include/linux/refcount.h:432 ./include/linux/refcount.h:450 block/blk-cgroup.c:1367)
         cgwb_release_workfn (mm/backing-dev.c:629)
         process_scheduled_works (kernel/workqueue.c:3278 kernel/workqueue.c:3385)
    
       Freed by task 1016:
        kfree (./include/linux/kasan.h:235 mm/slub.c:2689 mm/slub.c:6246 mm/slub.c:6561)
        css_free_rwork_fn (kernel/cgroup/cgroup.c:5542)
        process_scheduled_works (kernel/workqueue.c:3302 kernel/workqueue.c:3385)
    
    ** Stack based on commit 66672af7a095 ("Add linux-next specific files
    for 20260410")
    
    I am seeing this crash sporadically in Meta fleet across multiple kernel
    versions.  A full reproducer is available at:
    https://github.com/leitao/debug/blob/main/reproducers/repro_blkcg_uaf.sh
    
    (The race window is narrow.  To make it easily reproducible, inject a
    msleep(100) between css_put() and blkcg_unpin_online() in
    cgwb_release_workfn().  With that delay and a KASAN-enabled kernel, the
    reproducer triggers the splat reliably in less than a second.)
    
    Fix this by moving blkcg_unpin_online() before css_put(), so the
    cgwb's CSS reference keeps the blkcg alive while blkcg_unpin_online()
    accesses it.
    
    Link: https://lore.kernel.org/[email protected]
    Fixes: 59b57717fff8 ("blkcg: delay blkg destruction until after writeback has finished")
    Signed-off-by: Breno Leitao <[email protected]>
    Reviewed-by: Dennis Zhou <[email protected]>
    Reviewed-by: Shakeel Butt <[email protected]>
    Cc: David Hildenbrand <[email protected]>
    Cc: Jens Axboe <[email protected]>
    Cc: Johannes Weiner <[email protected]>
    Cc: Josef Bacik <[email protected]>
    Cc: JP Kobryn <[email protected]>
    Cc: Liam Howlett <[email protected]>
    Cc: Lorenzo Stoakes (Oracle) <[email protected]>
    Cc: Martin KaFai Lau <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Mike Rapoport <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: Tejun Heo <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net: increase IP_TUNNEL_RECURSION_LIMIT to 5 [+ + +]
Author: Chris J Arges <[email protected]>
Date:   Thu Apr 2 17:23:16 2026 -0500

    net: increase IP_TUNNEL_RECURSION_LIMIT to 5
    
    [ Upstream commit 77facb35227c421467cdb49268de433168c2dcef ]
    
    In configurations with multiple tunnel layers and MPLS lwtunnel routing, a
    single tunnel hop can increment the counter beyond this limit. This causes
    packets to be dropped with the "Dead loop on virtual device" message even
    when a routing loop doesn't exist.
    
    Increase IP_TUNNEL_RECURSION_LIMIT from 4 to 5 to handle this use-case.
    
    Fixes: 6f1a9140ecda ("net: add xmit recursion limit to tunnel xmit functions")
    Link: https://lore.kernel.org/netdev/[email protected]/
    Signed-off-by: Chris J Arges <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: ipa: fix event ring index not programmed for IPA v5.0+ [+ + +]
Author: Alexander Koskovich <[email protected]>
Date:   Fri Apr 3 18:43:48 2026 +0200

    net: ipa: fix event ring index not programmed for IPA v5.0+
    
    [ Upstream commit 56007972c0b1e783ca714d6f1f4d6e66e531d21f ]
    
    For IPA v5.0+, the event ring index field moved from CH_C_CNTXT_0 to
    CH_C_CNTXT_1. The v5.0 register definition intended to define this
    field in the CH_C_CNTXT_1 fmask array but used the old identifier of
    ERINDEX instead of CH_ERINDEX.
    
    Without a valid event ring, GSI channels could never signal transfer
    completions. This caused gsi_channel_trans_quiesce() to block
    forever in wait_for_completion().
    
    At least for IPA v5.2 this resolves an issue seen where runtime
    suspend, system suspend, and remoteproc stop all hanged forever. It
    also meant the IPA data path was completely non functional.
    
    Fixes: faf0678ec8a0 ("net: ipa: add IPA v5.0 GSI register definitions")
    Signed-off-by: Alexander Koskovich <[email protected]>
    Signed-off-by: Luca Weiss <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: ipa: fix GENERIC_CMD register field masks for IPA v5.0+ [+ + +]
Author: Alexander Koskovich <[email protected]>
Date:   Fri Apr 3 18:43:47 2026 +0200

    net: ipa: fix GENERIC_CMD register field masks for IPA v5.0+
    
    [ Upstream commit 9709b56d908acc120fe8b4ae250b3c9d749ea832 ]
    
    Fix the field masks to match the hardware layout documented in
    downstream GSI (GSI_V3_0_EE_n_GSI_EE_GENERIC_CMD_*).
    
    Notably this fixes a WARN I was seeing when I tried to send "stop"
    to the MPSS remoteproc while IPA was up.
    
    Fixes: faf0678ec8a0 ("net: ipa: add IPA v5.0 GSI register definitions")
    Signed-off-by: Alexander Koskovich <[email protected]>
    Signed-off-by: Luca Weiss <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: lapbether: handle NETDEV_PRE_TYPE_CHANGE [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Apr 2 10:35:19 2026 +0000

    net: lapbether: handle NETDEV_PRE_TYPE_CHANGE
    
    [ Upstream commit b120e4432f9f56c7103133d6a11245e617695adb ]
    
    lapbeth_data_transmit() expects the underlying device type
    to be ARPHRD_ETHER.
    
    Returning NOTIFY_BAD from lapbeth_device_event() makes sure
    bonding driver can not break this expectation.
    
    Fixes: 872254dd6b1f ("net/bonding: Enable bonding to enslave non ARPHRD_ETHER")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Cc: Martin Schiller <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: sched: act_csum: validate nested VLAN headers [+ + +]
Author: Ruide Cao <[email protected]>
Date:   Thu Apr 2 22:46:20 2026 +0800

    net: sched: act_csum: validate nested VLAN headers
    
    [ Upstream commit c842743d073bdd683606cb414eb0ca84465dd834 ]
    
    tcf_csum_act() walks nested VLAN headers directly from skb->data when an
    skb still carries in-payload VLAN tags. The current code reads
    vlan->h_vlan_encapsulated_proto and then pulls VLAN_HLEN bytes without
    first ensuring that the full VLAN header is present in the linear area.
    
    If only part of an inner VLAN header is linearized, accessing
    h_vlan_encapsulated_proto reads past the linear area, and the following
    skb_pull(VLAN_HLEN) may violate skb invariants.
    
    Fix this by requiring pskb_may_pull(skb, VLAN_HLEN) before accessing and
    pulling each nested VLAN header. If the header still is not fully
    available, drop the packet through the existing error path.
    
    Fixes: 2ecba2d1e45b ("net: sched: act_csum: Fix csum calc for tagged packets")
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Co-developed-by: Yuan Tan <[email protected]>
    Signed-off-by: Yuan Tan <[email protected]>
    Suggested-by: Xin Liu <[email protected]>
    Tested-by: Ren Wei <[email protected]>
    Signed-off-by: Ruide Cao <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/22df2fcb49f410203eafa5d97963dd36089f4ecf.1774892775.git.caoruide123@gmail.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: sched: fix TCF_LAYER_TRANSPORT handling in tcf_get_base_ptr() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Wed Apr 15 14:43:48 2026 -0700

    net: sched: fix TCF_LAYER_TRANSPORT handling in tcf_get_base_ptr()
    
    [Upstream commit 4fe5a00ec70717a7f1002d8913ec6143582b3c8e]
    
    syzbot reported that tcf_get_base_ptr() can be called while transport
    header is not set [1].
    
    Instead of returning a dangling pointer, return NULL.
    
    Fix tcf_get_base_ptr() callers to handle this NULL value.
    
    [1]
     WARNING: CPU: 1 PID: 6019 at ./include/linux/skbuff.h:3071 skb_transport_header include/linux/skbuff.h:3071 [inline]
     WARNING: CPU: 1 PID: 6019 at ./include/linux/skbuff.h:3071 tcf_get_base_ptr include/net/pkt_cls.h:539 [inline]
     WARNING: CPU: 1 PID: 6019 at ./include/linux/skbuff.h:3071 em_nbyte_match+0x2d8/0x3f0 net/sched/em_nbyte.c:43
    Modules linked in:
    CPU: 1 UID: 0 PID: 6019 Comm: syz.0.17 Not tainted syzkaller #0 PREEMPT(full)
    Call Trace:
     <TASK>
      tcf_em_match net/sched/ematch.c:494 [inline]
      __tcf_em_tree_match+0x1ac/0x770 net/sched/ematch.c:520
      tcf_em_tree_match include/net/pkt_cls.h:512 [inline]
      basic_classify+0x115/0x2d0 net/sched/cls_basic.c:50
      tc_classify include/net/tc_wrapper.h:197 [inline]
      __tcf_classify net/sched/cls_api.c:1764 [inline]
      tcf_classify+0x4cf/0x1140 net/sched/cls_api.c:1860
      multiq_classify net/sched/sch_multiq.c:39 [inline]
      multiq_enqueue+0xfd/0x4c0 net/sched/sch_multiq.c:66
      dev_qdisc_enqueue+0x4e/0x260 net/core/dev.c:4118
      __dev_xmit_skb net/core/dev.c:4214 [inline]
      __dev_queue_xmit+0xe83/0x3b50 net/core/dev.c:4729
      packet_snd net/packet/af_packet.c:3076 [inline]
      packet_sendmsg+0x3e33/0x5080 net/packet/af_packet.c:3108
      sock_sendmsg_nosec net/socket.c:727 [inline]
      __sock_sendmsg+0x21c/0x270 net/socket.c:742
      ____sys_sendmsg+0x505/0x830 net/socket.c:2630
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Reviewed-by: Jamal Hadi Salim <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Chelsy Ratnawat <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: sfp: add quirks for Hisense and HSGQ GPON ONT SFP modules [+ + +]
Author: John Pavlick <[email protected]>
Date:   Mon Apr 6 13:23:33 2026 +0000

    net: sfp: add quirks for Hisense and HSGQ GPON ONT SFP modules
    
    [ Upstream commit 95aca8602ef70ffd3d971675751c81826e124f90 ]
    
    Several GPON ONT SFP sticks based on Realtek RTL960x report
    1000BASE-LX at 1300MBd in their EEPROM but can operate at 2500base-X.
    On hosts capable of 2500base-X (e.g. Banana Pi R3 / MT7986), the
    kernel negotiates only 1G because it trusts the incorrect EEPROM data.
    
    Add quirks for:
    - Hisense-Leox LXT-010S-H
    - Hisense ZNID-GPON-2311NA
    - HSGQ HSGQ-XPON-Stick
    
    Each quirk advertises 2500base-X and ignores TX_FAULT during the
    module's ~40s Linux boot time.
    
    Tested on Banana Pi R3 (MT7986) with OpenWrt 25.12.1, confirmed
    2.5Gbps link and full throughput with flow offloading.
    
    Reviewed-by: Russell King (Oracle) <[email protected]>
    Suggested-by: Marcin Nita <[email protected]>
    Signed-off-by: John Pavlick <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: stmmac: Fix PTP ref clock for Tegra234 [+ + +]
Author: Jon Hunter <[email protected]>
Date:   Wed Apr 1 11:29:39 2026 +0100

    net: stmmac: Fix PTP ref clock for Tegra234
    
    [ Upstream commit 1345e9f4e3f3bc7d8a0a2138ae29e205a857a555 ]
    
    Since commit 030ce919e114 ("net: stmmac: make sure that ptp_rate is not
    0 before configuring timestamping") was added the following error is
    observed on Tegra234:
    
     ERR KERN tegra-mgbe 6800000.ethernet eth0: Invalid PTP clock rate
     WARNING KERN tegra-mgbe 6800000.ethernet eth0: PTP init failed
    
    It turns out that the Tegra234 device-tree binding defines the PTP ref
    clock name as 'ptp-ref' and not 'ptp_ref' and the above commit now
    exposes this and that the PTP clock is not configured correctly.
    
    In order to update device-tree to use the correct 'ptp_ref' name, update
    the Tegra MGBE driver to use 'ptp_ref' by default and fallback to using
    'ptp-ref' if this clock name is present.
    
    Fixes: d8ca113724e7 ("net: stmmac: tegra: Add MGBE support")
    Signed-off-by: Jon Hunter <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: txgbe: leave space for null terminators on property_entry [+ + +]
Author: Fabio Baltieri <[email protected]>
Date:   Sun Apr 5 23:20:13 2026 +0100

    net: txgbe: leave space for null terminators on property_entry
    
    [ Upstream commit 5a37d228799b0ec2c277459c83c814a59d310bc3 ]
    
    Lists of struct property_entry are supposed to be terminated with an
    empty property, this driver currently seems to be allocating exactly the
    amount of entry used.
    
    Change the struct definition to leave an extra element for all
    property_entry.
    
    Fixes: c3e382ad6d15 ("net: txgbe: Add software nodes to support phylink")
    Signed-off-by: Fabio Baltieri <[email protected]>
    Tested-by: Jiawen Wu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: usb: cdc-phonet: fix skb frags[] overflow in rx_complete() [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Sat Apr 11 13:01:35 2026 +0200

    net: usb: cdc-phonet: fix skb frags[] overflow in rx_complete()
    
    commit 600dc40554dc5ad1e6f3af51f700228033f43ea7 upstream.
    
    A malicious USB device claiming to be a CDC Phonet modem can overflow
    the skb_shared_info->frags[] array by sending an unbounded sequence of
    full-page bulk transfers.
    
    Drop the skb and increment the length error when the frag limit is
    reached.  This matches the same fix that commit f0813bcd2d9d ("net:
    wwan: t7xx: fix potential skb->frags overflow in RX path") did for the
    t7xx driver.
    
    Cc: Andrew Lunn <[email protected]>
    Cc: "David S. Miller" <[email protected]>
    Cc: Eric Dumazet <[email protected]>
    Cc: Jakub Kicinski <[email protected]>
    Cc: Paolo Abeni <[email protected]>
    Cc: stable <[email protected]>
    Assisted-by: gregkh_clanker_t1000
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Link: https://patch.msgid.link/2026041134-dreamboat-buddhism-d1ec@gregkh
    Fixes: 87cf65601e17 ("USB host CDC Phonet network interface driver")
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
netfilter: conntrack: add missing netlink policy validations [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Tue Mar 10 00:28:29 2026 +0100

    netfilter: conntrack: add missing netlink policy validations
    
    [ Upstream commit f900e1d77ee0ef87bfb5ab3fe60f0b3d8ad5ba05 ]
    
    Hyunwoo Kim reports out-of-bounds access in sctp and ctnetlink.
    
    These attributes are used by the kernel without any validation.
    Extend the netlink policies accordingly.
    
    Quoting the reporter:
      nlattr_to_sctp() assigns the user-supplied CTA_PROTOINFO_SCTP_STATE
      value directly to ct->proto.sctp.state without checking that it is
      within the valid range. [..]
    
      and: ... with exp->dir = 100, the access at
      ct->master->tuplehash[100] reads 5600 bytes past the start of a
      320-byte nf_conn object, causing a slab-out-of-bounds read confirmed by
      UBSAN.
    
    Fixes: 076a0ca02644 ("netfilter: ctnetlink: add NAT support for expectations")
    Fixes: a258860e01b8 ("netfilter: ctnetlink: add full support for SCTP to ctnetlink")
    Reported-by: Hyunwoo Kim <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: ip6t_eui64: reject invalid MAC header for all packets [+ + +]
Author: Zhengchuan Liang <[email protected]>
Date:   Sat Apr 4 17:39:47 2026 +0800

    netfilter: ip6t_eui64: reject invalid MAC header for all packets
    
    [ Upstream commit fdce0b3590f724540795b874b4c8850c90e6b0a8 ]
    
    `eui64_mt6()` derives a modified EUI-64 from the Ethernet source address
    and compares it with the low 64 bits of the IPv6 source address.
    
    The existing guard only rejects an invalid MAC header when
    `par->fragoff != 0`. For packets with `par->fragoff == 0`, `eui64_mt6()`
    can still reach `eth_hdr(skb)` even when the MAC header is not valid.
    
    Fix this by removing the `par->fragoff != 0` condition so that packets
    with an invalid MAC header are rejected before accessing `eth_hdr(skb)`.
    
    Fixes: 1da177e4c3f41 ("Linux-2.6.12-rc2")
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Co-developed-by: Yuan Tan <[email protected]>
    Signed-off-by: Yuan Tan <[email protected]>
    Suggested-by: Xin Liu <[email protected]>
    Tested-by: Ren Wei <[email protected]>
    Signed-off-by: Zhengchuan Liang <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nfnetlink_log: initialize nfgenmsg in NLMSG_DONE terminator [+ + +]
Author: Xiang Mei <[email protected]>
Date:   Wed Apr 1 14:20:57 2026 -0700

    netfilter: nfnetlink_log: initialize nfgenmsg in NLMSG_DONE terminator
    
    [ Upstream commit 1f3083aec8836213da441270cdb1ab612dd82cf4 ]
    
    When batching multiple NFLOG messages (inst->qlen > 1), __nfulnl_send()
    appends an NLMSG_DONE terminator with sizeof(struct nfgenmsg) payload via
    nlmsg_put(), but never initializes the nfgenmsg bytes. The nlmsg_put()
    helper only zeroes alignment padding after the payload, not the payload
    itself, so four bytes of stale kernel heap data are leaked to userspace
    in the NLMSG_DONE message body.
    
    Use nfnl_msg_put() to build the NLMSG_DONE terminator, which initializes
    the nfgenmsg payload via nfnl_fill_hdr(), consistent with how
    __build_packet_message() already constructs NFULNL_MSG_PACKET headers.
    
    Fixes: 29c5d4afba51 ("[NETFILTER]: nfnetlink_log: fix sending of multipart messages")
    Reported-by: Weiming Shi <[email protected]>
    Signed-off-by: Xiang Mei <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nfnetlink_queue: make hash table per queue [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Tue Apr 7 17:00:01 2026 +0200

    netfilter: nfnetlink_queue: make hash table per queue
    
    [ Upstream commit 936206e3f6ff411581e615e930263d6f8b78df9d ]
    
    Sharing a global hash table among all queues is tempting, but
    it can cause crash:
    
    BUG: KASAN: slab-use-after-free in nfqnl_recv_verdict+0x11ac/0x15e0 [nfnetlink_queue]
    [..]
     nfqnl_recv_verdict+0x11ac/0x15e0 [nfnetlink_queue]
     nfnetlink_rcv_msg+0x46a/0x930
     kmem_cache_alloc_node_noprof+0x11e/0x450
    
    struct nf_queue_entry is freed via kfree, but parallel cpu can still
    encounter such an nf_queue_entry when walking the list.
    
    Alternative fix is to free the nf_queue_entry via kfree_rcu() instead,
    but as we have to alloc/free for each skb this will cause more mem
    pressure.
    
    Cc: Scott Mitchell <[email protected]>
    Fixes: e19079adcd26 ("netfilter: nfnetlink_queue: optimize verdict lookup with hash table")
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nfnetlink_queue: nfqnl_instance GFP_ATOMIC -> GFP_KERNEL_ACCOUNT allocation [+ + +]
Author: Scott Mitchell <[email protected]>
Date:   Sat Jan 17 09:32:30 2026 -0800

    netfilter: nfnetlink_queue: nfqnl_instance GFP_ATOMIC -> GFP_KERNEL_ACCOUNT allocation
    
    [ Upstream commit a4400a5b343d1bc4aa8f685608515413238e7ee2 ]
    
    Currently, instance_create() uses GFP_ATOMIC because it's called while
    holding instances_lock spinlock. This makes allocation more likely to
    fail under memory pressure.
    
    Refactor nfqnl_recv_config() to drop RCU lock after instance_lookup()
    and peer_portid verification. A socket cannot simultaneously send a
    message and close, so the queue owned by the sending socket cannot be
    destroyed while processing its CONFIG message. This allows
    instance_create() to allocate with GFP_KERNEL_ACCOUNT before taking
    the spinlock.
    
    Suggested-by: Florian Westphal <[email protected]>
    Signed-off-by: Scott Mitchell <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Stable-dep-of: 936206e3f6ff ("netfilter: nfnetlink_queue: make hash table per queue")
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nft_set_pipapo_avx2: don't return non-matching entry on expiry [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Wed Mar 25 14:10:55 2026 +0100

    netfilter: nft_set_pipapo_avx2: don't return non-matching entry on expiry
    
    [ Upstream commit d3c0037ffe1273fa1961e779ff6906234d6cf53c ]
    
    New test case fails unexpectedly when avx2 matching functions are used.
    
    The test first loads a ranomly generated pipapo set
    with 'ipv4 . port' key, i.e.  nft -f foo.
    
    This works.  Then, it reloads the set after a flush:
    (echo flush set t s; cat foo) | nft -f -
    
    This is expected to work, because its the same set after all and it was
    already loaded once.
    
    But with avx2, this fails: nft reports a clashing element.
    
    The reported clash is of following form:
    
        We successfully re-inserted
          a . b
          c . d
    
    Then we try to insert a . d
    
    avx2 finds the already existing a . d, which (due to 'flush set') is marked
    as invalid in the new generation.  It skips the element and moves to next.
    
    Due to incorrect masking, the skip-step finds the next matching
    element *only considering the first field*,
    
    i.e. we return the already reinserted "a . b", even though the
    last field is different and the entry should not have been matched.
    
    No such error is reported for the generic c implementation (no avx2) or when
    the last field has to use the 'nft_pipapo_avx2_lookup_slow' fallback.
    
    Bisection points to
    7711f4bb4b36 ("netfilter: nft_set_pipapo: fix range overlap detection")
    but that fix merely uncovers this bug.
    
    Before this commit, the wrong element is returned, but erronously
    reported as a full, identical duplicate.
    
    The root-cause is too early return in the avx2 match functions.
    When we process the last field, we should continue to process data
    until the entire input size has been consumed to make sure no stale
    bits remain in the map.
    
    Link: https://lore.kernel.org/netfilter-devel/20260321152506.037f68c0@elisabeth/
    Signed-off-by: Florian Westphal <[email protected]>
    Reviewed-by: Stefano Brivio <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: xt_multiport: validate range encoding in checkentry [+ + +]
Author: Ren Wei <[email protected]>
Date:   Fri Apr 3 23:52:52 2026 +0800

    netfilter: xt_multiport: validate range encoding in checkentry
    
    [ Upstream commit ff64c5bfef12461df8450e0f50bb693b5269c720 ]
    
    ports_match_v1() treats any non-zero pflags entry as the start of a
    port range and unconditionally consumes the next ports[] element as
    the range end.
    
    The checkentry path currently validates protocol, flags and count, but
    it does not validate the range encoding itself. As a result, malformed
    rules can mark the last slot as a range start or place two range starts
    back to back, leaving ports_match_v1() to step past the last valid
    ports[] element while interpreting the rule.
    
    Reject malformed multiport v1 rules in checkentry by validating that
    each range start has a following element and that the following element
    is not itself marked as another range start.
    
    Fixes: a89ecb6a2ef7 ("[NETFILTER]: x_tables: unify IPv4/IPv6 multiport match")
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Co-developed-by: Yuan Tan <[email protected]>
    Signed-off-by: Yuan Tan <[email protected]>
    Suggested-by: Xin Liu <[email protected]>
    Tested-by: Yuhang Zheng <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
NFC: digital: Bounds check NFC-A cascade depth in SDD response handler [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Thu Apr 9 17:18:14 2026 +0200

    NFC: digital: Bounds check NFC-A cascade depth in SDD response handler
    
    commit 46ce8be2ced389bccd84bcc04a12cf2f4d0c22d1 upstream.
    
    The NFC-A anti-collision cascade in digital_in_recv_sdd_res() appends 3
    or 4 bytes to target->nfcid1 on each round, but the number of cascade
    rounds is controlled entirely by the peer device.  The peer sets the
    cascade tag in the SDD_RES (deciding 3 vs 4 bytes) and the
    cascade-incomplete bit in the SEL_RES (deciding whether another round
    follows).
    
    ISO 14443-3 limits NFC-A to three cascade levels and target->nfcid1 is
    sized accordingly (NFC_NFCID1_MAXSIZE = 10), but nothing in the driver
    actually enforces this.  This means a malicious peer can keep the
    cascade running, writing past the heap-allocated nfc_target with each
    round.
    
    Fix this by rejecting the response when the accumulated UID would exceed
    the buffer.
    
    Commit e329e71013c9 ("NFC: nci: Bounds check struct nfc_target arrays")
    fixed similar missing checks against the same field on the NCI path.
    
    Cc: Simon Horman <[email protected]>
    Cc: Kees Cook <[email protected]>
    Cc: Thierry Escande <[email protected]>
    Cc: Samuel Ortiz <[email protected]>
    Fixes: 2c66daecc409 ("NFC Digital: Add NFC-A technology support")
    Cc: stable <[email protected]>
    Assisted-by: gregkh_clanker_t1000
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Link: https://patch.msgid.link/2026040913-figure-seducing-bd3f@gregkh
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nfc: llcp: add missing return after LLCP_CLOSED checks [+ + +]
Author: Junxi Qian <[email protected]>
Date:   Wed Apr 8 16:10:06 2026 +0800

    nfc: llcp: add missing return after LLCP_CLOSED checks
    
    commit 2b5dd4632966c39da6ba74dbc8689b309065e82c upstream.
    
    In nfc_llcp_recv_hdlc() and nfc_llcp_recv_disc(), when the socket
    state is LLCP_CLOSED, the code correctly calls release_sock() and
    nfc_llcp_sock_put() but fails to return. Execution falls through to
    the remainder of the function, which calls release_sock() and
    nfc_llcp_sock_put() again. This results in a double release_sock()
    and a refcount underflow via double nfc_llcp_sock_put(), leading to
    a use-after-free.
    
    Add the missing return statements after the LLCP_CLOSED branches
    in both functions to prevent the fall-through.
    
    Fixes: d646960f7986 ("NFC: Initial LLCP support")
    Signed-off-by: Junxi Qian <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

nfc: s3fwrn5: allocate rx skb before consuming bytes [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Thu Apr 2 12:21:48 2026 +0800

    nfc: s3fwrn5: allocate rx skb before consuming bytes
    
    [ Upstream commit 5c14a19d5b1645cce1cb1252833d70b23635b632 ]
    
    s3fwrn82_uart_read() reports the number of accepted bytes to the serdev
    core. The current code consumes bytes into recv_skb and may already
    deliver a complete frame before allocating a fresh receive buffer.
    
    If that alloc_skb() fails, the callback returns 0 even though it has
    already consumed bytes, and it leaves recv_skb as NULL for the next
    receive callback. That breaks the receive_buf() accounting contract and
    can also lead to a NULL dereference on the next skb_put_u8().
    
    Allocate the receive skb lazily before consuming the next byte instead.
    If allocation fails, return the number of bytes already accepted.
    
    Fixes: 3f52c2cb7e3a ("nfc: s3fwrn5: Support a UART interface")
    Signed-off-by: Pengpeng Hou <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nilfs2: fix NULL i_assoc_inode dereference in nilfs_mdt_save_to_shadow_map [+ + +]
Author: Deepanshu Kartikey <[email protected]>
Date:   Tue Mar 31 09:47:21 2026 +0900

    nilfs2: fix NULL i_assoc_inode dereference in nilfs_mdt_save_to_shadow_map
    
    commit 4a4e0328edd9e9755843787d28f16dd4165f8b48 upstream.
    
    The DAT inode's btree node cache (i_assoc_inode) is initialized lazily
    during btree operations. However, nilfs_mdt_save_to_shadow_map()
    assumes i_assoc_inode is already initialized when copying dirty pages
    to the shadow map during GC.
    
    If NILFS_IOCTL_CLEAN_SEGMENTS is called immediately after mount before
    any btree operation has occurred on the DAT inode, i_assoc_inode is
    NULL leading to a general protection fault.
    
    Fix this by calling nilfs_attach_btree_node_cache() on the DAT inode
    in nilfs_dat_read() at mount time, ensuring i_assoc_inode is always
    initialized before any GC operation can use it.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=4b4093b1f24ad789bf37
    Tested-by: [email protected]
    Fixes: e897be17a441 ("nilfs2: fix lockdep warnings in page operations for btree nodes")
    Signed-off-by: Deepanshu Kartikey <[email protected]>
    Signed-off-by: Ryusuke Konishi <[email protected]>
    Cc: [email protected]
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ocfs2: add inline inode consistency check to ocfs2_validate_inode_block() [+ + +]
Author: Dmitry Antipov <[email protected]>
Date:   Mon Apr 13 11:25:40 2026 -0400

    ocfs2: add inline inode consistency check to ocfs2_validate_inode_block()
    
    [ Upstream commit a2b1c419ff72ec62ff5831684e30cd1d4f0b09ee ]
    
    In 'ocfs2_validate_inode_block()', add an extra check whether an inode
    with inline data (i.e.  self-contained) has no clusters, thus preventing
    an invalid inode from being passed to 'ocfs2_evict_inode()' and below.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Dmitry Antipov <[email protected]>
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=c16daba279a1161acfb0
    Reviewed-by: Joseph Qi <[email protected]>
    Cc: Joseph Qi <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: Heming Zhao <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Stable-dep-of: 7bc5da4842be ("ocfs2: fix out-of-bounds write in ocfs2_write_end_inline")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ocfs2: fix out-of-bounds write in ocfs2_write_end_inline [+ + +]
Author: Joseph Qi <[email protected]>
Date:   Mon Apr 13 11:25:42 2026 -0400

    ocfs2: fix out-of-bounds write in ocfs2_write_end_inline
    
    [ Upstream commit 7bc5da4842bed3252d26e742213741a4d0ac1b14 ]
    
    KASAN reports a use-after-free write of 4086 bytes in
    ocfs2_write_end_inline, called from ocfs2_write_end_nolock during a
    copy_file_range splice fallback on a corrupted ocfs2 filesystem mounted on
    a loop device.  The actual bug is an out-of-bounds write past the inode
    block buffer, not a true use-after-free.  The write overflows into an
    adjacent freed page, which KASAN reports as UAF.
    
    The root cause is that ocfs2_try_to_write_inline_data trusts the on-disk
    id_count field to determine whether a write fits in inline data.  On a
    corrupted filesystem, id_count can exceed the physical maximum inline data
    capacity, causing writes to overflow the inode block buffer.
    
    Call trace (crash path):
    
       vfs_copy_file_range (fs/read_write.c:1634)
         do_splice_direct
           splice_direct_to_actor
             iter_file_splice_write
               ocfs2_file_write_iter
                 generic_perform_write
                   ocfs2_write_end
                     ocfs2_write_end_nolock (fs/ocfs2/aops.c:1949)
                       ocfs2_write_end_inline (fs/ocfs2/aops.c:1915)
                         memcpy_from_folio     <-- KASAN: write OOB
    
    So add id_count upper bound check in ocfs2_validate_inode_block() to
    alongside the existing i_size check to fix it.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Joseph Qi <[email protected]>
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=62c1793956716ea8b28a
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: Heming Zhao <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ocfs2: fix possible deadlock between unlink and dio_end_io_write [+ + +]
Author: Joseph Qi <[email protected]>
Date:   Fri Mar 6 11:22:11 2026 +0800

    ocfs2: fix possible deadlock between unlink and dio_end_io_write
    
    commit b02da26a992db0c0e2559acbda0fc48d4a2fd337 upstream.
    
    ocfs2_unlink takes orphan dir inode_lock first and then ip_alloc_sem,
    while in ocfs2_dio_end_io_write, it acquires these locks in reverse order.
    This creates an ABBA lock ordering violation on lock classes
    ocfs2_sysfile_lock_key[ORPHAN_DIR_SYSTEM_INODE] and
    ocfs2_file_ip_alloc_sem_key.
    
    Lock Chain #0 (orphan dir inode_lock -> ip_alloc_sem):
    ocfs2_unlink
      ocfs2_prepare_orphan_dir
        ocfs2_lookup_lock_orphan_dir
          inode_lock(orphan_dir_inode) <- lock A
        __ocfs2_prepare_orphan_dir
          ocfs2_prepare_dir_for_insert
            ocfs2_extend_dir
              ocfs2_expand_inline_dir
                down_write(&oi->ip_alloc_sem) <- Lock B
    
    Lock Chain #1 (ip_alloc_sem -> orphan dir inode_lock):
    ocfs2_dio_end_io_write
      down_write(&oi->ip_alloc_sem) <- Lock B
      ocfs2_del_inode_from_orphan()
        inode_lock(orphan_dir_inode) <- Lock A
    
    Deadlock Scenario:
      CPU0 (unlink)                     CPU1 (dio_end_io_write)
      ------                            ------
      inode_lock(orphan_dir_inode)
                                        down_write(ip_alloc_sem)
      down_write(ip_alloc_sem)
                                        inode_lock(orphan_dir_inode)
    
    Since ip_alloc_sem is to protect allocation changes, which is unrelated
    with operations in ocfs2_del_inode_from_orphan.  So move
    ocfs2_del_inode_from_orphan out of ip_alloc_sem to fix the deadlock.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=67b90111784a3eac8c04
    Fixes: a86a72a4a4e0 ("ocfs2: take ip_alloc_sem in ocfs2_dio_get_block & ocfs2_dio_end_io_write")
    Signed-off-by: Joseph Qi <[email protected]>
    Reviewed-by: Heming Zhao <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Joseph Qi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ocfs2: fix use-after-free in ocfs2_fault() when VM_FAULT_RETRY [+ + +]
Author: Tejas Bharambe <[email protected]>
Date:   Fri Apr 10 01:38:16 2026 -0700

    ocfs2: fix use-after-free in ocfs2_fault() when VM_FAULT_RETRY
    
    commit 7de554cabf160e331e4442e2a9ad874ca9875921 upstream.
    
    filemap_fault() may drop the mmap_lock before returning VM_FAULT_RETRY,
    as documented in mm/filemap.c:
    
      "If our return value has VM_FAULT_RETRY set, it's because the mmap_lock
      may be dropped before doing I/O or by lock_folio_maybe_drop_mmap()."
    
    When this happens, a concurrent munmap() can call remove_vma() and free
    the vm_area_struct via RCU. The saved 'vma' pointer in ocfs2_fault() then
    becomes a dangling pointer, and the subsequent trace_ocfs2_fault() call
    dereferences it -- a use-after-free.
    
    Fix this by saving ip_blkno as a plain integer before calling
    filemap_fault(), and removing vma from the trace event. Since
    ip_blkno is copied by value before the lock can be dropped, it
    remains valid regardless of what happens to the vma or inode
    afterward.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 614a9e849ca6 ("ocfs2: Remove FILE_IO from masklog.")
    Signed-off-by: Tejas Bharambe <[email protected]>
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=a49010a0e8fcdeea075f
    Suggested-by: Joseph Qi <[email protected]>
    Reviewed-by: Joseph Qi <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: Heming Zhao <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ocfs2: handle invalid dinode in ocfs2_group_extend [+ + +]
Author: ZhengYuan Huang <[email protected]>
Date:   Wed Apr 1 17:23:03 2026 +0800

    ocfs2: handle invalid dinode in ocfs2_group_extend
    
    commit 4a1c0ddc6e7bcf2e9db0eeaab9340dcfe97f448f upstream.
    
    [BUG]
    kernel BUG at fs/ocfs2/resize.c:308!
    Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTI
    RIP: 0010:ocfs2_group_extend+0x10aa/0x1ae0 fs/ocfs2/resize.c:308
    Code: 8b8520ff ffff83f8 860f8580 030000e8 5cc3c1fe
    Call Trace:
     ...
     ocfs2_ioctl+0x175/0x6e0 fs/ocfs2/ioctl.c:869
     vfs_ioctl fs/ioctl.c:51 [inline]
     __do_sys_ioctl fs/ioctl.c:597 [inline]
     __se_sys_ioctl fs/ioctl.c:583 [inline]
     __x64_sys_ioctl+0x197/0x1e0 fs/ioctl.c:583
     x64_sys_call+0x1144/0x26a0 arch/x86/include/generated/asm/syscalls_64.h:17
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0x93/0xf80 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
     ...
    
    [CAUSE]
    ocfs2_group_extend() assumes that the global bitmap inode block
    returned from ocfs2_inode_lock() has already been validated and
    BUG_ONs when the signature is not a dinode. That assumption is too
    strong for crafted filesystems because the JBD2-managed buffer path
    can bypass structural validation and return an invalid dinode to the
    resize ioctl.
    
    [FIX]
    Validate the dinode explicitly in ocfs2_group_extend(). If the global
    bitmap buffer does not contain a valid dinode, report filesystem
    corruption with ocfs2_error() and fail the resize operation instead of
    crashing the kernel.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 10995aa2451a ("ocfs2: Morph the haphazard OCFS2_IS_VALID_DINODE() checks.")
    Signed-off-by: ZhengYuan Huang <[email protected]>
    Reviewed-by: Joseph Qi <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: Heming Zhao <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ocfs2: validate inline data i_size during inode read [+ + +]
Author: Deepanshu Kartikey <[email protected]>
Date:   Mon Apr 13 11:25:41 2026 -0400

    ocfs2: validate inline data i_size during inode read
    
    [ Upstream commit 1524af3685b35feac76662cc551cbc37bd14775f ]
    
    When reading an inode from disk, ocfs2_validate_inode_block() performs
    various sanity checks but does not validate the size of inline data.  If
    the filesystem is corrupted, an inode's i_size can exceed the actual
    inline data capacity (id_count).
    
    This causes ocfs2_dir_foreach_blk_id() to iterate beyond the inline data
    buffer, triggering a use-after-free when accessing directory entries from
    freed memory.
    
    In the syzbot report:
      - i_size was 1099511627576 bytes (~1TB)
      - Actual inline data capacity (id_count) is typically <256 bytes
      - A garbage rec_len (54648) caused ctx->pos to jump out of bounds
      - This triggered a UAF in ocfs2_check_dir_entry()
    
    Fix by adding a validation check in ocfs2_validate_inode_block() to ensure
    inodes with inline data have i_size <= id_count.  This catches the
    corruption early during inode read and prevents all downstream code from
    operating on invalid data.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Deepanshu Kartikey <[email protected]>
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=c897823f699449cc3eb4
    Tested-by: [email protected]
    Link: https://lore.kernel.org/all/[email protected]/T/ [v1]
    Link: https://lore.kernel.org/all/[email protected]/T/ [v2]
    Reviewed-by: Joseph Qi <[email protected]>
    Cc: Mark Fasheh <[email protected]>
    Cc: Joel Becker <[email protected]>
    Cc: Junxiao Bi <[email protected]>
    Cc: Changwei Ge <[email protected]>
    Cc: Jun Piao <[email protected]>
    Cc: Heming Zhao <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Stable-dep-of: 7bc5da4842be ("ocfs2: fix out-of-bounds write in ocfs2_write_end_inline")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
PCI: endpoint: pci-epf-vntb: Stop cmd_handler work in epf_ntb_epc_cleanup [+ + +]
Author: Koichiro Den <[email protected]>
Date:   Thu Feb 26 17:41:40 2026 +0900

    PCI: endpoint: pci-epf-vntb: Stop cmd_handler work in epf_ntb_epc_cleanup
    
    commit d799984233a50abd2667a7d17a9a710a3f10ebe2 upstream.
    
    Disable the delayed work before clearing BAR mappings and doorbells to
    avoid running the handler after resources have been torn down.
    
      Unable to handle kernel paging request at virtual address ffff800083f46004
      [...]
      Internal error: Oops: 0000000096000007 [#1]  SMP
      [...]
      Call trace:
       epf_ntb_cmd_handler+0x54/0x200 [pci_epf_vntb] (P)
       process_one_work+0x154/0x3b0
       worker_thread+0x2c8/0x400
       kthread+0x148/0x210
       ret_from_fork+0x10/0x20
    
    Fixes: e35f56bb0330 ("PCI: endpoint: Support NTB transfer between RC and EP")
    Signed-off-by: Koichiro Den <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: Fix placement of pci_save_state() in pci_bus_add_device() [+ + +]
Author: Lukas Wunner <[email protected]>
Date:   Mon Apr 20 07:11:07 2026 +0200

    PCI: Fix placement of pci_save_state() in pci_bus_add_device()
    
    Commit 58130e7ce6cb ("PCI/ERR: Ensure error recoverability at all
    times") sought to backport upstream commit a2f1e22390ac, but misplaced
    the call to pci_save_state() in pci_bus_add_device():
    
    It put the call at the top of the function even though the upstream
    commit deliberately put it in the middle to capture config space changes
    caused by pci_fixup_final().
    
    Fix the placement.
    
    Signed-off-by: Lukas Wunner <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: hv: Set default NUMA node to 0 for devices without affinity info [+ + +]
Author: Long Li <[email protected]>
Date:   Mon Mar 16 14:07:42 2026 -0700

    PCI: hv: Set default NUMA node to 0 for devices without affinity info
    
    [ Upstream commit 7b3b1e5a87b2f5e35c52b5386d7c327be869454f ]
    
    When hv_pci_assign_numa_node() processes a device that does not have
    HV_PCI_DEVICE_FLAG_NUMA_AFFINITY set or has an out-of-range
    virtual_numa_node, the device NUMA node is left unset. On x86_64,
    the uninitialized default happens to be 0, but on ARM64 it is
    NUMA_NO_NODE (-1).
    
    Tests show that when no NUMA information is available from the Hyper-V
    host, devices perform best when assigned to node 0. With NUMA_NO_NODE
    the kernel may spread work across NUMA nodes, which degrades
    performance on Hyper-V, particularly for high-throughput devices like
    MANA.
    
    Always set the device NUMA node to 0 before the conditional NUMA
    affinity check, so that devices get a performant default when the host
    provides no NUMA information, and behavior is consistent on both
    x86_64 and ARM64.
    
    Fixes: 999dd956d838 ("PCI: hv: Add support for protocol 1.3 and support PCI_BUS_RELATIONS2")
    Signed-off-by: Long Li <[email protected]>
    Reviewed-by: Michael Kelley <[email protected]>
    Signed-off-by: Wei Liu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

PCI: Revert "Enable ACS after configuring IOMMU for OF platforms" [+ + +]
Author: John Hancock <[email protected]>
Date:   Fri Mar 20 13:23:35 2026 -0400

    PCI: Revert "Enable ACS after configuring IOMMU for OF platforms"
    
    This reverts 7a126c1b6cfa2c4b5a7013164451ecddd210110d which is
    commit c41e2fb67e26b04d919257875fa954aa5f6e392e upstream.
    
    Commit 7a126c1b6cfa ("PCI: Enable ACS after configuring IOMMU for OF
    platforms") introduced a regression affecting AMD IOMMU group isolation
    on x86 systems, making PCIe passthrough non-functional.
    
    While the commit addresses a legitimate ordering issue on OF/Device Tree
    platforms, the fix modifies pci_dma_configure(), which executes on all
    platforms regardless of firmware interface. On AMD systems with IOMMU,
    moving pci_enable_acs() from pci_acs_init() to pci_dma_configure() alters
    the point at which ACS is evaluated relative to IOMMU group assignment.
    The result is that devices which previously occupied individual, exclusive
    IOMMU groups are merged into a single group containing both passthrough
    and non-passthrough members, violating IOMMU isolation requirements.
    
    The commit author notes that pci_enable_acs() is now called twice per
    device and that this is "presumably not an issue." On AMD IOMMU hardware
    this assumption does not hold -- the change in call ordering has
    observable and breaking consequences for group topology.
    
    It is worth noting that this is a stable/LTS series (6.12.y), where
    changes to fundamental PCI initialization ordering carry significant
    risk for production and specialized workloads that depend on stable
    IOMMU behavior across kernel updates. A regression of this nature --
    silently breaking PCIe passthrough without any configuration change on
    the part of the user -- is particularly disruptive in a series that
    users reasonably expect to be conservative.
    
    This revert restores pci_enable_acs() to pci_acs_init() and marks it
    static again, fully restoring correct IOMMU group topology on affected
    hardware.
    
    Regression introduced in: 6.12.75
    Tested on: 6.12.77 with this revert applied
    
    Hardware:
      CPU:   AMD Ryzen Threadripper 2990WX (family 23h, Zen+)
      IOMMU: AMD-Vi
    
    Bisect:
      6.12.74: GOOD -- IOMMU groups correct, passthrough functional
      6.12.75: BAD  -- IOMMU groups collapsed, passthrough broken
      6.12.76: BAD  -- still broken
      6.12.77: BAD  -- still broken
    
    Fixes: 7a126c1b6cfa ("PCI: Enable ACS after configuring IOMMU for OF platforms")
    Signed-off-by: John Hancock <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
perf/x86/intel/uncore: Skip discovery table for offline dies [+ + +]
Author: Zide Chen <[email protected]>
Date:   Fri Mar 13 10:40:48 2026 -0700

    perf/x86/intel/uncore: Skip discovery table for offline dies
    
    [ Upstream commit 7b568e9eba2fad89a696f22f0413d44cf4a1f892 ]
    
    This warning can be triggered if NUMA is disabled and the system
    boots with fewer CPUs than the number of CPUs in die 0.
    
    WARNING: CPU: 9 PID: 7257 at uncore.c:1157 uncore_pci_pmu_register+0x136/0x160 [intel_uncore]
    
    Currently, the discovery table continues to be parsed even if all CPUs
    in the associated die are offline.  This can lead to an array overflow
    at "pmu->boxes[die] = box" in uncore_pci_pmu_register(), which may
    trigger the warning above or cause other issues.
    
    Fixes: edae1f06c2cd ("perf/x86/intel/uncore: Parse uncore discovery tables")
    Reported-by: Steve Wahl <[email protected]>
    Signed-off-by: Zide Chen <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Reviewed-by: Dapeng Mi <[email protected]>
    Tested-by: Steve Wahl <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
pinctrl: intel: Fix the revision for new features (1kOhm PD, HW debouncer) [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Wed Mar 11 18:14:04 2026 +0100

    pinctrl: intel: Fix the revision for new features (1kOhm PD, HW debouncer)
    
    [ Upstream commit a4337a24d13e9e3b98a113e71d6b80dc5ed5f8c4 ]
    
    The 1kOhm pull down and hardware debouncer are features of the revision 0.92
    of the Chassis specification. Fix that in the code accordingly.
    
    Signed-off-by: Andy Shevchenko <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
platform/x86/amd: pmc: Add Thinkpad L14 Gen3 to quirk_s2idle_bug [+ + +]
Author: Mario Limonciello <[email protected]>
Date:   Tue Mar 24 16:16:41 2026 -0500

    platform/x86/amd: pmc: Add Thinkpad L14 Gen3 to quirk_s2idle_bug
    
    [ Upstream commit 1a9452c428a6b76f0b797bae21daa454fccef1a2 ]
    
    This platform is a similar vintage of platforms that had a BIOS bug
    leading to a 10s delay at resume from s0i3.
    
    Add a quirk for it.
    
    Reported-by: Imrane <[email protected]>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=221273
    Tested-by: Imrane <[email protected]>
    Signed-off-by: Mario Limonciello <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
platform/x86: asus-nb-wmi: add DMI quirk for ASUS ROG Flow Z13-KJP GZ302EAC [+ + +]
Author: Matthew Schwartz <[email protected]>
Date:   Thu Mar 12 14:22:46 2026 -0700

    platform/x86: asus-nb-wmi: add DMI quirk for ASUS ROG Flow Z13-KJP GZ302EAC
    
    [ Upstream commit 0198d2743207d67f995cd6df89e267e1b9f5e1f1 ]
    
    The ASUS ROG Flow Z13-KJP GZ302EAC model uses sys_vendor name ASUS
    rather than ASUSTeK COMPUTER INC., but it needs the same folio quirk as
    the other ROG Flow Z13. To keep things simple, just match on sys_vendor
    ASUS since it covers both.
    
    Signed-off-by: Matthew Schwartz <[email protected]>
    Reviewed-by: Mario Limonciello (AMD) <[email protected]>
    Reviewed-by: Denis Benato <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/irdma: Fix double free related to rereg_user_mr [+ + +]
Author: Jacob Moroni <[email protected]>
Date:   Fri Feb 27 15:27:43 2026 +0000

    RDMA/irdma: Fix double free related to rereg_user_mr
    
    [ Upstream commit 29a3edd7004bb635d299fb9bc6f0ea4ef13ed5a2 ]
    
    If IB_MR_REREG_TRANS is set during rereg_user_mr, the
    umem will be released and a new one will be allocated
    in irdma_rereg_mr_trans. If any step of irdma_rereg_mr_trans
    fails after the new umem is allocated, it releases the umem,
    but does not set iwmr->region to NULL. The problem is that
    this failure is propagated to the user, who will then call
    ibv_dereg_mr (as they should). Then, the dereg_mr path will
    see a non-NULL umem and attempt to call ib_umem_release again.
    
    Fix this by setting iwmr->region to NULL after ib_umem_release.
    
    Fixed: 5ac388db27c4 ("RDMA/irdma: Add support to re-register a memory region")
    Signed-off-by: Jacob Moroni <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
 
Revert "drm/xe/mmio: Avoid double-adjust in 64-bit reads" [+ + +]
Author: Sasha Levin <[email protected]>
Date:   Sun Apr 19 12:01:46 2026 -0400

    Revert "drm/xe/mmio: Avoid double-adjust in 64-bit reads"
    
    This reverts commit 8f6848b2f6eadd903d29572ba0a684eda1e2f4ef.
    
    Signed-off-by: Sasha Levin <[email protected]>

 
Revert "drm/xe: Switch MMIO interface to take xe_mmio instead of xe_gt" [+ + +]
Author: Sasha Levin <[email protected]>
Date:   Sun Apr 19 12:01:47 2026 -0400

    Revert "drm/xe: Switch MMIO interface to take xe_mmio instead of xe_gt"
    
    This reverts commit 26a40327c25c005c1653d66e7b1d8de0fbee15a4.
    
    Signed-off-by: Sasha Levin <[email protected]>

 
rxrpc: Fix key quota calculation for multitoken keys [+ + +]
Author: David Howells <[email protected]>
Date:   Mon Apr 13 18:18:59 2026 -0400

    rxrpc: Fix key quota calculation for multitoken keys
    
    [ Upstream commit bdbfead6d38979475df0c2f4bad2b19394fe9bdc ]
    
    In the rxrpc key preparsing, every token extracted sets the proposed quota
    value, but for multitoken keys, this will overwrite the previous proposed
    quota, losing it.
    
    Fix this by adding to the proposed quota instead.
    
    Fixes: 8a7a3eb4ddbe ("KEYS: RxRPC: Use key preparsing")
    Closes: https://sashiko.dev/#/patchset/20260319150150.4189381-1-dhowells%40redhat.com
    Signed-off-by: David Howells <[email protected]>
    cc: Marc Dionne <[email protected]>
    cc: Jeffrey Altman <[email protected]>
    cc: Simon Horman <[email protected]>
    cc: [email protected]
    cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ dropped hunk for rxrpc_preparse_xdr_yfs_rxgk() ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sched/deadline: Use revised wakeup rule for dl_server [+ + +]
Author: Peter Zijlstra <[email protected]>
Date:   Sat Apr 4 12:22:44 2026 +0200

    sched/deadline: Use revised wakeup rule for dl_server
    
    [ Upstream commit 14a857056466be9d3d907a94e92a704ac1be149b ]
    
    John noted that commit 115135422562 ("sched/deadline: Fix 'stuck' dl_server")
    unfixed the issue from commit a3a70caf7906 ("sched/deadline: Fix dl_server
    behaviour").
    
    The issue in commit 115135422562 was for wakeups of the server after the
    deadline; in which case you *have* to start a new period. The case for
    a3a70caf7906 is wakeups before the deadline.
    
    Now, because the server is effectively running a least-laxity policy, it means
    that any wakeup during the runnable phase means dl_entity_overflow() will be
    true. This means we need to adjust the runtime to allow it to still run until
    the existing deadline expires.
    
    Use the revised wakeup rule for dl_defer entities.
    
    Fixes: 115135422562 ("sched/deadline: Fix 'stuck' dl_server")
    Reported-by: John Stultz <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Acked-by: Juri Lelli <[email protected]>
    Tested-by: John Stultz <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
scripts: generate_rust_analyzer.py: avoid FD leak [+ + +]
Author: Tamir Duberstein <[email protected]>
Date:   Tue Jan 27 11:35:43 2026 -0500

    scripts: generate_rust_analyzer.py: avoid FD leak
    
    commit 9b4744d8eda2824041064a5639ccbb079850914d upstream.
    
    Use `pathlib.Path.read_text()` to avoid leaking file descriptors.
    
    Fixes: 8c4555ccc55c ("scripts: add `generate_rust_analyzer.py`")
    Cc: [email protected]
    Reviewed-by: Daniel Almeida <[email protected]>
    Reviewed-by: Fiona Behrens <[email protected]>
    Reviewed-by: Trevor Gross <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Tamir Duberstein <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
selftests: net: bridge_vlan_mcast: wait for h1 before querier check [+ + +]
Author: Daniel Golle <[email protected]>
Date:   Sun Apr 5 22:29:19 2026 +0100

    selftests: net: bridge_vlan_mcast: wait for h1 before querier check
    
    [ Upstream commit efaa71faf212324ecbf6d5339e9717fe53254f58 ]
    
    The querier-interval test adds h1 (currently a slave of the VRF created
    by simple_if_init) to a temporary bridge br1 acting as an outside IGMP
    querier. The kernel VRF driver (drivers/net/vrf.c) calls cycle_netdev()
    on every slave add and remove, toggling the interface admin-down then up.
    Phylink takes the PHY down during the admin-down half of that cycle.
    Since h1 and swp1 are cable-connected, swp1 also loses its link may need
    several seconds to re-negotiate.
    
    Use setup_wait_dev $h1 0 which waits for h1 to return to UP state, so the
    test can rely on the link being back up at this point.
    
    Fixes: 4d8610ee8bd77 ("selftests: net: bridge: add vlan mcast_querier_interval tests")
    Signed-off-by: Daniel Golle <[email protected]>
    Reviewed-by: Alexander Sverdlin <[email protected]>
    Link: https://patch.msgid.link/c830f130860fd2efae08bfb9e5b25fd028e58ce5.1775424423.git.daniel@makrotopia.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
smb: client: fix off-by-8 bounds check in check_wsl_eas() [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Mon Apr 6 15:49:37 2026 +0200

    smb: client: fix off-by-8 bounds check in check_wsl_eas()
    
    commit 3d8b9d06bd3ac4c6846f5498800b0f5f8062e53b upstream.
    
    The bounds check uses (u8 *)ea + nlen + 1 + vlen as the end of the EA
    name and value, but ea_data sits at offset sizeof(struct
    smb2_file_full_ea_info) = 8 from ea, not at offset 0.  The strncmp()
    later reads ea->ea_data[0..nlen-1] and the value bytes follow at
    ea_data[nlen+1..nlen+vlen], so the actual end is ea->ea_data + nlen + 1
    + vlen.  Isn't pointer math fun?
    
    The earlier check (u8 *)ea > end - sizeof(*ea) only guarantees the
    8-byte header is in bounds, but since the last EA is placed within 8
    bytes of the end of the response, the name and value bytes are read past
    the end of iov.
    
    Fix this mess all up by using ea->ea_data as the base for the bounds
    check.
    
    An "untrusted" server can use this to leak up to 8 bytes of kernel heap
    into the EA name comparison and influence which WSL xattr the data is
    interpreted as.
    
    Cc: Ronnie Sahlberg <[email protected]>
    Cc: Shyam Prasad N <[email protected]>
    Cc: Tom Talpey <[email protected]>
    Cc: Bharath SM <[email protected]>
    Cc: [email protected]
    Cc: [email protected]
    Cc: stable <[email protected]>
    Assisted-by: gregkh_clanker_t1000
    Reviewed-by: Paulo Alcantara (Red Hat) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
soc: aspeed: socinfo: Mask table entries for accurate SoC ID matching [+ + +]
Author: Potin Lai <[email protected]>
Date:   Thu Jan 22 16:37:56 2026 +0800

    soc: aspeed: socinfo: Mask table entries for accurate SoC ID matching
    
    [ Upstream commit 7ec1bd3d9be671d04325b9e06149b8813f6a4836 ]
    
    The siliconid_to_name() function currently masks the input silicon ID
    with 0xff00ffff, but compares it against unmasked table entries. This
    causes matching to fail if the table entries contain non-zero values in
    the bits covered by the mask (bits 16-23).
    
    Update the logic to apply the 0xff00ffff mask to the table entries
    during comparison. This ensures that only the relevant model and
    revision bits are considered, providing a consistent match across
    different manufacturing batches.
    
    [arj: Add Fixes: tag, fix 'soninfo' typo, clarify function reference]
    
    Fixes: e0218dca5787 ("soc: aspeed: Add soc info driver")
    Signed-off-by: Potin Lai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Andrew Jeffery <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

soc: qcom: pd-mapper: Fix element length in servreg_loc_pfr_req_ei [+ + +]
Author: Mukesh Ojha <[email protected]>
Date:   Thu Jan 29 20:53:20 2026 +0530

    soc: qcom: pd-mapper: Fix element length in servreg_loc_pfr_req_ei
    
    [ Upstream commit 641f6fda143b879da1515f821ee475073678cf2a ]
    
    It looks element length declared in servreg_loc_pfr_req_ei for reason
    not matching servreg_loc_pfr_req's reason field due which we could
    observe decoding error on PD crash.
    
      qmi_decode_string_elem: String len 81 >= Max Len 65
    
    Fix this by matching with servreg_loc_pfr_req's reason field.
    
    Fixes: 1ebcde047c54 ("soc: qcom: add pd-mapper implementation")
    Signed-off-by: Mukesh Ojha <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Tested-by: Nikita Travkin <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
staging: rtl8723bs: initialize le_tmp64 in rtw_BIP_verify() [+ + +]
Author: Lin YuChen <[email protected]>
Date:   Sat Mar 21 01:25:02 2026 +0800

    staging: rtl8723bs: initialize le_tmp64 in rtw_BIP_verify()
    
    commit 8c964b82a4e97ec7f25e17b803ee196009b38a57 upstream.
    
    Initialize le_tmp64 to zero in rtw_BIP_verify() to prevent using
    uninitialized data.
    
    Smatch warns that only 6 bytes are copied to this 8-byte (u64)
    variable, leaving the last two bytes uninitialized:
    
    drivers/staging/rtl8723bs/core/rtw_security.c:1308 rtw_BIP_verify()
    warn: not copying enough bytes for '&le_tmp64' (8 vs 6 bytes)
    
    Initializing the variable at the start of the function fixes this
    warning and ensures predictable behavior.
    
    Fixes: 554c0a3abf21 ("staging: Add rtl8723bs sdio wifi driver")
    Cc: stable <[email protected]>
    Reported-by: Dan Carpenter <[email protected]>
    Closes: https://lore.kernel.org/linux-staging/[email protected]/
    Signed-off-by: Lin YuChen <[email protected]>
    Reviewed-by: Dan Carpenter <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

staging: sm750fb: fix division by zero in ps_to_hz() [+ + +]
Author: Junrui Luo <[email protected]>
Date:   Mon Mar 23 15:31:56 2026 +0800

    staging: sm750fb: fix division by zero in ps_to_hz()
    
    commit 75a1621e4f91310673c9acbcbb25c2a7ff821cd3 upstream.
    
    ps_to_hz() is called from hw_sm750_crtc_set_mode() without validating
    that pixclock is non-zero. A zero pixclock passed via FBIOPUT_VSCREENINFO
    causes a division by zero.
    
    Fix by rejecting zero pixclock in lynxfb_ops_check_var(), consistent
    with other framebuffer drivers.
    
    Fixes: 81dee67e215b ("staging: sm750fb: add sm750 to staging")
    Reported-by: Yuhao Jiang <[email protected]>
    Cc: [email protected]
    Signed-off-by: Junrui Luo <[email protected]>
    Link: https://patch.msgid.link/SYBPR01MB7881AFBFCE28CCF528B35D0CAF4BA@SYBPR01MB7881.ausprd01.prod.outlook.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
thermal: core: Address thermal zone removal races with resume [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Mon Apr 13 20:14:51 2026 -0300

    thermal: core: Address thermal zone removal races with resume
    
    [ Upstream commit 45b859b0728267a6199ee5002d62e6c6f3e8c89d ]
    
    Since thermal_zone_pm_complete() and thermal_zone_device_resume()
    re-initialize the poll_queue delayed work for the given thermal zone,
    the cancel_delayed_work_sync() in thermal_zone_device_unregister()
    may miss some already running work items and the thermal zone may
    be freed prematurely [1].
    
    There are two failing scenarios that both start with
    running thermal_pm_notify_complete() right before invoking
    thermal_zone_device_unregister() for one of the thermal zones.
    
    In the first scenario, there is a work item already running for
    the given thermal zone when thermal_pm_notify_complete() calls
    thermal_zone_pm_complete() for that thermal zone and it continues to
    run when thermal_zone_device_unregister() starts.  Since the poll_queue
    delayed work has been re-initialized by thermal_pm_notify_complete(), the
    running work item will be missed by the cancel_delayed_work_sync() in
    thermal_zone_device_unregister() and if it continues to run past the
    freeing of the thermal zone object, a use-after-free will occur.
    
    In the second scenario, thermal_zone_device_resume() queued up by
    thermal_pm_notify_complete() runs right after the thermal_zone_exit()
    called by thermal_zone_device_unregister() has returned.  The poll_queue
    delayed work is re-initialized by it before cancel_delayed_work_sync() is
    called by thermal_zone_device_unregister(), so it may continue to run
    after the freeing of the thermal zone object, which also leads to a
    use-after-free.
    
    Address the first failing scenario by ensuring that no thermal work
    items will be running when thermal_pm_notify_complete() is called.
    For this purpose, first move the cancel_delayed_work() call from
    thermal_zone_pm_complete() to thermal_zone_pm_prepare() to prevent
    new work from entering the workqueue going forward.  Next, switch
    over to using a dedicated workqueue for thermal events and update
    the code in thermal_pm_notify() to flush that workqueue after
    thermal_pm_notify_prepare() has returned which will take care of
    all leftover thermal work already on the workqueue (that leftover
    work would do nothing useful anyway because all of the thermal zones
    have been flagged as suspended).
    
    The second failing scenario is addressed by adding a tz->state check
    to thermal_zone_device_resume() to prevent it from re-initializing
    the poll_queue delayed work if the thermal zone is going away.
    
    Note that the above changes will also facilitate relocating the suspend
    and resume of thermal zones closer to the suspend and resume of devices,
    respectively.
    
    Fixes: 5a5efdaffda5 ("thermal: core: Resume thermal zones asynchronously")
    Reported-by: [email protected]
    Closes: https://syzbot.org/bug?extid=3b3852c6031d0f30dfaf
    Reported-by: Mauricio Faria de Oliveira <[email protected]>
    Closes: https://lore.kernel.org/linux-pm/20260324-thermal-core-uaf-init_delayed_work-v1-1-6611ae76a8a1@igalia.com/ [1]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Reviewed-by: Mauricio Faria de Oliveira <[email protected]>
    Tested-by: Mauricio Faria de Oliveira <[email protected]>
    Reviewed-by: Lukasz Luba <[email protected]>
    Cc: All applicable <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [ mfo: backport for 6.12.y:
      - No guard() or thermal_pm_notify_{prepare,complete}() for the lack of
        commit d1c8aa2a5c5c ("thermal: core: Manage thermal_list_lock using a mutex guard")
        - thermal_zone_device_resume() calls mutex_unlock() to return;
        - thermal_pm_notify() has thermal_pm_notify_prepare() in *_PREPARE;
      - No WQ_PERCPU flag in alloc_workqueue(), introduced in v6.17. ]
    Signed-off-by: Mauricio Faria de Oliveira <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

thermal: core: Mark thermal zones as exiting before unregistration [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Mon Apr 13 20:14:50 2026 -0300

    thermal: core: Mark thermal zones as exiting before unregistration
    
    [ Upstream commit 1dae3e70b473adc32f81ca1be926440f9b1de9dc ]
    
    In analogy with a previous change in the thermal zone registration code
    path, to ensure that __thermal_zone_device_update() will return early
    for thermal zones that are going away, introduce a thermal zone state
    flag representing the "exit" state and set it while deleting the thermal
    zone from thermal_tz_list.
    
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Lukasz Luba <[email protected]>
    [ mfo: this commit is a dependency/helper for backporting next commit. ]
    Signed-off-by: Mauricio Faria de Oliveira <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tools/power/turbostat: Fix microcode patch level output for AMD/Hygon [+ + +]
Author: Serhii Pievniev <[email protected]>
Date:   Wed Feb 25 18:16:03 2026 -0500

    tools/power/turbostat: Fix microcode patch level output for AMD/Hygon
    
    [ Upstream commit a444083286434ec1fd127c5da11a3091e6013008 ]
    
    turbostat always used the same logic to read the microcode patch level,
    which is correct for Intel but not for AMD/Hygon.
    While Intel stores the patch level in the upper 32 bits of MSR, AMD
    stores it in the lower 32 bits, which causes turbostat to report the
    microcode version as 0x0 on AMD/Hygon.
    
    Fix by shifting right by 32 for non-AMD/Hygon, preserving the existing
    behavior for Intel and unknown vendors.
    
    Fixes: 3e4048466c39 ("tools/power turbostat: Add --no-msr option")
    Signed-off-by: Serhii Pievniev <[email protected]>
    Signed-off-by: Len Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tracing/probe: reject non-closed empty immediate strings [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Thu Apr 2 00:03:15 2026 +0800

    tracing/probe: reject non-closed empty immediate strings
    
    [ Upstream commit 4346be6577aaa04586167402ae87bbdbe32484a4 ]
    
    parse_probe_arg() accepts quoted immediate strings and passes the body
    after the opening quote to __parse_imm_string(). That helper currently
    computes strlen(str) and immediately dereferences str[len - 1], which
    underflows when the body is empty and not closed with double-quotation.
    
    Reject empty non-closed immediate strings before checking for the closing quote.
    
    Link: https://lore.kernel.org/all/[email protected]/
    
    Fixes: a42e3c4de964 ("tracing/probe: Add immediate string parameter support")
    Signed-off-by: Pengpeng Hou <[email protected]>
    Reviewed-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
USB: cdc-acm: Add quirks for Yoga Book 9 14IAH10 INGENIC touchscreen [+ + +]
Author: Dave Carey <[email protected]>
Date:   Thu Apr 2 14:29:50 2026 -0400

    USB: cdc-acm: Add quirks for Yoga Book 9 14IAH10 INGENIC touchscreen
    
    commit f58752ebcb35e156c85cd1a82d6579c7af3b9023 upstream.
    
    The Lenovo Yoga Book 9 14IAH10 (83KJ) has a composite USB device
    (17EF:6161) that controls both touchscreens via a CDC ACM interface.
    Interface 0 is a standard CDC ACM control interface, but interface 1
    (the data interface) incorrectly declares vendor-specific class (0xFF)
    instead of USB_CLASS_CDC_DATA. cdc-acm rejects the device at probe with
    -EINVAL, leaving interface 0 unbound and EP 0x82 never polled.
    
    With no consumer polling EP 0x82, the firmware's watchdog fires every
    ~20 seconds and resets the USB bus, producing a continuous disconnect/
    reconnect loop that prevents the touchscreens from ever initialising.
    
    Add two new quirk flags:
    
    VENDOR_CLASS_DATA_IFACE: Bypasses the bInterfaceClass check in
    acm_probe() that would otherwise reject the vendor-class data
    interface with -EINVAL.
    
    ALWAYS_POLL_CTRL: Submits the notification URB at probe() rather than
    waiting for a TTY open. This keeps EP 0x82 polled at all times,
    permanently suppressing the firmware watchdog. The URB is resubmitted
    after port_shutdown() and on system resume. SET_CONTROL_LINE_STATE
    (DTR|RTS) is sent at probe and after port_shutdown() to complete
    firmware handshake.
    
    Note: the firmware performs exactly 4 USB connect/disconnect cycles
    (~19 s each) on every cold boot before stabilising. This is a fixed
    firmware property; touch is available ~75-80 s after power-on.
    
    Signed-off-by: Dave Carey <[email protected]>
    Cc: stable <[email protected]>
    Tested-by: Dave Carey <[email protected]>
    Acked-by: Oliver Neukum <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usb: gadget: f_hid: don't call cdev_init while cdev in use [+ + +]
Author: Michael Zimmermann <[email protected]>
Date:   Fri Mar 27 20:22:09 2026 +0100

    usb: gadget: f_hid: don't call cdev_init while cdev in use
    
    commit 81ebd43cc0d6d106ce7b6ccbf7b5e40ca7f5503d upstream.
    
    When calling unbind, then bind again, cdev_init reinitialized the cdev,
    even though there may still be references to it. That's the case when
    the /dev/hidg* device is still opened. This obviously unsafe behavior
    like oopes.
    
    This fixes this by using cdev_alloc to put the cdev on the heap. That
    way, we can simply allocate a new one in hidg_bind.
    
    Closes: https://lore.kernel.org/linux-usb/CAN9vWDKZn0Ts5JyV2_xcAmbnBEi0znMLg_USMFrShRryXrgWGQ@mail.gmail.com/T/#m2cb0dba3633b67b2a679c98499508267d1508881
    Cc: stable <[email protected]>
    Signed-off-by: Michael Zimmermann <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: f_ncm: validate minimum block_len in ncm_unwrap_ntb() [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Tue Apr 7 11:02:54 2026 +0200

    usb: gadget: f_ncm: validate minimum block_len in ncm_unwrap_ntb()
    
    commit 8f993d30b95dc9557a8a96ceca11abed674c8acb upstream.
    
    The block_len read from the host-supplied NTB header is checked against
    ntb_max but has no lower bound. When block_len is smaller than
    opts->ndp_size, the bounds check of:
            ndp_index > (block_len - opts->ndp_size)
    will underflow producing a huge unsigned value that ndp_index can never
    exceed, defeating the check entirely.
    
    The same underflow occurs in the datagram index checks against block_len
    - opts->dpe_size.  With those checks neutered, a malicious USB host can
    choose ndp_index and datagram offsets that point past the actual
    transfer, and the skb_put_data() copies adjacent kernel memory into the
    network skb.
    
    Fix this by rejecting block lengths that cannot hold at least the NTB
    header plus one NDP.  This will make block_len - opts->ndp_size and
    block_len - opts->dpe_size both well-defined.
    
    Commit 8d2b1a1ec9f5 ("CDC-NCM: avoid overflow in sanity checking") fixed
    a related class of issues on the host side of NCM.
    
    Fixes: 2b74b0a04d3e ("USB: gadget: f_ncm: add bounds checks to ncm_unwrap_ntb()")
    Cc: stable <[email protected]>
    Assisted-by: gregkh_clanker_t1000
    Link: https://patch.msgid.link/2026040753-baffle-handheld-624d@gregkh
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: f_phonet: fix skb frags[] overflow in pn_rx_complete() [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Tue Apr 7 10:55:05 2026 +0200

    usb: gadget: f_phonet: fix skb frags[] overflow in pn_rx_complete()
    
    commit c088d5dd2fffb4de1fb8e7f57751c8b82942180a upstream.
    
    A broken/bored/mean USB host can overflow the skb_shared_info->frags[]
    array on a Linux gadget exposing a Phonet function by sending an
    unbounded sequence of full-page OUT transfers.
    
    pn_rx_complete() finalizes the skb only when req->actual < req->length,
    where req->length is set to PAGE_SIZE by the gadget.  If the host always
    sends exactly PAGE_SIZE bytes per transfer, fp->rx.skb will never be
    reset and each completion will add another fragment via
    skb_add_rx_frag().  Once nr_frags exceeds MAX_SKB_FRAGS (default 17),
    subsequent frag stores overwrite memory adjacent to the shinfo on the
    heap.
    
    Drop the skb and account a length error when the frag limit is reached,
    matching the fix applied in t7xx by commit f0813bcd2d9d ("net: wwan:
    t7xx: fix potential skb->frags overflow in RX path").
    
    Cc: stable <[email protected]>
    Assisted-by: gregkh_clanker_t1000
    Link: https://patch.msgid.link/2026040705-fruit-unloved-0701@gregkh
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: renesas_usb3: validate endpoint index in standard request handlers [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Mon Apr 6 17:09:48 2026 +0200

    usb: gadget: renesas_usb3: validate endpoint index in standard request handlers
    
    commit f880aac8a57ebd92abfa685d45424b2998ac1059 upstream.
    
    The GET_STATUS and SET/CLEAR_FEATURE handlers extract the endpoint
    number from the host-supplied wIndex without any sort of validation.
    Fix this up by validating the number of endpoints actually match up with
    the number the device has before attempting to dereference a pointer
    based on this math.
    
    This is just like what was done in commit ee0d382feb44 ("usb: gadget:
    aspeed_udc: validate endpoint index for ast udc") for the aspeed driver.
    
    Fixes: 746bfe63bba3 ("usb: gadget: renesas_usb3: add support for Renesas USB3.0 peripheral controller")
    Cc: stable <[email protected]>
    Assisted-by: gregkh_clanker_t1000
    Link: https://patch.msgid.link/2026040647-sincerity-untidy-b104@gregkh
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: port: add delay after usb_hub_set_port_power() [+ + +]
Author: Xu Yang <[email protected]>
Date:   Mon Mar 16 17:50:42 2026 +0800

    usb: port: add delay after usb_hub_set_port_power()
    
    commit b84cc80610a8ce036deb987f056ce3196ead7f1e upstream.
    
    When a port is disabled, an attached device will be disconnected.  This
    causes a port-status-change event, which will race with hub autosuspend
    (if the disabled port was the only connected port on its hub), causing
    an immediate resume and a second autosuspend.  Both of these can be
    avoided by adding a short delay after the call to
    usb_hub_set_port_power().
    
    Below log shows what is happening:
    
    $ echo 1 > usb1-port1/disable
    [   37.958239] usb 1-1: USB disconnect, device number 2
    [   37.964101] usb 1-1: unregistering device
    [   37.970070] hub 1-0:1.0: hub_suspend
    [   37.971305] hub 1-0:1.0: state 7 ports 1 chg 0000 evt 0002
    [   37.974412] usb usb1: bus auto-suspend, wakeup 1
    [   37.988175] usb usb1: suspend raced with wakeup event         <---
    [   37.993947] usb usb1: usb auto-resume
    [   37.998401] hub 1-0:1.0: hub_resume
    [   38.105688] usb usb1-port1: status 0000, change 0000, 12 Mb/s
    [   38.112399] hub 1-0:1.0: state 7 ports 1 chg 0000 evt 0000
    [   38.118645] hub 1-0:1.0: hub_suspend
    [   38.122963] usb usb1: bus auto-suspend, wakeup 1
    [   38.200368] usb usb1: usb wakeup-resume
    [   38.204982] usb usb1: usb auto-resume
    [   38.209376] hub 1-0:1.0: hub_resume
    [   38.213676] usb usb1-port1: status 0101 change 0001
    [   38.321552] hub 1-0:1.0: state 7 ports 1 chg 0002 evt 0000
    [   38.327978] usb usb1-port1: status 0101, change 0000, 12 Mb/s
    [   38.457429] usb 1-1: new high-speed USB device number 3 using ci_hdrc
    
    Then, port change bit will be fixed to the final state and
    usb_clear_port_feature() can correctly clear it after this period. This
    will also avoid usb runtime suspend routine to run because
    usb_autopm_put_interface() not run yet.
    
    Fixes: f061f43d7418 ("usb: hub: port: add sysfs entry to switch port power")
    Cc: [email protected]
    Signed-off-by: Xu Yang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
USB: serial: option: add Telit Cinterion FN990A MBIM composition [+ + +]
Author: Fabio Porcedda <[email protected]>
Date:   Thu Apr 2 11:57:27 2026 +0200

    USB: serial: option: add Telit Cinterion FN990A MBIM composition
    
    commit f8cc59ecc22841be5deb07b549c0c6a2657cd5f9 upstream.
    
    Add the following Telit Cinterion FN990A MBIM composition:
    
    0x1074: MBIM + tty (AT/NMEA) + tty (AT) + tty (AT) + tty (diag) +
            DPL (Data Packet Logging) + adb
    
    T:  Bus=01 Lev=01 Prnt=04 Port=06 Cnt=01 Dev#=  7 Spd=480  MxCh= 0
    D:  Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=1074 Rev=05.04
    S:  Manufacturer=Telit Wireless Solutions
    S:  Product=FN990
    S:  SerialNumber=70628d0c
    C:  #Ifs= 8 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=81(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=0f(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 6 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=8f(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 7 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Cc: [email protected]
    Signed-off-by: Fabio Porcedda <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usb: storage: Expand range of matched versions for VL817 quirks entry [+ + +]
Author: Daniel Brát <[email protected]>
Date:   Thu Apr 2 19:24:33 2026 +0200

    usb: storage: Expand range of matched versions for VL817 quirks entry
    
    commit 609865ab3d5d803556f628e221ecd3d06aed9f30 upstream.
    
    Expands range of matched bcdDevice values for the VL817 quirk entry.
    This is based on experience with Axagon EE35-GTR rev1 3.5" HDD
    enclosure, which reports its bcdDevice as 0x0843, but presumably other
    vendors using this IC in their products may set it to any other value.
    
    Signed-off-by: Daniel Brát <[email protected]>
    Cc: stable <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usbip: validate number_of_packets in usbip_pack_ret_submit() [+ + +]
Author: Nathan Rebello <[email protected]>
Date:   Thu Apr 2 04:52:59 2026 -0400

    usbip: validate number_of_packets in usbip_pack_ret_submit()
    
    commit 2ab833a16a825373aad2ba7d54b572b277e95b71 upstream.
    
    When a USB/IP client receives a RET_SUBMIT response,
    usbip_pack_ret_submit() unconditionally overwrites
    urb->number_of_packets from the network PDU. This value is
    subsequently used as the loop bound in usbip_recv_iso() and
    usbip_pad_iso() to iterate over urb->iso_frame_desc[], a flexible
    array whose size was fixed at URB allocation time based on the
    *original* number_of_packets from the CMD_SUBMIT.
    
    A malicious USB/IP server can set number_of_packets in the response
    to a value larger than what was originally submitted, causing a heap
    out-of-bounds write when usbip_recv_iso() writes to
    urb->iso_frame_desc[i] beyond the allocated region.
    
    KASAN confirmed this with kernel 7.0.0-rc5:
    
      BUG: KASAN: slab-out-of-bounds in usbip_recv_iso+0x46a/0x640
      Write of size 4 at addr ffff888106351d40 by task vhci_rx/69
    
      The buggy address is located 0 bytes to the right of
       allocated 320-byte region [ffff888106351c00, ffff888106351d40)
    
    The server side (stub_rx.c) and gadget side (vudc_rx.c) already
    validate number_of_packets in the CMD_SUBMIT path since commits
    c6688ef9f297 ("usbip: fix stub_rx: harden CMD_SUBMIT path to handle
    malicious input") and b78d830f0049 ("usbip: fix vudc_rx: harden
    CMD_SUBMIT path to handle malicious input"). The server side validates
    against USBIP_MAX_ISO_PACKETS because no URB exists yet at that point.
    On the client side we have the original URB, so we can use the tighter
    bound: the response must not exceed the original number_of_packets.
    
    This mirrors the existing validation of actual_length against
    transfer_buffer_length in usbip_recv_xbuff(), which checks the
    response value against the original allocation size.
    
    Kelvin Mbogo's series ("usb: usbip: fix integer overflow in
    usbip_recv_iso()", v2) hardens the receive-side functions themselves;
    this patch complements that work by catching the bad value at its
    source -- in usbip_pack_ret_submit() before the overwrite -- and
    using the tighter per-URB allocation bound rather than the global
    USBIP_MAX_ISO_PACKETS limit.
    
    Fix this by checking rpdu->number_of_packets against
    urb->number_of_packets in usbip_pack_ret_submit() before the
    overwrite. On violation, clamp to zero so that usbip_recv_iso() and
    usbip_pad_iso() safely return early.
    
    Fixes: 1325f85fa49f ("staging: usbip: bugfix add number of packets for isochronous frames")
    Cc: stable <[email protected]>
    Acked-by: Shuah Khan <[email protected]>
    Signed-off-by: Nathan Rebello <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
wifi: brcmfmac: validate bsscfg indices in IF events [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Mon Mar 23 15:45:51 2026 +0800

    wifi: brcmfmac: validate bsscfg indices in IF events
    
    [ Upstream commit 304950a467d83678bd0b0f46331882e2ac23b12d ]
    
    brcmf_fweh_handle_if_event() validates the firmware-provided interface
    index before it touches drvr->iflist[], but it still uses the raw
    bsscfgidx field as an array index without a matching range check.
    
    Reject IF events whose bsscfg index does not fit in drvr->iflist[]
    before indexing the interface array.
    
    Signed-off-by: Pengpeng Hou <[email protected]>
    Acked-by: Arend van Spriel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [add missing wifi prefix]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: rtw88: fix device leak on probe failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Mar 6 09:51:44 2026 +0100

    wifi: rtw88: fix device leak on probe failure
    
    commit bbb15e71156cd9f5e1869eee7207a06ea8e96c39 upstream.
    
    Driver core holds a reference to the USB interface and its parent USB
    device while the interface is bound to a driver and there is no need to
    take additional references unless the structures are needed after
    disconnect.
    
    This driver takes a reference to the USB device during probe but does
    not to release it on all probe errors (e.g. when descriptor parsing
    fails).
    
    Drop the redundant device reference to fix the leak, reduce cargo
    culting, make it easier to spot drivers where an extra reference is
    needed, and reduce the risk of further memory leaks.
    
    Fixes: a82dfd33d123 ("wifi: rtw88: Add common USB chip support")
    Reported-by: Greg Kroah-Hartman <[email protected]>
    Link: https://lore.kernel.org/netdev/2026022319-turbofan-darkened-206d@gregkh/
    Cc: [email protected]      # 6.2
    Cc: Sascha Hauer <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Ping-Ke Shih <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

wifi: wl1251: validate packet IDs before indexing tx_frames [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Mon Mar 23 16:08:45 2026 +0800

    wifi: wl1251: validate packet IDs before indexing tx_frames
    
    [ Upstream commit 0fd56fad9c56356e7fa7a7c52e7ecbf807a44eb0 ]
    
    wl1251_tx_packet_cb() uses the firmware completion ID directly to index
    the fixed 16-entry wl->tx_frames[] array. The ID is a raw u8 from the
    completion block, and the callback does not currently verify that it
    fits the array before dereferencing it.
    
    Reject completion IDs that fall outside wl->tx_frames[] and keep the
    existing NULL check in the same guard. This keeps the fix local to the
    trust boundary and avoids touching the rest of the completion flow.
    
    Signed-off-by: Pengpeng Hou <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
x86-64/arm64/powerpc: clean up and rename __copy_from_user_flushcache [+ + +]
Author: Linus Torvalds <[email protected]>
Date:   Mon Mar 30 14:52:45 2026 -0700

    x86-64/arm64/powerpc: clean up and rename __copy_from_user_flushcache
    
    commit 809b997a5ce945ab470f70c187048fe4f5df20bf upstream.
    
    This finishes the work on these odd functions that were only implemented
    by a handful of architectures.
    
    The 'flushcache' function was only used from the iterator code, and
    let's make it do the same thing that the nontemporal version does:
    remove the two underscores and add the user address checking.
    
    Yes, yes, the user address checking is also done at iovec import time,
    but we have long since walked away from the old double-underscore thing
    where we try to avoid address checking overhead at access time, and
    these functions shouldn't be so special and old-fashioned.
    
    The arm64 version already did the address check, in fact, so there it's
    just a matter of renaming it.  For powerpc and x86-64 we now do the
    proper user access boilerplate.
    
    Signed-off-by: Linus Torvalds <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86-64: rename misleadingly named '__copy_user_nocache()' function [+ + +]
Author: Linus Torvalds <[email protected]>
Date:   Mon Mar 30 10:39:09 2026 -0700

    x86-64: rename misleadingly named '__copy_user_nocache()' function
    
    commit d187a86de793f84766ea40b9ade7ac60aabbb4fe upstream.
    
    This function was a masterclass in bad naming, for various historical
    reasons.
    
    It claimed to be a non-cached user copy.  It is literally _neither_ of
    those things.  It's a specialty memory copy routine that uses
    non-temporal stores for the destination (but not the source), and that
    does exception handling for both source and destination accesses.
    
    Also note that while it works for unaligned targets, any unaligned parts
    (whether at beginning or end) will not use non-temporal stores, since
    only words and quadwords can be non-temporal on x86.
    
    The exception handling means that it _can_ be used for user space
    accesses, but not on its own - it needs all the normal "start user space
    access" logic around it.
    
    But typically the user space access would be the source, not the
    non-temporal destination.  That was the original intention of this,
    where the destination was some fragile persistent memory target that
    needed non-temporal stores in order to catch machine check exceptions
    synchronously and deal with them gracefully.
    
    Thus that non-descriptive name: one use case was to copy from user space
    into a non-cached kernel buffer.  However, the existing users are a mix
    of that intended use-case, and a couple of random drivers that just did
    this as a performance tweak.
    
    Some of those random drivers then actively misused the user copying
    version (with STAC/CLAC and all) to do kernel copies without ever even
    caring about the exception handling, _just_ for the non-temporal
    destination.
    
    Rename it as a first small step to actually make it halfway sane, and
    change the prototype to be more normal: it doesn't take a user pointer
    unless the caller has done the proper conversion, and the argument size
    is the full size_t (it still won't actually copy more than 4GB in one
    go, but there's also no reason to silently truncate the size argument in
    the caller).
    
    Finally, use this now sanely named function in the NTB code, which
    mis-used a user copy version (with STAC/CLAC and all) of this interface
    despite it not actually being a user copy at all.
    
    Signed-off-by: Linus Torvalds <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86: rename and clean up __copy_from_user_inatomic_nocache() [+ + +]
Author: Linus Torvalds <[email protected]>
Date:   Mon Mar 30 13:11:07 2026 -0700

    x86: rename and clean up __copy_from_user_inatomic_nocache()
    
    commit 5de7bcaadf160c1716b20a263cf8f5b06f658959 upstream.
    
    Similarly to the previous commit, this renames the somewhat confusingly
    named function.  But in this case, it was at least less confusing: the
    __copy_from_user_inatomic_nocache is indeed copying from user memory,
    and it is indeed ok to be used in an atomic context, so it will not warn
    about it.
    
    But the previous commit also removed the NTB mis-use of the
    __copy_from_user_inatomic_nocache() function, and as a result every
    call-site is now _actually_ doing a real user copy.  That means that we
    can now do the proper user pointer verification too.
    
    End result: add proper address checking, remove the double underscores,
    and change the "nocache" to "nontemporal" to more accurately describe
    what this x86-only function actually does.  It might be worth noting
    that only the target is non-temporal: the actual user accesses are
    normal memory accesses.
    
    Also worth noting is that non-x86 targets (and on older 32-bit x86 CPU's
    before XMM2 in the Pentium III) we end up just falling back on a regular
    user copy, so nothing can actually depend on the non-temporal semantics,
    but that has always been true.
    
    Signed-off-by: Linus Torvalds <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
xfrm: account XFRMA_IF_ID in aevent size calculation [+ + +]
Author: Keenan Dong <[email protected]>
Date:   Thu Mar 26 20:36:39 2026 +0800

    xfrm: account XFRMA_IF_ID in aevent size calculation
    
    [ Upstream commit 7081d46d32312f1a31f0e0e99c6835a394037599 ]
    
    xfrm_get_ae() allocates the reply skb with xfrm_aevent_msgsize(), then
    build_aevent() appends attributes including XFRMA_IF_ID when x->if_id is
    set.
    
    xfrm_aevent_msgsize() does not include space for XFRMA_IF_ID. For states
    with if_id, build_aevent() can fail with -EMSGSIZE and hit BUG_ON(err < 0)
    in xfrm_get_ae(), turning a malformed netlink interaction into a kernel
    panic.
    
    Account XFRMA_IF_ID in the size calculation unconditionally and replace
    the BUG_ON with normal error unwinding.
    
    Fixes: 7e6526404ade ("xfrm: Add a new lookup key to match xfrm interfaces.")
    Reported-by: Keenan Dong <[email protected]>
    Signed-off-by: Keenan Dong <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

xfrm: fix refcount leak in xfrm_migrate_policy_find [+ + +]
Author: Kotlyarov Mihail <[email protected]>
Date:   Sat Apr 4 12:05:20 2026 +0300

    xfrm: fix refcount leak in xfrm_migrate_policy_find
    
    [ Upstream commit 83317cce60a032c49480dcdabe146435bd689d03 ]
    
    syzkaller reported a memory leak in xfrm_policy_alloc:
    
      BUG: memory leak
      unreferenced object 0xffff888114d79000 (size 1024):
        comm "syz.1.17", pid 931
        ...
        xfrm_policy_alloc+0xb3/0x4b0 net/xfrm/xfrm_policy.c:432
    
    The root cause is a double call to xfrm_pol_hold_rcu() in
    xfrm_migrate_policy_find(). The lookup function already returns
    a policy with held reference, making the second call redundant.
    
    Remove the redundant xfrm_pol_hold_rcu() call to fix the refcount
    imbalance and prevent the memory leak.
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Fixes: 563d5ca93e88 ("xfrm: switch migrate to xfrm_policy_lookup_bytype")
    Signed-off-by: Kotlyarov Mihail <[email protected]>
    Reviewed-by: Florian Westphal <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

xfrm: Wait for RCU readers during policy netns exit [+ + +]
Author: Steffen Klassert <[email protected]>
Date:   Thu Apr 2 13:31:04 2026 +0200

    xfrm: Wait for RCU readers during policy netns exit
    
    [ Upstream commit 069daad4f2ae9c5c108131995529d5f02392c446 ]
    
    xfrm_policy_fini() frees the policy_bydst hash tables after flushing the
    policy work items and deleting all policies, but it does not wait for
    concurrent RCU readers to leave their read-side critical sections first.
    
    The policy_bydst tables are published via rcu_assign_pointer() and are
    looked up through rcu_dereference_check(), so netns teardown must also
    wait for an RCU grace period before freeing the table memory.
    
    Fix this by adding synchronize_rcu() before freeing the policy hash tables.
    
    Fixes: e1e551bc5630 ("xfrm: policy: prepare policy_bydst hash for rcu lookups")
    Signed-off-by: Steffen Klassert <[email protected]>
    Reviewed-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
xfrm_user: fix info leak in build_mapping() [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Mon Apr 6 17:33:03 2026 +0200

    xfrm_user: fix info leak in build_mapping()
    
    [ Upstream commit 1beb76b2053b68c491b78370794b8ff63c8f8c02 ]
    
    struct xfrm_usersa_id has a one-byte padding hole after the proto
    field, which ends up never getting set to zero before copying out to
    userspace.  Fix that up by zeroing out the whole structure before
    setting individual variables.
    
    Fixes: 3a2dfbe8acb1 ("xfrm: Notify changes in UDP encapsulation via netlink")
    Cc: Steffen Klassert <[email protected]>
    Cc: Herbert Xu <[email protected]>
    Cc: "David S. Miller" <[email protected]>
    Cc: Eric Dumazet <[email protected]>
    Cc: Jakub Kicinski <[email protected]>
    Cc: Paolo Abeni <[email protected]>
    Cc: Simon Horman <[email protected]>
    Assisted-by: gregkh_clanker_t1000
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
xsk: fix XDP_UMEM_SG_FLAG issues [+ + +]
Author: Maciej Fijalkowski <[email protected]>
Date:   Thu Apr 2 17:49:53 2026 +0200

    xsk: fix XDP_UMEM_SG_FLAG issues
    
    [ Upstream commit 93e84fe45b752d17a5a46b306ed78f0133bbc719 ]
    
    Currently xp_assign_dev_shared() is missing XDP_USE_SG being propagated
    to flags so set it in order to preserve mtu check that is supposed to be
    done only when no multi-buffer setup is in picture.
    
    Also, this flag has the same value as XDP_UMEM_TX_SW_CSUM so we could
    get unexpected SG setups for software Tx checksums. Since csum flag is
    UAPI, modify value of XDP_UMEM_SG_FLAG.
    
    Fixes: d609f3d228a8 ("xsk: add multi-buffer support for sockets sharing umem")
    Reviewed-by: Björn Töpel <[email protected]>
    Signed-off-by: Maciej Fijalkowski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

xsk: respect tailroom for ZC setups [+ + +]
Author: Maciej Fijalkowski <[email protected]>
Date:   Thu Apr 2 17:49:52 2026 +0200

    xsk: respect tailroom for ZC setups
    
    [ Upstream commit 1ee1605138fc94cc8f8f273321dd2471c64977f9 ]
    
    Multi-buffer XDP stores information about frags in skb_shared_info that
    sits at the tailroom of a packet. The storage space is reserved via
    xdp_data_hard_end():
    
            ((xdp)->data_hard_start + (xdp)->frame_sz -     \
             SKB_DATA_ALIGN(sizeof(struct skb_shared_info)))
    
    and then we refer to it via macro below:
    
    static inline struct skb_shared_info *
    xdp_get_shared_info_from_buff(const struct xdp_buff *xdp)
    {
            return (struct skb_shared_info *)xdp_data_hard_end(xdp);
    }
    
    Currently we do not respect this tailroom space in multi-buffer AF_XDP
    ZC scenario. To address this, introduce xsk_pool_get_tailroom() and use
    it within xsk_pool_get_rx_frame_size() which is used in ZC drivers to
    configure length of HW Rx buffer.
    
    Typically drivers on Rx Hw buffers side work on 128 byte alignment so
    let us align the value returned by xsk_pool_get_rx_frame_size() in order
    to avoid addressing this on driver's side. This addresses the fact that
    idpf uses mentioned function *before* pool->dev being set so we were at
    risk that after subtracting tailroom we would not provide 128-byte
    aligned value to HW.
    
    Since xsk_pool_get_rx_frame_size() is actively used in xsk_rcv_check()
    and __xsk_rcv(), add a variant of this routine that will not include 128
    byte alignment and therefore old behavior is preserved.
    
    Reviewed-by: Björn Töpel <[email protected]>
    Acked-by: Stanislav Fomichev <[email protected]>
    Fixes: 24ea50127ecf ("xsk: support mbuf on ZC RX")
    Signed-off-by: Maciej Fijalkowski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

xsk: tighten UMEM headroom validation to account for tailroom and min frame [+ + +]
Author: Maciej Fijalkowski <[email protected]>
Date:   Thu Apr 2 17:49:51 2026 +0200

    xsk: tighten UMEM headroom validation to account for tailroom and min frame
    
    [ Upstream commit a315e022a72d95ef5f1d4e58e903cb492b0ad931 ]
    
    The current headroom validation in xdp_umem_reg() could leave us with
    insufficient space dedicated to even receive minimum-sized ethernet
    frame. Furthermore if multi-buffer would come to play then
    skb_shared_info stored at the end of XSK frame would be corrupted.
    
    HW typically works with 128-aligned sizes so let us provide this value
    as bare minimum.
    
    Multi-buffer setting is known later in the configuration process so
    besides accounting for 128 bytes, let us also take care of tailroom space
    upfront.
    
    Reviewed-by: Björn Töpel <[email protected]>
    Acked-by: Stanislav Fomichev <[email protected]>
    Fixes: 99e3a236dd43 ("xsk: Add missing check on user supplied headroom size")
    Signed-off-by: Maciej Fijalkowski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

xsk: validate MTU against usable frame size on bind [+ + +]
Author: Maciej Fijalkowski <[email protected]>
Date:   Thu Apr 2 17:49:54 2026 +0200

    xsk: validate MTU against usable frame size on bind
    
    [ Upstream commit 36ee60b569ba0dfb6f961333b90d19ab5b323fa9 ]
    
    AF_XDP bind currently accepts zero-copy pool configurations without
    verifying that the device MTU fits into the usable frame space provided
    by the UMEM chunk.
    
    This becomes a problem since we started to respect tailroom which is
    subtracted from chunk_size (among with headroom). 2k chunk size might
    not provide enough space for standard 1500 MTU, so let us catch such
    settings at bind time. Furthermore, validate whether underlying HW will
    be able to satisfy configured MTU wrt XSK's frame size multiplied by
    supported Rx buffer chain length (that is exposed via
    net_device::xdp_zc_max_segs).
    
    Fixes: 24ea50127ecf ("xsk: support mbuf on ZC RX")
    Reviewed-by: Björn Töpel <[email protected]>
    Signed-off-by: Maciej Fijalkowski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>