Changelog in Linux kernel 6.6.141

 
6pack: propagage new tty types [+ + +]
Author: Jiri Slaby (SUSE) <[email protected]>
Date:   Thu Aug 8 12:35:47 2024 +0200

    6pack: propagage new tty types
    
    [ Upstream commit 1241b384efa53f4b7a95fe2b34d69359bb3ae1b5 ]
    
    In tty, u8 is now used for data, ssize_t for sizes (with possible
    negative error codes). Propagate these types to 6pack.
    
    Signed-off-by: Jiri Slaby (SUSE) <[email protected]>
    Cc: Greg Kroah-Hartman <[email protected]>
    Cc: Andreas Koensgen <[email protected]>
    Cc: David S. Miller <[email protected]>
    Cc: Eric Dumazet <[email protected]>
    Cc: Jakub Kicinski <[email protected]>
    Cc: Paolo Abeni <[email protected]>
    Cc: [email protected]
    Cc: [email protected]
    Reviewed-by: Jeremy Kerr <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: bf9a38803b26 ("net: hamradio: 6pack: fix uninit-value in sixpack_receive_buf")
    Signed-off-by: Sasha Levin <[email protected]>

 
ACPI: AGDI: fix missing newline in error message [+ + +]
Author: Haoyu Lu <[email protected]>
Date:   Tue Apr 7 11:31:15 2026 +0800

    ACPI: AGDI: fix missing newline in error message
    
    [ Upstream commit b178330b67abb7293b6de28b2a49d49c83962db5 ]
    
    Add the missing trailing newline to the dev_err() message
    printed when SDEI event registration fails.
    
    This keeps the error output as a properly terminated log line.
    
    Fixes: a2a591fb76e6 ("ACPI: AGDI: Add driver for Arm Generic Diagnostic Dump and Reset device")
    Reviewed-by: Ilkka Koskinen <[email protected]>
    Signed-off-by: Haoyu Lu <[email protected]>
    Reviewed-by: Hanjun Guo <[email protected]>
    Signed-off-by: Catalin Marinas <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ACPI: x86: cmos_rtc: Clean up address space handler driver [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Mon Feb 23 16:28:15 2026 +0100

    ACPI: x86: cmos_rtc: Clean up address space handler driver
    
    [ Upstream commit ba0b236736dde4059bdcb8e99beaa50d6e5b6e7e ]
    
    Make multiple changes that do not alter functionality to the CMOS RTC
    ACPI address space handler driver, including the following:
    
     - Drop the unused .detach() callback from cmos_rtc_handler.
    
     - Rename acpi_cmos_rtc_attach_handler() to acpi_cmos_rtc_attach().
    
     - Rearrange acpi_cmos_rtc_space_handler() to reduce the number of
       redundant checks and make white space follow the coding style.
    
     - Adjust an error message in acpi_install_cmos_rtc_space_handler()
       and make the white space follow the coding style.
    
     - Rearrange acpi_remove_cmos_rtc_space_handler() and adjust an error
       message in it.
    
    No intentional functional impact.
    
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Stable-dep-of: 6cee29ad9d7e ("ACPI: x86: cmos_rtc: Improve coordination with ACPI TAD driver")
    Signed-off-by: Sasha Levin <[email protected]>

ACPI: x86: cmos_rtc: Improve coordination with ACPI TAD driver [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Mon Feb 23 16:28:57 2026 +0100

    ACPI: x86: cmos_rtc: Improve coordination with ACPI TAD driver
    
    [ Upstream commit 6cee29ad9d7e400d39ae0b1a54447fedcb62eecd ]
    
    If a CMOS RTC (PNP0B00/PNP0B01/PNP0B02) device coexists with an ACPI
    TAD (timer and event alarm device, ACPI000E), the ACPI TAD driver will
    attempt to install the CMOS RTC address space hanlder that has been
    installed already and the TAD probing will fail.
    
    Avoid that by changing acpi_install_cmos_rtc_space_handler() to return
    zero and acpi_remove_cmos_rtc_space_handler() to do nothing if the CMOS
    RTC address space handler has been installed already.
    
    Fixes: 596ca52a56da ("ACPI: TAD: Install SystemCMOS address space handler for ACPI000E")
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
ALSA: core: Validate compress device numbers without dynamic minors [+ + +]
Author: Cássio Gabriel <[email protected]>
Date:   Wed Mar 25 02:24:04 2026 -0300

    ALSA: core: Validate compress device numbers without dynamic minors
    
    [ Upstream commit 796e119e9b14763be905ad0d023c71a14bc2e931 ]
    
    Without CONFIG_SND_DYNAMIC_MINORS, ALSA reserves only two fixed minors
    for compress devices on each card: comprD0 and comprD1.
    
    snd_find_free_minor() currently computes the compress minor as
    type + dev without validating dev first, so device numbers greater than
    1 spill into the HWDEP minor range instead of failing registration.
    
    ASoC passes rtd->id to snd_compress_new(), so this can happen on real
    non-dynamic-minor builds.
    
    Add a dedicated fixed-minor check for SNDRV_DEVICE_TYPE_COMPRESS in
    snd_find_free_minor() and reject out-of-range device numbers with
    -EINVAL before constructing the minor.
    
    Also remove the stale TODO in compress_offload.c that still claims
    multiple compress nodes are missing.
    
    Fixes: 3eafc959b32f ("ALSA: core: add support for compressed devices")
    Signed-off-by: Cássio Gabriel <[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/conexant: Fix missing error check for jack detection [+ + +]
Author: wangdicheng <[email protected]>
Date:   Tue Apr 28 16:04:50 2026 +0800

    ALSA: hda/conexant: Fix missing error check for jack detection
    
    [ Upstream commit b0e2333a231107adedd38c6fcfe1adc6162716fc ]
    
    In cx_probe(), the return value of snd_hda_jack_detect_enable_callback()
    is ignored. This function returns a pointer, and if it fails (e.g., due
    to memory allocation failure), it returns an error pointer which must
    be checked using IS_ERR().
    
    If the registration fails, the driver continues to probe, but the jack
    detection callback will not be registered. This can lead to a kernel
    crash later when the driver attempts to handle jack events or accesses
    the uninitialized structure.
    
    Check the return value using IS_ERR() and propagate the error via
    PTR_ERR() to the probe caller.
    
    Fixes: 7aeb25908648 ("ALSA: hda/conexant: Fix headset auto detect fail in cx8070 and SN6140")
    Signed-off-by: wangdicheng <[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/conexant: fix some typos [+ + +]
Author: Oldherl Oh <[email protected]>
Date:   Mon Sep 30 16:41:32 2024 +0800

    ALSA: hda/conexant: fix some typos
    
    [ Upstream commit 73253f2fd1d0a44708735c842e37163712e3f03b ]
    
    Fix some typos in patch_conexant.c
    
    Signed-off-by: Oldherl Oh <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Stable-dep-of: b0e2333a2311 ("ALSA: hda/conexant: Fix missing error check for jack detection")
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda/conexant: Renaming the codec with device ID 0x1f86 and 0x1f87 [+ + +]
Author: wangdicheng <[email protected]>
Date:   Mon Jun 16 15:43:31 2025 +0800

    ALSA: hda/conexant: Renaming the codec with device ID 0x1f86 and 0x1f87
    
    [ Upstream commit 7f4c540e0859e2025675d2c5c5c6ab88eaf817e2 ]
    
    Due to changes in the manufacturer's plan, all 0x14f11f86 will be
    named CX11880, and 0x14f11f87 will be named SN6140
    
    Signed-off-by: wangdicheng <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Stable-dep-of: b0e2333a2311 ("ALSA: hda/conexant: Fix missing error check for jack detection")
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda/realtek: fix code style (ERROR: else should follow close brace '}') [+ + +]
Author: Lei Huang <[email protected]>
Date:   Tue Mar 31 15:54:05 2026 +0800

    ALSA: hda/realtek: fix code style (ERROR: else should follow close brace '}')
    
    [ Upstream commit d1888bf848ade6a9e71c7ba516fd215aa1bd8d65 ]
    
    Fix checkpatch code style errors:
    
      ERROR: else should follow close brace '}'
      #2300: FILE: sound/hda/codecs/realtek/alc269.c:2300:
      +       }
      +       else
    
    Fixes: 31278997add6 ("ALSA: hda/realtek - Add headset quirk for Dell DT")
    Signed-off-by: Lei Huang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: sc6000: Keep the programmed board state in card-private data [+ + +]
Author: Cássio Gabriel <[email protected]>
Date:   Fri Apr 10 00:54:32 2026 -0300

    ALSA: sc6000: Keep the programmed board state in card-private data
    
    [ Upstream commit fb79bf127ac2577b4876132da6dba768018aad4c ]
    
    The driver may auto-select IRQ and DMA resources at probe time, but
    sc6000_init_board() still derives the SC-6000 soft configuration from
    the module parameter arrays.  When irq=auto or dma=auto is used, the
    codec is created with the selected resources while the board is
    programmed with the unresolved values.
    
    Store the mapped ports and generated SC-6000 board configuration in
    card-private data, build that configuration from the live probe
    results instead of the raw module parameters, and keep the probe-time
    board programming in a shared helper.
    
    This fixes the resource-programming mismatch and leaves the driver
    with a stable board-state block that can be reused by suspend/resume.
    
    Fixes: c282866101bf ("ALSA: sc6000: add support for SC-6600 and SC-7000")
    Signed-off-by: Cássio Gabriel <[email protected]>
    Signed-off-by: Takashi Iwai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: sc6000: Use standard print API [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Wed Aug 7 15:34:23 2024 +0200

    ALSA: sc6000: Use standard print API
    
    [ Upstream commit e7c475b92043c02c3e6cd0c20e308fbb6f03ebde ]
    
    Use the standard print API with dev_*() instead of the old house-baked
    one.  It gives better information and allows dynamically control of
    debug prints.
    
    Some functions are changed to receive a device pointer to be passed to
    dev_*() calls.
    
    Reviewed-by: Jaroslav Kysela <[email protected]>
    Signed-off-by: Takashi Iwai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Stable-dep-of: fb79bf127ac2 ("ALSA: sc6000: Keep the programmed board state in card-private data")
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: scarlett2: Add missing sentinel initializer field [+ + +]
Author: Panagiotis Petrakopoulos <[email protected]>
Date:   Mon Apr 6 01:25:48 2026 +0300

    ALSA: scarlett2: Add missing sentinel initializer field
    
    [ Upstream commit 2428cd6e8b6fa80c36db4652702ca0acd2ce3f08 ]
    
    A "-Wmissing-field-initializers" warning was emitted when compiling the
    module using the W=2 option. There is a sentinel initializer field
    missing in the end of scarlett2_devices[]. Tested using a
    Scarlett Solo 4th gen.
    
    Fixes: d98cc489029d ("ALSA: scarlett2: Move USB IDs out from device_info struct")
    Signed-off-by: Panagiotis Petrakopoulos <[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: Bound MIDI 2.0 endpoint descriptor scans [+ + +]
Author: Cássio Gabriel <[email protected]>
Date:   Thu May 7 00:40:52 2026 -0300

    ALSA: usb-audio: Bound MIDI 2.0 endpoint descriptor scans
    
    commit 918be519c7876329e1b6e2ea1c59f0b75e792dca upstream.
    
    The USB MIDI 2.0 endpoint parser has the same descriptor walking
    pattern as the legacy MIDI parser. It validates bLength against
    bNumGrpTrmBlock before reading baAssoGrpTrmBlkID[], but not against the
    remaining bytes in the endpoint-extra scan.
    
    A malformed device can therefore make later baAssoGrpTrmBlkID[] reads
    consume bytes past the walked descriptor.
    
    Reject zero-length and overlong descriptors while walking endpoint
    extras.
    
    Fixes: ff49d1df79ae ("ALSA: usb-audio: USB MIDI 2.0 UMP support")
    Cc: [email protected]
    Signed-off-by: Cássio Gabriel <[email protected]>
    Link: https://patch.msgid.link/20260507-usb-midi-endpoint-scan-bounds-v1-2-329d7348160e@gmail.com
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: usb-audio: Bound MIDI endpoint descriptor scans [+ + +]
Author: Cássio Gabriel <[email protected]>
Date:   Thu May 7 00:40:51 2026 -0300

    ALSA: usb-audio: Bound MIDI endpoint descriptor scans
    
    commit d6854daa67be623860f4e1873fd3d3c275aba4ed upstream.
    
    snd_usbmidi_get_ms_info() validates the internal MIDIStreaming endpoint
    descriptor size before using baAssocJackID[], but the descriptor walker can
    still return a class-specific endpoint descriptor whose bLength exceeds the
    remaining bytes in the endpoint-extra scan.
    
    That leaves later flexible-array reads bounded by bLength, but not by the
    remaining bytes in the endpoint-extra scan.
    
    Stop walking when bLength is zero or
    extends past the remaining endpoint-extra scan.
    
    Fixes: 5c6cd7021a05 ("ALSA: usb-audio: Fix case when USB MIDI interface has more than one extra endpoint descriptor")
    Cc: [email protected]
    Signed-off-by: Cássio Gabriel <[email protected]>
    Link: https://patch.msgid.link/20260507-usb-midi-endpoint-scan-bounds-v1-1-329d7348160e@gmail.com
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: usb-audio: Fix potential leak of pd at parsing UAC3 streams [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Mon Apr 27 17:15:04 2026 +0200

    ALSA: usb-audio: Fix potential leak of pd at parsing UAC3 streams
    
    [ Upstream commit c39f0bc03f84ba64c9144c95714df1dc36150f6d ]
    
    At parsing UAC3 streams, we allocate a PD object at each time, and
    either assign or free it.  But there is a case where the PD object may
    be leaked; namely, in __snd_usb_parse_audio_interface() loop, when an
    audioformat shares the same endpoint with others, it's put to a link
    and returns from snd_usb_add_audio_stream(), but the PD is forgotten
    afterwards.  Overall, the treatment of PD object in the parser code is
    a bit flaky, and we should be more careful about the object ownership.
    
    This patch tries to fix the above case and improve the code a bit.
    The pd object is now managed with the auto-cleanup in the loop, and
    the ownership is updated when the pd object gets assigned to the
    stream, which guarantees the release of the leftover object.
    
    Fixes: 7edf3b5e6a45 ("ALSA: usb-audio: AudioStreaming Power Domain parsing")
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
arm64/scs: Fix potential sign extension issue of advance_loc4 [+ + +]
Author: Wentao Guan <[email protected]>
Date:   Mon Apr 13 17:54:59 2026 +0800

    arm64/scs: Fix potential sign extension issue of advance_loc4
    
    [ Upstream commit 4023b7424ecd5d38cc75b650d6c1bf630ef8cb40 ]
    
    The expression (*opcode++ << 24) and exp * code_alignment_factor
    may overflow signed int and becomes negative.
    
    Fix this by casting each byte to u64 before shifting. Also fix
    the misaligned break statement while we are here.
    
    Example of the result can be seen here:
    Link: https://godbolt.org/z/zhY8d3595
    
    It maybe not a real problem, but could be a issue in future.
    
    Fixes: d499e9627d70 ("arm64/scs: Fix handling of advance_loc4")
    Signed-off-by: Wentao Guan <[email protected]>
    Signed-off-by: Catalin Marinas <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
arm64/xor: fix conflicting attributes for xor_block_template [+ + +]
Author: Christoph Hellwig <[email protected]>
Date:   Fri Mar 27 07:16:35 2026 +0100

    arm64/xor: fix conflicting attributes for xor_block_template
    
    [ Upstream commit 675a0dd596e712404557286d0a883b54ee28e4f4 ]
    
    Commit 2c54b423cf85 ("arm64/xor: use EOR3 instructions when available")
    changes the definition to __ro_after_init instead of const, but failed to
    update the external declaration in xor.h.  This was not found because
    xor-neon.c doesn't include <asm/xor.h>, and can't easily do that due to
    current architecture of the XOR code.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 2c54b423cf85 ("arm64/xor: use EOR3 instructions when available")
    Signed-off-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Eric Biggers <[email protected]>
    Tested-by: Eric Biggers <[email protected]>
    Cc: Albert Ou <[email protected]>
    Cc: Alexander Gordeev <[email protected]>
    Cc: Alexandre Ghiti <[email protected]>
    Cc: Andreas Larsson <[email protected]>
    Cc: Anton Ivanov <[email protected]>
    Cc: Ard Biesheuvel <[email protected]>
    Cc: Arnd Bergmann <[email protected]>
    Cc: "Borislav Petkov (AMD)" <[email protected]>
    Cc: Catalin Marinas <[email protected]>
    Cc: Chris Mason <[email protected]>
    Cc: Christian Borntraeger <[email protected]>
    Cc: Dan Williams <[email protected]>
    Cc: David S. Miller <[email protected]>
    Cc: David Sterba <[email protected]>
    Cc: Heiko Carstens <[email protected]>
    Cc: Herbert Xu <[email protected]>
    Cc: "H. Peter Anvin" <[email protected]>
    Cc: Huacai Chen <[email protected]>
    Cc: Ingo Molnar <[email protected]>
    Cc: Jason A. Donenfeld <[email protected]>
    Cc: Johannes Berg <[email protected]>
    Cc: Li Nan <[email protected]>
    Cc: Madhavan Srinivasan <[email protected]>
    Cc: Magnus Lindholm <[email protected]>
    Cc: Matt Turner <[email protected]>
    Cc: Michael Ellerman <[email protected]>
    Cc: Nicholas Piggin <[email protected]>
    Cc: Palmer Dabbelt <[email protected]>
    Cc: Richard Henderson <[email protected]>
    Cc: Richard Weinberger <[email protected]>
    Cc: Russell King <[email protected]>
    Cc: Song Liu <[email protected]>
    Cc: Sven Schnelle <[email protected]>
    Cc: Ted Ts'o <[email protected]>
    Cc: Vasily Gorbik <[email protected]>
    Cc: WANG Xuerui <[email protected]>
    Cc: Will Deacon <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
arm64: cpufeature: Make PMUVer and PerfMon unsigned [+ + +]
Author: James Clark <[email protected]>
Date:   Thu Mar 5 16:28:18 2026 +0000

    arm64: cpufeature: Make PMUVer and PerfMon unsigned
    
    [ Upstream commit d1dcc20bcc40efe1f1c71639376c91dafa489222 ]
    
    On the host, this change doesn't make a difference because the fields
    are defined as FTR_EXACT. However, KVM allows userspace to set these
    fields for a guest and overrides the type to be FTR_LOWER_SAFE. And
    while KVM used to do an unsigned comparison to validate that the new
    value is lower than what the hardware provides, since the linked commit
    it uses the generic sanitization framework which does a signed
    comparison.
    
    Fix it by defining these fields as unsigned. In theory, without this
    fix, userspace could set a higher PMU version than the hardware supports
    by providing any value with the top bit set.
    
    Fixes: c118cead07a7 ("KVM: arm64: Use generic sanitisation for ID_(AA64)DFR0_EL1")
    Signed-off-by: James Clark <[email protected]>
    Reviewed-by: Marc Zyngier <[email protected]>
    Reviewed-by: Colton Lewis <[email protected]>
    Signed-off-by: Will Deacon <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: imx8-apalis: Fix LEDs name collision [+ + +]
Author: Francesco Dolcini <[email protected]>
Date:   Mon Jan 19 11:34:09 2026 +0100

    arm64: dts: imx8-apalis: Fix LEDs name collision
    
    [ Upstream commit 92ab53b9bb2a72581c32073755077af916eb9aee ]
    
    Ixora boards have multiple instances of status leds, to avoid a name
    collision add the function-enumerator property.
    
    This fixes the following Linux kernel warnings:
    
      leds-gpio leds: Led green:status renamed to green:status_1 due to name collision
      leds-gpio leds: Led red:status renamed to red:status_1 due to name collision
    
    Fixes: c083131c9021 ("arm64: dts: freescale: add apalis imx8 aka quadmax carrier board support")
    Signed-off-by: Francesco Dolcini <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Reviewed-by: Daniel Baluta <[email protected]>
    Signed-off-by: Frank Li <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: imx8mm-emtop-som: Correct PAD settings for PMIC_nINT [+ + +]
Author: Peng Fan <[email protected]>
Date:   Sun Mar 29 21:00:11 2026 +0800

    arm64: dts: imx8mm-emtop-som: Correct PAD settings for PMIC_nINT
    
    [ Upstream commit 721dec3ee9ff5231d13a412ff87df63b966d137b ]
    
    With commit 5d0efaf47ee90 ("regulator: pca9450: Correct interrupt type"),
    there might be interrupt storm for this board. Need to set PAD PUE and PU
    together to make pull up work properly.
    
    While at here, also correct interrupt type as IRQ_TYPE_LEVEL_LOW.
    
    Fixes: cbd3ef64eb9d1 ("arm64: dts: Add support for Emtop SoM & Baseboard")
    Signed-off-by: Peng Fan <[email protected]>
    Signed-off-by: Frank Li <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: imx8mm-tqma8mqml: Correct PAD settings for PMIC_nINT [+ + +]
Author: Peng Fan <[email protected]>
Date:   Sun Mar 29 21:00:13 2026 +0800

    arm64: dts: imx8mm-tqma8mqml: Correct PAD settings for PMIC_nINT
    
    [ Upstream commit 42a9f5a16328ed78a88e0498556965b6c6ec515c ]
    
    With commit 5d0efaf47ee90 ("regulator: pca9450: Correct interrupt type"),
    there might be interrupt storm for this board. Need to set PAD PUE and PU
    together to make pull up work properly.
    
    Fixes: dfcd1b6f7620e ("arm64: dts: freescale: add initial device tree for TQMa8MQML with i.MX8MM")
    Signed-off-by: Peng Fan <[email protected]>
    Signed-off-by: Frank Li <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: imx8mn-tqma8mqnl: Correct PAD settings for PMIC_nINT [+ + +]
Author: Peng Fan <[email protected]>
Date:   Sun Mar 29 21:00:12 2026 +0800

    arm64: dts: imx8mn-tqma8mqnl: Correct PAD settings for PMIC_nINT
    
    [ Upstream commit 0fb37990774113afd943eaa91323679388584b6d ]
    
    With commit 5d0efaf47ee90 ("regulator: pca9450: Correct interrupt type"),
    there might be interrupt storm for this board. Need to set PAD PUE and PU
    together to make pull up work properly.
    
    Fixes: 3e56e354db6d3 ("arm64: dts: freescale: add initial device tree for TQMa8MQNL with i.MX8MN")
    Signed-off-by: Peng Fan <[email protected]>
    Signed-off-by: Frank Li <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: imx8mp-data-modul-edm-sbc: Correct PAD settings for PMIC_nINT [+ + +]
Author: Peng Fan <[email protected]>
Date:   Thu Mar 26 15:28:16 2026 +0800

    arm64: dts: imx8mp-data-modul-edm-sbc: Correct PAD settings for PMIC_nINT
    
    [ Upstream commit 8ff145577e93f312ff398cb950ee3bd44835f5be ]
    
    PMIC_nINT is low level triggered, but the current PAD settings is
    PE=0,PUE=0,FSEL_1_FAST_SLEW_RATE=1,SION=1. So PAD needs to be configured
    as PULL UP with PULL Enable, no need SION. Correct it.
    
    Fixes: 562d222f23f0f ("arm64: dts: imx8mp: Add support for Data Modul i.MX8M Plus eDM SBC")
    Signed-off-by: Peng Fan <[email protected]>
    Signed-off-by: Frank Li <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: imx8mp-debix-model-a: Correct PAD settings for PMIC_nINT [+ + +]
Author: Peng Fan <[email protected]>
Date:   Thu Mar 26 15:28:05 2026 +0800

    arm64: dts: imx8mp-debix-model-a: Correct PAD settings for PMIC_nINT
    
    [ Upstream commit 3b778178997aee24537b521a8cb60970bc1ce01c ]
    
    With commit 5d0efaf47ee90 ("regulator: pca9450: Correct interrupt type"),
    there is interrupt storm for i.MX8MP DEBIX Model A. Per schematic, there
    is no on board PULL-UP resistors for GPIO1_IO03, so need to set PAD
    PUE and PU together to make pull up work properly.
    
    Fixes: c86d350aae68e ("arm64: dts: Add device tree for the Debix Model A Board")
    Reported-by: Laurent Pinchart <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Reviewed-by: Laurent Pinchart <[email protected]>
    Tested-by: Laurent Pinchart <[email protected]>
    Signed-off-by: Peng Fan <[email protected]>
    Signed-off-by: Frank Li <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: imx8mp-debix-som-a: Correct PAD settings for PMIC_nINT [+ + +]
Author: Peng Fan <[email protected]>
Date:   Thu Mar 26 15:28:06 2026 +0800

    arm64: dts: imx8mp-debix-som-a: Correct PAD settings for PMIC_nINT
    
    [ Upstream commit 2ea7872048a179b0ea8dadc67771961df3f0fc4a ]
    
    With commit 5d0efaf47ee90 ("regulator: pca9450: Correct interrupt type"),
    there is interrupt storm for i.MX8MP DEBIX SOM A. Need to set PAD
    PUE and PU together to make pull up work properly.
    
    Fixes: 21baf0b47f81b ("arm64: dts: freescale: Add DEBIX SOM A and SOM A I/O Board support")
    Reported-by: Laurent Pinchart <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Reported-by: Kieran Bingham <[email protected]>
    Closes: https://lore.kernel.org/imx/[email protected]/T/#m9a07fdc75496369a7d76d52c5e34ed140dcabfe3
    Signed-off-by: Peng Fan <[email protected]>
    Reviewed-by: Kieran Bingham <[email protected]>
    Signed-off-by: Frank Li <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: imx8mp-dhcom-som: Correct PAD settings for PMIC_nINT [+ + +]
Author: Peng Fan <[email protected]>
Date:   Thu Mar 26 15:28:15 2026 +0800

    arm64: dts: imx8mp-dhcom-som: Correct PAD settings for PMIC_nINT
    
    [ Upstream commit f9ed5afc988da3e22543725e35be6addbb0497bc ]
    
    PMIC_nINT is low level triggered, but the current PAD settings is
    PE=0,PUE=0,FSEL_1_FAST_SLEW_RATE=1,SION=1. So PAD needs to be configured
    as PULL UP with PULL Enable, no need SION. Correct it.
    
    Fixes: 8d6712695bc8e ("arm64: dts: imx8mp: Add support for DH electronics i.MX8M Plus DHCOM and PDK2")
    Signed-off-by: Peng Fan <[email protected]>
    Signed-off-by: Frank Li <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: imx8mp-evk: Enable pull select bit for PCIe regulator GPIO (M.2 W_DISABLE1) [+ + +]
Author: Sherry Sun <[email protected]>
Date:   Thu Feb 5 15:34:53 2026 +0800

    arm64: dts: imx8mp-evk: Enable pull select bit for PCIe regulator GPIO (M.2 W_DISABLE1)
    
    [ Upstream commit d1e7eab6033f9885a02c4b4e8f09e34d8e9d21ab ]
    
    The current pin configuration for MX8MP_IOMUXC_SD1_DATA4__GPIO2_IO06
    sets the weak pull-up but does not enable the pull select field.
    Bit 8 in the IOMUX register must be set in order for the weak pull-up
    to actually take effect.
    
    Update the pinctrl setting from 0x40 to 0x140 to enable both the pull
    select and the weak pull-up, ensuring the line behaves as expected.
    
    Fixes: d50650500064 ("arm64: dts: imx8mp-evk: Add PCIe support")
    Signed-off-by: Sherry Sun <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Signed-off-by: Frank Li <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: imx8mp-icore-mx8mp: Correct PAD settings for PMIC_nINT [+ + +]
Author: Peng Fan <[email protected]>
Date:   Thu Mar 26 15:28:09 2026 +0800

    arm64: dts: imx8mp-icore-mx8mp: Correct PAD settings for PMIC_nINT
    
    [ Upstream commit ea8c90f5c7ceeb6657a8fe564aa7b190dce298a6 ]
    
    With commit 5d0efaf47ee90 ("regulator: pca9450: Correct interrupt type"),
    there might be interrupt storm for this board. Need to set PAD PUE and PU
    together to make pull up work properly.
    
    Fixes: eefe06b295087 ("arm64: dts: imx8mp: Add Engicam i.Core MX8M Plus SoM")
    Signed-off-by: Peng Fan <[email protected]>
    Signed-off-by: Frank Li <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: imx8qxp-mek: switch Type-C connector power-role to dual [+ + +]
Author: Xu Yang <[email protected]>
Date:   Tue Mar 24 19:04:59 2026 +0800

    arm64: dts: imx8qxp-mek: switch Type-C connector power-role to dual
    
    [ Upstream commit 825b8c7e1d2918d89eb378b761530d1e51dba82e ]
    
    When attach to PC Type-A port, the USB device controller does not function
    at all. Because it is configured as source-only and a Type-A port doesn't
    support PD capability, a data role swap is impossible.
    
    Actually, PTN5110THQ is configured for Source role only at POR, but after
    POR it can operate as a DRP (Dual-Role Power). By switching the power-role
    to dual, the port can operate as a sink and enter device mode when attach
    to Type-A port.
    
    Since the board design uses EN_SRC to control the 5V VBUS path and EN_SNK
    to control the 12V VBUS output, to avoid outputting a higher VBUS when in
    sink role, we set the operation current limit to 0mA so that SW will not
    control EN_SNK at all.
    
    Fixes: 2faf4ebcee2e5 ("arm64: dts: freescale: imx8qxp-mek: enable cadence usb3")
    Signed-off-by: Xu Yang <[email protected]>
    Signed-off-by: Frank Li <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: mediatek: mt6795: Fix gpio-ranges pin count [+ + +]
Author: Akari Tsuyukusa <[email protected]>
Date:   Thu Mar 12 13:15:28 2026 +0900

    arm64: dts: mediatek: mt6795: Fix gpio-ranges pin count
    
    [ Upstream commit c4c4823c8a5baa10b8100b01f49d7c3f4a871689 ]
    
    The gpio-ranges in the MT6795 pinctrl node were incorrectly defined,
    therefore, GPIO196 cannot be used.
    Correct the range count to match the driver.
    
    Fixes: b888886a4536 ("arm64: dts: mediatek: mt6795: Add pinctrl controller node")
    Signed-off-by: Akari Tsuyukusa <[email protected]>
    Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: mediatek: mt7986a: Fix gpio-ranges pin count [+ + +]
Author: Akari Tsuyukusa <[email protected]>
Date:   Thu Mar 12 13:15:30 2026 +0900

    arm64: dts: mediatek: mt7986a: Fix gpio-ranges pin count
    
    [ Upstream commit 820ed0c1a13c5fafb36232538d793f99a0986ef3 ]
    
    The gpio-ranges in the MT7986A pinctrl node were incorrectly defined,
    therefore, pin 100 cannot be used.
    Correct the range count to match the driver.
    
    Fixes: c3a064a32ed9 ("arm64: dts: mediatek: add pinctrl support for mt7986a")
    Signed-off-by: Akari Tsuyukusa <[email protected]>
    Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: meson-gxl-p230: fix ethernet PHY interrupt number [+ + +]
Author: Jun Yan <[email protected]>
Date:   Mon Mar 30 22:51:11 2026 +0800

    arm64: dts: meson-gxl-p230: fix ethernet PHY interrupt number
    
    [ Upstream commit 174a0ef3b33434f475c87e66f37980e39b73805a ]
    
    Correct the interrupt number assigned to the Realtek PHY in the p230
    
    following the same logic as commit 3106507e1004 ("ARM64: dts: meson-gxm:
    fix q200 interrupt number"),as reported in [PATCH 0/2] Ethernet PHY
    interrupt improvements [1].
    
    [1] https://lore.kernel.org/all/[email protected]/
    
    Fixes: b94d22d94ad2 ("ARM64: dts: meson-gx: add external PHY interrupt on some platforms")
    Signed-off-by: Jun Yan <[email protected]>
    Reviewed-by: Martin Blumenstingl <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Neil Armstrong <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: qcom: msm8953-xiaomi-daisy: fix backlight [+ + +]
Author: Barnabás Czémán <[email protected]>
Date:   Fri Jan 16 08:07:39 2026 +0100

    arm64: dts: qcom: msm8953-xiaomi-daisy: fix backlight
    
    [ Upstream commit 7131f6d909a6546329b71f2bacfdc60cb3e6020e ]
    
    The backlight on this device is connected via 3 strings. Currently,
    the DT claims only two are present, which results in visible stripes
    on the display (since every third backlight string remains unconfigured).
    
    Fix the number of strings to avoid that.
    
    Fixes: 38d779c26395 ("arm64: dts: qcom: msm8953: Add device tree for Xiaomi Mi A2 Lite")
    Signed-off-by: Barnabás Czémán <[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]>

arm64: dts: qcom: msm8953-xiaomi-vince: correct wled ovp value [+ + +]
Author: Barnabás Czémán <[email protected]>
Date:   Fri Jan 16 08:07:37 2026 +0100

    arm64: dts: qcom: msm8953-xiaomi-vince: correct wled ovp value
    
    [ Upstream commit 9e87f0eaadccc3fecdf3c3c0334e05694804b5f5 ]
    
    PMI8950 doesn't actually support setting an OVP threshold value of
    29.6 V. The closest allowed value is 29.5 V. Set that instead.
    
    Fixes: aa17e707e04a ("arm64: dts: qcom: msm8953: Add device tree for Xiaomi Redmi 5 Plus")
    Reviewed-by: Konrad Dybcio <[email protected]>
    Signed-off-by: Barnabás Czémán <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: qcom: sdm845-xiaomi-beryllium: Mark l1a regulator as powered during boot [+ + +]
Author: David Heidelberg <[email protected]>
Date:   Fri Mar 20 18:33:11 2026 +0100

    arm64: dts: qcom: sdm845-xiaomi-beryllium: Mark l1a regulator as powered during boot
    
    [ Upstream commit 3b0dd81eea6b7a239fce456ce4545af76f1a9715 ]
    
    The regulator must be on, since it provides the display subsystem and
    therefore the bootloader had turned it on before Linux booted.
    
    Fixes: 77809cf74a8c ("arm64: dts: qcom: Add support for Xiaomi Poco F1 (Beryllium)")
    Signed-off-by: David Heidelberg <[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]>

arm64: dts: qcom: sm7225-fairphone-fp4: Fix conflicting bias pinctrl [+ + +]
Author: Luca Weiss <[email protected]>
Date:   Thu Mar 19 09:55:00 2026 +0100

    arm64: dts: qcom: sm7225-fairphone-fp4: Fix conflicting bias pinctrl
    
    [ Upstream commit be7c1badb0b934cfe88427b1d4ec3eb9f52ba587 ]
    
    The pinctrl nodes from sm6350.dtsi already contain a bias-* property, so
    that needs to be deleted, otherwise the dtb will contain two conflicting
    bias-* properties.
    
    Reported-by: Conor Dooley <[email protected]>
    Closes: https://lore.kernel.org/r/20260310-maritime-silly-05e7b7e03aa6@spud/
    Fixes: c4ef464b24c5 ("arm64: dts: qcom: sm7225-fairphone-fp4: Add Bluetooth")
    Signed-off-by: Luca Weiss <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Reviewed-by: Conor Dooley <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: qcom: sm8250: Add missing CPU7 3.09GHz OPP [+ + +]
Author: Alexander Koskovich <[email protected]>
Date:   Sun Mar 8 04:26:37 2026 +0000

    arm64: dts: qcom: sm8250: Add missing CPU7 3.09GHz OPP
    
    [ Upstream commit b683730e27ba4f91986c4c92f5cb7297f1e01a6d ]
    
    This resolves the following error seen on the ASUS ROG Phone 3:
    
    cpu cpu7: Voltage update failed freq=3091200
    cpu cpu7: failed to update OPP for freq=3091200
    
    Fixes: 8e0e8016cb79 ("arm64: dts: qcom: sm8250: Add CPU opp tables")
    Signed-off-by: Alexander Koskovich <[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]>

arm64: dts: qcom: sm8450: Enable UHS-I SDR50 and SDR104 SD card modes [+ + +]
Author: Vladimir Zapolskiy <[email protected]>
Date:   Sat Mar 14 04:37:13 2026 +0200

    arm64: dts: qcom: sm8450: Enable UHS-I SDR50 and SDR104 SD card modes
    
    [ Upstream commit db0c5ef1abda6effdc5c85d6688fb6af2b351ae5 ]
    
    The reported problem of some non-working UHS-I speed modes on SM8450
    originates in commit 0a631a36f724 ("arm64: dts: qcom: Add device tree
    for Sony Xperia 1 IV"), and then it was spread to all SM8450 powered
    platforms by commit 9d561dc4e5cc ("arm64: dts: qcom: sm8450: disable
    SDHCI SDR104/SDR50 on all boards").
    
    The tests show that the rootcause of the problem was related to an
    overclocking of SD cards, and it's fixed later on by commit a27ac3806b0a
    ("clk: qcom: gcc-sm8450: Use floor ops for SDCC RCGs").
    
    Since then both SDR50 and SDR104 speed modes are working fine on SM8450,
    tested on SM8450-HDK:
    
    SDR50 speed mode:
    
        mmc0: new UHS-I speed SDR50 SDHC card at address 0001
        mmcblk0: mmc0:0001 00000 14.6 GiB
         mmcblk0: p1
    
        % dd if=/dev/mmcblk0p1 of=/dev/null bs=1M count=1024
        1024+0 records in
        1024+0 records out
        1073741824 bytes (1.1 GB, 1.0 GiB) copied, 24.6254 s, 43.6 MB/s
    
    SDR104 speed mode:
    
        mmc0: new UHS-I speed SDR104 SDHC card at address 59b4
        mmcblk0: mmc0:59b4 USDU1 28.3 GiB
         mmcblk0: p1
    
        % dd if=/dev/mmcblk0p1 of=/dev/null bs=1M count=1024
        1024+0 records in
        1024+0 records out
        1073741824 bytes (1.1 GB, 1.0 GiB) copied, 12.3266 s, 87.1 MB/s
    
    Remove the restrictions on SD card speed modes from the SM8450 platform
    dtsi file and enable UHS-I speed modes.
    
    Fixes: 9d561dc4e5cc ("arm64: dts: qcom: sm8450: disable SDHCI SDR104/SDR50 on all boards")
    Reviewed-by: Neil Armstrong <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Signed-off-by: Vladimir Zapolskiy <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: qcom: sm8450: Fix GIC_ITS range length [+ + +]
Author: Konrad Dybcio <[email protected]>
Date:   Tue Mar 17 15:41:16 2026 +0100

    arm64: dts: qcom: sm8450: Fix GIC_ITS range length
    
    [ Upstream commit 14044fa192c50265bc1f636108371044bbdcf7b7 ]
    
    Currently, the GITS_SGIR register is cut off. Fix it up.
    
    Fixes: fc8b0b9b630d ("arm64: dts: qcom: sm8450 add ITS device tree node")
    Signed-off-by: Konrad Dybcio <[email protected]>
    Reviewed-by: Neil Armstrong <[email protected]>
    Reviewed-by: Abel Vesa <[email protected]>
    Link: https://lore.kernel.org/r/20260317-topic-its_range_fixup-v1-3-49be8076adb1@oss.qualcomm.com
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: qcom: sm8550: Enable UHS-I SDR50 and SDR104 SD card modes [+ + +]
Author: Vladimir Zapolskiy <[email protected]>
Date:   Sat Mar 14 04:37:14 2026 +0200

    arm64: dts: qcom: sm8550: Enable UHS-I SDR50 and SDR104 SD card modes
    
    [ Upstream commit 66b0f024fba0728ddce6916dce173bb1bdd4eab0 ]
    
    The restriction on UHS-I speed modes was added to all SM8550 platforms
    by copying it from SM8450 dtsi file, and due to the overclocking of SD
    cards it was an actually reproducible problem. Since the latter issue
    has been fixed, UHS-I speed modes are working fine on SM8550 boards,
    below is the test performed on SM8550-HDK:
    
    SDR50 speed mode:
    
        mmc0: new UHS-I speed SDR50 SDHC card at address 0001
        mmcblk0: mmc0:0001 00000 14.6 GiB
         mmcblk0: p1
    
        % dd if=/dev/mmcblk0p1 of=/dev/null bs=1M count=1024
        1024+0 records in
        1024+0 records out
        1073741824 bytes (1.1 GB, 1.0 GiB) copied, 23.5468 s, 45.6 MB/s
    
    SDR104 speed mode:
    
        mmc0: new UHS-I speed SDR104 SDHC card at address 59b4
        mmcblk0: mmc0:59b4 USDU1 28.3 GiB
         mmcblk0: p1
    
        % dd if=/dev/mmcblk0p1 of=/dev/null bs=1M count=1024
        1024+0 records in
        1024+0 records out
        1073741824 bytes (1.1 GB, 1.0 GiB) copied, 11.9819 s, 89.6 MB/s
    
    Unset the UHS-I speed mode restrictions from the SM8550 platform dtsi
    file, there is no indication that the SDHC controller is broken.
    
    Fixes: ffc50b2d3828 ("arm64: dts: qcom: Add base SM8550 dtsi")
    Reviewed-by: Neil Armstrong <[email protected]>
    Signed-off-by: Vladimir Zapolskiy <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: qcom: sm8550: Fix GIC_ITS range length [+ + +]
Author: Konrad Dybcio <[email protected]>
Date:   Tue Mar 17 15:41:17 2026 +0100

    arm64: dts: qcom: sm8550: Fix GIC_ITS range length
    
    [ Upstream commit 357c559e386705609b6b9dc0544c420e3f91f3a0 ]
    
    Currently, the GITS_SGIR register is cut off. Fix it up.
    
    Fixes: ffc50b2d3828 ("arm64: dts: qcom: Add base SM8550 dtsi")
    Signed-off-by: Konrad Dybcio <[email protected]>
    Reviewed-by: Neil Armstrong <[email protected]>
    Reviewed-by: Abel Vesa <[email protected]>
    Link: https://lore.kernel.org/r/20260317-topic-its_range_fixup-v1-4-49be8076adb1@oss.qualcomm.com
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: dts: qcom: sm8550: Fix xo clock supply of platform SD host controller [+ + +]
Author: Vladimir Zapolskiy <[email protected]>
Date:   Sat Mar 14 04:37:10 2026 +0200

    arm64: dts: qcom: sm8550: Fix xo clock supply of platform SD host controller
    
    [ Upstream commit 30ac651c69bddbc83cab6d52fc5d2e03bed83282 ]
    
    The expected frequency of SD host controller core supply clock is 19.2MHz,
    while RPMH_CXO_CLK clock frequency on SM8650 platform is 38.4MHz.
    
    Apparently the overclocked supply clock could be good enough on some
    boards and even with the most of SD cards, however some low-end UHS-I
    SD cards in SDR104 mode of the host controller produce I/O errors in
    runtime, fortunately this problem is gone, if the "xo" clock frequency
    matches the expected 19.2MHz clock rate.
    
    Fixes: ffc50b2d3828 ("arm64: dts: qcom: Add base SM8550 dtsi")
    Signed-off-by: Vladimir Zapolskiy <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Reviewed-by: Neil Armstrong <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: kexec: Remove duplicate allocation for trans_pgd [+ + +]
Author: Wang Wensheng <[email protected]>
Date:   Sun Apr 5 19:42:31 2026 +0800

    arm64: kexec: Remove duplicate allocation for trans_pgd
    
    [ Upstream commit ee020bf6f14094c9ae434bb37e6957a1fdad513c ]
    
    trans_pgd would be allocated in trans_pgd_create_copy(), so remove the
    duplicate allocation before calling trans_pgd_create_copy().
    
    Fixes: 3744b5280e67 ("arm64: kexec: install a copy of the linear-map")
    Signed-off-by: Wang Wensheng <[email protected]>
    Reviewed-by: Pasha Tatashin <[email protected]>
    Signed-off-by: Catalin Marinas <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ARM: dts: imx27-eukrea: replace interrupts with interrupts-extended [+ + +]
Author: Frank Li <[email protected]>
Date:   Wed Feb 11 18:12:55 2026 -0500

    ARM: dts: imx27-eukrea: replace interrupts with interrupts-extended
    
    [ Upstream commit 0477a6b31e2874e554e3bcfac9883684b8f8ca2d ]
    
    The property interrupts use default interrupt controllers. But pass down
    gpio<n> as phandle. Correct it by use interrupts-extended.
    
    Fixes: d8cae888aa2bc ("ARM: dts: Add support for the cpuimx27 board from Eukrea and its baseboard")
    Signed-off-by: Frank Li <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ARM: dts: mediatek: mt7623: fix efuse fallback compatible [+ + +]
Author: Rafał Miłecki <[email protected]>
Date:   Tue Feb 24 09:25:41 2026 +0100

    ARM: dts: mediatek: mt7623: fix efuse fallback compatible
    
    [ Upstream commit 5978ff33cc6f0988388a2830dc5cd2ea4e81f36a ]
    
    Fix following validation error:
    arch/arm/boot/dts/mediatek/mt7623a-rfb-emmc.dtb: efuse@10206000: compatible: 'oneOf' conditional failed, one must be fixed:
            ['mediatek,mt7623-efuse', 'mediatek,mt8173-efuse'] is too long
            'mediatek,mt8173-efuse' was expected
            'mediatek,efuse' was expected
            from schema $id: http://devicetree.org/schemas/nvmem/mediatek,efuse.yaml#
    arch/arm/boot/dts/mediatek/mt7623a-rfb-emmc.dtb: efuse@10206000: Unevaluated properties are not allowed ('compatible' was unexpected)
            from schema $id: http://devicetree.org/schemas/nvmem/mediatek,efuse.yaml#
    
    Fixes: 43c7a91b4b3a ("arm: dts: mt7623: add efuse nodes to the mt7623.dtsi file")
    Signed-off-by: Rafał Miłecki <[email protected]>
    Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
    Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ARM: OMAP1: Fix DEBUG_LL and earlyprintk on OMAP16XX [+ + +]
Author: Aaro Koskinen <[email protected]>
Date:   Fri Mar 27 19:15:10 2026 +0200

    ARM: OMAP1: Fix DEBUG_LL and earlyprintk on OMAP16XX
    
    [ Upstream commit 7e74b606dd39c46d4378d6f6563f560a00ab8694 ]
    
    On OMAP16XX, the UART enable bit shifts are written instead of the actual
    bits. This breaks the boot when DEBUG_LL and earlyprintk is enabled;
    the UART gets disabled and some random bits get enabled. Fix that.
    
    Fixes: 34c86239b184 ("ARM: OMAP1: clock: Fix early UART rate issues")
    Signed-off-by: Aaro Koskinen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Kevin Hilman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ASoC: codecs: ab8500: Fix casting of private data [+ + +]
Author: Christian A. Ehrhardt <[email protected]>
Date:   Tue Apr 28 21:22:49 2026 +0200

    ASoC: codecs: ab8500: Fix casting of private data
    
    [ Upstream commit a201aef1a88b675e9eb8487e27d14e2eef3cef80 ]
    
    ab8500_filter_controls[i].private_value is initialized using
    
            .private_value = (unsigned long)&(struct filter_control)
                    {.count = xcount, .min = xmin, .max = xmax}
    
    thus it's a pointer to a struct filter_control casted to unsigned long.
    
    So to get back that pointer .private_data must be cast back, not its
    address.
    
    Fixes: 679d7abdc754 ("ASoC: codecs: Add AB8500 codec-driver")
    Signed-off-by: Christian A. Ehrhardt <[email protected]>
    Signed-off-by: Uwe Kleine-König (The Capable Hub) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: fsl_easrc: Change the type for iec958 channel status controls [+ + +]
Author: Shengjiu Wang <[email protected]>
Date:   Wed Apr 1 17:42:26 2026 +0800

    ASoC: fsl_easrc: Change the type for iec958 channel status controls
    
    [ Upstream commit 47f28a5bd154a95d5aa563dde02a801bd32ddb81 ]
    
    Use the type SNDRV_CTL_ELEM_TYPE_IEC958 for iec958 channel status
    controls, the original type will cause mixer-test to iterate all 32bit
    values, which costs a lot of time. And using IEC958 type can reduce the
    control numbers.
    
    Also enable pm runtime before updating registers to make the regmap cache
    data align with the value in hardware.
    
    Fixes: 955ac624058f ("ASoC: fsl_easrc: Add EASRC ASoC CPU DAI drivers")
    Signed-off-by: Shengjiu Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: fsl_easrc: Check the variable range in fsl_easrc_iec958_put_bits() [+ + +]
Author: Shengjiu Wang <[email protected]>
Date:   Wed Apr 1 17:42:24 2026 +0800

    ASoC: fsl_easrc: Check the variable range in fsl_easrc_iec958_put_bits()
    
    [ Upstream commit 00541b86fb578d4949cfdd6aff1f82d43fcf07af ]
    
    Add check of input value's range in fsl_easrc_iec958_put_bits(),
    otherwise the wrong value may be written from user space.
    
    Fixes: 955ac624058f ("ASoC: fsl_easrc: Add EASRC ASoC CPU DAI drivers")
    Signed-off-by: Shengjiu Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: fsl_easrc: Fix value type in fsl_easrc_iec958_get_bits() [+ + +]
Author: Shengjiu Wang <[email protected]>
Date:   Wed Apr 1 17:42:25 2026 +0800

    ASoC: fsl_easrc: Fix value type in fsl_easrc_iec958_get_bits()
    
    [ Upstream commit aa21fe4a81458cf469c2615b08cbde5997dde25a ]
    
    The value type of controls "Context 0 IEC958 Bits Per Sample" should be
    integer, not enumerated, the issue is found by the mixer-test.
    
    Fixes: 955ac624058f ("ASoC: fsl_easrc: Add EASRC ASoC CPU DAI drivers")
    Signed-off-by: Shengjiu Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: fsl_micfil: Add access property for "VAD Detected" [+ + +]
Author: Shengjiu Wang <[email protected]>
Date:   Wed Apr 1 17:42:16 2026 +0800

    ASoC: fsl_micfil: Add access property for "VAD Detected"
    
    [ Upstream commit c7661bfc7422443df394c01e069ae4e5c3a7f04c ]
    
    Add access property SNDRV_CTL_ELEM_ACCESS_READ for control "VAD
    Detected", which doesn't support put operation, otherwise there will be
    issue with mixer-test.
    
    Fixes: 29dbfeecab85 ("ASoC: fsl_micfil: Add Hardware Voice Activity Detector support")
    Signed-off-by: Shengjiu Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: fsl_micfil: Fix event generation in hwvad_put_enable() [+ + +]
Author: Shengjiu Wang <[email protected]>
Date:   Wed Apr 1 17:42:17 2026 +0800

    ASoC: fsl_micfil: Fix event generation in hwvad_put_enable()
    
    [ Upstream commit 59b9061824f2179fe133e2636203548eaba3e528 ]
    
    ALSA controls should return 1 if the value in the control changed but the
    control put operation hwvad_put_enable() only returns 0 or a negative
    error code, causing ALSA to not generate any change events.
    
    Add a suitable check in the function before updating the vad_enabled
    variable.
    
    Fixes: 29dbfeecab85 ("ASoC: fsl_micfil: Add Hardware Voice Activity Detector support")
    Signed-off-by: Shengjiu Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: fsl_micfil: Fix event generation in hwvad_put_init_mode() [+ + +]
Author: Shengjiu Wang <[email protected]>
Date:   Wed Apr 1 17:42:18 2026 +0800

    ASoC: fsl_micfil: Fix event generation in hwvad_put_init_mode()
    
    [ Upstream commit 7e226209906906421f0d952d7304e48fdb0adabc ]
    
    ALSA controls should return 1 if the value in the control changed but the
    control put operation hwvad_put_init_mode() only returns 0 or a negative
    error code, causing ALSA to not generate any change events.
    
    Add a suitable check in the function before updating the vad_init_mode
    variable.
    
    Fixes: 29dbfeecab85 ("ASoC: fsl_micfil: Add Hardware Voice Activity Detector support")
    Signed-off-by: Shengjiu Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: fsl_micfil: Fix event generation in micfil_put_dc_remover_state() [+ + +]
Author: Shengjiu Wang <[email protected]>
Date:   Wed Apr 1 17:42:20 2026 +0800

    ASoC: fsl_micfil: Fix event generation in micfil_put_dc_remover_state()
    
    [ Upstream commit 7d2bd35100de370dc326b250e8f6b66bee06a2f3 ]
    
    ALSA controls should return 1 if the value in the control changed but the
    control put operation micfil_put_dc_remover_state() only returns 0 or a
    negative error code, causing ALSA to not generate any change events.
    
    return the value of snd_soc_component_update_bits() directly, as it has
    the capability of return check status of changed or not.
    
    Also enable pm runtime before calling the function
    snd_soc_component_update_bits() to make the regmap cache data align with
    the value in hardware.
    
    Fixes: 29dbfeecab85 ("ASoC: fsl_micfil: Add Hardware Voice Activity Detector support")
    Signed-off-by: Shengjiu Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: fsl_micfil: Fix event generation in micfil_quality_set() [+ + +]
Author: Shengjiu Wang <[email protected]>
Date:   Wed Apr 1 17:42:21 2026 +0800

    ASoC: fsl_micfil: Fix event generation in micfil_quality_set()
    
    [ Upstream commit e5785093b1b45af7ee57d18619b2854a8aed073a ]
    
    ALSA controls should return 1 if the value in the control changed but the
    control put operation micfil_quality_set() only returns 0 or a negative
    error code, causing ALSA to not generate any change events.
    
    Add a suitable check in the function before updating the quality variable.
    
    Also enable pm runtime before calling the function micfil_set_quality()
    to make the regmap cache data align with the value in hardware.
    
    Fixes: bea1d61d5892 ("ASoC: fsl_micfil: rework quality setting")
    Signed-off-by: Shengjiu Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: fsl_xcvr: Fix event generation in fsl_xcvr_arc_mode_put() [+ + +]
Author: Shengjiu Wang <[email protected]>
Date:   Wed Apr 1 17:42:22 2026 +0800

    ASoC: fsl_xcvr: Fix event generation in fsl_xcvr_arc_mode_put()
    
    [ Upstream commit 1b61c8103c9317a9c37fe544c2d83cee1c281149 ]
    
    ALSA controls should return 1 if the value in the control changed but the
    control put operation fsl_xcvr_arc_mode_put() only returns 0 or a negative
    error code, causing ALSA to not generate any change events.
    
    Add a suitable check in the function before updating the arc_mode
    variable.
    
    Fixes: 28564486866f ("ASoC: fsl_xcvr: Add XCVR ASoC CPU DAI driver")
    Signed-off-by: Shengjiu Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: fsl_xcvr: Fix event generation in fsl_xcvr_mode_put() [+ + +]
Author: Shengjiu Wang <[email protected]>
Date:   Wed Apr 1 17:42:23 2026 +0800

    ASoC: fsl_xcvr: Fix event generation in fsl_xcvr_mode_put()
    
    [ Upstream commit 64a496ba976324615b845d60739dfcdae3d57434 ]
    
    ALSA controls should return 1 if the value in the control changed but the
    control put operation fsl_xcvr_mode_put() only returns 0 or a negative
    error code, causing ALSA to not generate any change events.
    
    Add a suitable check in the function before updating the mode variable.
    
    Fixes: 28564486866f ("ASoC: fsl_xcvr: Add XCVR ASoC CPU DAI driver")
    Signed-off-by: Shengjiu Wang <[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: qdsp6: topology: check widget type before accessing data [+ + +]
Author: Srinivas Kandagatla <[email protected]>
Date:   Thu Apr 2 08:11:08 2026 +0000

    ASoC: qcom: qdsp6: topology: check widget type before accessing data
    
    [ Upstream commit d5bfdd28e0cdd45043ae6e0ac168a451d59283dc ]
    
    Check widget type before accessing the private data, as this could a
    virtual widget which is no associated with a dsp graph, container and
    module. Accessing witout check could lead to incorrect memory access.
    
    Fixes: 36ad9bf1d93d ("ASoC: qdsp6: audioreach: add topology support")
    Signed-off-by: Srinivas Kandagatla <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: rsnd: Fix potential out-of-bounds access of component_dais[] [+ + +]
Author: Denis Rastyogin <[email protected]>
Date:   Fri Mar 27 13:33:11 2026 +0300

    ASoC: rsnd: Fix potential out-of-bounds access of component_dais[]
    
    [ Upstream commit f9e437cddf6cf9e603bdaefe148c1f4792aaf39c ]
    
    component_dais[RSND_MAX_COMPONENT] is initially zero-initialized
    and later populated in rsnd_dai_of_node(). However, the existing boundary check:
      if (i >= RSND_MAX_COMPONENT)
    
    does not guarantee that the last valid element remains zero. As a result,
    the loop can rely on component_dais[RSND_MAX_COMPONENT] being zero,
    which may lead to an out-of-bounds access.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 547b02f74e4a ("ASoC: rsnd: enable multi Component support for Audio Graph Card/Card2")
    Signed-off-by: Denis Rastyogin <[email protected]>
    Acked-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: compress: return the configured codec from get_params [+ + +]
Author: Cássio Gabriel <[email protected]>
Date:   Wed Mar 25 17:05:11 2026 -0300

    ASoC: SOF: compress: return the configured codec from get_params
    
    [ Upstream commit 2c4fdd055f92a2fc8602dcd88bcea08c374b7e8b ]
    
    The SOF compressed offload path accepts codec parameters in
    sof_compr_set_params() and forwards them to firmware as
    extended data in the SOF IPC stream params message.
    
    However, sof_compr_get_params() still returns success without
    filling the snd_codec structure. Since the compress core allocates
    that structure zeroed and copies it back to userspace on success,
    SNDRV_COMPRESS_GET_PARAMS returns an all-zero codec description
    even after the stream has been configured successfully.
    
    The stale TODO in this callback conflates get_params() with capability
    discovery. Supported codec enumeration belongs in get_caps() and
    get_codec_caps(). get_params() should report the current codec settings.
    
    Cache the codec accepted by sof_compr_set_params() in the per-stream SOF
    compress state and return it from sof_compr_get_params().
    
    Fixes: 6324cf901e14 ("ASoC: SOF: compr: Add compress ops implementation")
    Signed-off-by: Cássio Gabriel <[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: Intel: hda-dai: add support for dspless mode beyond HDAudio [+ + +]
Author: Pierre-Louis Bossart <[email protected]>
Date:   Wed May 20 11:08:01 2026 +0800

    ASoC: SOF: Intel: hda-dai: add support for dspless mode beyond HDAudio
    
    [ Upstream commit 2065610b5ddd5b58eed1dc3b3c3db27a26ebd4b6 ]
    
    For SoundWire/ALH, we need to have a dai configured, but we don't want
    to send a DMA_TLV to firmware. Add additional code branches.
    
    Signed-off-by: Pierre-Louis Bossart <[email protected]>
    Reviewed-by: Péter Ujfalusi <[email protected]>
    Reviewed-by: Bard Liao <[email protected]>
    Signed-off-by: Peter Ujfalusi <[email protected]>
    Link: https://msgid.link/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Alva Lan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: SOF: Intel: hda-dai: remove dspless special case [+ + +]
Author: Pierre-Louis Bossart <[email protected]>
Date:   Wed May 20 11:08:00 2026 +0800

    ASoC: SOF: Intel: hda-dai: remove dspless special case
    
    [ Upstream commit daa09d0615ce9c781777802874cffa4380f883c3 ]
    
    The existing code forces a parameter to be NULL but that parameter is
    not used yet. Remove the special case in preparation for additional
    changes.
    
    Signed-off-by: Pierre-Louis Bossart <[email protected]>
    Reviewed-by: Péter Ujfalusi <[email protected]>
    Reviewed-by: Bard Liao <[email protected]>
    Signed-off-by: Peter Ujfalusi <[email protected]>
    Link: https://msgid.link/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Alva Lan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: SOF: Intel: hda: Fix NULL pointer dereference [+ + +]
Author: Ranjani Sridharan <[email protected]>
Date:   Wed May 20 11:08:02 2026 +0800

    ASoC: SOF: Intel: hda: Fix NULL pointer dereference
    
    [ Upstream commit 16c589567a956d46a7c1363af3f64de3d420af20 ]
    
    If there's a mismatch between the DAI links in the machine driver and
    the topology, it is possible that the playback/capture widget is not
    set, especially in the case of loopback capture for echo reference
    where we use the dummy DAI link. Return the error when the widget is not
    set to avoid a null pointer dereference like below when the topology is
    broken.
    
    RIP: 0010:hda_dai_get_ops.isra.0+0x14/0xa0 [snd_sof_intel_hda_common]
    
    Signed-off-by: Ranjani Sridharan <[email protected]>
    Reviewed-by: Bard Liao <[email protected]>
    Reviewed-by: Liam Girdwood <[email protected]>
    Reviewed-by: Mateusz Redzynia <[email protected]>
    Signed-off-by: Peter Ujfalusi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Alva Lan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: SOF: Intel: hda: Place check before dereference [+ + +]
Author: Ethan Tidmore <[email protected]>
Date:   Tue Mar 24 12:38:30 2026 -0500

    ASoC: SOF: Intel: hda: Place check before dereference
    
    [ Upstream commit 6cbc8360f51a3df2ea16a786b262b9fe44d4c68c ]
    
    The struct hext_stream is dereferenced before it is checked for NULL.
    Although it can never be NULL due to a check prior to
    hda_dsp_iccmax_stream_hw_params() being called, this change clears any
    confusion regarding hext_stream possibly being NULL.
    
    Check hext_stream for NULL and then assign its members.
    
    Detected by Smatch:
    sound/soc/sof/intel/hda-stream.c:488 hda_dsp_iccmax_stream_hw_params() warn:
    variable dereferenced before check 'hext_stream' (see line 486)
    
    Fixes: aca961f196e5d ("ASoC: SOF: Intel: hda: Add helper function to program ICCMAX stream")
    Signed-off-by: Ethan Tidmore <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: sti: Return errors from regmap_field_alloc() [+ + +]
Author: Sander Vanheule <[email protected]>
Date:   Fri Feb 20 16:26:33 2026 +0100

    ASoC: sti: Return errors from regmap_field_alloc()
    
    [ Upstream commit 272aabef50bc3fe58edd26de000f4cdd41bdbe60 ]
    
    When regmap_field_alloc() fails, it can return an error. Specifically,
    it will return PTR_ERR(-ENOMEM) when the allocation returns a NULL
    pointer. The code then uses these allocations with a simple NULL check:
    
        if (player->clk_sel) {
            // May dereference invalid pointer (-ENOMEM)
            err = regmap_field_write(player->clk_sel, ...);
        }
    
    Ensure initialization fails by forwarding the errors from
    regmap_field_alloc(), thus avoiding the use of the invalid pointers.
    
    Fixes: 76c2145ded6b ("ASoC: sti: Add CPU DAI driver for playback")
    Signed-off-by: Sander Vanheule <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: sti: use managed regmap_field allocations [+ + +]
Author: Sander Vanheule <[email protected]>
Date:   Fri Feb 20 16:26:34 2026 +0100

    ASoC: sti: use managed regmap_field allocations
    
    [ Upstream commit 1696fad8b259a2d46e51cd6e17e4bcdbe02279fa ]
    
    The regmap_field objects allocated at player init are never freed and
    may leak resources if the driver is removed.
    
    Switch to devm_regmap_field_alloc() to automatically limit the lifetime
    of the allocations the lifetime of the device.
    
    Fixes: 76c2145ded6b ("ASoC: sti: Add CPU DAI driver for playback")
    Signed-off-by: Sander Vanheule <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
audit: enforce AUDIT_LOCKED for AUDIT_TRIM and AUDIT_MAKE_EQUIV [+ + +]
Author: Sergio Correia <[email protected]>
Date:   Tue May 12 14:28:59 2026 +0100

    audit: enforce AUDIT_LOCKED for AUDIT_TRIM and AUDIT_MAKE_EQUIV
    
    commit f9e1c1324b4d98d591a6f7568fdebf5cf456dfc2 upstream.
    
    AUDIT_ADD_RULE and AUDIT_DEL_RULE correctly check for AUDIT_LOCKED
    and return -EPERM, but AUDIT_TRIM and AUDIT_MAKE_EQUIV do not. This
    allows a process with CAP_AUDIT_CONTROL to modify directory tree
    watches and equivalence mappings even when the audit configuration
    has been locked, undermining the purpose of the lock.
    
    Add AUDIT_LOCKED checks to both commands.
    
    Cc: [email protected]
    Reviewed-by: Ricardo Robaina <[email protected]>
    Assisted-by: Claude:claude-opus-4-6
    Signed-off-by: Sergio Correia <[email protected]>
    Signed-off-by: Paul Moore <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

audit: fix incorrect inheritable capability in CAPSET records [+ + +]
Author: Sergio Correia <[email protected]>
Date:   Tue May 12 14:28:33 2026 +0100

    audit: fix incorrect inheritable capability in CAPSET records
    
    commit e4a640475e43f406fdfd56d370b1f34b0cbbc18d upstream.
    
    __audit_log_capset() records the effective capability set into the
    inheritable field due to a copy-paste error. Every CAPSET audit
    record therefore reports cap_pi (process inheritable) with the value
    of cap_effective instead of cap_inheritable.
    
    This silently corrupts audit data used for compliance and forensic
    analysis: an attacker who modifies inheritable capabilities to
    prepare for a privilege-escalating exec would have the change masked
    in the audit trail.
    
    The bug has been present since the original introduction of CAPSET
    audit records in 2008.
    
    Cc: [email protected]
    Fixes: e68b75a027bb ("When the capset syscall is used it is not possible for audit to record the actual capbilities being added/removed.  This patch adds a new record type which emits the target pid and the eff, inh, and perm cap sets.")
    Reviewed-by: Ricardo Robaina <[email protected]>
    Assisted-by: Claude:claude-opus-4-6
    Signed-off-by: Sergio Correia <[email protected]>
    Signed-off-by: Paul Moore <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
backlight: sky81452-backlight: Check return value of devm_gpiod_get_optional() in sky81452_bl_parse_dt() [+ + +]
Author: Chen Ni <[email protected]>
Date:   Tue Feb 3 10:16:25 2026 +0800

    backlight: sky81452-backlight: Check return value of devm_gpiod_get_optional() in sky81452_bl_parse_dt()
    
    [ Upstream commit 797cc011ae02bda26f93d25a4442d7a1a77d84df ]
    
    The devm_gpiod_get_optional() function may return an ERR_PTR in case of
    genuine GPIO acquisition errors, not just NULL which indicates the
    legitimate absence of an optional GPIO.
    
    Add an IS_ERR() check after the call in sky81452_bl_parse_dt(). On
    error, return the error code to ensure proper failure handling rather
    than proceeding with invalid pointers.
    
    Fixes: e1915eec54a6 ("backlight: sky81452: Convert to GPIO descriptors")
    Signed-off-by: Chen Ni <[email protected]>
    Reviewed-by: Linus Walleij <[email protected]>
    Reviewed-by: Daniel Thompson (RISCstar) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bareudp: fix NULL pointer dereference in bareudp_fill_metadata_dst() [+ + +]
Author: Weiming Shi <[email protected]>
Date:   Sun Apr 26 09:53:51 2026 -0700

    bareudp: fix NULL pointer dereference in bareudp_fill_metadata_dst()
    
    [ Upstream commit aa6c6d9ee064aabfede4402fd1283424e649ca19 ]
    
    bareudp_fill_metadata_dst() passes bareudp->sock to
    udp_tunnel6_dst_lookup() in the IPv6 path without a NULL check.
    The socket is only created in bareudp_open() and NULLed in
    bareudp_stop(), so calling this function while the device is down
    triggers a NULL dereference via sock->sk.
    
     BUG: kernel NULL pointer dereference, address: 0000000000000018
     RIP: 0010:udp_tunnel6_dst_lookup (net/ipv6/ip6_udp_tunnel.c:160)
     Call Trace:
      <TASK>
      bareudp_fill_metadata_dst (drivers/net/bareudp.c:532)
      do_execute_actions (net/openvswitch/actions.c:901)
      ovs_execute_actions (net/openvswitch/actions.c:1589)
      ovs_packet_cmd_execute (net/openvswitch/datapath.c:700)
      genl_family_rcv_msg_doit (net/netlink/genetlink.c:1114)
      genl_rcv_msg (net/netlink/genetlink.c:1209)
      netlink_rcv_skb (net/netlink/af_netlink.c:2550)
      </TASK>
    
    Add a NULL check returning -ESHUTDOWN, consistent with the xmit paths
    in the same driver.
    
    Fixes: 571912c69f0e ("net: UDP tunnel encapsulation module for tunnelling different protocols like MPLS, IP, NSH etc.")
    Reported-by: Xiang Mei <[email protected]>
    Signed-off-by: Weiming Shi <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[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: Sasha Levin <[email protected]>

 
blk-cgroup: fix disk reference leak in blkcg_maybe_throttle_current() [+ + +]
Author: Jackie Liu <[email protected]>
Date:   Tue Mar 31 16:50:54 2026 +0800

    blk-cgroup: fix disk reference leak in blkcg_maybe_throttle_current()
    
    [ Upstream commit 23308af722fefed00af5f238024c11710938fba3 ]
    
    Add the missing put_disk() on the error path in
    blkcg_maybe_throttle_current(). When blkcg lookup, blkg lookup, or
    blkg_tryget() fails, the function jumps to the out label which only
    calls rcu_read_unlock() but does not release the disk reference acquired
    by blkcg_schedule_throttle() via get_device(). Since current->throttle_disk
    is already set to NULL before the lookup, blkcg_exit() cannot release
    this reference either, causing the disk to never be freed.
    
    Restore the reference release that was present as blk_put_queue() in the
    original code but was inadvertently dropped during the conversion from
    request_queue to gendisk.
    
    Fixes: f05837ed73d0 ("blk-cgroup: store a gendisk to throttle in struct task_struct")
    Signed-off-by: Jackie Liu <[email protected]>
    Acked-by: Tejun Heo <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

blk-cgroup: wait for blkcg cleanup before initializing new disk [+ + +]
Author: Ming Lei <[email protected]>
Date:   Wed Mar 11 11:28:37 2026 +0800

    blk-cgroup: wait for blkcg cleanup before initializing new disk
    
    [ Upstream commit 3dbaacf6ab68f81e3375fe769a2ecdbd3ce386fd ]
    
    When a queue is shared across disk rebind (e.g., SCSI unbind/bind), the
    previous disk's blkcg state is cleaned up asynchronously via
    disk_release() -> blkcg_exit_disk(). If the new disk's blkcg_init_disk()
    runs before that cleanup finishes, we may overwrite q->root_blkg while
    the old one is still alive, and radix_tree_insert() in blkg_create()
    fails with -EEXIST because the old blkg entries still occupy the same
    queue id slot in blkcg->blkg_tree. This causes the sd probe to fail
    with -ENOMEM.
    
    Fix it by waiting in blkcg_init_disk() for root_blkg to become NULL,
    which indicates the previous disk's blkcg cleanup has completed.
    
    Fixes: 1059699f87eb ("block: move blkcg initialization/destroy into disk allocation/release handler")
    Cc: Yi Zhang <[email protected]>
    Signed-off-by: Ming Lei <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
 
Bluetooth: fix locking in hci_conn_request_evt() with HCI_PROTO_DEFER [+ + +]
Author: Pauli Virtanen <[email protected]>
Date:   Sun Mar 29 16:42:59 2026 +0300

    Bluetooth: fix locking in hci_conn_request_evt() with HCI_PROTO_DEFER
    
    [ Upstream commit 5c7209a341ff2ac338b2b0375c34a307b37c9ac2 ]
    
    When protocol sets HCI_PROTO_DEFER, hci_conn_request_evt() calls
    hci_connect_cfm(conn) without hdev->lock. Generally hci_connect_cfm()
    assumes it is held, and if conn is deleted concurrently -> UAF.
    
    Only SCO and ISO set HCI_PROTO_DEFER and only for defer setup listen,
    and HCI_EV_CONN_REQUEST is not generated for ISO.  In the non-deferred
    listening socket code paths, hci_connect_cfm(conn) is called with
    hdev->lock held.
    
    Fix by holding the lock.
    
    Fixes: 70c464256310 ("Bluetooth: Refactor connection request handling")
    Signed-off-by: Pauli Virtanen <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: hci_ldisc: Clear HCI_UART_PROTO_INIT on error [+ + +]
Author: Jonathan Rissanen <[email protected]>
Date:   Fri Mar 27 11:47:20 2026 +0100

    Bluetooth: hci_ldisc: Clear HCI_UART_PROTO_INIT on error
    
    [ Upstream commit 68d39ea5e0adc9ecaea1ce8abd842ec972eb8718 ]
    
    When hci_register_dev() fails in hci_uart_register_dev()
    HCI_UART_PROTO_INIT is not cleared before calling hu->proto->close(hu)
    and setting hu->hdev to NULL. This means incoming UART data will reach
    the protocol-specific recv handler in hci_uart_tty_receive() after
    resources are freed.
    
    Clear HCI_UART_PROTO_INIT with a write lock before calling
    hu->proto->close() and setting hu->hdev to NULL. The write lock ensures
    all active readers have completed and no new reader can enter the
    protocol recv path before resources are freed.
    
    This allows the protocol-specific recv functions to remove the
    "HCI_UART_REGISTERED" guard without risking a null pointer dereference
    if hci_register_dev() fails.
    
    Fixes: 5df5dafc171b ("Bluetooth: hci_uart: Fix another race during initialization")
    Signed-off-by: Jonathan Rissanen <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: l2cap: Add missing chan lock in l2cap_ecred_reconf_rsp [+ + +]
Author: Dudu Lu <[email protected]>
Date:   Sun Apr 5 23:47:41 2026 +0800

    Bluetooth: l2cap: Add missing chan lock in l2cap_ecred_reconf_rsp
    
    [ Upstream commit 42776497cdbc9a665b384a6dcb85f0d4bd927eab ]
    
    l2cap_ecred_reconf_rsp() calls l2cap_chan_del() without holding
    l2cap_chan_lock(). Every other l2cap_chan_del() caller in the file
    acquires the lock first. A remote BLE device can send a crafted
    L2CAP ECRED reconfiguration response to corrupt the channel list
    while another thread is iterating it.
    
    Add l2cap_chan_hold() and l2cap_chan_lock() before l2cap_chan_del(),
    and l2cap_chan_unlock() and l2cap_chan_put() after, matching the
    pattern used in l2cap_ecred_conn_rsp() and l2cap_conn_del().
    
    Fixes: 15f02b910562 ("Bluetooth: L2CAP: Add initial code for Enhanced Credit Based Mode")
    Signed-off-by: Dudu Lu <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: L2CAP: Fix printing wrong information if SDU length exceeds MTU [+ + +]
Author: Luiz Augusto von Dentz <[email protected]>
Date:   Mon Mar 16 14:34:13 2026 -0400

    Bluetooth: L2CAP: Fix printing wrong information if SDU length exceeds MTU
    
    [ Upstream commit 15bf35a660eb82a49f8397fc3d3acada8dae13db ]
    
    The code was printing skb->len and sdu_len in the places where it should
    be sdu_len and chan->imtu respectively to match the if conditions.
    
    Link: https://lore.kernel.org/linux-bluetooth/[email protected]/T/#m1418f9c82eeff8510c1beaa21cf53af20db96c06
    Fixes: e1d9a6688986 ("Bluetooth: LE L2CAP: Disconnect if received packet's SDU exceeds IMTU")
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Reviewed-by: Paul Menzel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bonding: 3ad: implement proper RCU rules for port->aggregator [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Tue Apr 28 12:32:07 2026 +0000

    bonding: 3ad: implement proper RCU rules for port->aggregator
    
    [ Upstream commit c4f050ce06c56cfb5993268af4a5cb66ed1cd04e ]
    
    syzbot found a data-race in bond_3ad_get_active_agg_info /
    bond_3ad_state_machine_handler [1] which hints at lack of proper
    RCU implementation.
    
    Add __rcu qualifier to port->aggregator, and add proper RCU API.
    
    [1]
    
    BUG: KCSAN: data-race in bond_3ad_get_active_agg_info / bond_3ad_state_machine_handler
    
    write to 0xffff88813cf5c4b0 of 8 bytes by task 36 on cpu 0:
      ad_port_selection_logic drivers/net/bonding/bond_3ad.c:1659 [inline]
      bond_3ad_state_machine_handler+0x9d5/0x2d60 drivers/net/bonding/bond_3ad.c:2569
      process_one_work kernel/workqueue.c:3302 [inline]
      process_scheduled_works+0x4f0/0x9c0 kernel/workqueue.c:3385
      worker_thread+0x58a/0x780 kernel/workqueue.c:3466
      kthread+0x22a/0x280 kernel/kthread.c:436
      ret_from_fork+0x146/0x330 arch/x86/kernel/process.c:158
      ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:245
    
    read to 0xffff88813cf5c4b0 of 8 bytes by task 22063 on cpu 1:
      __bond_3ad_get_active_agg_info drivers/net/bonding/bond_3ad.c:2858 [inline]
      bond_3ad_get_active_agg_info+0x8c/0x230 drivers/net/bonding/bond_3ad.c:2881
      bond_fill_info+0xe0f/0x10f0 drivers/net/bonding/bond_netlink.c:853
      rtnl_link_info_fill net/core/rtnetlink.c:906 [inline]
      rtnl_link_fill+0x1d7/0x4e0 net/core/rtnetlink.c:927
      rtnl_fill_ifinfo+0xf8e/0x1380 net/core/rtnetlink.c:2168
      rtmsg_ifinfo_build_skb+0x11c/0x1b0 net/core/rtnetlink.c:4453
      rtmsg_ifinfo_event net/core/rtnetlink.c:4486 [inline]
      rtmsg_ifinfo+0x6d/0x110 net/core/rtnetlink.c:4495
      __dev_notify_flags+0x76/0x390 net/core/dev.c:9790
      netif_change_flags+0xac/0xd0 net/core/dev.c:9823
      do_setlink+0x905/0x2950 net/core/rtnetlink.c:3180
      rtnl_group_changelink net/core/rtnetlink.c:3813 [inline]
      __rtnl_newlink net/core/rtnetlink.c:3981 [inline]
      rtnl_newlink+0xf55/0x1400 net/core/rtnetlink.c:4109
      rtnetlink_rcv_msg+0x64b/0x720 net/core/rtnetlink.c:6995
      netlink_rcv_skb+0x123/0x220 net/netlink/af_netlink.c:2550
      rtnetlink_rcv+0x1c/0x30 net/core/rtnetlink.c:7022
      netlink_unicast_kernel net/netlink/af_netlink.c:1318 [inline]
      netlink_unicast+0x5a8/0x680 net/netlink/af_netlink.c:1344
      netlink_sendmsg+0x5c8/0x6f0 net/netlink/af_netlink.c:1894
      sock_sendmsg_nosec net/socket.c:787 [inline]
      __sock_sendmsg net/socket.c:802 [inline]
      ____sys_sendmsg+0x563/0x5b0 net/socket.c:2698
      ___sys_sendmsg+0x195/0x1e0 net/socket.c:2752
      __sys_sendmsg net/socket.c:2784 [inline]
      __do_sys_sendmsg net/socket.c:2789 [inline]
      __se_sys_sendmsg net/socket.c:2787 [inline]
      __x64_sys_sendmsg+0xd4/0x160 net/socket.c:2787
      x64_sys_call+0x194c/0x3020 arch/x86/include/generated/asm/syscalls_64.h:47
      do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
      do_syscall_64+0x12c/0x3b0 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    value changed: 0x0000000000000000 -> 0xffff88813cf5c400
    
    Reported by Kernel Concurrency Sanitizer on:
    CPU: 1 UID: 0 PID: 22063 Comm: syz.0.31122 Tainted: G        W           syzkaller #0 PREEMPT(full)
    Tainted: [W]=WARN
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 04/18/2026
    
    Fixes: 47e91f56008b ("bonding: use RCU protection for 3ad xmit path")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/
    Signed-off-by: Eric Dumazet <[email protected]>
    Cc: Jay Vosburgh <[email protected]>
    Cc: Andrew Lunn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bonding: 802.3ad replace MAC_ADDRESS_EQUAL with __agg_has_partner [+ + +]
Author: Jones Syue 薛懷宗 <[email protected]>
Date:   Mon Feb 26 02:24:52 2024 +0000

    bonding: 802.3ad replace MAC_ADDRESS_EQUAL with __agg_has_partner
    
    [ Upstream commit 4440873f3655325f849366d75382aa05d09b5575 ]
    
    Replace macro MAC_ADDRESS_EQUAL() for null_mac_addr checking with inline
    function__agg_has_partner(). When MAC_ADDRESS_EQUAL() is verifiying
    aggregator's partner mac addr with null_mac_addr, means that seeing if
    aggregator has a valid partner or not. Using __agg_has_partner() makes it
    more clear to understand.
    
    In ad_port_selection_logic(), since aggregator->partner_system and
    port->partner_oper.system has been compared first as a prerequisite, it is
    safe to replace the upcoming MAC_ADDRESS_EQUAL() for null_mac_addr checking
    with __agg_has_partner().
    
    Delete null_mac_addr, which is not required anymore in bond_3ad.c, since
    all references to it are gone.
    
    Signed-off-by: Jones Syue <[email protected]>
    Reviewed-by: Hangbin Liu <[email protected]>
    Reviewed-by: Jiri Pirko <[email protected]>
    Acked-by: Jay Vosburgh <[email protected]>
    Link: https://lore.kernel.org/r/SI2PR04MB5097BCA8FF2A2F03D9A5A3EEDC5A2@SI2PR04MB5097.apcprd04.prod.outlook.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: c4f050ce06c5 ("bonding: 3ad: implement proper RCU rules for port->aggregator")
    Signed-off-by: Sasha Levin <[email protected]>

bonding: add support for per-port LACP actor priority [+ + +]
Author: Hangbin Liu <[email protected]>
Date:   Tue Sep 2 06:44:59 2025 +0000

    bonding: add support for per-port LACP actor priority
    
    [ Upstream commit 6b6dc81ee7e8ca87c71a533e1d69cf96a4f1e986 ]
    
    Introduce a new netlink attribute 'actor_port_prio' to allow setting
    the LACP actor port priority on a per-slave basis. This extends the
    existing bonding infrastructure to support more granular control over
    LACP negotiations.
    
    The priority value is embedded in LACPDU packets and will be used by
    subsequent patches to influence aggregator selection policies.
    
    Signed-off-by: Hangbin Liu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Stable-dep-of: c4f050ce06c5 ("bonding: 3ad: implement proper RCU rules for port->aggregator")
    Signed-off-by: Sasha Levin <[email protected]>

bonding: fix NULL pointer dereference in actor_port_prio setting [+ + +]
Author: Hangbin Liu <[email protected]>
Date:   Wed Nov 5 07:26:20 2025 +0000

    bonding: fix NULL pointer dereference in actor_port_prio setting
    
    [ Upstream commit 067bf016e99ad72aa4ff869d6dec1fd62a9c6202 ]
    
    Liang reported an issue where setting a slave’s actor_port_prio to
    predefined values such as 0, 255, or 65535 would cause a system crash.
    
    The problem occurs because in bond_opt_parse(), when the provided value
    matches a predefined table entry, the function returns that table entry,
    which does not contain slave information. Later, in
    bond_option_actor_port_prio_set(), calling bond_slave_get_rtnl() leads
    to a NULL pointer dereference.
    
    Since actor_port_prio is defined as a u16 and initialized to the default
    value of 255 in ad_initialize_port(), there is no need for the
    bond_actor_port_prio_tbl. Using the BOND_OPTFLAG_RAWVAL flag is sufficient.
    
    Fixes: 6b6dc81ee7e8 ("bonding: add support for per-port LACP actor priority")
    Reported-by: Liang Li <[email protected]>
    Signed-off-by: Hangbin Liu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bonding: print churn state via netlink [+ + +]
Author: Hangbin Liu <[email protected]>
Date:   Tue Feb 24 02:02:14 2026 +0000

    bonding: print churn state via netlink
    
    [ Upstream commit 4916f2e2f3fc9aef289fcd07949301e5c29094c2 ]
    
    Currently, the churn state is printed only in sysfs. Add netlink support
    so users could get the state via netlink.
    
    Signed-off-by: Hangbin Liu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Stable-dep-of: c4f050ce06c5 ("bonding: 3ad: implement proper RCU rules for port->aggregator")
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf, arm32: Reject BPF-to-BPF calls and callbacks in the JIT [+ + +]
Author: Puranjay Mohan <[email protected]>
Date:   Fri Apr 17 07:33:52 2026 -0700

    bpf, arm32: Reject BPF-to-BPF calls and callbacks in the JIT
    
    [ Upstream commit e1d486445af3c392628532229f7ce5f5cf7891b6 ]
    
    The ARM32 BPF JIT does not support BPF-to-BPF function calls
    (BPF_PSEUDO_CALL) or callbacks (BPF_PSEUDO_FUNC), but it does
    not reject them either.
    
    When a program with subprograms is loaded (e.g. libxdp's XDP
    dispatcher uses __noinline__ subprograms, or any program using
    callbacks like bpf_loop or bpf_for_each_map_elem), the verifier
    invokes bpf_jit_subprogs() which calls bpf_int_jit_compile()
    for each subprogram.
    
    For BPF_PSEUDO_CALL, since ARM32 does not reject it, the JIT
    silently emits code using the wrong address computation:
    
        func = __bpf_call_base + imm
    
    where imm is a pc-relative subprogram offset, producing a bogus
    function pointer.
    
    For BPF_PSEUDO_FUNC, the ldimm64 handler ignores src_reg and
    loads the immediate as a normal 64-bit value without error.
    
    In both cases, build_body() reports success and a JIT image is
    allocated. ARM32 lacks the jit_data/extra_pass mechanism needed
    for the second JIT pass in bpf_jit_subprogs(). On the second
    pass, bpf_int_jit_compile() performs a full fresh compilation,
    allocating a new JIT binary and overwriting prog->bpf_func. The
    first allocation is never freed. bpf_jit_subprogs() then detects
    the function pointer changed and aborts with -ENOTSUPP, but the
    original JIT binary has already been leaked. Each program
    load/unload cycle leaks one JIT binary allocation, as reported
    by kmemleak:
    
        unreferenced object 0xbf0a1000 (size 4096):
          backtrace:
            bpf_jit_binary_alloc+0x64/0xfc
            bpf_int_jit_compile+0x14c/0x348
            bpf_jit_subprogs+0x4fc/0xa60
    
    Fix this by rejecting both BPF_PSEUDO_CALL in the BPF_CALL
    handler and BPF_PSEUDO_FUNC in the BPF_LD_IMM64 handler, falling
    through to the existing 'notyet' path. This causes build_body()
    to fail before any JIT binary is allocated, so
    bpf_int_jit_compile() returns the original program unjitted.
    bpf_jit_subprogs() then sees !prog->jited and cleanly falls
    back to the interpreter with no leak.
    
    Acked-by: Daniel Borkmann <[email protected]>
    Fixes: 1c2a088a6626 ("bpf: x64: add JIT support for multi-function programs")
    Reported-by: Jonas Rebmann <[email protected]>
    Closes: https://lore.kernel.org/bpf/[email protected]
    Tested-by: Jonas Rebmann <[email protected]>
    Signed-off-by: Puranjay Mohan <[email protected]>
    Reviewed-by: Emil Tsalapatis <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf, arm64: Fix off-by-one in check_imm signed range check [+ + +]
Author: Daniel Borkmann <[email protected]>
Date:   Wed Apr 15 14:14:03 2026 +0200

    bpf, arm64: Fix off-by-one in check_imm signed range check
    
    [ Upstream commit 1dd8be4ec722ce54e4cace59f3a4ba658111b3ec ]
    
    check_imm(bits, imm) is used in the arm64 BPF JIT to verify that
    a branch displacement (in arm64 instruction units) fits into the
    signed N-bit immediate field of a B, B.cond or CBZ/CBNZ encoding
    before it is handed to the encoder. The macro currently tests for
    (imm > 0 && imm >> bits) || (imm < 0 && ~imm >> bits) which admits
    values in [-2^N, 2^N) — effectively a signed (N+1)-bit range. A
    signed N-bit field only holds [-2^(N-1), 2^(N-1)), so the check
    admits one extra bit of range on each side.
    
    In particular, for check_imm19(), values in [2^18, 2^19) slip past
    the check but do not fit into the 19-bit signed imm19 field of
    B.cond. aarch64_insn_encode_immediate() then masks the raw value
    into the 19-bit field, setting bit 18 (the sign bit) and flipping
    a forward branch into a backward one. Same class of issue exists
    for check_imm26() and the B/BL encoding. Shift by (bits - 1)
    instead of bits so the actual signed N-bit range is enforced.
    
    Fixes: e54bcde3d69d ("arm64: eBPF JIT compiler")
    Signed-off-by: Daniel Borkmann <[email protected]>
    Reviewed-by: Puranjay Mohan <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf, devmap: Remove unnecessary if check in for loop [+ + +]
Author: Thorsten Blum <[email protected]>
Date:   Wed May 29 12:19:01 2024 +0200

    bpf, devmap: Remove unnecessary if check in for loop
    
    [ Upstream commit 2317dc2c22cc353b699c7d1db47b2fe91f54055c ]
    
    The iterator variable dst cannot be NULL and the if check can be removed.
    Remove it and fix the following Coccinelle/coccicheck warning reported
    by itnull.cocci:
    
            ERROR: iterator variable bound on line 762 cannot be NULL
    
    Signed-off-by: Thorsten Blum <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Reviewed-by: Toke Høiland-Jørgensen <[email protected]>
    Acked-by: Jiri Olsa <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Stable-dep-of: 8ed82f807bb0 ("bpf: Use RCU-safe iteration in dev_map_redirect_multi() SKB path")
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf, sockmap: Fix af_unix iter deadlock [+ + +]
Author: Michal Luczaj <[email protected]>
Date:   Tue Apr 14 16:13:16 2026 +0200

    bpf, sockmap: Fix af_unix iter deadlock
    
    [ Upstream commit 4d328dd695383224aa750ddee6b4ad40c0f8d205 ]
    
    bpf_iter_unix_seq_show() may deadlock when lock_sock_fast() takes the fast
    path and the iter prog attempts to update a sockmap. Which ends up spinning
    at sock_map_update_elem()'s bh_lock_sock():
    
    WARNING: possible recursive locking detected
    test_progs/1393 is trying to acquire lock:
    ffff88811ec25f58 (slock-AF_UNIX){+...}-{3:3}, at: sock_map_update_elem+0xdb/0x1f0
    
    but task is already holding lock:
    ffff88811ec25f58 (slock-AF_UNIX){+...}-{3:3}, at: __lock_sock_fast+0x37/0xe0
    
    other info that might help us debug this:
     Possible unsafe locking scenario:
    
           CPU0
           ----
      lock(slock-AF_UNIX);
      lock(slock-AF_UNIX);
    
     *** DEADLOCK ***
    
     May be due to missing lock nesting notation
    
    4 locks held by test_progs/1393:
     #0: ffff88814b59c790 (&p->lock){+.+.}-{4:4}, at: bpf_seq_read+0x59/0x10d0
     #1: ffff88811ec25fd8 (sk_lock-AF_UNIX){+.+.}-{0:0}, at: bpf_seq_read+0x42c/0x10d0
     #2: ffff88811ec25f58 (slock-AF_UNIX){+...}-{3:3}, at: __lock_sock_fast+0x37/0xe0
     #3: ffffffff85a6a7c0 (rcu_read_lock){....}-{1:3}, at: bpf_iter_run_prog+0x51d/0xb00
    
    Call Trace:
     dump_stack_lvl+0x5d/0x80
     print_deadlock_bug.cold+0xc0/0xce
     __lock_acquire+0x130f/0x2590
     lock_acquire+0x14e/0x2b0
     _raw_spin_lock+0x30/0x40
     sock_map_update_elem+0xdb/0x1f0
     bpf_prog_2d0075e5d9b721cd_dump_unix+0x55/0x4f4
     bpf_iter_run_prog+0x5b9/0xb00
     bpf_iter_unix_seq_show+0x1f7/0x2e0
     bpf_seq_read+0x42c/0x10d0
     vfs_read+0x171/0xb20
     ksys_read+0xff/0x200
     do_syscall_64+0x6b/0x3a0
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Fixes: 2c860a43dd77 ("bpf: af_unix: Implement BPF iterator for UNIX domain socket.")
    Suggested-by: Kuniyuki Iwashima <[email protected]>
    Suggested-by: Martin KaFai Lau <[email protected]>
    Signed-off-by: Michal Luczaj <[email protected]>
    Signed-off-by: Martin KaFai Lau <[email protected]>
    Reviewed-by: Jiayuan Chen <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Link: https://patch.msgid.link/20260414-unix-proto-update-null-ptr-deref-v4-2-2af6fe97918e@rbox.co
    Signed-off-by: Sasha Levin <[email protected]>

bpf, sockmap: Fix af_unix null-ptr-deref in proto update [+ + +]
Author: Michal Luczaj <[email protected]>
Date:   Tue Apr 14 16:13:18 2026 +0200

    bpf, sockmap: Fix af_unix null-ptr-deref in proto update
    
    [ Upstream commit dca38b7734d2ea00af4818ff3ae836fab33d5d5a ]
    
    unix_stream_connect() sets sk_state (`WRITE_ONCE(sk->sk_state,
    TCP_ESTABLISHED)`) _before_ it assigns a peer (`unix_peer(sk) = newsk`).
    sk_state == TCP_ESTABLISHED makes sock_map_sk_state_allowed() believe that
    socket is properly set up, which would include having a defined peer. IOW,
    there's a window when unix_stream_bpf_update_proto() can be called on
    socket which still has unix_peer(sk) == NULL.
    
             CPU0 bpf                            CPU1 connect
             --------                            ------------
    
                                    WRITE_ONCE(sk->sk_state, TCP_ESTABLISHED)
    sock_map_sk_state_allowed(sk)
    ...
    sk_pair = unix_peer(sk)
    sock_hold(sk_pair)
                                    sock_hold(newsk)
                                    smp_mb__after_atomic()
                                    unix_peer(sk) = newsk
    
    BUG: kernel NULL pointer dereference, address: 0000000000000080
    RIP: 0010:unix_stream_bpf_update_proto+0xa0/0x1b0
    Call Trace:
      sock_map_link+0x564/0x8b0
      sock_map_update_common+0x6e/0x340
      sock_map_update_elem_sys+0x17d/0x240
      __sys_bpf+0x26db/0x3250
      __x64_sys_bpf+0x21/0x30
      do_syscall_64+0x6b/0x3a0
      entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Initial idea was to move peer assignment _before_ the sk_state update[1],
    but that involved an additional memory barrier, and changing the hot path
    was rejected.
    Then a NULL check during proto update in unix_stream_bpf_update_proto() was
    considered[2], but the follow-up discussion[3] focused on the root cause,
    i.e. sockmap update taking a wrong lock. Or, more specifically, missing
    unix_state_lock()[4].
    In the end it was concluded that teaching sockmap about the af_unix locking
    would be unnecessarily complex[5].
    Complexity aside, since BPF_PROG_TYPE_SCHED_CLS and BPF_PROG_TYPE_SCHED_ACT
    are allowed to update sockmaps, sock_map_update_elem() taking the unix
    lock, as it is currently implemented in unix_state_lock():
    spin_lock(&unix_sk(s)->lock), would be problematic. unix_state_lock() taken
    in a process context, followed by a softirq-context TC BPF program
    attempting to take the same spinlock -- deadlock[6].
    This way we circled back to the peer check idea[2].
    
    [1]: https://lore.kernel.org/netdev/[email protected]/
    [2]: https://lore.kernel.org/netdev/[email protected]/
    [3]: https://lore.kernel.org/netdev/[email protected]/
    [4]: https://lore.kernel.org/netdev/CAAVpQUA+8GL_j63CaKb8hbxoL21izD58yr1NvhOhU=j+35+3og@mail.gmail.com/
    [5]: https://lore.kernel.org/bpf/CAAVpQUAHijOMext28Gi10dSLuMzGYh+jK61Ujn+fZ-wvcODR2A@mail.gmail.com/
    [6]: https://lore.kernel.org/bpf/[email protected]/
    
    Summary of scenarios where af_unix/stream connect() may race a sockmap
    update:
    
    1. connect() vs. bpf(BPF_MAP_UPDATE_ELEM), i.e. sock_map_update_elem_sys()
    
       Implemented NULL check is sufficient. Once assigned, socket peer won't
       be released until socket fd is released. And that's not an issue because
       sock_map_update_elem_sys() bumps fd refcnf.
    
    2. connect() vs BPF program doing update
    
       Update restricted per verifier.c:may_update_sockmap() to
    
          BPF_PROG_TYPE_TRACING/BPF_TRACE_ITER
          BPF_PROG_TYPE_SOCK_OPS (bpf_sock_map_update() only)
          BPF_PROG_TYPE_SOCKET_FILTER
          BPF_PROG_TYPE_SCHED_CLS
          BPF_PROG_TYPE_SCHED_ACT
          BPF_PROG_TYPE_XDP
          BPF_PROG_TYPE_SK_REUSEPORT
          BPF_PROG_TYPE_FLOW_DISSECTOR
          BPF_PROG_TYPE_SK_LOOKUP
    
       Plus one more race to consider:
    
                CPU0 bpf                            CPU1 connect
                --------                            ------------
    
                                       WRITE_ONCE(sk->sk_state, TCP_ESTABLISHED)
       sock_map_sk_state_allowed(sk)
                                       sock_hold(newsk)
                                       smp_mb__after_atomic()
                                       unix_peer(sk) = newsk
       sk_pair = unix_peer(sk)
       if (unlikely(!sk_pair))
          return -EINVAL;
    
                                                     CPU1 close
                                                     ----------
    
                                       skpair = unix_peer(sk);
                                       unix_peer(sk) = NULL;
                                       sock_put(skpair)
       // use after free?
       sock_hold(sk_pair)
    
       2.1 BPF program invoking helper function bpf_sock_map_update() ->
           BPF_CALL_4(bpf_sock_map_update(), ...)
    
           Helper limited to BPF_PROG_TYPE_SOCK_OPS. Nevertheless, a unix sock
           might be accessible via bpf_map_lookup_elem(). Which implies sk
           already having psock, which in turn implies sk already having
           sk_pair. Since sk_psock_destroy() is queued as RCU work, sk_pair
           won't go away while BPF executes the update.
    
       2.2 BPF program invoking helper function bpf_map_update_elem() ->
           sock_map_update_elem()
    
           2.2.1 Unix sock accessible to BPF prog only via sockmap lookup in
                 BPF_PROG_TYPE_SOCKET_FILTER, BPF_PROG_TYPE_SCHED_CLS,
                 BPF_PROG_TYPE_SCHED_ACT, BPF_PROG_TYPE_XDP,
                 BPF_PROG_TYPE_SK_REUSEPORT, BPF_PROG_TYPE_FLOW_DISSECTOR,
                 BPF_PROG_TYPE_SK_LOOKUP.
    
                 Pretty much the same as case 2.1.
    
           2.2.2 Unix sock accessible to BPF program directly:
                 BPF_PROG_TYPE_TRACING, narrowed down to BPF_TRACE_ITER.
    
                 Sockmap iterator (sock_map_seq_ops) is safe: unix sock
                 residing in a sockmap means that the sock already went through
                 the proto update step.
    
                 Unix sock iterator (bpf_iter_unix_seq_ops), on the other hand,
                 gives access to socks that may still be unconnected. Which
                 means iterator prog can race sockmap/proto update against
                 connect().
    
                 BUG: KASAN: null-ptr-deref in unix_stream_bpf_update_proto+0x253/0x4d0
                 Write of size 4 at addr 0000000000000080 by task test_progs/3140
                 Call Trace:
                  dump_stack_lvl+0x5d/0x80
                  kasan_report+0xe4/0x1c0
                  kasan_check_range+0x125/0x200
                  unix_stream_bpf_update_proto+0x253/0x4d0
                  sock_map_link+0x71c/0xec0
                  sock_map_update_common+0xbc/0x600
                  sock_map_update_elem+0x19a/0x1f0
                  bpf_prog_bbbf56096cdd4f01_selective_dump_unix+0x20c/0x217
                  bpf_iter_run_prog+0x21e/0xae0
                  bpf_iter_unix_seq_show+0x1e0/0x2a0
                  bpf_seq_read+0x42c/0x10d0
                  vfs_read+0x171/0xb20
                  ksys_read+0xff/0x200
                  do_syscall_64+0xf7/0x5e0
                  entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
                 While the introduced NULL check prevents null-ptr-deref in the
                 BPF program path as well, it is insufficient to guard against
                 a poorly timed close() leading to a use-after-free. This will
                 be addressed in a subsequent patch.
    
    Fixes: c63829182c37 ("af_unix: Implement ->psock_update_sk_prot()")
    Closes: https://lore.kernel.org/netdev/[email protected]/
    Reported-by: Michal Luczaj <[email protected]>
    Reported-by: 钱一铭 <[email protected]>
    Suggested-by: Kuniyuki Iwashima <[email protected]>
    Suggested-by: Martin KaFai Lau <[email protected]>
    Signed-off-by: Michal Luczaj <[email protected]>
    Signed-off-by: Martin KaFai Lau <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Link: https://patch.msgid.link/20260414-unix-proto-update-null-ptr-deref-v4-4-2af6fe97918e@rbox.co
    Signed-off-by: Sasha Levin <[email protected]>

bpf, sockmap: Take state lock for af_unix iter [+ + +]
Author: Michal Luczaj <[email protected]>
Date:   Tue Apr 14 16:13:19 2026 +0200

    bpf, sockmap: Take state lock for af_unix iter
    
    [ Upstream commit 64c2f93fc3254d3bf5de4445fb732ee5c451edb6 ]
    
    When a BPF iterator program updates a sockmap, there is a race condition in
    unix_stream_bpf_update_proto() where the `peer` pointer can become stale[1]
    during a state transition TCP_ESTABLISHED -> TCP_CLOSE.
    
            CPU0 bpf                          CPU1 close
            --------                          ----------
    // unix_stream_bpf_update_proto()
    sk_pair = unix_peer(sk)
    if (unlikely(!sk_pair))
       return -EINVAL;
                                         // unix_release_sock()
                                         skpair = unix_peer(sk);
                                         unix_peer(sk) = NULL;
                                         sock_put(skpair)
    sock_hold(sk_pair) // UaF
    
    More practically, this fix guarantees that the iterator program is
    consistently provided with a unix socket that remains stable during
    iterator execution.
    
    [1]:
    BUG: KASAN: slab-use-after-free in unix_stream_bpf_update_proto+0x155/0x490
    Write of size 4 at addr ffff8881178c9a00 by task test_progs/2231
    Call Trace:
     dump_stack_lvl+0x5d/0x80
     print_report+0x170/0x4f3
     kasan_report+0xe4/0x1c0
     kasan_check_range+0x125/0x200
     unix_stream_bpf_update_proto+0x155/0x490
     sock_map_link+0x71c/0xec0
     sock_map_update_common+0xbc/0x600
     sock_map_update_elem+0x19a/0x1f0
     bpf_prog_bbbf56096cdd4f01_selective_dump_unix+0x20c/0x217
     bpf_iter_run_prog+0x21e/0xae0
     bpf_iter_unix_seq_show+0x1e0/0x2a0
     bpf_seq_read+0x42c/0x10d0
     vfs_read+0x171/0xb20
     ksys_read+0xff/0x200
     do_syscall_64+0xf7/0x5e0
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Allocated by task 2236:
     kasan_save_stack+0x30/0x50
     kasan_save_track+0x14/0x30
     __kasan_slab_alloc+0x63/0x80
     kmem_cache_alloc_noprof+0x1d5/0x680
     sk_prot_alloc+0x59/0x210
     sk_alloc+0x34/0x470
     unix_create1+0x86/0x8a0
     unix_stream_connect+0x318/0x15b0
     __sys_connect+0xfd/0x130
     __x64_sys_connect+0x72/0xd0
     do_syscall_64+0xf7/0x5e0
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Freed by task 2236:
     kasan_save_stack+0x30/0x50
     kasan_save_track+0x14/0x30
     kasan_save_free_info+0x3b/0x70
     __kasan_slab_free+0x47/0x70
     kmem_cache_free+0x11c/0x590
     __sk_destruct+0x432/0x6e0
     unix_release_sock+0x9b3/0xf60
     unix_release+0x8a/0xf0
     __sock_release+0xb0/0x270
     sock_close+0x18/0x20
     __fput+0x36e/0xac0
     fput_close_sync+0xe5/0x1a0
     __x64_sys_close+0x7d/0xd0
     do_syscall_64+0xf7/0x5e0
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Fixes: 2c860a43dd77 ("bpf: af_unix: Implement BPF iterator for UNIX domain socket.")
    Suggested-by: Kuniyuki Iwashima <[email protected]>
    Signed-off-by: Michal Luczaj <[email protected]>
    Signed-off-by: Martin KaFai Lau <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Link: https://patch.msgid.link/20260414-unix-proto-update-null-ptr-deref-v4-5-2af6fe97918e@rbox.co
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf: Add CHECKSUM_COMPLETE to bpf test progs [+ + +]
Author: Vadim Fedorenko <[email protected]>
Date:   Thu Jun 6 07:58:50 2024 -0700

    bpf: Add CHECKSUM_COMPLETE to bpf test progs
    
    [ Upstream commit a3cfe84cca28f205761a0450016593b0d728165e ]
    
    Add special flag to validate that TC BPF program properly updates
    checksum information in skb.
    
    Signed-off-by: Vadim Fedorenko <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Reviewed-by: Jakub Kicinski <[email protected]>
    Acked-by: Daniel Borkmann <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Stable-dep-of: 972787479ee7 ("bpf: test_run: Fix the null pointer dereference issue in bpf_lwt_xmit_push_encap")
    Signed-off-by: Sasha Levin <[email protected]>

bpf: allow UTF-8 literals in bpf_bprintf_prepare() [+ + +]
Author: Yihan Ding <[email protected]>
Date:   Thu Apr 16 20:01:41 2026 +0800

    bpf: allow UTF-8 literals in bpf_bprintf_prepare()
    
    [ Upstream commit b960430ea8862ef37ce53c8bf74a8dc79d3f2404 ]
    
    bpf_bprintf_prepare() only needs ASCII parsing for conversion
    specifiers. Plain text can safely carry bytes >= 0x80, so allow
    UTF-8 literals outside '%' sequences while keeping ASCII control
    bytes rejected and format specifiers ASCII-only.
    
    This keeps existing parsing rules for format directives unchanged,
    while allowing helpers such as bpf_trace_printk() to emit UTF-8
    literal text.
    
    Update test_snprintf_negative() in the same commit so selftests keep
    matching the new plain-text vs format-specifier split during bisection.
    
    Fixes: 48cac3f4a96d ("bpf: Implement formatted output helpers with bstr_printf")
    Signed-off-by: Yihan Ding <[email protected]>
    Acked-by: Paul Chaignon <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Drop task_to_inode and inet_conn_established from lsm sleepable hooks [+ + +]
Author: Jiayuan Chen <[email protected]>
Date:   Tue Apr 7 20:23:33 2026 +0800

    bpf: Drop task_to_inode and inet_conn_established from lsm sleepable hooks
    
    [ Upstream commit beaf0e96b1da74549a6cabd040f9667d83b2e97e ]
    
    bpf_lsm_task_to_inode() is called under rcu_read_lock() and
    bpf_lsm_inet_conn_established() is called from softirq context, so
    neither hook can be used by sleepable LSM programs.
    
    Fixes: 423f16108c9d8 ("bpf: Augment the set of sleepable LSM hooks")
    Reported-by: Quan Sun <[email protected]>
    Reported-by: Yinhao Hu <[email protected]>
    Reported-by: Kaiyan Mei <[email protected]>
    Reported-by: Dongliang Mu <[email protected]>
    Closes: https://lore.kernel.org/bpf/[email protected]/T/#u
    Signed-off-by: Jiayuan Chen <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: fix end-of-list detection in cgroup_storage_get_next_key() [+ + +]
Author: Weiming Shi <[email protected]>
Date:   Fri Apr 3 21:29:50 2026 +0800

    bpf: fix end-of-list detection in cgroup_storage_get_next_key()
    
    [ Upstream commit 5828b9e5b272ecff7cf5d345128d3de7324117f7 ]
    
    list_next_entry() never returns NULL -- when the current element is the
    last entry it wraps to the list head via container_of(). The subsequent
    NULL check is therefore dead code and get_next_key() never returns
    -ENOENT for the last element, instead reading storage->key from a bogus
    pointer that aliases internal map fields and copying the result to
    userspace.
    
    Replace it with list_entry_is_head() so the function correctly returns
    -ENOENT when there are no more entries.
    
    Fixes: de9cbbaadba5 ("bpf: introduce cgroup storage maps")
    Reported-by: Xiang Mei <[email protected]>
    Signed-off-by: Weiming Shi <[email protected]>
    Reviewed-by: Sun Jian <[email protected]>
    Acked-by: Paul Chaignon <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Fix NULL deref in map_kptr_match_type for scalar regs [+ + +]
Author: Mykyta Yatsenko <[email protected]>
Date:   Thu Apr 16 11:08:07 2026 -0700

    bpf: Fix NULL deref in map_kptr_match_type for scalar regs
    
    [ Upstream commit 4d0a375887ab4d49e4da1ff10f9606cab8f7c3ad ]
    
    Commit ab6c637ad027 ("bpf: Fix a bpf_kptr_xchg() issue with local
    kptr") refactored map_kptr_match_type() to branch on btf_is_kernel()
    before checking base_type(). A scalar register stored into a kptr
    slot has no btf, so the btf_is_kernel(reg->btf) call dereferences
    NULL.
    
    Move the base_type() != PTR_TO_BTF_ID guard before any reg->btf
    access.
    
    Fixes: ab6c637ad027 ("bpf: Fix a bpf_kptr_xchg() issue with local kptr")
    Reported-by: Hiker Cl <[email protected]>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=221372
    Signed-off-by: Mykyta Yatsenko <[email protected]>
    Acked-by: Paul Chaignon <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Fix OOB in pcpu_init_value [+ + +]
Author: Lang Xu <[email protected]>
Date:   Thu Apr 2 15:42:35 2026 +0800

    bpf: Fix OOB in pcpu_init_value
    
    [ Upstream commit 576afddfee8d1108ee299bf10f581593540d1a36 ]
    
    An out-of-bounds read occurs when copying element from a
    BPF_MAP_TYPE_CGROUP_STORAGE map to another pcpu map with the
    same value_size that is not rounded up to 8 bytes.
    
    The issue happens when:
    1. A CGROUP_STORAGE map is created with value_size not aligned to
       8 bytes (e.g., 4 bytes)
    2. A pcpu map is created with the same value_size (e.g., 4 bytes)
    3. Update element in 2 with data in 1
    
    pcpu_init_value assumes that all sources are rounded up to 8 bytes,
    and invokes copy_map_value_long to make a data copy, However, the
    assumption doesn't stand since there are some cases where the source
    may not be rounded up to 8 bytes, e.g., CGROUP_STORAGE, skb->data.
    the verifier verifies exactly the size that the source claims, not
    the size rounded up to 8 bytes by kernel, an OOB happens when the
    source has only 4 bytes while the copy size(4) is rounded up to 8.
    
    Fixes: d3bec0138bfb ("bpf: Zero-fill re-used per-cpu map element")
    Reported-by: Kaiyan Mei <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Lang Xu <[email protected]>
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Fix precedence bug in convert_bpf_ld_abs alignment check [+ + +]
Author: Daniel Borkmann <[email protected]>
Date:   Thu Apr 16 14:27:19 2026 +0200

    bpf: Fix precedence bug in convert_bpf_ld_abs alignment check
    
    [ Upstream commit e5f635edd393aeaa7cad9e42831d397e6e2e1eed ]
    
    Fix an operator precedence issue in convert_bpf_ld_abs() where the
    expression offset + ip_align % size evaluates as offset + (ip_align % size)
    due to % having higher precedence than +. That latter evaluation does
    not make any sense. The intended check is (offset + ip_align) % size == 0
    to verify that the packet load offset is properly aligned for direct
    access.
    
    With NET_IP_ALIGN == 2, the bug causes the inline fast-path for direct
    packet loads to almost never be taken on !CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
    platforms. This forces nearly all cBPF BPF_LD_ABS packet loads through
    the bpf_skb_load_helper slow path on the affected archs.
    
    Fixes: e0cea7ce988c ("bpf: implement ld_abs/ld_ind in native bpf")
    Signed-off-by: Daniel Borkmann <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Fix RCU stall in bpf_fd_array_map_clear() [+ + +]
Author: Sechang Lim <[email protected]>
Date:   Tue Apr 7 10:38:23 2026 +0000

    bpf: Fix RCU stall in bpf_fd_array_map_clear()
    
    [ Upstream commit 4406942e65ca128c56c67443832988873c21d2e9 ]
    
    Add a missing cond_resched() in bpf_fd_array_map_clear() loop.
    
    For PROG_ARRAY maps with many entries this loop calls
    prog_array_map_poke_run() per entry which can be expensive, and
    without yielding this can cause RCU stalls under load:
    
      rcu: Stack dump where RCU GP kthread last ran:
      CPU: 0 UID: 0 PID: 30932 Comm: kworker/0:2 Not tainted 6.14.0-13195-g967e8def1100 #2 PREEMPT(undef)
      Workqueue: events prog_array_map_clear_deferred
      RIP: 0010:write_comp_data+0x38/0x90 kernel/kcov.c:246
      Call Trace:
       <TASK>
       prog_array_map_poke_run+0x77/0x380 kernel/bpf/arraymap.c:1096
       __fd_array_map_delete_elem+0x197/0x310 kernel/bpf/arraymap.c:925
       bpf_fd_array_map_clear kernel/bpf/arraymap.c:1000 [inline]
       prog_array_map_clear_deferred+0x119/0x1b0 kernel/bpf/arraymap.c:1141
       process_one_work+0x898/0x19d0 kernel/workqueue.c:3238
       process_scheduled_works kernel/workqueue.c:3319 [inline]
       worker_thread+0x770/0x10b0 kernel/workqueue.c:3400
       kthread+0x465/0x880 kernel/kthread.c:464
       ret_from_fork+0x4d/0x80 arch/x86/kernel/process.c:153
       ret_from_fork_asm+0x19/0x30 arch/x86/entry/entry_64.S:245
       </TASK>
    
    Reviewed-by: Sun Jian <[email protected]>
    Fixes: da765a2f5993 ("bpf: Add poke dependency tracking for prog array maps")
    Signed-off-by: Sechang Lim <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Fix stale offload->prog pointer after constant blinding [+ + +]
Author: MingTao Huang <[email protected]>
Date:   Thu Apr 2 20:18:50 2026 +0800

    bpf: Fix stale offload->prog pointer after constant blinding
    
    [ Upstream commit a1aa9ef47c299c5bbc30594d3c2f0589edf908e6 ]
    
    When a dev-bound-only BPF program (BPF_F_XDP_DEV_BOUND_ONLY) undergoes
    JIT compilation with constant blinding enabled (bpf_jit_harden >= 2),
    bpf_jit_blind_constants() clones the program. The original prog is then
    freed in bpf_jit_prog_release_other(), which updates aux->prog to point
    to the surviving clone, but fails to update offload->prog.
    
    This leaves offload->prog pointing to the freed original program. When
    the network namespace is subsequently destroyed, cleanup_net() triggers
    bpf_dev_bound_netdev_unregister(), which iterates ondev->progs and calls
    __bpf_prog_offload_destroy(offload->prog). Accessing the freed prog
    causes a page fault:
    
    BUG: unable to handle page fault for address: ffffc900085f1038
    Workqueue: netns cleanup_net
    RIP: 0010:__bpf_prog_offload_destroy+0xc/0x80
    Call Trace:
    __bpf_offload_dev_netdev_unregister+0x257/0x350
    bpf_dev_bound_netdev_unregister+0x4a/0x90
    unregister_netdevice_many_notify+0x2a2/0x660
    ...
    cleanup_net+0x21a/0x320
    
    The test sequence that triggers this reliably is:
    
    1. Set net.core.bpf_jit_harden=2 (echo 2 > /proc/sys/net/core/bpf_jit_harden)
    2. Run xdp_metadata selftest, which creates a dev-bound-only XDP
       program on a veth inside a netns (./test_progs -t xdp_metadata)
    3. cleanup_net -> page fault in __bpf_prog_offload_destroy
    
    Dev-bound-only programs are unique in that they have an offload structure
    but go through the normal JIT path instead of bpf_prog_offload_compile().
    This means they are subject to constant blinding's prog clone-and-replace,
    while also having offload->prog that must stay in sync.
    
    Fix this by updating offload->prog in bpf_jit_prog_release_other(),
    alongside the existing aux->prog update. Both are back-pointers to
    the prog that must be kept in sync when the prog is replaced.
    
    Fixes: 2b3486bc2d23 ("bpf: Introduce device-bound XDP programs")
    Signed-off-by: MingTao Huang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: reject negative CO-RE accessor indices in bpf_core_parse_spec() [+ + +]
Author: Weiming Shi <[email protected]>
Date:   Sun Apr 5 00:12:20 2026 +0800

    bpf: reject negative CO-RE accessor indices in bpf_core_parse_spec()
    
    [ Upstream commit 1c22483a2c4bbf747787f328392ca3e68619c4dc ]
    
    CO-RE accessor strings are colon-separated indices that describe a path
    from a root BTF type to a target field, e.g. "0:1:2" walks through
    nested struct members. bpf_core_parse_spec() parses each component with
    sscanf("%d"), so negative values like -1 are silently accepted.  The
    subsequent bounds checks (access_idx >= btf_vlen(t)) only guard the
    upper bound and always pass for negative values because C integer
    promotion converts the __u16 btf_vlen result to int, making the
    comparison (int)(-1) >= (int)(N) false for any positive N.
    
    When -1 reaches btf_member_bit_offset() it gets cast to u32 0xffffffff,
    producing an out-of-bounds read far past the members array.  A crafted
    BPF program with a negative CO-RE accessor on any struct that exists in
    vmlinux BTF (e.g. task_struct) crashes the kernel deterministically
    during BPF_PROG_LOAD on any system with CONFIG_DEBUG_INFO_BTF=y
    (default on major distributions).  The bug is reachable with CAP_BPF:
    
     BUG: unable to handle page fault for address: ffffed11818b6626
     #PF: supervisor read access in kernel mode
     #PF: error_code(0x0000) - not-present page
     Oops: Oops: 0000 [#1] SMP KASAN NOPTI
     CPU: 0 UID: 0 PID: 85 Comm: poc Not tainted 7.0.0-rc6 #18 PREEMPT(full)
     RIP: 0010:bpf_core_parse_spec (tools/lib/bpf/relo_core.c:354)
     RAX: 00000000ffffffff
     Call Trace:
      <TASK>
      bpf_core_calc_relo_insn (tools/lib/bpf/relo_core.c:1321)
      bpf_core_apply (kernel/bpf/btf.c:9507)
      check_core_relo (kernel/bpf/verifier.c:19475)
      bpf_check (kernel/bpf/verifier.c:26031)
      bpf_prog_load (kernel/bpf/syscall.c:3089)
      __sys_bpf (kernel/bpf/syscall.c:6228)
      </TASK>
    
    CO-RE accessor indices are inherently non-negative (struct member index,
    array element index, or enumerator index), so reject them immediately
    after parsing.
    
    Fixes: ddc7c3042614 ("libbpf: implement BPF CO-RE offset relocation algorithm")
    Reported-by: Xiang Mei <[email protected]>
    Signed-off-by: Weiming Shi <[email protected]>
    Reviewed-by: Emil Tsalapatis <[email protected]>
    Acked-by: Paul Chaignon <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: reject short IPv4/IPv6 inputs in bpf_prog_test_run_skb [+ + +]
Author: Sun Jian <[email protected]>
Date:   Wed Apr 8 11:46:22 2026 +0800

    bpf: reject short IPv4/IPv6 inputs in bpf_prog_test_run_skb
    
    [ Upstream commit 12bec2bd4b76d81c5d3996bd14ec1b7f4d983747 ]
    
    bpf_prog_test_run_skb() calls eth_type_trans() first and then uses
    skb->protocol to initialize sk family and address fields for the test
    run.
    
    For IPv4 and IPv6 packets, it may access ip_hdr(skb) or ipv6_hdr(skb)
    even when the provided test input only contains an Ethernet header.
    
    Reject the input earlier if the Ethernet frame carries IPv4/IPv6
    EtherType but the L3 header is too short.
    
    Fold the IPv4/IPv6 header length checks into the existing protocol
    switch and return -EINVAL before accessing the network headers.
    
    Fixes: fa5cb548ced6 ("bpf: Setup socket family and addresses in bpf_prog_test_run_skb")
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=619b9ef527f510a57cfc
    Signed-off-by: Sun Jian <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: test_run: Fix the null pointer dereference issue in bpf_lwt_xmit_push_encap [+ + +]
Author: Feng Yang <[email protected]>
Date:   Wed Mar 4 17:44:28 2026 +0800

    bpf: test_run: Fix the null pointer dereference issue in bpf_lwt_xmit_push_encap
    
    [ Upstream commit 972787479ee73006fddb5e59ab5c8e733810ff42 ]
    
    The bpf_lwt_xmit_push_encap helper needs to access skb_dst(skb)->dev to
    calculate the needed headroom:
    
            err = skb_cow_head(skb,
                               len + LL_RESERVED_SPACE(skb_dst(skb)->dev));
    
    But skb->_skb_refdst may not be initialized when the skb is set up by
    bpf_prog_test_run_skb function. Executing bpf_lwt_push_ip_encap function
    in this scenario will trigger null pointer dereference, causing a kernel
    crash as Yinhao reported:
    
    [  105.186365] BUG: kernel NULL pointer dereference, address: 0000000000000000
    [  105.186382] #PF: supervisor read access in kernel mode
    [  105.186388] #PF: error_code(0x0000) - not-present page
    [  105.186393] PGD 121d3d067 P4D 121d3d067 PUD 106c83067 PMD 0
    [  105.186404] Oops: 0000 [#1] PREEMPT SMP NOPTI
    [  105.186412] CPU: 3 PID: 3250 Comm: poc Kdump: loaded Not tainted 6.19.0-rc5 #1
    [  105.186423] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    [  105.186427] RIP: 0010:bpf_lwt_push_ip_encap+0x1eb/0x520
    [  105.186443] Code: 0f 84 de 01 00 00 0f b7 4a 04 66 85 c9 0f 85 47 01 00 00 31 c0 5b 5d 41 5c 41 5d 41 5e c3 cc cc cc cc 48 8b 73 58 48 83 e6 fe <48> 8b 36 0f b7 be ec 00 00 00 0f b7 b6 e6 00 00 00 01 fe 83 e6 f0
    [  105.186449] RSP: 0018:ffffbb0e0387bc50 EFLAGS: 00010246
    [  105.186455] RAX: 000000000000004e RBX: ffff94c74e036500 RCX: ffff94c74874da00
    [  105.186460] RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff94c74e036500
    [  105.186463] RBP: 0000000000000001 R08: 0000000000000002 R09: 0000000000000000
    [  105.186467] R10: ffffbb0e0387bd50 R11: 0000000000000000 R12: ffffbb0e0387bc98
    [  105.186471] R13: 0000000000000014 R14: 0000000000000000 R15: 0000000000000002
    [  105.186484] FS:  00007f166aa4d680(0000) GS:ffff94c8b7780000(0000) knlGS:0000000000000000
    [  105.186490] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  105.186494] CR2: 0000000000000000 CR3: 000000015eade001 CR4: 0000000000770ee0
    [  105.186499] PKRU: 55555554
    [  105.186502] Call Trace:
    [  105.186507]  <TASK>
    [  105.186513]  bpf_lwt_xmit_push_encap+0x2b/0x40
    [  105.186522]  bpf_prog_a75eaad51e517912+0x41/0x49
    [  105.186536]  ? kvm_clock_get_cycles+0x18/0x30
    [  105.186547]  ? ktime_get+0x3c/0xa0
    [  105.186554]  bpf_test_run+0x195/0x320
    [  105.186563]  ? bpf_test_run+0x10f/0x320
    [  105.186579]  bpf_prog_test_run_skb+0x2f5/0x4f0
    [  105.186590]  __sys_bpf+0x69c/0xa40
    [  105.186603]  __x64_sys_bpf+0x1e/0x30
    [  105.186611]  do_syscall_64+0x59/0x110
    [  105.186620]  entry_SYSCALL_64_after_hwframe+0x76/0xe0
    [  105.186649] RIP: 0033:0x7f166a97455d
    
    Temporarily add the setting of skb->_skb_refdst before bpf_test_run to resolve the issue.
    
    Fixes: 52f278774e79 ("bpf: implement BPF_LWT_ENCAP_IP mode in bpf_lwt_push_encap")
    Reported-by: Yinhao Hu <[email protected]>
    Reported-by: Kaiyan Mei <[email protected]>
    Closes: https://groups.google.com/g/hust-os-kernel-patches/c/8-a0kPpBW2s
    Signed-off-by: Yun Lu <[email protected]>
    Signed-off-by: Feng Yang <[email protected]>
    Signed-off-by: Martin KaFai Lau <[email protected]>
    Tested-by: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

bpf: Use RCU-safe iteration in dev_map_redirect_multi() SKB path [+ + +]
Author: David Carlier <[email protected]>
Date:   Fri Mar 20 07:26:45 2026 +0000

    bpf: Use RCU-safe iteration in dev_map_redirect_multi() SKB path
    
    [ Upstream commit 8ed82f807bb09d2c8455aaa665f2c6cb17bc6a19 ]
    
    The DEVMAP_HASH branch in dev_map_redirect_multi() uses
    hlist_for_each_entry_safe() to iterate hash buckets, but this function
    runs under RCU protection (called from xdp_do_generic_redirect_map()
    in softirq context). Concurrent writers (__dev_map_hash_update_elem,
    dev_map_hash_delete_elem) modify the list using RCU primitives
    (hlist_add_head_rcu, hlist_del_rcu).
    
    hlist_for_each_entry_safe() performs plain pointer dereferences without
    rcu_dereference(), missing the acquire barrier needed to pair with
    writers' rcu_assign_pointer(). On weakly-ordered architectures (ARM64,
    POWER), a reader can observe a partially-constructed node. It also
    defeats CONFIG_PROVE_RCU lockdep validation and KCSAN data-race
    detection.
    
    Replace with hlist_for_each_entry_rcu() using rcu_read_lock_bh_held()
    as the lockdep condition, consistent with the rcu_dereference_check()
    used in the DEVMAP (non-hash) branch of the same functions. Also fix
    the same incorrect lockdep_is_held(&dtab->index_lock) condition in
    dev_map_enqueue_multi(), where the lock is not held either.
    
    Fixes: e624d4ed4aa8 ("xdp: Extend xdp_redirect_map with broadcast support")
    Signed-off-by: David Carlier <[email protected]>
    Signed-off-by: Martin KaFai Lau <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
btrfs: fix double free in create_space_info_sub_group() error path [+ + +]
Author: Guangshuo Li <[email protected]>
Date:   Fri May 15 10:48:20 2026 -0400

    btrfs: fix double free in create_space_info_sub_group() error path
    
    [ Upstream commit a7449edf96143f192606ec8647e3167e1ecbd728 ]
    
    When kobject_init_and_add() fails, the call chain is:
    
    create_space_info_sub_group()
    -> btrfs_sysfs_add_space_info_type()
    -> kobject_init_and_add()
    -> failure
    -> kobject_put(&sub_group->kobj)
    -> space_info_release()
    -> kfree(sub_group)
    
    Then control returns to create_space_info_sub_group(), where:
    
    btrfs_sysfs_add_space_info_type() returns error
    -> kfree(sub_group)
    
    Thus, sub_group is freed twice.
    
    Keep parent->sub_group[index] = NULL for the failure path, but after
    btrfs_sysfs_add_space_info_type() has called kobject_put(), let the
    kobject release callback handle the cleanup.
    
    Fixes: f92ee31e031c ("btrfs: introduce btrfs_space_info sub-group")
    CC: [email protected] # 6.18+
    Reviewed-by: Qu Wenruo <[email protected]>
    Signed-off-by: Guangshuo Li <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: fix double-decrement of bytes_may_use in submit_one_async_extent() [+ + +]
Author: Mark Harmstone <[email protected]>
Date:   Thu Apr 16 18:15:23 2026 +0100

    btrfs: fix double-decrement of bytes_may_use in submit_one_async_extent()
    
    [ Upstream commit 82323b1a7088b7a5c3e528a5d634bff447fa286f ]
    
    submit_one_async_extent() calls btrfs_reserve_extent(), which decrements
    bytes_may_use. If the call btrfs_create_io_em() fails, we jump to
    out_free_reserve, which calls extent_clear_unlock_delalloc().
    
    Because we're specifying EXTENT_DO_ACCOUNTING, i.e.
    EXTENT_CLEAR_META_RESV | EXTENT_CLEAR_DATA_RESV, this decreases
    bytes_may_use again. This can lead to problems later on, as an initial
    write can fail only for the writeback to silently ENOSPC.
    
    Fix this by replacing EXTENT_DO_ACCOUNTING with EXTENT_CLEAR_META_RESV.
    This parallels a4fe134fc1d8eb ("btrfs: fix a double release on reserved
    extents in cow_one_range()"), which is the same fix in cow_one_range().
    
    Fixes: 151a41bc46df ("Btrfs: fix what bits we clear when erroring out from delalloc")
    Reviewed-by: Qu Wenruo <[email protected]>
    Signed-off-by: Mark Harmstone <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

btrfs: fix missing last_unlink_trans update when removing a directory [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Sun May 17 09:52:04 2026 -0400

    btrfs: fix missing last_unlink_trans update when removing a directory
    
    [ Upstream commit 999757231c49376cd1a37308d2c8c4c9932571e1 ]
    
    When removing a directory we are not updating its last_unlink_trans field,
    which can result in incorrect fsync behaviour in case some one fsyncs the
    directory after it was removed because it's holding a file descriptor on
    it.
    
    Example scenario:
    
       mkdir /mnt/dir1
       mkdir /mnt/dir1/dir2
       mkdir /mnt/dir3
    
       sync -f /mnt
    
       # Do some change to the directory and fsync it.
       chmod 700 /mnt/dir1
       xfs_io -c fsync /mnt/dir1
    
       # Move dir2 out of dir1 so that dir1 becomes empty.
       mv /mnt/dir1/dir2 /mnt/dir3/
    
       open fd on /mnt/dir1
       call rmdir(2) on path "/mnt/dir1"
       fsync fd
    
       <trigger power failure>
    
    When attempting to mount the filesystem, the log replay will fail with
    an -EIO error and dmesg/syslog has the following:
    
       [445771.626482] BTRFS info (device dm-0): first mount of filesystem 0368bbea-6c5e-44b5-b409-09abe496e650
       [445771.626486] BTRFS info (device dm-0): using crc32c checksum algorithm
       [445771.627912] BTRFS info (device dm-0): start tree-log replay
       [445771.628335] page: refcount:2 mapcount:0 mapping:0000000061443ddc index:0x1d00 pfn:0x7072a5
       [445771.629453] memcg:ffff89f400351b00
       [445771.629892] aops:btree_aops [btrfs] ino:1
       [445771.630737] flags: 0x17fffc00000402a(uptodate|lru|private|writeback|node=0|zone=2|lastcpupid=0x1ffff)
       [445771.632359] raw: 017fffc00000402a fffff47284d950c8 fffff472907b7c08 ffff89f458e412b8
       [445771.633713] raw: 0000000000001d00 ffff89f6c51d1a90 00000002ffffffff ffff89f400351b00
       [445771.635029] page dumped because: eb page dump
       [445771.635825] BTRFS critical (device dm-0): corrupt leaf: root=5 block=30408704 slot=10 ino=258, invalid nlink: has 2 expect no more than 1 for dir
       [445771.638088] BTRFS info (device dm-0): leaf 30408704 gen 10 total ptrs 17 free space 14878 owner 5
       [445771.638091] BTRFS info (device dm-0): refs 4 lock_owner 0 current 3581087
       [445771.638094]      item 0 key (256 INODE_ITEM 0) itemoff 16123 itemsize 160
       [445771.638097]              inode generation 3 transid 9 size 16 nbytes 16384
       [445771.638098]              block group 0 mode 40755 links 1 uid 0 gid 0
       [445771.638100]              rdev 0 sequence 2 flags 0x0
       [445771.638102]              atime 1775744884.0
       [445771.660056]              ctime 1775744885.645502983
       [445771.660058]              mtime 1775744885.645502983
       [445771.660060]              otime 1775744884.0
       [445771.660062]      item 1 key (256 INODE_REF 256) itemoff 16111 itemsize 12
       [445771.660064]              index 0 name_len 2
       [445771.660066]      item 2 key (256 DIR_ITEM 1843588421) itemoff 16077 itemsize 34
       [445771.660068]              location key (259 1 0) type 2
       [445771.660070]              transid 9 data_len 0 name_len 4
       [445771.660075]      item 3 key (256 DIR_ITEM 2363071922) itemoff 16043 itemsize 34
       [445771.660076]              location key (257 1 0) type 2
       [445771.660077]              transid 9 data_len 0 name_len 4
       [445771.660078]      item 4 key (256 DIR_INDEX 2) itemoff 16009 itemsize 34
       [445771.660079]              location key (257 1 0) type 2
       [445771.660080]              transid 9 data_len 0 name_len 4
       [445771.660081]      item 5 key (256 DIR_INDEX 3) itemoff 15975 itemsize 34
       [445771.660082]              location key (259 1 0) type 2
       [445771.660083]              transid 9 data_len 0 name_len 4
       [445771.660084]      item 6 key (257 INODE_ITEM 0) itemoff 15815 itemsize 160
       [445771.660086]              inode generation 9 transid 9 size 8 nbytes 0
       [445771.660087]              block group 0 mode 40777 links 1 uid 0 gid 0
       [445771.660088]              rdev 0 sequence 2 flags 0x0
       [445771.660089]              atime 1775744885.641174097
       [445771.660090]              ctime 1775744885.645502983
       [445771.660091]              mtime 1775744885.645502983
       [445771.660105]              otime 1775744885.641174097
       [445771.660106]      item 7 key (257 INODE_REF 256) itemoff 15801 itemsize 14
       [445771.660107]              index 2 name_len 4
       [445771.660108]      item 8 key (257 DIR_ITEM 2676584006) itemoff 15767 itemsize 34
       [445771.660109]              location key (258 1 0) type 2
       [445771.660110]              transid 9 data_len 0 name_len 4
       [445771.660111]      item 9 key (257 DIR_INDEX 2) itemoff 15733 itemsize 34
       [445771.660112]              location key (258 1 0) type 2
       [445771.660113]              transid 9 data_len 0 name_len 4
       [445771.660114]      item 10 key (258 INODE_ITEM 0) itemoff 15573 itemsize 160
       [445771.660115]              inode generation 9 transid 10 size 0 nbytes 0
       [445771.660116]              block group 0 mode 40755 links 2 uid 0 gid 0
       [445771.660117]              rdev 0 sequence 0 flags 0x0
       [445771.660118]              atime 1775744885.645502983
       [445771.660119]              ctime 1775744885.645502983
       [445771.660120]              mtime 1775744885.645502983
       [445771.660121]              otime 1775744885.645502983
       [445771.660122]      item 11 key (258 INODE_REF 257) itemoff 15559 itemsize 14
       [445771.660123]              index 2 name_len 4
       [445771.660124]      item 12 key (258 INODE_REF 259) itemoff 15545 itemsize 14
       [445771.660125]              index 2 name_len 4
       [445771.660126]      item 13 key (259 INODE_ITEM 0) itemoff 15385 itemsize 160
       [445771.660127]              inode generation 9 transid 10 size 8 nbytes 0
       [445771.660128]              block group 0 mode 40755 links 1 uid 0 gid 0
       [445771.660129]              rdev 0 sequence 1 flags 0x0
       [445771.660130]              atime 1775744885.645502983
       [445771.660130]              ctime 1775744885.645502983
       [445771.660131]              mtime 1775744885.645502983
       [445771.660132]              otime 1775744885.645502983
       [445771.660133]      item 14 key (259 INODE_REF 256) itemoff 15371 itemsize 14
       [445771.660134]              index 3 name_len 4
       [445771.660135]      item 15 key (259 DIR_ITEM 2676584006) itemoff 15337 itemsize 34
       [445771.660136]              location key (258 1 0) type 2
       [445771.660137]              transid 10 data_len 0 name_len 4
       [445771.660138]      item 16 key (259 DIR_INDEX 2) itemoff 15303 itemsize 34
       [445771.660139]              location key (258 1 0) type 2
       [445771.660140]              transid 10 data_len 0 name_len 4
       [445771.660144] BTRFS error (device dm-0): block=30408704 write time tree block corruption detected
       [445771.661650] ------------[ cut here ]------------
       [445771.662358] WARNING: fs/btrfs/disk-io.c:326 at btree_csum_one_bio+0x217/0x230 [btrfs], CPU#8: mount/3581087
       [445771.663588] Modules linked in: btrfs f2fs xfs (...)
       [445771.671229] CPU: 8 UID: 0 PID: 3581087 Comm: mount Tainted: G        W           7.0.0-rc6-btrfs-next-230+ #2 PREEMPT(full)
       [445771.672575] Tainted: [W]=WARN
       [445771.672987] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.2-0-gea1b7a073390-prebuilt.qemu.org 04/01/2014
       [445771.674460] RIP: 0010:btree_csum_one_bio+0x217/0x230 [btrfs]
       [445771.675222] Code: 89 44 24 (...)
       [445771.677364] RSP: 0018:ffffd23882247660 EFLAGS: 00010246
       [445771.678029] RAX: 0000000000000000 RBX: ffff89f6c51d1a90 RCX: 0000000000000000
       [445771.678975] RDX: 0000000000000000 RSI: 0000000000000001 RDI: ffff89f406020000
       [445771.679983] RBP: ffff89f821204000 R08: 0000000000000000 R09: 00000000ffefffff
       [445771.680905] R10: ffffd23882247448 R11: 0000000000000003 R12: ffffd23882247668
       [445771.681978] R13: ffff89f458e40fc0 R14: ffff89f737f4f500 R15: ffff89f737f4f500
       [445771.682912] FS:  00007f0447a98840(0000) GS:ffff89fb9771d000(0000) knlGS:0000000000000000
       [445771.684393] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
       [445771.685230] CR2: 00007f0447bf1330 CR3: 000000017cb02002 CR4: 0000000000370ef0
       [445771.686273] Call Trace:
       [445771.686646]  <TASK>
       [445771.686969]  btrfs_submit_bbio+0x83f/0x860 [btrfs]
       [445771.687750]  ? write_one_eb+0x28f/0x340 [btrfs]
       [445771.688428]  btree_writepages+0x2e3/0x550 [btrfs]
       [445771.689180]  ? kmem_cache_alloc_noprof+0x12a/0x490
       [445771.689963]  ? alloc_extent_state+0x19/0x120 [btrfs]
       [445771.690801]  ? kmem_cache_free+0x135/0x380
       [445771.691328]  ? preempt_count_add+0x69/0xa0
       [445771.691831]  ? set_extent_bit+0x252/0x8e0 [btrfs]
       [445771.692468]  ? xas_load+0x9/0xc0
       [445771.692873]  ? xas_find+0x14d/0x1a0
       [445771.693304]  do_writepages+0xc6/0x160
       [445771.693756]  filemap_writeback+0xb8/0xe0
       [445771.694274]  btrfs_write_marked_extents+0x61/0x170 [btrfs]
       [445771.694999]  btrfs_write_and_wait_transaction+0x4e/0xc0 [btrfs]
       [445771.695818]  btrfs_commit_transaction+0x5c8/0xd10 [btrfs]
       [445771.696530]  ? kmem_cache_free+0x135/0x380
       [445771.697120]  ? release_extent_buffer+0x34/0x160 [btrfs]
       [445771.697786]  btrfs_recover_log_trees+0x7be/0x7e0 [btrfs]
       [445771.698525]  ? __pfx_replay_one_buffer+0x10/0x10 [btrfs]
       [445771.699206]  open_ctree+0x11e5/0x1810 [btrfs]
       [445771.699776]  btrfs_get_tree.cold+0xb/0x162 [btrfs]
       [445771.700463]  ? fscontext_read+0x165/0x180
       [445771.701146]  ? rw_verify_area+0x50/0x180
       [445771.701866]  vfs_get_tree+0x25/0xd0
       [445771.702491]  vfs_cmd_create+0x59/0xe0
       [445771.703125]  __do_sys_fsconfig+0x303/0x610
       [445771.703603]  do_syscall_64+0xe9/0xf20
       [445771.703974]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
       [445771.704700] RIP: 0033:0x7f0447cbd4aa
       [445771.705108] Code: 73 01 c3 (...)
       [445771.707263] RSP: 002b:00007ffc4e528318 EFLAGS: 00000246 ORIG_RAX: 00000000000001af
       [445771.708107] RAX: ffffffffffffffda RBX: 00005561585d8c20 RCX: 00007f0447cbd4aa
       [445771.708931] RDX: 0000000000000000 RSI: 0000000000000006 RDI: 0000000000000003
       [445771.709744] RBP: 00005561585d9120 R08: 0000000000000000 R09: 0000000000000000
       [445771.710674] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
       [445771.711477] R13: 00007f0447e4f580 R14: 00007f0447e5126c R15: 00007f0447e36a23
       [445771.712277]  </TASK>
       [445771.712541] ---[ end trace 0000000000000000 ]---
       [445771.713382] BTRFS error (device dm-0): error while writing out transaction: -5
       [445771.714679] BTRFS warning (device dm-0): Skipping commit of aborted transaction.
       [445771.715562] BTRFS error (device dm-0 state A): Transaction aborted (error -5)
       [445771.716459] BTRFS: error (device dm-0 state A) in cleanup_transaction:2068: errno=-5 IO failure
       [445771.717936] BTRFS error (device dm-0 state EA): failed to recover log trees with error: -5
       [445771.719681] BTRFS error (device dm-0 state EA): open_ctree failed: -5
    
    The problem is that such a fsync should have result in a fallback to a
    transaction commit, but that did not happen because through the
    btrfs_rmdir() we never update the directory's last_unlink_trans field.
    Any inode that had a link removed must have its last_unlink_trans updated
    to the ID of transaction used for the operation, otherwise fsync and log
    replay will not work correctly.
    
    btrfs_rmdir() calls btrfs_unlink_inode() and through that call chain we
    never call btrfs_record_unlink_dir() in order to update last_unlink_trans.
    However btrfs_unlink(), which is used for unlinking regular files, calls
    btrfs_record_unlink_dir() and then calls btrfs_unlink_inode(). So fix
    this by moving the call to btrfs_record_unlink_dir() from btrfs_unlink()
    to btrfs_unlink_inode().
    
    A test case for fstests will follow soon.
    
    Reported-by: Slava0135 <[email protected]>
    Link: https://lore.kernel.org/linux-btrfs/CAAJYhww5ov62Hm+n+tmhcL-e_4cBobg+OWogKjOJxVUXivC=MQ@mail.gmail.com/
    CC: [email protected]
    Signed-off-by: Filipe Manana <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: remove fs_info argument from btrfs_sysfs_add_space_info_type() [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Fri May 15 10:48:19 2026 -0400

    btrfs: remove fs_info argument from btrfs_sysfs_add_space_info_type()
    
    [ Upstream commit 771af6ff72e0ed0eb8bf97e5ae4fa5094e0c5d1d ]
    
    We don't need it since we can grab fs_info from the given space_info.
    So remove the fs_info argument.
    
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Stable-dep-of: a7449edf9614 ("btrfs: fix double free in create_space_info_sub_group() error path")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: use btrfs inodes in btrfs_rmdir() to avoid so much usage of BTRFS_I() [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Sun May 17 09:52:03 2026 -0400

    btrfs: use btrfs inodes in btrfs_rmdir() to avoid so much usage of BTRFS_I()
    
    [ Upstream commit 98060e1611177ddc842601a58258876ab435fdbf ]
    
    Almost everywhere we want to use a btrfs inode and therefore we have a
    lot of calls to BTRFS_I(), making the code more verbose. Instead use btrfs
    inode local variables to avoid so much use of BTRFS_I().
    
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Reviewed-by: Qu Wenruo <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Stable-dep-of: 999757231c49 ("btrfs: fix missing last_unlink_trans update when removing a directory")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: use inode already stored in local variable at btrfs_rmdir() [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Sun May 17 09:52:02 2026 -0400

    btrfs: use inode already stored in local variable at btrfs_rmdir()
    
    [ Upstream commit 9f82a4ed34d870b5719f9b95f7da4f74d3325a6f ]
    
    There's no need to call d_inode(dentry) when calling btrfs_unlink_inode()
    since we have already stored that in a local inode variable. So just use
    the local variable to make the code less verbose.
    
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Reviewed-by: Qu Wenruo <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Stable-dep-of: 999757231c49 ("btrfs: fix missing last_unlink_trans update when removing a directory")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cdrom, scsi: sr: propagate read-only status to block layer via set_disk_ro() [+ + +]
Author: Daan De Meyer <[email protected]>
Date:   Mon Apr 27 22:01:39 2026 +0100

    cdrom, scsi: sr: propagate read-only status to block layer via set_disk_ro()
    
    [ Upstream commit 0898a817621a2f0cddca8122d9b974003fe5036d ]
    
    The cdrom core never calls set_disk_ro() for a registered device, so
    BLKROGET on a CD-ROM device always returns 0 (writable), even when the
    drive has no write capabilities and writes will inevitably fail. This
    causes problems for userspace that relies on BLKROGET to determine
    whether a block device is read-only. For example, systemd's loop device
    setup uses BLKROGET to decide whether to create a loop device with
    LO_FLAGS_READ_ONLY. Without the read-only flag, writes pass through the
    loop device to the CD-ROM and fail with I/O errors. systemd-fsck
    similarly checks BLKROGET to decide whether to run fsck in no-repair
    mode (-n).
    
    The write-capability bits in cdi->mask come from two different sources:
    CDC_DVD_RAM and CDC_CD_RW are populated by the driver from the MODE
    SENSE capabilities page (page 0x2A) before register_cdrom() is called,
    while CDC_MRW_W and CDC_RAM require the MMC GET CONFIGURATION command
    and were only probed by cdrom_open_write() at device open time. This
    meant that any attempt to compute the writable state from the full
    mask at probe time was incorrect, because the GET CONFIGURATION bits
    were still unset (and cdi->mask is initialized such that capabilities
    are assumed present).
    
    Fix this by factoring the GET CONFIGURATION probing out of
    cdrom_open_write() into a new exported helper,
    cdrom_probe_write_features(), and having sr call it from sr_probe()
    right after get_capabilities() has populated the MODE SENSE bits.
    register_cdrom() then calls set_disk_ro() based on the full
    write-capability mask (CDC_DVD_RAM | CDC_MRW_W | CDC_RAM | CDC_CD_RW)
    so the block layer reflects the drive's actual write support. The
    feature queries used (CDF_MRW and CDF_RWRT via GET CONFIGURATION with
    RT=00) report drive-level capabilities that are persistent across
    media, so a single probe before register_cdrom() is sufficient and the
    redundant probe at open time is dropped.
    
    With set_disk_ro() now accurate, the long-vestigial cd->writeable flag
    in sr can go: get_capabilities() used to set cd->writeable based on
    the same four mask bits, but because CDC_MRW_W and CDC_RAM default to
    "capability present" in cdi->mask and aren't touched by MODE SENSE,
    the condition that gated cd->writeable was always true, making it
    unconditionally 1. Replace the corresponding gate in sr_init_command()
    with get_disk_ro(cd->disk), which turns a previously no-op check into
    a real one and also catches kernel-internal bio writers that bypass
    blkdev_write_iter()'s bdev_read_only() check.
    
    The sd driver (SCSI disks) does not have this problem because it
    checks the MODE SENSE Write Protect bit and calls set_disk_ro()
    accordingly. The sr driver cannot use the same approach because the
    MMC specification does not define the WP bit in the MODE SENSE
    device-specific parameter byte for CD-ROM devices.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Daan De Meyer <[email protected]>
    Reviewed-by: Phillip Potter <[email protected]>
    Reviewed-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Phillip Potter <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ceph: fix a buffer leak in __ceph_setxattr() [+ + +]
Author: Viacheslav Dubeyko <[email protected]>
Date:   Thu Apr 9 12:26:02 2026 -0700

    ceph: fix a buffer leak in __ceph_setxattr()
    
    commit 5d3cc36b4e77a27ce7b686b7c59c7072bcb3fa8e upstream.
    
    The old_blob in __ceph_setxattr() can store
    ci->i_xattrs.prealloc_blob value during the retry.
    However, it is never called the ceph_buffer_put()
    for the old_blob object. This patch fixes the issue of
    the buffer leak.
    
    Cc: [email protected]
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Reviewed-by: Alex Markuze <[email protected]>
    Signed-off-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cgroup/rdma: fix integer overflow in rdmacg_try_charge() [+ + +]
Author: cuitao <[email protected]>
Date:   Tue Apr 14 09:53:27 2026 +0800

    cgroup/rdma: fix integer overflow in rdmacg_try_charge()
    
    [ Upstream commit c802f460dd485c1332b5a35e7adcfb2bc22536a2 ]
    
    The expression `rpool->resources[index].usage + 1` is computed in int
    arithmetic before being assigned to s64 variable `new`. When usage equals
    INT_MAX (the default "max" value), the addition overflows to INT_MIN.
    This negative value then passes the `new > max` check incorrectly,
    allowing a charge that should be rejected and corrupting usage to
    negative.
    
    Fix by casting usage to s64 before the addition so the arithmetic is
    done in 64-bit.
    
    Fixes: 39d3e7584a68 ("rdmacg: Added rdma cgroup controller")
    Signed-off-by: cuitao <[email protected]>
    Reviewed-by: Michal Koutný <[email protected]>
    Signed-off-by: Tejun Heo <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
clk: imx8mq: Correct the CSI PHY sels [+ + +]
Author: Sebastian Krzyszkowiak <[email protected]>
Date:   Wed Jan 28 00:47:21 2026 +0100

    clk: imx8mq: Correct the CSI PHY sels
    
    [ Upstream commit d16f57caa78776e6e8a88b96cb2597797b376138 ]
    
    According to i.MX 8M Quad Reference Manual (Section 5.1.2 Table 5-1)
    MIPI_CSI1_PHY_REF_CLK_ROOT and MIPI_CSI2_PHY_REF_CLK_ROOT have
    SYSTEM_PLL2_DIV3 available as their second source, which corresponds
    to sys2_pll_333m rather than sys2_pll_125m.
    
    Fixes: b80522040cd3 ("clk: imx: Add clock driver for i.MX8MQ CCM")
    Signed-off-by: Sebastian Krzyszkowiak <[email protected]>
    Reviewed-by: Peng Fan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Abel Vesa <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

clk: imx: imx6q: Fix device node reference leak in of_assigned_ldb_sels() [+ + +]
Author: Felix Gu <[email protected]>
Date:   Tue Feb 3 22:07:58 2026 +0800

    clk: imx: imx6q: Fix device node reference leak in of_assigned_ldb_sels()
    
    [ Upstream commit 9faf207208951460f3f7eefbc112246c8d28ff1b ]
    
    The function of_assigned_ldb_sels() calls of_parse_phandle_with_args()
    but never calls of_node_put() to release the reference, causing a memory
    leak.
    
    Fix this by adding proper cleanup calls on all exit paths.
    
    Fixes: 5d283b083800 ("clk: imx6: Fix procedure to switch the parent of LDB_DI_CLK")
    Signed-off-by: Felix Gu <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Reviewed-by: Peng Fan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Abel Vesa <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

clk: imx: imx6q: Fix device node reference leak in pll6_bypassed() [+ + +]
Author: Felix Gu <[email protected]>
Date:   Tue Feb 3 22:07:57 2026 +0800

    clk: imx: imx6q: Fix device node reference leak in pll6_bypassed()
    
    [ Upstream commit 4b84d496c804b470124cd3a08e928df6801d8eae ]
    
    The function pll6_bypassed() calls of_parse_phandle_with_args()
    but never calls of_node_put() to release the reference, causing
    a memory leak.
    
    Fix this by adding proper cleanup calls on all exit paths.
    
    Fixes: 3cc48976e9763 ("clk: imx6q: handle ENET PLL bypass")
    Signed-off-by: Felix Gu <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Reviewed-by: Peng Fan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Abel Vesa <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

clk: qcom: dispcc-sc7180: Add missing MDSS resets [+ + +]
Author: Konrad Dybcio <[email protected]>
Date:   Tue Jan 20 12:19:26 2026 +0100

    clk: qcom: dispcc-sc7180: Add missing MDSS resets
    
    [ Upstream commit b0bc6011c5499bdfddd0390262bfa13dce1eff74 ]
    
    The MDSS resets have so far been left undescribed. Fix that.
    
    Fixes: dd3d06622138 ("clk: qcom: Add display clock controller driver for SC7180")
    Signed-off-by: Konrad Dybcio <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Taniya Das <[email protected]>
    Tested-by: Val Packett <[email protected]> # sc7180-ecs-liva-qc710
    Link: https://lore.kernel.org/r/20260120-topic-7180_dispcc_bcr-v1-2-0b1b442156c3@oss.qualcomm.com
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

clk: qcom: dispcc-sc8280xp: remove CLK_SET_RATE_PARENT from byte_div_clk_src dividers [+ + +]
Author: White Lewis <[email protected]>
Date:   Tue Mar 3 19:55:50 2026 +0800

    clk: qcom: dispcc-sc8280xp: remove CLK_SET_RATE_PARENT from byte_div_clk_src dividers
    
    [ Upstream commit 0b151a6307205eb867250985a910a88787cbf12e ]
    
    The four byte_div_clk_src dividers (disp{0,1}_cc_mdss_byte{0,1}_div_clk_src)
    had CLK_SET_RATE_PARENT set. When the DSI driver calls clk_set_rate() on
    byte_intf_clk, the rate-change propagates through the divider up to the
    parent PLL (byte_clk_src), halving the byte clock rate.
    
    A simiar issue had been also encountered on SM8750.
    b8501febdc51 ("clk: qcom: dispcc-sm8750: Drop incorrect CLK_SET_RATE_PARENT on byte intf parent").
    
    Likewise, remove CLK_SET_RATE_PARENT from all four byte divider clocks
    so that clk_set_rate() on the divider adjusts only the divider ratio,
    leaving the parent PLL untouched.
    
    Fixes: 4a66e76fdb6d ("clk: qcom: Add SC8280XP display clock controller")
    Signed-off-by: White Lewis <[email protected]>
    [pengyu: reword]
    Signed-off-by: Pengyu Luo <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[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]>

clk: qcom: dispcc-sm8250: Enable parents for pixel clocks [+ + +]
Author: Val Packett <[email protected]>
Date:   Thu Mar 12 08:12:13 2026 -0300

    clk: qcom: dispcc-sm8250: Enable parents for pixel clocks
    
    [ Upstream commit acf7a91d0b0e9e3ef374944021de62062125b7e4 ]
    
    Add CLK_OPS_PARENT_ENABLE to MDSS pixel clock sources to ensure parent
    clocks are enabled during clock operations, preventing potential
    stability issues during display configuration.
    
    Fixes: 80a18f4a8567 ("clk: qcom: Add display clock controller driver for SM8150 and SM8250")
    Signed-off-by: Val Packett <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

clk: qcom: dispcc-sm8250: Use shared ops on the mdss vsync clk [+ + +]
Author: Val Packett <[email protected]>
Date:   Thu Mar 12 08:12:12 2026 -0300

    clk: qcom: dispcc-sm8250: Use shared ops on the mdss vsync clk
    
    [ Upstream commit 8c522da70f0c2e5148c4c13ccb1c64cca57a6fdb ]
    
    mdss_gdsc can get stuck on boot due to RCGs being left on from last boot.
    As a fix, commit 01a0a6cc8cfd ("clk: qcom: Park shared RCGs upon
    registration") introduced a callback to ensure the RCG is off upon init.
    However, the fix depends on all shared RCGs being marked as such in code.
    
    For SM8150/SC8180X/SM8250 the MDSS vsync clock was using regular ops,
    unlike the same clock in the SC7180 code. This was causing display to
    frequently fail to initialize after rebooting on the Surface Pro X.
    Fix by using shared ops for this clock.
    
    Fixes: 80a18f4a8567 ("clk: qcom: Add display clock controller driver for SM8150 and SM8250")
    Signed-off-by: Val Packett <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

clk: qcom: dispcc-sm8450: use RCG2 ops for DPTX1 AUX clock source [+ + +]
Author: Dmitry Baryshkov <[email protected]>
Date:   Mon Jan 12 04:12:23 2026 +0200

    clk: qcom: dispcc-sm8450: use RCG2 ops for DPTX1 AUX clock source
    
    [ Upstream commit 141af1be817c42c7f1e1605348d4b1983d319bea ]
    
    The clk_dp_ops are supposed to be used for DP-related clocks with a
    proper MND divier. Use standard RCG2 ops for dptx1_aux_clk_src, the same
    as all other DPTX AUX clocks in this driver.
    
    Fixes: 16fb89f92ec4 ("clk: qcom: Add support for Display Clock Controller on SM8450")
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Abel Vesa <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Reviewed-by: Taniya Das <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

clk: qcom: gcc-sc8180x: Add missing GDSCs [+ + +]
Author: Val Packett <[email protected]>
Date:   Thu Mar 12 08:12:07 2026 -0300

    clk: qcom: gcc-sc8180x: Add missing GDSCs
    
    [ Upstream commit 3565741eb985a8a7cc6656eb33496195468cb99e ]
    
    There are 5 more GDSCs that we were ignoring and not putting to sleep,
    which are listed in downstream DTS. Add them.
    
    Fixes: 4433594bbe5d ("clk: qcom: gcc: Add global clock controller driver for SC8180x")
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Signed-off-by: Val Packett <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

clk: qcom: gcc-sc8180x: Use retention for PCIe power domains [+ + +]
Author: Val Packett <[email protected]>
Date:   Thu Mar 12 08:12:09 2026 -0300

    clk: qcom: gcc-sc8180x: Use retention for PCIe power domains
    
    [ Upstream commit ccb92c78b42edd26225b4d5920847dfee3e1b093 ]
    
    As the PCIe host controller driver does not yet support dealing with the
    loss of state during suspend, use retention for relevant GDSCs.
    
    This fixes the link not surviving upon resume:
    
        nvme 0002:01:00.0: Unable to change power state from D3cold to D0, device inaccessible
        nvme nvme0: controller is down; will reset: CSTS=0xffffffff, PCI_STATUS read failed (134)
        nvme 0002:01:00.0: Unable to change power state from D3cold to D0, device inaccessible
        nvme nvme0: Disabling device after reset failure: -19
    
    Fixes: 4433594bbe5d ("clk: qcom: gcc: Add global clock controller driver for SC8180x")
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Signed-off-by: Val Packett <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Reviewed-by: Manivannan Sadhasivam <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

clk: qcom: gcc-sc8180x: Use retention for USB power domains [+ + +]
Author: Val Packett <[email protected]>
Date:   Thu Mar 12 08:12:08 2026 -0300

    clk: qcom: gcc-sc8180x: Use retention for USB power domains
    
    [ Upstream commit 25bc96f26cd6c19dde13a0b9859183e531d6fbfc ]
    
    The USB subsystem does not expect to lose its state on suspend:
    
        xhci-hcd xhci-hcd.0.auto: xHC error in resume, USBSTS 0x401, Reinit
        usb usb1: root hub lost power or was reset
    
    (The reinitialization usually succeeds, but it does slow down resume.)
    
    To maintain state during suspend, the relevant GDSCs need to stay in
    retention mode, like they do on other similar SoCs. Change the mode to
    PWRSTS_RET_ON to fix.
    
    Fixes: 4433594bbe5d ("clk: qcom: gcc: Add global clock controller driver for SC8180x")
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Signed-off-by: Val Packett <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

clk: qoriq: avoid format string warning [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Fri Mar 20 16:18:49 2026 +0100

    clk: qoriq: avoid format string warning
    
    [ Upstream commit 096abbb6682ee031a0f5ce9f4c71ead9fa63d31e ]
    
    clang-22 warns about the use of non-variadic format arguments passed into
    snprintf():
    
    drivers/clk/clk-qoriq.c:925:39: error: diagnostic behavior may be improved by adding the
          'format(printf, 7, 8)' attribute to the declaration of 'create_mux_common' [-Werror,-Wmissing-format-attribute]
      910 | static struct clk * __init create_mux_common(struct clockgen *cg,
          | __attribute__((format(printf, 7, 8)))
      911 |                                              struct mux_hwclock *hwc,
      912 |                                              const struct clk_ops *ops,
      913 |                                              unsigned long min_rate,
      914 |                                              unsigned long max_rate,
      915 |                                              unsigned long pct80_rate,
      916 |                                              const char *fmt, int idx)
      917 | {
      918 |         struct clk_init_data init = {};
      919 |         struct clk *clk;
      920 |         const struct clockgen_pll_div *div;
      921 |         const char *parent_names[NUM_MUX_PARENTS];
      922 |         char name[32];
      923 |         int i, j;
      924 |
      925 |         snprintf(name, sizeof(name), fmt, idx);
          |                                              ^
    drivers/clk/clk-qoriq.c:910:28: note: 'create_mux_common' declared here
      910 | static struct clk * __init create_mux_common(struct clockgen *cg,
    
    Rework this to pass the 'int idx' as a varargs argument, allowing the
    format string to be verified at the caller location.
    
    Fixes: 0dfc86b3173f ("clk: qoriq: Move chip-specific knowledge into driver")
    Signed-off-by: Arnd Bergmann <[email protected]>
    Reviewed-by: Kees Cook <[email protected]>
    Signed-off-by: Stephen Boyd <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

clk: visconti: pll: initialize clk_init_data to zero [+ + +]
Author: Brian Masney <[email protected]>
Date:   Mon Mar 30 10:32:37 2026 -0400

    clk: visconti: pll: initialize clk_init_data to zero
    
    [ Upstream commit 1603cbb64173a0e9fa7500f2a686f4aa011c58b9 ]
    
    Sashiko reported the following:
    
    > The struct clk_init_data init is declared on the stack without being
    > fully zero-initialized. While fields like name, flags, parent_names,
    > num_parents, and ops are explicitly assigned, the parent_data and
    > parent_hws fields are left containing stack garbage.
    
    clk_core_populate_parent_map() currently prefers the parent names over
    the parent data and hws, so this isn't a problem at the moment. If that
    ordering ever changed in the future, then this could lead to some
    unexpected crashes. Let's just go ahead and make sure that the struct
    clk_init_data is initialized to zero as a good practice.
    
    Fixes: b4cbe606dc367 ("clk: visconti: Add support common clock driver and reset driver")
    Link: https://sashiko.dev/#/patchset/20260326042317.122536-1-rosenp%40gmail.com
    Signed-off-by: Brian Masney <[email protected]>
    Reviewed-by: Benoît Monin <[email protected]>
    Reviewed-by: Nobuhiro Iwamatsu <[email protected]>
    Signed-off-by: Stephen Boyd <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

clk: xgene: Fix mapping leak in xgene_pllclk_init() [+ + +]
Author: Geert Uytterhoeven <[email protected]>
Date:   Thu Mar 5 11:11:16 2026 +0100

    clk: xgene: Fix mapping leak in xgene_pllclk_init()
    
    [ Upstream commit f520a492e07bc6718e26cfb7543ab4cadd8bb0e2 ]
    
    If xgene_register_clk_pll() fails, the mapped register block is never
    unmapped.
    
    Fixes: 308964caeebc45eb ("clk: Add APM X-Gene SoC clock driver")
    Signed-off-by: Geert Uytterhoeven <[email protected]>
    Reviewed-by: Brian Masney <[email protected]>
    Signed-off-by: Stephen Boyd <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
crypto: af_alg - Cap AEAD AD length to 0x80000000 [+ + +]
Author: Herbert Xu <[email protected]>
Date:   Tue May 5 17:02:45 2026 +0800

    crypto: af_alg - Cap AEAD AD length to 0x80000000
    
    commit e4c06479d7059888adf2f22bc1ebcf053bf691a2 upstream.
    
    In order to prevent arithmetic overflows when checking the TX
    buffer size, cap the associated data length to 0x80000000.
    
    Reported-by: Yiming Qian <[email protected]>
    Fixes: 400c40cf78da ("crypto: algif - add AEAD support")
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: atmel - Remove cfb and ofb [+ + +]
Author: Herbert Xu <[email protected]>
Date:   Sat Sep 16 17:33:56 2023 +0800

    crypto: atmel - Remove cfb and ofb
    
    [ Upstream commit a16144bda9c332079b6a1db52725e9c22007114d ]
    
    Remove the unused CFB/OFB implementation.
    
    Signed-off-by: Herbert Xu <[email protected]>
    Stable-dep-of: 57a13941c0bb ("crypto: atmel-aes - guard unregister on error in atmel_aes_register_algs")
    Signed-off-by: Sasha Levin <[email protected]>

crypto: atmel - Use unregister_{aeads,ahashes,skciphers} [+ + +]
Author: Thorsten Blum <[email protected]>
Date:   Mon Jan 26 18:47:03 2026 +0100

    crypto: atmel - Use unregister_{aeads,ahashes,skciphers}
    
    [ Upstream commit 2ffc1ef4e826f0c3274f9ff5eb42bc70a5571afd ]
    
    Replace multiple for loops with calls to crypto_unregister_aeads(),
    crypto_unregister_ahashes(), and crypto_unregister_skciphers().
    
    Remove the definition of atmel_tdes_unregister_algs() because it is
    equivalent to calling crypto_unregister_skciphers() directly, and the
    function parameter 'struct atmel_tdes_dev *' is unused anyway.
    
    Signed-off-by: Thorsten Blum <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Stable-dep-of: 57a13941c0bb ("crypto: atmel-aes - guard unregister on error in atmel_aes_register_algs")
    Signed-off-by: Sasha Levin <[email protected]>

crypto: atmel-aes - guard unregister on error in atmel_aes_register_algs [+ + +]
Author: Thorsten Blum <[email protected]>
Date:   Wed Mar 11 12:39:28 2026 +0100

    crypto: atmel-aes - guard unregister on error in atmel_aes_register_algs
    
    [ Upstream commit 57a13941c0bb06ae24e3b34672d7b6f2172b253f ]
    
    Ensure the device supports XTS and GCM with 'has_xts' and 'has_gcm'
    before unregistering algorithms when XTS or authenc registration fails,
    which would trigger a WARN in crypto_unregister_alg().
    
    Currently, with the capabilities defined in atmel_aes_get_cap(), this
    bug cannot happen because all devices that support XTS and authenc also
    support GCM, but the error handling should still be correct regardless
    of hardware capabilities.
    
    Fixes: d52db5188a87 ("crypto: atmel-aes - add support to the XTS mode")
    Signed-off-by: Thorsten Blum <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: ccp - copy IV using skcipher ivsize [+ + +]
Author: Paul Moses <[email protected]>
Date:   Wed Apr 1 03:07:49 2026 -0500

    crypto: ccp - copy IV using skcipher ivsize
    
    [ Upstream commit a7a1f3cdd64d8a165d9b8c9e9ad7fb46ac19dfc4 ]
    
    AF_ALG rfc3686-ctr-aes-ccp requests pass an 8-byte IV to the driver.
    
    ccp_aes_complete() restores AES_BLOCK_SIZE bytes into the caller's IV
    buffer while RFC3686 skciphers expose an 8-byte IV, so the restore
    overruns the provided buffer.
    
    Use crypto_skcipher_ivsize() to copy only the algorithm's IV length.
    
    Fixes: 2b789435d7f3 ("crypto: ccp - CCP AES crypto API support")
    Signed-off-by: Paul Moses <[email protected]>
    Reviewed-by: Tom Lendacky <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: jitterentropy - replace long-held spinlock with mutex [+ + +]
Author: Haixin Xu <[email protected]>
Date:   Mon Mar 30 15:23:46 2026 +0800

    crypto: jitterentropy - replace long-held spinlock with mutex
    
    [ Upstream commit 01d798e9feb30212952d4e992801ba6bd6a82351 ]
    
    jent_kcapi_random() serializes the shared jitterentropy state, but it
    currently holds a spinlock across the jent_read_entropy() call. That
    path performs expensive jitter collection and SHA3 conditioning, so
    parallel readers can trigger stalls as contending waiters spin for
    the same lock.
    
    To prevent non-preemptible lock hold, replace rng->jent_lock with a
    mutex so contended readers sleep instead of spinning on a shared lock
    held across expensive entropy generation.
    
    Fixes: bb5530e40824 ("crypto: jitterentropy - add jitterentropy RNG")
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Reported-by: Yuan Tan <[email protected]>
    Suggested-by: Xin Liu <[email protected]>
    Signed-off-by: Haixin Xu <[email protected]>
    Reviewed-by: Stephan Mueller <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

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

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

crypto: qat - use swab32 macro [+ + +]
Author: Giovanni Cabiddu <[email protected]>
Date:   Sat Mar 28 22:29:46 2026 +0000

    crypto: qat - use swab32 macro
    
    [ Upstream commit 35ecb77ae0749a2f1b04872c9978d9d7ddbbeb79 ]
    
    Replace __builtin_bswap32() with swab32 in icp_qat_hw_20_comp.h to fix
    the following build errors on architectures without native byte-swap
    support:
    
       alpha-linux-ld: drivers/crypto/intel/qat/qat_common/adf_gen4_hw_data.o: in function `adf_gen4_build_decomp_block':
       drivers/crypto/intel/qat/qat_common/icp_qat_hw_20_comp.h:141:(.text+0xeec): undefined reference to `__bswapsi2'
       alpha-linux-ld: drivers/crypto/intel/qat/qat_common/icp_qat_hw_20_comp.h:141:(.text+0xef8): undefined reference to `__bswapsi2'
       alpha-linux-ld: drivers/crypto/intel/qat/qat_common/adf_gen4_hw_data.o: in function `adf_gen4_build_comp_block':
       drivers/crypto/intel/qat/qat_common/icp_qat_hw_20_comp.h:57:(.text+0xf64): undefined reference to `__bswapsi2'
       alpha-linux-ld: drivers/crypto/intel/qat/qat_common/icp_qat_hw_20_comp.h:57:(.text+0xf7c): undefined reference to `__bswapsi2'
    
    Fixes: 5b14b2b307e4 ("crypto: qat - enable deflate for QAT GEN4")
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Signed-off-by: Giovanni Cabiddu <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: sa2ul - Fix AEAD fallback algorithm names [+ + +]
Author: T Pratham <[email protected]>
Date:   Wed Apr 15 20:06:58 2026 +0530

    crypto: sa2ul - Fix AEAD fallback algorithm names
    
    [ Upstream commit 8451ab6ad686ffdcdf9ddadaa446a79ab48e5590 ]
    
    For authenc AEAD algorithms, sa2ul is trying to register very specific
    -ce version as a fallback. This causes registration failure on SoCs
    which do not have ARMv8-CE enabled/available. Change the fallback
    algorithm from the specific driver name to generic algorithm name so
    that the kernel can allocate any available fallback.
    
    Fixes: d2c8ac187fc92 ("crypto: sa2ul - Add AEAD algorithm support")
    Signed-off-by: T Pratham <[email protected]>
    Reviewed-by: Manorit Chawdhry <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
debugfs: check for NULL pointer in debugfs_create_str() [+ + +]
Author: Gui-Dong Han <[email protected]>
Date:   Mon Mar 23 16:58:44 2026 +0800

    debugfs: check for NULL pointer in debugfs_create_str()
    
    [ Upstream commit 31de83980d3764d784f79ff1bc93c42b324f4013 ]
    
    Passing a NULL pointer to debugfs_create_str() leads to a NULL pointer
    dereference when the debugfs file is read. Following upstream
    discussions, forbid the creation of debugfs string files with NULL
    pointers. Add a WARN_ON() to expose offending callers and return early.
    
    Fixes: 9af0440ec86e ("debugfs: Implement debugfs_create_str()")
    Reported-by: yangshiguang <[email protected]>
    Closes: https://lore.kernel.org/lkml/2025122221-gag-malt-75ba@gregkh/
    Suggested-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Gui-Dong Han <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

debugfs: fix placement of EXPORT_SYMBOL_GPL for debugfs_create_str() [+ + +]
Author: Gui-Dong Han <[email protected]>
Date:   Mon Mar 23 16:58:45 2026 +0800

    debugfs: fix placement of EXPORT_SYMBOL_GPL for debugfs_create_str()
    
    [ Upstream commit 4afc929c0f74c4f22b055a82b371d50586da58ca ]
    
    The EXPORT_SYMBOL_GPL() for debugfs_create_str was placed incorrectly
    away from the function definition. Move it immediately below the
    debugfs_create_str() function where it belongs.
    
    Fixes: d60b59b96795 ("debugfs: Export debugfs_create_str symbol")
    Signed-off-by: Gui-Dong Han <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dev_printk: add new dev_err_probe() helpers [+ + +]
Author: Nuno Sa <[email protected]>
Date:   Thu Jun 6 09:22:37 2024 +0200

    dev_printk: add new dev_err_probe() helpers
    
    [ Upstream commit dbbe7eaf0e4795bf003ac06872aaf52b6b6b1310 ]
    
    This is similar to dev_err_probe() but for cases where an ERR_PTR() or
    ERR_CAST() is to be returned simplifying patterns like:
    
            dev_err_probe(dev, ret, ...);
            return ERR_PTR(ret)
    or
            dev_err_probe(dev, PTR_ERR(ptr), ...);
            return ERR_CAST(ptr)
    
    Signed-off-by: Nuno Sa <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Stable-dep-of: 797cc011ae02 ("backlight: sky81452-backlight: Check return value of devm_gpiod_get_optional() in sky81452_bl_parse_dt()")
    Signed-off-by: Sasha Levin <[email protected]>

 
devres: fix missing node debug info in devm_krealloc() [+ + +]
Author: Danilo Krummrich <[email protected]>
Date:   Tue Feb 3 00:48:14 2026 +0100

    devres: fix missing node debug info in devm_krealloc()
    
    [ Upstream commit f813ec9e84b4d0ca81ec1da94ab07bfb4a29266c ]
    
    Fix missing call to set_node_dbginfo() for new devres nodes created by
    devm_krealloc().
    
    Fixes: f82485722e5d ("devres: provide devm_krealloc()")
    Reviewed-by: Greg Kroah-Hartman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Danilo Krummrich <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dm cache metadata: fix memory leak on metadata abort retry [+ + +]
Author: Ming-Hung Tsai <[email protected]>
Date:   Wed Mar 4 19:56:28 2026 +0800

    dm cache metadata: fix memory leak on metadata abort retry
    
    [ Upstream commit 044ca491d4086dc5bf233e9fcb71db52df32f633 ]
    
    When failing to acquire the root_lock in dm_cache_metadata_abort because
    the block_manager is read-only, the temporary block_manager created
    outside the root_lock is not properly released, causing a memory leak.
    
    Reproduce steps:
    
    This can be reproduced by reloading a new table while the metadata
    is read-only. While the second call to dm_cache_metadata_abort is
    caused by lack of support for table preload in dm-cache, mentioned
    in commit 9b1cc9f251af ("dm cache: share cache-metadata object across
    inactive and active DM tables"), it exposes the memory leak in
    dm_cache_metadata_abort when the function is called multiple times.
    Specifically, dm-cache fails to sync the new cache object's mode during
    preresume, creating the reproducer condition.
    
    This issue could also occur through concurrent metadata_operation_failed
    calls due to races in cache mode updates, but the table preload scenario
    below provides a reliable reproducer.
    
    1. Create a cache device with some faulty trailing metadata blocks
    
    dmsetup create cmeta <<EOF
    0 200 linear /dev/sdc 0
    200 7992 error
    EOF
    dmsetup create cdata --table "0 131072 linear /dev/sdc 8192"
    dmsetup create corig --table "0 262144 linear /dev/sdc 262144"
    dd if=/dev/zero of=/dev/mapper/cmeta bs=4k count=1 oflag=direct
    dmsetup create cache --table "0 131072 cache /dev/mapper/cmeta \
    /dev/mapper/cdata /dev/mapper/corig 128 1 writethrough smq 0"
    
    2. Suspend and resume the cache to start a new metadata transaction and
       trigger metadata io errors on the next metadata commit.
    
    dmsetup suspend cache
    dmsetup resume cache
    
    3. Write to the cache device to update metadata
    
    fio --filename=/dev/mapper/cache --name test --rw=randwrite --bs=4k \
    --randrepeat=0 --direct=1 --size 64k
    
    4. Preload the same table
    
    dmsetup reload cache --table "$(dmsetup table cache)"
    
    5. Resume the new table. This triggers the memory leak.
    
    dmsetup suspend cache
    dmsetup resume cache
    
    kmemleak logs:
    
    <snip>
    unreferenced object 0xffff8880080c2010 (size 16):
      comm "dmsetup", pid 132, jiffies 4294982580
      hex dump (first 16 bytes):
        00 38 b9 07 80 88 ff ff 6a 6b 6b 6b 6b 6b 6b a5 ...
      backtrace (crc 3118f31c):
        kmemleak_alloc+0x28/0x40
        __kmalloc_cache_noprof+0x3d9/0x510
        dm_block_manager_create+0x51/0x140
        dm_cache_metadata_abort+0x85/0x320
        metadata_operation_failed+0x103/0x1e0
        cache_preresume+0xacd/0xe70
        dm_table_resume_targets+0xd3/0x320
        __dm_resume+0x1b/0xf0
        dm_resume+0x127/0x170
    <snip>
    
    Fixes: 352b837a5541 ("dm cache: Fix ABBA deadlock between shrink_slab and dm_cache_metadata_abort")
    Signed-off-by: Ming-Hung Tsai <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dm cache policy smq: fix missing locks in invalidating cache blocks [+ + +]
Author: Ming-Hung Tsai <[email protected]>
Date:   Mon Feb 9 15:54:08 2026 +0800

    dm cache policy smq: fix missing locks in invalidating cache blocks
    
    [ Upstream commit 2d1f7b65f5deedd2e6b09fdc6ea27f8375f24b45 ]
    
    In passthrough mode, the policy invalidate_mapping operation is called
    simultaneously from multiple workers, thus it should be protected by a
    lock. Otherwise, we might end up with data races on the allocated blocks
    counter, or even use-after-free issues with internal data structures
    when doing concurrent writes.
    
    Note that the existing FIXME in smq_invalidate_mapping() doesn't affect
    passthrough mode since migration tasks don't exist there, but would need
    attention if supporting fast device shrinking via suspend/resume without
    target reloading.
    
    Reproduce steps:
    
    1. Create a cache device consisting of 1024 cache entries
    
    dmsetup create cmeta --table "0 8192 linear /dev/sdc 0"
    dmsetup create cdata --table "0 131072 linear /dev/sdc 8192"
    dmsetup create corig --table "0 262144 linear /dev/sdc 262144"
    dd if=/dev/zero of=/dev/mapper/cmeta bs=4k count=1 oflag=direct
    dmsetup create cache --table "0 262144 cache /dev/mapper/cmeta \
    /dev/mapper/cdata /dev/mapper/corig 128 2 metadata2 writethrough smq 0"
    
    2. Populate the cache, and record the number of cached blocks
    
    fio --name=populate --filename=/dev/mapper/cache --rw=randwrite --bs=4k \
    --size=64m --direct=1
    nr_cached=$(dmsetup status cache | awk '{split($7, a, "/"); print a[1]}')
    
    3. Reload the cache into passthrough mode
    
    dmsetup suspend cache
    dmsetup reload cache --table "0 262144 cache /dev/mapper/cmeta \
    /dev/mapper/cdata /dev/mapper/corig 128 2 metadata2 passthrough smq 0"
    dmsetup resume cache
    
    4. Write to the passthrough cache. By setting multiple jobs with I/O
       size equal to the cache block size, cache blocks are invalidated
       concurrently from different workers.
    
    fio --filename=/dev/mapper/cache --name=test --rw=randwrite --bs=64k \
    --direct=1 --numjobs=2 --randrepeat=0 --size=64m
    
    5. Check if demoted matches cached block count. These numbers should
       match but may differ due to the data race.
    
    nr_demoted=$(dmsetup status cache | awk '{print $12}')
    echo "$nr_cached, $nr_demoted"
    
    Fixes: b29d4986d0da ("dm cache: significant rework to leverage dm-bio-prison-v2")
    Signed-off-by: Ming-Hung Tsai <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dm cache: fix concurrent write failure in passthrough mode [+ + +]
Author: Ming-Hung Tsai <[email protected]>
Date:   Mon Feb 9 15:54:09 2026 +0800

    dm cache: fix concurrent write failure in passthrough mode
    
    [ Upstream commit e4f66341779d0cf4c83c74793753a84094286d9e ]
    
    When bio prison cell lock acquisition fails due to concurrent writes to
    the same block in passthrough mode, dm-cache incorrectly returns an I/O
    error instead of properly handling the concurrency. This can occur in
    both process and workqueue contexts when invalidate_lock() is called for
    exclusive access to a data block. Fix this by deferring the write bios
    to ensure proper block device behavior.
    
    Reproduce steps:
    
    1. Create a cache device
    
    dmsetup create cmeta --table "0 8192 linear /dev/sdc 0"
    dmsetup create cdata --table "0 131072 linear /dev/sdc 8192"
    dmsetup create corig --table "0 262144 linear /dev/sdc 262144"
    dd if=/dev/zero of=/dev/mapper/cmeta bs=4k count=1 oflag=direct
    dmsetup create cache --table "0 262144 cache /dev/mapper/cmeta \
    /dev/mapper/cdata /dev/mapper/corig 128 2 metadata2 writethrough smq 0"
    
    2. Promote the first data block into cache
    
    fio --filename=/dev/mapper/cache --name=populate --rw=write --bs=4k \
    --direct=1 --size=64k
    
    3. Reload the cache into passthrough mode
    
    dmsetup suspend cache
    dmsetup reload cache --table "0 262144 cache /dev/mapper/cmeta \
    /dev/mapper/cdata /dev/mapper/corig 128 2 metadata2 passthrough smq 0"
    dmsetup resume cache
    
    4. Write to the first cached block concurrently. Sometimes one of the
       processes will receive I/O errors.
    
    fio --filename=/dev/mapper/cache --name test --rw=randwrite --bs=4k \
    --randrepeat=0 --direct=1 --numjobs=2 --size 64k
    
     <snip>
     fio-3.41
     fio: io_u error on file /dev/mapper/cache: Input/output error: write offset=4096, buflen=4096
     fio: pid=106, err=5/file:io_u.c:2008, func=io_u error, error=Input/output error
     test: (groupid=0, jobs=1): err= 0: pid=105
     test: (groupid=0, jobs=1): err= 5 (file:io_u.c:2008, func=io_u error, error=Input/output error): pid=106
     <snip>
    
    Fixes: b29d4986d0da ("dm cache: significant rework to leverage dm-bio-prison-v2")
    Signed-off-by: Ming-Hung Tsai <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

dm cache: fix dirty mapping checking in passthrough mode switching [+ + +]
Author: Ming-Hung Tsai <[email protected]>
Date:   Mon Feb 9 15:54:10 2026 +0800

    dm cache: fix dirty mapping checking in passthrough mode switching
    
    [ Upstream commit 322586745bd1a0e5f3559fd1635fdeb4dbd1d6b8 ]
    
    As mentioned in commit 9b1cc9f251af ("dm cache: share cache-metadata
    object across inactive and active DM tables"), dm-cache assumed table
    reload occurs after suspension, while LVM's table preload breaks this
    assumption. The dirty mapping check for passthrough mode was designed
    around this assumption and is performed during table creation, causing
    the check to fail with preload while metadata updates are ongoing. This
    risks loading dirty mappings into passthrough mode, resulting in data
    loss.
    
    Reproduce steps:
    
    1. Create a writeback cache with zero migration_threshold to produce
       dirty mappings
    
    dmsetup create cmeta --table "0 8192 linear /dev/sdc 0"
    dmsetup create cdata --table "0 131072 linear /dev/sdc 8192"
    dmsetup create corig --table "0 262144 linear /dev/sdc 262144"
    dd if=/dev/zero of=/dev/mapper/cmeta bs=4k count=1 oflag=direct
    dmsetup create cache --table "0 262144 cache /dev/mapper/cmeta \
    /dev/mapper/cdata /dev/mapper/corig 128 2 metadata2 writeback smq \
    2 migration_threshold 0"
    
    2. Preload a table in passthrough mode
    
    dmsetup reload cache --table "0 262144 cache /dev/mapper/cmeta \
    /dev/mapper/cdata /dev/mapper/corig 128 2 metadata2 passthrough smq 0"
    
    3. Write to the first cache block to make it dirty
    
    fio --filename=/dev/mapper/cache --name=populate --rw=write --bs=4k \
    --direct=1 --size=64k
    
    4. Resume the inactive table. Now it's possible to load the dirty block
       into passthrough mode.
    
    dmsetup resume cache
    
    Fix by moving the checks to the preresume phase to support table
    preloading. Also remove the unused function dm_cache_metadata_all_clean.
    
    Fixes: 2ee57d587357 ("dm cache: add passthrough mode")
    Signed-off-by: Ming-Hung Tsai <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

dm cache: fix missing return in invalidate_committed's error path [+ + +]
Author: Ming-Hung Tsai <[email protected]>
Date:   Fri Apr 10 21:08:01 2026 +0800

    dm cache: fix missing return in invalidate_committed's error path
    
    [ Upstream commit 8c0ee19db81f0fa1ff25fd75b22b17c0cc2acde3 ]
    
    In passthrough mode, dm-cache defers write submission until after
    metadata commit completes via the invalidate_committed() continuation.
    On commit error, invalidate_committed() calls invalidate_complete() to
    end the bio and free the migration struct, after which it should return
    immediately.
    
    The patch 4ca8b8bd952d ("dm cache: fix write hang in passthrough mode")
    omitted this early return, causing execution to fall through into the
    success path on error. This results in use-after-free on the migration
    struct in the subsequent calls.
    
    Fix by adding the missing return after the invalidate_complete() call.
    
    Fixes: 4ca8b8bd952d ("dm cache: fix write hang in passthrough mode")
    Reported-by: Dan Carpenter <[email protected]>
    Closes: https://lore.kernel.org/dm-devel/[email protected]/
    Signed-off-by: Ming-Hung Tsai <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

dm cache: fix null-deref with concurrent writes in passthrough mode [+ + +]
Author: Ming-Hung Tsai <[email protected]>
Date:   Mon Feb 9 15:54:05 2026 +0800

    dm cache: fix null-deref with concurrent writes in passthrough mode
    
    [ Upstream commit 7d1f98d668ee34c1d15bdc0420fdd062f24a27c0 ]
    
    In passthrough mode, when dm-cache starts to invalidate a cache
    entry and bio prison cell lock fails due to concurrent write to
    the same cached block, mg->cell remains NULL. The error path in
    invalidate_complete() attempts to unlock and free the cell
    unconditionally, causing a NULL pointer dereference:
    
    KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
    CPU: 0 UID: 0 PID: 134 Comm: fio Not tainted 6.19.0-rc7 #3 PREEMPT
    RIP: 0010:dm_cell_unlock_v2+0x3f/0x210
    <snip>
    Call Trace:
     invalidate_complete+0xef/0x430
     map_bio+0x130f/0x1a10
     cache_map+0x320/0x6b0
     __map_bio+0x458/0x510
     dm_submit_bio+0x40e/0x16d0
     __submit_bio+0x419/0x870
    <snip>
    
    Reproduce steps:
    
    1. Create a cache device
    
    dmsetup create cmeta --table "0 8192 linear /dev/sdc 0"
    dmsetup create cdata --table "0 131072 linear /dev/sdc 8192"
    dmsetup create corig --table "0 262144 linear /dev/sdc 262144"
    dd if=/dev/zero of=/dev/mapper/cmeta bs=4k count=1 oflag=direct
    dmsetup create cache --table "0 262144 cache /dev/mapper/cmeta \
    /dev/mapper/cdata /dev/mapper/corig 128 2 metadata2 writethrough smq 0"
    
    2. Promote the first data block into cache
    
    fio --filename=/dev/mapper/cache --name=populate --rw=write --bs=4k \
    --direct=1 --size=64k
    
    3. Reload the cache into passthrough mode
    
    dmsetup suspend cache
    dmsetup reload cache --table "0 262144 cache /dev/mapper/cmeta \
    /dev/mapper/cdata /dev/mapper/corig 128 2 metadata2 passthrough smq 0"
    dmsetup resume cache
    
    4. Write to the first cached block concurrently
    
    fio --filename=/dev/mapper/cache --name test --rw=randwrite --bs=4k \
    --randrepeat=0 --direct=1 --numjobs=2 --size 64k
    
    Fix by checking if mg->cell is valid before attempting to unlock it.
    
    Fixes: b29d4986d0da ("dm cache: significant rework to leverage dm-bio-prison-v2")
    Signed-off-by: Ming-Hung Tsai <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

dm cache: fix write hang in passthrough mode [+ + +]
Author: Ming-Hung Tsai <[email protected]>
Date:   Mon Feb 9 15:54:07 2026 +0800

    dm cache: fix write hang in passthrough mode
    
    [ Upstream commit 4ca8b8bd952df7c3ccdc68af9bd3419d0839a04b ]
    
    The invalidate_remove() function has incomplete logic for handling write
    hit bios after cache invalidation. It sets up the remapping for the
    overwrite_bio but then drops it immediately without submission, causing
    write operations to hang.
    
    Fix by adding a new invalidate_committed() continuation that submits
    the remapped writes to the cache origin after metadata commit completes,
    while using the overwrite_endio hook to ensure proper completion
    sequencing. This maintains existing coherency. Also improve error
    handling in invalidate_complete() to preserve the original error status
    instead of using bio_io_error() unconditionally.
    
    Fixes: b29d4986d0da ("dm cache: significant rework to leverage dm-bio-prison-v2")
    Signed-off-by: Ming-Hung Tsai <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

dm cache: fix write path cache coherency in passthrough mode [+ + +]
Author: Ming-Hung Tsai <[email protected]>
Date:   Mon Feb 9 15:54:06 2026 +0800

    dm cache: fix write path cache coherency in passthrough mode
    
    [ Upstream commit 0c5eef0aad508231d8e43ff8392692925e131b68 ]
    
    In passthrough mode, dm-cache defers write bio submission until cache
    invalidation completes to maintain existing coherency, requiring the
    target map function to return DM_MAPIO_SUBMITTED. The current map_bio()
    returns DM_MAPIO_REMAPPED, violating the required ordering constraint.
    
    Reproduce steps:
    
    1. Create a cache device
    
    dmsetup create cmeta --table "0 8192 linear /dev/sdc 0"
    dmsetup create cdata --table "0 131072 linear /dev/sdc 8192"
    dmsetup create corig --table "0 262144 linear /dev/sdc 262144"
    dd if=/dev/zero of=/dev/mapper/cmeta bs=4k count=1 oflag=direct
    dmsetup create cache --table "0 262144 cache /dev/mapper/cmeta \
    /dev/mapper/cdata /dev/mapper/corig 128 2 metadata2 writethrough smq 0"
    
    2. Promote the first data block into the cache
    
    fio --filename=/dev/mapper/cache --name=populate --rw=write --bs=4k \
    --direct=1 --size=64k
    
    3. Reload the cache into passthrough mode
    
    dmsetup suspend cache
    dmsetup reload cache --table "0 262144 cache /dev/mapper/cmeta \
    /dev/mapper/cdata /dev/mapper/corig 128 2 metadata2 passthrough smq 0"
    dmsetup resume cache
    
    4. Write to the first data block, and check io ordering using ftrace
    
    echo 1 > /sys/kernel/debug/tracing/events/block/block_bio_queue/enable
    echo 1 > /sys/kernel/debug/tracing/events/block/block_bio_complete/enable
    echo 1 > /sys/kernel/debug/tracing/events/block/block_rq_complete/enable
    fio --filename=/dev/mapper/cache --name=test --rw=write --bs=64k \
    --direct=1 --size 64k
    
    5. ftrace logs show that write operations to the cache origin (252:2)
       and metadata operations (252:0) are unsynchronized: the origin write
       occurs before metadata commit.
    
     <snip>
           fio-146  [000] .....  420.139562: block_bio_queue: 252,3 WS 0 + 128 [fio]
           fio-146  [000] .....  420.149395: block_bio_queue: 252,2 WS 0 + 128 [fio]
           fio-146  [000] .....  420.149763: block_bio_queue: 8,32 WS 262144 + 128 [fio]
           fio-146  [000] dNh1.  420.151446: block_rq_complete: 8,32 WS () 262144 + 128 be,0,4 [0]
           fio-146  [000] dNh1.  420.152731: block_bio_complete: 252,2 WS 0 + 128 [0]
           fio-146  [000] dNh1.  420.154229: block_bio_complete: 252,3 WS 0 + 128 [0]
     kworker/0:0-9  [000] .....  420.160530: block_bio_queue: 252,0 W 408 + 8 [kworker/0:0]
     kworker/0:0-9  [000] .....  420.161641: block_bio_queue: 8,32 W 408 + 8 [kworker/0:0]
     kworker/0:0-9  [000] .....  420.162533: block_bio_queue: 252,0 W 416 + 8 [kworker/0:0]
     kworker/0:0-9  [000] .....  420.162821: block_bio_queue: 8,32 W 416 + 8 [kworker/0:0]
     <snip>
    
    Fixes: b29d4986d0da ("dm cache: significant rework to leverage dm-bio-prison-v2")
    Signed-off-by: Ming-Hung Tsai <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

dm cache: support shrinking the origin device [+ + +]
Author: Ming-Hung Tsai <[email protected]>
Date:   Thu Mar 6 16:41:51 2025 +0800

    dm cache: support shrinking the origin device
    
    [ Upstream commit c2662b1544cbd8ea3181381bb899b8e681dfedc7 ]
    
    This patch introduces formal support for shrinking the cache origin by
    reducing the cache target length via table reloads. Cache blocks mapped
    beyond the new target length must be clean and are invalidated during
    preresume. If any dirty blocks exist in the area being removed, the
    preresume operation fails without setting the NEEDS_CHECK flag in
    superblock, and the resume ioctl returns EFBIG. The cache device remains
    suspended until a table reload with target length that fits existing
    mappings is performed.
    
    Without this patch, reducing the cache target length could result in
    io errors (RHBZ: 2134334), out-of-bounds memory access to the discard
    bitset, and security concerns regarding data leakage.
    
    Verification steps:
    
    1. create a cache metadata with some cached blocks mapped to the tail
       of the origin device. Here we use cache_restore v1.0 to build a
       metadata with one clean block mapped to the last origin block.
    
    cat <<EOF >> cmeta.xml
    <superblock uuid="" block_size="128" nr_cache_blocks="512" \
    policy="smq" hint_width="4">
      <mappings>
        <mapping cache_block="0" origin_block="4095" dirty="false"/>
      </mappings>
    </superblock>
    EOF
    dmsetup create cmeta --table "0 8192 linear /dev/sdc 0"
    cache_restore -i cmeta.xml -o /dev/mapper/cmeta --metadata-version=2
    dmsetup remove cmeta
    
    2. bring up the cache whilst shrinking the cache origin by one block:
    
    dmsetup create cmeta --table "0 8192 linear /dev/sdc 0"
    dmsetup create cdata --table "0 65536 linear /dev/sdc 8192"
    dmsetup create corig --table "0 524160 linear /dev/sdc 262144"
    dmsetup create cache --table "0 524160 cache /dev/mapper/cmeta \
    /dev/mapper/cdata /dev/mapper/corig 128 2 metadata2 writethrough smq 0"
    
    3. check the number of cached data blocks via dmsetup status. It is
       expected to be zero.
    
    dmsetup status cache | cut -d ' ' -f 7
    
    In addition to the script above, this patch can be verified using the
    "cache/resize" tests in dmtest-python:
    
    ./dmtest run --rx cache/resize/shrink_origin --result-set default
    
    Signed-off-by: Ming-Hung Tsai <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Stable-dep-of: 322586745bd1 ("dm cache: fix dirty mapping checking in passthrough mode switching")
    Signed-off-by: Sasha Levin <[email protected]>

 
dm init: ensure device probing has finished in dm-mod.waitfor= [+ + +]
Author: Guillaume Gonnet <[email protected]>
Date:   Tue Mar 17 22:32:28 2026 +0100

    dm init: ensure device probing has finished in dm-mod.waitfor=
    
    [ Upstream commit 99a2312f69805f4ba92d98a757625e0300a747ab ]
    
    The early_lookup_bdev() function returns successfully when the disk
    device is present but not necessarily its partitions. In this situation,
    dm_early_create() fails as the partition block device does not exist
    yet.
    
    In my case, this phenomenon occurs quite often because the device is
    an SD card with slow reading times, on which kernel takes time to
    enumerate available partitions.
    
    Fortunately, the underlying device is back to "probing" state while
    enumerating partitions. Waiting for all probing to end is enough to fix
    this issue.
    
    That's also the reason why this problem never occurs with rootwait=
    parameter: the while loop inside wait_for_root() explicitly waits for
    probing to be done and then the function calls async_synchronize_full().
    These lines were omitted in 035641b, even though the commit says it's
    based on the rootwait logic...
    
    Anyway, calling wait_for_device_probe() after our while loop does the
    job (it both waits for probing and calls async_synchronize_full).
    
    Fixes: 035641b01e72 ("dm init: add dm-mod.waitfor to wait for asynchronously probed block devices")
    Signed-off-by: Guillaume Gonnet <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dm log: fix out-of-bounds write due to region_count overflow [+ + +]
Author: Junrui Luo <[email protected]>
Date:   Thu Mar 5 20:05:48 2026 +0800

    dm log: fix out-of-bounds write due to region_count overflow
    
    [ Upstream commit c20e36b7631d83e7535877f08af8b0af72c44b1a ]
    
    The local variable region_count in create_log_context() is declared as
    unsigned int (32-bit), but dm_sector_div_up() returns sector_t (64-bit).
    When a device-mapper target has a sufficiently large ti->len with a small
    region_size, the division result can exceed UINT_MAX. The truncated
    value is then used to calculate bitset_size, causing clean_bits,
    sync_bits, and recovering_bits to be allocated far smaller than needed
    for the actual number of regions.
    
    Subsequent log operations (log_set_bit, log_clear_bit, log_test_bit) use
    region indices derived from the full untruncated region space, causing
    out-of-bounds writes to kernel heap memory allocated by vmalloc.
    
    This can be reproduced by creating a mirror target whose region_count
    overflows 32 bits:
    
      dmsetup create bigzero --table '0 8589934594 zero'
      dmsetup create mymirror --table '0 8589934594 mirror \
        core 2 2 nosync 2 /dev/mapper/bigzero 0 \
        /dev/mapper/bigzero 0'
    
    The status output confirms the truncation (sync_count=1 instead of
    4294967297, because 0x100000001 was truncated to 1):
    
      $ dmsetup status mymirror
      0 8589934594 mirror 2 254:1 254:1 1/4294967297 ...
    
    This leads to a kernel crash in core_in_sync:
    
      BUG: scheduling while atomic: (udev-worker)/9150/0x00000000
      RIP: 0010:core_in_sync+0x14/0x30 [dm_log]
      CR2: 0000000000000008
      Fixing recursive fault but reboot is needed!
    
    Fix by widening the local region_count to sector_t and adding an
    explicit overflow check before the value is assigned to lc->region_count.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: Yuhao Jiang <[email protected]>
    Signed-off-by: Junrui Luo <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dmaengine: dw-axi-dmac: Remove unnecessary return statement from void function [+ + +]
Author: Khairul Anuar Romli <[email protected]>
Date:   Mon Feb 2 14:02:19 2026 +0800

    dmaengine: dw-axi-dmac: Remove unnecessary return statement from void function
    
    [ Upstream commit 48278a72fce8a8d30efaedeb206c9c3f05c1eb3f ]
    
    checkpatch.pl --strict reports a WARNING in dw-axi-dmac-platform.c:
    
      WARNING: void function return statements are not generally useful
      FILE: drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c
    
    According to Linux kernel coding style [Documentation/process/
    coding-style.rst], explicit "return;" statements at the end of void
    functions are redundant and should be omitted. The function will
    automatically return upon reaching the closing brace, so the extra
    statement adds unnecessary clutter without functional benefit.
    
    This patch removes the superfluous "return;" statement in
    dw_axi_dma_set_hw_channel() to comply with kernel coding standards and
    eliminate the checkpatch warning.
    
    Fixes: 32286e279385 ("dmaengine: dw-axi-dmac: Remove free slot check algorithm in dw_axi_dma_set_hw_channel")
    Signed-off-by: Khairul Anuar Romli <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

dmaengine: mxs-dma: Fix missing return value from of_dma_controller_register() [+ + +]
Author: Frank Li <[email protected]>
Date:   Wed Feb 25 16:41:38 2026 -0500

    dmaengine: mxs-dma: Fix missing return value from of_dma_controller_register()
    
    [ Upstream commit ab2bf6d4c0a0152907b18d25c1b118ea5ea779df ]
    
    Propagate the return value of of_dma_controller_register() in probe()
    instead of ignoring it.
    
    Fixes: a580b8c5429a6 ("dmaengine: mxs-dma: add dma support for i.MX23/28")
    Signed-off-by: Frank Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Documentation: fix a hugetlbfs reservation statement [+ + +]
Author: Jane Chu <[email protected]>
Date:   Mon Mar 2 13:10:15 2026 -0700

    Documentation: fix a hugetlbfs reservation statement
    
    [ Upstream commit 7a197d346a44384a1a858a98ef03766840e561d4 ]
    
    Documentation/mm/hugetlbfs_reserv.rst has
            if (resv_needed <= (resv_huge_pages - free_huge_pages))
                    resv_huge_pages += resv_needed;
    which describes this code in gather_surplus_pages()
            needed = (h->resv_huge_pages + delta) - h->free_huge_pages;
            if (needed <= 0) {
                    h->resv_huge_pages += delta;
                    return 0;
            }
    which means if there are enough free hugepages to account for the new
    reservation, simply update the global reservation count without
    further action.
    
    But the description is backwards, it should be
            if (resv_needed <= (free_huge_pages - resv_huge_pages))
    instead.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 70bc0dc578b3 ("Documentation: vm, add hugetlbfs reservation overview")
    Signed-off-by: Jane Chu <[email protected]>
    Cc: David Hildenbrand <[email protected]>
    Cc: Hillf Danton <[email protected]>
    Cc: Jonathan Corbet <[email protected]>
    Cc: Liam Howlett <[email protected]>
    Cc: Lorenzo Stoakes <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Mike Rapoport <[email protected]>
    Cc: Muchun Song <[email protected]>
    Cc: Oscar Salvador <[email protected]>
    Cc: Shuah Khan <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dpaa2: add independent dependencies for FSL_DPAA2_SWITCH [+ + +]
Author: Cai Xinchen <[email protected]>
Date:   Thu Mar 12 06:59:06 2026 +0000

    dpaa2: add independent dependencies for FSL_DPAA2_SWITCH
    
    [ Upstream commit 12589892f41c4c645c80ef9f036f7451a6045624 ]
    
    Since the commit 84cba72956fd ("dpaa2-switch: integrate
    the MAC endpoint support") included dpaa2-mac.o in the driver,
    but it didn't select PCS_LYNX, PHYLINK and FSL_XGMAC_MDIO. it
    will lead to link error, such as
    undefined reference to `phylink_ethtool_ksettings_set'
    undefined reference to `lynx_pcs_create_fwnode'
    
    And the same reason as the commit d2624e70a2f53 ("dpaa2-eth: select
    XGMAC_MDIO for MDIO bus support"), enable the FSL_XGMAC_MDIO Kconfig
    option in order to have MDIO access to internal and external PHYs.
    
    Because dpaa2-switch uses fsl_mc_driver APIs, add depends on FSL_MC_BUS
    && FSL_MC_DPIO as FSL_DPAA2_SWITCH do.
    
    FSL_XGMAC_MDIO and FSL_MC_BUS depend on OF, thus the dependence of
    FSL_MC_BUS can satisfy FSL_XGMAC_MDIO's OF requirement.
    
    Fixes: 84cba72956fd ("dpaa2-switch: integrate the MAC endpoint support")
    Suggested-by: Ioana Ciornei <[email protected]>
    Signed-off-by: Cai Xinchen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

dpaa2: compile dpaa2 even CONFIG_FSL_DPAA2_ETH=n [+ + +]
Author: Cai Xinchen <[email protected]>
Date:   Thu Mar 12 06:59:07 2026 +0000

    dpaa2: compile dpaa2 even CONFIG_FSL_DPAA2_ETH=n
    
    [ Upstream commit 97daf00745f7f9f261b0e91418de6e79d7826c36 ]
    
    CONFIG_FSL_DPAA2_ETH and CONFIG_FSL_DPAA2_SWITCH are not
    associated, but the compilation of FSL_DPAA2_SWITCH depends on
    the compilation of the dpaa2 folder. The files controlled by
    CONFIG_FSL_DPAA2_SWITCH in the dpaa2 folder are not controlled
    by CONFIG_FSL_DPAA2_ETH, except for the files controlled by
    CONFIG_FSL_DPAA2_SWITCH. Therefore, removing the restriction will
    not affect the compilation of the files in the directory.
    
    Fixes: f48298d3fbfaa ("staging: dpaa2-switch: move the driver out of staging")
    Suggested-by: Ioana Ciornei <[email protected]>
    Signed-off-by: Cai Xinchen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drbd: Balance RCU calls in drbd_adm_dump_devices() [+ + +]
Author: Bart Van Assche <[email protected]>
Date:   Thu Mar 26 14:40:54 2026 -0700

    drbd: Balance RCU calls in drbd_adm_dump_devices()
    
    [ Upstream commit 2b31e86387e60b3689339f0f0fbb4d3623d9d494 ]
    
    Make drbd_adm_dump_devices() call rcu_read_lock() before
    rcu_read_unlock() is called. This has been detected by the Clang
    thread-safety analyzer.
    
    Tested-by: Christoph Böhmwalder <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Cc: Andreas Gruenbacher <[email protected]>
    Fixes: a55bbd375d18 ("drbd: Backport the "status" command")
    Signed-off-by: Bart Van Assche <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amd/display: Allow DCE link encoder without AUX registers [+ + +]
Author: Timur Kristóf <[email protected]>
Date:   Tue Apr 28 13:40:41 2026 +0200

    drm/amd/display: Allow DCE link encoder without AUX registers
    
    [ Upstream commit ac27e3f99035f132f23bc0409d0e57f11f054c70 ]
    
    Allow constructing the DCE link encoder without DDC,
    which means the AUX registers array will be NULL.
    
    This is necessary to support embedded connectors without DDC.
    
    Fixes: 4562236b3bc0 ("drm/amd/dc: Add dc display driver (v2)")
    Link: https://gitlab.freedesktop.org/drm/amd/-/work_items/5192
    Signed-off-by: Timur Kristóf <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 87f30b101af62590faf6020d106da07efdda199b)
    Signed-off-by: Sasha Levin <[email protected]>

drm/amd/display: Read EDID from VBIOS embedded panel info [+ + +]
Author: Timur Kristóf <[email protected]>
Date:   Tue Apr 28 13:40:44 2026 +0200

    drm/amd/display: Read EDID from VBIOS embedded panel info
    
    [ Upstream commit 9ea16f64189bf7b6ba50fc7f0325b3c1f836d105 ]
    
    Some board manufacturers hardcode the EDID for the embedded
    panel in the VBIOS. This EDID should be used when the panel
    doesn't have a DDC.
    
    For reference, see the legacy non-DC display code:
    amdgpu_atombios_encoder_get_lcd_info()
    
    This is necessary to support embedded connectors without DDC.
    
    Fixes: 4562236b3bc0 ("drm/amd/dc: Add dc display driver (v2)")
    Link: https://gitlab.freedesktop.org/drm/amd/-/work_items/5192
    Signed-off-by: Timur Kristóf <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit eb105e63b474c11ef6a84a1c6b18100d851ff364)
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amd/pm/ci: Clear EnabledForActivity field for memory levels [+ + +]
Author: Timur Kristóf <[email protected]>
Date:   Sun Mar 29 18:03:03 2026 +0200

    drm/amd/pm/ci: Clear EnabledForActivity field for memory levels
    
    [ Upstream commit 5facfd4c4c67e8500116ffec0d9da35d92b9c787 ]
    
    Follow what radeon did and what amdgpu does for other GPUs with SMU7.
    
    Fixes: 9f4b35411cfe ("drm/amd/powerplay: add CI asics support to smumgr (v3)")
    Signed-off-by: Timur Kristóf <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/amd/pm/ci: Disable MCLK DPM on problematic CI ASICs [+ + +]
Author: Timur Kristóf <[email protected]>
Date:   Sun Mar 29 18:02:59 2026 +0200

    drm/amd/pm/ci: Disable MCLK DPM on problematic CI ASICs
    
    [ Upstream commit 9851f29cb06c09f7dad3867d8b0feec3fc71b6c8 ]
    
    There are two known cases where MCLK DPM can causes issues:
    
    Radeon R9 M380 found in iMac computers from 2015.
    The SMU in this GPU just hangs as soon as we send it the
    PPSMC_MSG_MCLKDPM_Enable command, even when MCLK switching is
    disabled, and even when we only populate one MCLK DPM level.
    Apply workaround to all devices with the same subsystem ID.
    
    Radeon R7 260X due to old memory controller microcode.
    We only flash the MC ucode when it isn't set up by the VBIOS,
    therefore there is no way to make sure that it has the correct
    ucode version.
    
    I verified that this patch fixes the SMU hang on the R9 M380
    which would previously fail to boot. This also fixes the UVD
    initialization error on that GPU which happened because the
    SMU couldn't ungate the UVD after it hung.
    
    Fixes: 86457c3b21cb ("drm/amd/powerplay: Add support for CI asics to hwmgr")
    Signed-off-by: Timur Kristóf <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/amd/pm/ci: Fill DW8 fields from SMC [+ + +]
Author: Timur Kristóf <[email protected]>
Date:   Sun Mar 29 18:03:04 2026 +0200

    drm/amd/pm/ci: Fill DW8 fields from SMC
    
    [ Upstream commit baf28ec5795c077406d6f52b8ad39e614153bce6 ]
    
    In ci_populate_dw8() we currently just read a value from the SMU
    and then throw it away. Instead of throwing away the value,
    we should use it to fill other fields in DW8 (like radeon).
    
    Otherwise the value of the other fiels is just cleared when
    we copy this data to the SMU later.
    
    Fixes: 9f4b35411cfe ("drm/amd/powerplay: add CI asics support to smumgr (v3)")
    Signed-off-by: Timur Kristóf <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/amd/pm/ci: Fix powertune defaults for Hawaii 0x67B0 [+ + +]
Author: Timur Kristóf <[email protected]>
Date:   Sun Mar 29 18:03:02 2026 +0200

    drm/amd/pm/ci: Fix powertune defaults for Hawaii 0x67B0
    
    [ Upstream commit d784759c07924280f3c313f205fc48eb62d7cb71 ]
    
    There is no AMD GPU with the ID 0x66B0, this looks like a typo.
    It should be 0x67B0 which is actually part of the PCI ID list,
    and should use the Hawaii XT powertune defaults according to
    the old radeon driver.
    
    Fixes: 9f4b35411cfe ("drm/amd/powerplay: add CI asics support to smumgr (v3)")
    Signed-off-by: Timur Kristóf <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/amd/pm/ci: Use highest MCLK on CI when MCLK DPM is disabled [+ + +]
Author: Timur Kristóf <[email protected]>
Date:   Sun Mar 29 18:02:58 2026 +0200

    drm/amd/pm/ci: Use highest MCLK on CI when MCLK DPM is disabled
    
    [ Upstream commit 894f0d34d66cb47fe718fe2ae5c18729d22c5218 ]
    
    When MCLK DPM is disabled for any reason, populate the MCLK
    table with the highest MCLK DPM level, so that the ASIC can
    use the highest possible memory clock to get good performance
    even when MCLK DPM is disabled.
    
    Fixes: 9f4b35411cfe ("drm/amd/powerplay: add CI asics support to smumgr (v3)")
    Signed-off-by: Timur Kristóf <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amd/pm/smu7: Add SCLK cap for quirky Hawaii board [+ + +]
Author: Timur Kristóf <[email protected]>
Date:   Sun Mar 29 18:03:05 2026 +0200

    drm/amd/pm/smu7: Add SCLK cap for quirky Hawaii board
    
    [ Upstream commit 4724bc5b8d78c34b993594f9406135408ccb312a ]
    
    On a specific Radeon R9 390X board, the GPU can "randomly" hang
    while gaming. Initially I thought this was a RADV bug and tried
    to work around this in Mesa:
    commit 8ea08747b86b ("radv: Mitigate GPU hang on Hawaii in Dota 2 and RotTR")
    
    However, I got some feedback from other users who are reporting
    that the above mitigation causes a significant performance
    regression for them, and they didn't experience the hang on their
    GPU in the first place.
    
    After some further investigation, it turns out that the problem
    is that the highest SCLK DPM level on this board isn't stable.
    Lowering SCLK to 1040 MHz (from 1070 MHz) works around the issue,
    and has a negligible impact on performance compared to the Mesa
    patch. (Note that increasing the voltage can also work around it,
    but we felt that lowering the SCLK is the safer option.)
    
    To solve the above issue, add an "sclk_cap" field to smu7_hwmgr
    and set this field for the affected board. The capped SCLK value
    correctly appears on the sysfs interface and shows up in GUI
    tools such as LACT.
    
    Fixes: 9f4b35411cfe ("drm/amd/powerplay: add CI asics support to smumgr (v3)")
    Signed-off-by: Timur Kristóf <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/amd/pm/smu7: Fix SMU7 voltage dependency on display clock [+ + +]
Author: Timur Kristóf <[email protected]>
Date:   Sun Mar 29 18:03:00 2026 +0200

    drm/amd/pm/smu7: Fix SMU7 voltage dependency on display clock
    
    [ Upstream commit 0138610c14130425be53423b35336561829965e0 ]
    
    The DCE (display controller engine) requires a minimum voltage
    in order to function correctly, depending on which clock level
    it currently uses.
    
    Add a new table that contains display clock frequency levels
    and the corresponding required voltages. The clock frequency
    levels are taken from DC (and the old radeon driver's voltage
    dependency table for CI in cases where its values were lower).
    The voltage levels are taken from the following function:
    phm_initializa_dynamic_state_adjustment_rule_settings().
    Furthermore, in case of CI, call smu7_patch_vddc() on the new
    table to account for leakage voltage (like in radeon).
    
    Use the display clock value from amd_pp_display_configuration
    to look up the voltage level needed by the DCE. Send the
    voltage to the SMU via the PPSMC_MSG_VddC_Request command.
    
    The previous implementation of this feature was non-functional
    because it relied on a "dal_power_level" field which was never
    assigned; and it was not at all implemented for CI ASICs.
    
    I verified this on a Radeon R9 M380 which previously booted to
    a black screen with DC enabled (default since Linux 6.19), but
    now works correctly.
    
    Fixes: 599a7e9fe1b6 ("drm/amd/powerplay: implement smu7 hwmgr to manager asics with smu ip version 7.")
    Signed-off-by: Timur Kristóf <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amdgpu/gfx10: look at the right prop for gfx queue priority [+ + +]
Author: Alex Deucher <[email protected]>
Date:   Thu Feb 19 18:18:28 2026 -0500

    drm/amdgpu/gfx10: look at the right prop for gfx queue priority
    
    [ Upstream commit 355d96cdec5c61fd83f7eb54f1a28e38809645d6 ]
    
    Look at hqd_queue_priority rather than hqd_pipe_priority.
    In practice, it didn't matter as both were always set for
    kernel queues, but that will change in the future.
    
    Fixes: b07d1d73b09e ("drm/amd/amdgpu: Enable high priority gfx queue")
    Reviewed-by:Jesse Zhang <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amdgpu/gfx6: Support harvested SI chips with disabled TCCs (v2) [+ + +]
Author: Timur Kristóf <[email protected]>
Date:   Sat Apr 18 23:49:33 2026 +0200

    drm/amdgpu/gfx6: Support harvested SI chips with disabled TCCs (v2)
    
    [ Upstream commit fe2b84f9228e2a0903221a4d0d8c350b018e9c0c ]
    
    This commit fixes amdgpu to work on the Radeon HD 7870 XT
    which has never worked with the Linux open source drivers before.
    
    Some boards have "harvested" chips, meaning that some parts of
    the chip are disabled and fused, and it's sold for cheaper and
    under a different marketing name.
    On a harvested chip, any of the following can be disabled:
    - CUs (Compute Units)
    - RBs (Render Backend, aka. ROP)
    - Memory channels (ie. the chip has a lower bandwidth)
    - TCCs (ie. less L2 cache)
    
    Handle chips with harvested TCCs by patching the registers
    that configure how TCCs are mapped.
    
    If some TCCs are disabled, we need to make sure that
    the disabled TCCs are not used, and the remaining TCCs
    are used optimally.
    
    TCP_CHAN_STEER_LO/HI control which TCC is used by TCP channels.
    TCP_ADDR_CONFIG.NUM_TCC_BANKS controls how many channels are used.
    
    Note that the TCC configuration is highly relevant to performance.
    Suboptimal configuration (eg. CHAN_STEER=0) can significantly
    reduce gaming performance.
    
    For optimal performance:
    - Rely on the CHAN_STEER from the golden registers table,
      only skip disabled TCCs but keep the mapping order.
    - Limit NUM_TCC_BANKS to number of active TCCs to avoid thrashing,
      which performs better than using the same TCC twice.
    
    v2:
    - Also consider CGTS_USER_TCC_DISABLE for disabled TCCs.
    
    Link: https://bugs.freedesktop.org/show_bug.cgi?id=60879
    Closes: https://gitlab.freedesktop.org/drm/amd/-/work_items/2664
    Fixes: 2cd46ad22383 ("drm/amdgpu: add graphic pipeline implementation for si v8")
    Signed-off-by: Timur Kristóf <[email protected]>
    Reviewed-by: Christian König <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 00218d15528fab9f6b31241fe5904eea4fcaa30d)
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amdgpu/jpeg: set no_user_fence for JPEG v2.0 ring [+ + +]
Author: Yinjie Yao <[email protected]>
Date:   Mon Apr 27 11:46:10 2026 -0400

    drm/amdgpu/jpeg: set no_user_fence for JPEG v2.0 ring
    
    [ Upstream commit e5f612dc91650561fe2b5b76dd6d2898ec9ad480 ]
    
    JPEG rings do not support 64-bit user fence writes, reject CS
    submissions with user fences.
    
    Fixes: 6ac27241106b ("drm/amdgpu: add JPEG v2.0 function supports")
    Reviewed-by: Christian König <[email protected]>
    Reviewed-by: Alex Deucher <[email protected]>
    Signed-off-by: Yinjie Yao <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 96179da0c6b059eb31706a0abe8dd6381c533143)
    Signed-off-by: Sasha Levin <[email protected]>

drm/amdgpu/jpeg: set no_user_fence for JPEG v2.5 ring [+ + +]
Author: Yinjie Yao <[email protected]>
Date:   Mon Apr 27 11:46:10 2026 -0400

    drm/amdgpu/jpeg: set no_user_fence for JPEG v2.5 ring
    
    [ Upstream commit 79405e774ede411c6b47ed41c651e40b92de64a2 ]
    
    JPEG rings do not support 64-bit user fence writes, reject CS
    submissions with user fences.
    
    Fixes: 14f43e8f88c5 ("drm/amdgpu: move JPEG2.5 out from VCN2.5")
    Reviewed-by: Christian König <[email protected]>
    Reviewed-by: Alex Deucher <[email protected]>
    Signed-off-by: Yinjie Yao <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 3216a7f4e2642bda5fd14f57586e835ae9202587)
    Signed-off-by: Sasha Levin <[email protected]>

drm/amdgpu/jpeg: set no_user_fence for JPEG v3.0 ring [+ + +]
Author: Yinjie Yao <[email protected]>
Date:   Mon Apr 27 11:46:10 2026 -0400

    drm/amdgpu/jpeg: set no_user_fence for JPEG v3.0 ring
    
    [ Upstream commit a2baf12eec41f246689e6a3f8619af1200031576 ]
    
    JPEG rings do not support 64-bit user fence writes, reject CS
    submissions with user fences.
    
    Fixes: dfd57dbf44dd ("drm/amdgpu: add JPEG3.0 support for Sienna_Cichlid")
    Reviewed-by: Christian König <[email protected]>
    Reviewed-by: Alex Deucher <[email protected]>
    Signed-off-by: Yinjie Yao <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 4d7d774f100efb5089c86a1fb8c5bf47c63fc9ef)
    Signed-off-by: Sasha Levin <[email protected]>

drm/amdgpu/jpeg: set no_user_fence for JPEG v4.0 ring [+ + +]
Author: Yinjie Yao <[email protected]>
Date:   Mon Apr 27 11:46:11 2026 -0400

    drm/amdgpu/jpeg: set no_user_fence for JPEG v4.0 ring
    
    [ Upstream commit e7e90b5839aeb8805ec83bb4da610b8dab8e184d ]
    
    JPEG rings do not support 64-bit user fence writes, reject CS
    submissions with user fences.
    
    Fixes: b13111de32a9 ("drm/amdgpu/jpeg: add jpeg support for VCN4_0_0")
    Reviewed-by: Christian König <[email protected]>
    Reviewed-by: Alex Deucher <[email protected]>
    Signed-off-by: Yinjie Yao <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 8d0cac9478a3f046279c657d6a2545de49ae675a)
    Signed-off-by: Sasha Levin <[email protected]>

drm/amdgpu/jpeg: set no_user_fence for JPEG v4.0.3 ring [+ + +]
Author: Yinjie Yao <[email protected]>
Date:   Mon Apr 27 11:46:11 2026 -0400

    drm/amdgpu/jpeg: set no_user_fence for JPEG v4.0.3 ring
    
    [ Upstream commit 83e37c0987ca92f9e87789b46dd311dcf5a4a6c8 ]
    
    JPEG rings do not support 64-bit user fence writes, reject CS
    submissions with user fences.
    
    Fixes: e684e654eba9 ("drm/amdgpu/jpeg: add jpeg support for VCN4_0_3")
    Reviewed-by: Christian König <[email protected]>
    Reviewed-by: Alex Deucher <[email protected]>
    Signed-off-by: Yinjie Yao <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 2f6afc97d259d530f4f86c7743efbc573a8da927)
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amdgpu/uvd3.1: Don't validate the firmware when already validated [+ + +]
Author: Timur Kristóf <[email protected]>
Date:   Sat Apr 18 23:49:31 2026 +0200

    drm/amdgpu/uvd3.1: Don't validate the firmware when already validated
    
    [ Upstream commit 13e4cf116dbf7a1fb8123a59bea2c098f30d3736 ]
    
    UVD 3.1 firmware validation seems to always fail after
    attempting it when it had already been validated.
    (This works similarly with the VCE 1.0 as well.)
    
    Don't attempt repeating the validation when it's already done.
    
    This caused issues in situations when the system isn't able
    to suspend the GPU properly and so the GPU isn't actually
    powered down. Then amdgpu would fail when calling the IP
    block resume function.
    
    Closes: https://gitlab.freedesktop.org/drm/amd/-/work_items/2887
    Fixes: bb7978111dd3 ("drm/amdgpu: fix SI UVD firmware validate resume fail")
    Signed-off-by: Timur Kristóf <[email protected]>
    Reviewed-by: Christian König <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 889a2cfd889c4a4dd9d0c89ce9a8e60b78be71dd)
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amdgpu/vcn: set no_user_fence for VCN v2.0 enc/dec rings [+ + +]
Author: Yinjie Yao <[email protected]>
Date:   Mon Apr 27 11:45:35 2026 -0400

    drm/amdgpu/vcn: set no_user_fence for VCN v2.0 enc/dec rings
    
    [ Upstream commit 8d80b293b41fcb5e9396db93e788b0f4ebcbafb7 ]
    
    VCN encoder and decoder rings do not support 64-bit user fence writes,
    reject CS submissions with user fences.
    
    Fixes: 1b61de45dfaf ("drm/amdgpu: add initial VCN2.0 support (v2)")
    Reviewed-by: Christian König <[email protected]>
    Reviewed-by: Alex Deucher <[email protected]>
    Signed-off-by: Yinjie Yao <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit e2b5499fca55f1a32960a311bbb62e35891eaf73)
    Signed-off-by: Sasha Levin <[email protected]>

drm/amdgpu/vcn: set no_user_fence for VCN v2.5 enc/dec rings [+ + +]
Author: Yinjie Yao <[email protected]>
Date:   Mon Apr 27 11:45:35 2026 -0400

    drm/amdgpu/vcn: set no_user_fence for VCN v2.5 enc/dec rings
    
    [ Upstream commit 4f317863a3ab212a027d8c8c3cc3af4e3fb95704 ]
    
    VCN encoder and decoder rings do not support 64-bit user fence writes,
    reject CS submissions with user fences.
    
    Fixes: 28c17d72072b ("drm/amdgpu: add VCN2.5 basic supports")
    Reviewed-by: Christian König <[email protected]>
    Reviewed-by: Alex Deucher <[email protected]>
    Signed-off-by: Yinjie Yao <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit efc9dd5590894109bce9a0bfe1fa5592dd6b20b1)
    Signed-off-by: Sasha Levin <[email protected]>

drm/amdgpu/vcn: set no_user_fence for VCN v3.0 enc/dec rings [+ + +]
Author: Yinjie Yao <[email protected]>
Date:   Mon Apr 27 11:45:35 2026 -0400

    drm/amdgpu/vcn: set no_user_fence for VCN v3.0 enc/dec rings
    
    [ Upstream commit f1e5a6660d7cbf006079126d9babbf0ccf538c6b ]
    
    VCN encoder and decoder rings do not support 64-bit user fence writes,
    reject CS submissions with user fences.
    
    Fixes: cf14826cdfb5 ("drm/amdgpu: add VCN3.0 support for Sienna_Cichlid")
    Reviewed-by: Christian König <[email protected]>
    Reviewed-by: Alex Deucher <[email protected]>
    Signed-off-by: Yinjie Yao <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 663bed3c7b8b9a7624b0d95d300ddae034ad0614)
    Signed-off-by: Sasha Levin <[email protected]>

drm/amdgpu/vcn: set no_user_fence for VCN v4.0.3 enc ring [+ + +]
Author: Yinjie Yao <[email protected]>
Date:   Mon Apr 27 11:45:36 2026 -0400

    drm/amdgpu/vcn: set no_user_fence for VCN v4.0.3 enc ring
    
    [ Upstream commit 4532b52b34e4e4310386e6fdf6a643368599f522 ]
    
    VCN encoder and decoder rings do not support 64-bit user fence writes,
    reject CS submissions with user fences.
    
    Fixes: b889ef4ac988 ("drm/amdgpu/vcn: add vcn support for VCN4_0_3")
    Reviewed-by: Christian König <[email protected]>
    Reviewed-by: Alex Deucher <[email protected]>
    Signed-off-by: Yinjie Yao <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit ff1a5a125c5a70c328806b9bc01d7d942cf3f9aa)
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amdgpu: Add default case in DVI mode validation [+ + +]
Author: Srinivasan Shanmugam <[email protected]>
Date:   Thu Mar 12 19:29:54 2026 +0530

    drm/amdgpu: Add default case in DVI mode validation
    
    [ Upstream commit e6020a55b8e364d15eac27f9c788e13114eec6b7 ]
    
    amdgpu_connector_dvi_mode_valid() assigns max_digital_pixel_clock_khz
    based on connector_object_id using a switch statement that lacks a
    default case.
    
    In practice this code path should never be hit because the existing
    cases already cover all digital connector types that this function is
    used for. This is also legacy display code which is not used for new
    hardware.
    
    Add a default case returning MODE_BAD to make the switch exhaustive and
    silence the static analyzer smatch error. The new branch is effectively
    defensive and should never be reached during normal operation.
    
    Fixes: 585b2f685c56 ("drm/amdgpu: Respect max pixel clock for HDMI and DVI-D (v2)")
    Cc: Dan Carpenter <[email protected]>
    Cc: Timur Kristóf <[email protected]>
    Cc: Alex Deucher <[email protected]>
    Cc: Christian König <[email protected]>
    Signed-off-by: Srinivasan Shanmugam <[email protected]>
    Acked-by: Alex Deucher <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/amdgpu: fix AMDGPU_INFO_READ_MMR_REG [+ + +]
Author: Christian König <[email protected]>
Date:   Fri Apr 17 15:52:45 2026 +0200

    drm/amdgpu: fix AMDGPU_INFO_READ_MMR_REG
    
    [ Upstream commit 0ef196a208385b7d7da79f411c161b04e97283e2 ]
    
    There were multiple issues in that code.
    
    First of all the order between the reset semaphore and the mm_lock was
    wrong (e.g. copy_to_user) was called while holding the lock.
    
    Then we allocated memory while holding the reset semaphore which is also
    a pretty big bug and can deadlock.
    
    Then we used down_read_trylock() instead of waiting for the reset to
    finish.
    
    Signed-off-by: Christian König <[email protected]>
    Fixes: 9e823f307074 ("drm/amdgpu: Block MMR_READ IOCTL in reset")
    Reviewed-by: Alex Deucher <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 361b6e6b303d4b691f6c5974d3eaab67ca6dd90e)
    Signed-off-by: Sasha Levin <[email protected]>

drm/amdgpu: fix spelling typos [+ + +]
Author: Alexandre Demers <[email protected]>
Date:   Thu Feb 27 00:05:04 2025 -0500

    drm/amdgpu: fix spelling typos
    
    [ Upstream commit ce43abd7ec9464cf954f90e1c69e11768b02fa0a ]
    
    Found some typos while exploring amdgpu code.
    
    Signed-off-by: Alexandre Demers <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Stable-dep-of: 13e4cf116dbf ("drm/amdgpu/uvd3.1: Don't validate the firmware when already validated")
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/bridge: cadence: cdns-mhdp8546-core: Add mode_valid hook to drm_bridge_funcs [+ + +]
Author: Jayesh Choudhary <[email protected]>
Date:   Tue Dec 9 17:33:28 2025 +0530

    drm/bridge: cadence: cdns-mhdp8546-core: Add mode_valid hook to drm_bridge_funcs
    
    [ Upstream commit 6dbff34016052b099558b76632e4983e2df13fed ]
    
    Add cdns_mhdp_bridge_mode_valid() to check if specific mode is valid for
    this bridge or not. In the legacy usecase with
    !DRM_BRIDGE_ATTACH_NO_CONNECTOR we were using the hook from
    drm_connector_helper_funcs but with DRM_BRIDGE_ATTACH_NO_CONNECTOR
    we need to have mode_valid() in drm_bridge_funcs.
    
    Without this patch, when using DRM_BRIDGE_ATTACH_NO_CONNECTOR
    flag, the cdns_mhdp_bandwidth_ok() function would not be called
    during  mode validation, potentially allowing modes that exceed
    the bridge's bandwidth capabilities to be incorrectly marked as
    valid.
    
    Fixes: c932ced6b585 ("drm/tidss: Update encoder/bridge chain connect model")
    Reviewed-by: Tomi Valkeinen <[email protected]>
    Signed-off-by: Jayesh Choudhary <[email protected]>
    Signed-off-by: Harikrishna Shenoy <[email protected]>
    Reviewed-by: Luca Ceresoli <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Luca Ceresoli <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/bridge: cadence: cdns-mhdp8546-core: Handle HDCP state in bridge atomic check [+ + +]
Author: Harikrishna Shenoy <[email protected]>
Date:   Tue Dec 9 17:33:29 2025 +0530

    drm/bridge: cadence: cdns-mhdp8546-core: Handle HDCP state in bridge atomic check
    
    [ Upstream commit 4a8edd658489ec2a3d7e20482fa9e8d366153d8d ]
    
    Now that we have DRM_BRIDGE_ATTACH_NO_CONNECTOR framework, handle the
    HDCP state change in bridge atomic check as well to enable correct
    functioning for HDCP in both DRM_BRIDGE_ATTACH_NO_CONNECTOR and
    !DRM_BRIDGE_ATTACH_NO_CONNECTOR case.
    
    Without this patch, when using DRM_BRIDGE_ATTACH_NO_CONNECTOR flag, HDCP
    state changes would not be properly handled during atomic commits,
    potentially leading to HDCP authentication failures or incorrect
    protection status for content requiring HDCP encryption.
    
    Fixes: 6a3608eae6d33 ("drm: bridge: cdns-mhdp8546: Enable HDCP")
    Signed-off-by: Harikrishna Shenoy <[email protected]>
    Reviewed-by: Luca Ceresoli <[email protected]>
    Reviewed-by: Tomi Valkeinen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Luca Ceresoli <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/bridge: cadence: cdns-mhdp8546-core: Set the mhdp connector earlier in atomic_enable() [+ + +]
Author: Jayesh Choudhary <[email protected]>
Date:   Tue Dec 9 17:33:27 2025 +0530

    drm/bridge: cadence: cdns-mhdp8546-core: Set the mhdp connector earlier in atomic_enable()
    
    [ Upstream commit 43d6508ddbf9fb974fbc359a033154f78c9d4c8b ]
    
    In case if we get errors in cdns_mhdp_link_up() or cdns_mhdp_reg_read()
    in atomic_enable, we will go to cdns_mhdp_modeset_retry_fn() and will hit
    NULL pointer while trying to access the mutex. We need the connector to
    be set before that. Unlike in legacy cases with flag
    !DRM_BRIDGE_ATTACH_NO_CONNECTOR, we do not have connector initialised
    in bridge_attach(), so add the mhdp->connector_ptr in device structure
    to handle both cases with DRM_BRIDGE_ATTACH_NO_CONNECTOR and
    !DRM_BRIDGE_ATTACH_NO_CONNECTOR, set it in atomic_enable() earlier to
    avoid possible NULL pointer dereference in recovery paths like
    modeset_retry_fn() with the DRM_BRIDGE_ATTACH_NO_CONNECTOR flag set.
    
    Fixes: c932ced6b585 ("drm/tidss: Update encoder/bridge chain connect model")
    Signed-off-by: Jayesh Choudhary <[email protected]>
    Signed-off-by: Harikrishna Shenoy <[email protected]>
    Reviewed-by: Luca Ceresoli <[email protected]>
    Reviewed-by: Tomi Valkeinen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Luca Ceresoli <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/gma500/oaktrail_hdmi: fix i2c adapter leak on setup [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri May 8 16:44:44 2026 +0200

    drm/gma500/oaktrail_hdmi: fix i2c adapter leak on setup
    
    commit 950953f774b3f69da6f413e045ef075e1f3da2df upstream.
    
    Make sure to drop the reference taken to the I2C adapter (and its
    module) when setting up HDMI to allow the adapter to be deregistered.
    
    Fixes: 1b082ccf5901 ("gma500: Add Oaktrail support")
    Cc: [email protected]      # 3.3
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Patrik Jakobsson <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/gma500/oaktrail_lvds: fix hang on init failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri May 8 16:44:45 2026 +0200

    drm/gma500/oaktrail_lvds: fix hang on init failure
    
    commit 657a091ab6d01d0091b77660c75cfed573c9a53e upstream.
    
    The LVDS init code looks up an I2C adapter using i2c_get_adapter() and
    tries to read the EDID before falling back to allocating and registering
    its own adapter.
    
    The error handling does not separate these cases so on a late init
    failure it will try to deregister and free also an adapter that had
    previously been registered. Since i2c_get_adapter() takes another
    reference to the adapter, deregistration hangs indefinitely while
    waiting for the reference to be released.
    
    Fix this by only destroying adapters allocated during LVDS init on
    errors.
    
    Fixes: a57ebfc0b4da ("drm/gma500: Make oaktrail lvds use ddc adapter from drm_connector")
    Cc: [email protected]      # 6.0
    Cc: Patrik Jakobsson <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Patrik Jakobsson <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/gma500/oaktrail_lvds: fix i2c adapter leaks on init [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri May 8 16:44:46 2026 +0200

    drm/gma500/oaktrail_lvds: fix i2c adapter leaks on init
    
    commit 84d1c9b416d54afe760ca4c378bd95c89261254c upstream.
    
    The LVDS init code looks up an I2C adapter using i2c_get_adapter() and
    tries to read the EDID before falling back to allocating and registering
    its own adapter.
    
    Make sure to drop the references taken by i2c_get_adapter() when falling
    back to allocating an adapter as well as on late errors to allow the
    looked up adapter to be deregistered.
    
    Fixes: 1b082ccf5901 ("gma500: Add Oaktrail support")
    Cc: [email protected]      # 3.3
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Patrik Jakobsson <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/i915/dp: Fix VSC dynamic range signaling for RGB formats [+ + +]
Author: Chaitanya Kumar Borah <[email protected]>
Date:   Tue May 5 14:39:20 2026 +0530

    drm/i915/dp: Fix VSC dynamic range signaling for RGB formats
    
    commit 1ae15b6c7965d137eef21f2cc7d367b29cb88369 upstream.
    
    For RGB, set dynamic_range to CTA or VESA based on
    crtc_state->limited_color_range so sinks apply correct
    quantization. YCbCr remains limited (CTA) range.
    (DP v1.4, Table 5-1)
    
    v2:
    - Added Reported-by and Tested-by tags
    
    v3:
    - Add back YCbCr comment(Suraj)
    
    Cc: [email protected] #v5.8+
    Reported-by: DeepChirp <[email protected]>
    Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/work_items/15874
    Tested-by: DeepChirp <[email protected]>
    Fixes: 9799c4c3b76e ("drm/i915/dp: Add compute routine for DP VSC SDP")
    Assisted-by: GitHub-Copilot:GPT-5.4
    Signed-off-by: Chaitanya Kumar Borah <[email protected]>
    Reviewed-by: Suraj Kandpal <[email protected]>
    Signed-off-by: Suraj Kandpal <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    (cherry picked from commit 38e10ddae6f8d42a2e8437fcd25a1cac51106c64)
    Signed-off-by: Tvrtko Ursulin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/i915/wm: Verify the correct plane DDB entry [+ + +]
Author: Ville Syrjälä <[email protected]>
Date:   Tue Mar 24 15:48:38 2026 +0200

    drm/i915/wm: Verify the correct plane DDB entry
    
    [ Upstream commit a97c88a176b6b8d116f4d3f508f3bd02bc77b462 ]
    
    Actually verify the DDB entry for the plane we're looking
    at instead of always verifying the cursor DDB.
    
    Fixes: 7d4561722c3b ("drm/i915: Tweak plane ddb allocation tracking")
    Signed-off-by: Ville Syrjälä <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Vinod Govindapillai <[email protected]>
    (cherry picked from commit f002f7c7439de18117a31ca84dc87a59719c3dd6)
    Signed-off-by: Tvrtko Ursulin <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/i915: Constify watermark state checker [+ + +]
Author: Ville Syrjälä <[email protected]>
Date:   Wed Oct 4 18:56:00 2023 +0300

    drm/i915: Constify watermark state checker
    
    [ Upstream commit 487a2db8bc4eb79c53c9ff8fca65a7fc8350df6c ]
    
    The skl+ wm state checker has no reason to modify the crtc state,
    so make it const.
    
    Signed-off-by: Ville Syrjälä <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Reviewed-by: Jani Nikula <[email protected]>
    Stable-dep-of: a97c88a176b6 ("drm/i915/wm: Verify the correct plane DDB entry")
    Signed-off-by: Sasha Levin <[email protected]>

drm/i915: Extract intel_dbuf_mdclk_cdclk_ratio_update() [+ + +]
Author: Gustavo Sousa <[email protected]>
Date:   Tue Mar 12 13:36:35 2024 -0300

    drm/i915: Extract intel_dbuf_mdclk_cdclk_ratio_update()
    
    [ Upstream commit 66a0e0681392420b326f00ba732e6bda099eda29 ]
    
    As of Xe2LPD, it is now possible to select the source of the MDCLK
    as either the CD2XCLK or the CDCLK PLL.
    
    Previous display IPs were hardcoded to use the CD2XCLK. For those, the
    ratio between MDCLK and CDCLK remained constant, namely 2. For Xe2LPD,
    when we select the CDCLK PLL as the source, the ratio will vary
    according to the squashing configuration (since the cd2x divisor is
    fixed for all supported configurations).
    
    To help the transition to supporting changes in the ratio, extract the
    function intel_dbuf_mdclk_cdclk_ratio_update() from the existing logic
    and call it using 2 as hardcoded ratio. Upcoming changes will use that
    function for updates in the ratio due to CDCLK changes.
    
    Bspec: 50057, 69445, 49213, 68868
    Reviewed-by: Matt Roper <[email protected]>
    Signed-off-by: Gustavo Sousa <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Lucas De Marchi <[email protected]>
    Stable-dep-of: a97c88a176b6 ("drm/i915/wm: Verify the correct plane DDB entry")
    Signed-off-by: Sasha Levin <[email protected]>

drm/i915: Loop over all active pipes in intel_mbus_dbox_update [+ + +]
Author: Stanislav Lisovskiy <[email protected]>
Date:   Tue Apr 2 18:50:07 2024 +0300

    drm/i915: Loop over all active pipes in intel_mbus_dbox_update
    
    [ Upstream commit e8333ab22cd8c750b7c14d3da7c0eef3ba85527f ]
    
    We need to loop through all active pipes, not just the ones, that
    are in current state, because disabling and enabling even a particular
    pipe affects credits in another one.
    
    Reviewed-by: Uma Shankar <[email protected]>
    Signed-off-by: Stanislav Lisovskiy <[email protected]>
    Signed-off-by: Ville Syrjälä <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Stable-dep-of: a97c88a176b6 ("drm/i915/wm: Verify the correct plane DDB entry")
    Signed-off-by: Sasha Levin <[email protected]>

drm/i915: Simplify watermark state checker calling convention [+ + +]
Author: Ville Syrjälä <[email protected]>
Date:   Thu Oct 5 15:27:13 2023 +0300

    drm/i915: Simplify watermark state checker calling convention
    
    [ Upstream commit 8f0994d47e89711e654df4e31eabb8881079880a ]
    
    There is never any reason to pass in both the crtc and its state
    as one can always dig out the crtc from its state. But for more
    consistency across the whole state checker let's just pass the
    overall atomic state+crtc here as well.
    
    v2: Also pass state+crtc here (Jani)
    
    Reviewed-by: Jani Nikula <[email protected]>
    Signed-off-by: Ville Syrjälä <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Stable-dep-of: a97c88a176b6 ("drm/i915/wm: Verify the correct plane DDB entry")
    Signed-off-by: Sasha Levin <[email protected]>

drm/i915: skip __i915_request_skip() for already signaled requests [+ + +]
Author: Sebastian Brzezinka <[email protected]>
Date:   Thu Apr 16 13:31:18 2026 +0200

    drm/i915: skip __i915_request_skip() for already signaled requests
    
    commit 4cfe4c0efbdcde742a47813180cc69b132d7598e upstream.
    
    After a GPU reset the HWSP is zeroed, so previously completed
    requests appear incomplete. If such a request is picked up during
    reset_rewind() and marked guilty, i915_request_set_error_once()
    returns early (fence already signaled), leaving fence.error without
    a fatal error code. The subsequent __i915_request_skip() then hits:
    ```
    GEM_BUG_ON(!fatal_error(rq->fence.error))
    ```
    
    Fixes a kernel BUG observed on Sandy Bridge (Gen6) during
    heartbeat-triggered engine resets.
    ```
    kernel BUG at drivers/gpu/drm/i915/i915_request.c:556!
    RIP: __i915_request_skip+0x15e/0x1d0 [i915]
    ...
    __i915_request_reset+0x212/0xa70 [i915]
    reset_rewind+0xe4/0x280 [i915]
    intel_gt_reset+0x30d/0x5b0 [i915]
    heartbeat+0x516/0x530 [i915]
    ```
    
    Guard __i915_request_skip() with i915_request_signaled(), if the
    fence is already signaled, the ring content is committed and there
    is nothing left to skip.
    
    Fixes: 36e191f0644b ("drm/i915: Apply i915_request_skip() on submission")
    Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/work_items/13729
    Signed-off-by: Sebastian Brzezinka <[email protected]>
    Cc: [email protected] # v5.7+
    Reviewed-by: Krzysztof Karas <[email protected]>
    Reviewed-by: Andi Shyti <[email protected]>
    Signed-off-by: Andi Shyti <[email protected]>
    Link: https://lore.kernel.org/r/fe76921d35b6ae85aa651822726d0d9815aa5362.1776339012.git.sebastian.brzezinka@intel.com
    (cherry picked from commit 5ba54393dcd7adf75a9f39f5a933b1538349cad5)
    Signed-off-by: Tvrtko Ursulin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/komeda: fix integer overflow in AFBC framebuffer size check [+ + +]
Author: Alexander Konyukhov <[email protected]>
Date:   Tue Feb 3 16:48:46 2026 +0300

    drm/komeda: fix integer overflow in AFBC framebuffer size check
    
    [ Upstream commit 779ec12c85c9e4547519e3903a371a3b26a289de ]
    
    The AFBC framebuffer size validation calculates the minimum required
    buffer size by adding the AFBC payload size to the framebuffer offset.
    This addition is performed without checking for integer overflow.
    
    If the addition oveflows, the size check may incorrectly succed and
    allow userspace to provide an undersized drm_gem_object, potentially
    leading to out-of-bounds memory access.
    
    Add usage of check_add_overflow() to safely compute the minimum
    required size and reject the framebuffer if an overflow is detected.
    This makes the AFBC size validation more robust against malformed.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 65ad2392dd6d ("drm/komeda: Added AFBC support for komeda driver")
    Signed-off-by: Alexander Konyukhov <[email protected]>
    Acked-by: Liviu Dudau <[email protected]>
    Signed-off-by: Liviu Dudau <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/msm/a6xx: Fix HLSQ register dumping [+ + +]
Author: Rob Clark <[email protected]>
Date:   Wed Mar 25 11:40:42 2026 -0700

    drm/msm/a6xx: Fix HLSQ register dumping
    
    [ Upstream commit c289a6db9ba6cb974f0317da142e4f665d589566 ]
    
    Fix the bitfield offset of HLSQ_READ_SEL state-type bitfield.  Otherwise
    we are always reading TP state when we wanted SP or HLSQ state.
    
    Reported-by: Connor Abbott <[email protected]>
    Suggested-by: Connor Abbott <[email protected]>
    Fixes: 1707add81551 ("drm/msm/a6xx: Add a6xx gpu state")
    Signed-off-by: Rob Clark <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/714236/
    Message-ID: <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm/a6xx: Use barriers while updating HFI Q headers [+ + +]
Author: Akhil P Oommen <[email protected]>
Date:   Fri Mar 27 05:43:50 2026 +0530

    drm/msm/a6xx: Use barriers while updating HFI Q headers
    
    [ Upstream commit dc78b35d5ec09d1b0b8a937e6e640d2c5a030915 ]
    
    To avoid harmful compiler optimizations and IO reordering in the HW, use
    barriers and READ/WRITE_ONCE helpers as necessary while accessing the HFI
    queue index variables.
    
    Fixes: 4b565ca5a2cb ("drm/msm: Add A6XX device support")
    Signed-off-by: Akhil P Oommen <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/714653/
    Message-ID: <[email protected]>
    Signed-off-by: Rob Clark <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/msm/dpu: fix mismatch between power and frequency [+ + +]
Author: Yuanjie Yang <[email protected]>
Date:   Mon Mar 9 14:37:20 2026 +0800

    drm/msm/dpu: fix mismatch between power and frequency
    
    [ Upstream commit bc1dccc518cc5ab5140fba06c27e7188e0ed342b ]
    
    During DPU runtime suspend, calling dev_pm_opp_set_rate(dev, 0) drops
    the MMCX rail to MIN_SVS while the core clock frequency remains at its
    original (highest) rate. When runtime resume re-enables the clock, this
    may result in a mismatch between the rail voltage and the clock rate.
    
    For example, in the DPU bind path, the sequence could be:
      cpu0: dev_sync_state -> rpmhpd_sync_state
      cpu1:                                     dpu_kms_hw_init
    timeline 0 ------------------------------------------------> t
    
    After rpmhpd_sync_state, the voltage performance is no longer guaranteed
    to stay at the highest level. During dpu_kms_hw_init, calling
    dev_pm_opp_set_rate(dev, 0) drops the voltage, causing the MMCX rail to
    fall to MIN_SVS while the core clock is still at its maximum frequency.
    When the power is re-enabled, only the clock is enabled, leading to a
    situation where the MMCX rail is at MIN_SVS but the core clock is at its
    highest rate. In this state, the rail cannot sustain the clock rate,
    which may cause instability or system crash.
    
    Remove the call to dev_pm_opp_set_rate(dev, 0) from dpu_runtime_suspend
    to ensure the correct vote is restored when DPU resumes.
    
    Fixes: b0530eb11913 ("drm/msm/dpu: Use OPP API to set clk/perf state")
    Signed-off-by: Yuanjie Yang <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/710077/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/msm/dsi: add the missing parameter description [+ + +]
Author: Pengyu Luo <[email protected]>
Date:   Mon Mar 9 18:02:53 2026 +0800

    drm/msm/dsi: add the missing parameter description
    
    [ Upstream commit 958adefc4c0fddee3b12269da5dd7cb49bac953f ]
    
    Add a description for is_bonded_dsi in dsi_adjust_pclk_for_compression
    to match the existing kernel-doc comment.
    
    Fixes: e4eb11b34d6c ("drm/msm/dsi: fix pclk rate calculation for bonded dsi")
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Signed-off-by: Pengyu Luo <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/710112/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm/dsi: rename MSM8998 DSI version from V2_2_0 to V2_0_0 [+ + +]
Author: Alexander Koskovich <[email protected]>
Date:   Tue Mar 24 11:48:27 2026 +0000

    drm/msm/dsi: rename MSM8998 DSI version from V2_2_0 to V2_0_0
    
    [ Upstream commit 913a709dea0eff9c7b2e9470f8c8594b9a0114ab ]
    
    The MSM8998 DSI controller is v2.0.0 as stated in commit 7b8c9e203039
    ("drm/msm/dsi: Add support for MSM8998 DSI controller"). The value was
    always correct just the name was wrong.
    
    Rename and reorder to maintain version sorting.
    
    Fixes: 7b8c9e203039 ("drm/msm/dsi: Add support for MSM8998 DSI controller")
    Reviewed-by: Konrad Dybcio <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Signed-off-by: Alexander Koskovich <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/713717/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/msm/shrinker: Fix can_block() logic [+ + +]
Author: Rob Clark <[email protected]>
Date:   Wed Mar 25 11:41:05 2026 -0700

    drm/msm/shrinker: Fix can_block() logic
    
    [ Upstream commit df0f439e3926817cf577ca6272aad68468ff7624 ]
    
    The intention here was to allow blocking if DIRECT_RECLAIM or if called
    from kswapd and KSWAPD_RECLAIM is set.
    
    Reported by Claude code review: https://lore.gitlab.freedesktop.org/drm-ai-reviews/review-patch9-20260309151119.290217-10-boris.brezillon@collabora.com/ on a panthor patch which had copied similar logic.
    
    Reported-by: Boris Brezillon <[email protected]>
    Fixes: 7860d720a84c ("drm/msm: Fix build break with recent mm tree")
    Signed-off-by: Rob Clark <[email protected]>
    Reviewed-by: Boris Brezillon <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/714238/
    Message-ID: <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/panel: sharp-ls043t1le01: make use of prepare_prev_first [+ + +]
Author: Dmitry Baryshkov <[email protected]>
Date:   Mon Mar 23 03:21:49 2026 +0200

    drm/panel: sharp-ls043t1le01: make use of prepare_prev_first
    
    [ Upstream commit c222177d7c7e1b2e0433d9e47ec2da7015345d50 ]
    
    The DSI link must be powered up to let panel driver to talk to the panel
    during prepare() callback execution. Set the prepare_prev_first flag to
    guarantee this.
    
    Fixes: 9e15123eca79 ("drm/msm/dsi: Stop unconditionally powering up DSI hosts at modeset")
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Douglas Anderson <[email protected]>
    Signed-off-by: Neil Armstrong <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

drm/panel: simple: Correct G190EAN01 prepare timing [+ + +]
Author: Sebastian Reichel <[email protected]>
Date:   Tue Feb 17 16:25:26 2026 +0200

    drm/panel: simple: Correct G190EAN01 prepare timing
    
    [ Upstream commit f1080f82570b797598c1ba7e9c800ae9e94aafc6 ]
    
    The prepare timing specified by the G190EAN01 datasheet should be
    between 30 and 50 ms. Considering it might take some time for the
    LVDS encoder to enable the signal, we should only wait the min.
    required time in the panel driver and not the max. allowed time.
    
    Fixes: 2f7b832fc992 ("drm/panel: simple: Add support for AUO G190EAN01 panel")
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Ian Ray <[email protected]>
    Reviewed-by: Neil Armstrong <[email protected]>
    Signed-off-by: Neil Armstrong <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/panfrost: Fix wait_bo ioctl leaking positive return from dma_resv_wait_timeout() [+ + +]
Author: Gyeyoung Baek <[email protected]>
Date:   Sun Apr 19 16:17:16 2026 +0900

    drm/panfrost: Fix wait_bo ioctl leaking positive return from dma_resv_wait_timeout()
    
    commit 459d75523b71c0ec254d153d8850d0b7008af396 upstream.
    
    dma_resv_wait_timeout() returns a positive 'remaining jiffies' value
    on success, 0 on timeout, and -errno on failure.
    
    panfrost_ioctl_wait_bo() returns this 'long' result from an int-typed
    ioctl handler, so positive values reach userspace as bogus errors.
    Explicitly set ret to 0 on the success path.
    
    Fixes: f3ba91228e8e ("drm/panfrost: Add initial panfrost driver")
    Cc: [email protected]
    Signed-off-by: Gyeyoung Baek <[email protected]>
    Reviewed-by: Adrián Larumbe <[email protected]>
    Reviewed-by: Boris Brezillon <[email protected]>
    Reviewed-by: Steven Price <[email protected]>
    Link: https://patch.msgid.link/fe33f82fded7be1c18e2e0eb2db451d5a738cf39.1776581974.git.gye976@gmail.com
    Signed-off-by: Steven Price <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/sun4i: backend: fix error pointer dereference [+ + +]
Author: Ethan Tidmore <[email protected]>
Date:   Mon Feb 16 19:48:01 2026 -0600

    drm/sun4i: backend: fix error pointer dereference
    
    [ Upstream commit 06277983eca4a31d3c2114fa33d99a6e82484b11 ]
    
    The function drm_atomic_get_plane_state() can return an error pointer
    and is not checked for it. Add error pointer check.
    
    Detected by Smatch:
    drivers/gpu/drm/sun4i/sun4i_backend.c:496 sun4i_backend_atomic_check() error:
    'plane_state' dereferencing possible ERR_PTR()
    
    Fixes: 96180dde23b79 ("drm/sun4i: backend: Add a custom atomic_check for the frontend")
    Signed-off-by: Ethan Tidmore <[email protected]>
    Reviewed-by: Chen-Yu Tsai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Chen-Yu Tsai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/sun4i: Fix resource leaks [+ + +]
Author: Ethan Tidmore <[email protected]>
Date:   Thu Feb 26 10:38:36 2026 -0600

    drm/sun4i: Fix resource leaks
    
    [ Upstream commit 127367ad2e0f4870de60c6d719ae82ecf68d674c ]
    
    Three clocks are not being released in devm_regmap_init_mmio() error
    path.
    
    Add proper goto and set ret to the error code.
    
    Fixes: 8270249fbeaf0 ("drm/sun4i: backend: Create regmap after access is possible")
    Signed-off-by: Ethan Tidmore <[email protected]>
    Reviewed-by: Jernej Skrabec <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Chen-Yu Tsai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/sysfb: ofdrm: fix PCI device reference leaks [+ + +]
Author: Yuho Choi <[email protected]>
Date:   Sun Apr 19 20:25:13 2026 -0400

    drm/sysfb: ofdrm: fix PCI device reference leaks
    
    [ Upstream commit 4aa8110000b0d215deef8eed283565dd0c1def88 ]
    
    display_get_pci_dev_of() gets a referenced PCI device via
    pci_get_device(). Drop that reference when pci_enable_device() fails and
    release it during the managed teardown path after pci_disable_device().
    
    Without that, ofdrm leaks the pci_dev reference on both the error path
    and the normal cleanup path.
    
    Fixes: c8a17756c425 ("drm/ofdrm: Add ofdrm for Open Firmware framebuffers")
    Co-developed-by: Myeonghun Pak <[email protected]>
    Signed-off-by: Myeonghun Pak <[email protected]>
    Co-developed-by: Ijae Kim <[email protected]>
    Signed-off-by: Ijae Kim <[email protected]>
    Co-developed-by: Taegyu Kim <[email protected]>
    Signed-off-by: Taegyu Kim <[email protected]>
    Signed-off-by: Yuho Choi <[email protected]>
    Reviewed-by: Thomas Zimmermann <[email protected]>
    Signed-off-by: Thomas Zimmermann <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/v3d: Reject empty multisync extension to prevent infinite loop [+ + +]
Author: Ashutosh Desai <[email protected]>
Date:   Fri May 15 17:51:58 2026 -0300

    drm/v3d: Reject empty multisync extension to prevent infinite loop
    
    v3d_get_extensions() walks a userspace-provided singly-linked list of
    ioctl extensions without any bound on the chain length. A local user
    can craft a self-referential extension (ext->next == &ext) with zero
    in_sync_count and out_sync_count, which bypasses the existing duplicate-
    extension guard:
    
        if (se->in_sync_count || se->out_sync_count)
                return -EINVAL;
    
    The guard never fires because v3d_get_multisync_post_deps() returns
    immediately when count is zero, leaving both fields at zero on every
    iteration. The result is an infinite loop in kernel context, blocking
    the calling thread and pegging a CPU core indefinitely.
    
    Fix this by rejecting a multisync extension where both in_sync_count
    and out_sync_count are zero in v3d_get_multisync_submit_deps(). An
    empty multisync carries no synchronization information and serves no
    useful purpose, so returning -EINVAL for such an extension is the
    correct defense against this attack vector.
    
    Fixes: e4165ae8304e ("drm/v3d: add multiple syncobjs support")
    Cc: [email protected]
    Signed-off-by: Ashutosh Desai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Maíra Canal <[email protected]>
    (cherry picked from commit fb44d589bf3148e13452185a6e772a7efbf2d684)
    Signed-off-by: Maíra Canal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dt-bindings: clock: qcom,dispcc-sc7180: Define MDSS resets [+ + +]
Author: Konrad Dybcio <[email protected]>
Date:   Tue Jan 20 12:19:25 2026 +0100

    dt-bindings: clock: qcom,dispcc-sc7180: Define MDSS resets
    
    [ Upstream commit fc6e29d42872680dca017f2e5169eefe971f8d89 ]
    
    The MDSS resets have so far been left undescribed. Fix that.
    
    Fixes: 75616da71291 ("dt-bindings: clock: Introduce QCOM sc7180 display clock bindings")
    Signed-off-by: Konrad Dybcio <[email protected]>
    Reviewed-by: Taniya Das <[email protected]>
    Acked-by: Krzysztof Kozlowski <[email protected]>
    Tested-by: Val Packett <[email protected]> # sc7180-ecs-liva-qc710
    Link: https://lore.kernel.org/r/20260120-topic-7180_dispcc_bcr-v1-1-0b1b442156c3@oss.qualcomm.com
    Signed-off-by: Bjorn Andersson <[email protected]>
    Stable-dep-of: b0bc6011c549 ("clk: qcom: dispcc-sc7180: Add missing MDSS resets")
    Signed-off-by: Sasha Levin <[email protected]>

dt-bindings: clock: qcom,gcc-sc8180x: Add missing GDSCs [+ + +]
Author: Val Packett <[email protected]>
Date:   Thu Mar 12 08:12:06 2026 -0300

    dt-bindings: clock: qcom,gcc-sc8180x: Add missing GDSCs
    
    [ Upstream commit 76404ffbf07f28a5ec04748e18fce3dac2e78ef6 ]
    
    There are 5 more GDSCs that we were ignoring and not putting to sleep,
    which are listed in downstream DTS. Add them.
    
    Signed-off-by: Val Packett <[email protected]>
    Acked-by: Krzysztof Kozlowski <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Stable-dep-of: 3565741eb985 ("clk: qcom: gcc-sc8180x: Add missing GDSCs")
    Signed-off-by: Sasha Levin <[email protected]>

dt-bindings: interrupt-controller: arm,gic-v3: Fix EPPI range [+ + +]
Author: Geert Uytterhoeven <[email protected]>
Date:   Fri Mar 6 11:26:20 2026 +0100

    dt-bindings: interrupt-controller: arm,gic-v3: Fix EPPI range
    
    [ Upstream commit 15cfc8984defc17e5e4de1f58db7b993240fcbda ]
    
    According to the "Arm Generic Interrupt Controller (GIC) Architecture
    Specification, v3 and v4", revision H.b[1], there can be only 64
    Extended PPI interrupts.
    
    [1] https://developer.arm.com/documentation/ihi0069/hb/
    
    Fixes: 4b049063e0bcbfd3 ("dt-bindings: interrupt-controller: arm,gic-v3: Describe EPPI range support")
    Signed-off-by: Geert Uytterhoeven <[email protected]>
    Brain-farted-by: Marc Zyngier <[email protected]>
    Acked-by: Marc Zyngier <[email protected]>
    Link: https://patch.msgid.link/3e49a63c6b2b6ee48e3737adee87781f9c136c5f.1772792753.git.geert+renesas@glider.be
    Signed-off-by: Rob Herring (Arm) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

dt-bindings: net: dsa: nxp,sja1105: make spi-cpol optional for sja1110 [+ + +]
Author: Josua Mayer <[email protected]>
Date:   Thu Apr 9 14:34:33 2026 +0200

    dt-bindings: net: dsa: nxp,sja1105: make spi-cpol optional for sja1110
    
    [ Upstream commit 600f01dc4bd0c736b3ffea9f7976136d8bf1b136 ]
    
    Currently, the binding requires 'spi-cpha' for SJA1105 and 'spi-cpol'
    for SJA1110.
    
    However, the SJA1110 supports both SPI modes 0 and 2. Mode 2
    (cpha=0, cpol=1) is used by the NXP LX2160 Bluebox 3.
    
    On the SolidRun i.MX8DXL HummingBoard Telematics, mode 0 is stable,
    while forcing mode 2 introduces CRC errors especially during bursts.
    
    Drop the requirement on spi-cpol for SJA1110.
    
    Fixes: af2eab1a8243 ("dt-bindings: net: nxp,sja1105: document spi-cpol/cpha")
    Signed-off-by: Josua Mayer <[email protected]>
    Acked-by: Conor Dooley <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
e1000e: Unroll PTP in probe error handling [+ + +]
Author: Matt Vollrath <[email protected]>
Date:   Thu Apr 16 17:53:36 2026 -0700

    e1000e: Unroll PTP in probe error handling
    
    [ Upstream commit aa3f7fe409350857c25d050482a2eef2cfd69b58 ]
    
    If probe fails after registering the PTP clock and its delayed work,
    these resources must be released.
    
    This was not an issue until a 2016 fix moved the e1000e_ptp_init() call
    before the jump to err_register.
    
    Fixes: aa524b66c5ef ("e1000e: don't modify SYSTIM registers during SIOCSHWTSTAMP ioctl")
    Signed-off-by: Matt Vollrath <[email protected]>
    Tested-by: Avigail Dahan <[email protected]>
    Signed-off-by: Jacob Keller <[email protected]>
    Link: https://patch.msgid.link/20260416-iwl-net-submission-2026-04-14-v2-12-686c33c9828d@intel.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
efi/capsule-loader: fix incorrect sizeof in phys array reallocation [+ + +]
Author: Thomas Huth <[email protected]>
Date:   Fri Apr 10 17:46:37 2026 +0200

    efi/capsule-loader: fix incorrect sizeof in phys array reallocation
    
    [ Upstream commit 48a428215782321b56956974f23593e40ce84b7a ]
    
    The krealloc() call for cap_info->phys in __efi_capsule_setup_info() uses
    sizeof(phys_addr_t *) instead of sizeof(phys_addr_t), which might be
    causing an undersized allocation.
    
    The allocation is also inconsistent with the initial array allocation in
    efi_capsule_open() that allocates one entry with sizeof(phys_addr_t),
    and the efi_capsule_write() function that stores phys_addr_t values (not
    pointers) via page_to_phys().
    
    On 64-bit systems where sizeof(phys_addr_t) == sizeof(phys_addr_t *), this
    goes unnoticed. On 32-bit systems with PAE where phys_addr_t is 64-bit but
    pointers are 32-bit, this allocates half the required space, which might
    lead to a heap buffer overflow when storing physical addresses.
    
    This is similar to the bug fixed in commit fccfa646ef36 ("efi/capsule-loader:
    fix incorrect allocation size") which fixed the same issue at the initial
    allocation site.
    
    Fixes: f24c4d478013 ("efi/capsule-loader: Reinstate virtual capsule mapping")
    Assisted-by: Claude:claude-sonnet-4-5
    Signed-off-by: Thomas Huth <[email protected]>
    Signed-off-by: Ard Biesheuvel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
eventfs: Use list_add_tail_rcu() for SRCU-protected children list [+ + +]
Author: David Carlier <[email protected]>
Date:   Fri May 15 12:16:33 2026 -0400

    eventfs: Use list_add_tail_rcu() for SRCU-protected children list
    
    [ Upstream commit f67950b2887fa10df50c4317a1fe98a65bc6875b ]
    
    Commit d2603279c7d6 ("eventfs: Use list_del_rcu() for SRCU protected
    list variable") converted the removal side to pair with the
    list_for_each_entry_srcu() walker in eventfs_iterate(). The insertion
    in eventfs_create_dir() was left as a plain list_add_tail(), which on
    weakly-ordered architectures can expose a new entry to the SRCU reader
    before its list pointers and fields are observable.
    
    Use list_add_tail_rcu() so the publication pairs with the existing
    list_del_rcu() and list_for_each_entry_srcu().
    
    Fixes: 43aa6f97c2d0 ("eventfs: Get rid of dentry pointers without refcounts")
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: David Carlier <[email protected]>
    Signed-off-by: Steven Rostedt <[email protected]>
    [ adapted scoped_guard(mutex, &eventfs_mutex) block to explicit mutex_lock()/mutex_unlock() pair ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
f2fs: fix false alarm of lockdep on cp_global_sem lock [+ + +]
Author: Chao Yu <[email protected]>
Date:   Wed May 20 07:17:33 2026 -0400

    f2fs: fix false alarm of lockdep on cp_global_sem lock
    
    [ Upstream commit 6a5e3de9c2bb0b691d16789a5d19e9276a09b308 ]
    
    lockdep reported a potential deadlock:
    
    a) TCMU device removal context:
     - call del_gendisk() to get q->q_usage_counter
     - call start_flush_work() to get work_completion of wb->dwork
    b) f2fs writeback context:
     - in wb_workfn(), which holds work_completion of wb->dwork
     - call f2fs_balance_fs() to get sbi->gc_lock
    c) f2fs vfs_write context:
     - call f2fs_gc() to get sbi->gc_lock
     - call f2fs_write_checkpoint() to get sbi->cp_global_sem
    d) f2fs mount context:
     - call recover_fsync_data() to get sbi->cp_global_sem
     - call f2fs_check_and_fix_write_pointer() to call blkdev_report_zones()
       that goes down to blk_mq_alloc_request and get q->q_usage_counter
    
    Original callstack is in Closes tag.
    
    However, I think this is a false alarm due to before mount returns
    successfully (context d), we can not access file therein via vfs_write
    (context c).
    
    Let's introduce per-sb cp_global_sem_key, and assign the key for
    cp_global_sem, so that lockdep can recognize cp_global_sem from
    different super block correctly.
    
    A lot of work are done by Shin'ichiro Kawasaki, thanks a lot for
    the work.
    
    Fixes: c426d99127b1 ("f2fs: Check write pointer consistency of open zones")
    Cc: [email protected]
    Reported-and-tested-by: Shin'ichiro Kawasaki <[email protected]>
    Closes: https://lore.kernel.org/linux-f2fs-devel/[email protected]
    Signed-off-by: Shin'ichiro Kawasaki <[email protected]>
    Signed-off-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    [ re-anchored lockdep_register_key after init_f2fs_rwsem and placed lockdep_unregister_key before kfree(sbi) in f2fs_put_super instead of kill_f2fs_super ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: fix incorrect file address mapping when inline inode is unwritten [+ + +]
Author: Yongpeng Yang <[email protected]>
Date:   Tue May 19 12:18:07 2026 -0400

    f2fs: fix incorrect file address mapping when inline inode is unwritten
    
    [ Upstream commit 68a0178981a0f493295afa29f8880246e561494c ]
    
    When `fileinfo->fi_flags` does not have the `FIEMAP_FLAG_SYNC` bit set
    and inline data has not been persisted yet, the physical address of the
    extent is calculated incorrectly for unwritten inline inodes.
    
    root@vm:/mnt/f2fs# dd if=/dev/zero of=data.3k bs=3k count=1
    root@vm:/mnt/f2fs# f2fs_io fiemap 0 100 data.3k
    Fiemap: offset = 0 len = 100
            logical addr.    physical addr.   length           flags
    0       0000000000000000 00000ffffffff16c 0000000000000c00 00000301
    
    This patch fixes the issue by checking if the inode's address is valid.
    If the inline inode is unwritten, set the physical address to 0 and
    mark the extent with `FIEMAP_EXTENT_UNKNOWN | FIEMAP_EXTENT_DELALLOC`
    flags.
    
    Cc: [email protected]
    Fixes: 67f8cf3cee6f ("f2fs: support fiemap for inline_data")
    Signed-off-by: Yongpeng Yang <[email protected]>
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    [ renamed `ifolio` to `ipage` in `inline_data_addr()` and `F2FS_INODE()` calls ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: protect extension_list reading with sb_lock in f2fs_sbi_show() [+ + +]
Author: Yongpeng Yang <[email protected]>
Date:   Fri Apr 10 23:05:39 2026 +0800

    f2fs: protect extension_list reading with sb_lock in f2fs_sbi_show()
    
    [ Upstream commit 5909bedbed38c558bee7cb6758ceedf9bc3a9194 ]
    
    In f2fs_sbi_show(), the extension_list, extension_count and
    hot_ext_count are read without holding sbi->sb_lock. If a concurrent
    sysfs store modifies the extension list via f2fs_update_extension_list(),
    the show path may read inconsistent count and array contents, potentially
    leading to out-of-bounds access or displaying stale data.
    
    Fix this by holding sb_lock around the entire extension list read
    and format operation.
    
    Fixes: b6a06cbbb5f7 ("f2fs: support hot file extension")
    Signed-off-by: Yongpeng Yang <[email protected]>
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

f2fs: Use sysfs_emit_at() to simplify code [+ + +]
Author: Christophe JAILLET <[email protected]>
Date:   Thu Aug 15 08:47:28 2024 +0800

    f2fs: Use sysfs_emit_at() to simplify code
    
    [ Upstream commit f7a678bbe5a8f22cfcef5369757cc9b95f73e027 ]
    
    This file already uses sysfs_emit(). So be consistent and also use
    sysfs_emit_at().
    
    This slightly simplifies the code and makes it more readable.
    
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Christophe JAILLET <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Stable-dep-of: 5909bedbed38 ("f2fs: protect extension_list reading with sb_lock in f2fs_sbi_show()")
    Signed-off-by: Sasha Levin <[email protected]>

 
fbdev: matroxfb: Mark variable with __maybe_unused to avoid W=1 build break [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Fri Mar 20 15:36:46 2026 +0100

    fbdev: matroxfb: Mark variable with __maybe_unused to avoid W=1 build break
    
    [ Upstream commit caf6144053b4e1c815aa56afb54745a176f999df ]
    
    Clang is not happy about set but unused variable:
    
    drivers/video/fbdev/matrox/g450_pll.c:412:18: error: variable 'mnp' set but not used
       412 |         unsigned int mnp;
           |                      ^
    1 error generated.
    
    Since the commit 7b987887f97b ("video: fbdev: matroxfb: remove dead code
    and set but not used variable") the 'mnp' became unused, but eliminating
    that code might have side-effects. The question here is what should we do
    with 'mnp'? The easiest way out is just mark it with __maybe_unused which
    will shut the compiler up and won't change any possible IO flow. So does
    this change.
    
    A dive into the history of the driver:
    
    The problem was revealed when the #if 0 guarded code along with unused
    pixel_vco variable was removed. That code was introduced in the original
    commit 213d22146d1f ("[PATCH] (1/3) matroxfb for 2.5.3"). And then guarded
    in the commit 705e41f82988 ("matroxfb DVI updates: Handle DVI output on
    G450/G550. Powerdown unused portions of G450/G550 DAC. Split G450/G550 DAC
    from older DAC1064 handling. Modify PLL setting when both CRTCs use same
    pixel clocks.").
    
    NOTE: The two commits mentioned above pre-date Git era and available in
    history.git repository for archaeological purposes.
    
    Even without that guard the modern compilers may see that the pixel_vco
    wasn't ever used and seems a leftover after some debug or review made
    25 years ago.
    
    The g450_mnp2vco() doesn't have any IO and as Jason said doesn't seem
    to have any side effects either than some unneeded CPU processing during
    runtime. I agree that's unlikely that timeout (or heating up the CPU) has
    any effect on the HW (GPU/display) functionality.
    
    Fixes: 7b987887f97b ("video: fbdev: matroxfb: remove dead code and set but not used variable")
    Signed-off-by: Andy Shevchenko <[email protected]>
    Reviewed-by: Jason Yan <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

fbdev: offb: fix PCI device reference leak on probe failure [+ + +]
Author: Yuho Choi <[email protected]>
Date:   Sun Apr 19 21:01:18 2026 -0400

    fbdev: offb: fix PCI device reference leak on probe failure
    
    [ Upstream commit 869b93ba04088713596e68453c1146f52f713290 ]
    
    offb_init_nodriver() gets a referenced PCI device with pci_get_device().
    If pci_enable_device() fails, the function returns without dropping that
    reference.
    
    Release the PCI device reference before returning from the
    pci_enable_device() failure path.
    
    Fixes: 5bda8f7b5468 ("video: fbdev: offb: Call pci_enable_device() before using the PCI VGA device")
    Co-developed-by: Myeonghun Pak <[email protected]>
    Signed-off-by: Myeonghun Pak <[email protected]>
    Co-developed-by: Ijae Kim <[email protected]>
    Signed-off-by: Ijae Kim <[email protected]>
    Co-developed-by: Taegyu Kim <[email protected]>
    Signed-off-by: Taegyu Kim <[email protected]>
    Signed-off-by: Yuho Choi <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
firmware: dmi: Correct an indexing error in dmi.h [+ + +]
Author: Mario Limonciello (AMD) <[email protected]>
Date:   Sat Mar 7 08:10:20 2026 -0600

    firmware: dmi: Correct an indexing error in dmi.h
    
    [ Upstream commit c064abc68e009d2cc18416e7132d9c25e03125b6 ]
    
    The entries later in enum dmi_entry_type don't match the SMBIOS
    specification¹.
    
    The entry for type 33: `64-Bit Memory Error Information` is not present and
    thus the index for all later entries is incorrect.
    
    Add it.
    
    Also, add missing entry types 43-46, while at it.
    
      ¹ Search for "System Management BIOS (SMBIOS) Reference Specification"
    
      [ bp: Drop the flaky SMBIOS spec URL. ]
    
    Fixes: 93c890dbe5287 ("firmware: Add DMI entry types to the headers")
    Signed-off-by: Mario Limonciello (AMD) <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Reviewed-by: Jean Delvare <[email protected]>
    Reviewed-by: Yazen Ghannam <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
fs/adfs: validate nzones in adfs_validate_bblk() [+ + +]
Author: Bae Yeonju <[email protected]>
Date:   Sat Mar 21 13:45:02 2026 +0900

    fs/adfs: validate nzones in adfs_validate_bblk()
    
    [ Upstream commit dd9d3e16c2d5fa166e13dce07413be51f42c8f5d ]
    
    Reject ADFS disc records with a zero zone count during boot block
    validation, before the disc record is used.
    
    When nzones is 0, adfs_read_map() passes it to kmalloc_array(0, ...)
    which returns ZERO_SIZE_PTR, and adfs_map_layout() then writes to
    dm[-1], causing an out-of-bounds write before the allocated buffer.
    
    adfs_validate_dr0() already rejects nzones != 1 for old-format
    images.  Add the equivalent check to adfs_validate_bblk() for
    new-format images so that a crafted image with nzones == 0 is
    rejected at probe time.
    
    Found by syzkaller.
    
    Fixes: f6f14a0d71b0 ("fs/adfs: map: move map-specific sb initialisation to map.c")
    Signed-off-by: Bae Yeonju <[email protected]>
    Signed-off-by: Russell King (Oracle) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
fs/ntfs3: terminate the cached volume label after UTF-8 conversion [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Fri Mar 27 14:19:55 2026 +0800

    fs/ntfs3: terminate the cached volume label after UTF-8 conversion
    
    [ Upstream commit a6cd43fe9b083fa23fe1595666d5738856cb261a ]
    
    ntfs_fill_super() loads the on-disk volume label with utf16s_to_utf8s()
    and stores the result in sbi->volume.label. The converted label is later
    exposed through ntfs3_label_show() using %s, but utf16s_to_utf8s() only
    returns the number of bytes written and does not add a trailing NUL.
    
    If the converted label fills the entire fixed buffer,
    ntfs3_label_show() can read past the end of sbi->volume.label while
    looking for a terminator.
    
    Terminate the cached label explicitly after a successful conversion and
    clamp the exact-full case to the last byte of the buffer.
    
    Fixes: 82cae269cfa9 ("fs/ntfs3: Add initialization of super block")
    Signed-off-by: Pengpeng Hou <[email protected]>
    Signed-off-by: Konstantin Komarov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
fs/omfs: reject s_sys_blocksize smaller than OMFS_DIR_START [+ + +]
Author: HyungJung Joo <[email protected]>
Date:   Tue Mar 17 14:48:27 2026 +0900

    fs/omfs: reject s_sys_blocksize smaller than OMFS_DIR_START
    
    [ Upstream commit 0621c385fda1376e967f37ccd534c26c3e511d14 ]
    
    omfs_fill_super() rejects oversized s_sys_blocksize values (> PAGE_SIZE),
    but it does not reject values smaller than OMFS_DIR_START (0x1b8 = 440).
    
    Later, omfs_make_empty() uses
    
        sbi->s_sys_blocksize - OMFS_DIR_START
    
    as the length argument to memset().  Since s_sys_blocksize is u32,
    a crafted filesystem image with s_sys_blocksize < OMFS_DIR_START causes
    an unsigned underflow there, wrapping to a value near 2^32.  That drives
    a ~4 GiB memset() from bh->b_data + OMFS_DIR_START and overwrites kernel
    memory far beyond the backing block buffer.
    
    Add the corresponding lower-bound check alongside the existing upper-bound
    check in omfs_fill_super(), so that malformed images are rejected during
    superblock validation before any filesystem data is processed.
    
    Fixes: a3ab7155ea21 ("omfs: add directory routines")
    Signed-off-by: Hyungjung Joo <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
futex: Prevent lockup in requeue-PI during signal/ timeout wakeup [+ + +]
Author: Sebastian Andrzej Siewior <[email protected]>
Date:   Tue Apr 28 12:34:25 2026 +0200

    futex: Prevent lockup in requeue-PI during signal/ timeout wakeup
    
    [ Upstream commit bc7304f3ae20972d11db6e0b1b541c63feda5f05 ]
    
    During wait-requeue-pi (task A) and requeue-PI (task B) the following
    race can happen:
    
         Task A                             Task B
      futex_wait_requeue_pi()
        futex_setup_timer()
        futex_do_wait()
                                       futex_requeue()
                                            CLASS(hb, hb1)(&key1);
                                            CLASS(hb, hb2)(&key2);
            *timeout*
        futex_requeue_pi_wakeup_sync()
            requeue_state = Q_REQUEUE_PI_IGNORE
    
        *blocks on hb->lock*
    
                                            futex_proxy_trylock_atomic()
                                              futex_requeue_pi_prepare()
                                                Q_REQUEUE_PI_IGNORE => -EAGAIN
                                            double_unlock_hb(hb1, hb2)
                                             *retry*
    
    Task B acquires both hb locks and attempts to acquire the PI-lock of the
    top most waiter (task B). Task A is leaving early due to a signal/
    timeout and started removing itself from the queue. It updates its
    requeue_state but can not remove it from the list because this requires
    the hb lock which is owned by task B.
    
    Usually task A is able to swoop the lock after task B unlocked it.
    However if task B is of higher priority then task A may not be able to
    wake up in time and acquire the lock before task B gets it again.
    Especially on a UP system where A is never scheduled.
    
    As a result task A blocks on the lock and task B busy loops, trying to
    make progress but live locks the system instead. Tragic.
    
    This can be fixed by removing the top most waiter from the list in this
    case. This allows task B to grab the next top waiter (if any) in the
    next iteration and make progress.
    
    Remove the top most waiter if futex_requeue_pi_prepare() fails.
    Let the waiter conditionally remove itself from the list in
    handle_early_requeue_pi_wakeup().
    
    Fixes: 07d91ef510fb1 ("futex: Prevent requeue_pi() lock nesting issue on RT")
    Reported-by: Moritz Klammler <[email protected]>
    Signed-off-by: Sebastian Andrzej Siewior <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Closes: https://lore.kernel.org/all/VE1PR06MB6894BE61C173D802365BE19DFF4CA@VE1PR06MB6894.eurprd06.prod.outlook.com
    Signed-off-by: Sasha Levin <[email protected]>

 
gfs2: add some missing log locking [+ + +]
Author: Andreas Gruenbacher <[email protected]>
Date:   Tue Mar 31 06:13:42 2026 +0200

    gfs2: add some missing log locking
    
    [ Upstream commit fe2c8d051150b90b3ccb85f89e3b1d636cb88ec8 ]
    
    Function gfs2_logd() calls the log flushing functions gfs2_ail1_start(),
    gfs2_ail1_wait(), and gfs2_ail1_empty() without holding sdp->sd_log_flush_lock,
    but these functions require exclusion against concurrent transactions.
    
    To fix that, add a non-locking __gfs2_log_flush() function.  Then, in
    gfs2_logd(), take sdp->sd_log_flush_lock before calling the above mentioned log
    flushing functions and __gfs2_log_flush().
    
    Fixes: 5e4c7632aae1c ("gfs2: Issue revokes more intelligently")
    Signed-off-by: Andreas Gruenbacher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

gfs2: Call unlock_new_inode before d_instantiate [+ + +]
Author: Andreas Gruenbacher <[email protected]>
Date:   Mon Feb 23 12:04:05 2026 +0100

    gfs2: Call unlock_new_inode before d_instantiate
    
    [ Upstream commit 2ff7cf7e0640ff071ebc5c7e3dc2df024a7c91e6 ]
    
    As Neil Brown describes in detail in the link referenced below, new
    inodes must be unlocked before they can be instantiated.
    
    An even better fix is to use d_instantiate_new(), which combines
    d_instantiate() and unlock_new_inode().
    
    Fixes: 3d36e57ff768 ("gfs2: gfs2_create_inode rework")
    Reported-by: [email protected]
    Link: https://lore.kernel.org/linux-fsdevel/[email protected]/
    Signed-off-by: Andreas Gruenbacher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

gfs2: prevent NULL pointer dereference during unmount [+ + +]
Author: Andreas Gruenbacher <[email protected]>
Date:   Tue Apr 7 12:14:30 2026 +0200

    gfs2: prevent NULL pointer dereference during unmount
    
    [ Upstream commit 74b4dbb946060a3233604d91859a9abd3708141d ]
    
    When flushing out outstanding glock work during an unmount, gfs2_log_flush()
    can be called when sdp->sd_jdesc has already been deallocated and sdp->sd_jdesc
    is NULL.  Commit 35264909e9d1 ("gfs2: Fix NULL pointer dereference in
    gfs2_log_flush") added a check for that to gfs2_log_flush() itself, but it
    missed the sdp->sd_jdesc dereference in gfs2_log_release().  Fix that.
    
    Reported-by: kernel test robot <[email protected]>
    Reported-by: Dan Carpenter <[email protected]>
    Closes: https://lore.kernel.org/r/[email protected]/
    Fixes: 35264909e9d1 ("gfs2: Fix NULL pointer dereference in gfs2_log_flush")
    Signed-off-by: Andreas Gruenbacher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
HID: asus: do not abort probe when not necessary [+ + +]
Author: Denis Benato <[email protected]>
Date:   Sat Feb 28 20:10:09 2026 +0100

    HID: asus: do not abort probe when not necessary
    
    [ Upstream commit 7253091766ded0fd81fe8d8be9b8b835495b06e8 ]
    
    In order to avoid dereferencing a NULL pointer asus_probe is aborted early
    and control of some asus devices is transferred over hid-generic after
    erroring out even when such NULL dereference cannot happen: only early
    abort when the NULL dereference can happen.
    
    Also make the code shorter and more adherent to coding standards
    removing square brackets enclosing single-line if-else statements.
    
    Fixes: d3af6ca9a8c3 ("HID: asus: fix UAF via HID_CLAIMED_INPUT validation")
    Signed-off-by: Denis Benato <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

HID: asus: make asus_resume adhere to linux kernel coding standards [+ + +]
Author: Denis Benato <[email protected]>
Date:   Sat Feb 28 20:10:07 2026 +0100

    HID: asus: make asus_resume adhere to linux kernel coding standards
    
    [ Upstream commit 51d33b42b8ae23da92819d28439fdd5636c45186 ]
    
    Linux kernel coding standars requires functions opening brackets to be in
    a newline: move the opening bracket of asus_resume in its own line.
    
    Fixes: 546edbd26cff ("HID: hid-asus: reset the backlight brightness level on resume")
    Signed-off-by: Denis Benato <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

HID: usbhid: fix deadlock in hid_post_reset() [+ + +]
Author: Oliver Neukum <[email protected]>
Date:   Tue Mar 24 15:24:54 2026 +0100

    HID: usbhid: fix deadlock in hid_post_reset()
    
    [ Upstream commit 8df2c1b47ee3cd50fd454f75c7a7e2ae8a6adf72 ]
    
    You can build a USB device that includes a HID component
    and a storage or UAS component. The components can be reset
    only together. That means that hid_pre_reset() and hid_post_reset()
    are in the block IO error handling. Hence no memory allocation
    used in them may do block IO because the IO can deadlock
    on the mutex held while resetting a device and calling the
    interface drivers.
    Use GFP_NOIO for all allocations in them.
    
    Fixes: dc3c78e434690 ("HID: usbhid: Check HID report descriptor contents after device reset")
    Signed-off-by: Oliver Neukum <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
hrtimer: Avoid pointless reprogramming in __hrtimer_start_range_ns() [+ + +]
Author: Peter Zijlstra <[email protected]>
Date:   Tue Feb 24 17:35:37 2026 +0100

    hrtimer: Avoid pointless reprogramming in __hrtimer_start_range_ns()
    
    [ Upstream commit d19ff16c11db38f3ee179d72751fb9b340174330 ]
    
    Much like hrtimer_reprogram(), skip programming if the cpu_base is running
    the hrtimer interrupt.
    
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Reviewed-by: Juri Lelli <[email protected]>
    Reviewed-by: Thomas Gleixner <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Stable-dep-of: f2e388a019e4 ("hrtimer: Reduce trace noise in hrtimer_start()")
    Signed-off-by: Sasha Levin <[email protected]>

hrtimer: Reduce trace noise in hrtimer_start() [+ + +]
Author: Thomas Gleixner <[email protected]>
Date:   Tue Feb 24 17:36:59 2026 +0100

    hrtimer: Reduce trace noise in hrtimer_start()
    
    [ Upstream commit f2e388a019e4cf83a15883a3d1f1384298e9a6aa ]
    
    hrtimer_start() when invoked with an already armed timer traces like:
    
     <comm>-..   [032] d.h2. 5.002263: hrtimer_cancel: hrtimer= ....
     <comm>-..   [032] d.h1. 5.002263: hrtimer_start: hrtimer= ....
    
    Which is incorrect as the timer doesn't get canceled. Just the expiry time
    changes. The internal dequeue operation which is required for that is not
    really interesting for trace analysis. But it makes it tedious to keep real
    cancellations and the above case apart.
    
    Remove the cancel tracing in hrtimer_start() and add a 'was_armed'
    indicator to the hrtimer start tracepoint, which clearly indicates what the
    state of the hrtimer is when hrtimer_start() is invoked:
    
    <comm>-..   [032] d.h1. 6.200103: hrtimer_start: hrtimer= .... was_armed=0
     <comm>-..   [032] d.h1. 6.200558: hrtimer_start: hrtimer= .... was_armed=1
    
    Fixes: c6a2a1770245 ("hrtimer: Add tracepoint for hrtimers")
    Signed-off-by: Thomas Gleixner <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
hrtimers: Update the return type of enqueue_hrtimer() [+ + +]
Author: Richard Clark <[email protected]>
Date:   Tue Dec 24 15:57:03 2024 +0800

    hrtimers: Update the return type of enqueue_hrtimer()
    
    [ Upstream commit da7100d3bf7d6f5c49ef493ea963766898e9b069 ]
    
    The return type should be 'bool' instead of 'int' according to the calling
    context in the kernel, and its internal implementation, i.e. :
    
            return timerqueue_add();
    
    which is a bool-return function.
    
    [ tglx: Adjust function arguments ]
    
    Signed-off-by: Richard Clark <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Link: https://lore.kernel.org/all/Z2ppT7me13dtxm1a@MBC02GN1V4Q05P
    Stable-dep-of: f2e388a019e4 ("hrtimer: Reduce trace noise in hrtimer_start()")
    Signed-off-by: Sasha Levin <[email protected]>

 
i3c: mipi-i3c-hci: fix IBI payload length calculation for final status [+ + +]
Author: Billy Tsai <[email protected]>
Date:   Tue Apr 7 16:53:23 2026 +0800

    i3c: mipi-i3c-hci: fix IBI payload length calculation for final status
    
    [ Upstream commit d35a6db887eeae7c57b719521e39d64f929c6dc3 ]
    
    In DMA mode, the IBI status descriptor encodes the payload using
    CHUNKS (number of chunks) and DATA_LENGTH (valid bytes in the last
    chunk). All preceding chunks are implicitly full-sized.
    
    The current code accumulates full chunk sizes for non-final status
    descriptors, but for the final status descriptor it only adds
    DATA_LENGTH. This ignores the contribution of the preceding full
    chunks described by the same final status entry.
    
    As a result, the computed IBI payload length is truncated whenever
    the final status spans multiple chunks. For example, with a chunk
    size of 4 bytes, CHUNKS=2 and DATA_LENGTH=1 should result in a total
    payload size of 5 bytes, but the current code reports only 1 byte.
    
    Fix the calculation by adding the size of (CHUNKS - 1) full chunks
    plus DATA_LENGTH for the last chunk.
    
    Fixes: 9ad9a52cce28 ("i3c/master: introduce the mipi-i3c-hci driver")
    Signed-off-by: Billy Tsai <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
i40e: Cleanup PTP pins on probe failure [+ + +]
Author: Matt Vollrath <[email protected]>
Date:   Wed May 6 14:48:11 2026 -0700

    i40e: Cleanup PTP pins on probe failure
    
    commit 678b713ece1e853f11e670a84cb887c35e1381b7 upstream.
    
    PTP pin structs are allocated early in probe, but never cleaned up.
    
    Fix this by calling i40e_ptp_free_pins in the error path.
    
    To support this, i40e_ptp_free_pins is added to the header and
    pin_config is correctly nullified after being freed.
    
    This has been an issue since i40e_ptp_alloc_pins was introduced.
    
    Fixes: 1050713026a08 ("i40e: add support for PTP external synchronization clock")
    Reported-by: Kohei Enju <[email protected]>
    Cc: [email protected]
    Signed-off-by: Matt Vollrath <[email protected]>
    Reviewed-by: Paul Menzel <[email protected]>
    Reviewed-by: Aleksandr Loktionov <[email protected]>
    Reviewed-by: Kohei Enju <[email protected]>
    Tested-by: Sunitha Mekala <[email protected]>
    Signed-off-by: Jacob Keller <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

i40e: don't advertise IFF_SUPP_NOFCS [+ + +]
Author: Kohei Enju <[email protected]>
Date:   Thu Apr 16 17:53:33 2026 -0700

    i40e: don't advertise IFF_SUPP_NOFCS
    
    [ Upstream commit a24162f18825684ad04e3a5d0531f8a50d679347 ]
    
    i40e advertises IFF_SUPP_NOFCS, allowing users to use the SO_NOFCS
    socket option. However, this option is silently ignored, as the driver
    does not check skb->no_fcs, and always enables FCS insertion offload.
    
    Fix this by removing the advertisement of IFF_SUPP_NOFCS.
    
    This behavior can be reproduced with a simple AF_PACKET socket:
    
      import socket
      s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW)
      s.setsockopt(socket.SOL_SOCKET, 43, 1) # SO_NOFCS
      s.bind(("eth0", 0))
      s.send(b'\xff' * 64)
    
    Previously, send() succeeds but the driver ignores SO_NOFCS.
    With this change, send() fails with -EPROTONOSUPPORT, as expected.
    
    Fixes: 41c445ff0f48 ("i40e: main driver core")
    Signed-off-by: Kohei Enju <[email protected]>
    Reviewed-by: Aleksandr Loktionov <[email protected]>
    Tested-by: Sunitha Mekala <[email protected]>
    Signed-off-by: Jacob Keller <[email protected]>
    Link: https://patch.msgid.link/20260416-iwl-net-submission-2026-04-14-v2-9-686c33c9828d@intel.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
iavf: add VIRTCHNL_OP_ADD_VLAN to success completion handler [+ + +]
Author: Petr Oros <[email protected]>
Date:   Mon Apr 27 22:22:16 2026 -0700

    iavf: add VIRTCHNL_OP_ADD_VLAN to success completion handler
    
    [ Upstream commit 34d33313b52eeac3a97ad2e3176d523ec70d9283 ]
    
    The V1 ADD_VLAN opcode had no success handler; filters sent via V1
    stayed in ADDING state permanently.  Add a fallthrough case so V1
    filters also transition ADDING -> ACTIVE on PF confirmation.
    
    Critically, add an `if (v_retval) break` guard: the error switch in
    iavf_virtchnl_completion() does NOT return after handling errors,
    it falls through to the success switch.  Without this guard, a
    PF-rejected ADD would incorrectly mark ADDING filters as ACTIVE,
    creating a driver/HW mismatch where the driver believes the filter
    is installed but the PF never accepted it.
    
    For V2, this is harmless: iavf_vlan_add_reject() in the error
    block already kfree'd all ADDING filters, so the success handler
    finds nothing to transition.
    
    Fixes: 968996c070ef ("iavf: Fix VLAN_V2 addition/rejection")
    Signed-off-by: Petr Oros <[email protected]>
    Reviewed-by: Aleksandr Loktionov <[email protected]>
    Tested-by: Rafal Romanowski <[email protected]>
    Reviewed-by: Przemek Kitszel <[email protected]>
    Signed-off-by: Jacob Keller <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

iavf: rename IAVF_VLAN_IS_NEW to IAVF_VLAN_ADDING [+ + +]
Author: Petr Oros <[email protected]>
Date:   Mon Apr 27 22:22:13 2026 -0700

    iavf: rename IAVF_VLAN_IS_NEW to IAVF_VLAN_ADDING
    
    [ Upstream commit 70d62b669f1f9080a25278fc90b64309f4ae8959 ]
    
    Rename the IAVF_VLAN_IS_NEW state to IAVF_VLAN_ADDING to better
    describe what the state represents: an ADD request has been sent to
    the PF and is waiting for a response.
    
    This is a pure rename with no behavioral change, preparing for a
    cleanup of the VLAN filter state machine.
    
    Signed-off-by: Petr Oros <[email protected]>
    Reviewed-by: Aleksandr Loktionov <[email protected]>
    Tested-by: Rafal Romanowski <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Reviewed-by: Przemek Kitszel <[email protected]>
    Signed-off-by: Jacob Keller <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Stable-dep-of: f2ce65b9b917 ("iavf: stop removing VLAN filters from PF on interface down")
    Signed-off-by: Sasha Levin <[email protected]>

iavf: stop removing VLAN filters from PF on interface down [+ + +]
Author: Petr Oros <[email protected]>
Date:   Mon Apr 27 22:22:14 2026 -0700

    iavf: stop removing VLAN filters from PF on interface down
    
    [ Upstream commit f2ce65b9b917474a1a6ce68d357e15fac2aca0f2 ]
    
    When a VF goes down, the driver currently sends DEL_VLAN to the PF for
    every VLAN filter (ACTIVE -> DISABLE -> send DEL -> INACTIVE), then
    re-adds them all on UP (INACTIVE -> ADD -> send ADD -> ADDING ->
    ACTIVE). This round-trip is unnecessary because:
    
     1. The PF disables the VF's queues via VIRTCHNL_OP_DISABLE_QUEUES,
        which already prevents all RX/TX traffic regardless of VLAN filter
        state.
    
     2. The VLAN filters remaining in PF HW while the VF is down is
        harmless - packets matching those filters have nowhere to go with
        queues disabled.
    
     3. The DEL+ADD cycle during down/up creates race windows where the
        VLAN filter list is incomplete. With spoofcheck enabled, the PF
        enables TX VLAN filtering on the first non-zero VLAN add, blocking
        traffic for any VLANs not yet re-added.
    
    Remove the entire DISABLE/INACTIVE state machinery:
     - Remove IAVF_VLAN_DISABLE and IAVF_VLAN_INACTIVE enum values
     - Remove iavf_restore_filters() and its call from iavf_open()
     - Remove VLAN filter handling from iavf_clear_mac_vlan_filters(),
       rename it to iavf_clear_mac_filters()
     - Remove DEL_VLAN_FILTER scheduling from iavf_down()
     - Remove all DISABLE/INACTIVE handling from iavf_del_vlans()
    
    VLAN filters now stay ACTIVE across down/up cycles. Only explicit
    user removal (ndo_vlan_rx_kill_vid) or PF/VF reset triggers VLAN
    filter deletion/re-addition.
    
    Fixes: ed1f5b58ea01 ("i40evf: remove VLAN filters on close")
    Signed-off-by: Petr Oros <[email protected]>
    Reviewed-by: Aleksandr Loktionov <[email protected]>
    Tested-by: Rafal Romanowski <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Reviewed-by: Przemek Kitszel <[email protected]>
    Signed-off-by: Jacob Keller <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

iavf: wait for PF confirmation before removing VLAN filters [+ + +]
Author: Petr Oros <[email protected]>
Date:   Mon Apr 27 22:22:15 2026 -0700

    iavf: wait for PF confirmation before removing VLAN filters
    
    [ Upstream commit bbcbe4ed70dea948849549af7edf44bd42bbd695 ]
    
    The VLAN filter DELETE path was asymmetric with the ADD path: ADD
    waits for PF confirmation (ADD -> ADDING -> ACTIVE), but DELETE
    immediately frees the filter struct after sending the DEL message
    without waiting for the PF response.
    
    This is problematic because:
     - If the PF rejects the DEL, the filter remains in HW but the driver
       has already freed the tracking structure, losing sync.
     - Race conditions between DEL pending and other operations
       (add, reset) cannot be properly resolved if the filter struct
       is already gone.
    
    Add IAVF_VLAN_REMOVING state to make the DELETE path symmetric:
    
      REMOVE -> REMOVING (send DEL) -> PF confirms -> kfree
                                    -> PF rejects  -> ACTIVE
    
    In iavf_del_vlans(), transition filters from REMOVE to REMOVING
    instead of immediately freeing them. The new DEL completion handler
    in iavf_virtchnl_completion() frees filters on success or reverts
    them to ACTIVE on error.
    
    Update iavf_add_vlan() to handle the REMOVING state: if a DEL is
    pending and the user re-adds the same VLAN, queue it for ADD so
    it gets re-programmed after the PF processes the DEL.
    
    The !VLAN_FILTERING_ALLOWED early-exit path still frees filters
    directly since no PF message is sent in that case.
    
    Also update iavf_del_vlan() to skip filters already in REMOVING
    state: DEL has been sent to PF and the completion handler will
    free the filter when PF confirms. Without this guard, the sequence
    DEL(pending) -> user-del -> second DEL could cause the PF to return
    an error for the second DEL (filter already gone), causing the
    completion handler to incorrectly revert a deleted filter back to
    ACTIVE.
    
    Fixes: 968996c070ef ("iavf: Fix VLAN_V2 addition/rejection")
    Signed-off-by: Petr Oros <[email protected]>
    Reviewed-by: Aleksandr Loktionov <[email protected]>
    Tested-by: Rafal Romanowski <[email protected]>
    Reviewed-by: Przemek Kitszel <[email protected]>
    Signed-off-by: Jacob Keller <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ice: fix double-free of tx_buf skb [+ + +]
Author: Michal Schmidt <[email protected]>
Date:   Thu Apr 16 17:53:28 2026 -0700

    ice: fix double-free of tx_buf skb
    
    [ Upstream commit 1a303baa715e6b78d6a406aaf335f87ff35acfcd ]
    
    If ice_tso() or ice_tx_csum() fail, the error path in
    ice_xmit_frame_ring() frees the skb, but the 'first' tx_buf still points
    to it and is marked as valid (ICE_TX_BUF_SKB).
    'next_to_use' remains unchanged, so the potential problem will
    likely fix itself when the next packet is transmitted and the tx_buf
    gets overwritten. But if there is no next packet and the interface is
    brought down instead, ice_clean_tx_ring() -> ice_unmap_and_free_tx_buf()
    will find the tx_buf and free the skb for the second time.
    
    The fix is to reset the tx_buf type to ICE_TX_BUF_EMPTY in the error
    path, so that ice_unmap_and_free_tx_buf().
    Move the initialization of 'first' up, to ensure it's already valid in
    case we hit the linearization error path.
    
    The bug was spotted by AI while I had it looking for something else.
    It also proposed an initial version of the patch.
    
    I reproduced the bug and tested the fix by adding code to inject
    failures, on a build with KASAN.
    
    I looked for similar bugs in related Intel drivers and did not find any.
    
    Fixes: d76a60ba7afb ("ice: Add support for VLANs and offloads")
    Assisted-by: Claude:claude-4.6-opus-high Cursor
    Signed-off-by: Michal Schmidt <[email protected]>
    Signed-off-by: Jacob Keller <[email protected]>
    Link: https://patch.msgid.link/20260416-iwl-net-submission-2026-04-14-v2-4-686c33c9828d@intel.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ice: fix NULL pointer dereference in ice_reset_all_vfs() [+ + +]
Author: Petr Oros <[email protected]>
Date:   Mon Apr 27 22:22:17 2026 -0700

    ice: fix NULL pointer dereference in ice_reset_all_vfs()
    
    [ Upstream commit 54ef02487914c24170c7e1c061e45212dc55365e ]
    
    ice_reset_all_vfs() ignores the return value of ice_vf_rebuild_vsi().
    When the VSI rebuild fails (e.g. during NVM firmware update via
    nvmupdate64e), ice_vsi_rebuild() tears down the VSI on its error path,
    leaving txq_map and rxq_map as NULL. The subsequent unconditional call
    to ice_vf_post_vsi_rebuild() leads to a NULL pointer dereference in
    ice_ena_vf_q_mappings() when it accesses vsi->txq_map[0].
    
    The single-VF reset path in ice_reset_vf() already handles this
    correctly by checking the return value of ice_vf_reconfig_vsi() and
    skipping ice_vf_post_vsi_rebuild() on failure.
    
    Apply the same pattern to ice_reset_all_vfs(): check the return value
    of ice_vf_rebuild_vsi() and skip ice_vf_post_vsi_rebuild() and
    ice_eswitch_attach_vf() on failure. The VF is left safely disabled
    (ICE_VF_STATE_INIT not set, VFGEN_RSTAT not set to VFACTIVE) and can
    be recovered via a VFLR triggered by a PCI reset of the VF
    (sysfs reset or driver rebind).
    
    Note that this patch does not prevent the VF VSI rebuild from failing
    during NVM update — the underlying cause is firmware being in a
    transitional state while the EMP reset is processed, which can cause
    Admin Queue commands (ice_add_vsi, ice_cfg_vsi_lan) to fail. This
    patch only prevents the subsequent NULL pointer dereference that
    crashes the kernel when the rebuild does fail.
    
     crash> bt
         PID: 50795    TASK: ff34c9ee708dc680  CPU: 1    COMMAND: "kworker/u512:5"
          #0 [ff72159bcfe5bb50] machine_kexec at ffffffffaa8850ee
          #1 [ff72159bcfe5bba8] __crash_kexec at ffffffffaaa15fba
          #2 [ff72159bcfe5bc68] crash_kexec at ffffffffaaa16540
          #3 [ff72159bcfe5bc70] oops_end at ffffffffaa837eda
          #4 [ff72159bcfe5bc90] page_fault_oops at ffffffffaa893997
          #5 [ff72159bcfe5bce8] exc_page_fault at ffffffffab528595
          #6 [ff72159bcfe5bd10] asm_exc_page_fault at ffffffffab600bb2
             [exception RIP: ice_ena_vf_q_mappings+0x79]
             RIP: ffffffffc0a85b29  RSP: ff72159bcfe5bdc8  RFLAGS: 00010206
             RAX: 00000000000f0000  RBX: ff34c9efc9c00000  RCX: 0000000000000000
             RDX: 0000000000000000  RSI: 0000000000000010  RDI: ff34c9efc9c00000
             RBP: ff34c9efc27d4828   R8: 0000000000000093   R9: 0000000000000040
             R10: ff34c9efc27d4828  R11: 0000000000000040  R12: 0000000000100000
             R13: 0000000000000010  R14:   R15:
             ORIG_RAX: ffffffffffffffff  CS: 0010  SS: 0018
          #7 [ff72159bcfe5bdf8] ice_sriov_post_vsi_rebuild at ffffffffc0a85e2e [ice]
          #8 [ff72159bcfe5be08] ice_reset_all_vfs at ffffffffc0a920b4 [ice]
          #9 [ff72159bcfe5be48] ice_service_task at ffffffffc0a31519 [ice]
         #10 [ff72159bcfe5be88] process_one_work at ffffffffaa93dca4
         #11 [ff72159bcfe5bec8] worker_thread at ffffffffaa93e9de
         #12 [ff72159bcfe5bf18] kthread at ffffffffaa946663
         #13 [ff72159bcfe5bf50] ret_from_fork at ffffffffaa8086b9
    
     The panic occurs attempting to dereference the NULL pointer in RDX at
     ice_sriov.c:294, which loads vsi->txq_map (offset 0x4b8 in ice_vsi).
    
     The faulting VSI is an allocated slab object but not fully initialized
     after a failed ice_vsi_rebuild():
    
      crash> struct ice_vsi 0xff34c9efc27d4828
        netdev = 0x0,
        rx_rings = 0x0,
        tx_rings = 0x0,
        q_vectors = 0x0,
        txq_map = 0x0,
        rxq_map = 0x0,
        alloc_txq = 0x10,
        num_txq = 0x10,
        alloc_rxq = 0x10,
        num_rxq = 0x10,
    
     The nvmupdate64e process was performing NVM firmware update:
    
      crash> bt 0xff34c9edd1a30000
      PID: 49858    TASK: ff34c9edd1a30000  CPU: 1    COMMAND: "nvmupdate64e"
       #0 [ff72159bcd617618] __schedule at ffffffffab5333f8
       #4 [ff72159bcd617750] ice_sq_send_cmd at ffffffffc0a35347 [ice]
       #5 [ff72159bcd6177a8] ice_sq_send_cmd_retry at ffffffffc0a35b47 [ice]
       #6 [ff72159bcd617810] ice_aq_send_cmd at ffffffffc0a38018 [ice]
       #7 [ff72159bcd617848] ice_aq_read_nvm at ffffffffc0a40254 [ice]
       #8 [ff72159bcd6178b8] ice_read_flat_nvm at ffffffffc0a4034c [ice]
       #9 [ff72159bcd617918] ice_devlink_nvm_snapshot at ffffffffc0a6ffa5 [ice]
    
     dmesg:
      ice 0000:13:00.0: firmware recommends not updating fw.mgmt, as it
        may result in a downgrade. continuing anyways
      ice 0000:13:00.1: ice_init_nvm failed -5
      ice 0000:13:00.1: Rebuild failed, unload and reload driver
    
    Fixes: 12bb018c538c ("ice: Refactor VF reset")
    Signed-off-by: Petr Oros <[email protected]>
    Tested-by: Rafal Romanowski <[email protected]>
    Signed-off-by: Jacob Keller <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ice: Remove jumbo_remove step from TX path [+ + +]
Author: Alice Mikityanska <[email protected]>
Date:   Thu Feb 5 15:39:20 2026 +0200

    ice: Remove jumbo_remove step from TX path
    
    [ Upstream commit 8b76102c5e00d1f090e0c31d17b060c76d8fa859 ]
    
    Now that the kernel doesn't insert HBH for BIG TCP IPv6 packets, remove
    unnecessary steps from the ice TX path, that used to check and remove
    HBH.
    
    Signed-off-by: Alice Mikityanska <[email protected]>
    Acked-by: Paolo Abeni <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 1a303baa715e ("ice: fix double-free of tx_buf skb")
    Signed-off-by: Sasha Levin <[email protected]>

 
ima: check return value of crypto_shash_final() in boot aggregate [+ + +]
Author: Daniel Hodges <[email protected]>
Date:   Sat Jan 31 18:40:15 2026 -0800

    ima: check return value of crypto_shash_final() in boot aggregate
    
    [ Upstream commit 870819434c8dfcc3158033b66e7851b81bb17e21 ]
    
    The return value of crypto_shash_final() is not checked in
    ima_calc_boot_aggregate_tfm(). If the hash finalization fails, the
    function returns success and a corrupted boot aggregate digest could
    be used for IMA measurements.
    
    Capture the return value and propagate any error to the caller.
    
    Fixes: 76bb28f6126f ("ima: use new crypto_shash API instead of old crypto_hash")
    Signed-off-by: Daniel Hodges <[email protected]>
    Reviewed-by: Roberto Sassu <[email protected]>
    Signed-off-by: Mimi Zohar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
io-wq: check that the predecessor is hashed in io_wq_remove_pending() [+ + +]
Author: Nicholas Carlini <[email protected]>
Date:   Mon May 11 18:02:16 2026 +0000

    io-wq: check that the predecessor is hashed in io_wq_remove_pending()
    
    commit d6a2d7b04b5a093021a7a0e2e69e9d5237dfa8cc upstream.
    
    io_wq_remove_pending() needs to fix up wq->hash_tail[] if the cancelled
    work was the tail of its hash bucket. When doing this, it checks whether
    the preceding entry in acct->work_list has the same hash value, but
    never checks that the predecessor is hashed at all. io_get_work_hash()
    is simply atomic_read(&work->flags) >> IO_WQ_HASH_SHIFT, and the hash
    bits are never set for non-hashed work, so it returns 0. Thus, when a
    hashed bucket-0 work is cancelled while a non-hashed work is its list
    predecessor, the check spuriously passes and a pointer to the non-hashed
    io_kiocb is stored in wq->hash_tail[0].
    
    Because non-hashed work is dequeued via the fast path in
    io_get_next_work(), which never touches hash_tail[], the stale pointer
    is never cleared. Therefore, after the non-hashed io_kiocb completes and
    is freed back to req_cachep, wq->hash_tail[0] is a dangling pointer. The
    io_wq is per-task (tctx->io_wq) and survives ring open/close, so the
    dangling pointer persists for the lifetime of the task; the next hashed
    bucket-0 enqueue dereferences it in io_wq_insert_work() and
    wq_list_add_after() writes through freed memory.
    
    Add the missing io_wq_is_hashed() check so a non-hashed predecessor
    never inherits a hash_tail[] slot.
    
    Cc: [email protected]
    Fixes: 204361a77f40 ("io-wq: fix hang after cancelling pending hashed work")
    Signed-off-by: Nicholas Carlini <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
iommu/vt-d: Disable DMAR for Intel Q35 IGFX [+ + +]
Author: Naval Alcalá <[email protected]>
Date:   Sat May 9 10:43:44 2026 +0800

    iommu/vt-d: Disable DMAR for Intel Q35 IGFX
    
    commit 2cda2e10dc8343ae01eae9e999a876b7e7d37861 upstream.
    
    Intel Q35 integrated graphics (8086:29b2) exhibits broken DMAR
    behaviour similar to other G4x/GM45 devices for which DMAR is
    already disabled via quirks.
    
    When DMAR is enabled, the system may hard lock up during boot or
    early device initialization, requiring a reset.
    
    Add the missing PCI ID to the existing quirk list to disable
    DMAR for this device.
    
    Fixes: 1f76249cc3be ("iommu/vt-d: Declare Broadwell igfx dmar support snafu")
    Cc: [email protected]
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=201185
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=216064
    Signed-off-by: Naval Alcalá <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Lu Baolu <[email protected]>
    Signed-off-by: Joerg Roedel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
iommufd: vfio compatibility extension check for noiommu mode [+ + +]
Author: Jacob Pan <[email protected]>
Date:   Fri Feb 13 10:36:36 2026 -0800

    iommufd: vfio compatibility extension check for noiommu mode
    
    [ Upstream commit 7147ec874ea08c322d779d8eba28946e294ed1f3 ]
    
    VFIO_CHECK_EXTENSION should return false for TYPE1_IOMMU variants when
    in NO-IOMMU mode and IOMMUFD compat container is set. This change makes
    the behavior match VFIO_CONTAINER in noiommu mode. It also prevents
    userspace from incorrectly attempting to use TYPE1 IOMMU operations
    in a no-iommu context.
    
    Fixes: d624d6652a65 ("iommufd: vfio container FD ioctl compatibility")
    Link: https://patch.msgid.link/r/[email protected]
    Signed-off-by: Jacob Pan <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ipmi: ssif_bmc: change log level to dbg in irq callback [+ + +]
Author: Jian Zhang <[email protected]>
Date:   Fri Apr 3 17:06:01 2026 +0800

    ipmi: ssif_bmc: change log level to dbg in irq callback
    
    [ Upstream commit c9c99b7b7051eb7121b3224bfce181fb023b0269 ]
    
    Long-running tests indicate that this logging can occasionally disrupt
    timing and lead to request/response corruption.
    
    Irq handler need to be executed as fast as possible,
    most I2C slave IRQ implementations are byte-level, logging here
    can significantly affect transfer behavior and timing. It is recommended
    to use dev_dbg() for these messages.
    
    Fixes: dd2bc5cc9e25 ("ipmi: ssif_bmc: Add SSIF BMC driver")
    Signed-off-by: Jian Zhang <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Corey Minyard <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ipmi: ssif_bmc: fix message desynchronization after truncated response [+ + +]
Author: Jian Zhang <[email protected]>
Date:   Fri Apr 3 17:06:00 2026 +0800

    ipmi: ssif_bmc: fix message desynchronization after truncated response
    
    [ Upstream commit 1d38e849adb6851ee280aa1a1d687b2181549a66 ]
    
    A truncated response, caused by host power-off, or other conditions,
    can lead to message desynchronization.
    
    Raw trace data (STOP loss scenario, add state transition comment):
    
    1. T-1: Read response phase (SSIF_RES_SENDING)
    8271.955342  WR_RCV [03]                          <- Read polling cmd
    8271.955348  RD_REQ [04]  <== SSIF_RES_SENDING    <- start sending response
    8271.955436  RD_PRO [b4]
    8271.955527  RD_PRO [00]
    8271.955618  RD_PRO [c1]
    8271.955707  RD_PRO [00]
    8271.955814  RD_PRO [ad]  <== SSIF_RES_SENDING     <- last byte
            <- !! STOP lost (truncated response)
    
    2. T: New Write request arrives, BMC still in SSIF_RES_SENDING
    8271.967973  WR_REQ []    <== SSIF_RES_SENDING >> SSIF_ABORTING  <- log: unexpected WR_REQ in RES_SENDING
    8271.968447  WR_RCV [02]  <== SSIF_ABORTING  <- do nothing
    8271.968452  WR_RCV [02]  <== SSIF_ABORTING  <- do nothing
    8271.968454  WR_RCV [18]  <== SSIF_ABORTING  <- do nothing
    8271.968456  WR_RCV [01]  <== SSIF_ABORTING  <- do nothing
    8271.968458  WR_RCV [66]  <== SSIF_ABORTING  <- do nothing
    8271.978714  STOP []      <== SSIF_ABORTING >> SSIF_READY  <- log: unexpected SLAVE STOP in state=SSIF_ABORTING
    
    3. T+1: Next Read polling, treated as a fresh transaction
    8271.979125  WR_REQ []    <== SSIF_READY >> SSIF_START
    8271.979326  WR_RCV [03]  <== SSIF_START >> SSIF_SMBUS_CMD        <- smbus_cmd=0x03
    8271.979331  RD_REQ [04]  <== SSIF_RES_SENDING      <- sending response
    8271.979427  RD_PRO [b4]                            <- !! this is T's stale response -> desynchronization
    
    When in SSIF_ABORTING state, a newly arrived command should still be
    handled to avoid dropping the request or causing message
    desynchronization.
    
    Fixes: dd2bc5cc9e25 ("ipmi: ssif_bmc: Add SSIF BMC driver")
    Signed-off-by: Jian Zhang <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Corey Minyard <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ipmi: ssif_bmc: fix missing check for copy_to_user() partial failure [+ + +]
Author: Jian Zhang <[email protected]>
Date:   Fri Apr 3 17:05:59 2026 +0800

    ipmi: ssif_bmc: fix missing check for copy_to_user() partial failure
    
    [ Upstream commit ea641be7a4faee4351f9c5ed6b188e1bbf5586a6 ]
    
    copy_to_user() returns the number of bytes that could not be copied,
    with a non-zero value indicating a partial or complete failure. The
    current code only checks for negative return values and treats all
    non-negative results as success.
    
    Treating any positive return value from copy_to_user() as
    an error and returning -EFAULT.
    
    Fixes: dd2bc5cc9e25 ("ipmi: ssif_bmc: Add SSIF BMC driver")
    Signed-off-by: Jian Zhang <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Corey Minyard <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ipv4: add new arguments to udp_tunnel_dst_lookup() [+ + +]
Author: Beniamino Galvani <[email protected]>
Date:   Mon Oct 16 09:15:22 2023 +0200

    ipv4: add new arguments to udp_tunnel_dst_lookup()
    
    [ Upstream commit 72fc68c6356b663a8763f02d9b0ec773d59a4949 ]
    
    We want to make the function more generic so that it can be used by
    other UDP tunnel implementations such as geneve and vxlan. To do that,
    add the following arguments:
    
     - source and destination UDP port;
     - ifindex of the output interface, needed by vxlan;
     - the tos, because in some cases it is not taken from struct
       ip_tunnel_info (for example, when it's inherited from the inner
       packet);
     - the dst cache, because not all tunnel types (e.g. vxlan) want to
       use the one from struct ip_tunnel_info.
    
    With these parameters, the function no longer needs the full struct
    ip_tunnel_info as argument and we can pass only the relevant part of
    it (struct ip_tunnel_key).
    
    Suggested-by: Guillaume Nault <[email protected]>
    Signed-off-by: Beniamino Galvani <[email protected]>
    Reviewed-by: David Ahern <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: aa6c6d9ee064 ("bareudp: fix NULL pointer dereference in bareudp_fill_metadata_dst()")
    Signed-off-by: Sasha Levin <[email protected]>

ipv4: remove "proto" argument from udp_tunnel_dst_lookup() [+ + +]
Author: Beniamino Galvani <[email protected]>
Date:   Mon Oct 16 09:15:21 2023 +0200

    ipv4: remove "proto" argument from udp_tunnel_dst_lookup()
    
    [ Upstream commit 78f3655adcb52412275f282267ee771421731632 ]
    
    The function is now UDP-specific, the protocol is always IPPROTO_UDP.
    
    Suggested-by: Guillaume Nault <[email protected]>
    Signed-off-by: Beniamino Galvani <[email protected]>
    Reviewed-by: David Ahern <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: aa6c6d9ee064 ("bareudp: fix NULL pointer dereference in bareudp_fill_metadata_dst()")
    Signed-off-by: Sasha Levin <[email protected]>

ipv4: rename and move ip_route_output_tunnel() [+ + +]
Author: Beniamino Galvani <[email protected]>
Date:   Mon Oct 16 09:15:20 2023 +0200

    ipv4: rename and move ip_route_output_tunnel()
    
    [ Upstream commit bf3fcbf7e7a08015d3b169bad6281b29d45c272d ]
    
    At the moment ip_route_output_tunnel() is used only by bareudp.
    Ideally, other UDP tunnel implementations should use it, but to do so
    the function needs to accept new parameters that are specific for UDP
    tunnels, such as the ports.
    
    Prepare for these changes by renaming the function to
    udp_tunnel_dst_lookup() and move it to file
    net/ipv4/udp_tunnel_core.c.
    
    Suggested-by: Guillaume Nault <[email protected]>
    Signed-off-by: Beniamino Galvani <[email protected]>
    Reviewed-by: David Ahern <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: aa6c6d9ee064 ("bareudp: fix NULL pointer dereference in bareudp_fill_metadata_dst()")
    Signed-off-by: Sasha Levin <[email protected]>

 
ipv6: fix possible UAF in icmpv6_rcv() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Apr 16 10:35:05 2026 +0000

    ipv6: fix possible UAF in icmpv6_rcv()
    
    [ Upstream commit f996edd7615e686ada141b7f3395025729ff8ccb ]
    
    Caching saddr and daddr before pskb_pull() is problematic
    since skb->head can change.
    
    Remove these temporary variables:
    
    - We only access &ipv6_hdr(skb)->saddr and &ipv6_hdr(skb)->daddr
      when net_dbg_ratelimited() is called in the slow path.
    
    - Avoid potential future misuse after pskb_pull() call.
    
    Fixes: 4b3418fba0fe ("ipv6: icmp: include addresses in debug messages")
    Signed-off-by: Eric Dumazet <[email protected]>
    Reviewed-by: Fernando Fernandez Mancera <[email protected]>
    Reviewed-by: Joe Damato <[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: rename and move ip6_dst_lookup_tunnel() [+ + +]
Author: Beniamino Galvani <[email protected]>
Date:   Fri Oct 20 13:55:25 2023 +0200

    ipv6: rename and move ip6_dst_lookup_tunnel()
    
    [ Upstream commit fc47e86dbfb75a864c0c9dd8e78affb6506296bb ]
    
    At the moment ip6_dst_lookup_tunnel() is used only by bareudp.
    Ideally, other UDP tunnel implementations should use it, but to do so
    the function needs to accept new parameters that are specific for UDP
    tunnels, such as the ports.
    
    Prepare for these changes by renaming the function to
    udp_tunnel6_dst_lookup() and move it to file
    net/ipv6/ip6_udp_tunnel.c.
    
    This is similar to what already done for IPv4 in commit bf3fcbf7e7a0
    ("ipv4: rename and move ip_route_output_tunnel()").
    
    Suggested-by: Guillaume Nault <[email protected]>
    Signed-off-by: Beniamino Galvani <[email protected]>
    Reviewed-by: David Ahern <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: aa6c6d9ee064 ("bareudp: fix NULL pointer dereference in bareudp_fill_metadata_dst()")
    Signed-off-by: Sasha Levin <[email protected]>

 
ipvs: fix MTU check for GSO packets in tunnel mode [+ + +]
Author: Yingnan Zhang <[email protected]>
Date:   Wed Apr 15 22:40:29 2026 +0800

    ipvs: fix MTU check for GSO packets in tunnel mode
    
    [ Upstream commit 67bf42cae41d847fd6e5749eb68278ca5d748b25 ]
    
    Currently, IPVS skips MTU checks for GSO packets by excluding them with
    the !skb_is_gso(skb) condition. This creates problems when IPVS tunnel
    mode encapsulates GSO packets with IPIP headers.
    
    The issue manifests in two ways:
    
    1. MTU violation after encapsulation:
       When a GSO packet passes through IPVS tunnel mode, the original MTU
       check is bypassed. After adding the IPIP tunnel header, the packet
       size may exceed the outgoing interface MTU, leading to unexpected
       fragmentation at the IP layer.
    
    2. Fragmentation with problematic IP IDs:
       When net.ipv4.vs.pmtu_disc=1 and a GSO packet with multiple segments
       is fragmented after encapsulation, each segment gets a sequentially
       incremented IP ID (0, 1, 2, ...). This happens because:
    
       a) The GSO packet bypasses MTU check and gets encapsulated
       b) At __ip_finish_output, the oversized GSO packet is split into
          separate SKBs (one per segment), with IP IDs incrementing
       c) Each SKB is then fragmented again based on the actual MTU
    
       This sequential IP ID allocation differs from the expected behavior
       and can cause issues with fragment reassembly and packet tracking.
    
    Fix this by properly validating GSO packets using
    skb_gso_validate_network_len(). This function correctly validates
    whether the GSO segments will fit within the MTU after segmentation. If
    validation fails, send an ICMP Fragmentation Needed message to enable
    proper PMTU discovery.
    
    Fixes: 4cdd34084d53 ("netfilter: nf_conntrack_ipv6: improve fragmentation handling")
    Signed-off-by: Yingnan Zhang <[email protected]>
    Acked-by: Julian Anastasov <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
irqchip/irq-pic32-evic: Address warning related to wrong printf() formatter [+ + +]
Author: Brian Masney <[email protected]>
Date:   Sun Feb 22 18:43:44 2026 -0500

    irqchip/irq-pic32-evic: Address warning related to wrong printf() formatter
    
    [ Upstream commit 86be659415b0ddefebc3120e309091aa215a9064 ]
    
    This driver is currently only build on 32 bit MIPS systems. When building
    it on x86_64, the following warning occurs:
    
        drivers/irqchip/irq-pic32-evic.c: In function ‘pic32_ext_irq_of_init’:
        ./include/linux/kern_levels.h:5:25: error: format ‘%d’ expects argument of type
         ‘int’, but argument 2 has type ‘long unsigned int’ [-Werror=format=]
    
    Update the printf() formatter in preparation for allowing this driver to
    be compiled on all architectures.
    
    Fixes: aaa8666ada780 ("IRQCHIP: irq-pic32-evic: Add support for PIC32 interrupt controller")
    Signed-off-by: Brian Masney <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
ksmbd: add support for supplementary groups [+ + +]
Author: Namjae Jeon <[email protected]>
Date:   Wed Oct 9 10:39:16 2024 +0900

    ksmbd: add support for supplementary groups
    
    [ Upstream commit a77e0e02af1c2db5fc040511aa78a58a52e116ab ]
    
    Even though system user has a supplementary group, It gets
    NT_STATUS_ACCESS_DENIED when attempting to create file or directory.
    This patch add KSMBD_EVENT_LOGIN_REQUEST_EXT/RESPONSE_EXT netlink events
    to get supplementary groups list. The new netlink event doesn't break
    backward compatibility when using old ksmbd-tools.
    
    Co-developed-by: Atte Heikkilä <[email protected]>
    Signed-off-by: Atte Heikkilä <[email protected]>
    Signed-off-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Stable-dep-of: b32c8db48212 ("ksmbd: destroy async_ida in ksmbd_conn_free()")
    Signed-off-by: Sasha Levin <[email protected]>

ksmbd: destroy async_ida in ksmbd_conn_free() [+ + +]
Author: DaeMyung Kang <[email protected]>
Date:   Sun Apr 19 20:02:55 2026 +0900

    ksmbd: destroy async_ida in ksmbd_conn_free()
    
    [ Upstream commit b32c8db48212a34998c36d0bbc05b29d5c407ef5 ]
    
    When per-connection async_ida was converted from a dynamically
    allocated ksmbd_ida to an embedded struct ida, ksmbd_ida_free() was
    removed from the connection teardown path but no matching
    ida_destroy() was added.  The connection is therefore freed with the
    IDA's backing xarray still intact.
    
    The kernel IDA API expects ida_init() and ida_destroy() to be paired
    over an object's lifetime, so add the missing cleanup before the
    connection is freed.
    
    No leak has been observed in testing; this is a pairing fix to match
    the IDA lifetime rules, not a response to a reproduced regression.
    
    Fixes: d40012a83f87 ("cifsd: declare ida statically")
    Signed-off-by: DaeMyung Kang <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ksmbd: destroy tree_conn_ida in ksmbd_session_destroy() [+ + +]
Author: DaeMyung Kang <[email protected]>
Date:   Sun Apr 19 20:02:54 2026 +0900

    ksmbd: destroy tree_conn_ida in ksmbd_session_destroy()
    
    [ Upstream commit c049ee14eb4343b69b6f7755563f961f5e153423 ]
    
    When per-session tree_conn_ida was converted from a dynamically
    allocated ksmbd_ida to an embedded struct ida, ksmbd_ida_free() was
    removed from ksmbd_session_destroy() but no matching ida_destroy()
    was added.  The session is therefore freed with the IDA's backing
    xarray still intact.
    
    The kernel IDA API expects ida_init() and ida_destroy() to be paired
    over an object's lifetime, so add the missing cleanup before the
    enclosing session is freed.
    
    Also move ida_init() to right after the session is allocated so that
    it is always paired with the destroy call even on the early error
    paths of __session_create() (ksmbd_init_file_table() or
    __init_smb2_session() failures), both of which jump to the error
    label and invoke ksmbd_session_destroy() on a partially initialised
    session.
    
    No leak has been observed in testing; this is a pairing fix to match
    the IDA lifetime rules, not a response to a reproduced regression.
    
    Fixes: d40012a83f87 ("cifsd: declare ida statically")
    Signed-off-by: DaeMyung Kang <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ksmbd: fix durable fd leak on ClientGUID mismatch in durable v2 open [+ + +]
Author: DaeMyung Kang <[email protected]>
Date:   Tue Apr 21 03:45:11 2026 +0900

    ksmbd: fix durable fd leak on ClientGUID mismatch in durable v2 open
    
    [ Upstream commit 804054d19886ac6628883d82410f6ee42a818664 ]
    
    ksmbd_lookup_fd_cguid() returns a ksmbd_file with its refcount
    incremented via ksmbd_fp_get(). parse_durable_handle_context() in
    the DURABLE_REQ_V2 case properly releases this reference on every
    path inside the ClientGUID-match branch, either by calling
    ksmbd_put_durable_fd() or by transferring ownership to dh_info->fp
    for a successful reconnect. However, when an entry exists in the
    global file table with the same CreateGuid but a different
    ClientGUID, the code simply falls through to the new-open path
    without dropping the reference obtained from ksmbd_lookup_fd_cguid().
    
    Per MS-SMB2 section 3.3.5.9.10 ("Handling the
    SMB2_CREATE_DURABLE_HANDLE_REQUEST_V2 Create Context"), the server
    MUST locate an Open whose Open.CreateGuid matches the request's
    CreateGuid AND whose Open.ClientGuid matches the ClientGuid of the
    connection that received the request. If no such Open is found, the
    server MUST continue with the normal open execution phase. A
    CreateGuid hit with a ClientGUID mismatch is therefore the
    "Open not found" case: proceeding with a new open is correct, but
    the reference obtained purely as a side effect of the lookup must
    not be leaked.
    
    Repeated requests that hit this mismatch pin global_ft entries,
    prevent __ksmbd_close_fd() from ever running for the corresponding
    files, and defeat the durable scavenger, leading to long-lived
    resource leaks.
    
    Release the reference in the mismatch path and clear dh_info->fp so
    subsequent logic does not mistake a non-matching lookup result for
    a reconnect target.
    
    Fixes: c8efcc786146 ("ksmbd: add support for durable handles v1/v2")
    Signed-off-by: DaeMyung Kang <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ksmbd: fix use-after-free from async crypto on Qualcomm crypto engine [+ + +]
Author: Joshua Klinesmith <[email protected]>
Date:   Mon Apr 6 22:31:12 2026 -0400

    ksmbd: fix use-after-free from async crypto on Qualcomm crypto engine
    
    [ Upstream commit 3e298897f41c61450c2e7a4f457e8b2485eb35b3 ]
    
    ksmbd_crypt_message() sets a NULL completion callback on AEAD requests
    and does not handle the -EINPROGRESS return code from async hardware
    crypto engines like the Qualcomm Crypto Engine (QCE). When QCE returns
    -EINPROGRESS, ksmbd treats it as an error and immediately frees the
    request while the hardware DMA operation is still in flight. The DMA
    completion callback then dereferences freed memory, causing a NULL
    pointer crash:
    
      pc : qce_skcipher_done+0x24/0x174
      lr : vchan_complete+0x230/0x27c
      ...
      el1h_64_irq+0x68/0x6c
      ksmbd_free_work_struct+0x20/0x118 [ksmbd]
      ksmbd_exit_file_cache+0x694/0xa4c [ksmbd]
    
    Use the standard crypto_wait_req() pattern with crypto_req_done() as
    the completion callback, matching the approach used by the SMB client
    in fs/smb/client/smb2ops.c. This properly handles both synchronous
    engines (immediate return) and async engines (-EINPROGRESS followed
    by callback notification).
    
    Fixes: e2f34481b24d ("cifsd: add server-side procedures for SMB3")
    Link: https://github.com/openwrt/openwrt/issues/21822
    Signed-off-by: Joshua Klinesmith <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ksmbd: scope conn->binding slowpath to bound sessions only [+ + +]
Author: Hyunwoo Kim <[email protected]>
Date:   Tue Apr 21 00:31:47 2026 +0900

    ksmbd: scope conn->binding slowpath to bound sessions only
    
    [ Upstream commit b0da97c034b6107d14e537e212d4ce8b22109a58 ]
    
    When the binding SESSION_SETUP sets conn->binding = true, the flag stays
    set after the call so that the global session lookup in
    ksmbd_session_lookup_all() can find the session, which was not added to
    conn->sessions. Because the flag is connection-wide, the global lookup
    path will also resolve any other session by id if asked.
    
    Tighten the global lookup so that the returned session must have this
    connection registered in its channel xarray (sess->ksmbd_chann_list).
    The channel entry is installed by the existing binding_session path in
    ntlm_authenticate()/krb5_authenticate() when a SESSION_SETUP completes
    successfully, so this condition is a strict equivalent of "this
    connection has been accepted as a channel of this session". Connections
    that have not bound to a given session cannot reach it via the global
    table.
    
    The existing conn->binding gate for entering the slowpath is preserved
    so that non-binding connections keep the fast-path-only behavior, and
    the session->state check is unchanged.
    
    Fixes: f5a544e3bab7 ("ksmbd: add support for SMB3 multichannel")
    Signed-off-by: Hyunwoo Kim <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ksmbd: Use struct_size() to improve smb_direct_rdma_xmit() [+ + +]
Author: Thorsten Blum <[email protected]>
Date:   Sat Sep 28 17:00:30 2024 +0200

    ksmbd: Use struct_size() to improve smb_direct_rdma_xmit()
    
    [ Upstream commit 9c383396362a4d1db99ed5240f4708d443361ef3 ]
    
    Use struct_size() to calculate the number of bytes to allocate for a
    new message.
    
    Signed-off-by: Thorsten Blum <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Stable-dep-of: b32c8db48212 ("ksmbd: destroy async_ida in ksmbd_conn_free()")
    Signed-off-by: Sasha Levin <[email protected]>

ksmbd: validate inherited ACE SID length [+ + +]
Author: Shota Zaizen <[email protected]>
Date:   Wed May 20 07:54:35 2026 -0400

    ksmbd: validate inherited ACE SID length
    
    [ Upstream commit 996454bc0da84d5a1dedb1a7861823087e01a7ae ]
    
    smb_inherit_dacl() walks the parent directory DACL loaded from the
    security descriptor xattr. It verifies that each ACE contains the fixed
    SID header before using it, but does not verify that the variable-length
    SID described by sid.num_subauth is fully contained in the ACE.
    
    A malformed inheritable ACE can advertise more subauthorities than are
    present in the ACE. compare_sids() may then read past the ACE.
    smb_set_ace() also clamps the copied destination SID, but used the
    unchecked source SID count to compute the inherited ACE size. That could
    advance the temporary inherited ACE buffer pointer and nt_size accounting
    past the allocated buffer.
    
    Fix this by validating the parent ACE SID count and SID length before
    using the SID during inheritance. Compute the inherited ACE size from the
    copied SID so the size matches the bounded destination SID. Reject the
    inherited DACL if size accumulation would overflow smb_acl.size or the
    security descriptor allocation size.
    
    Fixes: e2f34481b24d ("cifsd: add server-side procedures for SMB3")
    Signed-off-by: Shota Zaizen <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ksmbd: validate response sizes in ipc_validate_msg() [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Wed Apr 15 07:25:00 2026 -0400

    ksmbd: validate response sizes in ipc_validate_msg()
    
    [ Upstream commit d6a6aa81eac2c9bff66dc6e191179cb69a14426b ]
    
    ipc_validate_msg() computes the expected message size for each
    response type by adding (or multiplying) attacker-controlled fields
    from the daemon response to a fixed struct size in unsigned int
    arithmetic.  Three cases can overflow:
    
      KSMBD_EVENT_RPC_REQUEST:
          msg_sz = sizeof(struct ksmbd_rpc_command) + resp->payload_sz;
      KSMBD_EVENT_SHARE_CONFIG_REQUEST:
          msg_sz = sizeof(struct ksmbd_share_config_response) +
                   resp->payload_sz;
      KSMBD_EVENT_LOGIN_REQUEST_EXT:
          msg_sz = sizeof(struct ksmbd_login_response_ext) +
                   resp->ngroups * sizeof(gid_t);
    
    resp->payload_sz is __u32 and resp->ngroups is __s32.  Each addition
    can wrap in unsigned int; the multiplication by sizeof(gid_t) mixes
    signed and size_t, so a negative ngroups is converted to SIZE_MAX
    before the multiply.  A wrapped value of msg_sz that happens to
    equal entry->msg_sz bypasses the size check on the next line, and
    downstream consumers (smb2pdu.c:6742 memcpy using rpc_resp->payload_sz,
    kmemdup in ksmbd_alloc_user using resp_ext->ngroups) then trust the
    unverified length.
    
    Use check_add_overflow() on the RPC_REQUEST and SHARE_CONFIG_REQUEST
    paths to detect integer overflow without constraining functional
    payload size; userspace ksmbd-tools grows NDR responses in 4096-byte
    chunks for calls like NetShareEnumAll, so a hard transport cap is
    unworkable on the response side.  For LOGIN_REQUEST_EXT, reject
    resp->ngroups outside the signed [0, NGROUPS_MAX] range up front and
    report the error from ipc_validate_msg() so it fires at the IPC
    boundary; with that bound the subsequent multiplication and addition
    stay well below UINT_MAX.  The now-redundant ngroups check and
    pr_err in ksmbd_alloc_user() are removed.
    
    This is the response-side analogue of aab98e2dbd64 ("ksmbd: fix
    integer overflows on 32 bit systems"), which hardened the request
    side.
    
    Fixes: 0626e6641f6b ("cifsd: add server handler for central processing and tranport layers")
    Fixes: a77e0e02af1c ("ksmbd: add support for supplementary groups")
    Cc: [email protected]
    Assisted-by: Claude:claude-opus-4-6
    Assisted-by: Codex:gpt-5-4
    Signed-off-by: Michael Bommarito <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ktest: Avoid undef warning when WARNINGS_FILE is unset [+ + +]
Author: Ricardo B. Marlière <[email protected]>
Date:   Sat Mar 7 19:07:56 2026 -0300

    ktest: Avoid undef warning when WARNINGS_FILE is unset
    
    [ Upstream commit 057854f8a595160656fe77ed7bf0d2403724b915 ]
    
    check_buildlog() probes $warnings_file with -f even when WARNINGS_FILE is
    not configured. Perl warns about the uninitialized value and adds noise to
    the test log, which can hide the output we actually care about.
    
    Check that WARNINGS_FILE is defined before testing whether the file exists.
    
    Cc: John Hawley <[email protected]>
    Cc: Andrea Righi <[email protected]>
    Cc: Marcos Paulo de Souza <[email protected]>
    Cc: Matthieu Baerts <[email protected]>
    Cc: Fernando Fernandez Mancera <[email protected]>
    Cc: Pedro Falcato <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Fixes: 4283b169abfb ("ktest: Add make_warnings_file and process full warnings")
    Signed-off-by: Ricardo B. Marlière <[email protected]>
    Signed-off-by: Steven Rostedt <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ktest: Honor empty per-test option overrides [+ + +]
Author: Ricardo B. Marlière <[email protected]>
Date:   Sat Mar 7 19:07:59 2026 -0300

    ktest: Honor empty per-test option overrides
    
    [ Upstream commit a2de57a3c8192dcd67cccaff6c341b93748d799b ]
    
    A per-test override can clear an inherited default option by assigning an
    empty value, but __set_test_option() still used option_defined() to decide
    whether a per-test key existed. That turned an empty per-test assignment
    back into "fall back to the default", so tests still could not clear
    inherited settings.
    
    For example:
    
      DEFAULTS
      (...)
      LOG_FILE = /tmp/ktest-empty-override.log
      CLEAR_LOG = 1
      ADD_CONFIG = /tmp/.config
    
      TEST_START
      TEST_TYPE = build
      BUILD_TYPE = nobuild
      ADD_CONFIG =
    
    This would run the test with ADD_CONFIG[1] = /tmp/.config
    
    Fix by checking whether the per-test key exists before falling back. If it
    does exist but is empty, treat it as unset for that test and stop the
    fallback chain there.
    
    Cc: John Hawley <[email protected]>
    Cc: Andrea Righi <[email protected]>
    Cc: Marcos Paulo de Souza <[email protected]>
    Cc: Matthieu Baerts <[email protected]>
    Cc: Fernando Fernandez Mancera <[email protected]>
    Cc: Pedro Falcato <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Fixes: 22c37a9ac49d ("ktest: Allow tests to undefine default options")
    Signed-off-by: Ricardo B. Marlière <[email protected]>
    Signed-off-by: Steven Rostedt <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ktest: Run POST_KTEST hooks on failure and cancellation [+ + +]
Author: Ricardo B. Marlière <[email protected]>
Date:   Sat Mar 7 19:08:03 2026 -0300

    ktest: Run POST_KTEST hooks on failure and cancellation
    
    [ Upstream commit bc6e165a452da909cef0efbc286e6695624db372 ]
    
    PRE_KTEST can be useful for setting up the environment and POST_KTEST to
    tear it down, however POST_KTEST only runs on the normal end-of-run path.
    It is skipped when ktest exits through dodie() or cancel_test(). Final
    cleanup hooks are skipped.
    
    Factor the final hook execution into run_post_ktest(), call it from the
    normal exit path and from the early exit paths, and guard it so the hook
    runs at most once.
    
    Cc: John Hawley <[email protected]>
    Cc: Andrea Righi <[email protected]>
    Cc: Marcos Paulo de Souza <[email protected]>
    Cc: Matthieu Baerts <[email protected]>
    Cc: Fernando Fernandez Mancera <[email protected]>
    Cc: Pedro Falcato <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Fixes: 921ed4c7208e ("ktest: Add PRE/POST_KTEST and TEST options")
    Signed-off-by: Ricardo B. Marlière <[email protected]>
    Signed-off-by: Steven Rostedt <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
KVM: Reject wrapped offset in kvm_reset_dirty_gfn() [+ + +]
Author: Aaron Sacks <[email protected]>
Date:   Tue May 12 02:07:42 2026 -0400

    KVM: Reject wrapped offset in kvm_reset_dirty_gfn()
    
    commit 577a8d3bae0531f0e5ccfac919cd8192f920a804 upstream.
    
    kvm_reset_dirty_gfn() guards the gfn range with
    
            if (!memslot || (offset + __fls(mask)) >= memslot->npages)
                    return;
    
    but offset is u64 and the addition is unchecked.  The check can be
    silently bypassed by a u64 wrap.
    
    The dirty ring backing those entries is MAP_SHARED at
    KVM_DIRTY_LOG_PAGE_OFFSET of the vcpu fd, so the VMM can rewrite the
    slot and offset fields of any entry between when the kernel pushes
    them and when KVM_RESET_DIRTY_RINGS consumes them.  On reset,
    kvm_dirty_ring_reset() re-reads the values via READ_ONCE() and feeds
    them straight back into this check; only the flags handshake is
    treated as the handover, the slot/offset payload is taken on trust.
    
    Crafting two entries
    
            entry[i].offset   = 0xffffffffffffffc1
            entry[i+1].offset = 0
    
    makes the coalescing loop in kvm_dirty_ring_reset() compute
    
            delta = (s64)(0 - 0xffffffffffffffc1) = 63
    
    which falls in [0, BITS_PER_LONG), so it folds entry[i+1] into the
    existing mask by setting bit 63.  The trailing kvm_reset_dirty_gfn()
    call then sees offset = 0xffffffffffffffc1 and __fls(mask) = 63;
    the sum is 0 in u64 and the bounds check passes.
    
    That offset propagates into kvm_arch_mmu_enable_log_dirty_pt_masked()
    unchanged.  On the legacy MMU path -- kvm_memslots_have_rmaps() ==
    true, i.e. shadow paging, any VM that has allocated shadow roots, or
    a write-tracked slot -- it reaches gfn_to_rmap(), which indexes
    slot->arch.rmap[0][] with a near-U64_MAX gfn.  That is an
    out-of-bounds load of a kvm_rmap_head, followed by a conditional
    clear of PT_WRITABLE_MASK in whatever the loaded pointer points at.
    The path is reachable from any process holding /dev/kvm.
    
    Range-check offset on its own first, so the addition cannot wrap.
    memslot->npages is bounded well below U64_MAX, so once offset <
    npages holds, offset + __fls(mask) (with __fls(mask) < BITS_PER_LONG)
    stays in range.
    
    Fixes: fb04a1eddb1a ("KVM: X86: Implement ring-based dirty memory tracking")
    Cc: [email protected]
    Signed-off-by: Aaron Sacks <[email protected]>
    Link: https://patch.msgid.link/[email protected]/
    Signed-off-by: Paolo Bonzini <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: s390: pci: fix GAIT table indexing due to double-scaling pointer arithmetic [+ + +]
Author: Junrui Luo <[email protected]>
Date:   Wed Apr 15 17:26:55 2026 +0800

    KVM: s390: pci: fix GAIT table indexing due to double-scaling pointer arithmetic
    
    commit 16d990a15491cf76cd6eef0846e1b4100e63261a upstream.
    
    kvm_s390_pci_aif_enable(), kvm_s390_pci_aif_disable(), and
    aen_host_forward() index the GAIT by manually multiplying the index
    with sizeof(struct zpci_gaite).
    
    Since aift->gait is already a struct zpci_gaite pointer, this
    double-scales the offset, accessing element aisb*16 instead of aisb.
    
    This causes out-of-bounds accesses when aisb >= 32 (with
    ZPCI_NR_DEVICES=512)
    
    Fix by removing the erroneous sizeof multiplication.
    
    Fixes: 3c5a1b6f0a18 ("KVM: s390: pci: provide routines for enabling/disabling interrupt forwarding")
    Fixes: 73f91b004321 ("KVM: s390: pci: enable host forwarding of Adapter Event Notifications")
    Reported-by: Yuhao Jiang <[email protected]>
    Cc: [email protected]
    Signed-off-by: Junrui Luo <[email protected]>
    Reviewed-by: Christian Borntraeger <[email protected]>
    Reviewed-by: Matthew Rosato <[email protected]>
    Tested-by: Matthew Rosato <[email protected]>
    Signed-off-by: Christian Borntraeger <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: x86: Fix Xen hypercall tracepoint argument assignment [+ + +]
Author: Qiang Ma <[email protected]>
Date:   Tue May 12 09:53:13 2026 +0800

    KVM: x86: Fix Xen hypercall tracepoint argument assignment
    
    commit 2b72f1674e427c56e3772c5ccf785fdda2138820 upstream.
    
    TRACE_EVENT(kvm_xen_hypercall) stores a5 in __entry->a4 instead of
    __entry->a5.
    
    That overwrites the recorded a4 argument and leaves a5 unset in the
    trace entry. Fix the typo so both arguments are captured correctly.
    
    Signed-off-by: Qiang Ma <[email protected]>
    Link: https://patch.msgid.link/[email protected]/
    Cc: [email protected]
    Signed-off-by: Paolo Bonzini <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
leds: lgm-sso: Remove duplicate assignments for priv->mmap [+ + +]
Author: Chen Ni <[email protected]>
Date:   Thu Feb 26 11:30:48 2026 +0800

    leds: lgm-sso: Remove duplicate assignments for priv->mmap
    
    [ Upstream commit 7186d0330c3f3e86de577687a82f4ebd96dcb5ac ]
    
    Remove duplicate assignment of priv->mmap in intel_sso_led_probe().
    
    Fixes: fba8a6f2263b ("leds: lgm-sso: Fix clock handling")
    Signed-off-by: Chen Ni <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
lib/hexdump: print_hex_dump_bytes() calls print_hex_dump_debug() [+ + +]
Author: Geert Uytterhoeven <[email protected]>
Date:   Tue Mar 31 17:21:43 2026 +0200

    lib/hexdump: print_hex_dump_bytes() calls print_hex_dump_debug()
    
    [ Upstream commit 36776b7f8a8955b4e75b5d490a75fee0c7a2a7ef ]
    
    print_hex_dump_bytes() claims to be a simple wrapper around
    print_hex_dump(), but it actally calls print_hex_dump_debug(), which
    means no output is printed if (dynamic) DEBUG is disabled.
    
    Update the documentation to match the implementation.
    
    Fixes: 091cb0994edd20d6 ("lib/hexdump: make print_hex_dump_bytes() a nop on !DEBUG builds")
    Signed-off-by: Geert Uytterhoeven <[email protected]>
    Reviewed-by: Petr Mladek <[email protected]>
    Link: https://patch.msgid.link/3d5c3069fd9102ecaf81d044b750cd613eb72a08.1774970392.git.geert+renesas@glider.be
    Signed-off-by: Petr Mladek <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
libceph: Fix potential null-ptr-deref in decode_choose_args() [+ + +]
Author: Raphael Zimmer <[email protected]>
Date:   Tue May 12 18:16:40 2026 +0200

    libceph: Fix potential null-ptr-deref in decode_choose_args()
    
    commit 28b0a2ab8c82d0bbdeb8013029c67c978ce6e4bf upstream.
    
    A message of type CEPH_MSG_OSD_MAP contains an OSD map that itself
    contains a CRUSH map. When decoding this CRUSH map in crush_decode(), an
    array of max_buckets CRUSH buckets is decoded, where some indices may
    not refer to actual buckets and are therefore set to NULL. The received
    CRUSH map may optionally contain choose_args that get decoded in
    decode_choose_args(). When decoding a crush_choose_arg_map, a series of
    choose_args for different buckets is decoded, with the bucket_index
    being read from the incoming message. It is only checked that the bucket
    index does not exceed max_buckets, but not that it doesn't point to an
    index with a NULL bucket. If a (potentially corrupted) message contains
    a crush_choose_arg_map including such a bucket_index, a null pointer
    dereference may occur in the subsequent processing when attempting to
    access the bucket with the given index.
    
    This patch fixes the issue by extending the affected check. Now, it is
    only attempted to access the bucket if it is not NULL.
    
    Cc: [email protected]
    Signed-off-by: Raphael Zimmer <[email protected]>
    Reviewed-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

libceph: Fix potential out-of-bounds access in crush_decode() [+ + +]
Author: Raphael Zimmer <[email protected]>
Date:   Wed Apr 22 10:47:13 2026 +0200

    libceph: Fix potential out-of-bounds access in crush_decode()
    
    commit 4c79fc2d598694bda845b46229c9d48b65042970 upstream.
    
    A message of type CEPH_MSG_OSD_MAP containing a crush map with at least
    one bucket has two fields holding the bucket algorithm. If the values
    in these two fields differ, an out-of-bounds access can occur. This is
    the case because the first algorithm field (alg) is used to allocate
    the correct amount of memory for a bucket of this type, while the second
    algorithm field inside the bucket (b->alg) is used in the subsequent
    processing.
    
    This patch fixes the issue by adding a check that compares alg and
    b->alg and aborts the processing in case they differ. Furthermore,
    b->alg is set to 0 in this case, because the destruction of the crush
    map also uses this field to determine the bucket type, which can again
    result in an out-of-bounds access when trying to free the memory pointed
    to by the fields of the bucket. To correctly free the memory allocated
    for the bucket in such a case, the corresponding call to kfree is moved
    from the algorithm-specific crush_destroy_bucket functions to the
    generic crush_destroy_bucket().
    
    Cc: [email protected]
    Signed-off-by: Raphael Zimmer <[email protected]>
    Reviewed-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

libceph: Fix potential out-of-bounds access in osdmap_decode() [+ + +]
Author: Raphael Zimmer <[email protected]>
Date:   Tue May 5 11:08:12 2026 +0200

    libceph: Fix potential out-of-bounds access in osdmap_decode()
    
    commit 35d0ed82d03e5ee77ea4f31f20e29562a7721649 upstream.
    
    When decoding osd_state and osd_weight from an incoming osdmap in
    osdmap_decode(), both are decoded for each osd, i.e., map->max_osd
    times. The ceph_decode_need() check only accounts for
    sizeof(*map->osd_weight) once. This can potentially result in an
    out-of-bounds memory access if the incoming message is corrupted such
    that the max_osd value exceeds the actual content of the osdmap message.
    
    This patch fixes the issue by changing the corresponding part in the
    ceph_decode_need() check to account for
    map->max_osd*sizeof(*map->osd_weight).
    
    Cc: [email protected]
    Fixes: dcbc919a5dc8 ("libceph: switch osdmap decoding to use ceph_decode_entity_addr")
    Signed-off-by: Raphael Zimmer <[email protected]>
    Reviewed-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

libceph: handle rbtree insertion error in decode_choose_args() [+ + +]
Author: Raphael Zimmer <[email protected]>
Date:   Tue May 12 09:29:30 2026 +0200

    libceph: handle rbtree insertion error in decode_choose_args()
    
    commit d289478cfc0bcf81c7914200d6abdcb78bd04ded upstream.
    
    A message of type CEPH_MSG_OSD_MAP contains an OSD map that itself
    contains a CRUSH map. The received CRUSH map may optionally contain
    choose_args that get decoded in decode_choose_args(). In this function,
    num_choose_arg_maps is read from the message, and a corresponding number
    of crush_choose_arg_maps gets decoded afterwards. Each
    crush_choose_arg_map has a choose_args_index, which serves as the key
    when inserting it into the choose_args rbtree of the decoded crush_map.
    If a (potentially corrupted) message contains two crush_choose_arg_maps
    with the same index, the assertion in insert_choose_arg_map() triggers a
    kernel BUG when trying to insert the second crush_choose_arg_map.
    
    This patch fixes the issue by switching to the non-asserting rbtree
    insertion function and rejecting the message if the insertion fails.
    
    [ idryomov: changelog ]
    
    Cc: [email protected]
    Signed-off-by: Raphael Zimmer <[email protected]>
    Reviewed-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Linux: Linux 6.6.141 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Sat May 23 13:03:36 2026 +0200

    Linux 6.6.141
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Brett A C Sheffield <[email protected]>
    Tested-by: Francesco Dolcini <[email protected]>
    Tested-by: Pavel Machek (CIP) <[email protected]>
    Tested-by: Mark Brown <[email protected]>
    Tested-by: Peter Schneider <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
locking: Fix rwlock support in [+ + +]
Author: Bart Van Assche <[email protected]>
Date:   Fri Mar 13 10:15:07 2026 -0700

    locking: Fix rwlock support in <linux/spinlock_up.h>
    
    [ Upstream commit 756a0e011cfca0b45a48464aa25b05d9a9c2fb0b ]
    
    Architecture support for rwlocks must be available whether or not
    CONFIG_DEBUG_SPINLOCK has been defined. Move the definitions of the
    arch_{read,write}_{lock,trylock,unlock}() macros such that these become
    visbile if CONFIG_DEBUG_SPINLOCK=n.
    
    This patch prepares for converting do_raw_{read,write}_trylock() into
    inline functions. Without this patch that conversion triggers a build
    failure for UP architectures, e.g. arm-ep93xx. I used the following
    kernel configuration to build the kernel for that architecture:
    
            CONFIG_ARCH_MULTIPLATFORM=y
            CONFIG_ARCH_MULTI_V7=n
            CONFIG_ATAGS=y
            CONFIG_MMU=y
            CONFIG_ARCH_MULTI_V4T=y
            CONFIG_CPU_LITTLE_ENDIAN=y
            CONFIG_ARCH_EP93XX=y
    
    Fixes: fb1c8f93d869 ("[PATCH] spinlock consolidation")
    Signed-off-by: Bart Van Assche <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
loop: fix partition scan race between udev and loop_reread_partitions() [+ + +]
Author: Daan De Meyer <[email protected]>
Date:   Tue Mar 31 10:51:28 2026 +0000

    loop: fix partition scan race between udev and loop_reread_partitions()
    
    [ Upstream commit 267ec4d7223a783f029a980f41b93c39b17996da ]
    
    When LOOP_CONFIGURE is called with LO_FLAGS_PARTSCAN, the following
    sequence occurs:
    
      1. disk_force_media_change() sets GD_NEED_PART_SCAN
      2. Uevent suppression is lifted and a KOBJ_CHANGE uevent is sent
      3. loop_global_unlock() releases the lock
      4. loop_reread_partitions() calls bdev_disk_changed() to scan
    
    There is a race between steps 2 and 4: when udev receives the uevent
    and opens the device before loop_reread_partitions() runs,
    blkdev_get_whole() in bdev.c sees GD_NEED_PART_SCAN set and calls
    bdev_disk_changed() for a first scan. Then loop_reread_partitions()
    does a second scan. The open_mutex serializes these two scans, but
    does not prevent both from running.
    
    The second scan in bdev_disk_changed() drops all partition devices
    from the first scan (via blk_drop_partitions()) before re-adding
    them, causing partition block devices to briefly disappear. This
    breaks any systemd unit with BindsTo= on the partition device: systemd
    observes the device going dead, fails the dependent units, and does
    not retry them when the device reappears.
    
    Fix this by removing the GD_NEED_PART_SCAN set from
    disk_force_media_change() entirely. None of the current callers need
    the lazy on-open partition scan triggered by this flag:
    
      - floppy: sets GENHD_FL_NO_PART, so disk_has_partscan() is always
        false and GD_NEED_PART_SCAN has no effect.
      - loop (loop_configure, loop_change_fd): when LO_FLAGS_PARTSCAN is
        set, loop_reread_partitions() performs an explicit scan. When not
        set, GD_SUPPRESS_PART_SCAN prevents the lazy scan path.
      - loop (__loop_clr_fd): calls bdev_disk_changed() explicitly if
        LO_FLAGS_PARTSCAN is set.
      - nbd (nbd_clear_sock_ioctl): capacity is set to zero immediately
        after; nbd manages GD_NEED_PART_SCAN explicitly elsewhere.
    
    With GD_NEED_PART_SCAN no longer set by disk_force_media_change(),
    udev opening the loop device after the uevent no longer triggers a
    redundant scan in blkdev_get_whole(), and only the single explicit
    scan from loop_reread_partitions() runs.
    
    A regression test for this bug has been submitted to blktests:
    https://github.com/linux-blktests/blktests/pull/240.
    
    Fixes: 9f65c489b68d ("loop: raise media_change event")
    Signed-off-by: Daan De Meyer <[email protected]>
    Acked-by: Christian Brauner <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
macvlan: annotate data-races around port->bc_queue_len_used [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Wed Apr 1 10:38:08 2026 +0000

    macvlan: annotate data-races around port->bc_queue_len_used
    
    [ Upstream commit 1ef5789d9906df3771c99b7f413caaf2bf473ca5 ]
    
    port->bc_queue_len_used is read and written locklessly,
    add READ_ONCE()/WRITE_ONCE() annotations.
    
    While WRITE_ONCE() in macvlan_fill_info() is not yet needed,
    it is a prereq for future RTNL avoidance.
    
    Fixes: d4bff72c8401 ("macvlan: Support for high multicast packet rate")
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

macvlan: fix macvlan_get_size() not reserving space for IFLA_MACVLAN_BC_CUTOFF [+ + +]
Author: Dudu Lu <[email protected]>
Date:   Mon Apr 13 16:53:49 2026 +0800

    macvlan: fix macvlan_get_size() not reserving space for IFLA_MACVLAN_BC_CUTOFF
    
    [ Upstream commit fa92a77b0ed4d5f11a71665a232ac5a54a4b055d ]
    
    macvlan_get_size() does not account for IFLA_MACVLAN_BC_CUTOFF, but
    macvlan_fill_info() conditionally includes it when port->bc_cutoff != 1.
    This causes nla_put_s32() to fail with -EMSGSIZE when the netlink skb
    runs out of space, triggering a WARN_ON in rtnetlink and preventing the
    interface from being dumped.
    
    The bug can be reproduced with:
    
      ip link add macvlan0 link eth0 type macvlan mode bridge
      ip link set macvlan0 type macvlan bc_cutoff 0
      ip -d link show macvlan0   # fails with -EMSGSIZE
    
    The bc_cutoff feature was added in commit 954d1fa1ac93 ("macvlan: Add
    netlink attribute for broadcast cutoff"), which added the nla_put_s32()
    call in macvlan_fill_info() but missed adding the corresponding
    nla_total_size(4) in macvlan_get_size(). A follow-up commit
    55cef78c244d ("macvlan: add forgotten nla_policy for
    IFLA_MACVLAN_BC_CUTOFF") fixed the missing nla_policy entry but still
    did not fix the size calculation.
    
    Fixes: 954d1fa1ac93 ("macvlan: Add netlink attribute for broadcast cutoff")
    Signed-off-by: Dudu Lu <[email protected]>
    Reviewed-by: Vadim Fedorenko <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mailbox: add sanity check for channel array [+ + +]
Author: Wolfram Sang <[email protected]>
Date:   Mon Apr 13 12:42:38 2026 +0200

    mailbox: add sanity check for channel array
    
    [ Upstream commit c1aad75595fb67edc7fda8af249d3b886efa1be9 ]
    
    Fail gracefully if there is no channel array attached to the mailbox
    controller. Otherwise the later dereference will cause an OOPS which
    might not be seen because mailbox controllers might instantiate very
    early. Remove the comment explaining the obvious while here.
    
    Fixes: 2b6d83e2b8b7 ("mailbox: Introduce framework for mailbox")
    Signed-off-by: Wolfram Sang <[email protected]>
    Reviewed-by: Geert Uytterhoeven <[email protected]>
    Signed-off-by: Jassi Brar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mailbox: mailbox-test: don't free the reused channel [+ + +]
Author: Wolfram Sang <[email protected]>
Date:   Fri Apr 17 09:42:34 2026 +0200

    mailbox: mailbox-test: don't free the reused channel
    
    [ Upstream commit 88ebadbf0deefdaccdab868b44ff70a0a257f473 ]
    
    The RX channel can be aliased to the TX channel if it has a different
    MMIO. This special case needs to be handled when freeing the channels
    otherwise a double-free occurs.
    
    Fixes: 8ea4484d0c2b ("mailbox: Add generic mechanism for testing Mailbox Controllers")
    Signed-off-by: Wolfram Sang <[email protected]>
    Signed-off-by: Jassi Brar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mailbox: mailbox-test: free channels on probe error [+ + +]
Author: Wolfram Sang <[email protected]>
Date:   Fri Apr 10 14:53:00 2026 +0200

    mailbox: mailbox-test: free channels on probe error
    
    [ Upstream commit c02053a9055d5fdfd32432287cca8958db1d5bc5 ]
    
    On probe error, free the previously obtained channels. This not only
    prevents a leak, but also UAF scenarios because the client structure
    will be removed nonetheless because it was allocated with devm.
    
    Link: https://sashiko.dev/#/patchset/20260327151217.5327-2-wsa%2Brenesas%40sang-engineering.com
    Fixes: 8ea4484d0c2b ("mailbox: Add generic mechanism for testing Mailbox Controllers")
    Signed-off-by: Wolfram Sang <[email protected]>
    Signed-off-by: Jassi Brar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mailbox: mailbox-test: initialize struct earlier [+ + +]
Author: Wolfram Sang <[email protected]>
Date:   Fri Apr 17 09:42:35 2026 +0200

    mailbox: mailbox-test: initialize struct earlier
    
    [ Upstream commit bbcf9af68bfedb3d9cc3c7eae62f5c844d8b78b9 ]
    
    The waitqueue must be initialized before the debugfs files are created
    because from that time, requests from userspace can already be made.
    Similarily, drvdata and spinlock needs to be initialized before we
    request the channel, otherwise dangling irqs might run into problems
    like a NULL pointer exception.
    
    Fixes: 8ea4484d0c2b ("mailbox: Add generic mechanism for testing Mailbox Controllers")
    Signed-off-by: Wolfram Sang <[email protected]>
    Signed-off-by: Jassi Brar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mailbox: mailbox-test: make data_ready a per-instance variable [+ + +]
Author: Wolfram Sang <[email protected]>
Date:   Fri Apr 17 09:42:36 2026 +0200

    mailbox: mailbox-test: make data_ready a per-instance variable
    
    [ Upstream commit 6e937f4e769e60947909e3525965f0137b9039e8 ]
    
    While not the default case, multiple tests can be run simultaneously.
    Then, data_ready being a global variable will be overwritten and the
    per-instance lock will not help. Turn the global variable into a
    per-instance one to avoid this problem.
    
    Fixes: e339c80af95e ("mailbox: mailbox-test: don't rely on rx_buffer content to signal data ready")
    Signed-off-by: Wolfram Sang <[email protected]>
    Signed-off-by: Jassi Brar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
media: nxp: imx8-isi: Reduce minimum queued buffers from 2 to 0 [+ + +]
Author: Guoniu Zhou <[email protected]>
Date:   Wed May 20 08:56:20 2026 -0400

    media: nxp: imx8-isi: Reduce minimum queued buffers from 2 to 0
    
    [ Upstream commit 2f38622d0f85f317be9e6b131da6cd511db94fd2 ]
    
    Fix a hang issue when capturing a single frame with applications like cam
    in libcamera. It would hang waiting for the driver to complete the buffer,
    but streaming never starts because min_queued_buffers was set to 2.
    
    The ISI module uses a ping-pong buffer mechanism that requires two buffers
    to be programmed at all times. However, when fewer than 2 user buffers are
    available, the driver use internal discard buffers to fill the remaining
    slot(s). Reduce minimum queued buffers from 2 to 0 allows streaming to
    start without any queued buffers.
    
    Fixes: cf21f328fcaf ("media: nxp: Add i.MX8 ISI driver")
    Cc: [email protected]
    Signed-off-by: Guoniu Zhou <[email protected]>
    Reviewed-by: Laurent Pinchart <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Laurent Pinchart <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    [ renamed `min_queued_buffers` to `min_buffers_needed` ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
memory: tegra124-emc: Fix dll_change check [+ + +]
Author: Mikko Perttunen <[email protected]>
Date:   Mon Jan 26 15:50:42 2026 +0900

    memory: tegra124-emc: Fix dll_change check
    
    [ Upstream commit 9597ab9a8296ab337e6820f8a717ff621078b632 ]
    
    The code checking whether the specified memory timing enables DLL
    in the EMRS register was reversed. DLL is enabled if bit A0 is low.
    Fix the check.
    
    Fixes: 73a7f0a90641 ("memory: tegra: Add EMC (external memory controller) driver")
    Signed-off-by: Mikko Perttunen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

memory: tegra30-emc: Fix dll_change check [+ + +]
Author: Mikko Perttunen <[email protected]>
Date:   Mon Jan 26 15:50:43 2026 +0900

    memory: tegra30-emc: Fix dll_change check
    
    [ Upstream commit 0a93f2355cf4922ad2399dbef5ea1049fef116d4 ]
    
    The code checking whether the specified memory timing enables DLL
    in the EMRS register was reversed. DLL is enabled if bit A0 is low.
    Fix the check.
    
    Fixes: e34212c75a68 ("memory: tegra: Introduce Tegra30 EMC driver")
    Signed-off-by: Mikko Perttunen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mfd: mc13xxx-core: Fix memory leak in mc13xxx_add_subdevice_pdata() [+ + +]
Author: Abdun Nihaal <[email protected]>
Date:   Tue Jan 20 15:56:20 2026 +0530

    mfd: mc13xxx-core: Fix memory leak in mc13xxx_add_subdevice_pdata()
    
    [ Upstream commit a5a65a7fb2f7796bbe492cd6be59c92cb64377d1 ]
    
    The memory allocated for cell.name using kmemdup() is not freed when
    mfd_add_devices() fails. Fix that by using devm_kmemdup().
    
    Fixes: 8e00593557c3 ("mfd: Add mc13892 support to mc13xxx")
    Signed-off-by: Abdun Nihaal <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
module: Fix freeing of charp module parameters when CONFIG_SYSFS=n [+ + +]
Author: Petr Pavlu <[email protected]>
Date:   Fri Mar 13 14:48:02 2026 +0100

    module: Fix freeing of charp module parameters when CONFIG_SYSFS=n
    
    [ Upstream commit deffe1edba626d474fef38007c03646ca5876a0e ]
    
    When setting a charp module parameter, the param_set_charp() function
    allocates memory to store a copy of the input value. Later, when the module
    is potentially unloaded, the destroy_params() function is called to free
    this allocated memory.
    
    However, destroy_params() is available only when CONFIG_SYSFS=y, otherwise
    only a dummy variant is present. In the unlikely case that the kernel is
    configured with CONFIG_MODULES=y and CONFIG_SYSFS=n, this results in
    a memory leak of charp values when a module is unloaded.
    
    Fix this issue by making destroy_params() always available when
    CONFIG_MODULES=y. Rename the function to module_destroy_params() to clarify
    that it is intended for use by the module loader.
    
    Fixes: e180a6b7759a ("param: fix charp parameters set via sysfs")
    Signed-off-by: Petr Pavlu <[email protected]>
    Signed-off-by: Sami Tolvanen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mptcp: drop __mptcp_fastopen_gen_msk_ackseq() [+ + +]
Author: Paolo Abeni <[email protected]>
Date:   Mon May 18 09:05:08 2026 -0400

    mptcp: drop __mptcp_fastopen_gen_msk_ackseq()
    
    [ Upstream commit f03afb3aeb9d81f6c5ab728a61a040012923e3b3 ]
    
    When we will move the whole RX path under the msk socket lock, updating
    the already queued skb for passive fastopen socket at 3rd ack time will
    be extremely painful and race prone
    
    The map_seq for already enqueued skbs is used only to allow correct
    coalescing with later data; preventing collapsing to the first skb of
    a fastopen connect we can completely remove the
    __mptcp_fastopen_gen_msk_ackseq() helper.
    
    Before dropping this helper, a new item had to be added to the
    mptcp_skb_cb structure. Because this item will be frequently tested in
    the fast path -- almost on every packet -- and because there is free
    space there, a single byte is used instead of a bitfield. This micro
    optimisation slightly reduces the number of CPU operations to do the
    associated check.
    
    Signed-off-by: Paolo Abeni <[email protected]>
    Reviewed-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/20250218-net-next-mptcp-rx-path-refactor-v1-2-4a47d90d7998@kernel.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 6254a16d6f0c ("mptcp: fix rx timestamp corruption on fastopen")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: fix rx timestamp corruption on fastopen [+ + +]
Author: Paolo Abeni <[email protected]>
Date:   Mon May 18 09:05:09 2026 -0400

    mptcp: fix rx timestamp corruption on fastopen
    
    [ Upstream commit 6254a16d6f0c672e3809ca5d7c9a28a55d71f764 ]
    
    The skb cb offset containing the timestamp presence flag is cleared
    before loading such information. Cache such value before MPTCP CB
    initialization.
    
    Fixes: 36b122baf6a8 ("mptcp: add subflow_v(4,6)_send_synack()")
    Cc: [email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Reviewed-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/20260501-net-mptcp-misc-fixes-7-1-rc3-v1-3-b70118df778e@kernel.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: pm: ADD_ADDR rtx: fix potential data-race [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Mon May 18 10:23:36 2026 -0400

    mptcp: pm: ADD_ADDR rtx: fix potential data-race
    
    [ Upstream commit 5cd6e0ad79d2615264f63929f8b457ad97ae550d ]
    
    This mptcp_pm_add_timer() helper is executed as a timer callback in
    softirq context. To avoid any data races, the socket lock needs to be
    held with bh_lock_sock().
    
    If the socket is in use, retry again soon after, similar to what is done
    with the keepalive timer.
    
    Fixes: 00cfd77b9063 ("mptcp: retransmit ADD_ADDR when timeout")
    Cc: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ applied hunk to `net/mptcp/pm_netlink.c` instead of `net/mptcp/pm.c` ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: pm: ADD_ADDR rtx: resched blocked ADD_ADDR quicker [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Tue May 19 07:52:19 2026 -0400

    mptcp: pm: ADD_ADDR rtx: resched blocked ADD_ADDR quicker
    
    [ Upstream commit 3cf12492891c4b5ff54dda404a2de4ec54c9e1b5 ]
    
    When an ADD_ADDR needs to be retransmitted and another one has already
    been prepared -- e.g. multiple ADD_ADDRs have been sent in a row and
    need to be retransmitted later -- this additional retransmission will
    need to wait.
    
    In this case, the timer was reset to TCP_RTO_MAX / 8, which is ~15
    seconds. This delay is unnecessary long: it should just be rescheduled
    at the next opportunity, e.g. after the retransmission timeout.
    
    Without this modification, some issues can be seen from time to time in
    the selftests when multiple ADD_ADDRs are sent, and the host takes time
    to process them, e.g. the "signal addresses, ADD_ADDR timeout" MPTCP
    Join selftest, especially with a debug kernel config.
    
    Note that on older kernels, 'timeout' is not available. It should be
    enough to replace it by one second (HZ).
    
    Fixes: 00cfd77b9063 ("mptcp: retransmit ADD_ADDR when timeout")
    Cc: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ replaced `TCP_RTO_MAX / 8` with `HZ` ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: pm: kernel: correctly retransmit ADD_ADDR ID 0 [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Mon May 18 09:45:28 2026 -0400

    mptcp: pm: kernel: correctly retransmit ADD_ADDR ID 0
    
    [ Upstream commit b12014d2d36eaed4e4bec5f1ac7e91110eeb100d ]
    
    When adding the ADD_ADDR to the list, the address including the IP, port
    and ID are copied. On the other hand, when the endpoint corresponds to
    the one from the initial subflow, the ID is set to 0, as specified by
    the MPTCP protocol.
    
    The issue is that the ID was reset after having copied the ID in the
    ADD_ADDR entry. So the retransmission was done, but using a different ID
    than the initial one.
    
    Fixes: 8b8ed1b429f8 ("mptcp: pm: reuse ID 0 after delete and re-add")
    Cc: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ applied to net/mptcp/pm_netlink.c instead of upstream's pm_kernel.c ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: pm: prio: skip closed subflows [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Mon May 18 09:04:57 2026 -0400

    mptcp: pm: prio: skip closed subflows
    
    [ Upstream commit 166b78344031bf7ac9f55cb5282776cfd85f220e ]
    
    When sending an MP_PRIO, closed subflows need to be skipped.
    
    This fixes the case where the initial subflow got closed, re-opened
    later, then an MP_PRIO is needed for the same local address.
    
    Note that explicit MP_PRIO cannot be sent during the 3WHS, so it is fine
    to use __mptcp_subflow_active().
    
    Fixes: 067065422fcd ("mptcp: add the outgoing MP_PRIO support")
    Cc: [email protected]
    Fixes: b29fcfb54cd7 ("mptcp: full disconnect implementation")
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ applied to renamed function `mptcp_pm_nl_mp_prio_send_ack()` in `pm_netlink.c` ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mtd: parsers: ofpart: call of_node_get() for dedicated subpartitions [+ + +]
Author: Cosmin Tanislav <[email protected]>
Date:   Wed Mar 11 17:39:57 2026 +0200

    mtd: parsers: ofpart: call of_node_get() for dedicated subpartitions
    
    [ Upstream commit e882626c1747653f1f01ea9d12e278e613b11d0f ]
    
    In order to parse sub-partitions, add_mtd_partitions() calls
    parse_mtd_partitions() for all previously found partitions.
    
    Each partition will end up being passed to parse_fixed_partitions(), and
    its of_node will be treated as the ofpart_node.
    
    Commit 7cce81df7d26 ("mtd: parsers: ofpart: fix OF node refcount leak in
    parse_fixed_partitions()") added of_node_put() calls for ofpart_node on
    all exit paths.
    
    In the case where the partition passed to parse_fixed_partitions() has a
    parent, it is treated as a dedicated partitions node, and of_node_put()
    is wrongly called for it, even if of_node_get() was not called
    explicitly.
    
    On repeated bind / unbinds of the MTD, the extra of_node_put() ends up
    decrementing the refcount down to 0, which should never happen,
    resulting in the following error:
    
    OF: ERROR: of_node_release() detected bad of_node_put() on
    /soc/spi@80007000/flash@0/partitions/partition@0
    
    Call of_node_get() to balance the call to of_node_put() done for
    dedicated partitions nodes.
    
    Fixes: 7cce81df7d26 ("mtd: parsers: ofpart: fix OF node refcount leak in parse_fixed_partitions()")
    Signed-off-by: Cosmin Tanislav <[email protected]>
    Tested-by: Tommaso Merciai <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mtd: parsers: ofpart: call of_node_put() only in ofpart_fail path [+ + +]
Author: Cosmin Tanislav <[email protected]>
Date:   Wed Mar 11 17:39:56 2026 +0200

    mtd: parsers: ofpart: call of_node_put() only in ofpart_fail path
    
    [ Upstream commit 0c87dea1aab86116211cb37387c404c9e9231c39 ]
    
    ofpart_none can only be reached after the for_each_child_of_node() loop
    finishes. for_each_child_of_node() correctly calls of_node_put() for all
    device nodes it iterates over as long as we don't break or jump out of
    the loop.
    
    Calling of_node_put() inside the ofpart_none path will wrongly decrement
    the ref count of the last node in the for_each_child_of_node() loop.
    
    Move the call to of_node_put() under the ofpart_fail label to fix this.
    
    Fixes: ebd5a74db74e ("mtd: ofpart: Check availability of reg property instead of name property")
    Signed-off-by: Cosmin Tanislav <[email protected]>
    Tested-by: Tommaso Merciai <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mtd: physmap_of_gemini: Fix disabled pinctrl state check [+ + +]
Author: Chen Ni <[email protected]>
Date:   Fri Feb 27 09:43:36 2026 +0800

    mtd: physmap_of_gemini: Fix disabled pinctrl state check
    
    [ Upstream commit b7c0982184b0661f5b1b805f3a56f1bd3757b63e ]
    
    The condition for checking the disabled pinctrl state incorrectly checks
    gf->enabled_state instead of gf->disabled_state. This causes misleading
    error messages and could lead to incorrect behavior when only one of the
    pinctrl states is defined.
    
    Fix the condition to properly check gf->disabled_state.
    
    Fixes: 9d3b5086f6d4 ("mtd: physmap_of_gemini: Handle pin control")
    Signed-off-by: Chen Ni <[email protected]>
    Reviewed-by: Linus Walleij <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mtd: rawnand: sunxi: fix sunxi_nfc_hw_ecc_read_extra_oob [+ + +]
Author: Richard Genoud <[email protected]>
Date:   Tue Mar 17 15:24:30 2026 +0100

    mtd: rawnand: sunxi: fix sunxi_nfc_hw_ecc_read_extra_oob
    
    [ Upstream commit 848c13996c55fe4ea6bf5acc3ce6c8c5c944b5f6 ]
    
    When dumping the OOB, the bytes at the end where actually copied from
    the beginning of the OOB instead of current_offset.
    
    That leads to something like:
    OOB: ff ff ff ff ff ff ff ff ea 19 00 3a 83 db aa 8d
    OOB: 99 09 c8 9a 90 36 35 7d aa 15 13 07 3d 97 b2 a4
    OOB: a8 bb 19 b3 07 e9 f6 25 52 d7 1a 23 e2 7e 0a e4
    OOB: 52 8a 09 d2 1a 86 3d cf b4 99 43 13 d3 90 33 0b
    OOB: ff ff ff ff ff ff ff ff ea 19 00 3a 83 db aa 8d
    OOB: 99 09 c8 9a 90 36 35 7d aa 15 13 07 3d 97 b2 a4
    OOB: a8 bb 19 b3 07 e9 f6 25 52 d7 1a 23 e2 7e 0a e4
    OOB: 52 8a 09 d2 1a 86 3d cf b4 99 43 13 d3 90 33 0b
    instead of:
    OOB: ff ff ff ff ff ff ff ff ea 19 00 3a 83 db aa 8d
    OOB: 99 09 c8 9a 90 36 35 7d aa 15 13 07 3d 97 b2 a4
    OOB: a8 bb 19 b3 07 e9 f6 25 52 d7 1a 23 e2 7e 0a e4
    OOB: 52 8a 09 d2 1a 86 3d cf b4 99 43 13 d3 90 33 0b
    OOB: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    OOB: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    OOB: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    OOB: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    (example with BCH16, user data [8,0], no scrambling)
    
    *cur_off (offset from the beginning of the page) was compared to offset
    (offset from the beginning of the OOB), and then, the
    nand_change_read_column_op() sets the current position to the beginning
    of the OOB instead of OOB+offset
    
    Fixes: 15d6f118285f ("mtd: rawnand: sunxi: Stop supporting ECC_HW_SYNDROME mode")
    Reviewed-by: Jernej Skrabec <[email protected]>
    Signed-off-by: Richard Genoud <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mtd: spi-nor: core: correct the op.dummy.nbytes when check read operations [+ + +]
Author: Haibo Chen <[email protected]>
Date:   Mon Dec 8 17:14:14 2025 +0800

    mtd: spi-nor: core: correct the op.dummy.nbytes when check read operations
    
    [ Upstream commit 756564a536ecd8c9d33edd89f0647a91a0b03587 ]
    
    When check read operation, need to setting the op.dummy.nbytes based
    on current read operation rather than the nor->read_proto.
    
    Fixes: 0e30f47232ab ("mtd: spi-nor: add support for DTR protocol")
    Signed-off-by: Haibo Chen <[email protected]>
    Reviewed-by: Pratyush Yadav <[email protected]>
    Signed-off-by: Pratyush Yadav (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mtd: spi-nor: sfdp: introduce smpt_map_id fixup hook [+ + +]
Author: Takahiro Kuwano <[email protected]>
Date:   Wed Nov 5 16:47:59 2025 +0900

    mtd: spi-nor: sfdp: introduce smpt_map_id fixup hook
    
    [ Upstream commit f74de390557bf2bcc5dca4a357b41c0701d3f76e ]
    
    Certain chips have inconsistent Sector Map Parameter Table (SMPT) data,
    which leads to the wrong map ID being identified, causing failures to
    detect the correct sector map.
    
    To fix this, introduce smpt_map_id() into the struct spi_nor_fixups.
    This function will be called after the initial SMPT-based detection,
    allowing chip-specific logic to correct the map ID.
    
    Infineon S25FS512S needs this fixup as it has inconsistency between map
    ID definition and configuration register value actually obtained.
    
    Co-developed-by: Marek Vasut <[email protected]>
    Signed-off-by: Marek Vasut <[email protected]>
    Reviewed-by: Tudor Ambarus <[email protected]>
    Tested-by: Marek Vasut <[email protected]> # S25FS512S
    Signed-off-by: Takahiro Kuwano <[email protected]>
    Reviewed-by: Tudor Ambarus <[email protected]>>
    Signed-off-by: Pratyush Yadav <[email protected]>
    Stable-dep-of: 3620d67b4849 ("mtd: spi-nor: update spi_nor_fixups::post_sfdp() documentation")
    Signed-off-by: Sasha Levin <[email protected]>

mtd: spi-nor: sfdp: introduce smpt_read_dummy fixup hook [+ + +]
Author: Takahiro Kuwano <[email protected]>
Date:   Wed Nov 5 16:47:58 2025 +0900

    mtd: spi-nor: sfdp: introduce smpt_read_dummy fixup hook
    
    [ Upstream commit 653f6def567c81f37302f9591ffd54df3e2a11eb ]
    
    SMPT contains config detection info that describes opcode, address, and
    dummy cycles to read sector map config. The dummy cycles parameter can
    be SMPT_CMD_READ_DUMMY_IS_VARIABLE and in that case nor->read_dummy
    (initialized as 0) is used. In Infineon flash chips, Read Any Register
    command with variable dummy cycle is defined in SMPT. S25Hx/S28Hx flash
    has 0 dummy cycle by default to read volatile regiters and
    nor->read_dummy can work. S25FS-S flash has 8 dummy cycles so we need a
    hook that can fix dummy cycles with actually used value.
    
    Inroduce smpt_read_dummy() in struct spi_nor_fixups. It is called when
    the dummy cycle field in SMPT config detection is 'varialble'.
    
    Reviewed-by: Tudor Ambarus <[email protected]>
    Tested-by: Marek Vasut <[email protected]> # S25FS512S
    Signed-off-by: Takahiro Kuwano <[email protected]>
    Signed-off-by: Pratyush Yadav <[email protected]>
    Stable-dep-of: 3620d67b4849 ("mtd: spi-nor: update spi_nor_fixups::post_sfdp() documentation")
    Signed-off-by: Sasha Levin <[email protected]>

mtd: spi-nor: swp: check SR_TB flag when getting tb_mask [+ + +]
Author: Shiji Yang <[email protected]>
Date:   Wed Jan 28 20:42:56 2026 +0800

    mtd: spi-nor: swp: check SR_TB flag when getting tb_mask
    
    [ Upstream commit 94645aa41bf9ecb87c2ce78b1c3405bfb6074a37 ]
    
    When the chip does not support top/bottom block protect, the tb_mask
    must be set to 0, otherwise SR1 bit5 will be unexpectedly modified.
    
    Signed-off-by: Shiji Yang <[email protected]>
    Fixes: 3dd8012a8eeb ("mtd: spi-nor: add TB (Top/Bottom) protect support")
    Reviewed-by: Michael Walle <[email protected]>
    Reviewed-by: Miquel Raynal <[email protected]>
    Signed-off-by: Pratyush Yadav (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mtd: spi-nor: update spi_nor_fixups::post_sfdp() documentation [+ + +]
Author: Jonas Gorski <[email protected]>
Date:   Thu Dec 18 10:54:30 2025 +0100

    mtd: spi-nor: update spi_nor_fixups::post_sfdp() documentation
    
    [ Upstream commit 3620d67b48493c6252bbc873dc88dde81641d56b ]
    
    After commit 5273cc6df984 ("mtd: spi-nor: core: Call
    spi_nor_post_sfdp_fixups() only when SFDP is defined")
    spi_nor_post_sfdp_fixups() isn't called anymore if no SFDP is detected.
    
    Update the documentation accordingly.
    
    Fixes: 5273cc6df984 ("mtd: spi-nor: core: Call spi_nor_post_sfdp_fixups() only when SFDP is defined")
    Signed-off-by: Jonas Gorski <[email protected]>
    Reviewed-by: Pratyush Yadav <[email protected]>
    Signed-off-by: Pratyush Yadav (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
neigh: let neigh_xmit take skb ownership [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Fri Apr 24 16:58:38 2026 +0200

    neigh: let neigh_xmit take skb ownership
    
    [ Upstream commit 4438113be604ee67a7bf4f81da6e1cca41332ce4 ]
    
    neigh_xmit always releases the skb, except when no neighbour table is
    found. But even the first added user of neigh_xmit (mpls) relied on
    neigh_xmit to release the skb (or queue it for tx).
    
    sashiko reported:
     If neigh_xmit() is called with an uninitialized neighbor table (for
     example, NEIGH_ND_TABLE when IPv6 is disabled), it returns -EAFNOSUPPORT
     and bypasses its internal out_kfree_skb error path.  Because the return
     value of neigh_xmit() is ignored here, does this leak the SKB?
    
    Assume full ownership and remove the last code path that doesn't
    xmit or free skb.
    
    Fixes: 4fd3d7d9e868 ("neigh: Add helper function neigh_xmit")
    Signed-off-by: Florian Westphal <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[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]>

 
neighbour: add RCU protection to neigh_tables[] [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Apr 18 09:51:04 2024 +0000

    neighbour: add RCU protection to neigh_tables[]
    
    [ Upstream commit f8f2eb9de69a1119117d198547c13d7a1123a5a9 ]
    
    In order to remove RTNL protection from neightbl_dump_info()
    and neigh_dump_info() later, we need to add
    RCU protection to neigh_tables[].
    
    Signed-off-by: Eric Dumazet <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 4438113be604 ("neigh: let neigh_xmit take skb ownership")
    Signed-off-by: Sasha Levin <[email protected]>

 
net, bpf: fix null-ptr-deref in xdp_master_redirect() for down master [+ + +]
Author: Jiayuan Chen <[email protected]>
Date:   Sat Apr 11 08:55:19 2026 +0800

    net, bpf: fix null-ptr-deref in xdp_master_redirect() for down master
    
    [ Upstream commit 1921f91298d1388a0bb9db8f83800c998b649cb3 ]
    
    syzkaller reported a kernel panic in bond_rr_gen_slave_id() reached via
    xdp_master_redirect(). Full decoded trace:
    
      https://syzkaller.appspot.com/bug?extid=80e046b8da2820b6ba73
    
    bond_rr_gen_slave_id() dereferences bond->rr_tx_counter, a per-CPU
    counter that bonding only allocates in bond_open() when the mode is
    round-robin. If the bond device was never brought up, rr_tx_counter
    stays NULL.
    
    The XDP redirect path can still reach that code on a bond that was
    never opened: bpf_master_redirect_enabled_key is a global static key,
    so as soon as any bond device has native XDP attached, the
    XDP_TX -> xdp_master_redirect() interception is enabled for every
    slave system-wide. The path xdp_master_redirect() ->
    bond_xdp_get_xmit_slave() -> bond_xdp_xmit_roundrobin_slave_get() ->
    bond_rr_gen_slave_id() then runs against a bond that has no
    rr_tx_counter and crashes.
    
    Fix this in the generic xdp_master_redirect() by refusing to call into
    the master's ->ndo_xdp_get_xmit_slave() when the master device is not
    up. IFF_UP is only set after ->ndo_open() has successfully returned,
    so this reliably excludes masters whose XDP state has not been fully
    initialized. Drop the frame with XDP_ABORTED so the exception is
    visible via trace_xdp_exception() rather than silently falling through.
    This is not specific to bonding: any current or future master that
    defers XDP state allocation to ->ndo_open() is protected.
    
    Fixes: 879af96ffd72 ("net, core: Add support for XDP redirection to slave device")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/all/[email protected]/T/
    Suggested-by: Daniel Borkmann <[email protected]>
    Acked-by: Daniel Borkmann <[email protected]>
    Signed-off-by: Jiayuan Chen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/mlx5e: Fix features not applied during netdev registration [+ + +]
Author: Gal Pressman <[email protected]>
Date:   Thu Apr 9 23:28:51 2026 +0300

    net/mlx5e: Fix features not applied during netdev registration
    
    [ Upstream commit 9994ad4df82d64e57135c0f0906897685f5a9e87 ]
    
    mlx5e_fix_features() returns early when the netdevice is not present.
    This is correct during profile transitions where priv is cleared, but it
    also incorrectly blocks feature fixups during register_netdev(), when
    the device is also not yet present.
    
    It is not trivial to distinguish between both cases as we cannot use
    priv to carry state, and in both cases reg_state == NETREG_REGISTERED.
    
    Force a netdev features update after register_netdev() completes, where
    the device is present and fix_features() can actually work.
    
    This is not a pretty solution, as it results in an additional features
    update call (register_netdevice() already calls
    __netdev_update_features() internally), but it is the simplest,
    cleanest, and most robust way I found to fix this issue after multiple
    attempts.
    
    This fixes an issue on systems where CQE compression is enabled by
    default, RXHASH remains enabled after registration despite the two
    features being mutually exclusive.
    
    Fixes: ab4b01bfdaa6 ("net/mlx5e: Verify dev is present for fix features ndo")
    Signed-off-by: Gal Pressman <[email protected]>
    Reviewed-by: Dragos Tatulea <[email protected]>
    Signed-off-by: Tariq Toukan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/mlx5e: IPsec, fix ASO poll timeout with read_poll_timeout_atomic() [+ + +]
Author: Gal Pressman <[email protected]>
Date:   Thu Apr 9 23:28:52 2026 +0300

    net/mlx5e: IPsec, fix ASO poll timeout with read_poll_timeout_atomic()
    
    [ Upstream commit edccdd1eb94712da97a6ce71123ec27890add754 ]
    
    The do-while poll loop uses jiffies for its timeout:
      expires = jiffies + msecs_to_jiffies(10);
    
    jiffies is sampled at an arbitrary point within the current tick, so the
    first partial tick contributes anywhere from a full tick down to nearly
    zero real time. For small msecs_to_jiffies() results this is
    significant, the effective poll window can be much shorter than the
    requested 10ms, and in the worst case the loop exits after a single
    iteration (e.g., when HZ=100), well before the device has delivered the
    CQE.
    
    Replace the loop with read_poll_timeout_atomic(), which counts elapsed
    time via udelay() accounting rather than jiffies, guaranteeing the full
    poll window regardless of HZ.
    
    Additionally, read_poll_timeout_atomic() executes the poll operation one
    more time after the timeout has expired, giving the CQE a final chance
    to be detected. The old do-while loop could exit without a final poll if
    the timeout expired during the udelay() between iterations.
    
    Fixes: 76e463f6508b ("net/mlx5e: Overcome slow response for first IPsec ASO WQE")
    Signed-off-by: Gal Pressman <[email protected]>
    Reviewed-by: Jianbo Liu <[email protected]>
    Signed-off-by: Tariq Toukan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/rds: Optimize rds_ib_laddr_check [+ + +]
Author: Håkon Bugge <[email protected]>
Date:   Wed Apr 8 01:04:19 2026 -0700

    net/rds: Optimize rds_ib_laddr_check
    
    [ Upstream commit 236f718ac885965fa886440b9898dfae185c9733 ]
    
    rds_ib_laddr_check() creates a CM_ID and attempts to bind the address
    in question to it. This in order to qualify the allegedly local
    address as a usable IB/RoCE address.
    
    In the field, ExaWatcher runs rds-ping to all ports in the fabric from
    all local ports. This using all active ToS'es. In a full rack system,
    we have 14 cell servers and eight db servers. Typically, 6 ToS'es are
    used. This implies 528 rds-ping invocations per ExaWatcher's "RDSinfo"
    interval.
    
    Adding to this, each rds-ping invocation creates eight sockets and
    binds the local address to them:
    
    socket(AF_RDS, SOCK_SEQPACKET, 0)       = 3
    bind(3, {sa_family=AF_INET, sin_port=htons(0),
            sin_addr=inet_addr("192.168.36.2")}, 16) = 0
    socket(AF_RDS, SOCK_SEQPACKET, 0)       = 4
    bind(4, {sa_family=AF_INET, sin_port=htons(0),
            sin_addr=inet_addr("192.168.36.2")}, 16) = 0
    socket(AF_RDS, SOCK_SEQPACKET, 0)       = 5
    bind(5, {sa_family=AF_INET, sin_port=htons(0),
            sin_addr=inet_addr("192.168.36.2")}, 16) = 0
    socket(AF_RDS, SOCK_SEQPACKET, 0)       = 6
    bind(6, {sa_family=AF_INET, sin_port=htons(0),
            sin_addr=inet_addr("192.168.36.2")}, 16) = 0
    socket(AF_RDS, SOCK_SEQPACKET, 0)       = 7
    bind(7, {sa_family=AF_INET, sin_port=htons(0),
            sin_addr=inet_addr("192.168.36.2")}, 16) = 0
    socket(AF_RDS, SOCK_SEQPACKET, 0)       = 8
    bind(8, {sa_family=AF_INET, sin_port=htons(0),
            sin_addr=inet_addr("192.168.36.2")}, 16) = 0
    socket(AF_RDS, SOCK_SEQPACKET, 0)       = 9
    bind(9, {sa_family=AF_INET, sin_port=htons(0),
            sin_addr=inet_addr("192.168.36.2")}, 16) = 0
    socket(AF_RDS, SOCK_SEQPACKET, 0)       = 10
    bind(10, {sa_family=AF_INET, sin_port=htons(0),
            sin_addr=inet_addr("192.168.36.2")}, 16) = 0
    
    So, at every interval ExaWatcher executes rds-ping's, 4224 CM_IDs are
    allocated, considering this full-rack system. After the a CM_ID has
    been allocated, rdma_bind_addr() is called, with the port number being
    zero. This implies that the CMA will attempt to search for an un-used
    ephemeral port. Simplified, the algorithm is to start at a random
    position in the available port space, and then if needed, iterate
    until an un-used port is found.
    
    The book-keeping of used ports uses the idr system, which again uses
    slab to allocate new struct idr_layer's. The size is 2092 bytes and
    slab tries to reduce the wasted space. Hence, it chooses an order:3
    allocation, for which 15 idr_layer structs will fit and only 1388
    bytes are wasted per the 32KiB order:3 chunk.
    
    Although this order:3 allocation seems like a good space/speed
    trade-off, it does not resonate well with how it used by the CMA. The
    combination of the randomized starting point in the port space (which
    has close to zero spatial locality) and the close proximity in time of
    the 4224 invocations of the rds-ping's, creates a memory hog for
    order:3 allocations.
    
    These costly allocations may need reclaims and/or compaction. At
    worst, they may fail and produce a stack trace such as (from uek4):
    
    [<ffffffff811a72d5>] __inc_zone_page_state+0x35/0x40
    [<ffffffff811c2e97>] page_add_file_rmap+0x57/0x60
    [<ffffffffa37ca1df>] remove_migration_pte+0x3f/0x3c0 [ksplice_6cn872bt_vmlinux_new]
    [<ffffffff811c3de8>] rmap_walk+0xd8/0x340
    [<ffffffff811e8860>] remove_migration_ptes+0x40/0x50
    [<ffffffff811ea83c>] migrate_pages+0x3ec/0x890
    [<ffffffff811afa0d>] compact_zone+0x32d/0x9a0
    [<ffffffff811b00ed>] compact_zone_order+0x6d/0x90
    [<ffffffff811b03b2>] try_to_compact_pages+0x102/0x270
    [<ffffffff81190e56>] __alloc_pages_direct_compact+0x46/0x100
    [<ffffffff8119165b>] __alloc_pages_nodemask+0x74b/0xaa0
    [<ffffffff811d8411>] alloc_pages_current+0x91/0x110
    [<ffffffff811e3b0b>] new_slab+0x38b/0x480
    [<ffffffffa41323c7>] __slab_alloc+0x3b7/0x4a0 [ksplice_s0dk66a8_vmlinux_new]
    [<ffffffff811e42ab>] kmem_cache_alloc+0x1fb/0x250
    [<ffffffff8131fdd6>] idr_layer_alloc+0x36/0x90
    [<ffffffff8132029c>] idr_get_empty_slot+0x28c/0x3d0
    [<ffffffff813204ad>] idr_alloc+0x4d/0xf0
    [<ffffffffa051727d>] cma_alloc_port+0x4d/0xa0 [rdma_cm]
    [<ffffffffa0517cbe>] rdma_bind_addr+0x2ae/0x5b0 [rdma_cm]
    [<ffffffffa09d8083>] rds_ib_laddr_check+0x83/0x2c0 [ksplice_6l2xst5i_rds_rdma_new]
    [<ffffffffa05f892b>] rds_trans_get_preferred+0x5b/0xa0 [rds]
    [<ffffffffa05f09f2>] rds_bind+0x212/0x280 [rds]
    [<ffffffff815b4016>] SYSC_bind+0xe6/0x120
    [<ffffffff815b4d3e>] SyS_bind+0xe/0x10
    [<ffffffff816b031a>] system_call_fastpath+0x18/0xd4
    
    To avoid these excessive calls to rdma_bind_addr(), we optimize
    rds_ib_laddr_check() by simply checking if the address in question has
    been used before. The rds_rdma module keeps track of addresses
    associated with IB devices, and the function rds_ib_get_device() is
    used to determine if the address already has been qualified as a valid
    local address. If not found, we call the legacy rds_ib_laddr_check(),
    now renamed to rds_ib_laddr_check_cm().
    
    Signed-off-by: Håkon Bugge <[email protected]>
    Signed-off-by: Somasundaram Krishnasamy <[email protected]>
    Signed-off-by: Gerd Rausch <[email protected]>
    Signed-off-by: Allison Henderson <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: ebf71dd4aff4 ("net/rds: Restrict use of RDS/IB to the initial network namespace")
    Signed-off-by: Sasha Levin <[email protected]>

net/rds: reset op_nents when zerocopy page pin fails [+ + +]
Author: Allison Henderson <[email protected]>
Date:   Tue May 5 16:43:36 2026 -0700

    net/rds: reset op_nents when zerocopy page pin fails
    
    commit e174929793195e0cd6a4adb0cad731b39f9019b4 upstream.
    
    When iov_iter_get_pages2() fails in rds_message_zcopy_from_user(),
    the pinned pages are released with put_page(), and
    rm->data.op_mmp_znotifier is cleared.  But we fail to properly
    clear rm->data.op_nents.
    
    Later when rds_message_purge() is called from rds_sendmsg() the
    cleanup loop iterates over the incorrectly non zero number of
    op_nents and frees them again.
    
    Fix this by properly resetting op_nents when it should be in
    rds_message_zcopy_from_user().
    
    Fixes: 0cebaccef3ac ("rds: zerocopy Tx support.")
    Signed-off-by: Allison Henderson <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net/rds: Restrict use of RDS/IB to the initial network namespace [+ + +]
Author: Greg Jumper <[email protected]>
Date:   Wed Apr 8 01:04:20 2026 -0700

    net/rds: Restrict use of RDS/IB to the initial network namespace
    
    [ Upstream commit ebf71dd4aff46e8e421d455db3e231ba43d2fa8a ]
    
    Prevent using RDS/IB in network namespaces other than the initial one.
    The existing RDS/IB code will not work properly in non-initial network
    namespaces.
    
    Fixes: d5a8ac28a7ff ("RDS-TCP: Make RDS-TCP work correctly when it is set up in a netns other than init_net")
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=da8e060735ae02c8f3d1
    Signed-off-by: Greg Jumper <[email protected]>
    Signed-off-by: Allison Henderson <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/rds: zero per-item info buffer before handing it to visitors [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Sat Apr 18 10:10:47 2026 -0400

    net/rds: zero per-item info buffer before handing it to visitors
    
    [ Upstream commit c88eb7e8d8397a8c1db59c425332c5a30b2a1682 ]
    
    rds_for_each_conn_info() and rds_walk_conn_path_info() both hand a
    caller-allocated on-stack u64 buffer to a per-connection visitor and
    then copy the full item_len bytes back to user space via
    rds_info_copy() regardless of how much of the buffer the visitor
    actually wrote.
    
    rds_ib_conn_info_visitor() and rds6_ib_conn_info_visitor() only
    write a subset of their output struct when the underlying
    rds_connection is not in state RDS_CONN_UP (src/dst addr, tos, sl
    and the two GIDs via explicit memsets). Several u32 fields
    (max_send_wr, max_recv_wr, max_send_sge, rdma_mr_max, rdma_mr_size,
    cache_allocs) and the 2-byte alignment hole between sl and
    cache_allocs remain as whatever stack contents preceded the visitor
    call and are then memcpy_to_user()'d out to user space.
    
    struct rds_info_rdma_connection and struct rds6_info_rdma_connection
    are the only rds_info_* structs in include/uapi/linux/rds.h that are
    not marked __attribute__((packed)), so they have a real alignment
    hole. The other info visitors (rds_conn_info_visitor,
    rds6_conn_info_visitor, rds_tcp_tc_info, ...) write all fields of
    their packed output struct today and are not known to be vulnerable,
    but a future visitor that adds a conditional write-path would have
    the same bug.
    
    Reproduction on a kernel built without CONFIG_INIT_STACK_ALL_ZERO=y:
    a local unprivileged user opens AF_RDS, sets SO_RDS_TRANSPORT=IB,
    binds to a local address on an RDMA-capable netdev (rxe soft-RoCE on
    any netdev is sufficient), sendto()'s any peer on the same subnet
    (fails cleanly but installs an rds_connection in the global hash in
    RDS_CONN_CONNECTING), then calls getsockopt(SOL_RDS,
    RDS_INFO_IB_CONNECTIONS). The returned 68-byte item contains 26
    bytes of stack garbage including kernel text/data pointers:
    
        0..7   0a 63 00 01 0a 63 00 02     src=10.99.0.1 dst=10.99.0.2
        8..39  00 ...                      gids (memset-zeroed)
        40..47 e0 92 a3 81 ff ff ff ff     kernel pointer (max_send_wr)
        48..55 7f 37 b5 81 ff ff ff ff     kernel pointer (rdma_mr_max)
        56..59 01 00 08 00                 rdma_mr_size (garbage)
        60..61 00 00                       tos, sl
        62..63 00 00                       alignment padding
        64..67 18 00 00 00                 cache_allocs (garbage)
    
    Fix by zeroing the per-item buffer in both rds_for_each_conn_info()
    and rds_walk_conn_path_info() before invoking the visitor. This
    covers the IPv4/IPv6 IB visitors and hardens all current and future
    visitors against the same class of bug.
    
    No functional change for visitors that fully populate their output.
    
    Changes in v2:
    - retarget at the net tree (subject prefix "[PATCH net v2]",
      net/rds: prefix in the title)
    - pick up Reviewed-by tags from Sharath Srinivasan and
      Allison Henderson
    
    Fixes: ec16227e1414 ("RDS/IB: Infiniband transport")
    Signed-off-by: Michael Bommarito <[email protected]>
    Reviewed-by: Sharath Srinivasan <[email protected]>
    Reviewed-by: Allison Henderson <[email protected]>
    Assisted-by: Claude:claude-opus-4-7
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/sched: act_ct: Only release RCU read lock after ct_ft [+ + +]
Author: Jamal Hadi Salim <[email protected]>
Date:   Fri Apr 10 07:16:27 2026 -0400

    net/sched: act_ct: Only release RCU read lock after ct_ft
    
    [ Upstream commit f462dca0c8415bf0058d0ffa476354c4476d0f09 ]
    
    When looking up a flow table in act_ct in tcf_ct_flow_table_get(),
    rhashtable_lookup_fast() internally opens and closes an RCU read critical
    section before returning ct_ft.
    The tcf_ct_flow_table_cleanup_work() can complete before refcount_inc_not_zero()
    is invoked on the returned ct_ft resulting in a UAF on the already freed ct_ft
    object. This vulnerability can lead to privilege escalation.
    
    Analysis from [email protected]:
    When initializing act_ct, tcf_ct_init() is called, which internally triggers
    tcf_ct_flow_table_get().
    
    static int tcf_ct_flow_table_get(struct net *net, struct tcf_ct_params *params)
    
    {
                    struct zones_ht_key key = { .net = net, .zone = params->zone };
                    struct tcf_ct_flow_table *ct_ft;
                    int err = -ENOMEM;
    
                    mutex_lock(&zones_mutex);
                    ct_ft = rhashtable_lookup_fast(&zones_ht, &key, zones_params); // [1]
                    if (ct_ft && refcount_inc_not_zero(&ct_ft->ref)) // [2]
                                    goto out_unlock;
                    ...
    }
    
    static __always_inline void *rhashtable_lookup_fast(
                    struct rhashtable *ht, const void *key,
                    const struct rhashtable_params params)
    {
                    void *obj;
    
                    rcu_read_lock();
                    obj = rhashtable_lookup(ht, key, params);
                    rcu_read_unlock();
    
                    return obj;
    }
    
    At [1], rhashtable_lookup_fast() looks up and returns the corresponding ct_ft
    from zones_ht . The lookup is performed within an RCU read critical section
    through rcu_read_lock() / rcu_read_unlock(), which prevents the object from
    being freed. However, at the point of function return, rcu_read_unlock() has
    already been called, and there is nothing preventing ct_ft from being freed
    before reaching refcount_inc_not_zero(&ct_ft->ref) at [2]. This interval becomes
    the race window, during which ct_ft can be freed.
    
    Free Process:
    
    tcf_ct_flow_table_put() is executed through the path tcf_ct_cleanup() call_rcu()
    tcf_ct_params_free_rcu() tcf_ct_params_free() tcf_ct_flow_table_put().
    
    static void tcf_ct_flow_table_put(struct tcf_ct_flow_table *ct_ft)
    {
                    if (refcount_dec_and_test(&ct_ft->ref)) {
                                    rhashtable_remove_fast(&zones_ht, &ct_ft->node, zones_params);
                                    INIT_RCU_WORK(&ct_ft->rwork, tcf_ct_flow_table_cleanup_work); // [3]
                                    queue_rcu_work(act_ct_wq, &ct_ft->rwork);
                    }
    }
    
    At [3], tcf_ct_flow_table_cleanup_work() is scheduled as RCU work
    
    static void tcf_ct_flow_table_cleanup_work(struct work_struct *work)
    
    {
                    struct tcf_ct_flow_table *ct_ft;
                    struct flow_block *block;
    
                    ct_ft = container_of(to_rcu_work(work), struct tcf_ct_flow_table,
                                                                    rwork);
                    nf_flow_table_free(&ct_ft->nf_ft);
                    block = &ct_ft->nf_ft.flow_block;
                    down_write(&ct_ft->nf_ft.flow_block_lock);
                    WARN_ON(!list_empty(&block->cb_list));
                    up_write(&ct_ft->nf_ft.flow_block_lock);
                    kfree(ct_ft); // [4]
    
                    module_put(THIS_MODULE);
    }
    
    tcf_ct_flow_table_cleanup_work() frees ct_ft at [4]. When this function executes
    between [1] and [2], UAF occurs.
    
    This race condition has a very short race window, making it generally
    difficult to trigger. Therefore, to trigger the vulnerability an msleep(100) was
    inserted after[1]
    
    Fixes: 138470a9b2cc2 ("net/sched: act_ct: fix lockdep splat in tcf_ct_flow_table_get")
    Reported-by: [email protected]
    Tested-by: Victor Nogueira <[email protected]>
    Signed-off-by: Jamal Hadi Salim <[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: cls_flower: revert unintended changes [+ + +]
Author: Paolo Abeni <[email protected]>
Date:   Wed Apr 29 09:39:11 2026 +0200

    net/sched: cls_flower: revert unintended changes
    
    [ Upstream commit 1e01abec856593e02cd69fd95b784c10dd46880c ]
    
    While applying the blamed commit 4ca07b9239bd ("net: mctp i2c: check
    length before marking flow active"), I unintentionally included
    unrelated and unacceptable changes.
    
    Revert them.
    
    Fixes: 4ca07b9239bd ("net: mctp i2c: check length before marking flow active")
    Reported-by: Jeremy Kerr <[email protected]>
    Closes: https://lore.kernel.org/netdev/bd8704fe0bd53e278add5cde4873256656623e2e.camel@codeconstruct.com.au/
    Signed-off-by: Paolo Abeni <[email protected]>
    Link: https://patch.msgid.link/043026a53ff84da88b17648c4b0d17f0331749cb.1777447863.git.pabeni@redhat.com
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: netem: check for negative latency and jitter [+ + +]
Author: Stephen Hemminger <[email protected]>
Date:   Fri Apr 17 20:19:44 2026 -0700

    net/sched: netem: check for negative latency and jitter
    
    [ Upstream commit 90be9fedb218ee95a1cf59050d1306fbfb0e8b87 ]
    
    Reject requests with negative latency or jitter.
    A negative value added to current timestamp (u64) wraps
    to an enormous time_to_send, disabling dequeue.
    The original UAPI used u32 for these values; the conversion to 64-bit
    time values via TCA_NETEM_LATENCY64 and TCA_NETEM_JITTER64
    allowed signed values to reach the kernel without validation.
    
    Jitter is already silently clamped by an abs() in netem_change();
    that abs() can be removed in a follow-up once this rejection is in
    place.
    
    Fixes: 99803171ef04 ("netem: add uapi to express delay and jitter in nanoseconds")
    Signed-off-by: Stephen Hemminger <[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: netem: fix probability gaps in 4-state loss model [+ + +]
Author: Stephen Hemminger <[email protected]>
Date:   Fri Apr 17 20:19:39 2026 -0700

    net/sched: netem: fix probability gaps in 4-state loss model
    
    [ Upstream commit 732b463449fd0ef90acd13cda68eab1c91adb00c ]
    
    The 4-state Markov chain in loss_4state() has gaps at the boundaries
    between transition probability ranges. The comparisons use:
    
      if (rnd < a4)
      else if (a4 < rnd && rnd < a1 + a4)
    
    When rnd equals a boundary value exactly, neither branch matches and
    no state transition occurs. The redundant lower-bound check (a4 < rnd)
    is already implied by being in the else branch.
    
    Remove the unnecessary lower-bound comparisons so the ranges are
    contiguous and every random value produces a transition, matching
    the GI (General and Intuitive) loss model specification.
    
    This bug goes back to original implementation of this model.
    
    Fixes: 661b79725fea ("netem: revised correlated loss generator")
    Signed-off-by: Stephen Hemminger <[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: netem: fix queue limit check to include reordered packets [+ + +]
Author: Stephen Hemminger <[email protected]>
Date:   Fri Apr 17 20:19:40 2026 -0700

    net/sched: netem: fix queue limit check to include reordered packets
    
    [ Upstream commit 4185701fcce6b426b6c3630b25330dddd9c47b0d ]
    
    The queue limit check in netem_enqueue() uses q->t_len which only
    counts packets in the internal tfifo. Packets placed in sch->q by
    the reorder path (__qdisc_enqueue_head) are not counted, allowing
    the total queue occupancy to exceed sch->limit under reordering.
    
    Include sch->q.qlen in the limit check.
    
    Fixes: f8d4bc455047 ("net/sched: netem: account for backlog updates from child qdisc")
    Signed-off-by: Stephen Hemminger <[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: netem: fix slot delay calculation overflow [+ + +]
Author: Stephen Hemminger <[email protected]>
Date:   Fri Apr 17 20:19:43 2026 -0700

    net/sched: netem: fix slot delay calculation overflow
    
    [ Upstream commit 51e94e1e2fef351c74d69eb53666df808d26af95 ]
    
    get_slot_next() computes a random delay between min_delay and
    max_delay using:
    
      get_random_u32() * (max_delay - min_delay) >> 32
    
    This overflows signed 64-bit arithmetic when the delay range exceeds
    approximately 2.1 seconds (2^31 nanoseconds), producing a negative
    result that effectively disables slot-based pacing. This is a
    realistic configuration for WAN emulation (e.g., slot 1s 5s).
    
    Use mul_u64_u32_shr() which handles the widening multiply without
    overflow.
    
    Fixes: 0a9fe5c375b5 ("netem: slotting with non-uniform distribution")
    Signed-off-by: Stephen Hemminger <[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: netem: only reseed PRNG when seed is explicitly provided [+ + +]
Author: Stephen Hemminger <[email protected]>
Date:   Fri Apr 17 20:19:41 2026 -0700

    net/sched: netem: only reseed PRNG when seed is explicitly provided
    
    [ Upstream commit 986afaf809940577224a99c3a08d97a15eb37e93 ]
    
    netem_change() unconditionally reseeds the PRNG on every tc change
    command. If TCA_NETEM_PRNG_SEED is not specified, a new random seed
    is generated, destroying reproducibility for users who set a
    deterministic seed on a previous change.
    
    Move the initial random seed generation to netem_init() and only
    reseed in netem_change() when TCA_NETEM_PRNG_SEED is explicitly
    provided by the user.
    
    Fixes: 4072d97ddc44 ("netem: add prng attribute to netem_sched_data")
    Signed-off-by: Stephen Hemminger <[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: netem: validate slot configuration [+ + +]
Author: Stephen Hemminger <[email protected]>
Date:   Fri Apr 17 20:19:42 2026 -0700

    net/sched: netem: validate slot configuration
    
    [ Upstream commit 01801c359a74737b9b1aa28568b60374d857241a ]
    
    Reject slot configurations that have no defensible meaning:
    
      - negative min_delay or max_delay
      - min_delay greater than max_delay
      - negative dist_delay or dist_jitter
      - negative max_packets or max_bytes
    
    Negative or out-of-order delays underflow in get_slot_next(),
    producing garbage intervals. Negative limits trip the per-slot
    accounting (packets_left/bytes_left <= 0) on the first packet of
    every slot, defeating the rate-limiting half of the slot feature.
    
    Note that dist_jitter has been silently coerced to its absolute
    value by get_slot() since the feature was introduced; rejecting
    negatives here converts that silent coercion into -EINVAL. The
    abs() can be removed in a follow-up.
    
    Fixes: 836af83b54e3 ("netem: support delivering packets in delayed time slots")
    Signed-off-by: Stephen Hemminger <[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: sch_cake: annotate data-races in cake_dump_stats() (V) [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Mon Apr 27 08:36:06 2026 +0000

    net/sched: sch_cake: annotate data-races in cake_dump_stats() (V)
    
    [ Upstream commit a6c95b833dc17e84d16a8ac0f40fd0931616a52d ]
    
    cake_dump_stats() runs without qdisc spinlock being held.
    
    In this final patch, I add READ_ONCE()/WRITE_ONCE() annotations
    for cparams.target and cparams.interval.
    
    Fixes: 046f6fd5daef ("sched: Add Common Applications Kept Enhanced (cake) qdisc")
    Signed-off-by: Eric Dumazet <[email protected]>
    Acked-by: "Toke Høiland-Jørgensen" <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: sch_cake: fix NAT destination port not being updated in cake_update_flowkeys [+ + +]
Author: Dudu Lu <[email protected]>
Date:   Mon Apr 13 19:00:41 2026 +0800

    net/sched: sch_cake: fix NAT destination port not being updated in cake_update_flowkeys
    
    [ Upstream commit f9e40664706927d7ae22a448a3383e23c38a4c0b ]
    
    cake_update_flowkeys() is supposed to update the flow dissector keys
    with the NAT-translated addresses and ports from conntrack, so that
    CAKE's per-flow fairness correctly identifies post-NAT flows as
    belonging to the same connection.
    
    For the source port, this works correctly:
        keys->ports.src = port;
    
    But for the destination port, the assignment is reversed:
        port = keys->ports.dst;
    
    This means the NAT destination port is never updated in the flow keys.
    As a result, when multiple connections are NATed to the same destination,
    CAKE treats them as separate flows because the original (pre-NAT)
    destination ports differ. This breaks CAKE's NAT-aware flow isolation
    when using the "nat" mode.
    
    The bug was introduced in commit b0c19ed6088a ("sch_cake: Take advantage
    of skb->hash where appropriate") which refactored the original direct
    assignment into a compare-and-conditionally-update pattern, but wrote
    the destination port update backwards.
    
    Fix by reversing the assignment direction to match the source port
    pattern.
    
    Fixes: b0c19ed6088a ("sch_cake: Take advantage of skb->hash where appropriate")
    Signed-off-by: Dudu Lu <[email protected]>
    Acked-by: Toke Høiland-Jørgensen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: sch_choke: annotate data-races in choke_dump_stats() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Apr 23 06:28:39 2026 +0000

    net/sched: sch_choke: annotate data-races in choke_dump_stats()
    
    [ Upstream commit d3aeb889dcbd78e95f500d383799a23d949796e0 ]
    
    choke_dump_stats() only runs with RTNL held.
    It reads fields that can be changed in qdisc fast path.
    Add READ_ONCE()/WRITE_ONCE() annotations.
    
    Fixes: edb09eb17ed8 ("net: sched: do not acquire qdisc spinlock in qdisc/class stats dump")
    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: Sasha Levin <[email protected]>

net/sched: sch_fq_codel: remove data-races from fq_codel_dump_stats() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Tue Apr 21 14:25:09 2026 +0000

    net/sched: sch_fq_codel: remove data-races from fq_codel_dump_stats()
    
    [ Upstream commit bbfaa73ea6871db03dc05d7f05f00557a8981f25 ]
    
    fq_codel_dump_stats() acquires the qdisc spinlock a bit too late.
    
    Move this acquisition before we fill st.qdisc_stats with live data.
    
    Fixes: edb09eb17ed8 ("net: sched: do not acquire qdisc spinlock in qdisc/class stats dump")
    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: Sasha Levin <[email protected]>

net/sched: sch_fq_pie: annotate data-races in fq_pie_dump_stats() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Apr 23 06:35:27 2026 +0000

    net/sched: sch_fq_pie: annotate data-races in fq_pie_dump_stats()
    
    [ Upstream commit 59b145771c7982cfe9020d4e9e22da92d6b5ae31 ]
    
    fq_codel_dump_stats() acquires the qdisc spinlock a bit too late.
    
    Move this acquisition before we fill tc_fq_pie_xstats with live data.
    
    Alternative would be to add READ_ONCE() and WRITE_ONCE() annotations,
    but the spinlock is needed anyway to scan q->new_flows and q->old_flows.
    
    Fixes: ec97ecf1ebe4 ("net: sched: add Flow Queue PIE packet scheduler")
    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: Sasha Levin <[email protected]>

net/sched: sch_pie: annotate data-races in pie_dump_stats() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Tue Apr 21 14:29:44 2026 +0000

    net/sched: sch_pie: annotate data-races in pie_dump_stats()
    
    [ Upstream commit 5154561d9b119f781249f8e845fecf059b38b483 ]
    
    pie_dump_stats() only runs with RTNL held,
    reading fields that can be changed in qdisc fast path.
    
    Add READ_ONCE()/WRITE_ONCE() annotations.
    
    Alternative would be to acquire the qdisc spinlock, but our long-term
    goal is to make qdisc dump operations lockless as much as we can.
    
    tc_pie_xstats fields don't need to be latched atomically,
    otherwise this bug would have been caught earlier.
    
    Fixes: edb09eb17ed8 ("net: sched: do not acquire qdisc spinlock in qdisc/class stats dump")
    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: Sasha Levin <[email protected]>

net/sched: sch_pie: annotate more data-races in pie_dump_stats() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Apr 30 08:00:56 2026 +0000

    net/sched: sch_pie: annotate more data-races in pie_dump_stats()
    
    [ Upstream commit 6d4106e8df94c0c52cf3ca6a6a0d01567fb3844e ]
    
    My prior patch missed few READ_ONCE()/WRITE_ONCE() annotations.
    
    Fixes: 5154561d9b11 ("net/sched: sch_pie: annotate data-races in pie_dump_stats()")
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: sch_red: annotate data-races in red_dump_stats() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Tue Apr 21 14:23:09 2026 +0000

    net/sched: sch_red: annotate data-races in red_dump_stats()
    
    [ Upstream commit a8f5192809caf636d05ba47c144f282cfd0e3839 ]
    
    red_dump_stats() only runs with RTNL held,
    reading fields that can be changed in qdisc fast path.
    
    Add READ_ONCE()/WRITE_ONCE() annotations.
    
    Alternative would be to acquire the qdisc spinlock, but our long-term
    goal is to make qdisc dump operations lockless as much as we can.
    
    tc_red_xstats fields don't need to be latched atomically,
    otherwise this bug would have been caught earlier.
    
    Fixes: edb09eb17ed8 ("net: sched: do not acquire qdisc spinlock in qdisc/class stats dump")
    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: Sasha Levin <[email protected]>

net/sched: sch_sfb: annotate data-races in sfb_dump_stats() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Tue Apr 21 14:16:55 2026 +0000

    net/sched: sch_sfb: annotate data-races in sfb_dump_stats()
    
    [ Upstream commit 1ada03fdef82d3d7d2edb9dcd3acc91917675e48 ]
    
    sfb_dump_stats() only runs with RTNL held,
    reading fields that can be changed in qdisc fast path.
    
    Add READ_ONCE()/WRITE_ONCE() annotations.
    
    Alternative would be to acquire the qdisc spinlock, but our long-term
    goal is to make qdisc dump operations lockless as much as we can.
    
    tc_sfb_xstats fields don't need to be latched atomically,
    otherwise this bug would have been caught earlier.
    
    Fixes: edb09eb17ed8 ("net: sched: do not acquire qdisc spinlock in qdisc/class stats dump")
    Signed-off-by: Eric Dumazet <[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: taprio: fix NULL pointer dereference in class dump [+ + +]
Author: Weiming Shi <[email protected]>
Date:   Thu Apr 23 00:19:58 2026 +0800

    net/sched: taprio: fix NULL pointer dereference in class dump
    
    [ Upstream commit 3d07ca5c0fae311226f737963984bd94bb159a87 ]
    
    When a TAPRIO child qdisc is deleted via RTM_DELQDISC, taprio_graft()
    is called with new == NULL and stores NULL into q->qdiscs[cl - 1].
    Subsequent RTM_GETTCLASS dump operations walk all classes via
    taprio_walk() and call taprio_dump_class(), which calls taprio_leaf()
    returning the NULL pointer, then dereferences it to read child->handle,
    causing a kernel NULL pointer dereference.
    
    The bug is reachable with namespace-scoped CAP_NET_ADMIN on any kernel
    with CONFIG_NET_SCH_TAPRIO enabled. On systems with unprivileged user
    namespaces enabled, an unprivileged local user can trigger a kernel
    panic by creating a taprio qdisc inside a new network namespace,
    grafting an explicit child qdisc, deleting it, and requesting a class
    dump. The RTM_GETTCLASS dump itself requires no capability.
    
     Oops: general protection fault, probably for non-canonical address 0xdffffc0000000007: 0000 [#1] SMP KASAN NOPTI
     KASAN: null-ptr-deref in range [0x0000000000000038-0x000000000000003f]
     RIP: 0010:taprio_dump_class (net/sched/sch_taprio.c:2478)
     Call Trace:
      <TASK>
      tc_fill_tclass (net/sched/sch_api.c:1966)
      qdisc_class_dump (net/sched/sch_api.c:2326)
      taprio_walk (net/sched/sch_taprio.c:2514)
      tc_dump_tclass_qdisc (net/sched/sch_api.c:2352)
      tc_dump_tclass_root (net/sched/sch_api.c:2370)
      tc_dump_tclass (net/sched/sch_api.c:2431)
      rtnl_dumpit (net/core/rtnetlink.c:6864)
      netlink_dump (net/netlink/af_netlink.c:2325)
      rtnetlink_rcv_msg (net/core/rtnetlink.c:6959)
      netlink_rcv_skb (net/netlink/af_netlink.c:2550)
      </TASK>
    
    Fix this by substituting &noop_qdisc when new is NULL in
    taprio_graft(), a common pattern used by other qdiscs (e.g.,
    multiq_graft()) to ensure the q->qdiscs[] slots are never NULL.
    This makes control-plane dump paths safe without requiring individual
    NULL checks.
    
    Since the data-plane paths (taprio_enqueue and taprio_dequeue_from_txq)
    previously had explicit NULL guards that would drop/skip the packet
    cleanly, update those checks to test for &noop_qdisc instead. Without
    this, packets would reach taprio_enqueue_one() which increments the root
    qdisc's qlen and backlog before calling the child's enqueue; noop_qdisc
    drops the packet but those counters are never rolled back, permanently
    inflating the root qdisc's statistics.
    
    After this change *old can be a valid qdisc, NULL, or &noop_qdisc.
    Only call qdisc_put(*old) in the first case to avoid decreasing
    noop_qdisc's refcount, which was never increased.
    
    Fixes: 665338b2a7a0 ("net/sched: taprio: dump class stats for the actual q->qdiscs[]")
    Reported-by: Xiang Mei <[email protected]>
    Signed-off-by: Weiming Shi <[email protected]>
    Acked-by: Jamal Hadi Salim <[email protected]>
    Tested-by: Weiming Shi <[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: taprio: fix use-after-free in advance_sched() on schedule switch [+ + +]
Author: Vinicius Costa Gomes <[email protected]>
Date:   Fri Apr 10 18:57:57 2026 -0700

    net/sched: taprio: fix use-after-free in advance_sched() on schedule switch
    
    [ Upstream commit 105425b1969c5affe532713cfac1c0b320d7ac2b ]
    
    In advance_sched(), when should_change_schedules() returns true,
    switch_schedules() is called to promote the admin schedule to oper.
    switch_schedules() queues the old oper schedule for RCU freeing via
    call_rcu(), but 'next' still points into an entry of the old oper
    schedule. The subsequent 'next->end_time = end_time' and
    rcu_assign_pointer(q->current_entry, next) are use-after-free.
    
    Fix this by selecting 'next' from the new oper schedule immediately
    after switch_schedules(), and using its pre-calculated end_time.
    setup_first_end_time() sets the first entry's end_time to
    base_time + interval when the schedule is installed, so the value
    is already correct.
    
    The deleted 'end_time = sched_base_time(admin)' assignment was also
    harmful independently: it would overwrite the new first entry's
    pre-calculated end_time with just base_time.
    
    Fixes: a3d43c0d56f1 ("taprio: Add support adding an admin schedule")
    Reported-by: Junxi Qian <[email protected]>
    Signed-off-by: Vinicius Costa Gomes <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net: atlantic: preserve PCI wake-from-D3 on shutdown when WOL enabled [+ + +]
Author: Zoran Ilievski <[email protected]>
Date:   Mon May 11 08:40:02 2026 +0200

    net: atlantic: preserve PCI wake-from-D3 on shutdown when WOL enabled
    
    commit 2c308cf34284420963607d677d576a2b4124d8bd upstream.
    
    The shutdown handler aq_pci_shutdown() unconditionally calls
    pci_wake_from_d3(pdev, false), clearing the PCI PME_En bit even when
    wake-on-LAN has been configured. While aq_nic_shutdown() correctly
    programs the NIC firmware via aq_nic_set_power() to listen for magic
    packets, the PCI subsystem will not propagate the resulting PME wake
    event from D3, so the system never wakes after poweroff.
    
    WOL from suspend (S3) is unaffected because aq_suspend_common() does
    not touch pci_wake_from_d3() and relies on the PM core's wake
    configuration via device_may_wakeup().
    
    This affects all atlantic-supported NICs (AQC107/108/111/112/113);
    users have reported that WOL works if the atlantic driver is never
    loaded, but breaks once it has run its shutdown path.
    
    Pass the configured WOL state to pci_wake_from_d3() instead of a
    literal false, so the PCI PME_En bit is preserved when the user has
    armed WOL via ethtool.
    
    Fixes: 90869ddfefeb ("net: aquantia: Implement pci shutdown callback")
    Cc: [email protected]
    Signed-off-by: Zoran Ilievski <[email protected]>
    Reviewed-by: Sukhdeep Singh <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: bcmgenet: add bcmgenet_has_* helpers [+ + +]
Author: Doug Berger <[email protected]>
Date:   Thu Mar 6 11:26:30 2025 -0800

    net: bcmgenet: add bcmgenet_has_* helpers
    
    [ Upstream commit 07c1a756a50b1180a085ab61819a388bbb906a95 ]
    
    Introduce helper functions to indicate whether the driver should
    make use of a particular feature that it supports. These helpers
    abstract the implementation of how the feature availability is
    encoded.
    
    Signed-off-by: Doug Berger <[email protected]>
    Reviewed-by: Florian Fainelli <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 5393b2b5bee2 ("net: bcmgenet: fix racing timeout handler")
    Signed-off-by: Sasha Levin <[email protected]>

net: bcmgenet: fix leaking free_bds [+ + +]
Author: Justin Chen <[email protected]>
Date:   Mon Apr 6 10:57:55 2026 -0700

    net: bcmgenet: fix leaking free_bds
    
    [ Upstream commit 3f3168300efb839028328d720ab3962f91d6a0d0 ]
    
    While reclaiming the tx queue we fast forward the write pointer to
    drop any data in flight. These dropped frames are not added back
    to the pool of free bds. We also need to tell the netdev that we
    are dropping said data.
    
    Fixes: f1bacae8b655 ("net: bcmgenet: support reclaiming unsent Tx packets")
    Signed-off-by: Justin Chen <[email protected]>
    Reviewed-by: Florian Fainelli <[email protected]>
    Reviewed-by: Nicolai Buchwitz <[email protected]>
    Tested-by: Nicolai Buchwitz <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: bcmgenet: fix off-by-one in bcmgenet_put_txcb [+ + +]
Author: Justin Chen <[email protected]>
Date:   Mon Apr 6 10:57:54 2026 -0700

    net: bcmgenet: fix off-by-one in bcmgenet_put_txcb
    
    [ Upstream commit 57f3f53d2c9c5a9e133596e2f7bc1c50688a6d38 ]
    
    The write_ptr points to the next open tx_cb. We want to return the
    tx_cb that gets rewinded, so we must rewind the pointer first then
    return the tx_cb that it points to. That way the txcb can be correctly
    cleaned up.
    
    Fixes: 876dbadd53a7 ("net: bcmgenet: Fix unmapping of fragments in bcmgenet_xmit()")
    Signed-off-by: Justin Chen <[email protected]>
    Reviewed-by: Nicolai Buchwitz <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: bcmgenet: fix racing timeout handler [+ + +]
Author: Justin Chen <[email protected]>
Date:   Mon Apr 6 10:57:56 2026 -0700

    net: bcmgenet: fix racing timeout handler
    
    [ Upstream commit 5393b2b5bee2ac51a0043dc7f4ac3475f053d08d ]
    
    The bcmgenet_timeout handler tries to take down all tx queues when
    a single queue times out. This is over zealous and causes many race
    conditions with queues that are still chugging along. Instead lets
    only restart the timed out queue.
    
    Fixes: 13ea657806cf ("net: bcmgenet: improve TX timeout")
    Signed-off-by: Justin Chen <[email protected]>
    Reviewed-by: Florian Fainelli <[email protected]>
    Reviewed-by: Nicolai Buchwitz <[email protected]>
    Tested-by: Nicolai Buchwitz <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: bcmgenet: Initialize u64 stats seq counter [+ + +]
Author: Ryo Takakura <[email protected]>
Date:   Wed Jul 2 18:24:17 2025 +0900

    net: bcmgenet: Initialize u64 stats seq counter
    
    [ Upstream commit ffc2c8c4a714df53a715827d6334ab9474424f6a ]
    
    Initialize u64 stats as it uses seq counter on 32bit machines
    as suggested by lockdep below.
    
    [    1.830953][    T1] INFO: trying to register non-static key.
    [    1.830993][    T1] The code is fine but needs lockdep annotation, or maybe
    [    1.831027][    T1] you didn't initialize this object before use?
    [    1.831057][    T1] turning off the locking correctness validator.
    [    1.831090][    T1] CPU: 1 UID: 0 PID: 1 Comm: swapper/0 Tainted: G        W           6.16.0-rc2-v7l+ #1 PREEMPT
    [    1.831097][    T1] Tainted: [W]=WARN
    [    1.831099][    T1] Hardware name: BCM2711
    [    1.831101][    T1] Call trace:
    [    1.831104][    T1]  unwind_backtrace from show_stack+0x18/0x1c
    [    1.831120][    T1]  show_stack from dump_stack_lvl+0x8c/0xcc
    [    1.831129][    T1]  dump_stack_lvl from register_lock_class+0x9e8/0x9fc
    [    1.831141][    T1]  register_lock_class from __lock_acquire+0x420/0x22c0
    [    1.831154][    T1]  __lock_acquire from lock_acquire+0x130/0x3f8
    [    1.831166][    T1]  lock_acquire from bcmgenet_get_stats64+0x4a4/0x4c8
    [    1.831176][    T1]  bcmgenet_get_stats64 from dev_get_stats+0x4c/0x408
    [    1.831184][    T1]  dev_get_stats from rtnl_fill_stats+0x38/0x120
    [    1.831193][    T1]  rtnl_fill_stats from rtnl_fill_ifinfo+0x7f8/0x1890
    [    1.831203][    T1]  rtnl_fill_ifinfo from rtmsg_ifinfo_build_skb+0xd0/0x138
    [    1.831214][    T1]  rtmsg_ifinfo_build_skb from rtmsg_ifinfo+0x48/0x8c
    [    1.831225][    T1]  rtmsg_ifinfo from register_netdevice+0x8c0/0x95c
    [    1.831237][    T1]  register_netdevice from register_netdev+0x28/0x40
    [    1.831247][    T1]  register_netdev from bcmgenet_probe+0x690/0x6bc
    [    1.831255][    T1]  bcmgenet_probe from platform_probe+0x64/0xbc
    [    1.831263][    T1]  platform_probe from really_probe+0xd0/0x2d4
    [    1.831269][    T1]  really_probe from __driver_probe_device+0x90/0x1a4
    [    1.831273][    T1]  __driver_probe_device from driver_probe_device+0x38/0x11c
    [    1.831278][    T1]  driver_probe_device from __driver_attach+0x9c/0x18c
    [    1.831282][    T1]  __driver_attach from bus_for_each_dev+0x84/0xd4
    [    1.831291][    T1]  bus_for_each_dev from bus_add_driver+0xd4/0x1f4
    [    1.831303][    T1]  bus_add_driver from driver_register+0x88/0x120
    [    1.831312][    T1]  driver_register from do_one_initcall+0x78/0x360
    [    1.831320][    T1]  do_one_initcall from kernel_init_freeable+0x2bc/0x314
    [    1.831331][    T1]  kernel_init_freeable from kernel_init+0x1c/0x144
    [    1.831339][    T1]  kernel_init from ret_from_fork+0x14/0x20
    [    1.831344][    T1] Exception stack(0xf082dfb0 to 0xf082dff8)
    [    1.831349][    T1] dfa0:                                     00000000 00000000 00000000 00000000
    [    1.831353][    T1] dfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    [    1.831356][    T1] dfe0: 00000000 00000000 00000000 00000000 00000013 00000000
    
    Fixes: 59aa6e3072aa ("net: bcmgenet: switch to use 64bit statistics")
    Reviewed-by: Florian Fainelli <[email protected]>
    Signed-off-by: Ryo Takakura <[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: bcmgenet: move DESC_INDEX flow to ring 0 [+ + +]
Author: Doug Berger <[email protected]>
Date:   Thu Mar 6 11:26:34 2025 -0800

    net: bcmgenet: move DESC_INDEX flow to ring 0
    
    [ Upstream commit 3b5d4f5a820d362dd46472542b2e961fb1f93515 ]
    
    The default transmit and receive packet handling is moved from
    the DESC_INDEX (i.e. 16) descriptor rings to the Ring 0 queues.
    This saves a fair amount of special case code by unifying the
    handling.
    
    A default dummy filter is enabled in the Hardware Filter Block
    to route default receive packets to Ring 0.
    
    Signed-off-by: Doug Berger <[email protected]>
    Reviewed-by: Florian Fainelli <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 5393b2b5bee2 ("net: bcmgenet: fix racing timeout handler")
    Signed-off-by: Sasha Levin <[email protected]>

net: bcmgenet: Remove custom ndo_poll_controller() [+ + +]
Author: Florian Fainelli <[email protected]>
Date:   Thu Oct 5 11:17:47 2023 -0700

    net: bcmgenet: Remove custom ndo_poll_controller()
    
    [ Upstream commit 19537e125cc7cf2da43a606f5bcebbe0c9aea4cc ]
    
    The driver gained a .ndo_poll_controller() at a time where the TX
    cleaning process was always done from NAPI which makes this unnecessary.
    See commit ac3d9dd034e5 ("netpoll: make ndo_poll_controller() optional")
    for more background.
    
    Signed-off-by: Florian Fainelli <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 5393b2b5bee2 ("net: bcmgenet: fix racing timeout handler")
    Signed-off-by: Sasha Levin <[email protected]>

net: bcmgenet: support reclaiming unsent Tx packets [+ + +]
Author: Doug Berger <[email protected]>
Date:   Thu Mar 6 11:26:39 2025 -0800

    net: bcmgenet: support reclaiming unsent Tx packets
    
    [ Upstream commit f1bacae8b655163dcbc3c54b9e714ef1a8986d7b ]
    
    When disabling the transmitter any outstanding packets can now
    be reclaimed by bcmgenet_tx_reclaim_all() rather than by the
    bcmgenet_fini_dma() function.
    
    Signed-off-by: Doug Berger <[email protected]>
    Reviewed-by: Florian Fainelli <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 5393b2b5bee2 ("net: bcmgenet: fix racing timeout handler")
    Signed-off-by: Sasha Levin <[email protected]>

net: bcmgenet: switch to use 64bit statistics [+ + +]
Author: Zak Kemble <[email protected]>
Date:   Mon May 19 12:32:55 2025 +0100

    net: bcmgenet: switch to use 64bit statistics
    
    [ Upstream commit 59aa6e3072aa7e51e9040e8c342d0c0825c5f48f ]
    
    Update the driver to use ndo_get_stats64, rtnl_link_stats64 and
    u64_stats_t counters for statistics.
    
    Signed-off-by: Zak Kemble <[email protected]>
    Tested-by: Florian Fainelli <[email protected]>
    Reviewed-by: Florian Fainelli <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 5393b2b5bee2 ("net: bcmgenet: fix racing timeout handler")
    Signed-off-by: Sasha Levin <[email protected]>

net: bonding: add broadcast_neighbor option for 802.3ad [+ + +]
Author: Tonghao Zhang <[email protected]>
Date:   Fri Jun 27 21:49:28 2025 +0800

    net: bonding: add broadcast_neighbor option for 802.3ad
    
    [ Upstream commit ce7a381697cb3958ffe0b45e5028ac69444e9288 ]
    
    Stacking technology is a type of technology used to expand ports on
    Ethernet switches. It is widely used as a common access method in
    large-scale Internet data center architectures. Years of practice
    have proved that stacking technology has advantages and disadvantages
    in high-reliability network architecture scenarios. For instance,
    in stacking networking arch, conventional switch system upgrades
    require multiple stacked devices to restart at the same time.
    Therefore, it is inevitable that the business will be interrupted
    for a while. It is for this reason that "no-stacking" in data centers
    has become a trend. Additionally, when the stacking link connecting
    the switches fails or is abnormal, the stack will split. Although it is
    not common, it still happens in actual operation. The problem is that
    after the split, it is equivalent to two switches with the same
    configuration appearing in the network, causing network configuration
    conflicts and ultimately interrupting the services carried by the
    stacking system.
    
    To improve network stability, "non-stacking" solutions have been
    increasingly adopted, particularly by public cloud providers and
    tech companies like Alibaba, Tencent, and Didi. "non-stacking" is
    a method of mimicing switch stacking that convinces a LACP peer,
    bonding in this case, connected to a set of "non-stacked" switches
    that all of its ports are connected to a single switch
    (i.e., LACP aggregator), as if those switches were stacked. This
    enables the LACP peer's ports to aggregate together, and requires
    (a) special switch configuration, described in the linked article,
    and (b) modifications to the bonding 802.3ad (LACP) mode to send
    all ARP/ND packets across all ports of the active aggregator.
    
    Note that, with multiple aggregators, the current broadcast mode
    logic will send only packets to the selected aggregator(s).
    
     +-----------+   +-----------+
     |  switch1  |   |  switch2  |
     +-----------+   +-----------+
             ^           ^
             |           |
          +-----------------+
          |   bond4 lacp    |
          +-----------------+
             |           |
             | NIC1      | NIC2
          +-----------------+
          |     server      |
          +-----------------+
    
    - https://www.ruijie.com/fr-fr/support/tech-gallery/de-stack-data-center-network-architecture/
    
    Cc: Jay Vosburgh <[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]>
    Cc: Jonathan Corbet <[email protected]>
    Cc: Andrew Lunn <[email protected]>
    Cc: Steven Rostedt <[email protected]>
    Cc: Masami Hiramatsu <[email protected]>
    Cc: Mathieu Desnoyers <[email protected]>
    Cc: Nikolay Aleksandrov <[email protected]>
    Signed-off-by: Tonghao Zhang <[email protected]>
    Signed-off-by: Zengbing Tu <[email protected]>
    Link: https://patch.msgid.link/84d0a044514157bb856a10b6d03a1028c4883561.1751031306.git.tonghao@bamaicloud.com
    Signed-off-by: Paolo Abeni <[email protected]>
    Stable-dep-of: c4f050ce06c5 ("bonding: 3ad: implement proper RCU rules for port->aggregator")
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: realtek: rtl8365mb: fix mode mask calculation [+ + +]
Author: Mieczyslaw Nalewaj <[email protected]>
Date:   Sun Apr 19 21:37:07 2026 +0200

    net: dsa: realtek: rtl8365mb: fix mode mask calculation
    
    [ Upstream commit 0c078021d3861966614d5e594ee03587f0c9e74d ]
    
    The RTL8365MB_DIGITAL_INTERFACE_SELECT_MODE_MASK macro was shifting
    the 4-bit mask (0xF) by only (_extint % 2) bits instead of
    (_extint % 2) * 4. This caused the mask to overlap with the adjacent
    nibble when configuring odd-numbered external interfaces, selecting
    the wrong bits entirely.
    
    Align the shift calculation with the existing ...MODE_OFFSET macro.
    
    Fixes: 4af2950c50c8 ("net: dsa: realtek-smi: add rtl8365mb subdriver for RTL8365MB-VC")
    Signed-off-by: Abdulkader Alrezej <[email protected]>
    Signed-off-by: Mieczyslaw Nalewaj <[email protected]>
    Reviewed-by: Luiz Angelo Daros de Luca <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: hamradio: 6pack: fix uninit-value in sixpack_receive_buf [+ + +]
Author: Mashiro Chen <[email protected]>
Date:   Wed Apr 8 01:31:01 2026 +0800

    net: hamradio: 6pack: fix uninit-value in sixpack_receive_buf
    
    [ Upstream commit bf9a38803b2626b01cc769aaf13485d8650f576f ]
    
    sixpack_receive_buf() does not properly skip bytes with TTY error flags.
    The while loop iterates through the flags buffer but never advances the
    data pointer (cp), and passes the original count (including error bytes)
    to sixpack_decode(). This causes sixpack_decode() to process bytes that
    should have been skipped due to TTY errors.  The TTY layer does not
    guarantee that cp[i] holds a meaningful value when fp[i] is set, so
    passing those positions to sixpack_decode() results in KMSAN reporting
    an uninit-value read.
    
    Fix this by processing bytes one at a time, advancing cp on each
    iteration, and only passing valid (non-error) bytes to sixpack_decode().
    This matches the pattern used by slip_receive_buf() and
    mkiss_receive_buf() for the same purpose.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=ecdb8c9878a81eb21e54
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Mashiro Chen <[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: ipa: Fix decoding EV_PER_EE for IPA v5.0+ [+ + +]
Author: Luca Weiss <[email protected]>
Date:   Thu Apr 9 10:13:32 2026 +0200

    net: ipa: Fix decoding EV_PER_EE for IPA v5.0+
    
    [ Upstream commit 1335b903cf2e8aeaca87fd665683384c731ec941 ]
    
    Initially 'reg' and 'val' are assigned from HW_PARAM_2.
    
    But since IPA v5.0+ takes EV_PER_EE from HW_PARAM_4 (instead of
    NUM_EV_PER_EE from HW_PARAM_2), we not only need to re-assign 'reg' but
    also read the register value of that register into 'val' so that
    reg_decode() works on the correct value.
    
    Fixes: f651334e1ef5 ("net: ipa: add HW_PARAM_4 GSI register")
    Link: https://sashiko.dev/#/patchset/20260403-milos-ipa-v1-0-01e9e4e03d3e%40fairphone.com?part=2
    Signed-off-by: Luca Weiss <[email protected]>
    Reviewed-by: Konrad Dybcio <[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 programming of QTIME_TIMESTAMP_CFG [+ + +]
Author: Luca Weiss <[email protected]>
Date:   Thu Apr 9 10:13:31 2026 +0200

    net: ipa: Fix programming of QTIME_TIMESTAMP_CFG
    
    [ Upstream commit de08f9585692813bd41ee654fca0487664c4de30 ]
    
    The 'val' variable gets overwritten multiple times, discarding previous
    values. Looking at the git log shows these should be combined with |=
    instead.
    
    Fixes: 9265a4f0f0b4 ("net: ipa: define even more IPA register fields")
    Link: https://sashiko.dev/#/patchset/20260403-milos-ipa-v1-0-01e9e4e03d3e%40fairphone.com?part=4
    Signed-off-by: Luca Weiss <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: mctp i2c: check length before marking flow active [+ + +]
Author: William A. Kennington III <[email protected]>
Date:   Thu Apr 23 00:46:52 2026 -0700

    net: mctp i2c: check length before marking flow active
    
    [ Upstream commit 4ca07b9239bd0478ae586632a2ed72be37ed8407 ]
    
    Currently, mctp_i2c_get_tx_flow_state() is called before the packet length
    sanity check. This function marks a new flow as active in the MCTP core.
    
    If the sanity check fails, mctp_i2c_xmit() returns early without calling
    mctp_i2c_lock_nest(). This results in a mismatched locking state: the
    flow is active, but the I2C bus lock was never acquired for it.
    
    When the flow is later released, mctp_i2c_release_flow() will see the
    active state and queue an unlock marker. The TX thread will then
    decrement midev->i2c_lock_count from 0, causing it to underflow to -1.
    
    This underflow permanently breaks the driver's locking logic, allowing
    future transmissions to occur without holding the I2C bus lock, leading
    to bus collisions and potential hardware hangs.
    
    Move the mctp_i2c_get_tx_flow_state() call to after the length sanity
    check to ensure we only transition the flow state if we are actually
    going to proceed with the transmission and locking.
    
    Fixes: f5b8abf9fc3d ("mctp i2c: MCTP I2C binding driver")
    Signed-off-by: William A. Kennington III <[email protected]>
    Acked-by: Jeremy Kerr <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: netconsole: move newline trimming to function [+ + +]
Author: Matthew Wood <[email protected]>
Date:   Sun Feb 4 15:27:34 2024 -0800

    net: netconsole: move newline trimming to function
    
    [ Upstream commit ae001dc67907618423fd15bbab2014308c00ad0b ]
    
    Move newline trimming logic from `dev_name_store()` to a new function
    (trim_newline()) for shared use in netconsole.c
    
    Signed-off-by: Matthew Wood <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 92ceb7bff62c ("netconsole: propagate device name truncation in dev_name_store()")
    Signed-off-by: Sasha Levin <[email protected]>

net: phy: add Rust Asix PHY driver [+ + +]
Author: FUJITA Tomonori <[email protected]>
Date:   Wed Dec 13 09:42:11 2023 +0900

    net: phy: add Rust Asix PHY driver
    
    [ Upstream commit cbe0e415089636170aa6eb540ca4af5dc9842a60 ]
    
    This is the Rust implementation of drivers/net/phy/ax88796b.c. The
    features are equivalent. You can choose C or Rust version kernel
    configuration.
    
    Signed-off-by: FUJITA Tomonori <[email protected]>
    Reviewed-by: Trevor Gross <[email protected]>
    Reviewed-by: Benno Lossin <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Reviewed-by: Alice Ryhl <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: e7a62edd34b1 ("net: phy: qcom: at803x: Use the correct bit to disable extended next page")
    Signed-off-by: Sasha Levin <[email protected]>

net: phy: aquantia: move to separate directory [+ + +]
Author: Christian Marangi <[email protected]>
Date:   Tue Nov 14 15:08:41 2023 +0100

    net: phy: aquantia: move to separate directory
    
    [ Upstream commit d2213db3f49bce8e7a87c8de05b9a091f78f654e ]
    
    Move aquantia PHY driver to separate driectory in preparation for
    firmware loading support to keep things tidy.
    
    Signed-off-by: Christian Marangi <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: e7a62edd34b1 ("net: phy: qcom: at803x: Use the correct bit to disable extended next page")
    Signed-off-by: Sasha Levin <[email protected]>

net: phy: dp83869: fix setting CLK_O_SEL field. [+ + +]
Author: Heiko Schocher <[email protected]>
Date:   Sat Apr 25 05:13:39 2026 +0200

    net: phy: dp83869: fix setting CLK_O_SEL field.
    
    [ Upstream commit 46f74a3f7d57d9cc0110b09cbc8163fa0a01afa2 ]
    
    Table 7-121 in datasheet says we have to set register 0xc6
    to value 0x10 before CLK_O_SEL can be modified. No more infos
    about this field found in datasheet. With this fix, setting
    of CLK_O_SEL field in IO_MUX_CFG register worked through dts
    property "ti,clk-output-sel" on a DP83869HMRGZR.
    
    Signed-off-by: Heiko Schocher <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Fixes: 01db923e8377 ("net: phy: dp83869: Add TI dp83869 phy")
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: phy: move at803x PHY driver to dedicated directory [+ + +]
Author: Christian Marangi <[email protected]>
Date:   Mon Jan 29 15:15:19 2024 +0100

    net: phy: move at803x PHY driver to dedicated directory
    
    [ Upstream commit 9e56ff53b4115875667760445b028357848b4748 ]
    
    In preparation for addition of other Qcom PHY and to tidy things up,
    move the at803x PHY driver to dedicated directory.
    
    The same order in the Kconfig selection is saved.
    
    Signed-off-by: Christian Marangi <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: e7a62edd34b1 ("net: phy: qcom: at803x: Use the correct bit to disable extended next page")
    Signed-off-by: Sasha Levin <[email protected]>

net: phy: qcom: at803x: Use the correct bit to disable extended next page [+ + +]
Author: Maxime Chevallier <[email protected]>
Date:   Fri Apr 10 19:10:20 2026 +0200

    net: phy: qcom: at803x: Use the correct bit to disable extended next page
    
    [ Upstream commit e7a62edd34b1b4bc5f979988efc2f81c075733fd ]
    
    As noted in the blamed commit, the AR8035 and other PHYs from this
    family advertise the Extended Next Page support by default, which may be
    understood by some partners as this PHY being multi-gig capable.
    
    The fix is to disable XNP advertising, which is done by setting bit 12
    of the Auto-Negotiation Advertisement Register (MII_ADVERTISE).
    
    The blamed commit incorrectly uses MDIO_AN_CTRL1_XNP, which is bit 13 as per
    802.3 : 45.2.7.1 AN control register (Register 7.0)
    
    BIT 12 in MII_ADVERTISE is wrapped by ADVERTISE_RESV, used by some
    drivers such as the aquantia one. 802.3 Clause 28 defines bit 12 as
    Extended Next Page ability, at least in recent versions of the standard.
    
    Let's add a define for it and use it in the at803x driver.
    
    Fixes: 3c51fa5d2afe ("net: phy: ar803x: disable extended next page bit")
    Signed-off-by: Maxime Chevallier <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: skbuff: preserve shared-frag marker during coalescing [+ + +]
Author: William Bowling <[email protected]>
Date:   Wed May 13 04:16:35 2026 +0000

    net: skbuff: preserve shared-frag marker during coalescing
    
    commit f84eca5817390257cef78013d0112481c503b4a3 upstream.
    
    skb_try_coalesce() can attach paged frags from @from to @to.  If @from
    has SKBFL_SHARED_FRAG set, the resulting @to skb can contain the same
    externally-owned or page-cache-backed frags, but the shared-frag marker
    is currently lost.
    
    That breaks the invariant relied on by later in-place writers.  In
    particular, ESP input checks skb_has_shared_frag() before deciding
    whether an uncloned nonlinear skb can skip skb_cow_data().  If TCP
    receive coalescing has moved shared frags into an unmarked skb, ESP can
    see skb_has_shared_frag() as false and decrypt in place over page-cache
    backed frags.
    
    Propagate SKBFL_SHARED_FRAG when skb_try_coalesce() transfers paged
    frags.  The tailroom copy path does not need the marker because it copies
    bytes into @to's linear data rather than transferring frag descriptors.
    
    Fixes: cef401de7be8 ("net: fix possible wrong checksum generation")
    Fixes: f4c50a4034e6 ("xfrm: esp: avoid in-place decrypt on shared skb frags")
    Signed-off-by: William Bowling <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Tested-by: Jiayuan Chen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: skbuff: propagate shared-frag marker through frag-transfer helpers [+ + +]
Author: Hyunwoo Kim <[email protected]>
Date:   Sat May 16 07:28:53 2026 +0900

    net: skbuff: propagate shared-frag marker through frag-transfer helpers
    
    commit 48f6a5356a33dd78e7144ae1faef95ffc990aae0 upstream.
    
    Two frag-transfer helpers (__pskb_copy_fclone() and skb_shift()) fail
    to propagate the SKBFL_SHARED_FRAG bit in skb_shinfo()->flags when
    moving frags from source to destination.  __pskb_copy_fclone() defers
    the rest of the shinfo metadata to skb_copy_header() after copying
    frag descriptors, but that helper only carries over gso_{size,segs,
    type} and never touches skb_shinfo()->flags; skb_shift() moves frag
    descriptors directly and leaves flags untouched.  As a result, the
    destination skb keeps a reference to the same externally-owned or
    page-cache-backed pages while reporting skb_has_shared_frag() as
    false.
    
    The mismatch is harmful in any in-place writer that uses
    skb_has_shared_frag() to decide whether shared pages must be detoured
    through skb_cow_data().  ESP input is one such writer (esp4.c,
    esp6.c), and a single nft 'dup to <local>' rule -- or any other
    nf_dup_ipv4() / xt_TEE caller -- is enough to land a pskb_copy()'d
    skb in esp_input() with the marker stripped, letting an unprivileged
    user write into the page cache of a root-owned read-only file via
    authencesn-ESN stray writes.
    
    Set SKBFL_SHARED_FRAG on the destination whenever frag descriptors
    were actually moved from the source.  skb_copy() and skb_copy_expand()
    share skb_copy_header() too but linearize all paged data into freshly
    allocated head storage and emerge with nr_frags == 0, so
    skb_has_shared_frag() returns false on its own; they need no change.
    
    The same omission exists in skb_gro_receive() and skb_gro_receive_list().
    The former moves the incoming skb's frag descriptors into the
    accumulator's last sub-skb via two paths (a direct frag-move loop and
    the head_frag + memcpy path); the latter chains the incoming skb whole
    onto p's frag_list.  Downstream skb_segment() reads only
    skb_shinfo(p)->flags, and skb_segment_list() reuses each sub-skb's
    shinfo as the nskb -- both p and lp must carry the marker.
    
    The same omission also exists in tcp_clone_payload(), which builds an
    MTU probe skb by moving frag descriptors from skbs on sk_write_queue
    into a freshly allocated nskb.  The helper falls into the same family
    and warrants the same fix for consistency; no TCP TX-side in-place
    writer is currently known to reach a user page through this gap, but
    a future consumer depending on the marker would regress silently.
    
    The same omission exists in skb_segment(): the per-iteration flag
    merge takes only head_skb's flag, and the inner switch that rebinds
    frag_skb to list_skb on head_skb-frags exhaustion does not fold the
    new frag_skb's flag into nskb.  Fold frag_skb's flag at both sites
    so segments drawing frags from frag_list members carry the marker.
    
    Fixes: cef401de7be8 ("net: fix possible wrong checksum generation")
    Fixes: f4c50a4034e6 ("xfrm: esp: avoid in-place decrypt on shared skb frags")
    Suggested-by: Sabrina Dubroca <[email protected]>
    Suggested-by: Sultan Alsawaf <[email protected]>
    Suggested-by: Ben Hutchings <[email protected]>
    Suggested-by: Lin Ma <[email protected]>
    Suggested-by: Jingguo Tan <[email protected]>
    Suggested-by: Aaron Esau <[email protected]>
    Cc: [email protected]
    Signed-off-by: Hyunwoo Kim <[email protected]>
    Tested-by: Rajat Gupta <[email protected]>
    Link: https://patch.msgid.link/ageeJfJHwgzmKXbh@v4bel
    Signed-off-by: Paolo Abeni <[email protected]>
    [bwh: Backported to 6.6: skb_gro_receive_list() is in
     net/ipv4/udp_offload.c here]
    Signed-off-by: Ben Hutchings <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: tls: fix strparser anchor skb leak on offload RX setup failure [+ + +]
Author: Jakub Kicinski <[email protected]>
Date:   Tue Apr 28 16:15:59 2026 -0700

    net: tls: fix strparser anchor skb leak on offload RX setup failure
    
    [ Upstream commit 58689498ca3384851145a754dbb1d8ed1cf9fb54 ]
    
    When tls_set_device_offload_rx() fails at tls_dev_add(), the error path
    calls tls_sw_free_resources_rx() to clean up the SW context that was
    initialized by tls_set_sw_offload(). This function calls
    tls_sw_release_resources_rx() (which stops the strparser via
    tls_strp_stop()) and tls_sw_free_ctx_rx() (which kfrees the context),
    but never frees the anchor skb that was allocated by alloc_skb(0) in
    tls_strp_init().
    
    Note that tls_sw_free_resources_rx() is exclusively used for this
    "failed to start offload" code path, there's no other caller.
    
    The leak did not exist before commit 84c61fe1a75b ("tls: rx: do not use
    the standard strparser"), because the standard strparser doesn't try
    to pre-allocate an skb.
    
    The normal close path in tls_sk_proto_close() handles cleanup by calling
    tls_sw_strparser_done() (which calls tls_strp_done()) after dropping
    the socket lock, because tls_strp_done() does cancel_work_sync() and
    the strparser work handler takes the socket lock.
    
    Fixes: 84c61fe1a75b ("tls: rx: do not use the standard strparser")
    Signed-off-by: Jakub Kicinski <[email protected]>
    Reviewed-by: Vadim Fedorenko <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: usb: rtl8150: fix use-after-free in rtl8150_start_xmit() [+ + +]
Author: Zhan Jun <[email protected]>
Date:   Thu Apr 23 08:49:12 2026 +0800

    net: usb: rtl8150: fix use-after-free in rtl8150_start_xmit()
    
    [ Upstream commit 23f0e34c64acba15cad4d23e50f41f533da195fa ]
    
    syzbot reported a KASAN slab-use-after-free read in rtl8150_start_xmit()
    when accessing skb->len for tx statistics after usb_submit_urb() has
    been called:
    
      BUG: KASAN: slab-use-after-free in rtl8150_start_xmit+0x71f/0x760
        drivers/net/usb/rtl8150.c:712
      Read of size 4 at addr ffff88810eb7a930 by task kworker/0:4/5226
    
    The URB completion handler write_bulk_callback() frees the skb via
    dev_kfree_skb_irq(dev->tx_skb). The URB may complete on another CPU
    in softirq context before usb_submit_urb() returns in the submitter,
    so by the time the submitter reads skb->len the skb has already been
    queued to the per-CPU completion_queue and freed by net_tx_action():
    
      CPU A (xmit)                      CPU B (USB completion softirq)
      ------------                      ------------------------------
      dev->tx_skb = skb;
      usb_submit_urb()      --+
                              |-------> write_bulk_callback()
                              |           dev_kfree_skb_irq(dev->tx_skb)
                              |         net_tx_action()
                              |           napi_skb_cache_put()   <-- free
      netdev->stats.tx_bytes  |
        += skb->len;          <-- UAF read
    
    Fix it by caching skb->len before submitting the URB and using the
    cached value when updating the tx_bytes counter.
    
    The pre-existing tx_bytes semantics are preserved: the counter tracks
    the original frame length (skb->len), not the ETH_ZLEN/USB-alignment
    padded "count" value that is handed to the device.  Changing that
    would be a user-visible accounting change and is out of scope for
    this UAF fix.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/all/[email protected]/
    Closes: https://syzkaller.appspot.com/bug?extid=3f46c095ac0ca048cb71
    Reviewed-by: Andrew Lunn <[email protected]>
    Signed-off-by: Zhan Jun <[email protected]>
    Link: https://patch.msgid.link/809895186B866C10+20260423004913.136655-1-zhangdandan@uniontech.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: usb: rtl8150: free skb on usb_submit_urb() failure in xmit [+ + +]
Author: Morduan Zang <[email protected]>
Date:   Fri Apr 24 09:55:17 2026 +0800

    net: usb: rtl8150: free skb on usb_submit_urb() failure in xmit
    
    [ Upstream commit adbe2cdf75461891e50dbe11896ac78e9af1f874 ]
    
    When rtl8150_start_xmit() fails to submit the tx URB, the URB is never
    handed to the USB core and write_bulk_callback() will not run.  The
    driver returns NETDEV_TX_OK, which tells the networking stack that the
    skb has been consumed, but nothing actually frees the skb on this
    error path:
    
      dev->tx_skb = skb;
      ...
      if ((res = usb_submit_urb(dev->tx_urb, GFP_ATOMIC))) {
              ...
              /* no kfree_skb here */
      }
      return NETDEV_TX_OK;
    
    This leaks the skb on every submit failure and also leaves dev->tx_skb
    pointing at memory that the driver itself may later free, which is
    fragile.
    
    Free the skb with dev_kfree_skb_any() in the error path and clear
    dev->tx_skb so no stale pointer is left behind.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reviewed-by: Andrew Lunn <[email protected]>
    Signed-off-by: Morduan Zang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net_sched: sch_hhf: annotate data-races in hhf_dump_stats() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Tue Apr 21 14:33:49 2026 +0000

    net_sched: sch_hhf: annotate data-races in hhf_dump_stats()
    
    [ Upstream commit a6edf2cd4156b71e07258876b7626692e158f7e8 ]
    
    hhf_dump_stats() only runs with RTNL held,
    reading fields that can be changed in qdisc fast path.
    
    Add READ_ONCE()/WRITE_ONCE() annotations.
    
    Fixes: edb09eb17ed8 ("net: sched: do not acquire qdisc spinlock in qdisc/class stats dump")
    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: Sasha Levin <[email protected]>

 
netconsole: avoid out-of-bounds access on empty string in trim_newline() [+ + +]
Author: Breno Leitao <[email protected]>
Date:   Mon Apr 20 03:18:36 2026 -0700

    netconsole: avoid out-of-bounds access on empty string in trim_newline()
    
    [ Upstream commit 7079c8c13f2d33992bc846240517d88f4ab07781 ]
    
    trim_newline() unconditionally dereferences s[len - 1] after computing
    len = strnlen(s, maxlen). When the string is empty, len is 0 and the
    expression underflows to s[(size_t)-1], reading (and potentially
    writing) one byte before the buffer.
    
    The two callers feed trim_newline() with the result of strscpy() from
    configfs store callbacks (dev_name_store, userdatum_value_store).
    configfs guarantees count >= 1 reaches the callback, but the byte
    itself can be NUL: a userspace write(fd, "\0", 1) leaves the
    destination empty after strscpy() and triggers the underflow. The OOB
    write only fires if the adjacent byte happens to be '\n', so this is
    not a security issue, but the access is undefined behaviour either way.
    
    This pattern is commonly flagged by LLM-based code reviewers. While it
    is not a security fix, the underlying access is undefined behaviour and
    the change is small and self-contained, so it is a reasonable candidate
    for the stable trees.
    
    Guard the dereference on a non-zero length.
    
    Fixes: ae001dc67907 ("net: netconsole: move newline trimming to function")
    Cc: [email protected]
    Signed-off-by: Breno Leitao <[email protected]>
    Reviewed-by: Gustavo Luiz Duarte <[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]>

netconsole: propagate device name truncation in dev_name_store() [+ + +]
Author: Breno Leitao <[email protected]>
Date:   Mon Apr 27 07:30:37 2026 -0700

    netconsole: propagate device name truncation in dev_name_store()
    
    [ Upstream commit 92ceb7bff62c2606f664c204750eca0b85d44112 ]
    
    dev_name_store() calls strscpy(nt->np.dev_name, buf, IFNAMSIZ) without
    checking the return value. If userspace writes an interface name longer
    than IFNAMSIZ - 1, strscpy() silently truncates and returns -E2BIG, but
    the function ignores it and reports a fully successful write back to
    userspace.
    
    If a real interface happens to match the truncated name, netconsole will
    bind to the wrong device on the next enable, sending kernel logs and
    panic output to an unintended network segment with no indication to
    userspace that anything was rewritten.
    
    Reject writes whose length cannot fit in nt->np.dev_name up front:
    
            if (count >= IFNAMSIZ)
                    return -ENAMETOOLONG;
    
    This is not a big deal of a problem, but, it is still the correct
    approach.
    
    Fixes: 0bcc1816188e57 ("[NET] netconsole: Support dynamic reconfiguration using configfs")
    Signed-off-by: Breno Leitao <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
netdevsim: zero initialize struct iphdr in dummy sk_buff [+ + +]
Author: Nikola Z. Ivanov <[email protected]>
Date:   Sun Apr 26 23:14:34 2026 +0300

    netdevsim: zero initialize struct iphdr in dummy sk_buff
    
    [ Upstream commit 35eaa6d8d6c2ee65e96f507add856e0eacf24591 ]
    
    Syzbot reports a KMSAN uninit-value originating from
    nsim_dev_trap_skb_build, with the allocation also
    being performed in the same function.
    
    Fix this by calling skb_put_zero instead of skb_put to
    guarantee zero initialization of the whole IP header.
    
    Closes: https://syzkaller.appspot.com/bug?extid=23d7fcd204e3837866ff
    Fixes: da58f90f11f5 ("netdevsim: Add devlink-trap support")
    Signed-off-by: Nikola Z. Ivanov <[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: Sasha Levin <[email protected]>

 
netfilter: arp_tables: fix IEEE1394 ARP payload parsing [+ + +]
Author: Pablo Neira Ayuso <[email protected]>
Date:   Mon Apr 20 23:15:32 2026 +0200

    netfilter: arp_tables: fix IEEE1394 ARP payload parsing
    
    [ Upstream commit 1e8e3f449b1e73b73a843257635b9c50f0cc0f0a ]
    
    Weiming Shi says:
    
    "arp_packet_match() unconditionally parses the ARP payload assuming two
    hardware addresses are present (source and target). However,
    IPv4-over-IEEE1394 ARP (RFC 2734) omits the target hardware address
    field, and arp_hdr_len() already accounts for this by returning a
    shorter length for ARPHRD_IEEE1394 devices.
    
    As a result, on IEEE1394 interfaces arp_packet_match() advances past a
    nonexistent target hardware address and reads the wrong bytes for both
    the target device address comparison and the target IP address. This
    causes arptables rules to match against garbage data, leading to
    incorrect filtering decisions: packets that should be accepted may be
    dropped and vice versa.
    
    The ARP stack in net/ipv4/arp.c (arp_create and arp_process) already
    handles this correctly by skipping the target hardware address for
    ARPHRD_IEEE1394. Apply the same pattern to arp_packet_match()."
    
    Mangle the original patch to always return 0 (no match) in case user
    matches on the target hardware address which is never present in
    IEEE1394.
    
    Note that this returns 0 (no match) for either normal and inverse match
    because matching in the target hardware address in ARPHRD_IEEE1394 has
    never been supported by arptables. This is intentional, matching on the
    target hardware address should never evaluate true for ARPHRD_IEEE1394.
    
    Moreover, adjust arpt_mangle to drop the packet too as AI suggests:
    
    In arpt_mangle, the logic assumes a standard ARP layout. Because
    IEEE1394 (FireWire) omits the target hardware address, the linear
    pointer arithmetic miscalculates the offset for the target IP address.
    This causes mangling operations to write to the wrong location, leading
    to packet corruption. To ensure safety, this patch drops packets
    (NF_DROP) when mangling is requested for these fields on IEEE1394
    devices, as the current implementation cannot correctly map the FireWire
    ARP payload.
    
    This omits both mangling target hardware and IP address. Even if IP
    address mangling should be possible in IEEE1394, this would require
    to adjust arpt_mangle offset calculation, which has never been
    supported.
    
    Based on patch from Weiming Shi <[email protected]>.
    
    Fixes: 6752c8db8e0c ("firewire net, ipv4 arp: Extend hardware address and remove driver-level packet inspection.")
    Reported-by: Xiang Mei <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: conntrack: remove sprintf usage [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Tue Apr 14 19:13:46 2026 +0200

    netfilter: conntrack: remove sprintf usage
    
    [ Upstream commit 6e7066bdb481a87fe88c4fa563e348c03b2d373d ]
    
    Replace it with scnprintf, the buffer sizes are expected to be large enough
    to hold the result, no need for snprintf+overflow check.
    
    Increase buffer size in mangle_content_len() while at it.
    
    BUG: KASAN: stack-out-of-bounds in vsnprintf+0xea5/0x1270
    Write of size 1 at addr [..]
     vsnprintf+0xea5/0x1270
     sprintf+0xb1/0xe0
     mangle_content_len+0x1ac/0x280
     nf_nat_sdp_session+0x1cc/0x240
     process_sdp+0x8f8/0xb80
     process_invite_request+0x108/0x2b0
     process_sip_msg+0x5da/0xf50
     sip_help_tcp+0x45e/0x780
     nf_confirm+0x34d/0x990
     [..]
    
    Fixes: 9fafcd7b2032 ("[NETFILTER]: nf_conntrack/nf_nat: add SIP helper port")
    Reported-by: Yiming Qian <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nf_conntrack_sip: don't use simple_strtoul [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Thu Apr 23 02:19:11 2026 +0200

    netfilter: nf_conntrack_sip: don't use simple_strtoul
    
    [ Upstream commit 8cf6809cddcbe301aedfc6b51bcd4944d45795f6 ]
    
    Replace unsafe port parsing in epaddr_len(), ct_sip_parse_header_uri(),
    and ct_sip_parse_request() with a new sip_parse_port() helper that
    validates each digit against the buffer limit, eliminating the use of
    simple_strtoul() which assumes NUL-terminated strings.
    
    The previous code dereferenced pointers without bounds checks after
    sip_parse_addr() and relied on simple_strtoul() on non-NUL-terminated
    skb data. A port that reaches the buffer limit without a trailing
    character is also rejected as malformed.
    
    Also get rid of all simple_strtoul() usage in conntrack, prefer a
    stricter version instead.  There are intentional changes:
    
    - Bail out if number is > UINT_MAX and indicate a failure, same for
      too long sequences.
      While we do accept 05535 as port 5535, we will not accept e.g.
      'sip:10.0.0.1:005060'.  While its syntactically valid under RFC 3261,
      we should restrict this to not waste cycles when presented with
      malformed packets with 64k '0' characters.
    
    - Force base 10 in ct_sip_parse_numerical_param(). This is used to fetch
      'expire=' and 'rports='; both are expected to use base-10.
    
    - In nf_nat_sip.c, only accept the parsed value if its within the 1k-64k
      range.
    
    - epaddr_len now returns 0 if the port is invalid, as it already does
      for invalid ip addresses.  This is intentional. nf_conntrack_sip
      performs lots of guesswork to find the right parts of the message
      to parse.  Being stricter could break existing setups.
      Connection tracking helpers are designed to allow traffic to
      pass, not to block it.
    
    Based on an earlier patch from Jenny Guanni Qu <[email protected]>.
    
    Fixes: 05e3ced297fe ("[NETFILTER]: nf_conntrack_sip: introduce SIP-URI parsing helper")
    Reported-by: Klaudia Kloc <[email protected]>
    Reported-by: Dawid Moczadło <[email protected]>
    Reported-by: Jenny Guanni Qu <[email protected]>.
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nf_conntrack_sip: get helper before allocating expectation [+ + +]
Author: Li Xiasong <[email protected]>
Date:   Thu May 7 22:04:22 2026 +0800

    netfilter: nf_conntrack_sip: get helper before allocating expectation
    
    commit eb6317739b1ea3ab28791e1f91b24781905fa815 upstream.
    
    process_register_request() allocates an expectation and then checks
    whether a conntrack helper is available. If helper lookup fails, the
    function returns early and the allocated expectation is left behind.
    
    Reorder the code to fetch and validate helper before calling
    nf_ct_expect_alloc(). This keeps the logic simpler and removes the leak
    path while preserving existing behavior.
    
    Fixes: e14575fa7529 ("netfilter: nf_conntrack: use rcu accessors where needed")
    Cc: [email protected]
    Signed-off-by: Li Xiasong <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: nf_tables: unconditionally bump set->nelems before insertion [+ + +]
Author: Pablo Neira Ayuso <[email protected]>
Date:   Tue May 19 15:55:18 2026 +0800

    netfilter: nf_tables: unconditionally bump set->nelems before insertion
    
    [ Upstream commit def602e498a4f951da95c95b1b8ce8ae68aa733a ]
    
    In case that the set is full, a new element gets published then removed
    without waiting for the RCU grace period, while RCU reader can be
    walking over it already.
    
    To address this issue, add the element transaction even if set is full,
    but toggle the set_full flag to report -ENFILE so the abort path safely
    unwinds the set to its previous state.
    
    As for element updates, decrement set->nelems to restore it.
    
    A simpler fix is to call synchronize_rcu() in the error path.
    However, with a large batch adding elements to already maxed-out set,
    this could cause noticeable slowdown of such batches.
    
    Fixes: 35d0ac9070ef ("netfilter: nf_tables: fix set->nelems counting with no NLM_F_EXCL")
    Reported-by: Inseo An <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    [ Minor conflict resolved. ]
    Signed-off-by: Li hongliang <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nfnetlink_osf: fix divide-by-zero in OSF_WSS_MODULO [+ + +]
Author: Xiang Mei <[email protected]>
Date:   Tue Apr 14 15:14:01 2026 -0700

    netfilter: nfnetlink_osf: fix divide-by-zero in OSF_WSS_MODULO
    
    [ Upstream commit 2195574dc6d9017d32ac346987e12659f931d932 ]
    
    nf_osf_match_one() computes ctx->window % f->wss.val in the
    OSF_WSS_MODULO branch with no guard for f->wss.val == 0. A
    CAP_NET_ADMIN user can add such a fingerprint via nfnetlink; a
    subsequent matching TCP SYN divides by zero and panics the kernel.
    
    Reject the bogus fingerprint in nfnl_osf_add_callback() above the
    per-option for-loop. f->wss is per-fingerprint, not per-option, so
    the check must run regardless of f->opt_num (including 0). Also
    reject wss.wc >= OSF_WSS_MAX; nf_osf_match_one() already treats that
    as "should not happen".
    
    Crash:
     Oops: divide error: 0000 [#1] SMP KASAN NOPTI
     RIP: 0010:nf_osf_match_one (net/netfilter/nfnetlink_osf.c:98)
     Call Trace:
     <IRQ>
      nf_osf_match (net/netfilter/nfnetlink_osf.c:220)
      xt_osf_match_packet (net/netfilter/xt_osf.c:32)
      ipt_do_table (net/ipv4/netfilter/ip_tables.c:348)
      nf_hook_slow (net/netfilter/core.c:622)
      ip_local_deliver (net/ipv4/ip_input.c:265)
      ip_rcv (include/linux/skbuff.h:1162)
      __netif_receive_skb_one_core (net/core/dev.c:6181)
      process_backlog (net/core/dev.c:6642)
      __napi_poll (net/core/dev.c:7710)
      net_rx_action (net/core/dev.c:7945)
      handle_softirqs (kernel/softirq.c:622)
    
    Fixes: 11eeef41d5f6 ("netfilter: passive OS fingerprint xtables match")
    Reported-by: Weiming Shi <[email protected]>
    Suggested-by: Florian Westphal <[email protected]>
    Suggested-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Xiang Mei <[email protected]>
    Reviewed-by: Fernando Fernandez Mancera <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nfnetlink_osf: fix out-of-bounds read on option matching [+ + +]
Author: Fernando Fernandez Mancera <[email protected]>
Date:   Fri Apr 17 18:20:56 2026 +0200

    netfilter: nfnetlink_osf: fix out-of-bounds read on option matching
    
    [ Upstream commit f5ca450087c3baf3651055e7a6de92600f827af3 ]
    
    In nf_osf_match(), the nf_osf_hdr_ctx structure is initialized once
    and passed by reference to nf_osf_match_one() for each fingerprint
    checked. During TCP option parsing, nf_osf_match_one() advances the
    shared ctx->optp pointer.
    
    If a fingerprint perfectly matches, the function returns early without
    restoring ctx->optp to its initial state. If the user has configured
    NF_OSF_LOGLEVEL_ALL, the loop continues to the next fingerprint.
    However, because ctx->optp was not restored, the next call to
    nf_osf_match_one() starts parsing from the end of the options buffer.
    This causes subsequent matches to read garbage data and fail
    immediately, making it impossible to log more than one match or logging
    incorrect matches.
    
    Instead of using a shared ctx->optp pointer, pass the context as a
    constant pointer and use a local pointer (optp) for TCP option
    traversal. This makes nf_osf_match_one() strictly stateless from the
    caller's perspective, ensuring every fingerprint check starts at the
    correct option offset.
    
    Fixes: 1a6a0951fc00 ("netfilter: nfnetlink_osf: add missing fmatch check")
    Suggested-by: Florian Westphal <[email protected]>
    Signed-off-by: Fernando Fernandez Mancera <[email protected]>
    Reviewed-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nfnetlink_osf: fix potential NULL dereference in ttl check [+ + +]
Author: Fernando Fernandez Mancera <[email protected]>
Date:   Fri Apr 17 18:20:57 2026 +0200

    netfilter: nfnetlink_osf: fix potential NULL dereference in ttl check
    
    [ Upstream commit 711987ba281fd806322a7cd244e98e2a81903114 ]
    
    The nf_osf_ttl() function accessed skb->dev to perform a local interface
    address lookup without verifying that the device pointer was valid.
    
    Additionally, the implementation utilized an in_dev_for_each_ifa_rcu
    loop to match the packet source address against local interface
    addresses. It assumed that packets from the same subnet should not see a
    decrement on the initial TTL. A packet might appear it is from the same
    subnet but it actually isn't especially in modern environments with
    containers and virtual switching.
    
    Remove the device dereference and interface loop. Replace the logic with
    a switch statement that evaluates the TTL according to the ttl_check.
    
    Fixes: 11eeef41d5f6 ("netfilter: passive OS fingerprint xtables match")
    Reported-by: Kito Xu (veritas501) <[email protected]>
    Closes: https://lore.kernel.org/netfilter-devel/[email protected]/
    Signed-off-by: Fernando Fernandez Mancera <[email protected]>
    Reviewed-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nft_ct: fix missing expect put in obj eval [+ + +]
Author: Li Xiasong <[email protected]>
Date:   Thu May 7 22:04:23 2026 +0800

    netfilter: nft_ct: fix missing expect put in obj eval
    
    commit 19f94b6fee75b3ef7fbc06f3745b9a771a8a19a4 upstream.
    
    nft_ct_expect_obj_eval() allocates an expectation and may call
    nf_ct_expect_related(), but never drops its local reference.
    
    Add nf_ct_expect_put(exp) before return to balance allocation.
    
    Fixes: 857b46027d6f ("netfilter: nft_ct: add ct expectations support")
    Cc: [email protected]
    Signed-off-by: Li Xiasong <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: nft_fwd_netdev: check ttl/hl before forwarding [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Thu Apr 9 13:30:41 2026 +0200

    netfilter: nft_fwd_netdev: check ttl/hl before forwarding
    
    [ Upstream commit 1dfd95bdf4d18d263aa8fad06bfb9f4d9c992b18 ]
    
    Drop packets if their ttl/hl is too small for forwarding.
    
    Fixes: d32de98ea70f ("netfilter: nft_fwd_netdev: allow to forward packets via neighbour layer")
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nft_osf: restrict it to ipv4 [+ + +]
Author: Pablo Neira Ayuso <[email protected]>
Date:   Tue Apr 14 13:06:38 2026 +0200

    netfilter: nft_osf: restrict it to ipv4
    
    [ Upstream commit b336fdbb7103fb1484e1dcb6741151d4b5a41e35 ]
    
    This expression only supports for ipv4, restrict it.
    
    Fixes: b96af92d6eaf ("netfilter: nf_tables: implement Passive OS fingerprint module in nft_osf")
    Acked-by: Florian Westphal <[email protected]>
    Reviewed-by: Fernando Fernandez Mancera <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: skip recording stale or retransmitted INIT [+ + +]
Author: Xin Long <[email protected]>
Date:   Sun Apr 26 10:46:40 2026 -0400

    netfilter: skip recording stale or retransmitted INIT
    
    [ Upstream commit 576a5d2bad4814c881a829576b1261b9b8159d2b ]
    
    An INIT whose init_tag matches the peer's vtag does not provide new state
    information. It indicates either:
    
    - a stale INIT (after INIT-ACK has already been seen on the same side), or
    - a retransmitted INIT (after INIT has already been recorded on the same
      side).
    
    In both cases, the INIT must not update ct->proto.sctp.init[] state, since
    it does not advance the handshake tracking and may otherwise corrupt
    INIT/INIT-ACK validation logic.
    
    Allow INIT processing only when the conntrack entry is newly created
    (SCTP_CONNTRACK_NONE), or when the init_tag differs from the stored peer
    vtag.
    
    Note it skips the check for the ct with old_state SCTP_CONNTRACK_NONE in
    nf_conntrack_sctp_packet(), as it is just created in sctp_new() where it
    set ct->proto.sctp.vtag[IP_CT_DIR_REPLY] = ih->init_tag.
    
    Fixes: 9fb9cbb1082d ("[NETFILTER]: Add nf_conntrack subsystem.")
    Signed-off-by: Xin Long <[email protected]>
    Reviewed-by: Marcelo Ricardo Leitner <[email protected]>
    Acked-by: Florian Westphal <[email protected]>
    Link: https://patch.msgid.link/ee56c3e416452b2a40589a2a85245ac2ad5e9f4b.1777214801.git.lucien.xin@gmail.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: xt_policy: fix strict mode inbound policy matching [+ + +]
Author: Jiexun Wang <[email protected]>
Date:   Fri Apr 17 20:25:06 2026 +0800

    netfilter: xt_policy: fix strict mode inbound policy matching
    
    [ Upstream commit 4b2b4d7d4e203c92db8966b163edfacb1f0e1e29 ]
    
    match_policy_in() walks sec_path entries from the last transform to the
    first one, but strict policy matching needs to consume info->pol[] in
    the same forward order as the rule layout.
    
    Derive the strict-match policy position from the number of transforms
    already consumed so that multi-element inbound rules are matched
    consistently.
    
    Fixes: c4b885139203 ("[NETFILTER]: x_tables: replace IPv4/IPv6 policy match by address family independant version")
    Reported-by: Yuan Tan <[email protected]>
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Reported-by: Xin Liu <[email protected]>
    Signed-off-by: Jiexun Wang <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Acked-by: Florian Westphal <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: xt_socket: enable defrag after all other checks [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Sat Apr 4 12:12:59 2026 +0200

    netfilter: xt_socket: enable defrag after all other checks
    
    [ Upstream commit 542be3fa5aff54210a02954c38f07e53ea9bdafd ]
    
    Originally this did not matter because defrag was enabled once per netns
    and only disabled again on netns dismantle.  When this got changed I should
    have adjusted checkentry to not leave defrag enabled on error.
    
    Fixes: de8c12110a13 ("netfilter: disable defrag once its no longer needed")
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: xtables: restrict several matches to inet family [+ + +]
Author: Pablo Neira Ayuso <[email protected]>
Date:   Wed Apr 15 12:21:00 2026 +0200

    netfilter: xtables: restrict several matches to inet family
    
    [ Upstream commit b6fe26f86a1649f84e057f3f15605b08eda15497 ]
    
    This is a partial revert of:
    
      commit ab4f21e6fb1c ("netfilter: xtables: use NFPROTO_UNSPEC in more extensions")
    
    to allow ipv4 and ipv6 only.
    
    - xt_mac
    - xt_owner
    - xt_physdev
    
    These extensions are not used by ebtables in userspace.
    
    Moreover, xt_realm is only for ipv4, since dst->tclassid is ipv4
    specific.
    
    Fixes: ab4f21e6fb1c ("netfilter: xtables: use NFPROTO_UNSPEC in more extensions")
    Reported-by: "Kito Xu (veritas501)" <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
netfs: fix error handling in netfs_extract_user_iter() [+ + +]
Author: Paulo Alcantara <[email protected]>
Date:   Tue May 12 13:33:46 2026 +0100

    netfs: fix error handling in netfs_extract_user_iter()
    
    commit 0aad5704c6b4d14007d4eab15883e8524e4310f4 upstream.
    
    In netfs_extract_user_iter(), if iov_iter_extract_pages() failed to
    extract user pages, bail out on -ENOMEM, otherwise return the error
    code only if @npages == 0, allowing short DIO reads and writes to be
    issued.
    
    This fixes mmapstress02 from LTP tests against CIFS.
    
    Fixes: 85dd2c8ff368 ("netfs: Add a function to extract a UBUF or IOVEC into a BVEC iterator")
    Reported-by: Xiaoli Feng <[email protected]>
    Signed-off-by: Paulo Alcantara (Red Hat) <[email protected]>
    Signed-off-by: David Howells <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: [email protected]
    Cc: [email protected]
    Cc: [email protected]
    Cc: [email protected]
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfs: Fix potential uninitialised var in netfs_extract_user_iter() [+ + +]
Author: David Howells <[email protected]>
Date:   Tue May 12 13:33:45 2026 +0100

    netfs: Fix potential uninitialised var in netfs_extract_user_iter()
    
    commit 7e3d8db899d54af39fafb2eb3392b0cdae9973b5 upstream.
    
    In netfs_extract_user_iter(), if it's given a zero-length iterator, it will
    fall through the loop without setting ret, and so the error handling
    behaviour will be undefined, depending on whether ret happens to be
    negative.  The value of ret then propagates back up the callstack.
    
    Fix this by presetting ret to 0.
    
    Fixes: 85dd2c8ff368 ("netfs: Add a function to extract a UBUF or IOVEC into a BVEC iterator")
    Closes: https://sashiko.dev/#/patchset/20260414082004.3756080-1-dhowells%40redhat.com
    Signed-off-by: David Howells <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    cc: Paulo Alcantara <[email protected]>
    cc: Matthew Wilcox <[email protected]>
    cc: [email protected]
    cc: [email protected]
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nexthop: fix IPv6 route referencing IPv4 nexthop [+ + +]
Author: Jiayuan Chen <[email protected]>
Date:   Mon Apr 13 19:45:19 2026 +0800

    nexthop: fix IPv6 route referencing IPv4 nexthop
    
    [ Upstream commit 29c95185ba32b621fbc3800fb86e7dc3edf5c2be ]
    
    syzbot reported a panic [1] [2].
    
    When an IPv6 nexthop is replaced with an IPv4 nexthop, the has_v4 flag
    of all groups containing this nexthop is not updated. This is because
    nh_group_v4_update is only called when replacing AF_INET to AF_INET6,
    but the reverse direction (AF_INET6 to AF_INET) is missed.
    
    This allows a stale has_v4=false to bypass fib6_check_nexthop, causing
    IPv6 routes to be attached to groups that effectively contain only AF_INET
    members. Subsequent route lookups then call nexthop_fib6_nh() which
    returns NULL for the AF_INET member, leading to a NULL pointer
    dereference.
    
    Fix by calling nh_group_v4_update whenever the family changes, not just
    AF_INET to AF_INET6.
    
    Reproducer:
            # AF_INET6 blackhole
            ip -6 nexthop add id 1 blackhole
            # group with has_v4=false
            ip nexthop add id 100 group 1
            # replace with AF_INET (no -6), has_v4 stays false
            ip nexthop replace id 1 blackhole
            # pass stale has_v4 check
            ip -6 route add 2001:db8::/64 nhid 100
            # panic
            ping -6 2001:db8::1
    
    [1] https://syzkaller.appspot.com/bug?id=e17283eb2f8dcf3dd9b47fe6f67a95f71faadad0
    [2] https://syzkaller.appspot.com/bug?id=8699b6ae54c9f35837d925686208402949e12ef3
    Fixes: 7bf4796dd099 ("nexthops: add support for replace")
    Signed-off-by: Jiayuan Chen <[email protected]>
    Reviewed-by: David Ahern <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
NFC: trf7970a: Ignore antenna noise when checking for RF field [+ + +]
Author: Paul Geurts <[email protected]>
Date:   Wed Apr 22 12:09:30 2026 +0200

    NFC: trf7970a: Ignore antenna noise when checking for RF field
    
    [ Upstream commit a9bc28aa4e64320668131349436a650bf42591a5 ]
    
    The main channel Received Signal Strength Indicator (RSSI) measurement
    is used to determine whether an RF field is present or not. RSSI != 0
    is interpreted as an RF Field is present. This does not take RF noise
    and measurement inaccuracy into account, and results in false positives
    in the field.
    
    Define a noise level and make sure the RF field is only interpreted as
    present when the RSSI is above the noise level.
    
    Fixes: 851ee3cbf850 ("NFC: trf7970a: Don't turn on RF if there is already an RF field")
    Signed-off-by: Paul Geurts <[email protected]>
    Reviewed-by: Krzysztof Kozlowski <[email protected]>
    Reviewed-by: Mark Greer <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nfp: fix swapped arguments in nfp_encode_basic_qdr() calls [+ + +]
Author: Alexey Kodanev <[email protected]>
Date:   Wed Apr 22 16:05:36 2026 +0000

    nfp: fix swapped arguments in nfp_encode_basic_qdr() calls
    
    [ Upstream commit 4078c5611d7585548b249377ebd60c272e410490 ]
    
    There is a mismatch between the passed arguments and the actual
    nfp_encode_basic_qdr() function parameter names:
    
      static int nfp_encode_basic_qdr(u64 addr, int dest_island, int cpp_tgt,
                                      int mode, bool addr40, int isld1,
                                      int isld0)
      {
          ...
    
    But "dest_island" and "cpp_tgt" are swapped at every call-site.
    For example:
    
      return nfp_encode_basic_qdr(*addr, cpp_tgt, dest_island,
                                  mode, addr40, isld1, isld0);
    
    As a result, nfp_encode_basic_qdr() receives "dest_island" as CPP target
    type, which is always NFP_CPP_TARGET_QDR(2) for these calls, and "cpp_tgt"
    as the destination island ID, which can accidentally match or be outside
    the valid NFP_CPP_TARGET_* types (e.g. '-1' for any destination).
    
    Since code already worked for years, also add extra pr_warn() to error
    paths in nfp_encode_basic_qdr() to help identify any potential address
    verification failures.
    
    Detected using the static analysis tool - Svace.
    
    Fixes: 4cb584e0ee7d ("nfp: add CPP access core")
    Signed-off-by: Alexey Kodanev <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nfs/blocklayout: Fix compilation error (`make W=1`) in bl_write_pagelist() [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Wed Feb 4 21:21:49 2026 +0100

    nfs/blocklayout: Fix compilation error (`make W=1`) in bl_write_pagelist()
    
    [ Upstream commit f83c8dda456ce4863f346aa26d88efa276eda35d ]
    
    Clang compiler is not happy about set but unused variable
    (when dprintk() is no-op):
    
    .../blocklayout/blocklayout.c:384:9: error: variable 'count' set but not used [-Werror,-Wunused-but-set-variable]
    
    Remove a leftover from the previous cleanup.
    
    Fixes: 3a6fd1f004fc ("pnfs/blocklayout: remove read-modify-write handling in bl_write_pagelist")
    Acked-by: Anna Schumaker <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Andy Shevchenko <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nilfs2: reject zero bd_oblocknr in nilfs_ioctl_mark_blocks_dirty() [+ + +]
Author: Deepanshu Kartikey <[email protected]>
Date:   Wed Apr 1 02:52:09 2026 +0900

    nilfs2: reject zero bd_oblocknr in nilfs_ioctl_mark_blocks_dirty()
    
    [ Upstream commit be3e5d10643d3be1cbac9d9939f220a99253f980 ]
    
    nilfs_ioctl_mark_blocks_dirty() uses bd_oblocknr to detect dead blocks
    by comparing it with the current block number bd_blocknr. If they differ,
    the block is considered dead and skipped.
    
    However, bd_oblocknr should never be 0 since block 0 typically stores the
    primary superblock and is never a valid GC target block. A corrupted ioctl
    request with bd_oblocknr set to 0 causes the comparison to incorrectly
    match when the lookup returns -ENOENT and sets bd_blocknr to 0, bypassing
    the dead block check and calling nilfs_bmap_mark() on a non-existent
    block. This causes nilfs_btree_do_lookup() to return -ENOENT, triggering
    the WARN_ON(ret == -ENOENT).
    
    Fix this by rejecting ioctl requests with bd_oblocknr set to 0 at the
    beginning of each iteration.
    
    [ryusuke: slightly modified the commit message and comments for accuracy]
    
    Fixes: 7942b919f732 ("nilfs2: ioctl operations")
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=98a040252119df0506f8
    Suggested-by: Ryusuke Konishi <[email protected]>
    Signed-off-by: Deepanshu Kartikey <[email protected]>
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=466a45fcfb0562f5b9a0
    Cc: Junjie Cao <[email protected]>
    Signed-off-by: Ryusuke Konishi <[email protected]>
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ntfs: ->d_compare() must not block [+ + +]
Author: Al Viro <[email protected]>
Date:   Mon May 18 12:21:40 2026 +0800

    ntfs: ->d_compare() must not block
    
    [ Upstream commit ca2a04e84af79596e5cd9cfe697d5122ec39c8ce ]
    
    ... so don't use __getname() there.  Switch it (and ntfs_d_hash(), while
    we are at it) to kmalloc(PATH_MAX, GFP_NOWAIT).  Yes, ntfs_d_hash()
    almost certainly can do with smaller allocations, but let ntfs folks
    deal with that - keep the allocation size as-is for now.
    
    Stop abusing names_cachep in ntfs, period - various uses of that thing
    in there have nothing to do with pathnames; just use k[mz]alloc() and
    be done with that.  For now let's keep sizes as-in, but AFAICS none of
    the users actually want PATH_MAX.
    
    Signed-off-by: Al Viro <[email protected]>
    Signed-off-by: Li hongliang <[email protected]>

 
nvme-pci: fix missed admin queue sq doorbell write [+ + +]
Author: Keith Busch <[email protected]>
Date:   Tue Apr 21 09:14:02 2026 -0700

    nvme-pci: fix missed admin queue sq doorbell write
    
    [ Upstream commit 1cc4cdae2a3b7730d462d69e30f213fd2efe7807 ]
    
    We can batch admin commands submitted through io_uring_cmd passthrough,
    which means bd->last may be false and skips the doorbell write to
    aggregate multiple commands per write. If a subsequent command can't be
    dispatched for whatever reason, we have to provide the blk-mq ops'
    commit_rqs callback in order to ensure we properly update the doorbell.
    
    Fixes: 58e5bdeb9c2b ("nvme: enable uring-passthrough for admin commands")
    Reviewed-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Kanchan Joshi <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nvmet-tcp: propagate nvmet_tcp_build_pdu_iovec() errors to its callers [+ + +]
Author: Maurizio Lombardi <[email protected]>
Date:   Mon Mar 16 15:39:35 2026 +0100

    nvmet-tcp: propagate nvmet_tcp_build_pdu_iovec() errors to its callers
    
    [ Upstream commit ea8e356acb165cb1fd75537a52e1f66e5e76c538 ]
    
    Currently, when nvmet_tcp_build_pdu_iovec() detects an out-of-bounds
    PDU length or offset, it triggers nvmet_tcp_fatal_error(cmd->queue)
    and returns early. However, because the function returns void, the
    callers are entirely unaware that a fatal error has occurred and
    that the cmd->recv_msg.msg_iter was left uninitialized.
    
    Callers such as nvmet_tcp_handle_h2c_data_pdu() proceed to blindly
    overwrite the queue state with queue->rcv_state = NVMET_TCP_RECV_DATA
    Consequently, the socket receiving loop may attempt to read incoming
    network data into the uninitialized iterator.
    
    Fix this by shifting the error handling responsibility to the callers.
    
    Fixes: 52a0a9854934 ("nvmet-tcp: add bounds checks in nvmet_tcp_build_pdu_iovec")
    Reviewed-by: Hannes Reinecke <[email protected]>
    Reviewed-by: Yunje Shin <[email protected]>
    Reviewed-by: Chaitanya Kulkarni <[email protected]>
    Signed-off-by: Maurizio Lombardi <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ocfs2/dlm: fix off-by-one in dlm_match_regions() region comparison [+ + +]
Author: Junrui Luo <[email protected]>
Date:   Sat Mar 7 15:21:09 2026 +0800

    ocfs2/dlm: fix off-by-one in dlm_match_regions() region comparison
    
    [ Upstream commit 01b61e8dda9b0fdb0d4cda43de25f4e390554d7b ]
    
    The local-vs-remote region comparison loop uses '<=' instead of '<',
    causing it to read one entry past the valid range of qr_regions.  The
    other loops in the same function correctly use '<'.
    
    Fix the loop condition to use '<' for consistency and correctness.
    
    Link: https://lkml.kernel.org/r/SYBPR01MB78813DA26B50EC5E01F00566AF7BA@SYBPR01MB7881.ausprd01.prod.outlook.com
    Fixes: ea2034416b54 ("ocfs2/dlm: Add message DLM_QUERY_REGION")
    Signed-off-by: Junrui Luo <[email protected]>
    Reported-by: Yuhao Jiang <[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]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ocfs2/dlm: validate qr_numregions in dlm_match_regions() [+ + +]
Author: Junrui Luo <[email protected]>
Date:   Sat Mar 7 15:21:08 2026 +0800

    ocfs2/dlm: validate qr_numregions in dlm_match_regions()
    
    [ Upstream commit 7ab3fbb01bc6d79091bc375e5235d360cd9b78be ]
    
    Patch series "ocfs2/dlm: fix two bugs in dlm_match_regions()".
    
    In dlm_match_regions(), the qr_numregions field from a DLM_QUERY_REGION
    network message is used to drive loops over the qr_regions buffer without
    sufficient validation.  This series fixes two issues:
    
    - Patch 1 adds a bounds check to reject messages where qr_numregions
      exceeds O2NM_MAX_REGIONS. The o2net layer only validates message
      byte length; it does not constrain field values, so a crafted message
      can set qr_numregions up to 255 and trigger out-of-bounds reads past
      the 1024-byte qr_regions buffer.
    
    - Patch 2 fixes an off-by-one in the local-vs-remote comparison loop,
      which uses '<=' instead of '<', reading one entry past the valid range
      even when qr_numregions is within bounds.
    
    This patch (of 2):
    
    The qr_numregions field from a DLM_QUERY_REGION network message is used
    directly as loop bounds in dlm_match_regions() without checking against
    O2NM_MAX_REGIONS.  Since qr_regions is sized for at most O2NM_MAX_REGIONS
    (32) entries, a crafted message with qr_numregions > 32 causes
    out-of-bounds reads past the qr_regions buffer.
    
    Add a bounds check for qr_numregions before entering the loops.
    
    Link: https://lkml.kernel.org/r/SYBPR01MB7881A334D02ACEE5E0645801AF7BA@SYBPR01MB7881.ausprd01.prod.outlook.com
    Link: https://lkml.kernel.org/r/SYBPR01MB788166F524AD04E262E174BEAF7BA@SYBPR01MB7881.ausprd01.prod.outlook.com
    Fixes: ea2034416b54 ("ocfs2/dlm: Add message DLM_QUERY_REGION")
    Signed-off-by: Junrui Luo <[email protected]>
    Reported-by: Yuhao Jiang <[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]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ocfs2: fix listxattr handling when the buffer is full [+ + +]
Author: ZhengYuan Huang <[email protected]>
Date:   Fri Apr 10 12:03:39 2026 +0800

    ocfs2: fix listxattr handling when the buffer is full
    
    [ Upstream commit d12f558e6200b3f47dbef9331ed6d115d2410e59 ]
    
    [BUG]
    If an OCFS2 inode has both inline and block-based xattrs, listxattr()
    can return a size larger than the caller's buffer when the inline names
    consume that buffer exactly.
    
    kernel BUG at mm/usercopy.c:102!
    Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTI
    RIP: 0010:usercopy_abort+0xb7/0xd0 mm/usercopy.c:102
    Call Trace:
     __check_heap_object+0xe3/0x120 mm/slub.c:8243
     check_heap_object mm/usercopy.c:196 [inline]
     __check_object_size mm/usercopy.c:250 [inline]
     __check_object_size+0x5c5/0x780 mm/usercopy.c:215
     check_object_size include/linux/ucopysize.h:22 [inline]
     check_copy_size include/linux/ucopysize.h:59 [inline]
     copy_to_user include/linux/uaccess.h:219 [inline]
     listxattr+0xb0/0x170 fs/xattr.c:926
     filename_listxattr fs/xattr.c:958 [inline]
     path_listxattrat+0x137/0x320 fs/xattr.c:988
     __do_sys_listxattr fs/xattr.c:1001 [inline]
     __se_sys_listxattr fs/xattr.c:998 [inline]
     __x64_sys_listxattr+0x7f/0xd0 fs/xattr.c:998
     ...
    
    [CAUSE]
    Commit 936b8834366e ("ocfs2: Refactor xattr list and remove
    ocfs2_xattr_handler().") replaced the old per-handler list accounting
    with ocfs2_xattr_list_entry(), but it kept using size == 0 to detect
    probe mode.
    
    That assumption stops being true once ocfs2_listxattr() finishes the
    inline-xattr pass. If the inline names fill the caller buffer exactly,
    the block-xattr pass runs with a non-NULL buffer and a remaining size of
    zero. ocfs2_xattr_list_entry() then skips the bounds check, keeps
    counting block names, and returns a positive size larger than the
    supplied buffer.
    
    [FIX]
    Detect probe mode by testing whether the destination buffer pointer is
    NULL instead of whether the remaining size is zero.
    
    That restores the pre-refactor behavior and matches the OCFS2 getxattr
    helpers. Once the remaining buffer reaches zero while more names are
    left, the block-xattr pass now returns -ERANGE instead of reporting a
    size larger than the allocated list buffer.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 936b8834366e ("ocfs2: Refactor xattr list and remove ocfs2_xattr_handler().")
    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]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ocfs2: validate bg_bits during freefrag scan [+ + +]
Author: ZhengYuan Huang <[email protected]>
Date:   Fri Apr 10 11:42:20 2026 +0800

    ocfs2: validate bg_bits during freefrag scan
    
    [ Upstream commit 8f687eeed3da3012152b0f9473f578869de0cd7b ]
    
    [BUG]
    A crafted filesystem can trigger an out-of-bounds bitmap walk when
    OCFS2_IOC_INFO is issued with OCFS2_INFO_FL_NON_COHERENT.
    
    BUG: KASAN: use-after-free in instrument_atomic_read include/linux/instrumented.h:68 [inline]
    BUG: KASAN: use-after-free in _test_bit include/asm-generic/bitops/instrumented-non-atomic.h:141 [inline]
    BUG: KASAN: use-after-free in test_bit_le include/asm-generic/bitops/le.h:21 [inline]
    BUG: KASAN: use-after-free in ocfs2_info_freefrag_scan_chain fs/ocfs2/ioctl.c:495 [inline]
    BUG: KASAN: use-after-free in ocfs2_info_freefrag_scan_bitmap fs/ocfs2/ioctl.c:588 [inline]
    BUG: KASAN: use-after-free in ocfs2_info_handle_freefrag fs/ocfs2/ioctl.c:662 [inline]
    BUG: KASAN: use-after-free in ocfs2_info_handle_request+0x1c66/0x3370 fs/ocfs2/ioctl.c:754
    Read of size 8 at addr ffff888031bce000 by task syz.0.636/1435
    Call Trace:
     __dump_stack lib/dump_stack.c:94 [inline]
     dump_stack_lvl+0xbe/0x130 lib/dump_stack.c:120
     print_address_description mm/kasan/report.c:378 [inline]
     print_report+0xd1/0x650 mm/kasan/report.c:482
     kasan_report+0xfb/0x140 mm/kasan/report.c:595
     check_region_inline mm/kasan/generic.c:186 [inline]
     kasan_check_range+0x11c/0x200 mm/kasan/generic.c:200
     __kasan_check_read+0x11/0x20 mm/kasan/shadow.c:31
     instrument_atomic_read include/linux/instrumented.h:68 [inline]
     _test_bit include/asm-generic/bitops/instrumented-non-atomic.h:141 [inline]
     test_bit_le include/asm-generic/bitops/le.h:21 [inline]
     ocfs2_info_freefrag_scan_chain fs/ocfs2/ioctl.c:495 [inline]
     ocfs2_info_freefrag_scan_bitmap fs/ocfs2/ioctl.c:588 [inline]
     ocfs2_info_handle_freefrag fs/ocfs2/ioctl.c:662 [inline]
     ocfs2_info_handle_request+0x1c66/0x3370 fs/ocfs2/ioctl.c:754
     ocfs2_info_handle+0x18d/0x2a0 fs/ocfs2/ioctl.c:828
     ocfs2_ioctl+0x632/0x6e0 fs/ocfs2/ioctl.c:913
     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
     ...
    
    [CAUSE]
    ocfs2_info_freefrag_scan_chain() uses on-disk bg_bits directly as the
    bitmap scan limit. The coherent path reads group descriptors through
    ocfs2_read_group_descriptor(), which validates the descriptor before
    use. The non-coherent path uses ocfs2_read_blocks_sync() instead and
    skips that validation, so an impossible bg_bits value can drive the
    bitmap walk past the end of the block.
    
    [FIX]
    Compute the bitmap capacity from the filesystem format with
    ocfs2_group_bitmap_size(), report descriptors whose bg_bits exceeds
    that limit, and clamp the scan to the computed capacity. This keeps the
    freefrag report going while avoiding reads beyond the buffer.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: d24a10b9f8ed ("Ocfs2: Add a new code 'OCFS2_INFO_FREEFRAG' for o2info ioctl.")
    Signed-off-by: ZhengYuan Huang <[email protected]>
    Reviewed-by: Heming Zhao <[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]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ocfs2: validate group add input before caching [+ + +]
Author: ZhengYuan Huang <[email protected]>
Date:   Fri Apr 10 10:02:08 2026 +0800

    ocfs2: validate group add input before caching
    
    [ Upstream commit 70b672833f4025341c11b22c7f83778a5cd611bc ]
    
    [BUG]
    OCFS2_IOC_GROUP_ADD can trigger a BUG_ON in
    ocfs2_set_new_buffer_uptodate():
    
    kernel BUG at fs/ocfs2/uptodate.c:509!
    Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTI
    RIP: 0010:ocfs2_set_new_buffer_uptodate+0x194/0x1e0 fs/ocfs2/uptodate.c:509
    Code: ffffe88f 42b9fe4c 89e64889 dfe8b4df
    Call Trace:
     ocfs2_group_add+0x3f1/0x1510 fs/ocfs2/resize.c:507
     ocfs2_ioctl+0x309/0x6e0 fs/ocfs2/ioctl.c:887
     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
    RIP: 0033:0x7bbfb55a966d
    
    [CAUSE]
    ocfs2_group_add() calls ocfs2_set_new_buffer_uptodate() on a
    user-controlled group block before ocfs2_verify_group_and_input()
    validates that block number. That helper is only valid for newly
    allocated metadata and asserts that the block is not already present in
    the chosen metadata cache. The code also uses INODE_CACHE(inode) even
    though the group descriptor belongs to main_bm_inode and later journal
    accesses use that cache context instead.
    
    [FIX]
    Validate the on-disk group descriptor before caching it, then add it to
    the metadata cache tracked by INODE_CACHE(main_bm_inode). Keep the
    validation failure path separate from the later cleanup path so we only
    remove the buffer from that cache after it has actually been inserted.
    This keeps the group buffer lifetime consistent across validation,
    journaling, and cleanup.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 7909f2bf8353 ("[PATCH 2/2] ocfs2: Implement group add for online resize")
    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]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
openvswitch: cap upcall PID array size and pre-size vport replies [+ + +]
Author: Weiming Shi <[email protected]>
Date:   Wed Apr 15 19:46:54 2026 -0700

    openvswitch: cap upcall PID array size and pre-size vport replies
    
    [ Upstream commit 2091c6aa0df6aba47deb5c8ab232b1cb60af3519 ]
    
    The vport netlink reply helpers allocate a fixed-size skb with
    nlmsg_new(NLMSG_DEFAULT_SIZE, ...) but serialize the full upcall PID
    array via ovs_vport_get_upcall_portids().  Since
    ovs_vport_set_upcall_portids() accepts any non-zero multiple of
    sizeof(u32) with no upper bound, a CAP_NET_ADMIN user can install a PID
    array large enough to overflow the reply buffer, causing nla_put() to
    fail with -EMSGSIZE and hitting BUG_ON(err < 0).  On systems with
    unprivileged user namespaces enabled (e.g., Ubuntu default), this is
    reachable via unshare -Urn since OVS vport mutation operations use
    GENL_UNS_ADMIN_PERM.
    
     kernel BUG at net/openvswitch/datapath.c:2414!
     Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTI
     CPU: 1 UID: 0 PID: 65 Comm: poc Not tainted 7.0.0-rc7-00195-geb216e422044 #1
     RIP: 0010:ovs_vport_cmd_set+0x34c/0x400
     Call Trace:
      <TASK>
      genl_family_rcv_msg_doit (net/netlink/genetlink.c:1116)
      genl_rcv_msg (net/netlink/genetlink.c:1194)
      netlink_rcv_skb (net/netlink/af_netlink.c:2550)
      genl_rcv (net/netlink/genetlink.c:1219)
      netlink_unicast (net/netlink/af_netlink.c:1344)
      netlink_sendmsg (net/netlink/af_netlink.c:1894)
      __sys_sendto (net/socket.c:2206)
      __x64_sys_sendto (net/socket.c:2209)
      do_syscall_64 (arch/x86/entry/syscall_64.c:63)
      entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
      </TASK>
     Kernel panic - not syncing: Fatal exception
    
    Reject attempts to set more PIDs than nr_cpu_ids in
    ovs_vport_set_upcall_portids(), and pre-compute the worst-case reply
    size in ovs_vport_cmd_msg_size() based on that bound, similar to the
    existing ovs_dp_cmd_msg_size().  nr_cpu_ids matches the cap already
    used by the per-CPU dispatch configuration on the datapath side
    (ovs_dp_cmd_fill_info() serialises at most nr_cpu_ids PIDs), so the
    two sides stay consistent.
    
    Fixes: 5cd667b0a456 ("openvswitch: Allow each vport to have an array of 'port_id's.")
    Reported-by: Xiang Mei <[email protected]>
    Assisted-by: Claude:claude-opus-4-6
    Signed-off-by: Weiming Shi <[email protected]>
    Reviewed-by: Ilya Maximets <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
padata: Put CPU offline callback in ONLINE section to allow failure [+ + +]
Author: Daniel Jordan <[email protected]>
Date:   Fri Mar 13 11:24:33 2026 -0400

    padata: Put CPU offline callback in ONLINE section to allow failure
    
    [ Upstream commit c8c4a2972f83c8b68ff03b43cecdb898939ff851 ]
    
    syzbot reported the following warning:
    
        DEAD callback error for CPU1
        WARNING: kernel/cpu.c:1463 at _cpu_down+0x759/0x1020 kernel/cpu.c:1463, CPU#0: syz.0.1960/14614
    
    at commit 4ae12d8bd9a8 ("Merge tag 'kbuild-fixes-7.0-2' of git://git.kernel.org/pub/scm/linux/kernel/git/kbuild/linux")
    which tglx traced to padata_cpu_dead() given it's the only
    sub-CPUHP_TEARDOWN_CPU callback that returns an error.
    
    Failure isn't allowed in hotplug states before CPUHP_TEARDOWN_CPU
    so move the CPU offline callback to the ONLINE section where failure is
    possible.
    
    Fixes: 894c9ef9780c ("padata: validate cpumask without removed CPU during offline")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/all/[email protected]/
    Debugged-by: Thomas Gleixner <[email protected]>
    Signed-off-by: Daniel Jordan <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

padata: Remove cpu online check from cpu add and removal [+ + +]
Author: Chuyi Zhou <[email protected]>
Date:   Thu Feb 26 16:07:03 2026 +0800

    padata: Remove cpu online check from cpu add and removal
    
    [ Upstream commit 73117ea6470dca787f70f33c001f9faf437a1c0b ]
    
    During the CPU offline process, the dying CPU is cleared from the
    cpu_online_mask in takedown_cpu(). After this step, various CPUHP_*_DEAD
    callbacks are executed to perform cleanup jobs for the dead CPU, so this
    cpu online check in padata_cpu_dead() is unnecessary.
    
    Similarly, when executing padata_cpu_online() during the
    CPUHP_AP_ONLINE_DYN phase, the CPU has already been set in the
    cpu_online_mask, the action even occurs earlier than the
    CPUHP_AP_ONLINE_IDLE stage.
    
    Remove this unnecessary cpu online check in __padata_add_cpu() and
    __padata_remove_cpu().
    
    Signed-off-by: Chuyi Zhou <[email protected]>
    Acked-by: Daniel Jordan <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Stable-dep-of: c8c4a2972f83 ("padata: Put CPU offline callback in ONLINE section to allow failure")
    Signed-off-by: Sasha Levin <[email protected]>

 
params: Replace __modinit with __init_or_module [+ + +]
Author: Petr Pavlu <[email protected]>
Date:   Tue Aug 19 14:12:09 2025 +0200

    params: Replace __modinit with __init_or_module
    
    [ Upstream commit 3cb0c3bdea5388519bc1bf575dca6421b133302b ]
    
    Remove the custom __modinit macro from kernel/params.c and instead use the
    common __init_or_module macro from include/linux/module.h. Both provide the
    same functionality.
    
    Signed-off-by: Petr Pavlu <[email protected]>
    Reviewed-by: Aaron Tomlin <[email protected]>
    Reviewed-by: Daniel Gomez <[email protected]>
    Reviewed-by: Sami Tolvanen <[email protected]>
    Signed-off-by: Sami Tolvanen <[email protected]>
    Stable-dep-of: deffe1edba62 ("module: Fix freeing of charp module parameters when CONFIG_SYSFS=n")
    Signed-off-by: Sasha Levin <[email protected]>

 
PCI: dwc: Apply ECRC workaround to DesignWare 5.00a as well [+ + +]
Author: Manikanta Maddireddy <[email protected]>
Date:   Wed Mar 25 00:37:53 2026 +0530

    PCI: dwc: Apply ECRC workaround to DesignWare 5.00a as well
    
    [ Upstream commit 40805f32dceadebb7381d911003100bec7b8cd51 ]
    
    The ECRC (TLP digest) workaround was originally added for DesignWare
    version 4.90a. Tegra234 SoC has 5.00a DWC HW version, which has the same
    ATU TD override behaviour, so apply the workaround for 5.00a too.
    
    Fixes: a54e19073718 ("PCI: tegra194: Add Tegra234 PCIe support")
    Signed-off-by: Manikanta Maddireddy <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Reviewed-by: Jon Hunter <[email protected]>
    Reviewed-by: Vidya Sagar <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

PCI: Enable AtomicOps only if Root Port supports them [+ + +]
Author: Gerd Bayer <[email protected]>
Date:   Mon Mar 30 15:09:45 2026 +0200

    PCI: Enable AtomicOps only if Root Port supports them
    
    [ Upstream commit 1ae8c4ce157037e266184064a182af9ef9af278b ]
    
    When inspecting the config space of a Connect-X physical function in an
    s390 system after it was initialized by the mlx5_core device driver, we
    found the function to be enabled to request AtomicOps despite the Root Port
    lacking support for completing them:
    
      00:00.1 Ethernet controller: Mellanox Technologies MT2894 Family [ConnectX-6 Lx]
              Subsystem: Mellanox Technologies Device 0002
              DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-
                       AtomicOpsCtl: ReqEn+
    
    On s390 and many virtualized guests, the Endpoint is visible but the Root
    Port is not.  In this case, pci_enable_atomic_ops_to_root() previously
    enabled AtomicOps in the Endpoint even though it can't tell whether the
    Root Port supports them as a completer.
    
    Change pci_enable_atomic_ops_to_root() to fail if there's no Root Port or
    the Root Port doesn't support AtomicOps.
    
    Fixes: 430a23689dea ("PCI: Add pci_enable_atomic_ops_to_root()")
    Reported-by: Alexander Schmidt <[email protected]>
    Signed-off-by: Gerd Bayer <[email protected]>
    [bhelgaas: commit log, check RP first to simplify flow]
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

PCI: mediatek-gen3: Prevent leaking IRQ domains when IRQ not found [+ + +]
Author: Chen-Yu Tsai <[email protected]>
Date:   Tue Mar 24 17:35:41 2026 +0800

    PCI: mediatek-gen3: Prevent leaking IRQ domains when IRQ not found
    
    [ Upstream commit 5573c44cb3fd01a9f62d569ae9ac870ef5f0e0ba ]
    
    In mtk_pcie_setup_irq(), the IRQ domains are allocated before the
    controller's IRQ is fetched. If the latter fails, the function
    directly returns an error, without cleaning up the allocated domains.
    
    Hence, reverse the order so that the IRQ domains are allocated after the
    controller's IRQ is found.
    
    This was flagged by Sashiko during a review of "[PATCH v6 0/7] PCI:
    mediatek-gen3: add power control support".
    
    Fixes: 814cceebba9b ("PCI: mediatek-gen3: Add INTx support")
    Signed-off-by: Chen-Yu Tsai <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Link: https://sashiko.dev/#/patchset/20260324052002.4072430-1-wenst%40chromium.org
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

PCI: tegra194: Allow system suspend when the Endpoint link is not up [+ + +]
Author: Vidya Sagar <[email protected]>
Date:   Wed Mar 25 00:37:50 2026 +0530

    PCI: tegra194: Allow system suspend when the Endpoint link is not up
    
    [ Upstream commit c76f8eae7d4695b1176c4ea5eb93c17e16a20272 ]
    
    Host software initiates the L2 sequence. PCIe link is kept in L2 state
    during suspend. If Endpoint mode is enabled and the link is up, the
    software cannot proceed with suspend. However, when the PCIe Endpoint
    driver is probed, but the PCIe link is not up, Tegra can go into suspend
    state. So, allow system to suspend in this case.
    
    Fixes: de2bbf2b71bb ("PCI: tegra194: Don't allow suspend when Tegra PCIe is in EP mode")
    Signed-off-by: Vidya Sagar <[email protected]>
    Signed-off-by: Manikanta Maddireddy <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Reviewed-by: Jon Hunter <[email protected]>
    Reviewed-by: Vidya Sagar <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

PCI: tegra194: Disable direct speed change for Endpoint mode [+ + +]
Author: Vidya Sagar <[email protected]>
Date:   Wed Mar 25 00:37:48 2026 +0530

    PCI: tegra194: Disable direct speed change for Endpoint mode
    
    [ Upstream commit 976f6763f57970388bcd7118931f33f447916927 ]
    
    Pre-silicon simulation showed the controller operating in Endpoint mode
    initiating link speed change after completing Secondary Bus Reset. Ideally,
    the Root Port or the Switch Downstream Port should initiate the link speed
    change post SBR, not the Endpoint.
    
    So, as per the hardware team recommendation, disable direct speed change
    for the Endpoint mode to prevent it from initiating speed change after the
    physical layer link is up at Gen1, leaving speed change ownership with the
    host.
    
    Fixes: c57247f940e8 ("PCI: tegra: Add support for PCIe endpoint mode in Tegra194")
    Signed-off-by: Vidya Sagar <[email protected]>
    Signed-off-by: Manikanta Maddireddy <[email protected]>
    [mani: commit log]
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Reviewed-by: Jon Hunter <[email protected]>
    Reviewed-by: Vidya Sagar <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

PCI: tegra194: Disable LTSSM after transition to Detect on surprise link down [+ + +]
Author: Manikanta Maddireddy <[email protected]>
Date:   Wed Mar 25 00:37:44 2026 +0530

    PCI: tegra194: Disable LTSSM after transition to Detect on surprise link down
    
    [ Upstream commit 9fa0c242f8d7acf1b124d4462d18f4023573ac1c ]
    
    After the link reaches a Detect-related LTSSM state, disable LTSSM so it
    does not keep toggling between Polling and Detect. Do this by polling for
    the Detect state first, then clearing APPL_CTRL_LTSSM_EN in both
    tegra_pcie_dw_pme_turnoff() and pex_ep_event_pex_rst_assert().
    
    Fixes: 56e15a238d92 ("PCI: tegra: Add Tegra194 PCIe support")
    Signed-off-by: Vidya Sagar <[email protected]>
    Signed-off-by: Manikanta Maddireddy <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Reviewed-by: Jon Hunter <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

PCI: tegra194: Disable PERST# IRQ only in Endpoint mode [+ + +]
Author: Manikanta Maddireddy <[email protected]>
Date:   Wed Mar 25 00:37:46 2026 +0530

    PCI: tegra194: Disable PERST# IRQ only in Endpoint mode
    
    [ Upstream commit 40658a31b6e134169c648041efc84944c4c71dcd ]
    
    The PERST# GPIO interrupt is only registered when the controller is
    operating in Endpoint mode. In Root Port mode, the PERST# GPIO is
    configured as an output to control downstream devices, and no interrupt is
    registered for it.
    
    Currently, tegra_pcie_dw_stop_link() unconditionally calls disable_irq()
    on pex_rst_irq, which causes issues in Root Port mode where this IRQ is
    not registered.
    
    Fix this by only disabling the PERST# IRQ when operating in Endpoint mode,
    where the interrupt is actually registered and used to detect PERST#
    assertion/deassertion from the host.
    
    Fixes: c57247f940e8 ("PCI: tegra: Add support for PCIe endpoint mode in Tegra194")
    Signed-off-by: Manikanta Maddireddy <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Reviewed-by: Jon Hunter <[email protected]>
    Reviewed-by: Vidya Sagar <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

PCI: tegra194: Don't force the device into the D0 state before L2 [+ + +]
Author: Vidya Sagar <[email protected]>
Date:   Wed Mar 25 00:37:45 2026 +0530

    PCI: tegra194: Don't force the device into the D0 state before L2
    
    [ Upstream commit 71d9f67701e1affc82d18ca88ae798c5361beddf ]
    
    As per PCIe CEM r6.0, sec 2.3, the PCIe Endpoint device should be in D3cold
    to assert WAKE# pin. The previous workaround that forced downstream devices
    to D0 before taking the link to L2 cited PCIe r4.0, sec 5.2, "Link State
    Power Management"; however, that spec does not explicitly require putting
    the device into D0 and only indicates that power removal may be initiated
    without transitioning to D3hot.
    
    Remove the D0 workaround so that Endpoint devices can use wake
    functionality (WAKE# from D3). With some Endpoints the link may not enter
    L2 when they remain in D3, but the Root Port continues with the usual flow
    after PME timeout, so there is no functional issue.
    
    Fixes: 56e15a238d92 ("PCI: tegra: Add Tegra194 PCIe support")
    Signed-off-by: Vidya Sagar <[email protected]>
    Signed-off-by: Manikanta Maddireddy <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Reviewed-by: Vidya Sagar <[email protected]>
    Reviewed-by: Jon Hunter <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

PCI: tegra194: Fix polling delay for L2 state [+ + +]
Author: Vidya Sagar <[email protected]>
Date:   Wed Mar 25 00:37:42 2026 +0530

    PCI: tegra194: Fix polling delay for L2 state
    
    [ Upstream commit adaffed907f14f954096555665ad6af2ae724d83 ]
    
    As per PCIe r7.0, sec 5.3.3.2.1, after sending PME_Turn_Off message, Root
    Port should wait for 1-10 msec for PME_TO_Ack message. Currently, driver is
    polling for 10 msec with 1 usec delay which is aggressive.  Use existing
    macro PCIE_PME_TO_L2_TIMEOUT_US to poll for 10 msec with 1 msec delay.
    Since this function is used in non-atomic context only, use non-atomic poll
    function.
    
    Fixes: 56e15a238d92 ("PCI: tegra: Add Tegra194 PCIe support")
    Signed-off-by: Vidya Sagar <[email protected]>
    Signed-off-by: Manikanta Maddireddy <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Reviewed-by: Jon Hunter <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

PCI: tegra194: Increase LTSSM poll time on surprise link down [+ + +]
Author: Manikanta Maddireddy <[email protected]>
Date:   Wed Mar 25 00:37:43 2026 +0530

    PCI: tegra194: Increase LTSSM poll time on surprise link down
    
    [ Upstream commit 74dd8efe4d6cead433162147333af989a568aac7 ]
    
    On surprise link down, LTSSM state transits from L0 -> Recovery.RcvrLock ->
    Recovery.RcvrSpeed -> Gen1 Recovery.RcvrLock -> Detect. Recovery.RcvrLock
    and Recovery.RcvrSpeed transit times are 24 ms and 48 ms respectively, so
    the total time from L0 to Detect is ~96 ms. Increase the poll timeout to
    120 ms to account for this.
    
    While at it, add LTSSM state defines for Detect-related states and use them
    in the poll condition. Use readl_poll_timeout() instead of
    readl_poll_timeout_atomic() in tegra_pcie_dw_pme_turnoff() since that path
    runs in non-atomic context.
    
    Fixes: 56e15a238d92 ("PCI: tegra: Add Tegra194 PCIe support")
    Signed-off-by: Vidya Sagar <[email protected]>
    Signed-off-by: Manikanta Maddireddy <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Reviewed-by: Jon Hunter <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

PCI: tegra194: Rename 'root_bus' to 'root_port_bus' in tegra_pcie_downstream_dev_to_D0() [+ + +]
Author: Manivannan Sadhasivam <[email protected]>
Date:   Mon Sep 22 13:40:57 2025 +0530

    PCI: tegra194: Rename 'root_bus' to 'root_port_bus' in tegra_pcie_downstream_dev_to_D0()
    
    [ Upstream commit e1bd928479fb1fa60e9034b0fdb1ab9f3fa92f33 ]
    
    In tegra_pcie_downstream_dev_to_D0(), PCI devices are transitioned to D0
    state. For iterating over the devices, first the downstream bus of the Root
    Port is searched from the root bus. But the name of the variable that holds
    the Root Port downstream bus is named as 'root_bus', which is wrong.
    
    Rename the variable to 'root_port_bus'. Also, move the comment on 'bringing
    the devices to D0' to where the state is set exactly.
    
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Stable-dep-of: 71d9f67701e1 ("PCI: tegra194: Don't force the device into the D0 state before L2")
    Signed-off-by: Sasha Levin <[email protected]>

PCI: tegra194: Use devm_gpiod_get_optional() to parse "nvidia,refclk-select" [+ + +]
Author: Vidya Sagar <[email protected]>
Date:   Wed Mar 25 00:37:47 2026 +0530

    PCI: tegra194: Use devm_gpiod_get_optional() to parse "nvidia,refclk-select"
    
    [ Upstream commit f62bc7917de1374dce86a852ffba8baf9cb7a56a ]
    
    The GPIO DT property "nvidia,refclk-select", to select the PCIe reference
    clock is optional. Use devm_gpiod_get_optional() to get it.
    
    Fixes: c57247f940e8 ("PCI: tegra: Add support for PCIe endpoint mode in Tegra194")
    Signed-off-by: Vidya Sagar <[email protected]>
    Signed-off-by: Manikanta Maddireddy <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Reviewed-by: Jon Hunter <[email protected]>
    Reviewed-by: Vidya Sagar <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

PCI: tegra194: Use DWC IP core version [+ + +]
Author: Manikanta Maddireddy <[email protected]>
Date:   Wed Mar 25 00:37:52 2026 +0530

    PCI: tegra194: Use DWC IP core version
    
    [ Upstream commit ea60ca067f0f098043610c96a915d162113c1aac ]
    
    Tegra194 PCIe driver used custom version numbers to detect Tegra194 and
    Tegra234 IPs. With version detect logic added, version check results in
    mismatch warnings:
    
      tegra194-pcie 14100000.pcie: Versions don't match (0000562a != 3536322a)
    
    Use HW version numbers which match to PORT_LOGIC.PCIE_VERSION_OFF in
    Tegra194 driver to avoid these kernel warnings.
    
    Fixes: a54e19073718 ("PCI: tegra194: Add Tegra234 PCIe support")
    Signed-off-by: Manikanta Maddireddy <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Reviewed-by: Jon Hunter <[email protected]>
    Reviewed-by: Vidya Sagar <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
PCMCIA: Fix garbled log messages for KERN_CONT [+ + +]
Author: René Rebe <[email protected]>
Date:   Wed Nov 26 17:42:56 2025 +0100

    PCMCIA: Fix garbled log messages for KERN_CONT
    
    [ Upstream commit bfeaa6814bd3f9a1f6d525b3b35a03b9a0368961 ]
    
    For years the PCMCIA info messages are messed up by superfluous
    newlines. While f2e6cf76751d ("pcmcia: Convert dev_printk to
    dev_<level>") converted the code to pr_cont(), dev_info enforces a \n
    via vprintk_store setting LOG_NEWLINE, breaking subsequent pr_cont.
    
    Fix by logging the device name manually to allow pr_cont to work for
    more readable and not \n distorted logs.
    
    Fixes: f2e6cf76751d ("pcmcia: Convert dev_printk to dev_<level>")
    Signed-off-by: René Rebe <[email protected]>
    Signed-off-by: Dominik Brodowski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
perf branch: Avoid incrementing NULL [+ + +]
Author: Ian Rogers <[email protected]>
Date:   Thu Mar 12 15:31:31 2026 -0700

    perf branch: Avoid incrementing NULL
    
    [ Upstream commit c969a9d7bbf46f983c4a48566b3b2f7340b02296 ]
    
    If the entry is NULL the value is meaningless so early return NULL to
    avoid an increment of NULL. This was happening in calls from
    has_stitched_lbr when running the "perf record LBR tests". The return
    value isn't used in that case, so returning NULL as no effect.
    
    Fixes: 42bbabed09ce ("perf tools: Add hw_idx in struct branch_stack")
    Signed-off-by: Ian Rogers <[email protected]>
    Signed-off-by: Namhyung Kim <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
perf expr: Return -EINVAL for syntax error in expr__find_ids() [+ + +]
Author: Leo Yan <[email protected]>
Date:   Thu Apr 2 17:04:47 2026 +0100

    perf expr: Return -EINVAL for syntax error in expr__find_ids()
    
    [ Upstream commit 3a61fd866ef9aaa1d3158b460f852b74a2df07f4 ]
    
    expr__find_ids() propagates the parser return value directly.  For syntax
    errors, the parser can return a positive value, but callers treat it as
    success, e.g., for below case on Arm64 platform:
    
      metric expr 100 * (STALL_SLOT_BACKEND / (CPU_CYCLES * #slots) - BR_MIS_PRED * 3 / CPU_CYCLES) for backend_bound
      parsing metric: 100 * (STALL_SLOT_BACKEND / (CPU_CYCLES * #slots) - BR_MIS_PRED * 3 / CPU_CYCLES)
      Failure to read '#slots' literal: #slots = nan
      syntax error
    
    Convert positive parser returns in expr__find_ids() to -EINVAL, as a
    result, the error value will be respected by callers.
    
    Before:
    
      perf stat -C 5
      Failure to read '#slots'Failure to read '#slots'Failure to read '#slots'Failure to read '#slots'Segmentation fault
    
    After:
    
      perf stat -C 5
      Failure to read '#slots'Cannot find metric or group `Default'
    
    Fixes: ded80bda8bc9 ("perf expr: Migrate expr ids table to a hashmap")
    Signed-off-by: Leo Yan <[email protected]>
    Reviewed-by: Ian Rogers <[email protected]>
    Signed-off-by: Namhyung Kim <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
perf lock: Fix option value type in parse_max_stack [+ + +]
Author: Ian Rogers <[email protected]>
Date:   Thu Mar 19 16:33:48 2026 -0700

    perf lock: Fix option value type in parse_max_stack
    
    [ Upstream commit cfaade34b52aa1ec553044255702c4b31b57c005 ]
    
    The value is a void* and the address of an int, max_stack_depth, is
    set up in the perf lock options. The parse_max_stack function treats
    the int* as a long*, make this more correct by declaring the value to
    be an int*.
    
    Fixes: 0a277b622670 ("perf lock contention: Check --max-stack option")
    Signed-off-by: Ian Rogers <[email protected]>
    Signed-off-by: Namhyung Kim <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
perf util: Kill die() prototype, dead for a long time [+ + +]
Author: Arnaldo Carvalho de Melo <[email protected]>
Date:   Wed Apr 8 14:31:57 2026 -0300

    perf util: Kill die() prototype, dead for a long time
    
    [ Upstream commit e5cce1b9c82fbd48e2f1f7a25a9fad8ee228176f ]
    
    In fef2a735167a827a ("perf tools: Kill die()") the die() function was
    removed, but not the prototype in util.h, now when building with
    LIBPERL=1, during a 'make -C tools/perf build-test' routine test, it is
    failing as perl likes die() calls and then this clashes with this
    remnant, remove it.
    
    Fixes: fef2a735167a827a ("perf tools: Kill die()")
    Reviewed-by: Ian Rogers <[email protected]>
    Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
    Signed-off-by: Namhyung Kim <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
perf: tools: cs-etm: Fix print issue for Coresight debug in ETE/TRBE trace [+ + +]
Author: Mike Leach <[email protected]>
Date:   Wed Mar 18 10:36:39 2026 +0000

    perf: tools: cs-etm: Fix print issue for Coresight debug in ETE/TRBE trace
    
    [ Upstream commit 6c478e7b3eba3f387a2d6c749e3e3ee0f8ad1c53 ]
    
    Building perf with CORESIGHT=1 and the optional CSTRACE_RAW=1 enables
    additional debug printing of raw trace data when using command:-
    perf report --dump.
    
    This raw trace prints the CoreSight formatted trace frames, which may be
    used to investigate suspected issues with trace quality / corruption /
    decode.
    
    These frames are not present in ETE + TRBE trace.
    This fix removes the unnecessary call to print these frames.
    
    This fix also rationalises implementation - original code had helper
    function that unnecessarily repeated initialisation calls that had
    already been made.
    
    Due to an addtional fault with the OpenCSD library, this call when ETE/TRBE
    are being decoded will cause a segfault in perf. This fix also prevents
    that problem for perf using older (<= 1.8.0 version) OpenCSD libraries.
    
    Fixes: 68ffe3902898 ("perf tools: Add decoder mechanic to support dumping trace data")
    Reported-by: Leo Yan <[email protected]>
    Signed-off-by: Mike Leach <[email protected]>
    Signed-off-by: Namhyung Kim <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
pinctrl: abx500: Fix type of 'argument' variable [+ + +]
Author: Yu-Chun Lin <[email protected]>
Date:   Fri Mar 20 23:15:06 2026 +0800

    pinctrl: abx500: Fix type of 'argument' variable
    
    [ Upstream commit 34006f77890d050e6d80cbee365b5d703c1140b4 ]
    
    The argument variable is assigned the return value of
    pinconf_to_config_argument(), which returns a u32. Change its type from
    enum pin_config_param to unsigned int to correctly store the configuration
    argument.
    
    Fixes: 03b054e9696c ("pinctrl: Pass all configs to driver on pin_config_set()")
    Signed-off-by: Yu-Chun Lin <[email protected]>
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

pinctrl: cy8c95x0: Avoid returning positive values to user space [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Fri Feb 27 17:43:35 2026 +0100

    pinctrl: cy8c95x0: Avoid returning positive values to user space
    
    [ Upstream commit 5ad32c3607cf241a1a2680cabd64cbcd757227aa ]
    
    When probe fails due to unclear interrupt status register, it returns
    a positive number instead of the proper error code. Fix this accordingly.
    
    Fixes: e6cbbe42944d ("pinctrl: Add Cypress cy8c95x0 support")
    Reported-by: kernel test robot <[email protected]>
    Reported-by: Dan Carpenter <[email protected]>
    Closes: https://lore.kernel.org/r/[email protected]/
    Signed-off-by: Andy Shevchenko <[email protected]>
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

pinctrl: cy8c95x0: remove duplicate error message [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Mon Feb 23 19:06:53 2026 +0100

    pinctrl: cy8c95x0: remove duplicate error message
    
    [ Upstream commit 970dacb3b9f0fedbbbcfd7dbf1f4f22340b3f359 ]
    
    The pin control core is covered to report any error via message.
    The devm_request_threaded_irq() already prints an error message.
    Remove the duplicates.
    
    While at it, drop the info message as the same information about
    an IRQ in use can be retrieved differently.
    
    Signed-off-by: Andy Shevchenko <[email protected]>
    Signed-off-by: Linus Walleij <[email protected]>
    Stable-dep-of: 5ad32c3607cf ("pinctrl: cy8c95x0: Avoid returning positive values to user space")
    Signed-off-by: Sasha Levin <[email protected]>

pinctrl: cy8c95x0: Unify messages with help of dev_err_probe() [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Mon Feb 23 19:06:54 2026 +0100

    pinctrl: cy8c95x0: Unify messages with help of dev_err_probe()
    
    [ Upstream commit 014884732095b982412d13d3220c3fe8483b9b3e ]
    
    Unify error messages that might appear during probe phase by
    switching to use dev_err_probe().
    
    Signed-off-by: Andy Shevchenko <[email protected]>
    Signed-off-by: Linus Walleij <[email protected]>
    Stable-dep-of: 5ad32c3607cf ("pinctrl: cy8c95x0: Avoid returning positive values to user space")
    Signed-off-by: Sasha Levin <[email protected]>

pinctrl: pinctrl-pic32: Fix resource leak [+ + +]
Author: Ethan Tidmore <[email protected]>
Date:   Fri Feb 27 15:56:23 2026 -0600

    pinctrl: pinctrl-pic32: Fix resource leak
    
    [ Upstream commit fe5560688f3ba98364c7de7b4f8dc240ffd1ff75 ]
    
    Fix three possible resource leaks by using the devres version of
    clk_prepare_enable(). Also, update error message accordingly.
    
    Detected by Smatch:
    drivers/pinctrl/pinctrl-pic32.c:2211 pic32_pinctrl_probe() warn:
    'pctl->clk' from clk_prepare_enable() not released on lines: 2208.
    
    drivers/pinctrl/pinctrl-pic32.c:2274 pic32_gpio_probe() warn:
    'bank->clk' from clk_prepare_enable() not released on lines: 2264,2272.
    
    Fixes: 2ba384e6c3810 ("pinctrl: pinctrl-pic32: Add PIC32 pin control driver")
    Signed-off-by: Ethan Tidmore <[email protected]>
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
platform/chrome: chromeos_tbmc: Drop wakeup source on remove [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Thu Mar 5 20:47:03 2026 +0100

    platform/chrome: chromeos_tbmc: Drop wakeup source on remove
    
    [ Upstream commit 5d441a4bc93642ed6f41da87327a39946b4e1455 ]
    
    The wakeup source added by device_init_wakeup() in chromeos_tbmc_add()
    needs to be dropped during driver removal, so add a .remove() callback
    to the driver for this purpose.
    
    Fixes: 0144c00ed86b ("platform/chrome: chromeos_tbmc: Report wake events")
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Tzung-Bi Shih <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
platform/surface: surfacepro3_button: Drop wakeup source on remove [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Wed Mar 4 19:54:08 2026 +0100

    platform/surface: surfacepro3_button: Drop wakeup source on remove
    
    [ Upstream commit 1410a228ab2d36fe2b383415a632ae12048d4f3a ]
    
    The wakeup source added by device_init_wakeup() in surface_button_add()
    needs to be dropped during driver removal, so update the driver to do
    that.
    
    Fixes: 19351f340765 ("platform/x86: surfacepro3: Support for wakeup from suspend-to-idle")
    Signed-off-by: Rafael J. Wysocki <[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: dell-wmi-sysman: bound enumeration string aggregation [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Wed Apr 8 08:38:21 2026 +0800

    platform/x86: dell-wmi-sysman: bound enumeration string aggregation
    
    [ Upstream commit 3c34471c26abc52a37f5ad90949e2e4b8027eb14 ]
    
    populate_enum_data() aggregates firmware-provided value-modifier
    and possible-value strings into fixed 512-byte struct members.
    The current code bounds each individual source string but then
    appends every string and separator with raw strcat() and no
    remaining-space check.
    
    Switch the aggregation loops to a bounded append helper and
    reject enumeration packages whose combined strings do not fit
    in the destination buffers.
    
    Fixes: e8a60aa7404b ("platform/x86: Introduce support for Systems Management Driver over WMI for Dell Systems")
    Signed-off-by: Pengpeng Hou <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [ij: add include]
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

platform/x86: dell_rbu: avoid uninit value usage in packet_size_write() [+ + +]
Author: Fedor Pchelkin <[email protected]>
Date:   Fri Apr 3 16:42:39 2026 +0300

    platform/x86: dell_rbu: avoid uninit value usage in packet_size_write()
    
    [ Upstream commit f8fd138c2363c0e2d3235c32bfb4fb5c6474e4ae ]
    
    Ensure the temp value has been properly parsed from the user-provided
    buffer and initialized to be used in later operations.  While at it,
    prefer a convenient kstrtoul() helper.
    
    Found by Linux Verification Center (linuxtesting.org) with Svace static
    analysis tool.
    
    Fixes: ad6ce87e5bd4 ("[PATCH] dell_rbu: changes in packet update mechanism")
    Signed-off-by: Fedor Pchelkin <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [ij: add include]
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

platform/x86: panasonic-laptop: Fix OPTD notifier registration and cleanup [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Fri Mar 20 11:31:54 2026 +0100

    platform/x86: panasonic-laptop: Fix OPTD notifier registration and cleanup
    
    [ Upstream commit 8baeff2c1d33dad8572216c6ad3a7425852507d4 ]
    
    An ACPI notify handler is leaked if device_create_file() returns an
    error in acpi_pcc_hotkey_add().
    
    Also, it is pointless to call pcc_unregister_optd_notifier() in
    acpi_pcc_hotkey_remove() if pcc->platform is NULL and it is better
    to arrange the cleanup code in that function in the same order as
    the rollback code in acpi_pcc_hotkey_add().
    
    Address the above by placing the pcc_register_optd_notifier() call in
    acpi_pcc_hotkey_add() after the device_create_file() return value
    check and placing the pcc_unregister_optd_notifier() call in
    acpi_pcc_hotkey_remove() right before the device_remove_file() call.
    
    Fixes: d5a81d8e864b ("platform/x86: panasonic-laptop: Add support for optical driver power in Y and W series")
    Signed-off-by: Rafael J. Wysocki <[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]>

 
pmdomain: core: Fix detach procedure for virtual devices in genpd [+ + +]
Author: Ulf Hansson <[email protected]>
Date:   Fri May 15 11:20:34 2026 -0400

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

pmdomain: imx: scu-pd: Fix device_node reference leak during ->probe() [+ + +]
Author: Felix Gu <[email protected]>
Date:   Wed Jan 21 22:17:17 2026 +0800

    pmdomain: imx: scu-pd: Fix device_node reference leak during ->probe()
    
    [ Upstream commit c8e9b6a55702be6c6d034e973d519c52c3848415 ]
    
    When calling of_parse_phandle_with_args(), the caller is responsible
    to call of_node_put() to release the reference of device node.
    In imx_sc_pd_get_console_rsrc(), it does not release the reference.
    
    Fixes: 893cfb99734f ("firmware: imx: scu-pd: do not power off console domain")
    Signed-off-by: Felix Gu <[email protected]>
    Reviewed-by: Peng Fan <[email protected]>
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

pmdomain: ti: omap_prm: Fix a reference leak on device node [+ + +]
Author: Felix Gu <[email protected]>
Date:   Fri Jan 16 20:27:47 2026 +0800

    pmdomain: ti: omap_prm: Fix a reference leak on device node
    
    [ Upstream commit 44c28e1c52764fef6dd1c1ada3a248728812e67f ]
    
    When calling of_parse_phandle_with_args(), the caller is responsible
    to call of_node_put() to release the reference of device node.
    In omap_prm_domain_attach_dev, it does not release the reference.
    
    Fixes: 58cbff023bfa ("soc: ti: omap-prm: Add basic power domain support")
    Signed-off-by: Felix Gu <[email protected]>
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
powerpc/crash: fix backup region offset update to elfcorehdr [+ + +]
Author: Sourabh Jain <[email protected]>
Date:   Thu Mar 12 14:00:49 2026 +0530

    powerpc/crash: fix backup region offset update to elfcorehdr
    
    [ Upstream commit 789335cacdf37da93bb7c70322dff8c7e82881df ]
    
    update_backup_region_phdr() in file_load_64.c iterates over all the
    program headers in the kdump kernel’s elfcorehdr and updates the
    p_offset of the program header whose physical address starts at 0.
    
    However, the loop logic is incorrect because the program header pointer
    is not updated during iteration. Since elfcorehdr typically contains
    PT_NOTE entries first, the PT_LOAD program header with physical address
    0 is never reached. As a result, its p_offset is not updated to point to
    the backup region.
    
    Because of this behavior, the capture kernel exports the first 64 KB of
    the crashed kernel’s memory at offset 0, even though that memory
    actually lives in the backup region. When a crash happens, purgatory
    copies the first 64 KB of the crashed kernel’s memory into the backup
    region so the capture kernel can safely use it.
    
    This has not caused problems so far because the first 64 KB is usually
    identical in both the crashed and capture kernels. However, this is
    just an assumption and is not guaranteed to always hold true.
    
    Fix update_backup_region_phdr() to correctly update the p_offset of the
    program header with a starting physical address of 0 by correcting the
    logic used to iterate over the program headers.
    
    Fixes: cb350c1f1f86 ("powerpc/kexec_file: Prepare elfcore header for crashing kernel")
    Reviewed-by: Aditya Gupta <[email protected]>
    Signed-off-by: Sourabh Jain <[email protected]>
    Reviewed-by: Hari Bathini <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
powerpc/warp: Fix error handling in pika_dtm_thread [+ + +]
Author: Ma Ke <[email protected]>
Date:   Sun Nov 16 10:44:11 2025 +0800

    powerpc/warp: Fix error handling in pika_dtm_thread
    
    commit 108d7f951271cbd36ca36efc5e5d106966f5180c upstream.
    
    pika_dtm_thread() acquires client through of_find_i2c_device_by_node()
    but fails to release it in error handling path. This could result in a
    reference count leak, preventing proper cleanup and potentially
    leading to resource exhaustion. Add put_device() to release the
    reference in the error handling path.
    
    Found by code review.
    
    Cc: [email protected]
    Fixes: 3984114f0562 ("powerpc/warp: Platform fix for i2c change")
    Signed-off-by: Ma Ke <[email protected]>
    Reviewed-by: Christophe Leroy <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ppp: require CAP_NET_ADMIN in target netns for unattached ioctls [+ + +]
Author: Taegu Ha <[email protected]>
Date:   Thu Apr 9 16:11:15 2026 +0900

    ppp: require CAP_NET_ADMIN in target netns for unattached ioctls
    
    [ Upstream commit 2bb6379416fd19f44c3423a00bfd8626259f6067 ]
    
    /dev/ppp open is currently authorized against file->f_cred->user_ns,
    while unattached administrative ioctls operate on current->nsproxy->net_ns.
    
    As a result, a local unprivileged user can create a new user namespace
    with CLONE_NEWUSER, gain CAP_NET_ADMIN only in that new user namespace,
    and still issue PPPIOCNEWUNIT, PPPIOCATTACH, or PPPIOCATTCHAN against
    an inherited network namespace.
    
    Require CAP_NET_ADMIN in the user namespace that owns the target network
    namespace before handling unattached PPP administrative ioctls.
    
    This preserves normal pppd operation in the network namespace it is
    actually privileged in, while rejecting the userns-only inherited-netns
    case.
    
    Fixes: 273ec51dd7ce ("net: ppp_generic - introduce net-namespace functionality v2")
    Signed-off-by: Taegu Ha <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
pppoe: drop PFC frames [+ + +]
Author: Qingfang Deng <[email protected]>
Date:   Wed Apr 15 10:24:51 2026 +0800

    pppoe: drop PFC frames
    
    [ Upstream commit cc1ff87bce1ccd38410ab10960f576dcd17db679 ]
    
    RFC 2516 Section 7 states that Protocol Field Compression (PFC) is NOT
    RECOMMENDED for PPPoE. In practice, pppd does not support negotiating
    PFC for PPPoE sessions, and the current PPPoE driver assumes an
    uncompressed (2-byte) protocol field. However, the generic PPP layer
    function ppp_input() is not aware of the negotiation result, and still
    accepts PFC frames.
    
    If a peer with a broken implementation or an attacker sends a frame with
    a compressed (1-byte) protocol field, the subsequent PPP payload is
    shifted by one byte. This causes the network header to be 4-byte
    misaligned, which may trigger unaligned access exceptions on some
    architectures.
    
    To reduce the attack surface, drop PPPoE PFC frames. Introduce
    ppp_skb_is_compressed_proto() helper function to be used in both
    ppp_generic.c and pppoe.c to avoid open-coding.
    
    Fixes: 7fb1b8ca8fa1 ("ppp: Move PFC decompression to PPP generic layer")
    Signed-off-by: Qingfang Deng <[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]>

 
pstore/ram: fix resource leak when ioremap() fails [+ + +]
Author: Cole Leavitt <[email protected]>
Date:   Wed Feb 25 16:54:06 2026 -0700

    pstore/ram: fix resource leak when ioremap() fails
    
    [ Upstream commit 2ddb69f686ef7a621645e97fc7329c50edf5d0e5 ]
    
    In persistent_ram_iomap(), ioremap() or ioremap_wc() may return NULL on
    failure. Currently, if this happens, the function returns NULL without
    releasing the memory region acquired by request_mem_region().
    
    This leads to a resource leak where the memory region remains reserved
    but unusable.
    
    Additionally, the caller persistent_ram_buffer_map() handles NULL
    correctly by returning -ENOMEM, but without this check, a NULL return
    combined with request_mem_region() succeeding leaves resources in an
    inconsistent state.
    
    This is the ioremap() counterpart to commit 05363abc7625 ("pstore:
    ram_core: fix incorrect success return when vmap() fails") which fixed
    a similar issue in the vmap() path.
    
    Fixes: 404a6043385d ("staging: android: persistent_ram: handle reserving and mapping memory")
    Signed-off-by: Cole Leavitt <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Kees Cook <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
quota: Fix race of dquot_scan_active() with quota deactivation [+ + +]
Author: Jan Kara <[email protected]>
Date:   Fri Feb 27 14:22:16 2026 +0100

    quota: Fix race of dquot_scan_active() with quota deactivation
    
    [ Upstream commit e93ab401da4b2e2c1b8ef2424de2f238d51c8b2d ]
    
    dquot_scan_active() can race with quota deactivation in
    quota_release_workfn() like:
    
      CPU0 (quota_release_workfn)         CPU1 (dquot_scan_active)
      ==============================      ==============================
      spin_lock(&dq_list_lock);
      list_replace_init(
        &releasing_dquots, &rls_head);
        /* dquot X on rls_head,
           dq_count == 0,
           DQ_ACTIVE_B still set */
      spin_unlock(&dq_list_lock);
      synchronize_srcu(&dquot_srcu);
                                          spin_lock(&dq_list_lock);
                                          list_for_each_entry(dquot,
                                              &inuse_list, dq_inuse) {
                                            /* finds dquot X */
                                            dquot_active(X) -> true
                                            atomic_inc(&X->dq_count);
                                          }
                                          spin_unlock(&dq_list_lock);
      spin_lock(&dq_list_lock);
      dquot = list_first_entry(&rls_head);
      WARN_ON_ONCE(atomic_read(&dquot->dq_count));
    
    The problem is not only a cosmetic one as under memory pressure the
    caller of dquot_scan_active() can end up working on freed dquot.
    
    Fix the problem by making sure the dquot is removed from releasing list
    when we acquire a reference to it.
    
    Fixes: 869b6ea1609f ("quota: Fix slow quotaoff")
    Reported-by: Sam Sun <[email protected]>
    Link: https://lore.kernel.org/all/CAEkJfYPTt3uP1vAYnQ5V2ZWn5O9PLhhGi5HbOcAzyP9vbXyjeg@mail.gmail.com
    Signed-off-by: Jan Kara <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
r8152: fix incorrect register write to USB_UPHY_XTAL [+ + +]
Author: Chih Kai Hsu <[email protected]>
Date:   Thu Mar 26 15:39:23 2026 +0800

    r8152: fix incorrect register write to USB_UPHY_XTAL
    
    [ Upstream commit 48afd5124fd6129c46fd12cb06155384b1c4a0c4 ]
    
    The old code used ocp_write_byte() to clear the OOBS_POLLING bit
    (BIT(8)) in the USB_UPHY_XTAL register, but this doesn't correctly
    clear a bit in the upper byte of the 16-bit register.
    
    Fix this by using ocp_write_word() instead.
    
    Fixes: 195aae321c82 ("r8152: support new chips")
    Signed-off-by: Chih Kai Hsu <[email protected]>
    Reviewed-by: Hayes Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/core: Prefer NLA_NUL_STRING [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Mon Mar 30 14:27:39 2026 +0200

    RDMA/core: Prefer NLA_NUL_STRING
    
    [ Upstream commit 6ed3d14fc45d3da6025e7fe4a6a09066856698e2 ]
    
    These attributes are evaluated as c-string (passed to strcmp), but
    NLA_STRING doesn't check for the presence of a \0 terminator.
    
    Either this needs to switch to nla_strcmp() and needs to adjust printf fmt
    specifier to not use plain %s, or this needs to use NLA_NUL_STRING.
    
    As the code has been this way for long time, it seems to me that userspace
    does include the terminating nul, even tough its not enforced so far, and
    thus NLA_NUL_STRING use is the simpler solution.
    
    Fixes: 30dc5e63d6a5 ("RDMA/core: Add support for iWARP Port Mapper user space service")
    Link: https://patch.msgid.link/r/[email protected]
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/mana: Fix error unwind in mana_ib_create_qp_rss() [+ + +]
Author: Jason Gunthorpe <[email protected]>
Date:   Wed May 20 07:47:30 2026 -0400

    RDMA/mana: Fix error unwind in mana_ib_create_qp_rss()
    
    [ Upstream commit 6aaa978c6b6218cfac15fe1dab17c76fe229ce3f ]
    
    Sashiko points out that mana_ib_cfg_vport_steering() is leaked, the normal
    destroy path cleans it up.
    
    Cc: [email protected]
    Fixes: 0266a177631d ("RDMA/mana_ib: Add a driver for Microsoft Azure Network Adapter")
    Link: https://sashiko.dev/#/patchset/0-v1-e911b76a94d1%2B65d95-rdma_udata_rep_jgg%40nvidia.com?part=4
    Link: https://patch.msgid.link/r/[email protected]
    Reviewed-by: Long Li <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

RDMA/mana: Validate rx_hash_key_len [+ + +]
Author: Jason Gunthorpe <[email protected]>
Date:   Sun May 17 23:28:24 2026 -0400

    RDMA/mana: Validate rx_hash_key_len
    
    [ Upstream commit 6dd2d4ad9c8429523b1c220c5132bd551c006425 ]
    
    Sashiko points out that rx_hash_key_len comes from a uAPI structure and is
    blindly passed to memcpy, allowing the userspace to trash kernel
    memory. Bounds check it so the memcpy cannot overflow.
    
    Cc: [email protected]
    Fixes: 0266a177631d ("RDMA/mana_ib: Add a driver for Microsoft Azure Network Adapter")
    Link: https://sashiko.dev/#/patchset/0-v2-1c49eeb88c48%2B91-rdma_udata_rep_jgg%40nvidia.com?part=1
    Link: https://patch.msgid.link/r/[email protected]
    Reviewed-by: Long Li <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    [ kept the stable branch's existing `req_buf_size` calculation instead of upstream's `struct_size(req, indir_tab, ...)` form ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "crypto: nx - fix bounce buffer leaks in nx842_crypto_{alloc,free}_ctx" [+ + +]
Author: Sasha Levin <[email protected]>
Date:   Mon May 18 10:51:32 2026 -0400

    Revert "crypto: nx - fix bounce buffer leaks in nx842_crypto_{alloc,free}_ctx"
    
    This reverts commit 6923cde8dc1d501e79b312139819c88b54463803.
    
    Signed-off-by: Sasha Levin <[email protected]>

Revert "crypto: nx - fix context leak in nx842_crypto_free_ctx" [+ + +]
Author: Sasha Levin <[email protected]>
Date:   Mon May 18 10:51:32 2026 -0400

    Revert "crypto: nx - fix context leak in nx842_crypto_free_ctx"
    
    This reverts commit b94588f5a69718be2c942f4a851125f655e4e819.
    
    Signed-off-by: Sasha Levin <[email protected]>

Revert "crypto: nx - Migrate to scomp API" [+ + +]
Author: Sasha Levin <[email protected]>
Date:   Mon May 18 10:51:32 2026 -0400

    Revert "crypto: nx - Migrate to scomp API"
    
    This reverts commit 268ae55a4c4fbff3ff54f92a4642f497da814f49.
    
    Signed-off-by: Sasha Levin <[email protected]>

 
rtc: abx80x: Disable alarm feature if no interrupt attached [+ + +]
Author: Anthony Pighin (Nokia) <[email protected]>
Date:   Tue Nov 25 18:00:10 2025 +0000

    rtc: abx80x: Disable alarm feature if no interrupt attached
    
    [ Upstream commit 0fedce7244e4b85c049ce579c87e298a1b0b811d ]
    
    Commit 795cda8338ea ("rtc: interface: Fix long-standing race when setting
    alarm") exposed an issue where the rtc-abx80x driver does not clear the
    alarm feature bit, but instead relies on the set_alarm operation to return
    invalid.
    
    For example, when a RTC_UIE_ON ioctl is handled, it should abort at the
    feature validation. Instead, it proceeds to the rtc_timer_enqueue(),
    which used to return an error from the set_alarm call. However,
    following the race condition handling, which likely should not be
    discarding predecing errors, a success condition is returned to the
    ioctl() caller. This results in (for example):
        hwclock: select() to /dev/rtc0 to wait for clock tick timed out
    
    Notwithstanding the validity of the race condition handling, if an interrupt
    wasn't specified, or could not be attached, the driver should clear the
    alarm feature bit.
    
    Fixes: 718a820a303c ("rtc: abx80x: add alarm support")
    Signed-off-by: Anthony Pighin <[email protected]>
    Link: https://patch.msgid.link/BN0PR08MB69510928028C933749F4139383D1A@BN0PR08MB6951.namprd08.prod.outlook.com
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
s390/bpf: Zero-extend bpf prog return values and kfunc arguments [+ + +]
Author: Ilya Leoshkevich <[email protected]>
Date:   Fri Mar 13 18:46:25 2026 +0100

    s390/bpf: Zero-extend bpf prog return values and kfunc arguments
    
    [ Upstream commit 202e42e4aa890172366354b233c42c73107a3f59 ]
    
    s390x ABI requires callers to zero-extend unsigned arguments and
    sign-extend signed arguments, and callees to zero-extend unsigned
    return values and sign-extend signed return values.
    
    s390 BPF JIT currently implements only sign extension. Fix this
    omission and implement zero extension too.
    
    Fixes: 528eb2cb87bc ("s390/bpf: Implement arch_prepare_bpf_trampoline()")
    Reported-by: Hari Bathini <[email protected]>
    Closes: https://lore.kernel.org/bpf/[email protected]/
    Signed-off-by: Ilya Leoshkevich <[email protected]>
    Tested-by: Ihor Solodrai <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
s390/cio: convert sprintf()/snprintf() to sysfs_emit() [+ + +]
Author: Li Zhijian <[email protected]>
Date:   Thu Mar 14 17:52:09 2024 +0800

    s390/cio: convert sprintf()/snprintf() to sysfs_emit()
    
    [ Upstream commit aaebea959efb2cccd870990f1b6016ff324b0fb6 ]
    
    Per filesystems/sysfs.rst, show() should only use sysfs_emit()
    or sysfs_emit_at() when formatting the value to be returned to user space.
    
    coccinelle complains that there are still a couple of functions that use
    snprintf(). Convert them to sysfs_emit().
    
    Generally, this patch is generated by
    make coccicheck M=<path/to/file> MODE=patch \
    COCCI=scripts/coccinelle/api/device_attr_show.cocci
    
    No functional change intended.
    
    Cc: Vineeth Vijayan <[email protected]>
    Cc: Peter Oberparleiter <[email protected]>
    Signed-off-by: Li Zhijian <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Heiko Carstens <[email protected]>
    Signed-off-by: Alexander Gordeev <[email protected]>
    Stable-dep-of: ac4d8bb6e2e1 ("s390/cio: use generic driver_override infrastructure")
    Signed-off-by: Sasha Levin <[email protected]>

s390/cio: make sch->lock spinlock pointer a member [+ + +]
Author: Halil Pasic <[email protected]>
Date:   Wed Nov 1 12:57:51 2023 +0100

    s390/cio: make sch->lock spinlock pointer a member
    
    [ Upstream commit b8fa3e90965eeb2f83aa637ba0d0d6fd2a524004 ]
    
    The lock member of struct subchannel used to be a spinlock, but became
    a pointer to a spinlock with commit 2ec2298412e1 ("[S390] subchannel
    lock conversion."). This might have been justified back then, but with
    the current state of affairs, there is no reason to manage a separate
    spinlock object.
    
    Let's simplify things and pull the spinlock back into struct subchannel.
    
    Signed-off-by: Halil Pasic <[email protected]>
    Reviewed-by: Vineeth Vijayan <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vasily Gorbik <[email protected]>
    Signed-off-by: Alexander Gordeev <[email protected]>
    Stable-dep-of: ac4d8bb6e2e1 ("s390/cio: use generic driver_override infrastructure")
    Signed-off-by: Sasha Levin <[email protected]>

s390/cio: use generic driver_override infrastructure [+ + +]
Author: Danilo Krummrich <[email protected]>
Date:   Tue Mar 24 01:59:13 2026 +0100

    s390/cio: use generic driver_override infrastructure
    
    [ Upstream commit ac4d8bb6e2e13e8684a76ea48d13ebaaaf5c24c4 ]
    
    When a driver is probed through __driver_attach(), the bus' match()
    callback is called without the device lock held, thus accessing the
    driver_override field without a lock, which can cause a UAF.
    
    Fix this by using the driver-core driver_override infrastructure taking
    care of proper locking internally.
    
    Note that calling match() from __driver_attach() without the device lock
    held is intentional. [1]
    
    Link: https://lore.kernel.org/driver-core/[email protected]/ [1]
    Reported-by: Gui-Dong Han <[email protected]>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=220789
    Fixes: ebc3d1791503 ("s390/cio: introduce driver_override on the css bus")
    Reviewed-by: Vineeth Vijayan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Danilo Krummrich <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
scsi: sg: Fix sysctl sg-big-buff register during sg_init() [+ + +]
Author: Yang Erkun <[email protected]>
Date:   Tue Jan 27 14:20:42 2026 +0800

    scsi: sg: Fix sysctl sg-big-buff register during sg_init()
    
    [ Upstream commit 3033c471aaf675254efaa0da431e95d91a104b41 ]
    
    Commit 26d1c80fd61e ("scsi/sg: move sg-big-buff sysctl to scsi/sg.c") made
    a mistake. sysctl sg-big-buff was not created because the call to
    register_sg_sysctls() was placed on the wrong code path.
    
    Fixes: 26d1c80fd61e ("scsi/sg: move sg-big-buff sysctl to scsi/sg.c")
    Signed-off-by: Yang Erkun <[email protected]>
    Reviewed-by: Bart Van Assche <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: sg: Make sg_sysfs_class constant [+ + +]
Author: Ricardo B. Marliere <[email protected]>
Date:   Sat Mar 2 13:47:22 2024 -0300

    scsi: sg: Make sg_sysfs_class constant
    
    [ Upstream commit f1fb41765d0bff77514ffeaef37bbb45608f6c62 ]
    
    Since commit 43a7206b0963 ("driver core: class: make class_register() take
    a const *"), the driver core allows for struct class to be in read-only
    memory, so move the sg_sysfs_class structure to be declared at build time
    placing it into read-only memory, instead of having to be dynamically
    allocated at boot time.
    
    Cc: Greg Kroah-Hartman <[email protected]>
    Suggested-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Ricardo B. Marliere <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Stable-dep-of: 3033c471aaf6 ("scsi: sg: Fix sysctl sg-big-buff register during sg_init()")
    Signed-off-by: Sasha Levin <[email protected]>

scsi: sg: Resolve soft lockup issue when opening /dev/sgX [+ + +]
Author: Yang Erkun <[email protected]>
Date:   Tue Jan 27 14:20:43 2026 +0800

    scsi: sg: Resolve soft lockup issue when opening /dev/sgX
    
    [ Upstream commit d06a310b45e153872033dd0cf19d5a2279121099 ]
    
    The parameter def_reserved_size defines the default buffer size reserved
    for each Sg_fd and should be restricted to a range between 0 and 1,048,576
    (see https://tldp.org/HOWTO/SCSI-Generic-HOWTO/proc.html).  Although the
    function sg_proc_write_dressz enforces this limit, it is possible to bypass
    it by directly modifying the module parameter as shown below, which then
    causes a soft lockup:
    
    echo -1 > /sys/module/sg/parameters/def_reserved_size
    exec 4<> /dev/sg0
    
    watchdog: BUG: soft lockup - CPU#5 stuck for 26 seconds! [bash:537]
    Modules loaded:
    CPU: 5 UID: 0 PID: 537 Command: bash, kernel version 6.19.0-rc3+ #134,
    PREEMPT disabled
    Hardware: QEMU Standard PC (i440FX + PIIX, 1996), BIOS version
    1.16.1-2.fc37 dated 04/01/2014
    ...
    Call Trace:
    
      sg_build_reserve+0x5c/0xa0
      sg_add_sfp+0x168/0x270
      sg_open+0x16e/0x340
      chrdev_open+0xbe/0x230
      do_dentry_open+0x175/0x480
      vfs_open+0x34/0xf0
      do_open+0x265/0x3d0
      path_openat+0x110/0x290
      do_filp_open+0xc3/0x170
      do_sys_openat2+0x71/0xe0
      __x64_sys_openat+0x6d/0xa0
      do_syscall_64+0x62/0x310
      entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    The fix is to use module_param_cb to validate and reject invalid values
    assigned to def_reserved_size.
    
    Fixes: 6460e75a104d ("[SCSI] sg: fixes for large page_size")
    Signed-off-by: Yang Erkun <[email protected]>
    Reviewed-by: Bart Van Assche <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: target: core: Fix integer overflow in UNMAP bounds check [+ + +]
Author: Junrui Luo <[email protected]>
Date:   Wed Mar 4 23:42:58 2026 +0800

    scsi: target: core: Fix integer overflow in UNMAP bounds check
    
    [ Upstream commit 2bf2d65f76697820dbc4227d13866293576dd90a ]
    
    sbc_execute_unmap() checks LBA + range does not exceed the device capacity,
    but does not guard against LBA + range wrapping around on 64-bit overflow.
    
    Add an overflow check matching the pattern already used for WRITE_SAME in
    the same file.
    
    Fixes: 86d7182985d2 ("target: Add sbc_execute_unmap() helper")
    Reported-by: Yuhao Jiang <[email protected]>
    Signed-off-by: Junrui Luo <[email protected]>
    Link: https://patch.msgid.link/SYBPR01MB7881593C61AD52C69FBDB0BDAF7CA@SYBPR01MB7881.ausprd01.prod.outlook.com
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
sctp: discard stale INIT after handshake completion [+ + +]
Author: Xin Long <[email protected]>
Date:   Sun Apr 26 10:46:41 2026 -0400

    sctp: discard stale INIT after handshake completion
    
    [ Upstream commit 8a92cb475ca90d84db769e4d4383e631ace0d6e5 ]
    
    After an association reaches ESTABLISHED, the peer’s init_tag is already
    known from the handshake. Any subsequent INIT with the same init_tag is
    not a valid restart, but a delayed or duplicate INIT.
    
    Drop such INIT chunks in sctp_sf_do_unexpected_init() instead of
    processing them as new association attempts.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Xin Long <[email protected]>
    Acked-by: Marcelo Ricardo Leitner <[email protected]>
    Link: https://patch.msgid.link/5788c76c1ee122a3ed00189e88dcf9df1fba226c.1777214801.git.lucien.xin@gmail.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

sctp: fix missing encap_port propagation for GSO fragments [+ + +]
Author: Xin Long <[email protected]>
Date:   Sun Apr 12 14:13:51 2026 -0400

    sctp: fix missing encap_port propagation for GSO fragments
    
    [ Upstream commit bf6f95ae3b8b2638c0e1d6d802d50983ce5d0f45 ]
    
    encap_port in SCTP_INPUT_CB(skb) is used by sctp_vtag_verify() for
    SCTP-over-UDP processing. In the GSO case, it is only set on the head
    skb, while fragment skbs leave it 0.
    
    This results in fragment skbs seeing encap_port == 0, breaking
    SCTP-over-UDP connections.
    
    Fix it by propagating encap_port from the head skb cb when initializing
    fragment skbs in sctp_inq_pop().
    
    Fixes: 046c052b475e ("sctp: enable udp tunneling socks")
    Signed-off-by: Xin Long <[email protected]>
    Acked-by: Marcelo Ricardo Leitner <[email protected]>
    Link: https://patch.msgid.link/ea65ed61b3598d8b4940f0170b9aa1762307e6c3.1776017631.git.lucien.xin@gmail.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

sctp: fix OOB write to userspace in sctp_getsockopt_peer_auth_chunks [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Wed Apr 15 23:19:03 2026 -0400

    sctp: fix OOB write to userspace in sctp_getsockopt_peer_auth_chunks
    
    [ Upstream commit 0cf004ffb61cd32d140531c3a84afe975f9fc7ea ]
    
    sctp_getsockopt_peer_auth_chunks() checks that the caller's optval
    buffer is large enough for the peer AUTH chunk list with
    
        if (len < num_chunks)
                return -EINVAL;
    
    but then writes num_chunks bytes to p->gauth_chunks, which lives
    at offset offsetof(struct sctp_authchunks, gauth_chunks) == 8
    inside optval.  The check is missing the sizeof(struct
    sctp_authchunks) = 8-byte header.  When the caller supplies
    len == num_chunks (for any num_chunks > 0) the test passes but
    copy_to_user() writes sizeof(struct sctp_authchunks) = 8 bytes
    past the declared buffer.
    
    The sibling function sctp_getsockopt_local_auth_chunks() at the
    next line already has the correct check:
    
        if (len < sizeof(struct sctp_authchunks) + num_chunks)
                return -EINVAL;
    
    Align the peer variant with its sibling.
    
    Reproducer confirms on v7.0-13-generic: an unprivileged userspace
    caller that opens a loopback SCTP association with AUTH enabled,
    queries num_chunks with a short optval, then issues the real
    getsockopt with len == num_chunks and sentinel bytes painted past
    the buffer observes those sentinel bytes overwritten with the
    peer's AUTH chunk type.  The bytes written are under the peer's
    control but land in the caller's own userspace; this is not a
    kernel memory corruption, but it is a kernel-side contract
    violation that can silently corrupt adjacent userspace data.
    
    Fixes: 65b07e5d0d09 ("[SCTP]: API updates to suport SCTP-AUTH extensions.")
    Assisted-by: Claude:claude-opus-4-6
    Signed-off-by: Michael Bommarito <[email protected]>
    Acked-by: Xin Long <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
selftest: memcg: skip memcg_sock test if address family not supported [+ + +]
Author: Waiman Long <[email protected]>
Date:   Wed Mar 11 16:05:26 2026 -0400

    selftest: memcg: skip memcg_sock test if address family not supported
    
    [ Upstream commit 2d028f3e4bbbfd448928a8d3d2814b0b04c214f4 ]
    
    The test_memcg_sock test in memcontrol.c sets up an IPv6 socket and send
    data over it to consume memory and verify that memory.stat.sock and
    memory.current values are close.
    
    On systems where IPv6 isn't enabled or not configured to support
    SOCK_STREAM, the test_memcg_sock test always fails.  When the socket()
    call fails, there is no way we can test the memory consumption and verify
    the above claim.  I believe it is better to just skip the test in this
    case instead of reporting a test failure hinting that there may be
    something wrong with the memcg code.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 5f8f019380b8 ("selftests: cgroup/memcontrol: add basic test for socket accounting")
    Signed-off-by: Waiman Long <[email protected]>
    Acked-by: Michal Koutný <[email protected]>
    Acked-by: Shakeel Butt <[email protected]>
    Cc: Johannes Weiner <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Michal Koutný <[email protected]>
    Cc: Mike Rapoport <[email protected]>
    Cc: Muchun Song <[email protected]>
    Cc: Roman Gushchin <[email protected]>
    Cc: Shuah Khan <[email protected]>
    Cc: Tejun Heo <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
selftests/mm: skip migration tests if NUMA is unavailable [+ + +]
Author: AnishMulay <[email protected]>
Date:   Wed Feb 18 11:39:41 2026 -0500

    selftests/mm: skip migration tests if NUMA is unavailable
    
    [ Upstream commit 54218f10dfbe88c8e41c744fd45a756cde60b8c4 ]
    
    Currently, the migration test asserts that numa_available() returns 0.  On
    systems where NUMA is not available (returning -1), such as certain ARM64
    configurations or single-node systems, this assertion fails and crashes
    the test.
    
    Update the test to check the return value of numa_available().  If it is
    less than 0, skip the test gracefully instead of failing.
    
    This aligns the behavior with other MM selftests (like rmap) that skip
    when NUMA support is missing.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 0c2d08728470 ("mm: add selftests for migration entries")
    Signed-off-by: AnishMulay <[email protected]>
    Reviewed-by: SeongJae Park <[email protected]>
    Reviewed-by: Dev Jain <[email protected]>
    Reviewed-by: Anshuman Khandual <[email protected]>
    Tested-by: Sayali Patil <[email protected]>
    Acked-by: David Hildenbrand (Arm) <[email protected]>
    Cc: Liam Howlett <[email protected]>
    Cc: Lorenzo Stoakes <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Mike Rapoport <[email protected]>
    Cc: Shuah Khan <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
selftests/powerpc: Re-order *FLAGS to follow lib.mk [+ + +]
Author: Madhavan Srinivasan <[email protected]>
Date:   Thu Feb 29 15:07:09 2024 +0530

    selftests/powerpc: Re-order *FLAGS to follow lib.mk
    
    [ Upstream commit 37496845c812db2a470d51088a59ee38156e8058 ]
    
    In some powerpc/ sub-folder Makefiles, CFLAGS are defined before lib.mk
    include. Clean it up by re-ordering the flags to follow after the mk
    include. This is needed to support sub-folders in powerpc/ buildable on
    its own.
    
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Signed-off-by: Michael Ellerman <[email protected]>
    Link: https://msgid.link/[email protected]
    Stable-dep-of: 6e65886fceb2 ("selftests/powerpc: Suppress -Wmaybe-uninitialized with GCC 15")
    Signed-off-by: Sasha Levin <[email protected]>

selftests/powerpc: Suppress -Wmaybe-uninitialized with GCC 15 [+ + +]
Author: Amit Machhiwal <[email protected]>
Date:   Fri Mar 13 22:24:26 2026 +0530

    selftests/powerpc: Suppress -Wmaybe-uninitialized with GCC 15
    
    [ Upstream commit 6e65886fceb23605eff952d6b1975737b4c4b154 ]
    
    GCC 15 reports the below false positive '-Wmaybe-uninitialized' warning
    in vphn_unpack_associativity() when building the powerpc selftests.
    
      # make -C tools/testing/selftests TARGETS="powerpc"
      [...]
        CC       test-vphn
      In file included from test-vphn.c:3:
      In function ‘vphn_unpack_associativity’,
          inlined from ‘test_one’ at test-vphn.c:371:2,
          inlined from ‘test_vphn’ at test-vphn.c:399:9:
      test-vphn.c:10:33: error: ‘be_packed’ may be used uninitialized [-Werror=maybe-uninitialized]
         10 | #define be16_to_cpup(x)         bswap_16(*x)
            |                                 ^~~~~~~~
      vphn.c:42:27: note: in expansion of macro ‘be16_to_cpup’
         42 |                 u16 new = be16_to_cpup(field++);
            |                           ^~~~~~~~~~~~
      In file included from test-vphn.c:19:
      vphn.c: In function ‘test_vphn’:
      vphn.c:27:16: note: ‘be_packed’ declared here
         27 |         __be64 be_packed[VPHN_REGISTER_COUNT];
            |                ^~~~~~~~~
      cc1: all warnings being treated as errors
    
    When vphn_unpack_associativity() is called from hcall_vphn() in kernel
    the error is not seen while building vphn.c during kernel compilation.
    This is because the top level Makefile includes '-fno-strict-aliasing'
    flag always.
    
    The issue here is that GCC 15 emits '-Wmaybe-uninitialized' due to type
    punning between __be64[] and __b16* when accessing the buffer via
    be16_to_cpup(). The underlying object is fully initialized but GCC 15
    fails to track the aliasing due to the strict aliasing violation here.
    Please refer [1] and [2]. This results in a false positive warning which
    is promoted to an error under '-Werror'. This problem is not seen when
    the compilation is performed with GCC 13 and 14. An issue [1] has also
    been created on GCC bugzilla.
    
    The selftest compiles fine with '-fno-strict-aliasing'. Since this GCC
    flag is used to compile vphn.c in kernel too, the same flag should be
    used to build vphn tests when compiling vphn.c in the selftest as well.
    
    Fix this by including '-fno-strict-aliasing' during vphn.c compilation
    in the selftest. This keeps the build working while limiting the scope
    of the suppression to building vphn tests.
    
    [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=124427
    [2] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99768
    
    Fixes: 58dae82843f5 ("selftests/powerpc: Add test for VPHN")
    Reviewed-by: Vaibhav Jain <[email protected]>
    Signed-off-by: Amit Machhiwal <[email protected]>
    Tested-by: Venkat Rao Bagalkote <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
sfc: fix error code in efx_devlink_info_running_versions() [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Wed Apr 29 09:48:17 2026 +0300

    sfc: fix error code in efx_devlink_info_running_versions()
    
    [ Upstream commit 051ffb001b8a232cfa6e72f38bb5f51c4270a60b ]
    
    Return -EIO if efx_mcdi_rpc() doesn't return enough space.
    
    Fixes: 14743ddd2495 ("sfc: add devlink info support for ef100")
    Signed-off-by: Dan Carpenter <[email protected]>
    Reviewed-by: Edward Cree <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
slip: bound decode() reads against the compressed packet length [+ + +]
Author: Weiming Shi <[email protected]>
Date:   Thu Apr 16 18:01:51 2026 +0800

    slip: bound decode() reads against the compressed packet length
    
    [ Upstream commit 4c1367a2d7aad643a6f87c6931b13cc1a25e8ca7 ]
    
    slhc_uncompress() parses a VJ-compressed TCP header by advancing a
    pointer through the packet via decode() and pull16(). Neither helper
    bounds-checks against isize, and decode() masks its return with
    & 0xffff so it can never return the -1 that callers test for -- those
    error paths are dead code.
    
    A short compressed frame whose change byte requests optional fields
    lets decode() read past the end of the packet. The over-read bytes
    are folded into the cached cstate and reflected into subsequent
    reconstructed packets.
    
    Make decode() and pull16() take the packet end pointer and return -1
    when exhausted. Add a bounds check before the TCP-checksum read.
    The existing == -1 tests now do what they were always meant to.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: Simon Horman <[email protected]>
    Closes: https://lore.kernel.org/netdev/[email protected]/
    Signed-off-by: Weiming Shi <[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]>

slip: reject VJ receive packets on instances with no rstate array [+ + +]
Author: Weiming Shi <[email protected]>
Date:   Thu Apr 16 04:41:31 2026 +0800

    slip: reject VJ receive packets on instances with no rstate array
    
    [ Upstream commit e76607442d5b73e1ba6768f501ef815bb58c2c0e ]
    
    slhc_init() accepts rslots == 0 as a valid configuration, with the
    documented meaning of 'no receive compression'. In that case the
    allocation loop in slhc_init() is skipped, so comp->rstate stays
    NULL and comp->rslot_limit stays 0 (from the kzalloc of struct
    slcompress).
    
    The receive helpers do not defend against that configuration.
    slhc_uncompress() dereferences comp->rstate[x] when the VJ header
    carries an explicit connection ID, and slhc_remember() later assigns
    cs = &comp->rstate[...] after only comparing the packet's slot number
    to comp->rslot_limit. Because rslot_limit is 0, slot 0 passes the
    range check, and the code dereferences a NULL rstate.
    
    The configuration is reachable in-tree through PPP. PPPIOCSMAXCID
    stores its argument in a signed int, and (val >> 16) uses arithmetic
    shift. Passing 0xffff0000 therefore sign-extends to -1, so val2 + 1
    is 0 and ppp_generic.c ends up calling slhc_init(0, 1). Because
    /dev/ppp open is gated by ns_capable(CAP_NET_ADMIN), the whole path
    is reachable from an unprivileged user namespace. Once the malformed
    VJ state is installed, any inbound VJ-compressed or VJ-uncompressed
    frame that selects slot 0 crashes the kernel in softirq context:
    
     Oops: general protection fault, probably for non-canonical
           address 0xdffffc0000000000: 0000 [#1] SMP KASAN NOPTI
     KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
     RIP: 0010:slhc_uncompress (drivers/net/slip/slhc.c:519)
     Call Trace:
      <TASK>
      ppp_receive_nonmp_frame (drivers/net/ppp/ppp_generic.c:2466)
      ppp_input (drivers/net/ppp/ppp_generic.c:2359)
      ppp_async_process (drivers/net/ppp/ppp_async.c:492)
      tasklet_action_common (kernel/softirq.c:926)
      handle_softirqs (kernel/softirq.c:623)
      run_ksoftirqd (kernel/softirq.c:1055)
      smpboot_thread_fn (kernel/smpboot.c:160)
      kthread (kernel/kthread.c:436)
      ret_from_fork (arch/x86/kernel/process.c:164)
      </TASK>
    
    Reject the receive side on such instances instead of touching rstate.
    slhc_uncompress() falls through to its existing 'bad' label, which
    bumps sls_i_error and enters the toss state. slhc_remember() mirrors
    that with an explicit sls_i_error increment followed by slhc_toss();
    the sls_i_runt counter is not used here because a missing rstate is
    an internal configuration state, not a runt packet.
    
    The transmit path is unaffected: the only in-tree caller that picks
    rslots from userspace (ppp_generic.c) still supplies tslots >= 1, and
    slip.c always calls slhc_init(16, 16), so comp->tstate remains valid
    and slhc_compress() continues to work.
    
    Fixes: 4ab42d78e37a ("ppp, slip: Validate VJ compression slot parameters completely")
    Reported-by: Xiang Mei <[email protected]>
    Signed-off-by: Weiming Shi <[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]>

 
smb/client: fix possible infinite loop and oob read in symlink_data() [+ + +]
Author: Ye Bin <[email protected]>
Date:   Thu May 14 21:14:18 2026 +0800

    smb/client: fix possible infinite loop and oob read in symlink_data()
    
    commit 7d9a7f1f96cd617ee9e75bb22217c709038e26b8 upstream.
    
    On 32-bit architectures, the infinite loop is as follows:
    
      len = p->ErrorDataLength == 0xfffffff8
      u8 *next = p->ErrorContextData + len
      next == p
    
    On 32-bit architectures, the out-of-bounds read is as follows:
    
      len = p->ErrorDataLength == 0xfffffff0
      u8 *next = p->ErrorContextData + len
      next == (u8 *)p - 8
    
    Reported-by: ChenXiaoSong <[email protected]>
    Fixes: 76894f3e2f71 ("cifs: improve symlink handling for smb2+")
    Cc: [email protected]
    Signed-off-by: Ye Bin <[email protected]>
    Reviewed-by: ChenXiaoSong <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
smb: client: correctly handle ErrorContextData as a flexible array [+ + +]
Author: Liang Jie <[email protected]>
Date:   Mon May 18 16:15:53 2026 +0800

    smb: client: correctly handle ErrorContextData as a flexible array
    
    [ Upstream commit 215b7f9ecb8d7c14d56febdcdd246f3579c32aba ]
    
    The `smb2_symlink_err_rsp` structure was previously defined with
    `ErrorContextData` as a single `__u8` byte. However, the `ErrorContextData`
    field is intended to be a variable-length array based on `ErrorDataLength`.
    This mismatch leads to incorrect pointer arithmetic and potential memory
    access issues when processing error contexts.
    
    Updates the `ErrorContextData` field to be a flexible array
    (`__u8 ErrorContextData[]`). Additionally, it modifies the corresponding
    casts in the `symlink_data()` function to properly handle the flexible
    array, ensuring correct memory calculations and data handling.
    
    These changes improve the robustness of SMB2 symlink error processing.
    
    Signed-off-by: Liang Jie <[email protected]>
    Suggested-by: Tom Talpey <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    [ Remove the __counted_by_le annotation in v6.6. ]
    Signed-off-by: Alva Lan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

smb: client: fix OOB reads parsing symlink error response [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Mon May 18 16:15:54 2026 +0800

    smb: client: fix OOB reads parsing symlink error response
    
    [ Upstream commit 3df690bba28edec865cf7190be10708ad0ddd67e ]
    
    When a CREATE returns STATUS_STOPPED_ON_SYMLINK, smb2_check_message()
    returns success without any length validation, leaving the symlink
    parsers as the only defense against an untrusted server.
    
    symlink_data() walks SMB 3.1.1 error contexts with the loop test "p <
    end", but reads p->ErrorId at offset 4 and p->ErrorDataLength at offset
    0.  When the server-controlled ErrorDataLength advances p to within 1-7
    bytes of end, the next iteration will read past it.  When the matching
    context is found, sym->SymLinkErrorTag is read at offset 4 from
    p->ErrorContextData with no check that the symlink header itself fits.
    
    smb2_parse_symlink_response() then bounds-checks the substitute name
    using SMB2_SYMLINK_STRUCT_SIZE as the offset of PathBuffer from
    iov_base.  That value is computed as sizeof(smb2_err_rsp) +
    sizeof(smb2_symlink_err_rsp), which is correct only when
    ErrorContextCount == 0.
    
    With at least one error context the symlink data sits 8 bytes deeper,
    and each skipped non-matching context shifts it further by 8 +
    ALIGN(ErrorDataLength, 8).  The check is too short, allowing the
    substitute name read to run past iov_len.  The out-of-bound heap bytes
    are UTF-16-decoded into the symlink target and returned to userspace via
    readlink(2).
    
    Fix this all up by making the loops test require the full context header
    to fit, rejecting sym if its header runs past end, and bound the
    substitute name against the actual position of sym->PathBuffer rather
    than a fixed offset.
    
    Because sub_offs and sub_len are 16bits, the pointer math will not
    overflow here with the new greater-than.
    
    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]>
    Reviewed-by: Paulo Alcantara (Red Hat) <[email protected]>
    Assisted-by: gregkh_clanker_t1000
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Alva Lan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

smb: client: Use FullSessionKey for AES-256 encryption key derivation [+ + +]
Author: Piyush Sachdeva <[email protected]>
Date:   Sun May 17 09:51:43 2026 -0400

    smb: client: Use FullSessionKey for AES-256 encryption key derivation
    
    [ Upstream commit 5be7a0cef3229fb3b63a07c0d289daf752545424 ]
    
    When Kerberos authentication is used with AES-256 encryption (AES-256-CCM
    or AES-256-GCM), the SMB3 encryption and decryption keys must be derived
    using the full session key (Session.FullSessionKey) rather than just the
    first 16 bytes (Session.SessionKey).
    
    Per MS-SMB2 section 3.2.5.3.1, when Connection.Dialect is "3.1.1" and
    Connection.CipherId is AES-256-CCM or AES-256-GCM, Session.FullSessionKey
    must be set to the full cryptographic key from the GSS authentication
    context. The encryption and decryption key derivation (SMBC2SCipherKey,
    SMBS2CCipherKey) must use this FullSessionKey as the KDF input. The
    signing key derivation continues to use Session.SessionKey (first 16
    bytes) in all cases.
    
    Previously, generate_key() hardcoded SMB2_NTLMV2_SESSKEY_SIZE (16) as the
    HMAC-SHA256 key input length for all derivations. When Kerberos with
    AES-256 provides a 32-byte session key, the KDF for encryption/decryption
    was using only the first 16 bytes, producing keys that did not match the
    server's, causing mount failures with sec=krb5 and require_gcm_256=1.
    
    Add a full_key_size parameter to generate_key() and pass the appropriate
    size from generate_smb3signingkey():
     - Signing: always SMB2_NTLMV2_SESSKEY_SIZE (16 bytes)
     - Encryption/Decryption: ses->auth_key.len when AES-256, otherwise 16
    
    Also fix cifs_dump_full_key() to report the actual session key length for
    AES-256 instead of hardcoded CIFS_SESS_KEY_SIZE, so that userspace tools
    like Wireshark receive the correct key for decryption.
    
    Cc: <[email protected]>
    Reviewed-by: Bharath SM <[email protected]>
    Signed-off-by: Piyush Sachdeva <[email protected]>
    Signed-off-by: Piyush Sachdeva <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    [ adapted upstream's void/hmac_sha256_init_usingrawkey-based generate_key() to 6.12's int-return crypto_shash_* form while threading full_key_size through all callers. ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
soc/tegra: cbb: Set ERD on resume for err interrupt [+ + +]
Author: Sumit Gupta <[email protected]>
Date:   Wed Jan 21 15:42:03 2026 +0530

    soc/tegra: cbb: Set ERD on resume for err interrupt
    
    [ Upstream commit b6ff71c5d1d4ad858ddf6f39394d169c96689596 ]
    
    Set the Error Response Disable (ERD) bit to mask SError responses
    and use interrupt-based error reporting. When the ERD bit is set,
    inband error responses to the initiator via SError are suppressed,
    and fabric errors are reported via an interrupt instead.
    
    The register is set during boot but the info is lost during system
    suspend and needs to be set again on resume.
    
    Fixes: fc2f151d2314 ("soc/tegra: cbb: Add driver for Tegra234 CBB 2.0")
    Signed-off-by: Sumit Gupta <[email protected]>
    Signed-off-by: Thierry Reding <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
soc: qcom: aoss: compare against normalized cooling state [+ + +]
Author: Alok Tiwari <[email protected]>
Date:   Sun Mar 29 12:53:23 2026 -0700

    soc: qcom: aoss: compare against normalized cooling state
    
    [ Upstream commit cd3c4670db3ffe997be9548c7a9db3952563cf14 ]
    
    qmp_cdev_set_cur_state() normalizes the requested state to a boolean
    (cdev_state = !!state). The existing early-return check compares
    qmp_cdev->state == state, which can be wrong if state is non-boolean
    (any non-zero value). Compare qmp_cdev->state against cdev_state instead,
    so the check matches the effective state and avoids redundant updates.
    
    Signed-off-by: Alok Tiwari <[email protected]>
    Fixes: 05589b30b21a ("soc: qcom: Extend AOSS QMP driver to support resources that are used to wake up the SoC.")
    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]>

soc: qcom: llcc: fix v1 SB syndrome register offset [+ + +]
Author: Alok Tiwari <[email protected]>
Date:   Mon Mar 30 02:51:11 2026 -0700

    soc: qcom: llcc: fix v1 SB syndrome register offset
    
    [ Upstream commit 24e7625df5ce065393249b78930781be593bc381 ]
    
    The llcc_v1_edac_reg_offset table uses 0x2304c for trp_ecc_sb_err_syn0,
    which is inconsistent with the surrounding TRP ECC registers (0x2034x)
    and with llcc_v2_1_edac_reg_offset, where trp_ecc_sb_err_syn0 is 0x2034c
    adjacent to trp_ecc_error_status0/1 at 0x20344/0x20348.
    
    Use 0x2034c for llcc v1 so the SB syndrome register follows the expected
    +0x4 progression from trp_ecc_error_status1. This fixes EDAC reading the
    wrong register for SB syndrome reporting.
    
    Fixes: c13d7d261e36 ("soc: qcom: llcc: Pass LLCC version based register offsets to EDAC driver")
    Signed-off-by: Alok Tiwari <[email protected]>
    Reviewed-by: Manivannan Sadhasivam <[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]>

soc: qcom: ocmem: make the core clock optional [+ + +]
Author: Dmitry Baryshkov <[email protected]>
Date:   Mon Mar 23 03:20:57 2026 +0200

    soc: qcom: ocmem: make the core clock optional
    
    [ Upstream commit e8a61c51417c679d1a599fb36695e9d3b8d95514 ]
    
    OCMEM's core clock (aka RPM bus 2 clock) is being handled internally by
    the interconnect driver. Corresponding clock has been dropped from the
    SMD RPM clock driver. The users of the ocmem will vote on the ocmemnoc
    interconnect paths, making sure that ocmem is on. Make the clock
    optional, keeping it for compatibility with older DT.
    
    Fixes: d6edc31f3a68 ("clk: qcom: smd-rpm: Separate out interconnect bus clocks")
    Signed-off-by: Dmitry Baryshkov <[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]>

soc: qcom: ocmem: register reasons for probe deferrals [+ + +]
Author: Dmitry Baryshkov <[email protected]>
Date:   Mon Mar 23 03:20:58 2026 +0200

    soc: qcom: ocmem: register reasons for probe deferrals
    
    [ Upstream commit 9dfd69cd89cd6afa4723be9098979abeef3bb8c6 ]
    
    Instead of printing messages to the dmesg, let the message be recorded
    as a reason for the OCMEM client deferral.
    
    Fixes: 88c1e9404f1d ("soc: qcom: add OCMEM driver")
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Brian Masney <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    [bjorn: s/ERR_PTR(dev_err_probe)/dev_err_ptr_probe/
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

soc: qcom: ocmem: return -EPROBE_DEFER is ocmem is not available [+ + +]
Author: Dmitry Baryshkov <[email protected]>
Date:   Mon Mar 23 03:20:59 2026 +0200

    soc: qcom: ocmem: return -EPROBE_DEFER is ocmem is not available
    
    [ Upstream commit 91b59009c7d48b58dbc50fecb27f2ad20749a05a ]
    
    If OCMEM is declared in DT, it is expected that it is present and
    handled by the driver. The GPU driver will ignore -ENODEV error, which
    typically means that OCMEM isn't defined in DT. Let ocmem return
    -EPROBE_DEFER if it supposed to be used, but it is not probed (yet).
    
    Fixes: 88c1e9404f1d ("soc: qcom: add OCMEM driver")
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    [bjorn: s/ERR_PTR(dev_err_probe)/dev_err_ptr_probe/
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

soc: qcom: ocmem: use scoped device node handling to simplify error paths [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Tue Aug 13 15:09:50 2024 +0200

    soc: qcom: ocmem: use scoped device node handling to simplify error paths
    
    [ Upstream commit f4c1c19f5c0e5cf2870df91dedc6b40400fd9c8a ]
    
    Obtain the device node reference with scoped/cleanup.h to reduce error
    handling and make the code a bit simpler.
    
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Link: https://lore.kernel.org/r/20240813-b4-cleanup-h-of-node-put-other-v1-4-cfb67323a95c@linaro.org
    Signed-off-by: Bjorn Andersson <[email protected]>
    Stable-dep-of: 9dfd69cd89cd ("soc: qcom: ocmem: register reasons for probe deferrals")
    Signed-off-by: Sasha Levin <[email protected]>

 
soundwire: bus: demote UNATTACHED state warnings to dev_dbg() [+ + +]
Author: Cole Leavitt <[email protected]>
Date:   Wed Feb 18 11:02:10 2026 -0700

    soundwire: bus: demote UNATTACHED state warnings to dev_dbg()
    
    [ Upstream commit 2c96956fe764f8224f9ec93b2a9160a578949a7a ]
    
    The dev_warn() messages in sdw_handle_slave_status() for UNATTACHED
    transitions were added in commit d1b328557058 ("soundwire: bus: add
    dev_warn() messages to track UNATTACHED devices") to debug attachment
    failures with dynamic debug enabled.
    
    These warnings fire during normal operation -- for example when a codec
    driver triggers a hardware reset after firmware download, causing the
    device to momentarily go UNATTACHED before re-attaching -- producing
    misleading noise on every boot.
    
    Demote the messages to dev_dbg() so they remain available via dynamic
    debug for diagnosing real attachment failures without alarming users
    during expected initialization sequences.
    
    Fixes: d1b328557058 ("soundwire: bus: add dev_warn() messages to track UNATTACHED devices")
    Signed-off-by: Cole Leavitt <[email protected]>
    Reviewed-by: Richard Fitzgerald <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

soundwire: cadence: Clear message complete before signaling waiting thread [+ + +]
Author: Richard Fitzgerald <[email protected]>
Date:   Tue Mar 10 11:31:33 2026 +0000

    soundwire: cadence: Clear message complete before signaling waiting thread
    
    [ Upstream commit cbfea84f820962c3c5394ff06e7e9344c96bf761 ]
    
    Clear the CDNS_MCP_INT_RX_WL interrupt before signaling completion.
    
    This is to prevent the potential race where:
    - The main thread is scheduled immediately the completion is signaled,
       and starts a new message
    - The RX_WL IRQ for this new message happens before sdw_cdns_irq() has
      been re-scheduled.
    - When sdw_cdns_irq() is re-scheduled it clears the new RX_WL interrupt.
    
    MAIN THREAD                        |  IRQ THREAD
                                       |
      _cdns_xfer_msg()                 |
      {                                |
         write data to FIFO            |
         wait_for_completion_timeout() |
         <BLOCKED>                     |                       <---- RX_WL IRQ
                                       | sdw_cdns_irq()
                                       | {
                                       |    signal completion
                              <== RESCHEDULE <==
      Handle message completion        |
      }                                |
                                       |
    Start new message                  |
      _cdns_xfer_msg()                 |
      {                                |
         write data to FIFO            |
         wait_for_completion_timeout() |
         <BLOCKED>                     |                       <---- RX_WL IRQ
                              ==> RESCHEDULE ==>
                                       |    // New RX_WL IRQ is cleared before
                                       |    // it has been handled.
                                       |    clear CDNS_MCP_INTSTAT
    
                                       |    return IRQ_HANDLED;
                                       | }
    
    Before this change, this error message was sometimes seen on kernels
    that have large amounts of debugging enabled:
    
       SCP Msg trf timed out
    
    This error indicates that the completion has not been signalled after
    500ms.
    
    Signed-off-by: Richard Fitzgerald <[email protected]>
    Fixes: 956baa1992f9 ("soundwire: cdns: Add sdw_master_ops and IO transfer support")
    Reported-by: Norman Bintang <[email protected]>
    Closes: https://issuetracker.google.com/issues/477099834
    Reviewed-by: Pierre-Louis Bossart <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
spi: fsl-qspi: Use reinit_completion() for repeated operations [+ + +]
Author: Felix Gu <[email protected]>
Date:   Wed Mar 4 20:47:21 2026 +0800

    spi: fsl-qspi: Use reinit_completion() for repeated operations
    
    [ Upstream commit 981b080a79724738882b0af1c5bb7ade30d94f24 ]
    
    The driver currently calls init_completion() during every spi_mem_op.
    Tchnically it may work, but it's not the recommended pattern.
    
    According to the kernel documentation: Calling init_completion() on
    the same completion object twice is most likely a bug as it
    re-initializes the queue to an empty queue and enqueued tasks could
    get "lost" - use reinit_completion() in that case, but be aware of
    other races.
    
    So moves the initial initialization to probe function and uses
    reinit_completion() for subsequent operations.
    
    Fixes: 84d043185dbe ("spi: Add a driver for the Freescale/NXP QuadSPI controller")
    Signed-off-by: Felix Gu <[email protected]>
    Reviewed-by: Haibo Chen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

spi: hisi-kunpeng: prevent infinite while() loop in hisi_spi_flush_fifo [+ + +]
Author: Pei Xiao <[email protected]>
Date:   Thu Mar 19 11:06:41 2026 +0800

    spi: hisi-kunpeng: prevent infinite while() loop in hisi_spi_flush_fifo
    
    [ Upstream commit 9f61daf2c2debe9f5cf4e1a4471e56a89a6fe45a ]
    
    The hisi_spi_flush_fifo()'s inner while loop that lacks any timeout
    mechanism. Maybe the hardware never becomes empty, the loop will spin
    forever, causing the CPU to hang.
    
    Fix this by adding a inner_limit based on loops_per_jiffy. The inner loop
    now exits after approximately one jiffy if the FIFO remains non-empty, logs
    a ratelimited warning, and breaks out of the outer loop. Additionally, add
    a cpu_relax() inside the busy loop to improve power efficiency.
    
    Fixes: c770d8631e18 ("spi: Add HiSilicon SPI Controller Driver for Kunpeng SoCs")
    Signed-off-by: Pei Xiao <[email protected]>
    Link: https://patch.msgid.link/d834ce28172886bfaeb9c8ca00cfd9bf1c65d5a1.1773889292.git.xiaopei01@kylinos.cn
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

spi: mtk-snfi: unregister ECC engine on probe failure and remove() callback [+ + +]
Author: Pei Xiao <[email protected]>
Date:   Tue Apr 7 15:26:59 2026 +0800

    spi: mtk-snfi: unregister ECC engine on probe failure and remove() callback
    
    [ Upstream commit ab00febad191d7a4400aa1c3468279fb508258d4 ]
    
    mtk_snand_probe() registers the on-host NAND ECC engine, but teardown was
    missing from both probe unwind and remove-time cleanup. Add a devm cleanup
    action after successful registration so
    nand_ecc_unregister_on_host_hw_engine() runs automatically on probe
    failures and during device removal.
    
    Fixes: 764f1b748164 ("spi: add driver for MTK SPI NAND Flash Interface")
    Signed-off-by: Pei Xiao <[email protected]>
    Link: https://patch.msgid.link/20263f885f1a9c9d559f95275298cd6de4b11ed5.1775546401.git.xiaopei01@kylinos.cn
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

spi: rockchip: Read ISR, not IMR, to detect cs-inactive IRQ [+ + +]
Author: John Madieu <[email protected]>
Date:   Sat Apr 25 09:29:34 2026 +0000

    spi: rockchip: Read ISR, not IMR, to detect cs-inactive IRQ
    
    [ Upstream commit b4683a239a409d65f88052f5630c748a8ba070cd ]
    
    rockchip_spi_isr() decides whether the current interrupt was the
    cs-inactive event by reading IMR:
    
            if (rs->cs_inactive &&
                readl_relaxed(rs->regs + ROCKCHIP_SPI_IMR) & INT_CS_INACTIVE)
                    ctlr->target_abort(ctlr);
    
    IMR is the interrupt mask register: it tells which sources are enabled,
    not which one fired. In the PIO path, rockchip_spi_prepare_irq() enables
    both INT_RF_FULL and INT_CS_INACTIVE in IMR when rs->cs_inactive is true:
    
            if (rs->cs_inactive)
                    writel_relaxed(INT_RF_FULL | INT_CS_INACTIVE,
                                   rs->regs + ROCKCHIP_SPI_IMR);
    
    so the IMR check is always true once cs_inactive is enabled, and every
    PIO interrupt - including normal RF_FULL completions - is dispatched to
    ctlr->target_abort(), aborting the transfer. The bug is reachable on
    ROCKCHIP_SPI_VER2_TYPE2 in target mode with a DMA-capable controller
    when the transfer is short enough to fall back to PIO
    (rockchip_spi_can_dma() returns false below fifo_len).
    
    Read ISR (which is RISR masked by IMR) so the check actually reflects
    which interrupt fired, and parenthesise the expression for clarity while
    at it.
    
    Fixes: 869f2c94db92 ("spi: rockchip: Stop spi slave dma receiver when cs inactive")
    Signed-off-by: John Madieu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

spi: sifive: fix controller deregistration [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Wed May 20 11:18:18 2026 -0400

    spi: sifive: fix controller deregistration
    
    [ Upstream commit 0f25236694a2854627c1597465a071e6bb6fe572 ]
    
    Make sure to deregister the controller before disabling underlying
    resources like interrupts during driver unbind.
    
    Note that clocks were also disabled before the recent commit
    140039c23aca ("spi: sifive: Simplify clock handling with
    devm_clk_get_enabled()").
    
    Fixes: 484a9a68d669 ("spi: sifive: Add driver for the SiFive SPI controller")
    Cc: [email protected]      # 5.1
    Cc: Yash Shah <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

spi: sifive: Simplify clock handling with devm_clk_get_enabled() [+ + +]
Author: Pei Xiao <[email protected]>
Date:   Wed May 20 11:18:17 2026 -0400

    spi: sifive: Simplify clock handling with devm_clk_get_enabled()
    
    [ Upstream commit 140039c23aca067b9ff0242e3c0ce96276bb95f3 ]
    
    Replace devm_clk_get() followed by clk_prepare_enable() with
    devm_clk_get_enabled() for the bus clock. This reduces boilerplate code
    and error handling, as the managed API automatically disables the clock
    when the device is removed or if probe fails.
    
    Remove the now-unnecessary clk_disable_unprepare() calls from the probe
    error path and the remove callback. Adjust the error handling to use the
    existing put_host label.
    
    Signed-off-by: Pei Xiao <[email protected]>
    Link: https://patch.msgid.link/73d0d8ecb4e1af5a558d6a7866c0f886d94fe3d1.1773885292.git.xiaopei01@kylinos.cn
    Signed-off-by: Mark Brown <[email protected]>
    Stable-dep-of: 0f25236694a2 ("spi: sifive: fix controller deregistration")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

spi: st-ssc4: fix controller deregistration [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Wed May 20 08:55:48 2026 -0400

    spi: st-ssc4: fix controller deregistration
    
    [ Upstream commit 19857374010d06ca6a2f7c2c53464122eb804df0 ]
    
    Make sure to deregister the controller before disabling underlying
    resources like clocks during driver unbind.
    
    Fixes: 9e862375c542 ("spi: Add new driver for STMicroelectronics' SPI Controller")
    Cc: [email protected]      # 4.0
    Cc: Lee Jones <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

spi: st-ssc4: switch to use modern name [+ + +]
Author: Yang Yingliang <[email protected]>
Date:   Wed May 20 08:55:47 2026 -0400

    spi: st-ssc4: switch to use modern name
    
    [ Upstream commit e6b7e64cb11966b26646a362677ca5a08481157e ]
    
    Change legacy name master/slave to modern name host/target or controller.
    
    No functional changed.
    
    Signed-off-by: Yang Yingliang <[email protected]>
    Link: https://msgid.link/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Stable-dep-of: 19857374010d ("spi: st-ssc4: fix controller deregistration")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tcp: add data-race annotations around tp->data_segs_out and tp->total_retrans [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Apr 16 20:03:07 2026 +0000

    tcp: add data-race annotations around tp->data_segs_out and tp->total_retrans
    
    [ Upstream commit 21e92a38cfd891538598ba8f805e0165a820d532 ]
    
    tcp_get_timestamping_opt_stats() intentionally runs lockless, we must
    add READ_ONCE() and WRITE_ONCE() annotations to keep KCSAN happy.
    
    Fixes: 7e98102f4897 ("tcp: record pkts sent and retransmistted")
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

tcp: annotate data-races around (tp->write_seq - tp->snd_nxt) [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Apr 16 20:03:18 2026 +0000

    tcp: annotate data-races around (tp->write_seq - tp->snd_nxt)
    
    [ Upstream commit 3a63b3d160560ef51e43fb4c880a5cde8078053c ]
    
    tcp_get_timestamping_opt_stats() intentionally runs lockless, we must
    add READ_ONCE() annotations to keep KCSAN happy.
    
    WRITE_ONCE() annotations are already present.
    
    Fixes: e08ab0b377a1 ("tcp: add bytes not sent to SCM_TIMESTAMPING_OPT_STATS")
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

tcp: annotate data-races around tp->bytes_retrans [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Apr 16 20:03:13 2026 +0000

    tcp: annotate data-races around tp->bytes_retrans
    
    [ Upstream commit 5efc7b9f7cbd43401f1af81d3d7f2be00f93390d ]
    
    tcp_get_timestamping_opt_stats() intentionally runs lockless, we must
    add READ_ONCE() and WRITE_ONCE() annotations to keep KCSAN happy.
    
    Fixes: fb31c9b9f6c8 ("tcp: add data bytes retransmitted stats")
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

tcp: annotate data-races around tp->bytes_sent [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Apr 16 20:03:12 2026 +0000

    tcp: annotate data-races around tp->bytes_sent
    
    [ Upstream commit ee43e957ce2ec77b2ec47fef28f3c0df6ab01a31 ]
    
    tcp_get_timestamping_opt_stats() intentionally runs lockless, we must
    add READ_ONCE() and WRITE_ONCE() annotations to keep KCSAN happy.
    
    Fixes: ba113c3aa79a ("tcp: add data bytes sent stats")
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

tcp: annotate data-races around tp->dsack_dups [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Apr 16 20:03:14 2026 +0000

    tcp: annotate data-races around tp->dsack_dups
    
    [ Upstream commit a984705ca88b976bf1087978fd98b7f3993da88c ]
    
    tcp_get_timestamping_opt_stats() intentionally runs lockless, we must
    add READ_ONCE() and WRITE_ONCE() annotations to keep KCSAN happy.
    
    Fixes: 7e10b6554ff2 ("tcp: add dsack blocks received stats")
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

tcp: annotate data-races around tp->plb_rehash [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Apr 16 20:03:19 2026 +0000

    tcp: annotate data-races around tp->plb_rehash
    
    [ Upstream commit 9e89b9d03a2d2e30dcca166d5af52f9a8eceab25 ]
    
    tcp_get_timestamping_opt_stats() intentionally runs lockless, we must
    add READ_ONCE() and WRITE_ONCE() annotations to keep KCSAN happy.
    
    Fixes: 29c1c44646ae ("tcp: add u32 counter in tcp_sock and an SNMP counter for PLB")
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
thermal/drivers/spear: Fix error condition for reading st,thermal-flags [+ + +]
Author: Gopi Krishna Menon <[email protected]>
Date:   Fri Mar 27 14:35:24 2026 +0530

    thermal/drivers/spear: Fix error condition for reading st,thermal-flags
    
    [ Upstream commit da2c4f332a0504d9c284e7626a561d343c8d6f57 ]
    
    of_property_read_u32 returns 0 on success. The current check returns
    -EINVAL if the property is read successfully.
    
    Fix the check by removing ! from of_property_read_u32
    
    Fixes: b9c7aff481f1 ("drivers/thermal/spear_thermal.c: add Device Tree probing capability")
    Signed-off-by: Gopi Krishna Menon <[email protected]>
    Signed-off-by: Daniel Lezcano <[email protected]>
    Suggested-by: Daniel Baluta <[email protected]>
    Reviewed-by: Lukasz Luba <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
tipc: fix double-free in tipc_buf_append() [+ + +]
Author: Lee Jones <[email protected]>
Date:   Tue Apr 21 13:45:26 2026 +0100

    tipc: fix double-free in tipc_buf_append()
    
    [ Upstream commit d293ca716e7d5dffdaecaf6b9b2f857a33dc3d3a ]
    
    tipc_msg_validate() can potentially reallocate the skb it is validating,
    freeing the old one.  In tipc_buf_append(), it was being called with a
    pointer to a local variable which was a copy of the caller's skb
    pointer.
    
    If the skb was reallocated and validation subsequently failed, the error
    handling path would free the original skb pointer, which had already
    been freed, leading to double-free.
    
    Fix this by checking if head now points to a newly allocated reassembled
    skb.  If it does, reassign *headbuf for later freeing operations.
    
    Fixes: d618d09a68e4 ("tipc: enforce valid ratio between skb truesize and contents")
    Suggested-by: Tung Nguyen <[email protected]>
    Signed-off-by: Lee Jones <[email protected]>
    Reviewed-by: Tung Nguyen <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tracing: branch: Fix inverted check on stat tracer registration [+ + +]
Author: Breno Leitao <[email protected]>
Date:   Mon Apr 20 06:25:09 2026 -0700

    tracing: branch: Fix inverted check on stat tracer registration
    
    [ Upstream commit 3b75dd76e64a04771861bb5647951c264919e563 ]
    
    init_annotated_branch_stats() and all_annotated_branch_stats() check the
    return value of register_stat_tracer() with "if (!ret)", but
    register_stat_tracer() returns 0 on success and a negative errno on
    failure. The inverted check causes the warning to be printed on every
    successful registration, e.g.:
    
      Warning: could not register annotated branches stats
    
    while leaving real failures silent. The initcall also returned a
    hard-coded 1 instead of the actual error.
    
    Invert the check and propagate ret so that the warning fires on real
    errors and the initcall reports the correct status.
    
    Cc: Mathieu Desnoyers <[email protected]>
    Cc: Ingo Molnar <[email protected]>
    Cc: Frederic Weisbecker <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Fixes: 002bb86d8d42 ("tracing/ftrace: separate events tracing and stats tracing engine")
    Signed-off-by: Breno Leitao <[email protected]>
    Acked-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Steven Rostedt <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

tracing: Rebuild full_name on each hist_field_name() call [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Wed Apr 1 19:22:23 2026 +0800

    tracing: Rebuild full_name on each hist_field_name() call
    
    [ Upstream commit 5ec1d1e97de134beed3a5b08235a60fc1c51af96 ]
    
    hist_field_name() uses a static MAX_FILTER_STR_VAL buffer for fully
    qualified variable-reference names, but it currently appends into that
    buffer with strcat() without rebuilding it first. As a result, repeated
    calls append a new "system.event.field" name onto the previous one,
    which can eventually run past the end of full_name.
    
    Build the name with snprintf() on each call and return NULL if the fully
    qualified name does not fit in MAX_FILTER_STR_VAL.
    
    Link: https://patch.msgid.link/[email protected]
    Fixes: 067fe038e70f ("tracing: Add variable reference handling to hist triggers")
    Reviewed-by: Tom Zanussi <[email protected]>
    Tested-by: Tom Zanussi <[email protected]>
    Signed-off-by: Pengpeng Hou <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tty: hvc_iucv: fix off-by-one in number of supported devices [+ + +]
Author: Randy Dunlap <[email protected]>
Date:   Thu Jan 29 23:29:37 2026 -0800

    tty: hvc_iucv: fix off-by-one in number of supported devices
    
    [ Upstream commit f2a880e802ad12d1e38039d1334fb1475d0f5241 ]
    
    MAX_HVC_IUCV_LINES == HVC_ALLOC_TTY_ADAPTERS == 8.
    This is the number of entries in:
      static struct hvc_iucv_private *hvc_iucv_table[MAX_HVC_IUCV_LINES];
    
    Sometimes hvc_iucv_table[] is limited by:
    (a)     if (num > hvc_iucv_devices) // for error detection
    or
    (b)     for (i = 0; i < hvc_iucv_devices; i++) // in 2 places
    (so these 2 don't agree; second one appears to be correct to me.)
    
    hvc_iucv_devices can be 0..8. This is a counter.
    (c)     if (hvc_iucv_devices > MAX_HVC_IUCV_LINES)
    
    If hvc_iucv_devices == 8, (a) allows the code to access hvc_iucv_table[8].
    Oops.
    
    Fixes: 44a01d5ba8a4 ("[S390] s390/hvc_console: z/VM IUCV hypervisor console support")
    Signed-off-by: Randy Dunlap <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
unshare: fix nsproxy leak in ksys_unshare() on set_cred_ucounts() failure [+ + +]
Author: Michal Grzedzicki <[email protected]>
Date:   Fri Feb 13 11:39:59 2026 -0800

    unshare: fix nsproxy leak in ksys_unshare() on set_cred_ucounts() failure
    
    [ Upstream commit a98621a0f187a934c115dcfe79a49520ae892111 ]
    
    When set_cred_ucounts() fails in ksys_unshare() new_nsproxy is leaked.
    
    Let's call put_nsproxy() if that happens.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 905ae01c4ae2 ("Add a reference to ucounts for each cred")
    Signed-off-by: Michal Grzedzicki <[email protected]>
    Reviewed-by: Andrew Morton <[email protected]>
    Cc: Alexey Gladkov (Intel) <[email protected]>
    Cc: Ben Segall <[email protected]>
    Cc: David Hildenbrand <[email protected]>
    Cc: Dietmar Eggemann <[email protected]>
    Cc: Ingo Molnar <[email protected]>
    Cc: Juri Lelli <[email protected]>
    Cc: Kees Cook <[email protected]>
    Cc: "Liam R. Howlett" <[email protected]>
    Cc: Lorenzo Stoakes (Oracle) <[email protected]>
    Cc: Mel Gorman <[email protected]>
    Cc: Michal Hocko <[email protected]>
    Cc: Mike Rapoport <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Cc: Steven Rostedt <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: Valentin Schneider <[email protected]>
    Cc: Vincent Guittot <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
vhost_net: fix sleeping with preempt-disabled in vhost_net_busy_poll() [+ + +]
Author: Kohei Enju <[email protected]>
Date:   Wed Apr 22 02:30:24 2026 +0000

    vhost_net: fix sleeping with preempt-disabled in vhost_net_busy_poll()
    
    [ Upstream commit e08a9fac5cf8c3fecf4755e7e3ac059f78b8f83d ]
    
    syzbot reported "sleeping function called from invalid context" in
    vhost_net_busy_poll().
    
    Commit 030881372460 ("vhost_net: basic polling support") introduced a
    busy-poll loop and preempt_{disable,enable}() around it, where each
    iteration calls a sleepable function inside the loop.
    
    The purpose of disabling preemption was to keep local_clock()-based
    timeout accounting on a single CPU, rather than as a requirement of
    busy-poll itself:
    
    https://lore.kernel.org/[email protected]
    
    From this perspective, migrate_disable() is sufficient here, so replace
    preempt_disable() with migrate_disable(), avoiding sleepable accesses
    from a preempt-disabled context.
    
    Fixes: 030881372460 ("vhost_net: basic polling support")
    Tested-by: [email protected]
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/all/[email protected]/T/
    Signed-off-by: Kohei Enju <[email protected]>
    Acked-by: Michael S. Tsirkin <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
vrf: Fix a potential NPD when removing a port from a VRF [+ + +]
Author: Ido Schimmel <[email protected]>
Date:   Thu Apr 23 09:36:07 2026 +0300

    vrf: Fix a potential NPD when removing a port from a VRF
    
    [ Upstream commit 2674d603a9e6970463b2b9ebcf8e31e90beae169 ]
    
    RCU readers that identified a net device as a VRF port using
    netif_is_l3_slave() assume that a subsequent call to
    netdev_master_upper_dev_get_rcu() will return a VRF device. They then
    continue to dereference its l3mdev operations.
    
    This assumption is not always correct and can result in a NPD [1]. There
    is no RCU synchronization when removing a port from a VRF, so it is
    possible for an RCU reader to see a new master device (e.g., a bridge)
    that does not have l3mdev operations.
    
    Fix by adding RCU synchronization after clearing the IFF_L3MDEV_SLAVE
    flag. Skip this synchronization when a net device is removed from a VRF
    as part of its deletion and when the VRF device itself is deleted. In
    the latter case an RCU grace period will pass by the time RTNL is
    released.
    
    [1]
    BUG: kernel NULL pointer dereference, address: 0000000000000000
    [...]
    RIP: 0010:l3mdev_fib_table_rcu (net/l3mdev/l3mdev.c:181)
    [...]
    Call Trace:
    <TASK>
    l3mdev_fib_table_by_index (net/l3mdev/l3mdev.c:201 net/l3mdev/l3mdev.c:189)
    __inet_bind (net/ipv4/af_inet.c:499 (discriminator 3))
    inet_bind_sk (net/ipv4/af_inet.c:469)
    __sys_bind (./include/linux/file.h:62 (discriminator 1) ./include/linux/file.h:83 (discriminator 1) net/socket.c:1951 (discriminator 1))
    __x64_sys_bind (net/socket.c:1969 (discriminator 1) net/socket.c:1967 (discriminator 1) net/socket.c:1967 (discriminator 1))
    do_syscall_64 (arch/x86/entry/syscall_64.c:63 (discriminator 1) arch/x86/entry/syscall_64.c:94 (discriminator 1))
    entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
    
    Fixes: fdeea7be88b1 ("net: vrf: Set slave's private flag before linking")
    Reported-by: Haoze Xie <[email protected]>
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Reported-by: Yuan Tan <[email protected]>
    Closes: https://lore.kernel.org/netdev/[email protected]/
    Signed-off-by: Ido Schimmel <[email protected]>
    Reviewed-by: David Ahern <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
wifi: brcmfmac: Fix error pointer dereference [+ + +]
Author: Ethan Tidmore <[email protected]>
Date:   Mon Feb 16 20:30:43 2026 -0600

    wifi: brcmfmac: Fix error pointer dereference
    
    [ Upstream commit dd8592fc6007a451c3e4b9025de365e39de8178a ]
    
    The function brcmf_chip_add_core() can return an error pointer and is
    not checked. Add checks for error pointer.
    
    Detected by Smatch:
    drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c:1010 brcmf_chip_recognition() error:
    'core' dereferencing possible ERR_PTR()
    
    drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c:1013 brcmf_chip_recognition() error:
    'core' dereferencing possible ERR_PTR()
    
    drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c:1016 brcmf_chip_recognition() error:
    'core' dereferencing possible ERR_PTR()
    
    drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c:1019 brcmf_chip_recognition() error:
    'core' dereferencing possible ERR_PTR()
    
    drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c:1022 brcmf_chip_recognition() error:
    'core' dereferencing possible ERR_PTR()
    
    Fixes: cb7cf7be9eba7 ("brcmfmac: make chip related functions host interface independent")
    Signed-off-by: Ethan Tidmore <[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: mt76: mt7615: fix use_cts_prot support [+ + +]
Author: Ryder Lee <[email protected]>
Date:   Wed Jan 21 09:41:56 2026 -0800

    wifi: mt76: mt7615: fix use_cts_prot support
    
    [ Upstream commit 1974a67d9b65c29a0a9426e32e8cd8c056de48b7 ]
    
    Driver should not directly write WTBL to prevent overwritten issues.
    
    With this fix, when driver needs to adjust its behavior for compatibility,
    especially concerning older 11g/n devices, by enabling or disabling CTS
    protection frames, often for hidden SSIDs or to manage legacy clients.
    
    Fixes: e34235ccc5e3 ("wifi: mt76: mt7615: enable use_cts_prot support")
    Signed-off-by: Ryder Lee <[email protected]>
    Link: https://patch.msgid.link/edb87088b0111b32fafc6c4179f54a5286dd37d8.1768879119.git.ryder.lee@mediatek.com
    Signed-off-by: Felix Fietkau <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mt76: mt7915: fix use-after-free bugs in mt7915_mac_dump_work() [+ + +]
Author: Duoming Zhou <[email protected]>
Date:   Fri Jan 30 22:57:59 2026 +0800

    wifi: mt76: mt7915: fix use-after-free bugs in mt7915_mac_dump_work()
    
    [ Upstream commit 1146d0946b5358fad24812bd39d68f31cd40cc34 ]
    
    When the mt7915 pci chip is detaching, the mt7915_crash_data is
    released in mt7915_coredump_unregister(). However, the work item
    dump_work may still be running or pending, leading to UAF bugs
    when the already freed crash_data is dereferenced again in
    mt7915_mac_dump_work().
    
    The race condition can occur as follows:
    
    CPU 0 (removal path)               | CPU 1 (workqueue)
    mt7915_pci_remove()                | mt7915_sys_recovery_set()
     mt7915_unregister_device()        |  mt7915_reset()
      mt7915_coredump_unregister()     |   queue_work()
       vfree(dev->coredump.crash_data) | mt7915_mac_dump_work()
                                       |  crash_data-> // UAF
    
    Fix this by ensuring dump_work is properly canceled before
    the crash_data is deallocated. Add cancel_work_sync() in
    mt7915_unregister_device() to synchronize with any pending
    or executing dump work.
    
    Fixes: 4dbcb9125cc3 ("wifi: mt76: mt7915: enable coredump support")
    Signed-off-by: Duoming Zhou <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Felix Fietkau <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mt76: mt7915: fix use_cts_prot support [+ + +]
Author: Ryder Lee <[email protected]>
Date:   Wed Jan 21 09:41:57 2026 -0800

    wifi: mt76: mt7915: fix use_cts_prot support
    
    [ Upstream commit 8b2c26562b95c6397e132d21f2bd3d73aaee0c0a ]
    
    With this fix, when driver needs to adjust its behavior for compatibility,
    especially concerning older 11g/n devices, by enabling or disabling CTS
    protection frames, often for hidden SSIDs or to manage legacy clients.
    
    Fixes: 150b91419d3d ("wifi: mt76: mt7915: enable use_cts_prot support")
    Signed-off-by: Ryder Lee <[email protected]>
    Link: https://patch.msgid.link/eb8db4d0bf1c89b7486e89facb788ae3e510dd8b.1768879119.git.ryder.lee@mediatek.com
    Signed-off-by: Felix Fietkau <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mt76: mt7921: Reset ampdu_state state in case of failure in mt76_connac2_tx_check_aggr() [+ + +]
Author: Sean Wang <[email protected]>
Date:   Mon Dec 15 18:59:30 2025 -0600

    wifi: mt76: mt7921: Reset ampdu_state state in case of failure in mt76_connac2_tx_check_aggr()
    
    [ Upstream commit 53ffffeb9624ffab6d9a3b1da8635a23f1172b5e ]
    
    Reset ampdu_state if ieee80211_start_tx_ba_session() fails in
    mt76_connac2_tx_check_aggr(), otherwise the driver may incorrectly
    assume aggregation is active and skip future BA setup attempts.
    
    Fixes: 163f4d22c118 ("mt76: mt7921: add MAC support")
    Signed-off-by: Sean Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Felix Fietkau <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mt76: mt7996: fix FCS error flag check in RX descriptor [+ + +]
Author: Alok Tiwari <[email protected]>
Date:   Mon Oct 13 02:08:24 2025 -0700

    wifi: mt76: mt7996: fix FCS error flag check in RX descriptor
    
    [ Upstream commit d8db56142e531f060c938fa0b5175ed6c8cabb11 ]
    
    The mt7996 driver currently checks the MT_RXD3_NORMAL_FCS_ERR bit in
    rxd1 whereas other Connac3-based drivers(mt7925) correctly check this
    bit in rxd3.
    
    Since the MT_RXD3_NORMAL_FCS_ERR bit is defined in the fourth RX
    descriptor word (rxd3), update mt7996 to use the proper descriptor
    field. This change aligns mt7996 with mt7925 and the rest of the
    Connac3 family.
    
    Fixes: 98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")
    Signed-off-by: Alok Tiwari <[email protected]>
    Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Felix Fietkau <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mt76: mt7996: fix struct mt7996_mcu_uni_event [+ + +]
Author: StanleyYP Wang <[email protected]>
Date:   Tue Feb 3 23:55:30 2026 +0800

    wifi: mt76: mt7996: fix struct mt7996_mcu_uni_event
    
    [ Upstream commit efbd5bf395f4e6b45a87f3835d4c2e28170c77c5 ]
    
    The cid field is defined as a two-byte value in the firmware.
    
    Fixes: 98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices")
    Signed-off-by: StanleyYP Wang <[email protected]>
    Signed-off-by: Shayne Chen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Felix Fietkau <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mwifiex: Fix memory leak in mwifiex_11n_aggregate_pkt() [+ + +]
Author: Zilin Guan <[email protected]>
Date:   Mon Jan 19 09:26:25 2026 +0000

    wifi: mwifiex: Fix memory leak in mwifiex_11n_aggregate_pkt()
    
    [ Upstream commit 990a73dec3fdc145fef6c827c29205437d533ece ]
    
    In mwifiex_11n_aggregate_pkt(), skb_aggr is allocated via
    mwifiex_alloc_dma_align_buf(). If mwifiex_is_ralist_valid() returns false,
    the function currently returns -1 immediately without freeing the
    previously allocated skb_aggr, causing a memory leak.
    
    Since skb_aggr has not yet been queued via skb_queue_tail(), no other
    references to this memory exist. Therefore, it has to be freed locally
    before returning the error.
    
    Fix this by calling mwifiex_write_data_complete() to free skb_aggr before
    returning the error status.
    
    Compile tested only. Issue found using a prototype static analysis tool
    and code review.
    
    Fixes: 5e6e3a92b9a4 ("wireless: mwifiex: initial commit for Marvell mwifiex driver")
    Signed-off-by: Zilin Guan <[email protected]>
    Reviewed-by: Jeff Chen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: rtlwifi: pci: fix possible use-after-free caused by unfinished irq_prepare_bcn_tasklet [+ + +]
Author: Duoming Zhou <[email protected]>
Date:   Mon Feb 23 12:55:22 2026 +0800

    wifi: rtlwifi: pci: fix possible use-after-free caused by unfinished irq_prepare_bcn_tasklet
    
    [ Upstream commit 039cd522dc70151da13329a5e3ae19b1736f468a ]
    
    The irq_prepare_bcn_tasklet is initialized in rtl_pci_init() and
    scheduled when RTL_IMR_BCNINT interrupt is triggered by hardware.
    But it is never killed in rtl_pci_deinit(). When the rtlwifi card
    probe fails or is being detached, the ieee80211_hw is deallocated.
    However, irq_prepare_bcn_tasklet may still be running or pending,
    leading to use-after-free when the freed ieee80211_hw is accessed
    in _rtl_pci_prepare_bcn_tasklet().
    
    Similar to irq_tasklet, add tasklet_kill() in rtl_pci_deinit() to
    ensure that irq_prepare_bcn_tasklet is properly terminated before
    the ieee80211_hw is released.
    
    The issue was identified through static analysis.
    
    Fixes: 0c8173385e54 ("rtl8192ce: Add new driver")
    Signed-off-by: Duoming Zhou <[email protected]>
    Acked-by: Ping-Ke Shih <[email protected]>
    Signed-off-by: Ping-Ke Shih <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

wifi: rtw89: phy: fix uninitialized variable access in rtw89_phy_cfo_set_crystal_cap() [+ + +]
Author: Alexey Velichayshiy <[email protected]>
Date:   Mon Mar 23 17:05:53 2026 +0300

    wifi: rtw89: phy: fix uninitialized variable access in rtw89_phy_cfo_set_crystal_cap()
    
    [ Upstream commit 047cddf88c611e616d49a00311d4722e46286234 ]
    
    In the rtw89_phy_cfo_set_crystal_cap() function, for chips other than
    RTL8852A/RTL8851B, the values read by rtw89_mac_read_xtal_si() are
    stored into the local variables sc_xi_val and sc_xo_val. If either
    read fails, these variables remain uninitialized, they are later
    used to update cfo->crystal_cap and in debug print statements. This
    can lead to undefined behavior.
    
    Fix the issue by initializing sc_xi_val and sc_xo_val to zero,
    like is implemented in vendor driver.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 8379fa611536 ("rtw89: 8852c: add write/read crystal function in CFO tracking")
    Signed-off-by: Alexey Velichayshiy <[email protected]>
    Acked-by: Ping-Ke Shih <[email protected]>
    Signed-off-by: Ping-Ke Shih <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
workqueue: Fix wq->cpu_pwq leak in alloc_and_link_pwqs() WQ_UNBOUND path [+ + +]
Author: Breno Leitao <[email protected]>
Date:   Fri May 8 09:22:03 2026 -0700

    workqueue: Fix wq->cpu_pwq leak in alloc_and_link_pwqs() WQ_UNBOUND path
    
    commit 0143033dc22cdff912cfc13419f5db92fea3b4cb upstream.
    
    For WQ_UNBOUND workqueues, alloc_and_link_pwqs() allocates wq->cpu_pwq
    via alloc_percpu() and then calls apply_workqueue_attrs_locked(). On
    failure it returns the error directly, bypassing the enomem: label
    which holds the only free_percpu(wq->cpu_pwq) in this function.
    
    The caller's error path kfree()s wq without touching wq->cpu_pwq,
    leaking one percpu pointer table (nr_cpu_ids * sizeof(void *) bytes) per
    failed call.
    
    If kmemleak is enabled, we can see:
    
      unreferenced object (percpu) 0xc0fffa5b121048 (size 8):
        comm "insmod", pid 776, jiffies 4294682844
        backtrace (crc 0):
          pcpu_alloc_noprof+0x665/0xac0
          __alloc_workqueue+0x33f/0xa20
          alloc_workqueue_noprof+0x60/0x100
    
    Route the error through the existing enomem: cleanup and any error
    before this one.
    
    Cc: [email protected]
    Fixes: 636b927eba5b ("workqueue: Make unbound workqueues to use per-cpu pool_workqueues")
    Signed-off-by: Breno Leitao <[email protected]>
    Signed-off-by: Tejun Heo <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>