Changelog in Linux kernel 5.10.258

 
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: property: Constify stubs for CONFIG_ACPI=n case [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Sat Apr 18 16:07:04 2026 -0700

    ACPI: property: Constify stubs for CONFIG_ACPI=n case
    
    commit 5c1a72a0fbe1b02c3ce0537f85f92ea935e0beec upstream.
    
    There is a few stubs that left untouched during constification of
    the fwnode related APIs. Constify three more stubs here.
    
    Fixes: 8b9d6802583a ("ACPI: Constify acpi_bus helper functions, switch to macros")
    Reported-by: kernel test robot <[email protected]>
    Signed-off-by: Andy Shevchenko <[email protected]>
    [ rjw: Subject edit ]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Nathan Chancellor <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

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

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

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

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

 
alarmtimer: Check RTC features instead of ops [+ + +]
Author: Alexandre Belloni <[email protected]>
Date:   Tue May 11 03:45:16 2021 +0200

    alarmtimer: Check RTC features instead of ops
    
    [ Upstream commit e09784a8a751e539dffc94d43bc917b0ac1e934a ]
    
    RTC drivers used to leave .set_alarm() NULL in order to signal the RTC
    device doesn't support alarms. The drivers are now clearing the
    RTC_FEATURE_ALARM bit for that purpose in order to keep the rtc_class_ops
    structure const. So now, .set_alarm() is set unconditionally and this
    possibly causes the alarmtimer code to select an RTC device that doesn't
    support alarms.
    
    Test RTC_FEATURE_ALARM instead of relying on ops->set_alarm to determine
    whether alarms are available.
    
    Fixes: 7ae41220ef58 ("rtc: introduce features bitfield")
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
ALSA: 6fire: Fix input volume change detection [+ + +]
Author: Cássio Gabriel <[email protected]>
Date:   Thu Apr 16 10:24:40 2026 -0300

    ALSA: 6fire: Fix input volume change detection
    
    commit dc88eef8f55e85e92d016cdf7e291f5560efd79b upstream.
    
    usb6fire_control_input_vol_put() stores the analog capture volume
    as a signed offset in rt->input_vol[] (-15..+15), but it compares
    the cached value against the user-visible mixer value (0..30)
    before subtracting 15.
    
    This mixes two domains in the change detection path. Since the
    runtime is zero-initialized, the visible default is 15; writing 0
    right after probe is ignored, while writing 15 is reported as a
    change even though the cached value remains 0.
    
    Normalize the user value before comparing it with the cached offset.
    
    Fixes: 06bb4e743501 ("ALSA: snd-usb-6fire: add analog input volume control")
    Cc: [email protected]
    Signed-off-by: Cássio Gabriel <[email protected]>
    Link: https://patch.msgid.link/20260416-alsa-6fire-input-volume-change-detection-v1-1-ec78299168df@gmail.com
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

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

ALSA: aoa: i2sbus: fix OF node lifetime handling [+ + +]
Author: Cássio Gabriel <[email protected]>
Date:   Mon Mar 30 01:00:34 2026 -0300

    ALSA: aoa: i2sbus: fix OF node lifetime handling
    
    commit 4ec93f070eda6b765b62efcaed9241c3b3b0b6ad upstream.
    
    i2sbus_add_dev() keeps the matched "sound" child pointer after
    for_each_child_of_node() has dropped the iterator reference. Take an
    extra reference before saving that node and drop it after the
    layout-id/device-id lookup is complete.
    
    The function also stores np in dev->sound.ofdev.dev.of_node without
    taking a reference for the embedded soundbus device. Since i2sbus
    overrides the embedded platform device release callback, balance that
    reference explicitly in the local error path and in i2sbus_release_dev().
    
    Fixes: f3d9478b2ce4 ("[ALSA] snd-aoa: add snd-aoa")
    Cc: [email protected]
    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: Greg Kroah-Hartman <[email protected]>

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

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

    ALSA: asihpi: Fix potential OOB array access at reading cache
    
    commit 7b7d6572145c1dab2dd9bfb550b188e5f0ff3c3f upstream.
    
    find_control() to retrieve a cached info accesses the array with the
    given index blindly, which may lead to an OOB array access.
    Add a sanity check for avoiding it.
    
    Link: https://sashiko.dev/#/patchset/20260511230121.28606-1-rosenp%40gmail.com
    Cc: <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: caiaq: Don't abort when no input device is available [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Mon Apr 27 16:56:15 2026 +0200

    ALSA: caiaq: Don't abort when no input device is available
    
    commit b32ae47a2b0a1fb4bd4942242847966d9b178222 upstream.
    
    The previous fix to handle the error from setup_card() caused a
    regression for the models that have no dedicated input device;
    snd_usb_caiaq_input_init() just returns -EINVAL, and we treat it as a
    fatal error although it should be ignored.
    
    As a regression fix, change the error code to -ENODEV, and ignore this
    error in the callee, to continue probing.
    
    Fixes: 28abd224db4a ("ALSA: caiaq: Handle probe errors properly")
    Cc: <[email protected]>
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=221423
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: caiaq: Fix control_put() result and cache rollback [+ + +]
Author: Cássio Gabriel <[email protected]>
Date:   Fri Apr 17 10:41:33 2026 -0300

    ALSA: caiaq: Fix control_put() result and cache rollback
    
    commit a3542d1b30f92307f545f2def14e8d988dffdff0 upstream.
    
    control_put() always returns 1 and updates cdev->control_state[]
    before sending the USB command. It also ignores transport errors
    from usb_bulk_msg(), snd_usb_caiaq_send_command(), and
    snd_usb_caiaq_send_command_bank().
    
    That breaks the ALSA .put() contract and can leave control_get()
    reporting a cached value the device never accepted.
    
    Return 0 for unchanged values, propagate transport failures,
    and restore the cached byte when the write fails.
    
    Fixes: 8e3cd08ed8e59 ("[ALSA] caiaq - add control API and more input features")
    Cc: [email protected]
    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: Greg Kroah-Hartman <[email protected]>

ALSA: caiaq: Fix potentially leftover ep1_in_urb at error path [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Mon Apr 27 14:37:53 2026 +0200

    ALSA: caiaq: Fix potentially leftover ep1_in_urb at error path
    
    commit 0a7b5221b5b51cc798fcfc3be00d02eade149d69 upstream.
    
    The previous fix for handling the error from setup_card() missed that
    an internal URB cdev->ep1_in_urb might have been already submitted
    beforehand.  In the normal case, this URB gets killed at the
    disconnection, but in the error path, we didn't do it, hence there can
    be a potential leak.
    
    Fix it in the error path for setup_card(), too.
    
    Fixes: 28abd224db4a ("ALSA: caiaq: Handle probe errors properly")
    Cc: <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: caiaq: fix usb_dev refcount leak on probe failure [+ + +]
Author: Deepanshu Kartikey <[email protected]>
Date:   Sun Apr 26 05:49:34 2026 +0530

    ALSA: caiaq: fix usb_dev refcount leak on probe failure
    
    commit 7a5f1cd22d47f8ca4b760b6334378ae42c1bd24b upstream.
    
    create_card() takes a reference on the USB device with usb_get_dev()
    and stores the matching usb_put_dev() in card_free(), which is
    installed as the snd_card's ->private_free destructor.
    
    However, ->private_free is only assigned near the end of init_card(),
    after several failure points (usb_set_interface(), EP type checks,
    usb_submit_urb(), the EP1_CMD_GET_DEVICE_INFO exchange, and its
    timeout). When any of those fail, init_card() returns an error to
    snd_probe(), which calls snd_card_free(card). Because ->private_free
    is still NULL, card_free() never runs, the usb_get_dev() reference
    is not dropped, and the struct usb_device leaks along with its
    descriptor allocations and device_private.
    
    syzbot reproduces this with a malformed UAC3 device whose only valid
    altsetting is 0; init_card()'s usb_set_interface(usb_dev, 0, 1) call
    fails with -EIO and triggers the leak.
    
    Move the ->private_free assignment into create_card(), immediately
    after usb_get_dev(), so that every error path reaching snd_card_free()
    balances the reference. card_free()'s callees (snd_usb_caiaq_input_free,
    free_urbs, kfree) already tolerate the partially-initialized state
    because the chip private area is zero-initialized by snd_card_new().
    
    Fixes: 80bb50e2d459 ("ALSA: caiaq: take a reference on the USB device in create_card()")
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=2afd7e71155c7e241560
    Tested-by: [email protected]
    Cc: [email protected]
    Signed-off-by: Deepanshu Kartikey <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: caiaq: Handle probe errors properly [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Tue Apr 14 12:59:00 2026 +0200

    ALSA: caiaq: Handle probe errors properly
    
    commit 28abd224db4a49560b452115bca3672a20e45b2f upstream.
    
    The probe procedure of setup_card() in caiaq driver doesn't treat the
    error cases gracefully, e.g. the error from snd_card_register() calls
    snd_card_free() but continues.  This would lead to a UAF for the
    further calls like snd_usb_caiaq_control_init(), as Berk suggested in
    another patch in the link below.
    
    However, the problem is not only that; in general, this function drops
    the all error handlings (as it's a void function) although its caller
    can propagate an error to snd_probe(), which eventually calls
    snd_card_free() as a proper error path.  That said, we should treat
    each error case in setup_card(), and just return the error code
    promptly, which is then handled later as a fatal error in snd_probe().
    
    This patch achieves it by changing the setup_card() to return an error
    code.  Also, the superfluous snd_card_free() call is removed, too.
    
    Note that card->private_free can be set still safely at returning an
    error.  All called functions in card_free() have checks of the
    unassigned resources or NULL checks.
    
    Fixes: 8e3cd08ed8e5 ("[ALSA] caiaq - add control API and more input features")
    Cc: [email protected]
    Link: https://lore.kernel.org/[email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: caiaq: take a reference on the USB device in create_card() [+ + +]
Author: Berk Cem Goksel <[email protected]>
Date:   Mon Apr 13 06:49:41 2026 +0300

    ALSA: caiaq: take a reference on the USB device in create_card()
    
    commit 80bb50e2d459213cccff3111d5ef98ed4238c0d5 upstream.
    
    The caiaq driver stores a pointer to the parent USB device in
    cdev->chip.dev but never takes a reference on it. The card's
    private_free callback, snd_usb_caiaq_card_free(), can run
    asynchronously via snd_card_free_when_closed() after the USB
    device has already been disconnected and freed, so any access to
    cdev->chip.dev in that path dereferences a freed usb_device.
    
    On top of the refcounting issue, the current card_free implementation
    calls usb_reset_device(cdev->chip.dev). A reset in a free callback
    is inappropriate: the device is going away, the call takes the
    device lock in a teardown context, and the reset races with the
    disconnect path that the callback is already cleaning up after.
    
    Take a reference on the USB device in create_card() with
    usb_get_dev(), drop it with usb_put_dev() in the free callback,
    and remove the usb_reset_device() call.
    
    Fixes: b04dcbb7f7b1 ("ALSA: caiaq: Use snd_card_free_when_closed() at disconnection")
    Cc: [email protected]
    Cc: Andrey Konovalov <[email protected]>
    Signed-off-by: Berk Cem Goksel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: compress: Drop unused functions [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Wed Jul 14 18:24:23 2021 +0200

    ALSA: compress: Drop unused functions
    
    [ Upstream commit fc93c96fe34e10b873fef73e80cee52503f3a679 ]
    
    snd_compress_register() and snd_compress_deregister() API functions
    have been never used by in-tree drivers.
    Let's clean up the dead code.
    
    Acked-by: Vinod Koul <[email protected]>
    Reviewed-by: Peter Ujfalusi <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Stable-dep-of: 796e119e9b14 ("ALSA: core: Validate compress device numbers without dynamic minors")
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: control: Validate buf_len before strnlen() in snd_ctl_elem_init_enum_names() [+ + +]
Author: Ziqing Chen <[email protected]>
Date:   Tue Apr 14 21:24:37 2026 +0800

    ALSA: control: Validate buf_len before strnlen() in snd_ctl_elem_init_enum_names()
    
    commit e0da8a8cac74f4b9f577979d131f0d2b88a84487 upstream.
    
    snd_ctl_elem_init_enum_names() advances pointer p through the names
    buffer while decrementing buf_len. If buf_len reaches zero but items
    remain, the next iteration calls strnlen(p, 0).
    
    While strnlen(p, 0) returns 0 and would hit the existing name_len == 0
    error path, CONFIG_FORTIFY_SOURCE's fortified strnlen() first checks
    maxlen against __builtin_dynamic_object_size(). When Clang loses track
    of p's object size inside the loop, this triggers a BRK exception panic
    before the return value is examined.
    
    Add a buf_len == 0 guard at the loop entry to prevent calling fortified
    strnlen() on an exhausted buffer.
    
    Found by kernel fuzz testing through Xiaomi Smartphone.
    
    Fixes: 8d448162bda5 ("ALSA: control: add support for ENUMERATED user space controls")
    Cc: [email protected]
    Signed-off-by: Ziqing Chen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: 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: ctxfi: Add fallback to default RSR for S/PDIF [+ + +]
Author: Harin Lee <[email protected]>
Date:   Mon Apr 6 16:49:13 2026 +0900

    ALSA: ctxfi: Add fallback to default RSR for S/PDIF
    
    commit 7d61662197ecdc458e33e475b6ada7f6da61d364 upstream.
    
    spdif_passthru_playback_get_resources() uses atc->pll_rate as the RSR
    for the MSR calculation loop. However, pll_rate is only updated in
    atc_pll_init() and not in hw_pll_init(), so it remains 0 after the
    card init.
    
    When spdif_passthru_playback_setup() skips atc_pll_init() for
    32000 Hz, (rsr * desc.msr) always becomes 0, causing the loop to spin
    indefinitely.
    
    Add fallback to use atc->rsr when atc->pll_rate is 0. This reflects
    the hardware state, since hw_card_init() already configures the PLL
    to the default RSR.
    
    Fixes: 8cc72361481f ("ALSA: SB X-Fi driver merge")
    Cc: [email protected]
    Signed-off-by: Harin Lee <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

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

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

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

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

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

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

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

ALSA: hda/realtek: 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: hda/realtek: Whitespace fix [+ + +]
Author: Luke D. Jones <[email protected]>
Date:   Tue Jul 4 16:46:19 2023 +1200

    ALSA: hda/realtek: Whitespace fix
    
    [ Upstream commit 72cea3a3175b50a4875b3c112fb13df20c6218a5 ]
    
    Remove an erroneous whitespace.
    
    Fixes: 31278997add6 ("ALSA: hda/realtek - Add headset quirk for Dell DT")
    Signed-off-by: Luke D. Jones <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Stable-dep-of: d1888bf848ad ("ALSA: hda/realtek: fix code style (ERROR: else should follow close brace '}')")
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: seq_oss: return full count for successful SEQ_FULLSIZE writes [+ + +]
Author: Cássio Gabriel <[email protected]>
Date:   Tue Mar 24 16:59:41 2026 -0300

    ALSA: seq_oss: return full count for successful SEQ_FULLSIZE writes
    
    commit bbc6c0dda54fc0ad8f8aed0b796c23e186e1a188 upstream.
    
    snd_seq_oss_write() currently returns the raw load_patch() callback
    result for SEQ_FULLSIZE events.
    
    That callback is documented as returning 0 on success and -errno on
    failure, but snd_seq_oss_write() is the file write path and should
    report the number of user bytes consumed on success. Some in-tree
    backends also return backend-specific positive values, which can still
    be shorter than the original write size.
    
    Return the full byte count for successful SEQ_FULLSIZE writes.
    Preserve negative errors and convert any nonnegative completion to the
    original count.
    
    Cc: [email protected]
    Signed-off-by: Cássio Gabriel <[email protected]>
    Link: https://patch.msgid.link/20260324-alsa-seq-oss-fullsize-write-return-v1-1-66d448510538@gmail.com
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: ua101: Reject too-short USB descriptors [+ + +]
Author: Cássio Gabriel <[email protected]>
Date:   Tue May 19 00:32:15 2026 -0300

    ALSA: ua101: Reject too-short USB descriptors
    
    commit b59d5c51bb328a60749b4dd5fe7e649bfb4089b4 upstream.
    
    find_format_descriptor() walks the class-specific interface extras by
    advancing with bLength. It rejects descriptors that extend past the
    remaining buffer, but it does not reject descriptor lengths smaller than
    a USB descriptor header.
    
    Reject too-short descriptors before using bLength to advance the local
    scan. This keeps the UA-101 parser robust against malformed descriptor
    data and matches the usual USB descriptor walking rules.
    
    Fixes: 63978ab3e3e9 ("sound: add Edirol UA-101 support")
    Cc: [email protected]
    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: Greg Kroah-Hartman <[email protected]>

ALSA: usb-audio: apply quirk for MOONDROP JU Jiu [+ + +]
Author: Cryolitia PukNgae <[email protected]>
Date:   Thu Apr 2 13:36:57 2026 +0800

    ALSA: usb-audio: apply quirk for MOONDROP JU Jiu
    
    commit 4513d3e0bbc0585b86ccf2631902593ff97e88f5 upstream.
    
    It(ID 31b2:0111 JU Jiu) reports a MIN value -12800 for volume control, but
    will mute when setting it less than -10880.
    
    Thanks to my girlfriend Kagura for reporting this issue.
    
    Cc: Kagura <[email protected]>
    Cc: [email protected]
    Signed-off-by: Cryolitia PukNgae <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: usb-audio: Avoid false E-MU sample-rate notifications [+ + +]
Author: Cássio Gabriel <[email protected]>
Date:   Tue Apr 21 21:53:52 2026 -0300

    ALSA: usb-audio: Avoid false E-MU sample-rate notifications
    
    commit fca9c850042a7ab4828ce3a9caa8bc40ea09856a upstream.
    
    snd_emuusb_set_samplerate() unconditionally notifies the E-MU
    SampleRate Extension Unit control after issuing SET_CUR.
    
    If snd_usb_mixer_set_ctl_value() fails, the control value has not
    changed, yet snd_usb_mixer_notify_id() still invalidates the cache and
    emits a value-change event to userspace.
    
    Notify the control only after a successful write.
    
    Fixes: 7d2b451e65d2 ("ALSA: usb-audio - Added functionality for E-mu 0404USB/0202USB/TrackerPre")
    Cc: [email protected]
    Signed-off-by: Cássio Gabriel <[email protected]>
    Link: https://patch.msgid.link/20260421-alsa-emuusb-samplerate-notify-v1-1-8b63bbc1d7f1@gmail.com
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

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

ALSA: 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 Audio Advantage Micro II SPDIF switch [+ + +]
Author: Cássio Gabriel <[email protected]>
Date:   Tue Apr 21 22:07:41 2026 -0300

    ALSA: usb-audio: Fix Audio Advantage Micro II SPDIF switch
    
    commit a9224f26b754b5034719248891ff3c2ea0d11144 upstream.
    
    snd_microii_spdif_switch_put() returns 0 when the requested
    vendor register value differs from the cached one.
    
    This comparison was inverted by the resume-support conversion,
    so real SPDIF switch toggles are ignored while no-op writes still
    issue SET_CUR and report success.
    
    Return early only when the requested value matches the cached one.
    
    Fixes: 288673beae6c ("ALSA: usb-audio: Add resume support for MicroII SPDIF ctls")
    Cc: [email protected]
    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: Greg Kroah-Hartman <[email protected]>

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

    ALSA: usb-audio: Fix UAC3 cluster descriptor size check
    
    commit 26265dd69da32d88a88d21987853cec899d9e21f upstream.
    
    The UAC3 cluster descriptor length check in
    snd_usb_get_audioformat_uac3()was added to
    make sure that the buffer is large enough for
    a struct uac3_cluster_header_descriptor before the
    returned data is cast and used.
    
    However, the check uses sizeof(cluster), where cluster
    is a pointer, not the size of the descriptor header.
    This makes the validation depend on the architecture
    pointer size and does not match the intended object size.
    
    Check against sizeof(*cluster) instead.
    
    Fixes: fb4e2a6e8f28 ("ALSA: usb-audio: Fix out-of-bounds read in snd_usb_get_audioformat_uac3()")
    Cc: [email protected]
    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: Greg Kroah-Hartman <[email protected]>

ALSA: usb-audio: stop parsing UAC2 rates at MAX_NR_RATES [+ + +]
Author: Cássio Gabriel <[email protected]>
Date:   Wed Apr 15 12:04:53 2026 -0300

    ALSA: usb-audio: stop parsing UAC2 rates at MAX_NR_RATES
    
    commit 3c318f97dcc50b2e0556a1813bd6958678e881fd upstream.
    
    parse_uac2_sample_rate_range() caps the number of enumerated
    rates at MAX_NR_RATES, but it only breaks out of the current
    rate loop. A malformed UAC2 RANGE response with additional
    triplets continues parsing the remaining triplets and repeatedly
    prints "invalid uac2 rates" while probe still holds
    register_mutex.
    
    Stop the whole parse once the cap is reached and return the
    number of rates collected so far.
    
    Fixes: 4fa0e81b8350 ("ALSA: usb-audio: fix possible hang and overflow in parse_uac2_sample_rate_range()")
    Cc: [email protected]
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=d56178c27a4710960820
    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: Greg Kroah-Hartman <[email protected]>

 
arm64: dts: imx8mq-librem5-r3: workaround i2c1 issue with 1GHz cpu voltage [+ + +]
Author: Martin Kepplinger <[email protected]>
Date:   Mon Apr 13 10:57:58 2026 -0400

    arm64: dts: imx8mq-librem5-r3: workaround i2c1 issue with 1GHz cpu voltage
    
    [ Upstream commit 1773b8d6697ac8e9380843fe5c13c25e95baa702 ]
    
    This is a workaround for a hardware bug in the r3 revision that basically would
    stop the system due to traffic on the i2c1 bus. A cpu voltage change would
    trigger such traffic and that's what is avoided in order to work around it.
    
    Signed-off-by: Martin Kepplinger <[email protected]>
    Signed-off-by: Shawn Guo <[email protected]>
    Stable-dep-of: 511f76bf1dce ("arm64: dts: imx8mq-librem5: Bump BUCK1 suspend voltage up to 0.85V")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

arm64: dts: imx8mq-librem5: Bump BUCK1 suspend voltage to 0.81V [+ + +]
Author: Sebastian Krzyszkowiak <[email protected]>
Date:   Mon Apr 13 10:58:02 2026 -0400

    arm64: dts: imx8mq-librem5: Bump BUCK1 suspend voltage to 0.81V
    
    [ Upstream commit 94b91e3ca6688fafd6a5dd70bd89fe9d3aee88da ]
    
    0.8V is outside of the operating voltage specified for imx8mq, see
    chapter 3.1.4 "Operating ranges" of the IMX8MDQLQCEC document.
    
    Signed-off-by: Sebastian Krzyszkowiak <[email protected]>
    Signed-off-by: Martin Kepplinger <[email protected]>
    Signed-off-by: Shawn Guo <[email protected]>
    Stable-dep-of: 511f76bf1dce ("arm64: dts: imx8mq-librem5: Bump BUCK1 suspend voltage up to 0.85V")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

arm64: dts: imx8mq-librem5: Bump BUCK1 suspend voltage up to 0.85V [+ + +]
Author: Sebastian Krzyszkowiak <[email protected]>
Date:   Mon Apr 13 10:58:04 2026 -0400

    arm64: dts: imx8mq-librem5: Bump BUCK1 suspend voltage up to 0.85V
    
    [ Upstream commit 511f76bf1dce5acf8907b65a7d1bc8f7e7c0d637 ]
    
    The minimal voltage of VDD_SOC sourced from BUCK1 is 0.81V, which
    is the currently set value. However, BD71837 only guarantees accuracy
    of ±0.01V, and this still doesn't factor other reasons for actual
    voltage to slightly drop in, resulting in the possibility of running
    out of the operational range.
    
    Bump the voltage up to 0.85V, which should give enough headroom.
    
    Cc: [email protected]
    Fixes: 8f0216b006e5 ("arm64: dts: Add a device tree for the Librem 5 phone")
    Signed-off-by: Sebastian Krzyszkowiak <[email protected]>
    Signed-off-by: Frank Li <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

arm64: dts: imx8mq-librem5: Don't mark buck3 as always on [+ + +]
Author: Guido Günther <[email protected]>
Date:   Mon Apr 13 10:57:59 2026 -0400

    arm64: dts: imx8mq-librem5: Don't mark buck3 as always on
    
    [ Upstream commit 99e71c029213d3cfcc4f39a534c73d1828ffb341 ]
    
    With the pmic driver fixed we can now shut off the regulator in the gpc.
    
    Signed-off-by: Guido Günther <[email protected]>
    Signed-off-by: Martin Kepplinger <[email protected]>
    Signed-off-by: Shawn Guo <[email protected]>
    Stable-dep-of: 511f76bf1dce ("arm64: dts: imx8mq-librem5: Bump BUCK1 suspend voltage up to 0.85V")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

arm64: dts: imx8mq-librem5: set regulators boot-on [+ + +]
Author: Martin Kepplinger <[email protected]>
Date:   Mon Apr 13 10:58:00 2026 -0400

    arm64: dts: imx8mq-librem5: set regulators boot-on
    
    [ Upstream commit a8bb83c8c7a17e83e04801d0678e93654f9bfaee ]
    
    Expect all those regulators to be turned on initially.
    
    Signed-off-by: Martin Kepplinger <[email protected]>
    Signed-off-by: Shawn Guo <[email protected]>
    Stable-dep-of: 511f76bf1dce ("arm64: dts: imx8mq-librem5: Bump BUCK1 suspend voltage up to 0.85V")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

arm64: dts: imx8mq-librem5: Set the DVS voltages lower [+ + +]
Author: Sebastian Krzyszkowiak <[email protected]>
Date:   Mon Apr 13 10:58:01 2026 -0400

    arm64: dts: imx8mq-librem5: Set the DVS voltages lower
    
    [ Upstream commit c24a9b698fb02cd0723fa8375abab07f94b97b10 ]
    
    They're still in the operating range according to i.MX 8M Quad
    datasheet. There's some headroom added over minimal values to
    account for voltage drop.
    
    Operational ranges (min - typ - max [selected]):
     - VDD_SOC (BUCK1): 0.81 - 0.9 - 0.99 [0.88]
     - VDD_ARM (BUCK2): 0.81 - 0.9 - 1.05 [0.84] (1000MHz)
                        0.90 - 1.0 - 1.05 [0.93] (1500MHz)
     - VDD_GPU (BUCK3): 0.81 - 0.9 - 1.05 [0.85] (800MHz)
                        0.90 - 1.0 - 1.05 [ -- ] (1000MHz)
     - VDD_VPU (BUCK4): 0.81 - 0.9 - 1.05 [ -- ] (550/500/588MHz)
                        0.90 - 1.0 - 1.05 [0.93] (660/600/800MHz)
    
    Idle power consumption doesn't appear to be influenced much,
    but a simple load test (`cat /dev/urandom | pigz - > /dev/null`
    combined with running Animatch) seems to show about 0.3W of
    difference.
    
    Care is advised, as there may be differences between each
    units in how low can they be undervolted - in my experience,
    reaching that point usually makes the phone fail to boot.
    In my case, it appears that my Birch phone can go down the most.
    
    This is a somewhat conservative set of values that I've seen
    working well on all my devices; I haven't tried very hard to
    optimize it, so more experiments are welcome.
    
    Signed-off-by: Sebastian Krzyszkowiak <[email protected]>
    Signed-off-by: Martin Kepplinger <[email protected]>
    Signed-off-by: Shawn Guo <[email protected]>
    Stable-dep-of: 511f76bf1dce ("arm64: dts: imx8mq-librem5: Bump BUCK1 suspend voltage up to 0.85V")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

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

arm64: dts: 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: sdm845-xiaomi-beryllium: Add DSI and panel bits [+ + +]
Author: Sumit Semwal <[email protected]>
Date:   Mon Apr 5 01:14:37 2021 +0530

    arm64: dts: qcom: sdm845-xiaomi-beryllium: Add DSI and panel bits
    
    [ Upstream commit 0e5a6f27036e93110d3710d489fcc1408a674e62 ]
    
    Enabling the Display panel for beryllium requires DSI
    labibb regulators and panel dts nodes to be added.
    It is also required to keep some of the regulators as
    always-on.
    
    Signed-off-by: Sumit Semwal <[email protected]>
    Signed-off-by: Amit Pundir <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Stable-dep-of: 3b0dd81eea6b ("arm64: dts: qcom: sdm845-xiaomi-beryllium: Mark l1a regulator as powered during boot")
    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]>

 
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: integrator: Fix early initialization [+ + +]
Author: Guenter Roeck <[email protected]>
Date:   Tue May 5 21:15:37 2026 +0200

    ARM: integrator: Fix early initialization
    
    [ Upstream commit 90d77b30a666049ad24df463f52e5d529c44e8cd ]
    
    Starting with commit bdb249fce9ad4 ("ARM: integrator: read counter using
    syscon/regmap"), intcp_init_early calls syscon_regmap_lookup_by_compatible
    which in turn calls of_syscon_register. This function allocates memory.
    Since the memory management code has not been initialized at that time,
    the call always fails. It either returns -ENOMEM or crashes as follows.
    
    Unable to handle kernel NULL pointer dereference at virtual address 0000000c when read
    [0000000c] *pgd=00000000
    Internal error: Oops: 5 [#1] ARM
    Modules linked in:
    CPU: 0 UID: 0 PID: 0 Comm: swapper Not tainted 6.15.0-rc5-00026-g5fcc9bf84ee5 #1 PREEMPT
    Hardware name: ARM Integrator/CP (Device Tree)
    PC is at __kmalloc_cache_noprof+0xec/0x39c
    LR is at __kmalloc_cache_noprof+0x34/0x39c
    ...
    Call trace:
     __kmalloc_cache_noprof from of_syscon_register+0x7c/0x310
     of_syscon_register from device_node_get_regmap+0xa4/0xb0
     device_node_get_regmap from intcp_init_early+0xc/0x40
     intcp_init_early from start_kernel+0x60/0x688
     start_kernel from 0x0
    
    The crash is seen due to a dereferenced pointer which is not supposed to be
    NULL but is NULL if the memory management subsystem has not been
    initialized. The crash is not seen with all versions of gcc. Some versions
    such as gcc 9.x apparently do not dereference the pointer, presumably if
    tracing is disabled. The problem has been reproduced with gcc 10.x, 11.x,
    and 13.x. Either case, if the crash is not seen, the call to
    syscon_regmap_lookup_by_compatible returns -ENOMEM, and
    sched_clock_register is never called.
    
    Fix the problem by moving the early initialization code into the standard
    machine initialization code.
    
    Fixes: bdb249fce9ad4 ("ARM: integrator: read counter using syscon/regmap")
    Cc: Linus Walleij <[email protected]>
    Signed-off-by: Guenter Roeck <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Linus Walleij <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Arnd Bergmann <[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 comment typo [+ + +]
Author: Joseph Salisbury <[email protected]>
Date:   Mon Mar 16 14:05:45 2026 -0400

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

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

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

ASoC: 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]>

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

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

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

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

 
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]>

 
batman-adv: bla: fix report_work leak on backbone_gw purge [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Sun May 10 11:43:20 2026 +0200

    batman-adv: bla: fix report_work leak on backbone_gw purge
    
    commit 0459430add32ea41f3e2ef9351610e6d33627a6b upstream.
    
    batadv_bla_purge_backbone_gw() removes stale backbone gateway entries,
    but fails to properly handle their associated report_work:
    
    - If report_work is running, the purge must wait for it to finish before
      freeing the backbone_gw, otherwise the worker may access freed memory
      (e.g. bat_priv).
    - If report_work is pending, the purge must cancel it and release the
      reference held for that pending work item.
    
    The previous implementation called hlist_for_each_entry_safe() inside a
    spin_lock_bh() section, but cancel_work_sync() may sleep and therefore
    cannot be called from within a spinlock-protected region.
    
    Restructure the loop to handle one entry per spinlock critical section:
    acquire the lock, find the next entry to purge, remove it from the hash
    list, then release the lock before calling cancel_work_sync() and
    dropping the hash_entry reference. Repeat until no more entries require
    purging.
    
    Cc: [email protected]
    Fixes: 23721387c409 ("batman-adv: add basic bridge loop avoidance code")
    Reviewed-by: Simon Wunderlich <[email protected]>
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: bla: only purge non-released claims [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Wed May 6 22:20:51 2026 +0200

    batman-adv: bla: only purge non-released claims
    
    commit cf6b604011591865ae39ac82de8978c1120d17af upstream.
    
    When batadv_bla_purge_claims() goes through the list of claims, it is only
    traversing the hash list with an rcu_read_lock(). Due to a potential
    parallel batadv_claim_put(), it can happen that it encounters a claim which
    was actually in the process of being released+freed by
    batadv_claim_release(). In this case, backbone_gw is set to NULL before the
    delayed RCU kfree is started. Calling batadv_bla_claim_get_backbone_gw() is
    then no longer allowed because it would cause a NULL-ptr derefence.
    
    To avoid this, only claims with a valid reference counter must be purged.
    All others are already taken care of.
    
    Cc: [email protected]
    Fixes: 23721387c409 ("batman-adv: add basic bridge loop avoidance code")
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: bla: prevent use-after-free when deleting claims [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Wed May 6 22:20:50 2026 +0200

    batman-adv: bla: prevent use-after-free when deleting claims
    
    commit 4ae1709a314060a196981b344610d023ea841e57 upstream.
    
    When batadv_bla_del_backbone_claims() removes all claims for a backbone, it
    does this by dropping the link entry in the hash list. This list entry
    itself was one of the references which need to be dropped at the same time
    via batadv_claim_put().
    
    But the batadv_claim_put() must not be done before the last access to the
    claim object in this function. Otherwise the claim might be freed already
    by the batadv_claim_release() function before the list entry was dropped.
    
    Cc: [email protected]
    Fixes: 23721387c409 ("batman-adv: add basic bridge loop avoidance code")
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: bla: put backbone reference on failed claim hash insert [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Wed May 6 22:20:52 2026 +0200

    batman-adv: bla: put backbone reference on failed claim hash insert
    
    commit ba9d20ee9076dac32c371116bacbe72480eb356c upstream.
    
    When batadv_bla_add_claim() fails to insert a new claim into the hash, it
    leaked a reference to the backbone_gw for which the claim was intended.
    Call batadv_backbone_gw_put() on the error path to release the reference
    and avoid leaking the backbone_gw object.
    
    Cc: [email protected]
    Fixes: 3db0decf1185 ("batman-adv: Fix non-atomic bla_claim::backbone_gw access")
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: clear current gateway during teardown [+ + +]
Author: Ruijie Li <[email protected]>
Date:   Thu May 14 16:13:25 2026 +0800

    batman-adv: clear current gateway during teardown
    
    commit a340a51ed801eab7bb454150c226323b865263cc upstream.
    
    batadv_gw_node_free() removes the gateway list entries during mesh teardown,
    but it does not clear the currently selected gateway. This leaves stale
    gateway state behind across cleanup and can break a later mesh recreation.
    
    Clear bat_priv->gw.curr_gw before walking the gateway list so the selected
    gateway reference is dropped as part of teardown.
    
    Fixes: 2265c1410864 ("batman-adv: gateway election code refactoring")
    Cc: [email protected]
    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: Ruijie Li <[email protected]>
    Signed-off-by: Zhanpeng Li <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: dat: handle forward allocation error [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Wed May 13 09:01:34 2026 +0200

    batman-adv: dat: handle forward allocation error
    
    commit 2d8826a2d3657cea66fb0370f9e521575a673871 upstream.
    
    batadv_dat_forward_data() calls pskb_copy_for_clone() to duplicate an skb
    for each DHT candidate, but does not check the return value before passing
    it to batadv_send_skb_prepare_unicast_4addr(). That function dereferences
    the skb unconditionally, so a failed allocation triggers a NULL pointer
    dereference.
    
    Skip forwarding to the current DHT candidate on allocation failure.
    
    Cc: [email protected]
    Fixes: 785ea1144182 ("batman-adv: Distributed ARP Table - create DHT helper functions")
    Reported-by: Yuan Tan <[email protected]>
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Reported-by: Xin Liu <[email protected]>
    Reviewed-by: Yuan Tan <[email protected]>
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: fix fragment reassembly length accounting [+ + +]
Author: Ruide Cao <[email protected]>
Date:   Wed May 13 11:58:15 2026 +0800

    batman-adv: fix fragment reassembly length accounting
    
    commit 9cd3f16c320bfdadd4509358122368deb56a5741 upstream.
    
    batman-adv keeps a running payload length for queued fragments and uses it
    to validate a fragment chain before reassembly.
    
    That accounting currently allows the accumulated fragment length to be
    truncated during updates. As a result, malformed fragment chains can
    bypass the intended validation and drive reassembly with inconsistent
    length state, leading to a local denial of service.
    
    Fix the accounting by storing the accumulated length in a length-typed
    field and rejecting update overflows before the existing validation logic
    runs.
    
    The fix was verified against the original reproducer and against valid
    fragment reassembly paths.
    
    Fixes: 610bfc6bc99b ("batman-adv: Receive fragmented packets and merge")
    Cc: [email protected]
    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: Ruide Cao <[email protected]>
    Tested-by: Ren Wei <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: fix integer overflow on buff_pos [+ + +]
Author: Lyes Bourennani <[email protected]>
Date:   Wed Apr 22 00:20:22 2026 +0200

    batman-adv: fix integer overflow on buff_pos
    
    commit 0799e5943611006b346b8813c7daf7dd5aa26bfd upstream.
    
    Fixing an integer overflow present in batadv_iv_ogm_send_to_if. The size
    check is done using the int type in batadv_iv_ogm_aggr_packet whereas the
    buff_pos variable uses the s16 type. This could lead to an out-of-bound
    read.
    
    Cc: [email protected]
    Fixes: c6c8fea29769 ("net: Add batman-adv meshing protocol")
    Signed-off-by: Lyes Bourennani <[email protected]>
    Signed-off-by: Alexis Pinson <[email protected]>
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: fix tp_meter counter underflow during shutdown [+ + +]
Author: Luxiao Xu <[email protected]>
Date:   Mon May 11 18:52:09 2026 +0200

    batman-adv: fix tp_meter counter underflow during shutdown
    
    commit 94f3b133168d1c49895e7cc6afbcf1cc0b354602 upstream.
    
    batadv_tp_sender_shutdown() unconditionally decrements the "sending"
    atomic counter. If multiple paths (e.g. timeout, user cancel, and
    normal finish) call this function, the counter can underflow to -1.
    
    Since the sender logic treats any non-zero value as "still sending",
    a negative value causes the sender kthread to loop indefinitely.
    This leads to a use-after-free when the interface is removed while
    the zombie thread is still active.
    
    Fix this by using atomic_xchg() to ensure the counter only transitions
    from 1 to 0 once.
    
    Fixes: 33a3bb4a3345 ("batman-adv: throughput meter implementation")
    Cc: [email protected]
    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: Luxiao Xu <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    [sven: added missing change in batadv_tp_send]
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: frag: disallow unicast fragment in fragment [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Wed May 13 09:01:36 2026 +0200

    batman-adv: frag: disallow unicast fragment in fragment
    
    commit bc62216dc8e221e3781afa14430f45208bfa9af9 upstream.
    
    batadv_frag_skb_buffer() is called by batadv_batman_skb_recv() when a
    BATADV_UNICAST_FRAG packet is received. Once all fragments are collected
    and the packet is reassembled, batadv_recv_frag_packet() calls
    batadv_batman_skb_recv() again to process the defragmented payload.
    
    A malicious sender can craft a BATADV_UNICAST_FRAG packet whose reassembled
    payload is itself a BATADV_UNICAST_FRAG packet (matryoshka-style nesting).
    Each nesting level recurses through batadv_batman_skb_recv() without bound,
    growing the kernel stack until it is exhausted.
    
    Since refragmentation or fragments in fragments are not actually allowed,
    discard all packets which are still BATADV_UNICAST_FRAG packets after the
    defragmentation process.
    
    Cc: [email protected]
    Fixes: 610bfc6bc99b ("batman-adv: Receive fragmented packets and merge")
    Reported-by: Yuan Tan <[email protected]>
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Reported-by: Xin Liu <[email protected]>
    Reviewed-by: Yuan Tan <[email protected]>
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: hold claim backbone gateways by reference [+ + +]
Author: Haoze Xie <[email protected]>
Date:   Mon Apr 13 14:57:46 2026 +0200

    batman-adv: hold claim backbone gateways by reference
    
    commit 82d8701b2c930d0e96b0dbc9115a218d791cb0d2 upstream.
    
    batadv_bla_add_claim() can replace claim->backbone_gw and drop the old
    gateway's last reference while readers still follow the pointer.
    
    The netlink claim dump path dereferences claim->backbone_gw->orig and
    takes claim->backbone_gw->crc_lock without pinning the underlying
    backbone gateway. batadv_bla_check_claim() still has the same naked
    pointer access pattern.
    
    Reuse batadv_bla_claim_get_backbone_gw() in both readers so they operate
    on a stable gateway reference until the read-side work is complete.
    This keeps the dump and claim-check paths aligned with the lifetime
    rules introduced for the other BLA claim readers.
    
    Fixes: 23721387c409 ("batman-adv: add basic bridge loop avoidance code")
    Fixes: 04f3f5bf1883 ("batman-adv: add B.A.T.M.A.N. Dump BLA claims via netlink")
    Cc: [email protected]
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Co-developed-by: Yuan Tan <[email protected]>
    Signed-off-by: Yuan Tan <[email protected]>
    Suggested-by: Xin Liu <[email protected]>
    Signed-off-by: Haoze Xie <[email protected]>
    Signed-off-by: Ao Zhou <[email protected]>
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Simon Wunderlich <[email protected]>
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

batman-adv: mcast: fix use-after-free in orig_node RCU release [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Thu May 14 19:22:02 2026 +0200

    batman-adv: mcast: fix use-after-free in orig_node RCU release
    
    commit 20c2d6a20ca936f5aaa6dd40f73f262ac45c87cc upstream.
    
    batadv_mcast_purge_orig() removes entries from RCU-protected hlists but
    does not wait for an RCU grace period before returning. Concurrent RCU
    readers may still accesses references to those entries at the point of
    removal. RCU-protected readers trying to operate on entries like
    orig->mcast_want_all_ipv6_node will then access already freed memory.
    
    Fix this by moving batadv_mcast_purge_orig() to batadv_orig_node_release(),
    just before the call_rcu() invocation. This ensures RCU readers that were
    active at purge time have drained before the orig_node memory is reclaimed.
    
    Cc: [email protected]
    Fixes: ab49886e3da7 ("batman-adv: Add IPv4 link-local/IPv6-ll-all-nodes multicast support")
    Acked-by: Linus Lüssing <[email protected]>
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: reject new tp_meter sessions during teardown [+ + +]
Author: Jiexun Wang <[email protected]>
Date:   Mon Apr 27 14:43:33 2026 +0800

    batman-adv: reject new tp_meter sessions during teardown
    
    commit 3243543592425beec83d453793e9d27caa0d8e66 upstream.
    
    Prevent tp_meter from starting new sender or receiver sessions after
    mesh_state has left BATADV_MESH_ACTIVE.
    
    Fixes: 33a3bb4a3345 ("batman-adv: throughput meter implementation")
    Cc: [email protected]
    Reported-by: Yuan Tan <[email protected]>
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Reported-by: Xin Liu <[email protected]>
    Co-developed-by: Luxing Yin <[email protected]>
    Signed-off-by: Luxing Yin <[email protected]>
    Signed-off-by: Jiexun Wang <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: stop caching unowned originator pointers in BAT IV [+ + +]
Author: Jiexun Wang <[email protected]>
Date:   Sun May 3 12:28:58 2026 +0800

    batman-adv: stop caching unowned originator pointers in BAT IV
    
    commit f03e8583532941b07761c5429de7d50766fa3110 upstream.
    
    BAT IV keeps the last-hop neighbor address in each neigh_node, but some
    paths also cache an originator pointer derived from a temporary lookup.
    That pointer is not owned by the neigh_node and may no longer refer to a
    live originator entry after purge handling runs.
    
    Stop storing the auxiliary originator pointer in the BAT IV neighbor
    state. When BAT IV needs the neighbor originator data, resolve it from
    the stored neighbor address and drop the reference again after use.
    
    Fixes: c6c8fea29769 ("net: Add batman-adv meshing protocol")
    Cc: [email protected]
    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]>
    [sven: avoid bonding logic for outgoing OGM]
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: tp_meter: avoid use of uninit sender vars [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Wed May 13 09:01:35 2026 +0200

    batman-adv: tp_meter: avoid use of uninit sender vars
    
    commit 6c65cf23d4c6170fcf5714c32aa64689718cb142 upstream.
    
    batadv_tp_recv_ack() and batadv_tp_stop() are only valid for tp_vars in the
    BATADV_TP_SENDER role. When called with a BATADV_TP_RECEIVER role, it
    proceeds to read sender-only members that were never initialized, leading
    to undefined behavior.
    
    This can be triggered when a node that is currently acting as a receiver in
    an ongoing tp_meter session receives a malicious ACK packet.
    
    Guard against this by checking tp_vars->role immediately after the
    lookup and bailing out if it is not BATADV_TP_SENDER, before any of
    those members are accessed.
    
    Cc: [email protected]
    Fixes: 33a3bb4a3345 ("batman-adv: throughput meter implementation")
    Reported-by: Yuan Tan <[email protected]>
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Reported-by: Xin Liu <[email protected]>
    Reviewed-by: Yuan Tan <[email protected]>
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: tt: fix negative last_changeset_len [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Sat May 2 19:53:21 2026 +0200

    batman-adv: tt: fix negative last_changeset_len
    
    commit fc92cdfcb295cefa4344d71a527d61b638b7bfc4 upstream.
    
    batadv_piv_tt::last_changeset_len len was declared as s16, but the field is
    never intended to hold a negative value. When a value greater than 32767 is
    assigned, it wraps to a negative signed integer.
    
    In batadv_send_my_tt_response(), last_changeset_len is temporarily widened
    to s32. The incorrectly negative s16 value propagates into the s32, causing
    batadv_tt_prepare_tvlv_local_data() to allocate a full sized buffer but
    populates only a small portion of it with the collected changeset. All
    remaining bits are kept uninitialized.
    
    Using an u16 avoids this type confusion and ensures that no (negative) sign
    extension is performed in batadv_send_my_tt_response().
    
    Cc: [email protected]
    Fixes: a73105b8d4c7 ("batman-adv: improved client announcement mechanism")
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

batman-adv: tt: fix negative tt_buff_len [+ + +]
Author: Sven Eckelmann <[email protected]>
Date:   Sat May 2 19:53:21 2026 +0200

    batman-adv: tt: fix negative tt_buff_len
    
    commit b64963a2ceeb7529310b6cf253a1e540784422f4 upstream.
    
    batadv_orig_node::tt_buff_len was declared as s16, but the field is never
    intended to hold a negative value. When a value greater than 32767 is
    assigned, it wraps to a negative signed integer.
    
    In batadv_send_other_tt_response(), tt_buff_len is temporarily widened to
    s32. The incorrectly negative s16 value propagates into the s32, causing
    batadv_tt_prepare_tvlv_global_data() to allocate a full sized buffer but
    populates only a small portion of it with the collected changeset. All
    remaining bits are kept uninitialized.
    
    Using an u16 avoids this type confusion and ensures that no (negative) sign
    extension is performed in batadv_send_other_tt_response().
    
    Cc: [email protected]
    Fixes: a73105b8d4c7 ("batman-adv: improved client announcement mechanism")
    Signed-off-by: Sven Eckelmann <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

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

bcache: fix uninitialized closure object [+ + +]
Author: Mingzhe Zou <[email protected]>
Date:   Fri Apr 3 12:21:35 2026 +0800

    bcache: fix uninitialized closure object
    
    commit 20a8e451ec1c7e99060b1bbaaad03ce88c39ddb8 upstream.
    
    In the previous patch ("bcache: fix cached_dev.sb_bio use-after-free and
    crash"), we adopted a simple modification suggestion from AI to fix the
    use-after-free.
    
    But in actual testing, we found an extreme case where the device is
    stopped before calling bch_write_bdev_super().
    
    At this point, struct closure sb_write has not been initialized yet.
    For this patch, we ensure that sb_bio has been completed via
    sb_write_mutex.
    
    Signed-off-by: Mingzhe Zou <[email protected]>
    Signed-off-by: Coly Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Fixes: fec114a98b87 ("bcache: fix cached_dev.sb_bio use-after-free and crash")
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
blk-cgroup: Reinit blkg_iostat_set after clearing in blkcg_reset_stats() [+ + +]
Author: Waiman Long <[email protected]>
Date:   Tue Apr 21 16:29:20 2026 +0300

    blk-cgroup: Reinit blkg_iostat_set after clearing in blkcg_reset_stats()
    
    [ Upstream commit 3d2af77e31ade05ff7ccc3658c3635ec1bea0979 ]
    
    When blkg_alloc() is called to allocate a blkcg_gq structure
    with the associated blkg_iostat_set's, there are 2 fields within
    blkg_iostat_set that requires proper initialization - blkg & sync.
    The former field was introduced by commit 3b8cc6298724 ("blk-cgroup:
    Optimize blkcg_rstat_flush()") while the later one was introduced by
    commit f73316482977 ("blk-cgroup: reimplement basic IO stats using
    cgroup rstat").
    
    Unfortunately those fields in the blkg_iostat_set's are not properly
    re-initialized when they are cleared in v1's blkcg_reset_stats(). This
    can lead to a kernel panic due to NULL pointer access of the blkg
    pointer. The missing initialization of sync is less problematic and
    can be a problem in a debug kernel due to missing lockdep initialization.
    
    Fix these problems by re-initializing them after memory clearing.
    
    Fixes: 3b8cc6298724 ("blk-cgroup: Optimize blkcg_rstat_flush()")
    Fixes: f73316482977 ("blk-cgroup: reimplement basic IO stats using cgroup rstat")
    Signed-off-by: Waiman Long <[email protected]>
    Reviewed-by: Ming Lei <[email protected]>
    Acked-by: Tejun Heo <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    [ Remove this line: bis -> blkg = blkg for blkg was introduced by commit
      3b8cc6298724 ("blk-cgroup: Optimize blkcg_rstat_flush()") since v6.2. ]
    Signed-off-by: Alva Lan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    (cherry picked from commit 0561aa6033dd181594116d705c41fc16e97161a2)
    [ kovalev: bp to fix CVE-2023-53421 ]
    Signed-off-by: Vasiliy Kovalev <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
blk-mq: use quiesced elevator switch when reinitializing queues [+ + +]
Author: Keith Busch <[email protected]>
Date:   Fri Feb 27 11:01:50 2026 -0800

    blk-mq: use quiesced elevator switch when reinitializing queues
    
    [ Upstream commit 8237c01f1696bc53c470493bf1fe092a107648a6 ]
    
    The hctx's run_work may be racing with the elevator switch when
    reinitializing hardware queues. The queue is merely frozen in this
    context, but that only prevents requests from allocating and doesn't
    stop the hctx work from running. The work may get an elevator pointer
    that's being torn down, and can result in use-after-free errors and
    kernel panics (example below). Use the quiesced elevator switch instead,
    and make the previous one static since it is now only used locally.
    
      nvme nvme0: resetting controller
      nvme nvme0: 32/0/0 default/read/poll queues
      BUG: kernel NULL pointer dereference, address: 0000000000000008
      #PF: supervisor read access in kernel mode
      #PF: error_code(0x0000) - not-present page
      PGD 80000020c8861067 P4D 80000020c8861067 PUD 250f8c8067 PMD 0
      Oops: 0000 [#1] SMP PTI
      Workqueue: kblockd blk_mq_run_work_fn
      RIP: 0010:kyber_has_work+0x29/0x70
    
    ...
    
      Call Trace:
       __blk_mq_do_dispatch_sched+0x83/0x2b0
       __blk_mq_sched_dispatch_requests+0x12e/0x170
       blk_mq_sched_dispatch_requests+0x30/0x60
       __blk_mq_run_hw_queue+0x2b/0x50
       process_one_work+0x1ef/0x380
       worker_thread+0x2d/0x3e0
    
    Signed-off-by: Keith Busch <[email protected]>
    Reviewed-by: Ming Lei <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Brennan Lamoreaux <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Bluetooth: bnep: Fix UAF read of dev->name [+ + +]
Author: Jann Horn <[email protected]>
Date:   Tue May 12 22:15:39 2026 +0200

    Bluetooth: bnep: Fix UAF read of dev->name
    
    commit 59e932ded949fa6f0340bf7c6d7818f962fa4fd2 upstream.
    
    bnep_add_connection() needs to keep holding the bnep_session_sem while
    reading dev->name (just like bnep_get_connlist() does); otherwise the
    bnep_session() thread can concurrently free the net_device, which can for
    example be triggered by a concurrent bnep_del_connection().
    
    (This UAF is fairly uninteresting from a security perspective;
    calling bnep_add_connection() requires passing a capable(CAP_NET_ADMIN)
    check. It also requires completely tearing down a netdev during a fairly
    tight race window.)
    
    Cc: [email protected]
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Jann Horn <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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: hci_uart: fix UAFs and race conditions in close and init paths [+ + +]
Author: Mingyu Wang <[email protected]>
Date:   Mon May 18 10:49:49 2026 +0800

    Bluetooth: hci_uart: fix UAFs and race conditions in close and init paths
    
    commit c1bb9336ae6b54a5f6a353c4bd4ed9a4307e429b upstream.
    
    Vulnerabilities leading to Use-After-Free (UAF) and Null Pointer
    Dereference (NPD) conditions were observed in the lifecycle management
    of hci_uart.
    
    The primary issue arises because the workqueues (init_ready and
    write_work) are only flushed/cancelled if the HCI_UART_PROTO_READY
    flag is set during TTY close. If a hangup occurs before setup completes,
    hci_uart_tty_close() skips the teardown of these workqueues and
    proceeds to free the `hu` struct. When the scheduled work executes
    later, it blindly dereferences the freed `hu` struct.
    
    Furthermore, several data races and UAFs were identified in the teardown
    sequence:
    1. Calling hci_uart_flush() from hci_uart_close() without effectively
       disabling write_work causes a race condition where both can concurrently
       double-free hu->tx_skb. This happens because protocol timers can
       concurrently invoke hci_uart_tx_wakeup() and requeue write_work.
    2. Calling hci_free_dev(hdev) before hu->proto->close(hu) causes a UAF
       when vendor specific protocol close callbacks dereference hu->hdev.
    3. In the initialization error paths, failing to take the proto_lock
       write lock before clearing PROTO_READY leads to races with active
       readers. Additionally, hci_uart_tty_receive() accesses hu->hdev
       outside the read lock, leading to UAFs if the initialization error
       path frees hdev concurrently.
    
    Fix these synchronization and lifecycle issues by:
    1. Re-ordering hci_uart_tty_close() to clear HCI_UART_PROTO_READY first,
       followed immediately by a cancel_work_sync(&hu->write_work). Clearing
       the flag locks out concurrent protocol timers from successfully invoking
       hci_uart_tx_wakeup(), effectively rendering the cancellation permanent
       and preventing the tx_skb double-free.
    2. Note: Clearing PROTO_READY early causes hci_uart_close() to skip
       hu->proto->flush(). This is perfectly safe in the tty_close path
       because hu->proto->close() executes shortly after, which intrinsically
       purges all protocol SKB queues and tears down the state.
    3. Relocating hu->proto->close(hu) strictly prior to hci_free_dev(hdev)
       across all close and error paths to prevent vendor-level UAFs.
    4. Moving the hdev->stat.byte_rx increment in hci_uart_tty_receive()
       inside the proto_lock read-side critical section to safely synchronize
       with device unregistration.
    5. Adding cancel_work_sync(&hu->write_work) to hci_uart_close() to safely
       flush the workqueue before hci_uart_flush() is invoked via the HCI core.
    6. Utilizing cancel_work_sync() instead of disable_work_sync() across
       all paths to prevent permanently breaking user-space retry capabilities.
    
    Fixes: 3b799254cf6f ("Bluetooth: hci_uart: Cancel init work before unregistering")
    Cc: [email protected]
    Signed-off-by: Mingyu Wang <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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 null-ptr-deref in l2cap_sock_get_sndtimeo_cb() [+ + +]
Author: Siwei Zhang <[email protected]>
Date:   Wed Apr 15 16:53:36 2026 -0400

    Bluetooth: L2CAP: Fix null-ptr-deref in l2cap_sock_get_sndtimeo_cb()
    
    commit 78a88d43dab8d23aeef934ed8ce34d40e6b3d613 upstream.
    
    Add the same NULL guard already present in
    l2cap_sock_resume_cb() and l2cap_sock_ready_cb().
    
    Fixes: 8d836d71e222 ("Bluetooth: Access sk_sndtimeo indirectly in l2cap_core.c")
    Cc: [email protected]
    Signed-off-by: Siwei Zhang <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

    Bluetooth: L2CAP: Fix null-ptr-deref in l2cap_sock_new_connection_cb()
    
    commit 0a120d96166301d7a95be75b52f843837dbd1219 upstream.
    
    Add the same NULL guard already present in
    l2cap_sock_resume_cb() and l2cap_sock_ready_cb().
    
    Fixes: 80808e431e1e ("Bluetooth: Add l2cap_chan_ops abstraction")
    Cc: [email protected]
    Signed-off-by: Siwei Zhang <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

    Bluetooth: L2CAP: Fix null-ptr-deref in l2cap_sock_state_change_cb()
    
    commit 2ff1a41a912de8517b4482e946dd951b7d80edbf upstream.
    
    Add the same NULL guard already present in
    l2cap_sock_resume_cb() and l2cap_sock_ready_cb().
    
    Fixes: 89bc500e41fc ("Bluetooth: Add state tracking to struct l2cap_chan")
    Cc: [email protected]
    Signed-off-by: Siwei Zhang <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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]>

 
bpf, sockmap: Fix an infinite loop error when len is 0 in tcp_bpf_recvmsg_parser() [+ + +]
Author: Liu Jian <[email protected]>
Date:   Tue Apr 21 16:28:39 2026 +0300

    bpf, sockmap: Fix an infinite loop error when len is 0 in tcp_bpf_recvmsg_parser()
    
    commit d900f3d20cc3169ce42ec72acc850e662a4d4db2 upstream.
    
    When the buffer length of the recvmsg system call is 0, we got the
    flollowing soft lockup problem:
    
    watchdog: BUG: soft lockup - CPU#3 stuck for 27s! [a.out:6149]
    CPU: 3 PID: 6149 Comm: a.out Kdump: loaded Not tainted 6.2.0+ #30
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.15.0-1 04/01/2014
    RIP: 0010:remove_wait_queue+0xb/0xc0
    Code: 5e 41 5f c3 cc cc cc cc 0f 1f 80 00 00 00 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 f3 0f 1e fa 0f 1f 44 00 00 41 57 <41> 56 41 55 41 54 55 48 89 fd 53 48 89 f3 4c 8d 6b 18 4c 8d 73 20
    RSP: 0018:ffff88811b5978b8 EFLAGS: 00000246
    RAX: 0000000000000000 RBX: ffff88811a7d3780 RCX: ffffffffb7a4d768
    RDX: dffffc0000000000 RSI: ffff88811b597908 RDI: ffff888115408040
    RBP: 1ffff110236b2f1b R08: 0000000000000000 R09: ffff88811a7d37e7
    R10: ffffed10234fa6fc R11: 0000000000000001 R12: ffff88811179b800
    R13: 0000000000000001 R14: ffff88811a7d38a8 R15: ffff88811a7d37e0
    FS:  00007f6fb5398740(0000) GS:ffff888237180000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000020000000 CR3: 000000010b6ba002 CR4: 0000000000370ee0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     tcp_msg_wait_data+0x279/0x2f0
     tcp_bpf_recvmsg_parser+0x3c6/0x490
     inet_recvmsg+0x280/0x290
     sock_recvmsg+0xfc/0x120
     ____sys_recvmsg+0x160/0x3d0
     ___sys_recvmsg+0xf0/0x180
     __sys_recvmsg+0xea/0x1a0
     do_syscall_64+0x3f/0x90
     entry_SYSCALL_64_after_hwframe+0x72/0xdc
    
    The logic in tcp_bpf_recvmsg_parser is as follows:
    
    msg_bytes_ready:
            copied = sk_msg_recvmsg(sk, psock, msg, len, flags);
            if (!copied) {
                    wait data;
                    goto msg_bytes_ready;
            }
    
    In this case, "copied" always is 0, the infinite loop occurs.
    
    According to the Linux system call man page, 0 should be returned in this
    case. Therefore, in tcp_bpf_recvmsg_parser(), if the length is 0, directly
    return. Also modify several other functions with the same problem.
    
    Fixes: 1f5be6b3b063 ("udp: Implement udp_bpf_recvmsg() for sockmap")
    Fixes: 9825d866ce0d ("af_unix: Implement unix_dgram_bpf_recvmsg()")
    Fixes: c5d2177a72a1 ("bpf, sockmap: Fix race in ingress receive verdict with redirect to self")
    Fixes: 604326b41a6f ("bpf, sockmap: convert to generic sk_msg interface")
    Signed-off-by: Liu Jian <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Acked-by: John Fastabend <[email protected]>
    Cc: Jakub Sitnicki <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    [ kovalev: bp to fix CVE-2023-53133; applied only to tcp_bpf_recvmsg as the
      older kernel lacks tcp_bpf_recvmsg_parser, udp_bpf_recvmsg and
      unix_bpf_recvmsg (see upstream commits c5d2177a72a1, 1f5be6b3b063 and
      9825d866ce0d) ]
    Signed-off-by: Vasiliy Kovalev <[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 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: 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]>

 
brcmfmac: support chipsets with different core enumeration space [+ + +]
Author: Arend van Spriel <[email protected]>
Date:   Wed Jul 28 22:50:34 2021 +0200

    brcmfmac: support chipsets with different core enumeration space
    
    [ Upstream commit 1ce050c159528ee74e31498411dfed8e0935d10c ]
    
    Historically the broadcom wifi chipsets always had enumeration
    space containing all core information at same place. However, for
    new chipsets the ASIC developers moved away from that given fact.
    So we have to accommodate that it can differ per chipset.
    
    Reviewed-by: Hante Meuleman <[email protected]>
    Reviewed-by: Pieter-Paul Giesberts <[email protected]>
    Reviewed-by: Franky Lin <[email protected]>
    Signed-off-by: Arend van Spriel <[email protected]>
    Signed-off-by: Kalle Valo <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: dd8592fc6007 ("wifi: brcmfmac: Fix error pointer dereference")
    Signed-off-by: Sasha Levin <[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: merge PAGE_CLEAR_DIRTY and PAGE_SET_WRITEBACK to PAGE_START_WRITEBACK [+ + +]
Author: Qu Wenruo <[email protected]>
Date:   Tue Jan 26 16:33:45 2021 +0800

    btrfs: merge PAGE_CLEAR_DIRTY and PAGE_SET_WRITEBACK to PAGE_START_WRITEBACK
    
    [ Upstream commit 6869b0a8be775e920be54ee9b69a743ca20d8332 ]
    
    PAGE_CLEAR_DIRTY and PAGE_SET_WRITEBACK are two defines used in
    __process_pages_contig(), to let the function know to clear page dirty
    bit and then set page writeback.
    
    However page writeback and dirty bits are conflicting (at least for
    sector size == PAGE_SIZE case), this means these two have to be always
    updated together.
    
    This means we can merge PAGE_CLEAR_DIRTY and PAGE_SET_WRITEBACK to
    PAGE_START_WRITEBACK.
    
    Reviewed-by: Josef Bacik <[email protected]>
    Signed-off-by: Qu Wenruo <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Stable-dep-of: 82323b1a7088 ("btrfs: fix double-decrement of bytes_may_use in submit_one_async_extent()")
    Signed-off-by: Sasha Levin <[email protected]>

btrfs: tracepoints: fix sleep while in atomic context in btrfs_sync_file() [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Tue Apr 28 16:58:56 2026 +0100

    btrfs: tracepoints: fix sleep while in atomic context in btrfs_sync_file()
    
    [ Upstream commit c73370c677646e86fc4b1780fb07027bdf847375 ]
    
    The trace event btrfs_sync_file() is called in an atomic context (all trace
    events are) and its call to dput(), which is needed due to the call to
    dget_parent(), can sleep, triggering a kernel splat.
    
    This can be reproduced by enabling the trace event and running btrfs/056
    from fstests for example. The splat shown in dmesg is the following:
    
      [53.919] BUG: sleeping function called from invalid context at fs/dcache.c:970
      [53.947] in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 32773, name: xfs_io
      [53.988] preempt_count: 2, expected: 0
      [53.967] RCU nest depth: 0, expected: 0
      [53.943] Preemption disabled at:
      [53.944] [<0000000000000000>] 0x0
      [54.078] CPU: 0 UID: 0 PID: 32773 Comm: xfs_io Tainted: G        W           7.1.0-rc1-btrfs-next-232+ #1 PREEMPT(full)
      [54.070] Tainted: [W]=WARN
      [54.071] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.2-0-gea1b7a073390-prebuilt.qemu.org 04/01/2014
      [54.072] Call Trace:
      [54.074]  <TASK>
      [54.076]  dump_stack_lvl+0x56/0x80
      [54.079]  __might_resched.cold+0xd6/0x10f
      [54.072]  dput.part.0+0x24/0x110
      [54.078]  trace_event_raw_event_btrfs_sync_file+0x75/0x140 [btrfs]
      [54.089]  btrfs_sync_file+0x1ed/0x530 [btrfs]
      [54.087]  ? __handle_mm_fault+0x8ae/0xed0
      [54.089]  btrfs_do_write_iter+0x172/0x210 [btrfs]
      [54.091]  vfs_write+0x21f/0x450
      [54.094]  __x64_sys_pwrite64+0x8d/0xc0
      [54.096]  ? do_user_addr_fault+0x20c/0x670
      [54.099]  do_syscall_64+0x60/0xf20
      [54.092]  ? clear_bhb_loop+0x60/0xb0
      [54.094]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    So stop using dget_parent() and dput() and access the parent dentry
    directly as dentry->d_parent. This is also what ext4 is doing in
    its equivalent trace event ext4_sync_file_enter().
    
    Fixes: a85b46db143f ("btrfs: tracepoints: get correct superblock from dentry in event btrfs_sync_file()")
    Reviewed-by: Boris Burkov <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

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

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

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

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

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

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

 
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]>

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

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

 
cifs: Fix connections leak when tlink setup failed [+ + +]
Author: Zhang Xiaoxu <[email protected]>
Date:   Thu Apr 23 17:02:45 2026 +0300

    cifs: Fix connections leak when tlink setup failed
    
    commit 1dcdf5f5b2137185cbdd5385f29949ab3da4f00c upstream.
    
    If the tlink setup failed, lost to put the connections, then
    the module refcnt leak since the cifsd kthread not exit.
    
    Also leak the fscache info, and for next mount with fsc, it will
    print the follow errors:
      CIFS: Cache volume key already in use (cifs,127.0.0.1:445,TEST)
    
    Let's check the result of tlink setup, and do some cleanup.
    
    Fixes: 56c762eb9bee ("cifs: Refactor out cifs_mount()")
    Reviewed-by: Paulo Alcantara (SUSE) <[email protected]>
    Signed-off-by: Zhang Xiaoxu <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    [ kovalev: bp to fix CVE-2022-49822; adapted to use direct xid/ses/tcon
      variables instead of mnt_ctx struct fields due to the older kernel not
      having the corresponding cifs_mount() refactoring (see upstream commit
      c88f7dcd6d64); additionally NULL out mntdata after dfs_cache_add_vol()
      transfers its ownership to vol_list, otherwise the new error path from
      mount_setup_tlink() failure would double-free it via kfree(mntdata) in
      the error: label ]
    Signed-off-by: Vasiliy Kovalev <[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-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: 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: 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]>

 
cpuidle: powerpc: avoid double clear when breaking snooze [+ + +]
Author: Shrikanth Hegde <[email protected]>
Date:   Wed Mar 11 11:47:09 2026 +0530

    cpuidle: powerpc: avoid double clear when breaking snooze
    
    commit 64ed1e3e728afb57ba9acb59e69de930ead847d9 upstream.
    
    snooze_loop is done often in any system which has fair bit of
    idle time. So it qualifies for even micro-optimizations.
    
    When breaking the snooze due to timeout, TIF_POLLING_NRFLAG is cleared
    twice. Clearing the bit invokes atomics. Avoid double clear and thereby
    avoid one atomic write.
    
    dev->poll_time_limit indicates whether the loop was broken due to
    timeout. Use that instead of defining a new variable.
    
    Fixes: 7ded429152e8 ("cpuidle: powerpc: no memory barrier after break from idle")
    Cc: [email protected]
    Reviewed-by: Mukesh Kumar Chaurasiya (IBM) <[email protected]>
    Signed-off-by: Shrikanth Hegde <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[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-aes - Fix 3-page memory leak in atmel_aes_buff_cleanup [+ + +]
Author: Thorsten Blum <[email protected]>
Date:   Wed Mar 11 03:07:35 2026 +0100

    crypto: atmel-aes - Fix 3-page memory leak in atmel_aes_buff_cleanup
    
    commit 3fcfff4ed35f963380a68741bcd52742baff7f76 upstream.
    
    atmel_aes_buff_init() allocates 4 pages using __get_free_pages() with
    ATMEL_AES_BUFFER_ORDER, but atmel_aes_buff_cleanup() frees only the
    first page using free_page(), leaking the remaining 3 pages. Use
    free_pages() with ATMEL_AES_BUFFER_ORDER to fix the memory leak.
    
    Fixes: bbe628ed897d ("crypto: atmel-aes - improve performances of data transfer")
    Cc: [email protected]
    Signed-off-by: Thorsten Blum <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: atmel-ecc - Release client on allocation failure [+ + +]
Author: Thorsten Blum <[email protected]>
Date:   Fri Feb 20 15:03:13 2026 +0100

    crypto: atmel-ecc - Release client on allocation failure
    
    commit 095d50008d55d13f8fcf1bbeb7c6eba51779bc85 upstream.
    
    Call atmel_ecc_i2c_client_free() to release the I2C client reserved by
    atmel_ecc_i2c_client_alloc() when crypto_alloc_kpp() fails. Otherwise
    ->tfm_count will be out of sync.
    
    Fixes: 11105693fa05 ("crypto: atmel-ecc - introduce Microchip / Atmel ECC driver")
    Cc: [email protected]
    Signed-off-by: Thorsten Blum <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: atmel-tdes - fix DMA sync direction [+ + +]
Author: Thorsten Blum <[email protected]>
Date:   Sat Mar 7 16:31:10 2026 +0100

    crypto: atmel-tdes - fix DMA sync direction
    
    commit c8a9a647532f5c2a04180352693215e24e9dba03 upstream.
    
    Before DMA output is consumed by the CPU, ->dma_addr_out must be synced
    with dma_sync_single_for_cpu() instead of dma_sync_single_for_device().
    Using the wrong direction can return stale cache data on non-coherent
    platforms.
    
    Fixes: 13802005d8f2 ("crypto: atmel - add Atmel DES/TDES driver")
    Fixes: 1f858040c2f7 ("crypto: atmel-tdes - add support for latest release of the IP (0x700)")
    Cc: [email protected]
    Signed-off-by: Thorsten Blum <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: authencesn - reject short ahash digests during instance creation [+ + +]
Author: Yucheng Lu <[email protected]>
Date:   Wed Apr 22 21:45:04 2026 +0800

    crypto: authencesn - reject short ahash digests during instance creation
    
    commit 5db6ef9847717329f12c5ea8aba7e9f588a980c0 upstream.
    
    authencesn requires either a zero authsize or an authsize of at least
    4 bytes because the ESN encrypt/decrypt paths always move 4 bytes of
    high-order sequence number data at the end of the authenticated data.
    
    While crypto_authenc_esn_setauthsize() already rejects explicit
    non-zero authsizes in the range 1..3, crypto_authenc_esn_create()
    still copied auth->digestsize into inst->alg.maxauthsize without
    validating it.  The AEAD core then initialized the tfm's default
    authsize from that value.
    
    As a result, selecting an ahash with digest size 1..3, such as
    cbcmac(cipher_null), exposed authencesn instances whose default
    authsize was invalid even though setauthsize() would have rejected the
    same value.  AF_ALG could then trigger the ESN tail handling with a
    too-short tag and hit an out-of-bounds access.
    
    Reject authencesn instances whose ahash digest size is in the invalid
    non-zero range 1..3 so that no tfm can inherit an unsupported default
    authsize.
    
    Fixes: f15f05b0a5de ("crypto: ccm - switch to separate cbcmac driver")
    Cc: [email protected]
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Co-developed-by: Yuan Tan <[email protected]>
    Signed-off-by: Yuan Tan <[email protected]>
    Suggested-by: Xin Liu <[email protected]>
    Tested-by: Yuhang Zheng <[email protected]>
    Reviewed-by: Eric Biggers <[email protected]>
    Signed-off-by: Yucheng Lu <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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: ccp: Don't attempt to copy CSR to userspace if PSP command failed [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Fri Mar 13 10:43:16 2026 -0700

    crypto: ccp: Don't attempt to copy CSR to userspace if PSP command failed
    
    commit abe4a6d6f606113251868c2c4a06ba904bb41eed upstream.
    
    When retrieving the PEK CSR, don't attempt to copy the blob to userspace
    if the firmware command failed.  If the failure was due to an invalid
    length, i.e. the userspace buffer+length was too small, copying the number
    of bytes _firmware_ requires will overflow the kernel-allocated buffer and
    leak data to userspace.
    
      BUG: KASAN: slab-out-of-bounds in instrument_copy_to_user ../include/linux/instrumented.h:129 [inline]
      BUG: KASAN: slab-out-of-bounds in _inline_copy_to_user ../include/linux/uaccess.h:205 [inline]
      BUG: KASAN: slab-out-of-bounds in _copy_to_user+0x66/0xa0 ../lib/usercopy.c:26
      Read of size 2084 at addr ffff898144612e20 by task syz.9.219/21405
    
      CPU: 14 UID: 0 PID: 21405 Comm: syz.9.219 Tainted: G     U     O        7.0.0-smp-DEV #28 PREEMPTLAZY
      Tainted: [U]=USER, [O]=OOT_MODULE
      Hardware name: Google, Inc. Arcadia_IT_80/Arcadia_IT_80, BIOS 12.62.0-0 11/19/2025
      Call Trace:
       <TASK>
       dump_stack_lvl+0xc5/0x110 ../lib/dump_stack.c:120
       print_address_description ../mm/kasan/report.c:378 [inline]
       print_report+0xbc/0x260 ../mm/kasan/report.c:482
       kasan_report+0xa2/0xe0 ../mm/kasan/report.c:595
       check_region_inline ../mm/kasan/generic.c:-1 [inline]
       kasan_check_range+0x264/0x2c0 ../mm/kasan/generic.c:200
       instrument_copy_to_user ../include/linux/instrumented.h:129 [inline]
       _inline_copy_to_user ../include/linux/uaccess.h:205 [inline]
       _copy_to_user+0x66/0xa0 ../lib/usercopy.c:26
       copy_to_user ../include/linux/uaccess.h:236 [inline]
       sev_ioctl_do_pek_csr+0x31f/0x590 ../drivers/crypto/ccp/sev-dev.c:1872
       sev_ioctl+0x3a4/0x490 ../drivers/crypto/ccp/sev-dev.c:2562
       vfs_ioctl ../fs/ioctl.c:51 [inline]
       __do_sys_ioctl ../fs/ioctl.c:597 [inline]
       __se_sys_ioctl+0x11d/0x1b0 ../fs/ioctl.c:583
       do_syscall_x64 ../arch/x86/entry/syscall_64.c:63 [inline]
       do_syscall_64+0xe0/0x800 ../arch/x86/entry/syscall_64.c:94
       entry_SYSCALL_64_after_hwframe+0x76/0x7e
       </TASK>
    
    WARN if the driver says the command succeeded, but the firmware error code
    says otherwise, as __sev_do_cmd_locked() is expected to return -EIO on any
    firwmware error.
    
    Reported-by: Alexander Potapenko <[email protected]>
    Reported-by: Sebastian Alba Vives <[email protected]>
    Fixes: e799035609e1 ("crypto: ccp: Implement SEV_PEK_CSR ioctl command")
    Cc: [email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: ccp: Don't attempt to copy ID to userspace if PSP command failed [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Fri Mar 13 10:57:31 2026 -0700

    crypto: ccp: Don't attempt to copy ID to userspace if PSP command failed
    
    commit 4f685dbfa87c546e51d9dc6cab379d20f275e114 upstream.
    
    When retrieving the ID for the CPU, don't attempt to copy the ID blob to
    userspace if the firmware command failed.  If the failure was due to an
    invalid length, i.e. the userspace buffer+length was too small, copying
    the number of bytes _firmware_ requires will overflow the kernel-allocated
    buffer and leak data to userspace.
    
      BUG: KASAN: slab-out-of-bounds in instrument_copy_to_user ../include/linux/instrumented.h:129 [inline]
      BUG: KASAN: slab-out-of-bounds in _inline_copy_to_user ../include/linux/uaccess.h:205 [inline]
      BUG: KASAN: slab-out-of-bounds in _copy_to_user+0x66/0xa0 ../lib/usercopy.c:26
      Read of size 64 at addr ffff8881867f5960 by task syz.0.906/24388
    
      CPU: 130 UID: 0 PID: 24388 Comm: syz.0.906 Tainted: G     U     O        7.0.0-smp-DEV #28 PREEMPTLAZY
      Tainted: [U]=USER, [O]=OOT_MODULE
      Hardware name: Google, Inc. Arcadia_IT_80/Arcadia_IT_80, BIOS 12.62.0-0 11/19/2025
      Call Trace:
       <TASK>
       dump_stack_lvl+0xc5/0x110 ../lib/dump_stack.c:120
       print_address_description ../mm/kasan/report.c:378 [inline]
       print_report+0xbc/0x260 ../mm/kasan/report.c:482
       kasan_report+0xa2/0xe0 ../mm/kasan/report.c:595
       check_region_inline ../mm/kasan/generic.c:-1 [inline]
       kasan_check_range+0x264/0x2c0 ../mm/kasan/generic.c:200
       instrument_copy_to_user ../include/linux/instrumented.h:129 [inline]
       _inline_copy_to_user ../include/linux/uaccess.h:205 [inline]
       _copy_to_user+0x66/0xa0 ../lib/usercopy.c:26
       copy_to_user ../include/linux/uaccess.h:236 [inline]
       sev_ioctl_do_get_id2+0x361/0x490 ../drivers/crypto/ccp/sev-dev.c:2222
       sev_ioctl+0x25f/0x490 ../drivers/crypto/ccp/sev-dev.c:2575
       vfs_ioctl ../fs/ioctl.c:51 [inline]
       __do_sys_ioctl ../fs/ioctl.c:597 [inline]
       __se_sys_ioctl+0x11d/0x1b0 ../fs/ioctl.c:583
       do_syscall_x64 ../arch/x86/entry/syscall_64.c:63 [inline]
       do_syscall_64+0xe0/0x800 ../arch/x86/entry/syscall_64.c:94
       entry_SYSCALL_64_after_hwframe+0x76/0x7e
       </TASK>
    
    WARN if the driver says the command succeeded, but the firmware error code
    says otherwise, as __sev_do_cmd_locked() is expected to return -EIO on any
    firwmware error.
    
    Reported-by: Alexander Potapenko <[email protected]>
    Reported-by: Sebastian Alba Vives <[email protected]>
    Fixes: d6112ea0cb34 ("crypto: ccp - introduce SEV_GET_ID2 command")
    Cc: [email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: ccp: Don't attempt to copy PDH cert to userspace if PSP command failed [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Fri Mar 13 10:48:53 2026 -0700

    crypto: ccp: Don't attempt to copy PDH cert to userspace if PSP command failed
    
    commit e76239fed3cffd6d304d8ca3ce23984fd24f57d3 upstream.
    
    When retrieving the PDH cert, don't attempt to copy the blobs to userspace
    if the firmware command failed.  If the failure was due to an invalid
    length, i.e. the userspace buffer+length was too small, copying the number
    of bytes _firmware_ requires will overflow the kernel-allocated buffer and
    leak data to userspace.
    
      BUG: KASAN: slab-out-of-bounds in instrument_copy_to_user ../include/linux/instrumented.h:129 [inline]
      BUG: KASAN: slab-out-of-bounds in _inline_copy_to_user ../include/linux/uaccess.h:205 [inline]
      BUG: KASAN: slab-out-of-bounds in _copy_to_user+0x66/0xa0 ../lib/usercopy.c:26
      Read of size 2084 at addr ffff8885c4ab8aa0 by task syz.0.186/21033
    
      CPU: 51 UID: 0 PID: 21033 Comm: syz.0.186 Tainted: G     U     O        7.0.0-smp-DEV #28 PREEMPTLAZY
      Tainted: [U]=USER, [O]=OOT_MODULE
      Hardware name: Google, Inc.                                                       Arcadia_IT_80/Arcadia_IT_80, BIOS 34.84.12-0 11/17/2025
      Call Trace:
       <TASK>
       dump_stack_lvl+0xc5/0x110 ../lib/dump_stack.c:120
       print_address_description ../mm/kasan/report.c:378 [inline]
       print_report+0xbc/0x260 ../mm/kasan/report.c:482
       kasan_report+0xa2/0xe0 ../mm/kasan/report.c:595
       check_region_inline ../mm/kasan/generic.c:-1 [inline]
       kasan_check_range+0x264/0x2c0 ../mm/kasan/generic.c:200
       instrument_copy_to_user ../include/linux/instrumented.h:129 [inline]
       _inline_copy_to_user ../include/linux/uaccess.h:205 [inline]
       _copy_to_user+0x66/0xa0 ../lib/usercopy.c:26
       copy_to_user ../include/linux/uaccess.h:236 [inline]
       sev_ioctl_do_pdh_export+0x3d3/0x7c0 ../drivers/crypto/ccp/sev-dev.c:2347
       sev_ioctl+0x2a2/0x490 ../drivers/crypto/ccp/sev-dev.c:2568
       vfs_ioctl ../fs/ioctl.c:51 [inline]
       __do_sys_ioctl ../fs/ioctl.c:597 [inline]
       __se_sys_ioctl+0x11d/0x1b0 ../fs/ioctl.c:583
       do_syscall_x64 ../arch/x86/entry/syscall_64.c:63 [inline]
       do_syscall_64+0xe0/0x800 ../arch/x86/entry/syscall_64.c:94
       entry_SYSCALL_64_after_hwframe+0x76/0x7e
       </TASK>
    
    WARN if the driver says the command succeeded, but the firmware error code
    says otherwise, as __sev_do_cmd_locked() is expected to return -EIO on any
    firwmware error.
    
    Reported-by: Alexander Potapenko <[email protected]>
    Reported-by: Sebastian Alba Vives <[email protected]>
    Fixes: 76a2b524a4b1 ("crypto: ccp: Implement SEV_PDH_CERT_EXPORT ioctl command")
    Cc: [email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: ccree - fix a memory leak in cc_mac_digest() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Mon Mar 30 11:34:02 2026 +0800

    crypto: ccree - fix a memory leak in cc_mac_digest()
    
    commit 02c64052fad03699b9c6d1df2f9b444d17e4ac50 upstream.
    
    Add cc_unmap_result() if cc_map_hash_request_final()
    fails to prevent potential memory leak.
    
    Fixes: 63893811b0fc ("crypto: ccree - add ahash support")
    Cc: [email protected]
    Signed-off-by: Haoxiang Li <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: hisilicon - Fix dma_unmap_single() direction [+ + +]
Author: Thomas Fourier <[email protected]>
Date:   Mon Mar 30 17:19:32 2026 +0200

    crypto: hisilicon - Fix dma_unmap_single() direction
    
    commit 1ee57ab93b75eb59f426aef37b5498a7ffc28278 upstream.
    
    The direction used to map the buffer skreq->iv is DMA_TO_DEVICE but it is
    unmapped with direction DMA_BIDIRECTIONAL in the error path.
    
    Change the unmap to match the mapping.
    
    Fixes: 915e4e8413da ("crypto: hisilicon - SEC security accelerator driver")
    Cc: <[email protected]>
    Signed-off-by: Thomas Fourier <[email protected]>
    Reviewed-by: Thorsten Blum <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: pcrypt - Fix handling of MAY_BACKLOG requests [+ + +]
Author: Herbert Xu <[email protected]>
Date:   Thu Apr 16 17:00:50 2026 +0800

    crypto: pcrypt - Fix handling of MAY_BACKLOG requests
    
    commit 915b692e6cb723aac658c25eb82c58fd81235110 upstream.
    
    MAY_BACKLOG requests can return EBUSY.  Handle them by checking
    for that value and filtering out EINPROGRESS notifications.
    
    Reported-by: Yiming Qian <[email protected]>
    Fixes: 5a1436beec57 ("crypto: pcrypt - call the complete function on error")
    Signed-off-by: Herbert Xu <[email protected]>
    Cc: Eric Biggers <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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]>

 
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]>

 
dissector: do not set invalid PPP protocol [+ + +]
Author: Boris Sukholitko <[email protected]>
Date:   Wed Sep 29 14:32:23 2021 +0300

    dissector: do not set invalid PPP protocol
    
    [ Upstream commit 2e861e5e97175dfa7b7bc055c45acdc06d2301d3 ]
    
    The following flower filter fails to match non-PPP_IP{V6} packets
    wrapped in PPP_SES protocol:
    
    tc filter add dev eth0 ingress protocol ppp_ses flower \
            action simple sdata hi64
    
    The reason is that proto local variable is being set even when
    FLOW_DISSECT_RET_OUT_BAD status is returned.
    
    The fix is to avoid setting proto variable if the PPP protocol is unknown.
    
    Signed-off-by: Boris Sukholitko <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: cc1ff87bce1c ("pppoe: drop PFC frames")
    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 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 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 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]>

 
dm mirror: fix integer overflow in create_dirty_log() [+ + +]
Author: Junrui Luo <[email protected]>
Date:   Sun Mar 1 21:10:58 2026 +0800

    dm mirror: fix integer overflow in create_dirty_log()
    
    commit 4c788c6f921b22f9b6c3f316c4a071c05683e7de upstream.
    
    The argument count calculation in create_dirty_log() performs
    `*args_used = 2 + param_count` before validating against argc. When a
    user provides a param_count close to UINT_MAX via the device mapper
    table string, this unsigned addition wraps around to a small value,
    causing the subsequent `argc < *args_used` check to be bypassed.
    
    The overflowed param_count is then passed as argc to dm_dirty_log_create(),
    where it can cause out-of-bounds reads on the argv array.
    
    Fix by comparing param_count against argc - 2 before performing the
    addition, following the same pattern used by parse_features() in the
    same file. Since argc >= 2 is already guaranteed, the subtraction is
    safe.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Reported-by: Yuhao Jiang <[email protected]>
    Signed-off-by: Junrui Luo <[email protected]>
    Reviewed-by: Benjamin Marzinski <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dm-verity-fec: correctly reject too-small FEC devices [+ + +]
Author: Eric Biggers <[email protected]>
Date:   Thu Feb 5 20:59:20 2026 -0800

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

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

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

 
dm: don't report warning when doing deferred remove [+ + +]
Author: Mikulas Patocka <[email protected]>
Date:   Mon Mar 16 15:04:15 2026 +0100

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

dm: fix a buffer overflow in ioctl processing [+ + +]
Author: Mikulas Patocka <[email protected]>
Date:   Thu Apr 9 17:49:58 2026 +0200

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

 
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]>

 
driver core: Add kernel-doc for DEV_FLAG_COUNT enum value [+ + +]
Author: Douglas Anderson <[email protected]>
Date:   Mon Apr 13 19:59:11 2026 -0700

    driver core: Add kernel-doc for DEV_FLAG_COUNT enum value
    
    commit 5b484311507b5d403c1f7a45f6aa3778549e268b upstream.
    
    Even though nobody should use this value (except when declaring the
    "flags" bitmap), kernel-doc still gets upset that it's not documented.
    It reports:
    
      WARNING: ../include/linux/device.h:519
      Enum value 'DEV_FLAG_COUNT' not described in enum 'struct_device_flags'
    
    Add the description of DEV_FLAG_COUNT.
    
    Fixes: a2225b6e834a ("driver core: Don't let a device probe until it's ready")
    Reported-by: Randy Dunlap <[email protected]>
    Closes: https://lore.kernel.org/[email protected]
    Signed-off-by: Douglas Anderson <[email protected]>
    Tested-by: Randy Dunlap <[email protected]>
    Reviewed-by: Randy Dunlap <[email protected]>
    Link: https://patch.msgid.link/20260413195910.1.I23aca74fe2d3636a47df196a80920fecb2643220@changeid
    Signed-off-by: Danilo Krummrich <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

driver core: device.h: remove extern from function prototypes [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Fri Mar 24 13:27:06 2023 +0100

    driver core: device.h: remove extern from function prototypes
    
    [ Upstream commit f43243c66e5e9ad839d235f82a58e73a7e7612af ]
    
    The kernel coding style does not require 'extern' in function prototypes
    in .h files, so remove them from include/linux/device.h as they are not
    needed.
    
    Acked-by: Rafael J. Wysocki <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[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]>

driver core: Don't let a device probe until it's ready [+ + +]
Author: Douglas Anderson <[email protected]>
Date:   Mon Apr 27 10:15:33 2026 -0700

    driver core: Don't let a device probe until it's ready
    
    [ Upstream commit a2225b6e834a838ae3c93709760edc0a169eb2f2 ]
    
    The moment we link a "struct device" into the list of devices for the
    bus, it's possible probe can happen. This is because another thread
    can load the driver at any time and that can cause the device to
    probe. This has been seen in practice with a stack crawl that looks
    like this [1]:
    
      really_probe()
      __driver_probe_device()
      driver_probe_device()
      __driver_attach()
      bus_for_each_dev()
      driver_attach()
      bus_add_driver()
      driver_register()
      __platform_driver_register()
      init_module() [some module]
      do_one_initcall()
      do_init_module()
      load_module()
      __arm64_sys_finit_module()
      invoke_syscall()
    
    As a result of the above, it was seen that device_links_driver_bound()
    could be called for the device before "dev->fwnode->dev" was
    assigned. This prevented __fw_devlink_pickup_dangling_consumers() from
    being called which meant that other devices waiting on our driver's
    sub-nodes were stuck deferring forever.
    
    It's believed that this problem is showing up suddenly for two
    reasons:
    1. Android has recently (last ~1 year) implemented an optimization to
       the order it loads modules [2]. When devices opt-in to this faster
       loading, modules are loaded one-after-the-other very quickly. This
       is unlike how other distributions do it. The reproduction of this
       problem has only been seen on devices that opt-in to Android's
       "parallel module loading".
    2. Android devices typically opt-in to fw_devlink, and the most
       noticeable issue is the NULL "dev->fwnode->dev" in
       device_links_driver_bound(). fw_devlink is somewhat new code and
       also not in use by all Linux devices.
    
    Even though the specific symptom where "dev->fwnode->dev" wasn't
    assigned could be fixed by moving that assignment higher in
    device_add(), other parts of device_add() (like the call to
    device_pm_add()) are also important to run before probe. Only moving
    the "dev->fwnode->dev" assignment would likely fix the current
    symptoms but lead to difficult-to-debug problems in the future.
    
    Fix the problem by preventing probe until device_add() has run far
    enough that the device is ready to probe. If somehow we end up trying
    to probe before we're allowed, __driver_probe_device() will return
    -EPROBE_DEFER which will make certain the device is noticed.
    
    In the race condition that was seen with Android's faster module
    loading, we will temporarily add the device to the deferred list and
    then take it off immediately when device_add() probes the device.
    
    Instead of adding another flag to the bitfields already in "struct
    device", instead add a new "flags" field and use that. This allows us
    to freely change the bit from different thread without worrying about
    corrupting nearby bits (and means threads changing other bit won't
    corrupt us).
    
    [1] Captured on a machine running a downstream 6.6 kernel
    [2] https://cs.android.com/android/platform/superproject/main/+/main:system/core/libmodprobe/libmodprobe.cpp?q=LoadModulesParallel
    
    Cc: [email protected]
    Fixes: 2023c610dc54 ("Driver core: add new device to bus's list before probing")
    Reviewed-by: Alan Stern <[email protected]>
    Reviewed-by: Rafael J. Wysocki (Intel) <[email protected]>
    Reviewed-by: Danilo Krummrich <[email protected]>
    Acked-by: Greg Kroah-Hartman <[email protected]>
    Acked-by: Marek Szyprowski <[email protected]>
    Signed-off-by: Douglas Anderson <[email protected]>
    Link: https://patch.msgid.link/20260406162231.v5.1.Id750b0fbcc94f23ed04b7aecabcead688d0d8c17@changeid
    Signed-off-by: Danilo Krummrich <[email protected]>
    Signed-off-by: Douglas Anderson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

driver core: Move dev_err_probe() to where it belogs [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Fri Jul 21 16:13:09 2023 +0300

    driver core: Move dev_err_probe() to where it belogs
    
    [ Upstream commit 9e0cace7a6254070159ebd86497eadc29ea307ca ]
    
    dev_err_probe() belongs to the printing API, hence
    move the definition from device.h to dev_printk.h.
    
    There is no change to the callers at all, since:
    1) implementation is located in the same core.c;
    2) dev_printk.h is guaranteed to be included by device.h.
    
    Signed-off-by: Andy Shevchenko <[email protected]>
    Reviewed-by: Andi Shyti <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[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]>

 
drivers: base: Free devm resources when unregistering a device [+ + +]
Author: David Gow <[email protected]>
Date:   Wed Feb 25 13:04:25 2026 -0800

    drivers: base: Free devm resources when unregistering a device
    
    [ Upstream commit 699fb50d99039a50e7494de644f96c889279aca3 ]
    
    In the current code, devres_release_all() only gets called if the device
    has a bus and has been probed.
    
    This leads to issues when using bus-less or driver-less devices where
    the device might never get freed if a managed resource holds a reference
    to the device. This is happening in the DRM framework for example.
    
    We should thus call devres_release_all() in the device_del() function to
    make sure that the device-managed actions are properly executed when the
    device is unregistered, even if it has neither a bus nor a driver.
    
    This is effectively the same change than commit 2f8d16a996da ("devres:
    release resources on device_del()") that got reverted by commit
    a525a3ddeaca ("driver core: free devres in device_release") over
    memory leaks concerns.
    
    This patch effectively combines the two commits mentioned above to
    release the resources both on device_del() and device_release() and get
    the best of both worlds.
    
    Fixes: a525a3ddeaca ("driver core: free devres in device_release")
    Signed-off-by: David Gow <[email protected]>
    Signed-off-by: Maxime Ripard <[email protected]>
    Link: https://lore.kernel.org/r/20230720-kunit-devm-inconsistencies-test-v3-3-6aa7e074f373@kernel.org
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Brennan Lamoreaux <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amd/display: Add null checker before passing variables [+ + +]
Author: Alex Hung <[email protected]>
Date:   Tue Apr 21 16:30:02 2026 +0300

    drm/amd/display: Add null checker before passing variables
    
    commit 8092aa3ab8f7b737a34b71f91492c676a843043a upstream.
    
    Checks null pointer before passing variables to functions.
    
    This fixes 3 NULL_RETURNS issues reported by Coverity.
    
    Reviewed-by: Harry Wentland <[email protected]>
    Acked-by: Hamza Mahfooz <[email protected]>
    Signed-off-by: Alex Hung <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Fixes: cdaae8371aa9 ("drm/amd/display: Handle GPU reset for DC block")
    Fixes: dcd5fb82ffb4 ("drm/amd/display: Fix reference counting for struct dc_sink.")
    Fixes: 4562236b3bc0 ("drm/amd/dc: Add dc display driver (v2)")
    [ kovalev: bp to fix CVE-2024-43902; added Fixes tags ]
    Signed-off-by: Vasiliy Kovalev <[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: Do not add '-mhard-float' to calcs, dsc, and dcn30 FP files for clang [+ + +]
Author: Nathan Chancellor <[email protected]>
Date:   Mon Apr 6 17:49:08 2026 -0700

    drm/amd/display: Do not add '-mhard-float' to calcs, dsc, and dcn30 FP files for clang
    
    This patch is for linux-5.10.y only. It is functionally equivalent to
    upstream commit 7db038d9790e ("drm/amd/display: Do not add
    '-mhard-float' to dml_ccflags for clang"), which was created after all
    files that require '-mhard-float' were moved under the dml folder. In
    linux-5.10.y, which does not contain upstream commits
    
      b4bab46400a0 ("drm/amd/display: move calcs folder into DML")
      27e01f10d183 ("drm/amd/display: move FPU associated DSC code to DML folder")
      40b31e5355ba ("drm/amd/display: Remove FPU flags from DCN30 Makefile")
    
    clang-21 or newer errors with
    
      clang: error: unsupported option '-mhard-float' for target 'x86_64-pc-linux-gnu'
      make[6]: *** [scripts/Makefile.build:286: drivers/gpu/drm/amd/amdgpu/../display/dc/calcs/dcn_calc_math.o] Error 1
      clang: error: unsupported option '-mhard-float' for target 'x86_64-pc-linux-gnu'
      make[6]: *** [scripts/Makefile.build:286: drivers/gpu/drm/amd/amdgpu/../display/dc/calcs/dcn_calcs.o] Error 1
      clang: error: unsupported option '-mhard-float' for target 'x86_64-pc-linux-gnu'
      make[6]: *** [scripts/Makefile.build:286: drivers/gpu/drm/amd/amdgpu/../display/dc/calcs/dcn_calc_auto.o] Error 1
      clang: error: unsupported option '-mhard-float' for target 'x86_64-pc-linux-gnu'
      make[6]: *** [scripts/Makefile.build:286: drivers/gpu/drm/amd/amdgpu/../display/dc/dsc/rc_calc.o] Error 1
      clang: error: unsupported option '-mhard-float' for target 'x86_64-pc-linux-gnu'
      make[6]: *** [scripts/Makefile.build:286: drivers/gpu/drm/amd/amdgpu/../display/dc/dcn30/dcn30_optc.o] Error 1
      clang: error: unsupported option '-mhard-float' for target 'x86_64-pc-linux-gnu'
      make[6]: *** [scripts/Makefile.build:286: drivers/gpu/drm/amd/amdgpu/../display/dc/dcn30/dcn30_resource.o] Error 1
    
    Apply a functionally equivalent change to prevent adding '-mhard-float'
    with clang for these files.
    
    Closes: https://github.com/ClangBuiltLinux/linux/issues/2156
    Signed-off-by: Nathan Chancellor <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amd/display: Fix integer overflow in bios_get_image() [+ + +]
Author: Harry Wentland <[email protected]>
Date:   Mon May 4 11:14:45 2026 -0400

    drm/amd/display: Fix integer overflow in bios_get_image()
    
    commit cd86529ec61474a38c3837fb7823790a7c3f8cce upstream.
    
    [Why&How]
    The bounds check in bios_get_image() computes 'offset + size' using
    unsigned 32-bit arithmetic before comparing against bios_size. If a
    VBIOS image contains a near-UINT32_MAX offset the addition wraps to a
    small value, the comparison passes, and the function returns a wild
    pointer past the VBIOS mapping.
    
    Additionally, the comparison uses '<' (strict), which incorrectly
    rejects the valid exact-fit case where offset + size == bios_size.
    
    Fix both issues by restructuring the check to avoid the addition
    entirely: first reject if offset alone exceeds bios_size, then check
    size against the remaining space (bios_size - offset). This eliminates
    the overflow and correctly permits exact-fit accesses.
    
    Assisted-by: GitHub Copilot:claude-opus-4.6
    Reviewed-by: Alex Hung <[email protected]>
    Signed-off-by: Harry Wentland <[email protected]>
    Signed-off-by: Ivan Lipski <[email protected]>
    Tested-by: Dan Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit d40fb392af659c4a02b560319f226842f6ec1a95)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amd/display: Fix memory leak [+ + +]
Author: Yongzhi Liu <[email protected]>
Date:   Tue Apr 21 16:22:10 2026 +0300

    drm/amd/display: Fix memory leak
    
    commit 5d5c6dba2b43e28845d7d7ed32a36802329a5f52 upstream.
    
    [why]
    Resource release is needed on the error handling path
    to prevent memory leak.
    
    [how]
    Fix this by adding kfree on the error handling path.
    
    Reviewed-by: Harry Wentland <[email protected]>
    Signed-off-by: Yongzhi Liu <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Fixes: f8ac2cf78f27 ("drm/amd/display: Linux set/read lane settings through debugfs")
    Fixes: c06e09b76639 ("drm/amd/display: Add DSC parameters logging to debugfs")
    [ kovalev: bp to fix CVE-2022-49135; added Fixes tags ]
    Signed-off-by: Vasiliy Kovalev <[email protected]>
    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/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/gfx9: drop unnecessary 64-bit fence flag check in KIQ [+ + +]
Author: John B. Moore <[email protected]>
Date:   Tue Apr 28 11:35:12 2026 -0500

    drm/amdgpu/gfx9: drop unnecessary 64-bit fence flag check in KIQ
    
    commit 7bbfb2559bcec39d1a4e1182d931a2046112c352 upstream.
    
    Remove the BUG_ON(flags & AMDGPU_FENCE_FLAG_64BIT) assertion from
    gfx_v9_0_ring_emit_fence_kiq().  The KIQ hardware supports 64-bit
    fence writes; the 32-bit writeback address constraint is an
    upper-layer convention, not a hardware limitation.  The check serves
    no purpose and should not be present.
    
    Found by code inspection while investigating related BUG_ON
    assertions in the GFX and compute ring emission paths.
    
    Reviewed-by: Christian König <[email protected]>
    Signed-off-by: John B. Moore <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 1b1101a46a426bb4328116bb5273c326a2780389)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdgpu/pm: add missing revision check for CI [+ + +]
Author: Alex Deucher <[email protected]>
Date:   Mon Apr 27 11:38:58 2026 -0400

    drm/amdgpu/pm: add missing revision check for CI
    
    commit 2a561b361b7681509710f3cfc3d95d54c87ac69f upstream.
    
    The ci_populate_all_memory_levels() workaround only
    applies to revision 0 SKUs.
    
    Link: https://gitlab.freedesktop.org/drm/amd/-/work_items/1816
    Fixes: 9f4b35411cfe ("drm/amd/powerplay: add CI asics support to smumgr (v3)")
    Reviewed-by: Timur Kristóf <[email protected]>
    Reviewed-by: Kent Russell <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 1db15ba8f72f400bbad8ae0ce24fafc43429d4bd)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amdgpu/pm: align Hawaii mclk workaround with radeon [+ + +]
Author: Alex Deucher <[email protected]>
Date:   Tue Apr 28 10:42:49 2026 -0400

    drm/amdgpu/pm: align Hawaii mclk workaround with radeon
    
    commit 1987c79b4fe5789dfa14423e78b5c25f6acf3e9d upstream.
    
    Align the hawaii mclk workaround with radeon and windows.
    
    Link: https://gitlab.freedesktop.org/drm/amd/-/work_items/1816
    Fixes: 9f4b35411cfe ("drm/amd/powerplay: add CI asics support to smumgr (v3)")
    Reviewed-by: Timur Kristóf <[email protected]>
    Reviewed-by: Kent Russell <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 9649528b637f668c5af9f2b83ca4ad8576ae2121)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdgpu/sdma4: replace BUG_ON with WARN_ON in fence emission [+ + +]
Author: John B. Moore <[email protected]>
Date:   Mon Apr 27 16:06:28 2026 -0500

    drm/amdgpu/sdma4: replace BUG_ON with WARN_ON in fence emission
    
    commit 78d2e624fa073c14970aa097adcf3ea31c157a66 upstream.
    
    sdma_v4_0_ring_emit_fence() contains two BUG_ON(addr & 0x3) assertions
    that verify fence writeback addresses are dword-aligned.  These
    assertions can be reached from unprivileged userspace via crafted
    DRM_IOCTL_AMDGPU_CS submissions, causing a fatal kernel panic in a
    scheduler worker thread.
    
    Replace both BUG_ON() calls with WARN_ON() to log the condition without
    crashing the kernel.  A misaligned fence address at this point indicates
    a driver bug, but crashing the kernel is never the correct response when
    the assertion is reachable from userspace.
    
    The CS IOCTL path is the correct place to filter invalid submissions;
    the ring emission callback is too late to do anything about it.
    
    Fixes: 2130f89ced2c ("drm/amdgpu: add SDMA v4.0 implementation (v2)")
    Reviewed-by: Christian König <[email protected]>
    Signed-off-by: John B. Moore <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit b90250bd933afd1ba94d86d6b13821997b22b18e)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdgpu: fix zero-size GDS range init on RDNA4 [+ + +]
Author: Arjan van de Ven <[email protected]>
Date:   Mon Apr 20 14:57:15 2026 -0700

    drm/amdgpu: fix zero-size GDS range init on RDNA4
    
    commit 095a8b0ad3c3b5cdc3850d961adb8a8f735220bb upstream.
    
    RDNA4 (GFX 12) hardware removes the GDS, GWS, and OA on-chip memory
    resources. The gfx_v12_0 initialisation code correctly leaves
    adev->gds.gds_size, adev->gds.gws_size, and adev->gds.oa_size at
    zero to reflect this.
    
    amdgpu_ttm_init() unconditionally calls amdgpu_ttm_init_on_chip() for
    each of these resources regardless of size. When the size is zero,
    amdgpu_ttm_init_on_chip() forwards the call to ttm_range_man_init(),
    which calls drm_mm_init(mm, 0, 0). drm_mm_init() immediately fires
    DRM_MM_BUG_ON(start + size <= start) -- trivially true when size is
    zero -- crashing the kernel during modprobe of amdgpu on an RX 9070 XT.
    
    Guard against this by returning 0 early from
    amdgpu_ttm_init_on_chip() when size_in_page is zero. This skips TTM
    resource manager registration for hardware resources that are absent,
    without affecting any other GPU type.
    
    DRM_MM_BUG_ON() only asserts if CONFIG_DRM_DEBUG_MM is enabled in
    the kernel config.  This is apparently rarely enabled as these chips
    have been in the market for over a year and this issue was only reported
    now.
    
    Link: https://lore.kernel.org/all/[email protected]%2F/
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=221376
    Oops-Analysis: http://oops.fenrus.org/reports/bugzilla.korg/221376/report.html
    Assisted-by: GitHub Copilot:Claude Sonnet 4.6 linux-kernel-oops-x86.
    Signed-off-by: Arjan van de Ven <[email protected]>
    Cc: Alex Deucher <[email protected]>
    Cc: "Christian König" <[email protected]>
    Cc: [email protected]
    Cc: [email protected]
    Cc: [email protected]
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 5719ce5865279cad4fd5f01011fe037168503f2d)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/bridge: megachips: remove bridge when irq request fails [+ + +]
Author: Osama Abdelkader <[email protected]>
Date:   Thu Apr 30 21:56:59 2026 +0200

    drm/bridge: megachips: remove bridge when irq request fails
    
    commit d45d5c819f2cd0b6b5d76a194a537a5f4aeefecb upstream.
    
    If devm_request_threaded_irq() fails after drm_bridge_add(), remove the
    bridge before returning.
    
    Keep drm_bridge_add() rather than devm_drm_bridge_add(): registration is
    tied to the STDP4028 device while ge_b850v3_register() may complete from
    either I2C probe; devm would not unwind the bridge if the other client's
    probe fails.
    
    Signed-off-by: Osama Abdelkader <[email protected]>
    Fixes: fcfa0ddc18ed ("drm/bridge: Drivers for megachips-stdpxxxx-ge-b850v3-fw (LVDS-DP++)")
    Cc: [email protected]
    Reviewed-by: Luca Ceresoli <[email protected]>
    Tested-by: Ian Ray <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Luca Ceresoli <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/gem: Fix inconsistent plane dimension calculation in drm_gem_fb_init_with_funcs() [+ + +]
Author: Ashutosh Desai <[email protected]>
Date:   Mon Apr 20 01:36:37 2026 +0000

    drm/gem: Fix inconsistent plane dimension calculation in drm_gem_fb_init_with_funcs()
    
    commit 3d4c2268bd7243c3780fe32bf24ff876da272acf upstream.
    
    drm_gem_fb_init_with_funcs() computes sub-sampled plane dimensions
    using plain integer division:
    
      unsigned int width  = mode_cmd->width  / (i ? info->hsub : 1);
      unsigned int height = mode_cmd->height / (i ? info->vsub : 1);
    
    However, the ioctl-level framebuffer_check() in drm_framebuffer.c uses
    drm_format_info_plane_width/height() which round up dimensions via
    DIV_ROUND_UP(). This inconsistency corrupts the subsequent GEM object
    size check for certain pixel format and dimension combinations.
    
    For example, with NV12 (vsub=2) and a 1-pixel-tall framebuffer the
    GEM size validation path sees height=0 instead of height=1. The
    expression (height - 1) then wraps to UINT_MAX as an unsigned int,
    causing min_size to overflow and wrap back to a small value. A tiny
    GEM object therefore passes the size guard, yet when the GPU accesses
    the chroma plane it will read or write memory beyond the object's
    bounds.
    
    Fix by replacing the open-coded divisions with drm_format_info_plane_width()
    and drm_format_info_plane_height(), which use DIV_ROUND_UP() and match
    the calculation already used in framebuffer_check().
    
    Fixes: 4c3dbb2c312c ("drm: Add GEM backed framebuffer library")
    Cc: [email protected] # v4.14+
    Reviewed-by: Thomas Zimmermann <[email protected]>
    Signed-off-by: Ashutosh Desai <[email protected]>
    Signed-off-by: Thomas Zimmermann <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[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/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/gt: fix refcount underflow in intel_engine_park_heartbeat [+ + +]
Author: Sebastian Brzezinka <[email protected]>
Date:   Mon Apr 13 16:23:03 2026 +0200

    drm/i915/gt: fix refcount underflow in intel_engine_park_heartbeat
    
    [ Upstream commit 4c71fd099513bfa8acab529b626e1f0097b76061 ]
    
    A use-after-free / refcount underflow is possible when the heartbeat
    worker and intel_engine_park_heartbeat() race to release the same
    engine->heartbeat.systole request.
    
    The heartbeat worker reads engine->heartbeat.systole and calls
    i915_request_put() on it when the request is complete, but clears
    the pointer in a separate, non-atomic step. Concurrently, a request
    retirement on another CPU can drop the engine wakeref to zero, triggering
    __engine_park() -> intel_engine_park_heartbeat(). If the heartbeat
    timer is pending at that point, cancel_delayed_work() returns true and
    intel_engine_park_heartbeat() reads the stale non-NULL systole pointer
    and calls i915_request_put() on it again, causing a refcount underflow:
    
    ```
    <4> [487.221889] Workqueue: i915-unordered engine_retire [i915]
    <4> [487.222640] RIP: 0010:refcount_warn_saturate+0x68/0xb0
    ...
    <4> [487.222707] Call Trace:
    <4> [487.222711]  <TASK>
    <4> [487.222716]  intel_engine_park_heartbeat.part.0+0x6f/0x80 [i915]
    <4> [487.223115]  intel_engine_park_heartbeat+0x25/0x40 [i915]
    <4> [487.223566]  __engine_park+0xb9/0x650 [i915]
    <4> [487.223973]  ____intel_wakeref_put_last+0x2e/0xb0 [i915]
    <4> [487.224408]  __intel_wakeref_put_last+0x72/0x90 [i915]
    <4> [487.224797]  intel_context_exit_engine+0x7c/0x80 [i915]
    <4> [487.225238]  intel_context_exit+0xf1/0x1b0 [i915]
    <4> [487.225695]  i915_request_retire.part.0+0x1b9/0x530 [i915]
    <4> [487.226178]  i915_request_retire+0x1c/0x40 [i915]
    <4> [487.226625]  engine_retire+0x122/0x180 [i915]
    <4> [487.227037]  process_one_work+0x239/0x760
    <4> [487.227060]  worker_thread+0x200/0x3f0
    <4> [487.227068]  ? __pfx_worker_thread+0x10/0x10
    <4> [487.227075]  kthread+0x10d/0x150
    <4> [487.227083]  ? __pfx_kthread+0x10/0x10
    <4> [487.227092]  ret_from_fork+0x3d4/0x480
    <4> [487.227099]  ? __pfx_kthread+0x10/0x10
    <4> [487.227107]  ret_from_fork_asm+0x1a/0x30
    <4> [487.227141]  </TASK>
    ```
    
    Fix this by replacing the non-atomic pointer read + separate clear with
    xchg() in both racing paths. xchg() is a single indivisible hardware
    instruction that atomically reads the old pointer and writes NULL. This
    guarantees only one of the two concurrent callers obtains the non-NULL
    pointer and performs the put, the other gets NULL and skips it.
    
    Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/work_items/15880
    Fixes: 058179e72e09 ("drm/i915/gt: Replace hangcheck by heartbeats")
    Cc: <[email protected]> # v5.5+
    Signed-off-by: Sebastian Brzezinka <[email protected]>
    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/d4c1c14255688dd07cc8044973c4f032a8d1559e.1775038106.git.sebastian.brzezinka@intel.com
    (cherry picked from commit 13238dc0ee4f9ab8dafa2cca7295736191ae2f42)
    Signed-off-by: Joonas Lahtinen <[email protected]>
    Signed-off-by: Sasha Levin <[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/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/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/radeon: add missing revision check for CI [+ + +]
Author: Alex Deucher <[email protected]>
Date:   Mon Apr 27 11:40:25 2026 -0400

    drm/radeon: add missing revision check for CI
    
    commit 17223816498f7b117d138d18eb0eba63604dc74e upstream.
    
    The memory level workarounds only apply to revision 0 SKUs.
    
    Link: https://gitlab.freedesktop.org/drm/amd/-/work_items/1816
    Fixes: 127e056e2a82 ("drm/radeon: fix mclk vddc configuration for cards for hawaii")
    Fixes: 21b8a369046f ("drm/radeon: fix dram timing for certain hawaii boards")
    Fixes: 90b2fee35cb9 ("drm/radeon: fix dpm mc init for certain hawaii boards")
    Reviewed-by: Timur Kristóf <[email protected]>
    Reviewed-by: Kent Russell <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 4d8dcc14311515077062b5740f39f427075de5c9)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[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/vc4: Fix a memory leak in hang state error path [+ + +]
Author: Maíra Canal <[email protected]>
Date:   Mon Mar 30 14:51:45 2026 -0300

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

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

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

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

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

 
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]>

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

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

 
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]>

 
ethtool: fix ethnl_bitmap32_not_zero() bit interval semantics [+ + +]
Author: Chenguang Zhao <[email protected]>
Date:   Mon May 11 09:43:43 2026 +0800

    ethtool: fix ethnl_bitmap32_not_zero() bit interval semantics
    
    [ Upstream commit 3d042592ebd4c7e44974d556de0b727cb7db4dab ]
    
    ethnl_bitmap32_not_zero() should return true if some bit in [start, end)
    is set:
    
    - Fix inverted memchr_inv() sense: return true when the scan finds a
      non-zero byte, not when the middle words are all zero.
    - Return false for an empty interval (end <= start).
    - When end is 32-bit aligned, indices in [start, end) do not include any
      bits from map[end_word]; return false after earlier checks found no
      non-zero data.
    
    Fixes: 10b518d4e6dd ("ethtool: netlink bitset handling")
    Signed-off-by: Chenguang Zhao <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ext2: reject inodes with zero i_nlink and valid mode in ext2_iget() [+ + +]
Author: Vasiliy Kovalev <[email protected]>
Date:   Sat Apr 4 18:20:11 2026 +0300

    ext2: reject inodes with zero i_nlink and valid mode in ext2_iget()
    
    commit 25947cc5b2374cd5bf627fe3141496444260d04f upstream.
    
    ext2_iget() already rejects inodes with i_nlink == 0 when i_mode is
    zero or i_dtime is set, treating them as deleted. However, the case of
    i_nlink == 0 with a non-zero mode and zero dtime slips through. Since
    ext2 has no orphan list, such a combination can only result from
    filesystem corruption - a legitimate inode deletion always sets either
    i_dtime or clears i_mode before freeing the inode.
    
    A crafted image can exploit this gap to present such an inode to the
    VFS, which then triggers WARN_ON inside drop_nlink() (fs/inode.c) via
    ext2_unlink(), ext2_rename() and ext2_rmdir():
    
    WARNING: CPU: 3 PID: 609 at fs/inode.c:336 drop_nlink+0xad/0xd0 fs/inode.c:336
    CPU: 3 UID: 0 PID: 609 Comm: syz-executor Not tainted 6.12.77+ #1
    Call Trace:
     <TASK>
     inode_dec_link_count include/linux/fs.h:2518 [inline]
     ext2_unlink+0x26c/0x300 fs/ext2/namei.c:295
     vfs_unlink+0x2fc/0x9b0 fs/namei.c:4477
     do_unlinkat+0x53e/0x730 fs/namei.c:4541
     __x64_sys_unlink+0xc6/0x110 fs/namei.c:4587
     do_syscall_64+0xf5/0x220 arch/x86/entry/common.c:78
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
     </TASK>
    
    WARNING: CPU: 0 PID: 646 at fs/inode.c:336 drop_nlink+0xad/0xd0 fs/inode.c:336
    CPU: 0 UID: 0 PID: 646 Comm: syz.0.17 Not tainted 6.12.77+ #1
    Call Trace:
     <TASK>
     inode_dec_link_count include/linux/fs.h:2518 [inline]
     ext2_rename+0x35e/0x850 fs/ext2/namei.c:374
     vfs_rename+0xf2f/0x2060 fs/namei.c:5021
     do_renameat2+0xbe2/0xd50 fs/namei.c:5178
     __x64_sys_rename+0x7e/0xa0 fs/namei.c:5223
     do_syscall_64+0xf5/0x220 arch/x86/entry/common.c:78
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
     </TASK>
    
    WARNING: CPU: 0 PID: 634 at fs/inode.c:336 drop_nlink+0xad/0xd0 fs/inode.c:336
    CPU: 0 UID: 0 PID: 634 Comm: syz-executor Not tainted 6.12.77+ #1
    Call Trace:
     <TASK>
     inode_dec_link_count include/linux/fs.h:2518 [inline]
     ext2_rmdir+0xca/0x110 fs/ext2/namei.c:311
     vfs_rmdir+0x204/0x690 fs/namei.c:4348
     do_rmdir+0x372/0x3e0 fs/namei.c:4407
     __x64_sys_unlinkat+0xf0/0x130 fs/namei.c:4577
     do_syscall_64+0xf5/0x220 arch/x86/entry/common.c:78
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
     </TASK>
    
    Extend the existing i_nlink == 0 check to also catch this case,
    reporting the corruption via ext2_error() and returning -EFSCORRUPTED.
    This rejects the inode at load time and prevents it from reaching any
    of the namei.c paths.
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Signed-off-by: Vasiliy Kovalev <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jan Kara <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ext4: fix missing brelse() in ext4_xattr_inode_dec_ref_all() [+ + +]
Author: Sohei Koyama <[email protected]>
Date:   Mon Apr 6 16:48:30 2026 +0900

    ext4: fix missing brelse() in ext4_xattr_inode_dec_ref_all()
    
    commit 77d059519382bd66283e6a4e83ee186e87e7708f upstream.
    
    The commit c8e008b60492 ("ext4: ignore xattrs past end")
    introduced a refcount leak in when block_csum is false.
    
    ext4_xattr_inode_dec_ref_all() calls ext4_get_inode_loc() to
    get iloc.bh, but never releases it with brelse().
    
    Fixes: c8e008b60492 ("ext4: ignore xattrs past end")
    Signed-off-by: Sohei Koyama <[email protected]>
    Reviewed-by: Andreas Dilger <[email protected]>
    Reviewed-by: Ritesh Harjani (IBM) <[email protected]>
    Cc: [email protected]
    Reviewed-by: Zhang Yi <[email protected]>
    Reviewed-by: Baokun Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fanotify: fix false positive on permission events [+ + +]
Author: Miklos Szeredi <[email protected]>
Date:   Fri Apr 10 16:49:47 2026 +0200

    fanotify: fix false positive on permission events
    
    commit 7746e3bd4cc19b5092e00d32d676e329bfcb6900 upstream.
    
    fsnotify_get_mark_safe() may return false for a mark on an unrelated group,
    which results in bypassing the permission check.
    
    Fix by skipping over detached marks that are not in the current group.
    
    CC: [email protected]
    Fixes: abc77577a669 ("fsnotify: Provide framework for dropping SRCU lock in ->handle_event")
    Signed-off-by: Miklos Szeredi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jan Kara <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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]>

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

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

fbdev: udlfb: add vm_ops to dlfb_ops_mmap to prevent use-after-free [+ + +]
Author: Rajat Gupta <[email protected]>
Date:   Sun May 3 20:51:10 2026 -0700

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

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

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

 
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]>

firmware: google: framebuffer: Do not mark framebuffer as busy [+ + +]
Author: Thomas Zimmermann <[email protected]>
Date:   Tue Feb 17 16:56:12 2026 +0100

    firmware: google: framebuffer: Do not mark framebuffer as busy
    
    commit f3850d399de3b6142b02315227ef9e772ed0c302 upstream.
    
    Remove the flag IORESOURCE_BUSY flag from coreboot's framebuffer
    resource. It prevents simpledrm from successfully requesting the
    range for its own use; resulting in errors such as
    
    [    2.775430] simple-framebuffer simple-framebuffer.0: [drm] could not acquire memory region [mem 0x80000000-0x80407fff flags 0x80000200]
    
    As with other uses of simple-framebuffer, the simple-framebuffer
    device should only declare it's I/O resources, but not actively use
    them.
    
    Signed-off-by: Thomas Zimmermann <[email protected]>
    Fixes: 851b4c14532d ("firmware: coreboot: Add coreboot framebuffer driver")
    Acked-by: Tzung-Bi Shih <[email protected]>
    Acked-by: Julius Werner <[email protected]>
    Cc: Samuel Holland <[email protected]>
    Cc: Greg Kroah-Hartman <[email protected]>
    Cc: Tzung-Bi Shih <[email protected]>
    Cc: Brian Norris <[email protected]>
    Cc: Julius Werner <[email protected]>
    Cc: [email protected]
    Cc: <[email protected]> # v4.18+
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
flow_dissector: Add number of vlan tags dissector [+ + +]
Author: Boris Sukholitko <[email protected]>
Date:   Tue Apr 19 11:14:32 2022 +0300

    flow_dissector: Add number of vlan tags dissector
    
    [ Upstream commit 34951fcf26c59e78ae430fba1fce7c08b1871249 ]
    
    Our customers in the fiber telecom world have network configurations
    where they would like to control their traffic according to the number
    of tags appearing in the packet.
    
    For example, TR247 GPON conformance test suite specification mostly
    talks about untagged, single, double tagged packets and gives lax
    guidelines on the vlan protocol vs. number of vlan tags.
    
    This is different from the common IT networks where 802.1Q and 802.1ad
    protocols are usually describe single and double tagged packet. GPON
    configurations that we work with have arbitrary mix the above protocols
    and number of vlan tags in the packet.
    
    The goal is to make the following TC commands possible:
    
    tc filter add dev eth1 ingress flower \
      num_of_vlans 1 vlan_prio 5 action drop
    
    From our logs, we have redirect rules such that:
    
    tc filter add dev $GPON ingress flower num_of_vlans $N \
         action mirred egress redirect dev $DEV
    
    where N can range from 0 to 3 and $DEV is the function of $N.
    
    Also there are rules setting skb mark based on the number of vlans:
    
    tc filter add dev $GPON ingress flower num_of_vlans $N vlan_prio \
        $P action skbedit mark $M
    
    This new dissector allows extracting the number of vlan tags existing in
    the packet.
    
    Signed-off-by: Boris Sukholitko <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: cc1ff87bce1c ("pppoe: drop PFC frames")
    Signed-off-by: Sasha Levin <[email protected]>

flow_dissector: Add PPPoE dissectors [+ + +]
Author: Wojciech Drewek <[email protected]>
Date:   Mon Jul 18 14:18:10 2022 +0200

    flow_dissector: Add PPPoE dissectors
    
    [ Upstream commit 46126db9c86110e5fc1e369b9bb89735ddefdae4 ]
    
    Allow to dissect PPPoE specific fields which are:
    - session ID (16 bits)
    - ppp protocol (16 bits)
    - type (16 bits) - this is PPPoE ethertype, for now only
      ETH_P_PPP_SES is supported, possible ETH_P_PPP_DISC
      in the future
    
    The goal is to make the following TC command possible:
    
      # tc filter add dev ens6f0 ingress prio 1 protocol ppp_ses \
          flower \
            pppoe_sid 12 \
            ppp_proto ip \
          action drop
    
    Note that only PPPoE Session is supported.
    
    Signed-off-by: Wojciech Drewek <[email protected]>
    Acked-by: Guillaume Nault <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Stable-dep-of: cc1ff87bce1c ("pppoe: drop PFC frames")
    Signed-off-by: Sasha Levin <[email protected]>

flow_dissector: Do not count vlan tags inside tunnel payload [+ + +]
Author: Qingqing Yang <[email protected]>
Date:   Mon Sep 19 15:48:08 2022 +0800

    flow_dissector: Do not count vlan tags inside tunnel payload
    
    [ Upstream commit 9f87eb4246994e32a4e4ea88476b20ab3b412840 ]
    
    We've met the problem that when there is a vlan tag inside
    GRE encapsulation, the match of num_of_vlans fails.
    It is caused by the vlan tag inside GRE payload has been
    counted into num_of_vlans, which is not expected.
    
    One example packet is like this:
    Ethernet II, Src: Broadcom_68:56:07 (00:10:18:68:56:07)
                       Dst: Broadcom_68:56:08 (00:10:18:68:56:08)
    802.1Q Virtual LAN, PRI: 0, DEI: 0, ID: 100
    Internet Protocol Version 4, Src: 192.168.1.4, Dst: 192.168.1.200
    Generic Routing Encapsulation (Transparent Ethernet bridging)
    Ethernet II, Src: Broadcom_68:58:07 (00:10:18:68:58:07)
                       Dst: Broadcom_68:58:08 (00:10:18:68:58:08)
    802.1Q Virtual LAN, PRI: 0, DEI: 0, ID: 200
    ...
    It should match the (num_of_vlans 1) rule, but it matches
    the (num_of_vlans 2) rule.
    
    The vlan tags inside the GRE or other tunnel encapsulated payload
    should not be taken into num_of_vlans.
    The fix is to stop counting the vlan number when the encapsulation
    bit is set.
    
    Fixes: 34951fcf26c5 ("flow_dissector: Add number of vlan tags dissector")
    Signed-off-by: Qingqing Yang <[email protected]>
    Reviewed-by: Boris Sukholitko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

flow_dissector: do not dissect PPPoE PFC frames [+ + +]
Author: Qingfang Deng <[email protected]>
Date:   Wed Apr 15 10:24:50 2026 +0800

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

    fs/ocfs2: fix comments mentioning i_mutex
    
    [ Upstream commit 137cebf9432eae024d0334953ed92a2a78619b52 ]
    
    inode->i_mutex has been replaced with inode->i_rwsem long ago.  Fix
    comments still mentioning i_mutex.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: hongnanli <[email protected]>
    Acked-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: Gang He <[email protected]>
    Cc: Jun Piao <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Linus Torvalds <[email protected]>
    Stable-dep-of: b02da26a992d ("ocfs2: fix possible deadlock between unlink and dio_end_io_write")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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]>

 
fuse: quiet down complaints in fuse_conn_limit_write [+ + +]
Author: Darrick J. Wong <[email protected]>
Date:   Mon Feb 23 15:06:50 2026 -0800

    fuse: quiet down complaints in fuse_conn_limit_write
    
    commit 129a45f9755a89f573c6a513a6b9e3d234ce89b0 upstream.
    
    gcc 15 complains about an uninitialized variable val that is passed by
    reference into fuse_conn_limit_write:
    
     control.c: In function ‘fuse_conn_congestion_threshold_write’:
     include/asm-generic/rwonce.h:55:37: warning: ‘val’ may be used uninitialized [-Wmaybe-uninitialized]
        55 |         *(volatile typeof(x) *)&(x) = (val);                            \
           |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
     include/asm-generic/rwonce.h:61:9: note: in expansion of macro ‘__WRITE_ONCE’
        61 |         __WRITE_ONCE(x, val);                                           \
           |         ^~~~~~~~~~~~
     control.c:178:9: note: in expansion of macro ‘WRITE_ONCE’
       178 |         WRITE_ONCE(fc->congestion_threshold, val);
           |         ^~~~~~~~~~
     control.c:166:18: note: ‘val’ was declared here
       166 |         unsigned val;
           |                  ^~~
    
    Unfortunately there's enough macro spew involved in kstrtoul_from_user
    that I think gcc gives up on its analysis and sprays the above warning.
    AFAICT it's not actually a bug, but we could just zero-initialize the
    variable to enable using -Wmaybe-uninitialized to find real problems.
    
    Previously we would use some weird uninitialized_var annotation to quiet
    down the warnings, so clearly this code has been like this for quite
    some time.
    
    Cc: [email protected] # v5.9
    Fixes: 3f649ab728cda8 ("treewide: Remove uninitialized_var() usage")
    Signed-off-by: Darrick J. Wong <[email protected]>
    Signed-off-by: Miklos Szeredi <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

fuse: reject oversized dirents in page cache [+ + +]
Author: Samuel Page <[email protected]>
Date:   Mon Apr 20 11:01:37 2026 +0200

    fuse: reject oversized dirents in page cache
    
    commit 51a8de6c50bf947c8f534cd73da4c8f0a13e7bed upstream.
    
    fuse_add_dirent_to_cache() computes a serialized dirent size from the
    server-controlled namelen field and copies the dirent into a single
    page-cache page. The existing logic only checks whether the dirent fits
    in the remaining space of the current page and advances to a fresh page
    if not. It never checks whether the dirent itself exceeds PAGE_SIZE.
    
    As a result, a malicious FUSE server can return a dirent with
    namelen=4095, producing a serialized record size of 4120 bytes. On 4 KiB
    page systems this causes memcpy() to overflow the cache page by 24 bytes
    into the following kernel page.
    
    Reject dirents that cannot fit in a single page before copying them into
    the readdir cache.
    
    Fixes: 69e34551152a ("fuse: allow caching readdir")
    Cc: [email protected] # v6.16+
    Assisted-by: Bynario AI
    Signed-off-by: Samuel Page <[email protected]>
    Reported-by: Qi Tang <[email protected]>
    Reported-by: Zijun Hu <[email protected]>
    Signed-off-by: Miklos Szeredi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
gfs2: Validate i_depth for exhash directories [+ + +]
Author: Andrew Price <[email protected]>
Date:   Thu Apr 23 11:20:02 2026 +0800

    gfs2: Validate i_depth for exhash directories
    
    [ Upstream commit 557c024ca7250bb65ae60f16c02074106c2f197b ]
    
    A fuzzer test introduced corruption that ends up with a depth of 0 in
    dir_e_read(), causing an undefined shift by 32 at:
    
      index = hash >> (32 - dip->i_depth);
    
    As calculated in an open-coded way in dir_make_exhash(), the minimum
    depth for an exhash directory is ilog2(sdp->sd_hash_ptrs) and 0 is
    invalid as sdp->sd_hash_ptrs is fixed as sdp->bsize / 16 at mount time.
    
    So we can avoid the undefined behaviour by checking for depth values
    lower than the minimum in gfs2_dinode_in(). Values greater than the
    maximum are already being checked for there.
    
    Also switch the calculation in dir_make_exhash() to use ilog2() to
    clarify how the depth is calculated.
    
    Tested with the syzkaller repro.c and xfstests '-g quick'.
    
    Reported-by: [email protected]
    Signed-off-by: Andrew Price <[email protected]>
    Signed-off-by: Andreas Gruenbacher <[email protected]>
    [ To maintain consistency in error handling in gfs2_dinode_in(),
    use "goto corrupt" in v5.10. ]
    Signed-off-by: Ruohan Lan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
gpio: cdev: check if uAPI v2 config attributes are correctly zeroed [+ + +]
Author: Bartosz Golaszewski <[email protected]>
Date:   Thu May 21 10:42:16 2026 +0200

    gpio: cdev: check if uAPI v2 config attributes are correctly zeroed
    
    [ Upstream commit 3e6ccd790ed69bedd3d9626d01dd35cf9821c121 ]
    
    We check the padding of other uAPI v2 structures but not that of line
    config attributes. For used attributes: check if their padding is
    zeroed, for unused: check if the entire structure is zeroed.
    
    Fixes: 3c0d9c635ae2 ("gpiolib: cdev: support GPIO_V2_GET_LINE_IOCTL and GPIO_V2_LINE_GET_VALUES_IOCTL")
    Reviewed-by: Kent Gibson <[email protected]>
    Link: https://patch.msgid.link/20260521-gpio-cdev-attr-padding-check-v3-1-ec3bcbe2e358@oss.qualcomm.com
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
gpiolib: cdev: use !mem_is_zero() instead of memchr_inv(s, 0, n) [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Sun Nov 10 22:16:15 2024 +0200

    gpiolib: cdev: use !mem_is_zero() instead of memchr_inv(s, 0, n)
    
    [ Upstream commit e106b1dd38e723ec2bb2bf57ea9b2aff464b9423 ]
    
    Use the mem_is_zero() helper where possible.
    
    Signed-off-by: Andy Shevchenko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Stable-dep-of: 3e6ccd790ed6 ("gpio: cdev: check if uAPI v2 config attributes are correctly zeroed")
    Signed-off-by: Sasha Levin <[email protected]>

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

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

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

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

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

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

HID: quirks: really enable the intended work around for appledisplay [+ + +]
Author: Lukas Bulwahn <[email protected]>
Date:   Thu Feb 5 09:11:31 2026 +0100

    HID: quirks: really enable the intended work around for appledisplay
    
    [ Upstream commit 5f90dcfa8dc32a488581b78e575cdd7808ba5c78 ]
    
    Commit c7fabe4ad921 ("HID: quirks: work around VID/PID conflict for
    appledisplay") intends to add a quirk for kernels built with Apple Cinema
    Display support, but it refers to the non-existing config option
    CONFIG_APPLEDISPLAY, whereas the config option for Apple Cinema Display
    support is named CONFIG_USB_APPLEDISPLAY.
    
    Refer to the intended config option CONFIG_USB_APPLEDISPLAY in the ifdef
    directive.
    
    Fixes: c7fabe4ad921 ("HID: quirks: work around VID/PID conflict for appledisplay")
    Signed-off-by: Lukas Bulwahn <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

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

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

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]>

 
hv_sock: fix ARM64 support [+ + +]
Author: Hamza Mahfooz <[email protected]>
Date:   Tue Apr 28 08:53:39 2026 -0400

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

 
hwmon: (pmbus/adm1266) bounce blackbox records through a protocol-sized buffer [+ + +]
Author: Abdurrahman Hussain <[email protected]>
Date:   Fri May 15 15:11:51 2026 -0700

    hwmon: (pmbus/adm1266) bounce blackbox records through a protocol-sized buffer
    
    commit 43cae21424ff8e33894a0f86c6b80b840c049fd7 upstream.
    
    adm1266_pmbus_block_xfer() copies the device-supplied block payload
    into the caller-provided buffer using the device-supplied length:
    
            memcpy(data_r, &msgs[1].buf[1], msgs[1].buf[0]);
    
    The helper does not know how large data_r is and trusts the device to
    return at most one record's worth of bytes.  adm1266_nvmem_read_blackbox()
    violates that contract: it advances read_buff inside data->dev_mem in
    ADM1266_BLACKBOX_SIZE (64-byte) strides while the helper is willing to
    write up to ADM1266_PMBUS_BLOCK_MAX (255) bytes.  A device that returns
    more than 64 bytes on the trailing record (read_buff offset 1984 in
    the 2048-byte dev_mem allocation) overflows dev_mem by up to 191 bytes
    before the post-call
    
            if (ret != ADM1266_BLACKBOX_SIZE)
                    return -EIO;
    
    can reject the response.
    
    Contain the fix in the caller without changing the helper signature:
    read each record into a 255-byte local bounce buffer that matches the
    helper's maximum output, validate the returned length, and only then
    copy exactly ADM1266_BLACKBOX_SIZE bytes into the dev_mem slot.
    
    Fixes: 407dc802a9c0 ("hwmon: (pmbus/adm1266) Add Block process call")
    Cc: [email protected]
    Signed-off-by: Abdurrahman Hussain <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: (pmbus/adm1266) cap PDIO scan in get_multiple at ADM1266_PDIO_NR [+ + +]
Author: Abdurrahman Hussain <[email protected]>
Date:   Mon May 18 17:52:25 2026 -0700

    hwmon: (pmbus/adm1266) cap PDIO scan in get_multiple at ADM1266_PDIO_NR
    
    commit d7834d92251baade796812876e95555e2066fa9f upstream.
    
    adm1266_gpio_get_multiple() iterates the PDIO portion of the
    caller-supplied mask using
    
            for_each_set_bit_from(gpio_nr, mask,
                                  ADM1266_GPIO_NR + ADM1266_PDIO_STATUS) {
                    ...
            }
    
    where ADM1266_PDIO_STATUS is the PMBus command code (0xE9, i.e. 233),
    not the number of PDIO pins.  The intended upper bound is
    ADM1266_GPIO_NR + ADM1266_PDIO_NR = 25.
    
    gpiolib hands in a mask sized for gc.ngpio (= 25 bits on this chip),
    so the iteration walks find_next_bit() up to 242, reading up to 217
    extra bits (a handful of unsigned-long words: four on 64-bit, seven
    on 32-bit) of whatever lives past the end of the mask in the
    caller's stack.  Any incidental set bit in that range then drives a
    set_bit(gpio_nr, bits) call that writes past the end of the
    caller-supplied bits array too -- both out-of-bounds.
    
    Substitute ADM1266_PDIO_NR for the constant so the scan stops at the
    last real PDIO bit.
    
    Fixes: d98dfad35c38 ("hwmon: (pmbus/adm1266) Add support for GPIOs")
    Cc: [email protected]
    Signed-off-by: Abdurrahman Hussain <[email protected]>
    Reviewed-by: Bartosz Golaszewski <[email protected]>
    Reviewed-by: Linus Walleij <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: (pmbus/adm1266) don't clobber GPIO bits before PDIO read in get_multiple [+ + +]
Author: Abdurrahman Hussain <[email protected]>
Date:   Mon May 18 17:52:26 2026 -0700

    hwmon: (pmbus/adm1266) don't clobber GPIO bits before PDIO read in get_multiple
    
    commit 3327a12aee9e10ffa903e28b8445dfd1af5307c0 upstream.
    
    adm1266_gpio_get_multiple() zeroes *bits before the GPIO_STATUS loop
    and then a second time before the PDIO_STATUS loop:
    
            *bits = 0;
            for_each_set_bit(gpio_nr, mask, ADM1266_GPIO_NR) {
                    ...
                    set_bit(gpio_nr, bits);
            }
    
            ret = i2c_smbus_read_block_data(data->client, ADM1266_PDIO_STATUS, ...);
            ...
            *bits = 0;
            for_each_set_bit_from(gpio_nr, mask, ADM1266_GPIO_NR + ADM1266_PDIO_NR) {
                    ...
                    set_bit(gpio_nr, bits);
            }
    
    The second *bits = 0 throws away every GPIO bit the first loop just
    populated, so callers asking for any combination of GPIO and PDIO
    pins always see the GPIO portion of the returned bits as zero.
    
    Drop the redundant second assignment so both halves of the result
    survive.
    
    Fixes: d98dfad35c38 ("hwmon: (pmbus/adm1266) Add support for GPIOs")
    Cc: [email protected]
    Signed-off-by: Abdurrahman Hussain <[email protected]>
    Reviewed-by: Bartosz Golaszewski <[email protected]>
    Reviewed-by: Linus Walleij <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: (pmbus/adm1266) include PEC byte in pmbus_block_xfer read buffer [+ + +]
Author: Abdurrahman Hussain <[email protected]>
Date:   Fri May 15 15:11:50 2026 -0700

    hwmon: (pmbus/adm1266) include PEC byte in pmbus_block_xfer read buffer
    
    commit 487566cb1ccdf3756fdd7bf8d875e612ff3169bb upstream.
    
    adm1266_pmbus_block_xfer() sets up the read transaction with
    
            .buf = data->read_buf,
            .len = ADM1266_PMBUS_BLOCK_MAX + 2,
    
    but read_buf in struct adm1266_data is declared as
    
            u8 read_buf[ADM1266_PMBUS_BLOCK_MAX + 1];
    
    For a max-length block response (length byte = 255 + up to 1 PEC
    byte), the i2c controller is told to write 257 bytes into a 256-byte
    buffer, putting one byte past the end of read_buf.  The same response
    also makes the subsequent PEC compare
    
            if (crc != msgs[1].buf[msgs[1].buf[0] + 1])
    
    read a byte beyond the array.
    
    Bump the read_buf declaration to ADM1266_PMBUS_BLOCK_MAX + 2 so the
    buffer can hold the length byte, up to 255 payload bytes, and the PEC
    byte the i2c_msg length already accounts for.
    
    Fixes: 407dc802a9c0 ("hwmon: (pmbus/adm1266) Add Block process call")
    Cc: [email protected]
    Signed-off-by: Abdurrahman Hussain <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: (pmbus/adm1266) register the gpio_chip after pmbus_do_probe() [+ + +]
Author: Abdurrahman Hussain <[email protected]>
Date:   Mon May 18 17:52:28 2026 -0700

    hwmon: (pmbus/adm1266) register the gpio_chip after pmbus_do_probe()
    
    commit 491403b9b76cf66abd81301c5901aa4a4549f1e8 upstream.
    
    adm1266_probe() calls adm1266_config_gpio() -- which goes on to
    devm_gpiochip_add_data() and exposes the gpio_chip callbacks to
    gpiolib -- before pmbus_do_probe() has initialised the per-client
    PMBus state (notably the pmbus_lock mutex the core hands out via
    pmbus_get_data()).
    
    That ordering is already a latent hazard: any GPIO access that lands
    between adm1266_config_gpio() and the end of pmbus_do_probe() (for
    example a sysfs read from a user space agent that opens the gpiochip
    the instant gpiolib advertises it) races pmbus_do_probe()'s own
    device accesses with no serialisation.
    
    Move adm1266_config_gpio() down past pmbus_do_probe() so the chip
    isn't reachable from userspace until the PMBus state it depends on
    is fully initialised.
    
    Fixes: d98dfad35c38 ("hwmon: (pmbus/adm1266) Add support for GPIOs")
    Cc: [email protected]
    Signed-off-by: Abdurrahman Hussain <[email protected]>
    Reviewed-by: Bartosz Golaszewski <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: (pmbus/adm1266) register the nvmem device after pmbus_do_probe() [+ + +]
Author: Abdurrahman Hussain <[email protected]>
Date:   Mon May 18 17:52:29 2026 -0700

    hwmon: (pmbus/adm1266) register the nvmem device after pmbus_do_probe()
    
    commit 6af713af91d5c34ec049eb3cc2c5b3f5eba953b8 upstream.
    
    adm1266_probe() calls adm1266_config_nvmem() -- which goes on to
    devm_nvmem_register() and exposes adm1266_nvmem_read() to userspace --
    before pmbus_do_probe() has initialised the per-client PMBus state.
    
    Same latent hazard as the gpio_chip one fixed in the previous patch:
    once the nvmem device is registered, gpiolib's nvmem char-dev / sysfs
    interface is reachable, and any concurrent read triggers
    adm1266_nvmem_read() -> adm1266_nvmem_read_blackbox(), which issues
    PMBus traffic that races pmbus_do_probe()'s own device accesses with
    no serialisation.
    
    Move adm1266_config_nvmem() down past pmbus_do_probe() so the nvmem
    device isn't reachable from userspace until the PMBus state the
    nvmem accessors depend on is fully initialised.
    
    Fixes: 15609d189302 ("hwmon: (pmbus/adm1266) read blackbox")
    Cc: [email protected]
    Signed-off-by: Abdurrahman Hussain <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: (pmbus/adm1266) reject implausible blackbox record_count [+ + +]
Author: Abdurrahman Hussain <[email protected]>
Date:   Fri May 15 15:11:49 2026 -0700

    hwmon: (pmbus/adm1266) reject implausible blackbox record_count
    
    commit 4afca954622d672ea65ed961bed01cf91caa034e upstream.
    
    adm1266_nvmem_read_blackbox() loops over a record_count that comes
    straight from byte 3 of the BLACKBOX_INFO response.  The destination
    buffer is data->dev_mem, sized for the nvmem cell's declared 2048
    bytes (ADM1266_BLACKBOX_MAX_RECORDS * ADM1266_BLACKBOX_SIZE = 32 * 64).
    A device that reports a record_count greater than 32 -- whether due
    to firmware bugs, bus corruption, or a non-responsive slave returning
    0xff -- would walk read_buff past the end of the dev_mem allocation
    on the trailing iterations.
    
    Cap record_count at ADM1266_BLACKBOX_MAX_RECORDS (introduced here)
    before entering the loop and return -EIO on any larger value, so a
    malformed BLACKBOX_INFO response cannot drive the loop out of bounds.
    
    Fixes: 15609d189302 ("hwmon: (pmbus/adm1266) read blackbox")
    Cc: [email protected]
    Signed-off-by: Abdurrahman Hussain <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: (pmbus/adm1266) reject short block-read responses in the GPIO accessors [+ + +]
Author: Abdurrahman Hussain <[email protected]>
Date:   Mon May 18 17:52:27 2026 -0700

    hwmon: (pmbus/adm1266) reject short block-read responses in the GPIO accessors
    
    commit a7232f68c43ca62f545049b7f5fbfc75137b843b upstream.
    
    adm1266_gpio_get() and adm1266_gpio_get_multiple() both compose the
    pin-status word as
    
            pins_status = read_buf[0] + (read_buf[1] << 8);
    
    right after i2c_smbus_read_block_data(), guarding only against an
    error return.  A well-behaved device returns 2 bytes for
    GPIO_STATUS/PDIO_STATUS, but the helper happily reports a 0- or
    1-byte response too.  If the device returns 0 bytes, both read_buf
    slots are uninitialized stack memory; if it returns 1 byte, read_buf[1]
    is.
    
    The composed value then flows through set_bit() into the caller's
    *bits in adm1266_gpio_get_multiple(), or into the return value of
    adm1266_gpio_get(), and ends up in userspace via gpiolib (sysfs and
    the char-dev ioctls).  That leaks a few bits of kernel stack per
    request on any device whose firmware glitch, bus error, or hostile
    slave produces a short block-read response.
    
    Add the missing length check to both call sites and surface a short
    response as -EIO.
    
    Fixes: d98dfad35c38 ("hwmon: (pmbus/adm1266) Add support for GPIOs")
    Cc: [email protected]
    Signed-off-by: Abdurrahman Hussain <[email protected]>
    Reviewed-by: Bartosz Golaszewski <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: (pmbus/adm1266) seed timestamp from the real-time clock [+ + +]
Author: Abdurrahman Hussain <[email protected]>
Date:   Fri May 15 15:11:47 2026 -0700

    hwmon: (pmbus/adm1266) seed timestamp from the real-time clock
    
    commit b86095e3d7dcf2bf80c747349a35912a87a85098 upstream.
    
    adm1266_set_rtc() seeds the chip's SET_RTC register from
    ktime_get_seconds(), which returns CLOCK_MONOTONIC -- i.e. seconds
    since the host last booted, not seconds since the Unix epoch.
    
    The chip stamps that value into every blackbox record it captures.
    Userspace reading those timestamps back expects wall-clock seconds:
    that's what the SET_RTC frame layout documents (datasheet Rev. D,
    Table 84) and what every other consumer of "seconds since epoch"
    assumes.  Seeding from CLOCK_MONOTONIC gives blackbox records a
    timestamp that is only meaningful within a single boot of the host
    and silently resets to small values on every reboot.
    
    Switch to ktime_get_real_seconds() so the seed matches what the
    register is documented to hold.
    
    Fixes: 15609d189302 ("hwmon: (pmbus/adm1266) read blackbox")
    Cc: [email protected]
    Signed-off-by: Abdurrahman Hussain <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: (pmbus/adm1266) widen blackbox-info buffer to I2C_SMBUS_BLOCK_MAX [+ + +]
Author: Abdurrahman Hussain <[email protected]>
Date:   Fri May 15 15:11:48 2026 -0700

    hwmon: (pmbus/adm1266) widen blackbox-info buffer to I2C_SMBUS_BLOCK_MAX
    
    commit eee213daa1e1b402eb631bcd1b8c5aa340a6b081 upstream.
    
    adm1266_nvmem_read_blackbox() declares a 5-byte stack buffer and
    passes it to i2c_smbus_read_block_data() to retrieve the 4-byte
    BLACKBOX_INFO response.  i2c_smbus_read_block_data() does not honour
    caller buffer sizes -- it memcpy()s data.block[0] bytes from the
    SMBus transaction (where data.block[0] is the length byte returned by
    the slave device, up to I2C_SMBUS_BLOCK_MAX = 32):
    
            memcpy(values, &data.block[1], data.block[0]);
    
    If the device returns any block length above 5, the call overflows
    the caller's 5-byte stack buffer before the post-call
    
            if (ret != 4)
                    return -EIO;
    
    check has a chance to reject the response.
    
    Widen the local buffer to I2C_SMBUS_BLOCK_MAX so the helper has room
    for any well-formed SMBus block response, matching the convention used
    by the other i2c_smbus_read_block_data() callers in this driver.
    
    Fixes: 15609d189302 ("hwmon: (pmbus/adm1266) read blackbox")
    Cc: [email protected]
    Signed-off-by: Abdurrahman Hussain <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

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

 
i3c: fix uninitialized variable use in i2c setup [+ + +]
Author: Jamie Iles <[email protected]>
Date:   Tue Mar 8 13:42:26 2022 +0000

    i3c: fix uninitialized variable use in i2c setup
    
    commit 6cbf8b38dfe3aabe330f2c356949bc4d6a1f034f upstream.
    
    Commit 31b9887c7258 ("i3c: remove i2c board info from i2c_dev_desc")
    removed the boardinfo from i2c_dev_desc to decouple device enumeration from
    setup but did not correctly lookup the i2c_dev_desc to store the new
    device, instead dereferencing an uninitialized variable.
    
    Lookup the device that has already been registered by address to store
    the i2c client device.
    
    Fixes: 31b9887c7258 ("i3c: remove i2c board info from i2c_dev_desc")
    Reported-by: kernel test robot <[email protected]>
    Cc: Alexandre Belloni <[email protected]>
    Signed-off-by: Jamie Iles <[email protected]>
    Signed-off-by: Alexandre Belloni <[email protected]>
    Link: https://lore.kernel.org/r/[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]>

 
IB/core: Fix zero dmac race in neighbor resolution [+ + +]
Author: Chen Zhao <[email protected]>
Date:   Sun Apr 5 18:44:55 2026 +0300

    IB/core: Fix zero dmac race in neighbor resolution
    
    commit 5e6de34d82b49cab9d8a42063e9cd0f22a4f31e5 upstream.
    
    dst_fetch_ha() checks nud_state without holding the neighbor lock, then
    copies ha under the seqlock. A race in __neigh_update() where nud_state
    is set to NUD_REACHABLE before ha is written allows dst_fetch_ha() to
    read a zero MAC address while the seqlock reports no concurrent writer.
    
    netevent_callback amplifies this by waking ALL pending addr_req workers
    when ANY neighbor becomes NUD_VALID. At scale (N peers resolving ARP
    concurrently), the hit probability scales as N^2, making it near-certain
    for large RDMA workloads.
    
    N(A): neigh_update(A)                   W(A): addr_resolve(A)
     |                                       [sleep]
     | write_lock_bh(&A->lock)               |
     | A->nud_state = NUD_REACHABLE          |
     | // A->ha is still 0                   |
     |                                       [woken by netevent_cb() of
     |                                         another neighbour]
     |                                       | dst_fetch_ha(A)
     |                                       |   A->nud_state & NUD_VALID
     |                                       |   read_seqbegin(&A->ha_lock)
     |                                       |   snapshot = A->ha  /* 0 */
     |                                       |   read_seqretry(&A->ha_lock)
     |                                       |   return snapshot
     | seqlock(&A->ha_lock)
     | A->ha = mac_A     /* too late */
     | sequnlock(&A->ha_lock)
     | write_unlock_bh(&A->lock)
    
    The incorrect/zero mac is read and programmed in the device QP while it
    was not yet updated. This causes silent packet loss and eventual
    RETRY_EXC_ERR.
    
    Fix by holding the neighbor read lock across the nud_state check and
    ha copy in dst_fetch_ha(), ensuring it synchronizes with
    __neigh_update() which is updating while holding the write lock.
    
    Cc: [email protected]
    Fixes: 92ebb6a0a13a ("IB/cm: Remove now useless rcu_lock in dst_fetch_ha")
    Link: https://patch.msgid.link/r/[email protected]
    Signed-off-by: Chen Zhao <[email protected]>
    Reviewed-by: Parav Pandit <[email protected]>
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
IB/mad: Don't call to function that might sleep while in atomic context [+ + +]
Author: Leonid Ravich <[email protected]>
Date:   Tue Apr 21 16:28:08 2026 +0300

    IB/mad: Don't call to function that might sleep while in atomic context
    
    commit 5c20311d76cbaeb7ed2ecf9c8b8322f8fc4a7ae3 upstream.
    
    Tracepoints are not allowed to sleep, as such the following splat is
    generated due to call to ib_query_pkey() in atomic context.
    
    WARNING: CPU: 0 PID: 1888000 at kernel/trace/ring_buffer.c:2492 rb_commit+0xc1/0x220
    CPU: 0 PID: 1888000 Comm: kworker/u9:0 Kdump: loaded Tainted: G           OE    --------- -  - 4.18.0-305.3.1.el8.x86_64 #1
     Hardware name: Red Hat KVM, BIOS 1.13.0-2.module_el8.3.0+555+a55c8938 04/01/2014
     Workqueue: ib-comp-unb-wq ib_cq_poll_work [ib_core]
     RIP: 0010:rb_commit+0xc1/0x220
     RSP: 0000:ffffa8ac80f9bca0 EFLAGS: 00010202
     RAX: ffff8951c7c01300 RBX: ffff8951c7c14a00 RCX: 0000000000000246
     RDX: ffff8951c707c000 RSI: ffff8951c707c57c RDI: ffff8951c7c14a00
     RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
     R10: ffff8951c7c01300 R11: 0000000000000001 R12: 0000000000000246
     R13: 0000000000000000 R14: ffffffff964c70c0 R15: 0000000000000000
     FS:  0000000000000000(0000) GS:ffff8951fbc00000(0000) knlGS:0000000000000000
     CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: 00007f20e8f39010 CR3: 000000002ca10005 CR4: 0000000000170ef0
     Call Trace:
      ring_buffer_unlock_commit+0x1d/0xa0
      trace_buffer_unlock_commit_regs+0x3b/0x1b0
      trace_event_buffer_commit+0x67/0x1d0
      trace_event_raw_event_ib_mad_recv_done_handler+0x11c/0x160 [ib_core]
      ib_mad_recv_done+0x48b/0xc10 [ib_core]
      ? trace_event_raw_event_cq_poll+0x6f/0xb0 [ib_core]
      __ib_process_cq+0x91/0x1c0 [ib_core]
      ib_cq_poll_work+0x26/0x80 [ib_core]
      process_one_work+0x1a7/0x360
      ? create_worker+0x1a0/0x1a0
      worker_thread+0x30/0x390
      ? create_worker+0x1a0/0x1a0
      kthread+0x116/0x130
      ? kthread_flush_work_fn+0x10/0x10
      ret_from_fork+0x35/0x40
     ---[ end trace 78ba8509d3830a16 ]---
    
    Fixes: 821bf1de45a1 ("IB/MAD: Add recv path trace point")
    Signed-off-by: Leonid Ravich <[email protected]>
    Link: https://lore.kernel.org/r/Y2t5feomyznrVj7V@leonid-Inspiron-3421
    Signed-off-by: Leon Romanovsky <[email protected]>
    [ kovalev: bp to fix CVE-2022-50472 ]
    Signed-off-by: Vasiliy Kovalev <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ibmasm: fix heap over-read in ibmasm_send_i2o_message() [+ + +]
Author: Tyllis Xu <[email protected]>
Date:   Sat Mar 14 11:58:05 2026 -0500

    ibmasm: fix heap over-read in ibmasm_send_i2o_message()
    
    commit 9aad71144fa3682cca3837a06c8623016790e7ec upstream.
    
    The ibmasm_send_i2o_message() function uses get_dot_command_size() to
    compute the byte count for memcpy_toio(), but this value is derived from
    user-controlled fields in the dot_command_header (command_size: u8,
    data_size: u16) and is never validated against the actual allocation size.
    A root user can write a small buffer with inflated header fields, causing
    memcpy_toio() to read up to ~65 KB past the end of the allocation into
    adjacent kernel heap, which is then forwarded to the service processor
    over MMIO.
    
    Silently clamping the copy size is not sufficient: if the header fields
    claim a larger size than the buffer, the SP receives a dot command whose
    own header is inconsistent with the I2O message length, which can cause
    the SP to desynchronize. Reject such commands outright by returning
    failure.
    
    Validate command_size before calling get_mfa_inbound() to avoid leaking
    an I2O message frame: reading INBOUND_QUEUE_PORT dequeues a hardware
    frame from the controller's free pool, and returning without a
    corresponding set_mfa_inbound() call would permanently exhaust it.
    
    Additionally, clamp command_size to I2O_COMMAND_SIZE before the
    memcpy_toio() so the MMIO write stays within the I2O message frame,
    consistent with the clamping already performed by outgoing_message_size()
    for the header field.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: Yuhao Jiang <[email protected]>
    Cc: [email protected]
    Signed-off-by: Tyllis Xu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ibmasm: fix OOB reads in command_file_write due to missing size checks [+ + +]
Author: Tyllis Xu <[email protected]>
Date:   Sat Mar 14 11:53:54 2026 -0500

    ibmasm: fix OOB reads in command_file_write due to missing size checks
    
    commit 0eb09f737428e482a32a2e31e5e223f2b35a71d3 upstream.
    
    The command_file_write() handler allocates a kernel buffer of exactly
    count bytes and copies user data into it, but does not validate the
    buffer against the dot command protocol before passing it to
    get_dot_command_size() and get_dot_command_timeout().
    
    Since both the allocation size (count) and the header fields (command_size,
    data_size) are independently user-controlled, an attacker can cause
    get_dot_command_size() to return a value exceeding the allocation,
    triggering OOB reads in get_dot_command_timeout() and an out-of-bounds
    memcpy_toio() that leaks kernel heap memory to the service processor.
    
    Fix with two guards: reject writes smaller than sizeof(struct
    dot_command_header) before allocation, then after copying user data
    reject commands where the buffer is smaller than the total size declared
    by the header (sizeof(header) + command_size + data_size). This ensures
    all subsequent header and payload field accesses stay within the buffer.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: Yuhao Jiang <[email protected]>
    Cc: [email protected]
    Signed-off-by: Tyllis Xu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ibmveth: Disable GSO for packets with small MSS [+ + +]
Author: Mingming Cao <[email protected]>
Date:   Fri Apr 24 09:29:17 2026 -0700

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

 
ice: fix locking in ice_dcb_rebuild() [+ + +]
Author: Bart Van Assche <[email protected]>
Date:   Wed May 6 14:48:15 2026 -0700

    ice: fix locking in ice_dcb_rebuild()
    
    [ Upstream commit 0ded1f36ba4021cba50513e80be6b6e173710168 ]
    
    Move the mutex_lock() call up to prevent that DCB settings change after
    the first ice_query_port_ets() call. The second ice_query_port_ets()
    call in ice_dcb_rebuild() is already protected by pf->tc_mutex.
    
    This also fixes a bug in an error path, as before taking the first
    "goto dcb_error" in the function jumped over mutex_lock() to
    mutex_unlock().
    
    This bug has been detected by the clang thread-safety analyzer.
    
    Cc: [email protected]
    Fixes: 242b5e068b25 ("ice: Fix DCB rebuild after reset")
    Signed-off-by: Bart Van Assche <[email protected]>
    Reviewed-by: Aleksandr Loktionov <[email protected]>
    Reviewed-by: Przemek Kitszel <[email protected]>
    Tested-by: Arpana Arland <[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: Sasha Levin <[email protected]>

 
iio: adc: ad7768-1: fix one-shot mode data acquisition [+ + +]
Author: Jonathan Santos <[email protected]>
Date:   Mon Feb 23 08:59:26 2026 -0300

    iio: adc: ad7768-1: fix one-shot mode data acquisition
    
    commit 8be19e233744961db6069da9c9ab63eb085a0447 upstream.
    
    According to the datasheet, one-shot mode requires a SYNC_IN pulse to
    trigger a new sample conversion. In the current implementation, No sync
    pulse was sent after switching to one-shot mode and reinit_completion()
    was called before mode switching, creating a race condition where spurious
    interrupts during mode change could trigger completion prematurely.
    
    Fix by sending a sync pulse after configuring one-shot mode and
    reinit_completion() to ensure it only waits for the actual conversion
    completion.
    
    Fixes: a5f8c7da3dbe ("iio: adc: Add AD7768-1 ADC basic support")
    Signed-off-by: Jonathan Santos <[email protected]>
    Reviewed-by: David Lechner <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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]>

 
inotify: fix watch count leak when fsnotify_add_inode_mark_locked() fails [+ + +]
Author: Chia-Ming Chang <[email protected]>
Date:   Tue Feb 24 17:34:42 2026 +0800

    inotify: fix watch count leak when fsnotify_add_inode_mark_locked() fails
    
    commit 6a320935fa4293e9e599ec9f85dc9eb3be7029f8 upstream.
    
    When fsnotify_add_inode_mark_locked() fails in inotify_new_watch(),
    the error path calls inotify_remove_from_idr() but does not call
    dec_inotify_watches() to undo the preceding inc_inotify_watches().
    This leaks a watch count, and repeated failures can exhaust the
    max_user_watches limit with -ENOSPC even when no watches are active.
    
    Prior to commit 1cce1eea0aff ("inotify: Convert to using per-namespace
    limits"), the watch count was incremented after fsnotify_add_mark_locked()
    succeeded, so this path was not affected. The conversion moved
    inc_inotify_watches() before the mark insertion without adding the
    corresponding rollback.
    
    Add the missing dec_inotify_watches() call in the error path.
    
    Fixes: 1cce1eea0aff ("inotify: Convert to using per-namespace limits")
    Cc: [email protected]
    Signed-off-by: Chia-Ming Chang <[email protected]>
    Signed-off-by: robbieko <[email protected]>
    Reviewed-by: Nikolay Borisov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jan Kara <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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()
    
    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] # 5.7+
    Fixes: 204361a77f40 ("io-wq: fix hang after cancelling pending hashed work")
    Signed-off-by: Nicholas Carlini <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
io_uring/poll: fix backport of io_poll_add() changes [+ + +]
Author: Jens Axboe <[email protected]>
Date:   Tue Apr 21 16:44:06 2026 -0600

    io_uring/poll: fix backport of io_poll_add() changes
    
    The 5.15/5.10 backport of 84230ad2d2af had a few issues, due to the
    older poll base. Notably return value handling __io_arm_poll_handler()
    and in return __io_poll_add() as well. Fix them up.
    
    Reported-by: Ben Hutchings <[email protected]>
    Fixes: 349ef5d2e7bf ("io_uring/poll: correctly handle io_poll_add() return value on update")
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

io_uring/poll: fix EPOLL_URING_WAKE sometimes not being honored [+ + +]
Author: Jens Axboe <[email protected]>
Date:   Tue Apr 21 16:41:32 2026 -0600

    io_uring/poll: fix EPOLL_URING_WAKE sometimes not being honored
    
    Rather than do the masking  only when we jump straight to execution,
    mark it as EPOLLONESHOT regardless. This ensures it doesn't get lost.
    And just kill the poll entry upfront, if marked. This is an optimization
    in later kernels, but it's actually required on the older kernels to
    note the EPOLL_URING_WAKE mask correctly.
    
    Fixes: ccf06b5a981c ("io_uring: pass in EPOLL_URING_WAKE for eventfd signaling and wakeups")
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[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]>

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

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

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

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

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

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

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

    ipmi:si: Return state to normal if message allocation fails
    
    commit 09dd798270ff582d7309f285d4aaf5dbebae01cb upstream.
    
    There were places where nothing would get started if a message
    allocation failed, so the driver needs to return to normal state.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: <[email protected]>
    Signed-off-by: Corey Minyard <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Linux: ipmi:ssif: Clean up kthread on errors [+ + +]
Author: Corey Minyard <[email protected]>
Date:   Mon May 11 08:19:40 2026 -0500

    ipmi:ssif: Clean up kthread on errors
    
    commit 75c486cb1bcaa1a3ec3a6438498176a3a4998ae4 upstream.
    
    If an error occurs after the ssif kthread is created, but before the
    main IPMI code starts the ssif interface, the ssif kthread will not
    be stopped.
    
    So make sure the kthread is stopped on an error condition if it is
    running.
    
    Fixes: 259307074bfc ("ipmi: Add SMBus interface driver (SSIF)")
    Reported-by: Li Xiao <<[email protected]>
    Cc: [email protected]
    Reviewed-by: Li Xiao <[email protected]>
    [Adjusted for stopping flag and complete operation still being present.]
    Signed-off-by: Corey Minyard <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Linux: ipmi:ssif: Fix a shutdown race [+ + +]
Author: Corey Minyard <[email protected]>
Date:   Mon May 11 08:19:39 2026 -0500

    ipmi:ssif: Fix a shutdown race
    
    It was possible for the SSIF thread to stop and quit before the
    kthread_stop() call because ssif->stopping was set before the
    stop.  So only exit the SSIF thread is kthread_should_stop()
    returns true.
    
    In the mainstream kernel this was fixed in 6bd0eb6d759b ("ipmi:ssif:
    Fix a shutdown race").  However, that requires a fix in kernel
    version 6.1 has a fix to kthread stop to cause interruptible waits
    to return -ERESTARTSYS on a stop.  This has not been backported to
    older kernels, and that would probably be a bad idea.  But it means
    that the mainstrem kernel fix for this will not work.
    
    Instead, wait for kthread_should_stop() to return true before exiting
    the thread.
    
    Signed-off-by: Corey Minyard <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Linux: ipmi:ssif: NULL thread on error [+ + +]
Author: Corey Minyard <[email protected]>
Date:   Mon May 11 08:19:42 2026 -0500

    ipmi:ssif: NULL thread on error
    
    commit a8aebe93a4938c0ca1941eeaae821738f869be3d upstream.
    
    Cleanup code was checking the thread for NULL, but it was possibly
    a PTR_ERR() in one spot.
    
    Spotted with static analysis.
    
    Link: https://sourceforge.net/p/openipmi/mailman/message/59324676/
    Fixes: 75c486cb1bca ("ipmi:ssif: Clean up kthread on errors")
    Cc: <[email protected]> # 91eb7ec72612: ipmi:ssif: Remove unnecessary indention
    Cc: [email protected]
    Signed-off-by: Corey Minyard <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Linux: ipmi:ssif: Remove unnecessary indention [+ + +]
Author: Corey Minyard <[email protected]>
Date:   Mon May 11 08:19:41 2026 -0500

    ipmi:ssif: Remove unnecessary indention
    
    commit 91eb7ec7261254b6875909df767185838598e21e upstream.
    
    A section was in {} that didn't need to be, move the variable
    definition to the top and set th eindentino properly.
    
    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: raw: reject IP_HDRINCL packets with ihl < 5 [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Tue May 12 16:51:14 2026 -0400

    ipv4: raw: reject IP_HDRINCL packets with ihl < 5
    
    commit 915fab69823a14c170dbaa3b41978768e0fe62fc upstream.
    
    raw_send_hdrinc() validates that the caller-supplied IPv4 header
    fits within the message length:
    
        iphlen = iph->ihl * 4;
        err = -EINVAL;
        if (iphlen > length)
            goto error_free;
    
        if (iphlen >= sizeof(*iph)) {
            /* fix up saddr, tot_len, id, csum, transport_header */
        }
    
    It does not, however, reject ihl < 5.  For such a packet the
    "if (iphlen >= sizeof(*iph))" branch is skipped, leaving the
    crafted iphdr untouched, but the packet is still handed to
    __ip_local_out() and onward.  Downstream consumers that read
    iph->ihl assume a sane value: net/ipv4/ah4.c:ah_output() in
    particular subtracts sizeof(struct iphdr) from top_iph->ihl * 4
    and passes the (signed-int-negative, then cast to size_t)
    result to memcpy(), producing an OOB access of length close to
    SIZE_MAX and a host kernel panic.
    
    An IPv4 header with ihl < 5 is malformed by definition (RFC 791:
    "Internet Header Length is the length of the internet header in
    32 bit words ... Note that the minimum value for a correct header
    is 5.").  The kernel should not be willing to inject such a
    packet into its own output path.
    
    Reject "iphlen < sizeof(*iph)" alongside the existing
    "iphlen > length" check.  This matches the principle that locally
    constructed packets that re-enter the IP stack must pass the same
    basic sanity tests that a foreign packet would be subjected to.
    
    Once this lands, the "if (iphlen >= sizeof(*iph))" wrapper around
    the fixup branch becomes redundant; left in place to keep the
    patch minimal and backport-friendly.  A follow-up can unwrap it.
    
    Note that commit 86f4c90a1c5c ("ipv4, ipv6: ensure raw socket
    message is big enough to hold an IP header") ensures the message
    buffer is large enough to hold an iphdr, but does not constrain
    the self-reported iph->ihl.
    
    Reachability: the malformed packet source is any caller with
    CAP_NET_RAW, including an unprivileged process in a user+net
    namespace on a kernel with CONFIG_USER_NS=y.  The reproduced AH
    crash also requires a matching xfrm AH policy on the outgoing
    route; a container granted CAP_NET_ADMIN can install that state
    and policy in its netns.  Loopback bypasses xfrm_output, so the
    trigger uses a real netdev.
    
    Reproduced on UML + KASAN: kernel-mode fault at addr 0x0 with
    memcpy_orig at the crash site.  Same shape reproduces inside a
    rootless Docker container with --cap-add NET_ADMIN on a stock
    distro kernel.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Suggested-by: Herbert Xu <[email protected]>
    Signed-off-by: Michael Bommarito <[email protected]>
    Link: https://patch.msgid.link/77ec2b5e8111961c2c39883c92e8aa2709039c17.1778614451.git.michael.bommarito@gmail.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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: add NULL checks for idev in SRv6 paths [+ + +]
Author: Minhong He <[email protected]>
Date:   Mon Apr 20 13:43:34 2026 +0800

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

ipv6: rpl: reserve mac_len headroom when recompressed SRH grows [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Tue Apr 21 15:16:33 2026 +0200

    ipv6: rpl: reserve mac_len headroom when recompressed SRH grows
    
    commit 9e6bf146b55999a095bb14f73a843942456d1adc upstream.
    
    ipv6_rpl_srh_rcv() decompresses an RFC 6554 Source Routing Header, swaps
    the next segment into ipv6_hdr->daddr, recompresses, then pulls the old
    header and pushes the new one plus the IPv6 header back.  The
    recompressed header can be larger than the received one when the swap
    reduces the common-prefix length the segments share with daddr (CmprI=0,
    CmprE>0, seg[0][0] != daddr[0] gives the maximum +8 bytes).
    
    pskb_expand_head() was gated on segments_left == 0, so on earlier
    segments the push consumed unchecked headroom.  Once skb_push() leaves
    fewer than skb->mac_len bytes in front of data,
    skb_mac_header_rebuild()'s call to:
    
            skb_set_mac_header(skb, -skb->mac_len);
    
    will store (data - head) - mac_len into the u16 mac_header field, which
    wraps to ~65530, and the following memmove() writes mac_len bytes ~64KiB
    past skb->head.
    
    A single AF_INET6/SOCK_RAW/IPV6_HDRINCL packet over lo with a two
    segment type-3 SRH (CmprI=0, CmprE=15) reaches headroom 8 after one
    pass; KASAN reports a 14-byte OOB write in ipv6_rthdr_rcv.
    
    Fix this by expanding the head whenever the remaining room is less than
    the push size plus mac_len, and request that much extra so the rebuilt
    MAC header fits afterwards.
    
    Fixes: 8610c7c6e3bd ("net: ipv6: add support for rpl sr exthdr")
    Cc: stable <[email protected]>
    Reported-by: Anthropic
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Link: https://patch.msgid.link/2026042133-gout-unvented-1bd9@gregkh
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

    ipv6: xfrm6: release dst on error in xfrm6_rcv_encap()
    
    commit bc0fcb9823cd0894934cf968b525c575833d7078 upstream.
    
    xfrm6_rcv_encap() performs an IPv6 route lookup when the skb does not
    already have a dst attached. ip6_route_input_lookup() returns a
    referenced dst entry even when the lookup resolves to an error route.
    
    If dst->error is set, xfrm6_rcv_encap() drops the skb without attaching
    the dst to the skb and without releasing the reference returned by the
    lookup. Repeated packets hitting this path therefore leak dst entries.
    
    Release the dst before jumping to the drop path.
    
    Fixes: 0146dca70b87 ("xfrm: add support for UDPv6 encapsulation of ESP")
    Cc: [email protected]
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Co-developed-by: Yuan Tan <[email protected]>
    Signed-off-by: Yuan Tan <[email protected]>
    Suggested-by: Xin Liu <[email protected]>
    Tested-by: Ruide Cao <[email protected]>
    Signed-off-by: Yilin Zhu <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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/ath79-cpu: Remove unused function [+ + +]
Author: Rosen Penev <[email protected]>
Date:   Wed May 6 01:55:22 2026 -0700

    irqchip/ath79-cpu: Remove unused function
    
    [ Upstream commit 0fa10fb77069fb67aa51384868ef3702b7791465 ]
    
    ath79_cpu_irq_init() was part of the legacy pre-OF code that got removed a
    while back.
    
    Remove it to get rid of a missing prototype warning, reported by the kernel test
    robot.
    
    [ tglx: Fix the subject prefix. Sigh ... ]
    
    Fixes: 51fa4f8912c0 ("MIPS: ath79: drop legacy IRQ code")
    Reported-by: kernel test robot <[email protected]>
    Signed-off-by: Rosen Penev <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Closes: https://lore.kernel.org/oe-kbuild-all/[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]>

 
isofs: validate block number from NFS file handle in isofs_export_iget [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Sun Apr 19 17:21:55 2026 -0400

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

isofs: validate Rock Ridge CE continuation extent against volume size [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Sun Apr 19 17:21:54 2026 -0400

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

 
ixgbevf: fix use-after-free in VEPA multicast source pruning [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Fri May 15 11:24:14 2026 -0700

    ixgbevf: fix use-after-free in VEPA multicast source pruning
    
    commit 5d49b568c188dc77199d8d2b959c91da8cc27cf1 upstream.
    
    ixgbevf_clean_rx_irq() prunes frames whose source MAC matches the VF's
    own address (VEPA multicast workaround) by freeing the skb and
    continuing to the next descriptor:
    
        dev_kfree_skb_irq(skb);
        continue;
    
    The skb pointer is declared outside the while loop and persists across
    iterations.  Because the continue skips the "skb = NULL" reset at the
    bottom of the loop, the next iteration enters the "else if (skb)" path
    and calls ixgbevf_add_rx_frag() on the freed skb, dereferencing
    skb_shinfo(skb)->nr_frags - a use-after-free in NAPI softirq context.
    
    The sibling driver iavf already handles this correctly by nulling the
    pointer before continuing.  Apply the same pattern here.
    
    I do not have ixgbevf hardware; the bug was found by static analysis
    (scan_drop_continue_loops.py + semgrep drop_continue_in_loop, multi-tool
    corroboration with the highest score in the scan).  The UAF was confirmed
    under KASAN by loading a test module that reproduces the exact code
    pattern (alloc skb, kfree_skb, then read skb_shinfo(skb)->nr_frags):
    
      BUG: KASAN: slab-use-after-free in ixgbevf_uaf_test_init+0x100/0x1000
      Read of size 8 at addr 000000006163ae78 by task insmod/30
      freed 208-byte region [000000006163adc0, 000000006163ae90)
    
    QEMU emulates igb (82576) but not ixgbe (82599), and the igbvf VF
    driver does not include the VEPA source pruning path, so a full
    end-to-end reproduction with emulated hardware was not possible.
    
    Fixes: bad17234ba70 ("ixgbevf: Change receive model to use double buffered page based receives")
    Cc: [email protected]
    Signed-off-by: Michael Bommarito <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Tested-by: Rafal Romanowski <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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]>

 
kunit: config: Enable KUNIT_DEBUGFS by default [+ + +]
Author: David Gow <[email protected]>
Date:   Sat Apr 25 11:41:53 2026 +0800

    kunit: config: Enable KUNIT_DEBUGFS by default
    
    [ Upstream commit 17e4c68ff35090d8cb743e3c82c09f92fda1ebda ]
    
    The KUNIT_DEBUGFS option is currently enabled based on the value of
    KUNIT_ALL_TESTS, but it really doesn't have anything to do with the set of
    enabled tests, so just enable it by default anyway. In particular, this
    shouldn't be only visible if KUNIT_ALL_TESTS is set, which is quite
    confusing.
    
    Link: https://lore.kernel.org/r/[email protected]
    Fixes: beaed42c427d ("kunit: default KUNIT_* fragments to KUNIT_ALL_TESTS")
    Signed-off-by: David Gow <[email protected]>
    Signed-off-by: Shuah Khan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

kunit: config: KUNIT_DEBUGFS should depend on DEBUG_FS [+ + +]
Author: David Gow <[email protected]>
Date:   Sat Apr 25 11:41:54 2026 +0800

    kunit: config: KUNIT_DEBUGFS should depend on DEBUG_FS
    
    [ Upstream commit 8f80b5b227ef9ea422080487715c841856339aed ]
    
    CONFIG_KUNIT_DEBUGFS is totally useless without debugfs, so it should
    depend on CONFIG_DEBUG_FS.
    
    Link: https://lore.kernel.org/r/[email protected]
    Fixes: e2219db280e3 ("kunit: add debugfs /sys/kernel/debug/kunit/<suite>/results display")
    Signed-off-by: David Gow <[email protected]>
    Signed-off-by: Shuah Khan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
KVM: nSVM: Clear GIF on nested #VMEXIT(INVALID) [+ + +]
Author: Yosry Ahmed <[email protected]>
Date:   Tue Mar 3 00:34:04 2026 +0000

    KVM: nSVM: Clear GIF on nested #VMEXIT(INVALID)
    
    commit f85a6ce06e4a0d49652f57967a649ab09e06287c upstream.
    
    According to the APM, GIF is set to 0 on any #VMEXIT, including
    an #VMEXIT(INVALID) due to failed consistency checks. Clear GIF on
    consistency check failures.
    
    Fixes: 3d6368ef580a ("KVM: SVM: Add VMRUN handler")
    Cc: [email protected]
    Signed-off-by: Yosry Ahmed <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: nSVM: Ensure AVIC is inhibited when restoring a vCPU to guest mode [+ + +]
Author: Yosry Ahmed <[email protected]>
Date:   Tue Feb 24 22:50:17 2026 +0000

    KVM: nSVM: Ensure AVIC is inhibited when restoring a vCPU to guest mode
    
    commit 24f7d36b824b65cf1a2db3db478059187b2a37b0 upstream.
    
    On nested VMRUN, KVM ensures AVIC is inhibited by requesting
    KVM_REQ_APICV_UPDATE, triggering a check of inhibit reasons, finding
    APICV_INHIBIT_REASON_NESTED, and disabling AVIC.
    
    However, when KVM_SET_NESTED_STATE is performed on a vCPU not in guest
    mode with AVIC enabled, KVM_REQ_APICV_UPDATE is not requested, and AVIC
    is not inhibited.
    
    Request KVM_REQ_APICV_UPDATE in the KVM_SET_NESTED_STATE path if AVIC is
    active, similar to the nested VMRUN path.
    
    Fixes: f44509f849fe ("KVM: x86: SVM: allow AVIC to co-exist with a nested guest running")
    Cc: [email protected]
    Signed-off-by: Yosry Ahmed <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: nSVM: Sync interrupt shadow to cached vmcb12 after VMRUN of L2 [+ + +]
Author: Yosry Ahmed <[email protected]>
Date:   Wed Feb 25 00:59:44 2026 +0000

    KVM: nSVM: Sync interrupt shadow to cached vmcb12 after VMRUN of L2
    
    commit 03bee264f8ebfd39e0254c98e112d033a7aa9055 upstream.
    
    After VMRUN in guest mode, nested_sync_control_from_vmcb02() syncs
    fields written by the CPU from vmcb02 to the cached vmcb12. This is
    because the cached vmcb12 is used as the authoritative copy of some of
    the controls, and is the payload when saving/restoring nested state.
    
    int_state is also written by the CPU, specifically bit 0 (i.e.
    SVM_INTERRUPT_SHADOW_MASK) for nested VMs, but it is not sync'd to
    cached vmcb12. This does not cause a problem if KVM_SET_NESTED_STATE
    preceeds KVM_SET_VCPU_EVENTS in the restore path, as an interrupt shadow
    would be correctly restored to vmcb02 (KVM_SET_VCPU_EVENTS overwrites
    what KVM_SET_NESTED_STATE restored in int_state).
    
    However, if KVM_SET_VCPU_EVENTS preceeds KVM_SET_NESTED_STATE, an
    interrupt shadow would be restored into vmcb01 instead of vmcb02. This
    would mostly be benign for L1 (delays an interrupt), but not for L2. For
    L2, the vCPU could hang (e.g. if a wakeup interrupt is delivered before
    a HLT that should have been in an interrupt shadow).
    
    Sync int_state to the cached vmcb12 in nested_sync_control_from_vmcb02()
    to avoid this problem. With that, KVM_SET_NESTED_STATE restores the
    correct interrupt shadow state, and if KVM_SET_VCPU_EVENTS follows it
    would overwrite it with the same value.
    
    Fixes: cc440cdad5b7 ("KVM: nSVM: implement KVM_GET_NESTED_STATE and KVM_SET_NESTED_STATE")
    CC: [email protected]
    Signed-off-by: Yosry Ahmed <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

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

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

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

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

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

 
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]>

 
lib/ts_kmp: fix integer overflow in pattern length calculation [+ + +]
Author: Josh Law <[email protected]>
Date:   Sun Mar 8 20:20:28 2026 +0000

    lib/ts_kmp: fix integer overflow in pattern length calculation
    
    commit 8cdf30813ea8ce881cecc08664144416dbdb3e16 upstream.
    
    The ts_kmp algorithm stores its prefix_tbl[] table and pattern in a single
    allocation sized from the pattern length.  If the prefix_tbl[] size
    calculation wraps, the resulting allocation can be too small and
    subsequent pattern copies can overflow it.
    
    Fix this by rejecting zero-length patterns and by using overflow helpers
    before calculating the combined allocation size.
    
    
    This fixes a potential heap overflow.  The pattern length calculation can
    wrap during a size_t addition, leading to an undersized allocation.
    Because the textsearch library is reachable from userspace via Netfilter's
    xt_string module, this is a security risk that should be backported to LTS
    kernels.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Josh Law <[email protected]>
    Reviewed-by: Andrew Morton <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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 5.10.258 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Mon Jun 1 17:29:58 2026 +0200

    Linux 5.10.258
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Brett A C Sheffield <[email protected]>
    Tested-by: Woody Suwalski <[email protected]>
    Tested-by: Dominique Martinet <[email protected]>
    Tested-by: Barry K. Nathan <[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]>

 
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]>

mailbox: Prevent out-of-bounds access in of_mbox_index_xlate() [+ + +]
Author: Joonwon Kang <[email protected]>
Date:   Wed Mar 4 07:36:09 2026 +0000

    mailbox: Prevent out-of-bounds access in of_mbox_index_xlate()
    
    [ Upstream commit fcd7f96c783626c07ee3ed75fa3739a8a2052310 ]
    
    Although it is guided that `#mbox-cells` must be at least 1, there are
    many instances of `#mbox-cells = <0>;` in the device tree. If that is
    the case and the corresponding mailbox controller does not provide
    `fw_xlate` and of_xlate` function pointers, `of_mbox_index_xlate()` will
    be used by default and out-of-bounds accesses could occur due to lack of
    bounds check in that function.
    
    Cc: [email protected]
    Signed-off-by: Joonwon Kang <[email protected]>
    Signed-off-by: Jassi Brar <[email protected]>
    [ changed sp->nargs to sp->args_count in the code and
    fw_mbox_index_xlate() to of_mbox_index_xlate() in the commit message. ]
    Signed-off-by: Joonwon Kang <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

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

 
md/raid5: fix soft lockup in retry_aligned_read() [+ + +]
Author: Chia-Ming Chang <[email protected]>
Date:   Thu Apr 2 14:14:06 2026 +0800

    md/raid5: fix soft lockup in retry_aligned_read()
    
    commit 7f9f7c697474268d9ef9479df3ddfe7cdcfbbffc upstream.
    
    When retry_aligned_read() encounters an overlapped stripe, it releases
    the stripe via raid5_release_stripe() which puts it on the lockless
    released_stripes llist. In the next raid5d loop iteration,
    release_stripe_list() drains the stripe onto handle_list (since
    STRIPE_HANDLE is set by the original IO), but retry_aligned_read()
    runs before handle_active_stripes() and removes the stripe from
    handle_list via find_get_stripe() -> list_del_init(). This prevents
    handle_stripe() from ever processing the stripe to resolve the
    overlap, causing an infinite loop and soft lockup.
    
    Fix this by using __release_stripe() with temp_inactive_list instead
    of raid5_release_stripe() in the failure path, so the stripe does not
    go through the released_stripes llist. This allows raid5d to break out
    of its loop, and the overlap will be resolved when the stripe is
    eventually processed by handle_stripe().
    
    Fixes: 773ca82fa1ee ("raid5: make release_stripe lockless")
    Cc: [email protected]
    Signed-off-by: FengWei Shih <[email protected]>
    Signed-off-by: Chia-Ming Chang <[email protected]>
    Link: https://lore.kernel.org/linux-raid/[email protected]/
    Signed-off-by: Yu Kuai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

md/raid5: validate payload size before accessing journal metadata [+ + +]
Author: Junrui Luo <[email protected]>
Date:   Sat Apr 4 15:44:35 2026 +0800

    md/raid5: validate payload size before accessing journal metadata
    
    commit b0cc3ae97e893bf54bbce447f4e9fd2e0b88bff9 upstream.
    
    r5c_recovery_analyze_meta_block() and
    r5l_recovery_verify_data_checksum_for_mb() iterate over payloads in a
    journal metadata block using on-disk payload size fields without
    validating them against the remaining space in the metadata block.
    
    A corrupted journal contains payload sizes extending beyond the PAGE_SIZE
    boundary can cause out-of-bounds reads when accessing payload fields or
    computing offsets.
    
    Add bounds validation for each payload type to ensure the full payload
    fits within meta_size before processing.
    
    Fixes: b4c625c67362 ("md/r5cache: r5cache recovery: part 1")
    Cc: [email protected]
    Signed-off-by: Junrui Luo <[email protected]>
    Link: https://lore.kernel.org/linux-raid/SYBPR01MB78815E78D829BB86CD7C8015AF5FA@SYBPR01MB7881.ausprd01.prod.outlook.com/
    Signed-off-by: Yu Kuai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

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

media: dib8000: avoid division by 0 in dib8000_set_dds() [+ + +]
Author: Sergey Shtylyov <[email protected]>
Date:   Fri Feb 6 17:22:26 2026 +0300

    media: dib8000: avoid division by 0 in dib8000_set_dds()
    
    commit dde3c37af95cd6fa301c4906f33d627bc9dd874c upstream.
    
    In dib8000_set_dds(), 1 << 26 (67108864) divided by e.g. 1 apparently can't
    fit into 16-bit variable unit_khz_dds_val, being truncated to 0; this will
    cause division by 0 while calling dprintk() with debugging enabled (via the
    module parameter).  Use s32 instead of s16 to declare the variable, getting
    rid of the cast to u16 in the *else* branch as well...
    
    Found by Linux Verification Center (linuxtesting.org) with the Svace static
    analysis tool.
    
    Fixes: 173a64cb3fcf ("[media] dib8000: enhancement")
    Cc: [email protected]
    Signed-off-by: Sergey Shtylyov <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

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

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

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

media: i2c: imx219: Check return value of devm_gpiod_get_optional() in imx219_probe() [+ + +]
Author: Chen Ni <[email protected]>
Date:   Wed Feb 4 10:48:59 2026 +0800

    media: i2c: imx219: Check return value of devm_gpiod_get_optional() in imx219_probe()
    
    commit 943b1f27a3eead21b22e2531a5432ea5910b60eb upstream.
    
    The devm_gpiod_get_optional() function may return an error pointer
    (ERR_PTR) in case of a genuine failure during GPIO acquisition,
    not just NULL which indicates the legitimate absence of an optional
    GPIO.
    
    Add an IS_ERR() check after the function call to catch such errors and
    propagate them to the probe function, ensuring the driver fails to load
    safely rather than proceeding with an invalid pointer.
    
    Fixes: 1283b3b8f82b ("media: i2c: Add driver for Sony IMX219 sensor")
    Cc: [email protected]
    Signed-off-by: Chen Ni <[email protected]>
    Reviewed-by: Dave Stevenson <[email protected]>
    Reviewed-by: Jai Luthra <[email protected]>
    Signed-off-by: Sakari Ailus <[email protected]>
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: rc: streamzap: Error handling in probe [+ + +]
Author: Oliver Neukum <[email protected]>
Date:   Wed Feb 11 19:06:21 2026 +0100

    media: rc: streamzap: Error handling in probe
    
    commit 42844992664f03ef9f930e64f7370fa481e9c267 upstream.
    
    If submitting the URB fails, the device will be unusable.
    Probe() must fail.
    
    Fixes: 7a569f524dd36 ("V4L/DVB: IR/streamzap: functional in-kernel decoding")
    Cc: [email protected]
    Signed-off-by: Oliver Neukum <[email protected]>
    Signed-off-by: Sean Young <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: rc: xbox_remote: heed DMA restrictions [+ + +]
Author: Oliver Neukum <[email protected]>
Date:   Wed Feb 11 19:09:44 2026 +0100

    media: rc: xbox_remote: heed DMA restrictions
    
    commit e280d1e5e3f2595bbb43fe6e1bce00c59a43c0ff upstream.
    
    The buffer for IO must not be part of the device structure
    because that violates the DMA coherency rules.
    
    Fixes: 02d32bdad3123 ("media: rc: add driver for Xbox DVD Movie Playback Kit")
    Cc: [email protected]
    Signed-off-by: Oliver Neukum <[email protected]>
    Signed-off-by: Sean Young <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: uvcvideo: Allow extra entities [+ + +]
Author: Ricardo Ribalda <[email protected]>
Date:   Tue Apr 14 11:01:11 2026 +0000

    media: uvcvideo: Allow extra entities
    
    [ Upstream commit cae79e50d1222010fde8c522410c315f74d35c40 ]
    
    Increase the size of the id, to avoid collisions with entities
    implemented by the driver that are not part of the UVC device.
    
    Entities exposed by the UVC device use IDs 0-255, extra entities
    implemented by the driver (such as the GPIO entity) use IDs 256 and
    up.
    
    Signed-off-by: Ricardo Ribalda <[email protected]>
    Signed-off-by: Laurent Pinchart <[email protected]>
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: uvcvideo: Enable VB2_DMABUF for metadata stream [+ + +]
Author: Ricardo Ribalda <[email protected]>
Date:   Mon Mar 9 15:01:54 2026 +0000

    media: uvcvideo: Enable VB2_DMABUF for metadata stream
    
    commit fbac03467e53d8d72e5099c03df26d9adae11416 upstream.
    
    The UVC driver has two video streams, one for the frames and another one
    for the metadata. Both streams share most of the codebase, but only the
    data stream declares support for DMABUF transfer mode.
    
    I have tried the DMABUF transfer mode with CONFIG_DMABUF_HEAPS_SYSTEM
    and the frames looked correct.
    
    This patch announces the support for DMABUF for the metadata stream.
    This is useful for apps/HALs that only want to support DMABUF.
    
    Cc: [email protected]
    Fixes: 088ead2552458 ("media: uvcvideo: Add a metadata device node")
    Signed-off-by: Ricardo Ribalda <[email protected]>
    Reviewed-by: Laurent Pinchart <[email protected]>
    Reviewed-by: Hans de Goede <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Laurent Pinchart <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

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

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

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

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

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

 
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]>

 
MIPS: Always record SEGBITS in cpu_data.vmbits [+ + +]
Author: Maciej W. Rozycki <[email protected]>
Date:   Mon Apr 13 18:21:21 2026 +0100

    MIPS: Always record SEGBITS in cpu_data.vmbits
    
    commit 8374c2cb83b95b3c92f129fd56527225c20a058c upstream.
    
    With a 32-bit kernel running on 64-bit MIPS hardware the hardcoded value
    of `cpu_vmbits' only records the size of compatibility useg and does not
    reflect the size of native xuseg or the complete range of values allowed
    in the VPN2 field of TLB entries.
    
    An upcoming change will need the actual VPN2 value range permitted even
    in 32-bit kernel configurations, so always include the `vmbits' member
    in `struct cpuinfo_mips' and probe for SEGBITS when running on 64-bit
    hardware and resorting to the currently hardcoded value of 31 on 32-bit
    processors.  No functional change for users of `cpu_vmbits'.
    
    Signed-off-by: Maciej W. Rozycki <[email protected]>
    Signed-off-by: Thomas Bogendoerfer <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mips: mm: Allocate tlb_vpn array atomically [+ + +]
Author: Stefan Wiehler <[email protected]>
Date:   Mon Apr 13 18:21:20 2026 +0100

    mips: mm: Allocate tlb_vpn array atomically
    
    commit 01cc50ea5167bb14117257ec084637abe9e5f691 upstream.
    
    Found by DEBUG_ATOMIC_SLEEP:
    
      BUG: sleeping function called from invalid context at /include/linux/sched/mm.h:306
      in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 0, name: swapper/1
      preempt_count: 1, expected: 0
      RCU nest depth: 0, expected: 0
      no locks held by swapper/1/0.
      irq event stamp: 0
      hardirqs last  enabled at (0): [<0000000000000000>] 0x0
      hardirqs last disabled at (0): [<ffffffff801477fc>] copy_process+0x75c/0x1b68
      softirqs last  enabled at (0): [<ffffffff801477fc>] copy_process+0x75c/0x1b68
      softirqs last disabled at (0): [<0000000000000000>] 0x0
      CPU: 1 PID: 0 Comm: swapper/1 Not tainted 6.6.119-d79e757675ec-fct #1
      Stack : 800000000290bad8 0000000000000000 0000000000000008 800000000290bae8
              800000000290bae8 800000000290bc78 0000000000000000 0000000000000000
              ffffffff80c80000 0000000000000001 ffffffff80d8dee8 ffffffff810d09c0
              784bb2a7ec10647d 0000000000000010 ffffffff80a6fd60 8000000001d8a9c0
              0000000000000000 0000000000000000 ffffffff80d90000 0000000000000000
              ffffffff80c9e0e8 0000000007ffffff 0000000000000cc0 0000000000000400
              ffffffffffffffff 0000000000000001 0000000000000002 ffffffffc0149ed8
              fffffffffffffffe 8000000002908000 800000000290bae0 ffffffff80a81b74
              ffffffff80129fb0 0000000000000000 0000000000000000 0000000000000000
              0000000000000000 0000000000000000 ffffffff80129fd0 0000000000000000
              ...
      Call Trace:
      [<ffffffff80129fd0>] show_stack+0x60/0x158
      [<ffffffff80a7f894>] dump_stack_lvl+0x88/0xbc
      [<ffffffff8018d3c8>] __might_resched+0x268/0x288
      [<ffffffff803648b0>] __kmem_cache_alloc_node+0x2e0/0x330
      [<ffffffff80302788>] __kmalloc+0x58/0xd0
      [<ffffffff80a81b74>] r4k_tlb_uniquify+0x7c/0x428
      [<ffffffff80143e8c>] tlb_init+0x7c/0x110
      [<ffffffff8012bdb4>] per_cpu_trap_init+0x16c/0x1d0
      [<ffffffff80133258>] start_secondary+0x28/0x128
    
    Fixes: 231ac951faba ("MIPS: mm: kmalloc tlb_vpn array to avoid stack overflow")
    Signed-off-by: Stefan Wiehler <[email protected]>
    Cc: [email protected]
    Signed-off-by: Thomas Bogendoerfer <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
MIPS: mm: kmalloc tlb_vpn array to avoid stack overflow [+ + +]
Author: Thomas Bogendoerfer <[email protected]>
Date:   Mon Apr 13 18:21:19 2026 +0100

    MIPS: mm: kmalloc tlb_vpn array to avoid stack overflow
    
    commit 841ecc979b18d3227fad5e2d6a1e6f92688776b5 upstream.
    
    Owing to Config4.MMUSizeExt and VTLB/FTLB MMU features later MIPSr2+
    cores can have more than 64 TLB entries.  Therefore allocate an array
    for uniquification instead of placing too an small array on the stack.
    
    Fixes: 35ad7e181541 ("MIPS: mm: tlb-r4k: Uniquify TLB entries on init")
    Co-developed-by: Maciej W. Rozycki <[email protected]>
    Signed-off-by: Maciej W. Rozycki <[email protected]>
    Cc: [email protected] # v6.17+: 9f048fa48740: MIPS: mm: Prevent a TLB shutdown on initial uniquification
    Cc: [email protected] # v6.17+
    Tested-by: Gregory CLEMENT <[email protected]>
    Tested-by: Klara Modin <[email protected]>
    Signed-off-by: Thomas Bogendoerfer <[email protected]>
    [ Use memblock_free(__pa(...), ...) for 5.10.y. ]
    Signed-off-by: Maciej W. Rozycki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

MIPS: mm: Rewrite TLB uniquification for the hidden bit feature [+ + +]
Author: Maciej W. Rozycki <[email protected]>
Date:   Mon Apr 13 18:21:23 2026 +0100

    MIPS: mm: Rewrite TLB uniquification for the hidden bit feature
    
    commit 540760b77b8fc49d39d1b2b76196e5ec57711a32 upstream.
    
    Before the introduction of the EHINV feature, which lets software mark
    TLB entries invalid, certain older implementations of the MIPS ISA were
    equipped with an analogous bit, as a vendor extension, which however is
    hidden from software and only ever set at reset, and then any software
    write clears it, making the intended TLB entry valid.
    
    This feature makes it unsafe to read a TLB entry with TLBR, modify the
    page mask, and write the entry back with TLBWI, because this operation
    will implicitly clear the hidden bit and this may create a duplicate
    entry, as with the presence of the hidden bit there is no guarantee all
    the entries across the TLB are unique each.
    
    Usually the firmware has already uniquified TLB entries before handing
    control over, in which case we only need to guarantee at bootstrap no
    clash will happen with the VPN2 values chosen in local_flush_tlb_all().
    
    However with systems such as Mikrotik RB532 we get handed the TLB as at
    reset, with the hidden bit set across the entries and possibly duplicate
    entries present.  This then causes a machine check exception when page
    sizes are reset in r4k_tlb_uniquify() and prevents the system from
    booting.
    
    Rewrite the algorithm used in r4k_tlb_uniquify() then such as to avoid
    the reuse of ASID/VPN values across the TLB.  Get rid of global entries
    first as they may be blocking the entire address space, e.g. 16 256MiB
    pages will exhaust the whole address space of a 32-bit CPU and a single
    big page can exhaust the 32-bit compatibility space on a 64-bit CPU.
    
    Details of the algorithm chosen are given across the code itself.
    
    Fixes: 9f048fa48740 ("MIPS: mm: Prevent a TLB shutdown on initial uniquification")
    Signed-off-by: Maciej W. Rozycki <[email protected]>
    Cc: [email protected] # v6.18+
    Signed-off-by: Thomas Bogendoerfer <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

MIPS: mm: Suppress TLB uniquification on EHINV hardware [+ + +]
Author: Maciej W. Rozycki <[email protected]>
Date:   Mon Apr 13 18:21:22 2026 +0100

    MIPS: mm: Suppress TLB uniquification on EHINV hardware
    
    commit 74283cfe216392c7b776ebf6045b5b15ed9dffcd upstream.
    
    Hardware that supports the EHINV feature, mandatory for R6 ISA and FTLB
    implementation, lets software mark TLB entries invalid, which eliminates
    the need to ensure no duplicate matching entries are ever created.  This
    feature is already used by local_flush_tlb_all(), via the UNIQUE_ENTRYHI
    macro, making the preceding call to r4k_tlb_uniquify() superfluous.
    
    The next change will also modify uniquification code such that it'll
    become incompatible with the FTLB and MMID features, as well as MIPSr6
    CPUs that do not implement 4KiB pages.
    
    Therefore prevent r4k_tlb_uniquify() from being used on EHINV hardware,
    as denoted by `cpu_has_tlbinv'.
    
    Signed-off-by: Maciej W. Rozycki <[email protected]>
    Signed-off-by: Thomas Bogendoerfer <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
misc: ibmasm: fix OOB MMIO read in ibmasm_handle_mouse_interrupt() [+ + +]
Author: Tyllis Xu <[email protected]>
Date:   Sun Mar 8 00:21:08 2026 -0600

    misc: ibmasm: fix OOB MMIO read in ibmasm_handle_mouse_interrupt()
    
    commit 4b6e6ead556734bdc14024c5f837132b1e7a4b84 upstream.
    
    ibmasm_handle_mouse_interrupt() performs an out-of-bounds MMIO read
    when the queue reader or writer index from hardware exceeds
    REMOTE_QUEUE_SIZE (60).
    
    A compromised service processor can trigger this by writing an
    out-of-range value to the reader or writer MMIO register before
    asserting an interrupt. Since writer is re-read from hardware on
    every loop iteration, it can also be set to an out-of-range value
    after the loop has already started.
    
    The root cause is that get_queue_reader() and get_queue_writer() return
    raw readl() values that are passed directly into get_queue_entry(),
    which computes:
    
      queue_begin + reader * sizeof(struct remote_input)
    
    with no bounds check. This unchecked MMIO address is then passed to
    memcpy_fromio(), reading 8 bytes from unintended device registers.
    For sufficiently large values the address falls outside the PCI BAR
    mapping entirely, triggering a machine check exception.
    
    Fix by checking both indices against REMOTE_QUEUE_SIZE at the top of
    the loop body, before any call to get_queue_entry(). On an out-of-range
    value, reset the reader register to 0 via set_queue_reader() before
    breaking, so that normal queue operation can resume if the corrupted
    hardware state is transient.
    
    Reported-by: Yuhao Jiang <[email protected]>
    Fixes: 278d72ae8803 ("[PATCH] ibmasm driver: redesign handling of remote control events")
    Cc: [email protected]
    Cc: [email protected]
    Signed-off-by: Tyllis Xu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

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

 
mm: blk-cgroup: fix use-after-free in cgwb_release_workfn() [+ + +]
Author: Breno Leitao <[email protected]>
Date:   Mon Apr 20 13:37:02 2026 -0400

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

 
mmc: block: use single block write in retry [+ + +]
Author: Bin Liu <[email protected]>
Date:   Wed Mar 25 08:49:47 2026 -0500

    mmc: block: use single block write in retry
    
    commit c7c6d4f5103864f73ee3a78bfd6da241f84197dd upstream.
    
    Due to errata i2493[0], multi-block write would still fail in retries.
    
    With i2493, the MMC interface has the potential of write failures when
    issuing multi-block writes operating in HS200 mode with excessive IO
    supply noise.
    
    While the errata provides guidance in hardware design and layout to
    minimize the IO supply noise, in theory the write failure cannot be
    resolved in hardware. The software solution to ensure the data integrity
    is to add minimum 5us delay between block writes. Single-block write is
    the practical way to introduce the delay.
    
    This patch reuses recovery_mode flag, and switches to single-block
    write in retry when multi-block write fails. It covers both CQE and
    non-CQE cases.
    
    [0] https://www.ti.com/lit/pdf/sprz582
    Cc: [email protected]
    Suggested-by: Jens Axboe <[email protected]>
    Signed-off-by: Bin Liu <[email protected]>
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mtd: docg3: fix use-after-free in docg3_release() [+ + +]
Author: James Kim <[email protected]>
Date:   Sat May 2 07:32:48 2026 -0400

    mtd: docg3: fix use-after-free in docg3_release()
    
    [ Upstream commit ca19808bc6fac7e29420d8508df569b346b3e339 ]
    
    In docg3_release(), the docg3 pointer is obtained from
    cascade->floors[0]->priv before the loop that calls
    doc_release_device() on each floor. doc_release_device() frees the
    docg3 struct via kfree(docg3) at line 1881. After the loop,
    docg3->cascade->bch dereferences the already-freed pointer.
    
    Fix this by accessing cascade->bch directly, which is equivalent
    since docg3->cascade points back to the same cascade struct, and
    is already available as a local variable. This also removes the
    now-unused docg3 local variable.
    
    Fixes: c8ae3f744ddc ("lib/bch: Rework a little bit the exported function names")
    Cc: [email protected]
    Signed-off-by: James Kim <[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]>

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

    net/rds: handle zerocopy send cleanup before the message is queued
    
    commit 44b550d88b267320459d518c0743a241ab2108fa upstream.
    
    A zerocopy send can fail after user pages have been pinned but before
    the message is attached to the sending socket.
    
    The purge path currently infers zerocopy state from rm->m_rs, so an
    unqueued message can be cleaned up as if it owned normal payload pages.
    However, zerocopy ownership is really determined by the presence of
    op_mmp_znotifier, regardless of whether the message has reached the
    socket queue.
    
    Capture op_mmp_znotifier up front in rds_message_purge() and use it as
    the cleanup discriminator. If the message is already associated with a
    socket, keep the existing completion path. Otherwise, drop the pinned
    page accounting directly and release the notifier before putting the
    payload pages.
    
    This keeps early send failure cleanup consistent with the zerocopy
    lifetime rules without changing the normal queued completion path.
    
    Fixes: 0cebaccef3ac ("rds: zerocopy Tx support.")
    Cc: [email protected]
    Reported-by: Yuan Tan <[email protected]>
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Reported-by: Xin Liu <[email protected]>
    Co-developed-by: Xiao Liu <[email protected]>
    Signed-off-by: Xiao Liu <[email protected]>
    Signed-off-by: Nan Li <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Reviewed-by: Allison Henderson <[email protected]>
    Link: https://patch.msgid.link/d2ea98a6313d5467bac00f7c9fef8c7acddb9258.1777550074.git.tonanli66@gmail.com
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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: fix ref leak when switching zones [+ + +]
Author: Marcelo Ricardo Leitner <[email protected]>
Date:   Tue Apr 21 16:24:47 2026 +0300

    net/sched: act_ct: fix ref leak when switching zones
    
    commit bcb74e132a76ce0502bb33d5b65533a4ed72d159 upstream.
    
    When switching zones or network namespaces without doing a ct clear in
    between, it is now leaking a reference to the old ct entry. That's
    because tcf_ct_skb_nfct_cached() returns false and
    tcf_ct_flow_table_lookup() may simply overwrite it.
    
    The fix is to, as the ct entry is not reusable, free it already at
    tcf_ct_skb_nfct_cached().
    
    Reported-by: Florian Westphal <[email protected]>
    Fixes: 2f131de361f6 ("net/sched: act_ct: Fix flow table lookup after ct clear or switching zones")
    Signed-off-by: Marcelo Ricardo Leitner <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    [ kovalev: bp to fix CVE-2022-49183; used nf_conntrack_put(&ct->ct_general)
      instead of nf_ct_put(ct) due to the older kernel not yet having the
      conversion from the indirect call (see upstream commit 408bdcfce8df) ]
    Signed-off-by: Vasiliy Kovalev <[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: 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: 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_red: Replace direct dequeue call with peek and qdisc_dequeue_peeked [+ + +]
Author: Jamal Hadi Salim <[email protected]>
Date:   Thu Apr 30 11:29:55 2026 -0400

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

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: continue with other TXQs if one dequeue() failed [+ + +]
Author: Vladimir Oltean <[email protected]>
Date:   Tue Feb 7 15:54:27 2023 +0200

    net/sched: taprio: continue with other TXQs if one dequeue() failed
    
    [ Upstream commit 1638bbbe4ececa615b273497d347d59ad71060a2 ]
    
    This changes the handling of an unlikely condition to not stop dequeuing
    if taprio failed to dequeue the peeked skb in taprio_dequeue().
    
    I've no idea when this can happen, but the only side effect seems to be
    that the atomic_sub_return() call right above will have consumed some
    budget. This isn't a big deal, since either that made us remain without
    any budget (and therefore, we'd exit on the next peeked skb anyway), or
    we could send some packets from other TXQs.
    
    I'm making this change because in a future patch I'll be refactoring the
    dequeue procedure to simplify it, and this corner case will have to go
    away.
    
    Signed-off-by: Vladimir Oltean <[email protected]>
    Reviewed-by: Kurt Kanzenbach <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 105425b1969c ("net/sched: taprio: fix use-after-free in advance_sched() on schedule switch")
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: taprio: Fix init procedure [+ + +]
Author: Yannick Vignon <[email protected]>
Date:   Fri Jul 30 18:53:21 2021 +0200

    net/sched: taprio: Fix init procedure
    
    [ Upstream commit ebca25ead0711729e0aeeec45062e7ac4df3e158 ]
    
    Commit 13511704f8d759 ("net: taprio offload: enforce qdisc to netdev queue mapping")
    resulted in duplicate entries in the qdisc hash.
    While this did not impact the overall operation of the qdisc and taprio
    code paths, it did result in an infinite loop when dumping the qdisc
    properties, at least on one target (NXP LS1028 ARDB).
    Removing the duplicate call to qdisc_hash_add() solves the problem.
    
    Fixes: 13511704f8d759 ("net: taprio offload: enforce qdisc to netdev queue mapping")
    Signed-off-by: Yannick Vignon <[email protected]>
    Signed-off-by: David S. Miller <[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/sched: taprio: refactor one skb dequeue from TXQ to separate function [+ + +]
Author: Vladimir Oltean <[email protected]>
Date:   Tue Feb 7 15:54:28 2023 +0200

    net/sched: taprio: refactor one skb dequeue from TXQ to separate function
    
    [ Upstream commit 92f966674f6a257eddfa60a85f9b6741d6087ccb ]
    
    Future changes will refactor the TXQ selection procedure, and a lot of
    stuff will become messy, the indentation of the bulk of the dequeue
    procedure would increase, etc.
    
    Break out the bulk of the function into a new one, which knows the TXQ
    (child qdisc) we should perform a dequeue from.
    
    Signed-off-by: Vladimir Oltean <[email protected]>
    Reviewed-by: Kurt Kanzenbach <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 105425b1969c ("net/sched: taprio: fix use-after-free in advance_sched() on schedule switch")
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: taprio: rename close_time to end_time [+ + +]
Author: Vladimir Oltean <[email protected]>
Date:   Tue Feb 7 15:54:32 2023 +0200

    net/sched: taprio: rename close_time to end_time
    
    [ Upstream commit e5517551112ff2395611e552443932152f83672d ]
    
    There is a confusion in terms in taprio which makes what is called
    "close_time" to be actually used for 2 things:
    
    1. determining when an entry "closes" such that transmitted skbs are
       never allowed to overrun that time (?!)
    2. an aid for determining when to advance and/or restart the schedule
       using the hrtimer
    
    It makes more sense to call this so-called "close_time" "end_time",
    because it's not clear at all to me what "closes". Future patches will
    hopefully make better use of the term "to close".
    
    This is an absolutely mechanical change.
    
    Signed-off-by: Vladimir Oltean <[email protected]>
    Reviewed-by: Kurt Kanzenbach <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 105425b1969c ("net/sched: taprio: fix use-after-free in advance_sched() on schedule switch")
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: taprio: replace safety precautions with comments [+ + +]
Author: Vladimir Oltean <[email protected]>
Date:   Thu Sep 15 13:50:46 2022 +0300

    net/sched: taprio: replace safety precautions with comments
    
    [ Upstream commit 2c08a4f898d0a8e08f431709a1ae728a6fddaabd ]
    
    The WARN_ON_ONCE() checks introduced in commit 13511704f8d7 ("net:
    taprio offload: enforce qdisc to netdev queue mapping") take a small
    toll on performance, but otherwise, the conditions are never expected to
    happen. Replace them with comments, such that the information is still
    conveyed to developers.
    
    Signed-off-by: Vladimir Oltean <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 105425b1969c ("net/sched: taprio: fix use-after-free in advance_sched() on schedule switch")
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: taprio: stop going through private ops for dequeue and peek [+ + +]
Author: Vladimir Oltean <[email protected]>
Date:   Thu Sep 15 13:50:44 2022 +0300

    net/sched: taprio: stop going through private ops for dequeue and peek
    
    [ Upstream commit 25becba6290bc34e369a0e1a76db9ca88bad87aa ]
    
    Since commit 13511704f8d7 ("net: taprio offload: enforce qdisc to netdev
    queue mapping"), taprio_dequeue_soft() and taprio_peek_soft() are de
    facto the only implementations for Qdisc_ops :: dequeue and Qdisc_ops ::
    peek that taprio provides.
    
    This is because in full offload mode, __dev_queue_xmit() will select a
    txq->qdisc which is never root taprio qdisc. So if nothing is enqueued
    in the root qdisc, it will never be run and nothing will get dequeued
    from it.
    
    Therefore, we can remove the private indirection from taprio, and always
    point Qdisc_ops :: dequeue to taprio_dequeue_soft (now simply named
    taprio_dequeue) and Qdisc_ops :: peek to taprio_peek_soft (now simply
    named taprio_peek).
    
    Signed-off-by: Vladimir Oltean <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 105425b1969c ("net/sched: taprio: fix use-after-free in advance_sched() on schedule switch")
    Signed-off-by: Sasha Levin <[email protected]>

 
net/smc: avoid early lgr access in smc_clc_wait_msg [+ + +]
Author: Ruijie Li <[email protected]>
Date:   Wed Apr 22 23:40:18 2026 +0800

    net/smc: avoid early lgr access in smc_clc_wait_msg
    
    commit 5a8db80f721deee8e916c2cfdee78decda02ce4f upstream.
    
    A CLC decline can be received while the handshake is still in an early
    stage, before the connection has been associated with a link group.
    
    The decline handling in smc_clc_wait_msg() updates link-group level sync
    state for first-contact declines, but that state only exists after link
    group setup has completed. Guard the link-group update accordingly and
    keep the per-socket peer diagnosis handling unchanged.
    
    This preserves the existing sync_err handling for established link-group
    contexts and avoids touching link-group state before it is available.
    
    Fixes: 0cfdd8f92cac ("smc: connection and link group creation")
    Cc: [email protected]
    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: Ruijie Li <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Reviewed-by: Dust Li <[email protected]>
    Link: https://patch.msgid.link/08c68a5c817acf198cce63d22517e232e8d60718.1776850759.git.ruijieli51@gmail.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net: ag71xx: check error for platform_get_irq [+ + +]
Author: Rosen Penev <[email protected]>
Date:   Sat May 16 14:26:16 2026 -0700

    net: ag71xx: check error for platform_get_irq
    
    [ Upstream commit e7c70bf97e90d974cd575e4c90f8f9b07d056da3 ]
    
    Complete error handling for a failed platform_get_irq() call
    
    Fixes: d51b6ce441d3 ("net: ethernet: add ag71xx driver")
    Signed-off-by: Rosen Penev <[email protected]>
    Reviewed-by: Oleksij Rempel <[email protected]>
    Link: https://patch.msgid.link/[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: 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: keep RBUF EEE/PM disabled [+ + +]
Author: Nicolai Buchwitz <[email protected]>
Date:   Wed May 20 20:43:20 2026 +0200

    net: bcmgenet: keep RBUF EEE/PM disabled
    
    commit 9a1730245e416d11ad5c0f2c100061d61cc43f60 upstream.
    
    Setting RBUF_EEE_EN | RBUF_PM_EN in RBUF_ENERGY_CTRL breaks the RX
    path on GENET hardware once MAC EEE becomes active. RX traffic stops
    flowing while the link stays up and the usual descriptor/RX error
    counters remain quiet. In that state the MAC still accepts frames
    (rbuf_ovflow_cnt keeps climbing) but RBUF no longer forwards them to
    DMA, so rx_packets is no longer incremented at the netdev level. On
    some boards the corruption ends up as a paging fault in
    skb_release_data via bcmgenet_rx_poll on an LPI exit.
    
    Reproduced on Pi 4B (BCM2711 + BCM54213PE) and confirmed by Florian
    Fainelli on an internal Broadcom 4908-family board with the same crash
    signature. RBUF_PM_EN is not publicly documented.
    
    This shows up more often now that phy_support_eee() enables EEE by
    default, but it also affects older kernels as soon as TX LPI is
    turned on via ethtool, so it is not specific to recent changes.
    
    Always clear RBUF_EEE_EN | RBUF_PM_EN in bcmgenet_eee_enable_set so
    the bits stay off across resets. UMAC and TBUF setup is left alone so
    TX-side EEE keeps working.
    
    Link: https://github.com/raspberrypi/linux/issues/7304
    Fixes: 6ef398ea60d9 ("net: bcmgenet: add EEE support")
    Cc: [email protected]
    Signed-off-by: Nicolai Buchwitz <[email protected]>
    Reviewed-by: Florian Fainelli <[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: caif: clear client service pointer on teardown [+ + +]
Author: Zhengchuan Liang <[email protected]>
Date:   Sat Apr 11 23:10:26 2026 +0800

    net: caif: clear client service pointer on teardown
    
    commit f7cf8ece8cee3c1ee361991470cdb1eb65ab02e8 upstream.
    
    `caif_connect()` can tear down an existing client after remote shutdown by
    calling `caif_disconnect_client()` followed by `caif_free_client()`.
    `caif_free_client()` releases the service layer referenced by
    `adap_layer->dn`, but leaves that pointer stale.
    
    When the socket is later destroyed, `caif_sock_destructor()` calls
    `caif_free_client()` again and dereferences the freed service pointer.
    
    Clear the client/service links before releasing the service object so
    repeated teardown becomes harmless.
    
    Fixes: 43e369210108 ("caif: Move refcount from service layer to sock and dev.")
    Cc: [email protected]
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Co-developed-by: Yuan Tan <[email protected]>
    Signed-off-by: Yuan Tan <[email protected]>
    Suggested-by: Xin Liu <[email protected]>
    Tested-by: Ren Wei <[email protected]>
    Signed-off-by: Zhengchuan Liang <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Link: https://patch.msgid.link/9f3d37847c0037568aae698ca23cd47c6691acb0.1775897577.git.zcliangcn@gmail.com
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: dsa: sja1105: fix kasan out-of-bounds warning in sja1105_table_delete_entry() [+ + +]
Author: Vladimir Oltean <[email protected]>
Date:   Tue Mar 18 13:57:16 2025 +0200

    net: dsa: sja1105: fix kasan out-of-bounds warning in sja1105_table_delete_entry()
    
    [ Upstream commit 5f2b28b79d2d1946ee36ad8b3dc0066f73c90481 ]
    
    There are actually 2 problems:
    - deleting the last element doesn't require the memmove of elements
      [i + 1, end) over it. Actually, element i+1 is out of bounds.
    - The memmove itself should move size - i - 1 elements, because the last
      element is out of bounds.
    
    The out-of-bounds element still remains out of bounds after being
    accessed, so the problem is only that we touch it, not that it becomes
    in active use. But I suppose it can lead to issues if the out-of-bounds
    element is part of an unmapped page.
    
    Fixes: 6666cebc5e30 ("net: dsa: sja1105: Add support for VLAN operations")
    Signed-off-by: Vladimir Oltean <[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: ethernet: cortina: Carry over frag counter [+ + +]
Author: Linus Walleij <[email protected]>
Date:   Sat May 9 00:13:38 2026 +0200

    net: ethernet: cortina: Carry over frag counter
    
    [ Upstream commit ebd8ec2b309e3a447851b456ccaf8fb39f3661e7 ]
    
    The gmac_rx() NAPI poll function assembles packets in an
    SKB from a ring buffer.
    
    If the ring buffer gets completely emptied during a poll cycle,
    we exit gmac_rx(), but the packet is not yet completely
    assembled in the SKB, yet the fragment counter frag_nr is
    reset to zero on the next invocation.
    
    Solve this by making the RX fragment counter a part of the
    port struct, and carry it over between invocations.
    
    Reset the fragment counter only right after calling
    napi_gro_frags(), on error (after calling napi_free_frags())
    or if stopping the port.
    
    Reset it in some place where not strictly necessary just to
    emphasize what is going on.
    
    This was found by Sashiko during normal patch review.
    
    Fixes: 4d5ae32f5e1e ("net: ethernet: Add a driver for Gemini gigabit ethernet")
    Link: https://sashiko.dev/#/patchset/20260505-gemini-ethernet-fix-v2-1-997c31d06079%40kernel.org
    Signed-off-by: Linus Walleij <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: ethernet: cortina: Drop half-assembled SKB [+ + +]
Author: Andreas Haarmann-Thiemann <[email protected]>
Date:   Tue May 5 23:52:17 2026 +0200

    net: ethernet: cortina: Drop half-assembled SKB
    
    [ Upstream commit b266bacba796ff5c4dcd2ae2fc08aacf7ab39153 ]
    
    In gmac_rx() (drivers/net/ethernet/cortina/gemini.c), when
    gmac_get_queue_page() returns NULL for the second page of a multi-page
    fragment, the driver logs an error and continues — but does not free the
    partially assembled skb that was being assembled via napi_build_skb() /
    napi_get_frags().
    
    Free the in-progress partially assembled skb via napi_free_frags()
    and increase the number of dropped frames appropriately
    and assign the skb pointer NULL to make sure it is not lingering
    around, matching the pattern already used elsewhere in the driver.
    
    Fixes: 4d5ae32f5e1e ("net: ethernet: Add a driver for Gemini gigabit ethernet")
    Signed-off-by: Andreas Haarmann-Thiemann <[email protected]>
    Signed-off-by: Linus Walleij <[email protected]>
    Reviewed-by: Alexander Lobakin <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: ethernet: cortina: Make RX SKB per-port [+ + +]
Author: Linus Walleij <[email protected]>
Date:   Sat May 9 00:13:37 2026 +0200

    net: ethernet: cortina: Make RX SKB per-port
    
    [ Upstream commit 06937db21ee311ed07eba47954447245041a982d ]
    
    The SKB used to assemble packets from fragments in gmac_rx()
    is static local, but the Gemini has two ethernet ports, meaning
    there can be races between the ports on a bad day if a device
    is using both.
    
    Make the RX SKB a per-port variable and carry it over between
    invocations in the port struct instead.
    
    Zero the pointer once we call napi_gro_frags(), on error (after
    calling napi_free_frags()) or if the port is stopped.
    
    Zero it in some place where not strictly necessary just to
    emphasize what is going on.
    
    This was found by Sashiko during normal patch review.
    
    Fixes: 4d5ae32f5e1e ("net: ethernet: Add a driver for Gemini gigabit ethernet")
    Link: https://sashiko.dev/#/patchset/20260505-gemini-ethernet-fix-v2-1-997c31d06079%40kernel.org
    Signed-off-by: Linus Walleij <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: ethernet: cs89x0: remove stale CONFIG_MACH_MX31ADS reference [+ + +]
Author: Ethan Nelson-Moore <[email protected]>
Date:   Fri May 8 19:37:28 2026 -0700

    net: ethernet: cs89x0: remove stale CONFIG_MACH_MX31ADS reference
    
    [ Upstream commit 36a8d04a8293afcb9304cf0cd3741f67698f2a1a ]
    
    The legacy ARM board file for MACH_MX31ADS was removed in commit
    c93197b0041d ("ARM: imx: Remove i.MX31 board files"), but a reference
    to it remained in the cs89x0 driver. Drop this unused code.
    
    Signed-off-by: Ethan Nelson-Moore <[email protected]>
    Fixes: c93197b0041d ("ARM: imx: Remove i.MX31 board files")
    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: lapbether: Close the LAPB device before its underlying Ethernet device closes [+ + +]
Author: Xie He <[email protected]>
Date:   Thu Mar 18 12:07:47 2021 -0700

    net: lapbether: Close the LAPB device before its underlying Ethernet device closes
    
    [ Upstream commit 536e1004d273cf55d0e6c6ab6bfe74dc60464cd2 ]
    
    When a virtual LAPB device's underlying Ethernet device closes, the LAPB
    device is also closed.
    
    However, currently the LAPB device is closed after the Ethernet device
    closes. It would be better to close it before the Ethernet device closes.
    This would allow the LAPB device to transmit a last frame to notify the
    other side that it is disconnecting.
    
    Signed-off-by: Xie He <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: b120e4432f9f ("net: lapbether: handle NETDEV_PRE_TYPE_CHANGE")
    Signed-off-by: Sasha Levin <[email protected]>

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

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

net: lapbether: remove trailing whitespaces [+ + +]
Author: Peng Li <[email protected]>
Date:   Wed Jun 9 17:39:50 2021 +0800

    net: lapbether: remove trailing whitespaces
    
    [ Upstream commit 2e350780ae4f2be8a2525929b6c69c2dd9591a20 ]
    
    This patch removes trailing whitespaces.
    
    Signed-off-by: Peng Li <[email protected]>
    Signed-off-by: Guangbin Huang <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: b120e4432f9f ("net: lapbether: handle NETDEV_PRE_TYPE_CHANGE")
    Signed-off-by: Sasha Levin <[email protected]>

net: lapbether: replace comparison to NULL with "lapbeth_get_x25_dev" [+ + +]
Author: Peng Li <[email protected]>
Date:   Wed Jun 9 17:39:53 2021 +0800

    net: lapbether: replace comparison to NULL with "lapbeth_get_x25_dev"
    
    [ Upstream commit d49859601d72baef143703c6944a4e41921f7e6e ]
    
    According to the chackpatch.pl, comparison to NULL could
    be written "lapbeth_get_x25_dev".
    
    Signed-off-by: Peng Li <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: b120e4432f9f ("net: lapbether: handle NETDEV_PRE_TYPE_CHANGE")
    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: qrtr: ns: Fix use-after-free in driver remove() [+ + +]
Author: Manivannan Sadhasivam <[email protected]>
Date:   Thu Apr 9 23:04:16 2026 +0530

    net: qrtr: ns: Fix use-after-free in driver remove()
    
    commit 7809fea20c9404bfcfa6112ec08d1fe1d3520beb upstream.
    
    In the remove callback, if a packet arrives after destroy_workqueue() is
    called, but before sock_release(), the qrtr_ns_data_ready() callback will
    try to queue the work, causing use-after-free issue.
    
    Fix this issue by saving the default 'sk_data_ready' callback during
    qrtr_ns_init() and use it to replace the qrtr_ns_data_ready() callback at
    the start of remove(). This ensures that even if a packet arrives after
    destroy_workqueue(), the work struct will not be dereferenced.
    
    Note that it is also required to ensure that the RX threads are completed
    before destroying the workqueue, because the threads could be using the
    qrtr_ns_data_ready() callback.
    
    Cc: [email protected]
    Fixes: 0c2204a4ad71 ("net: qrtr: Migrate nameservice to kernel from userspace")
    Signed-off-by: Manivannan Sadhasivam <[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: fix MR cleanup on copy error [+ + +]
Author: Ao Zhou <[email protected]>
Date:   Wed Apr 22 22:52:07 2026 +0800

    net: rds: fix MR cleanup on copy error
    
    commit 8141a2dc70080eda1aedc0389ed2db2b292af5bd upstream.
    
    __rds_rdma_map() hands sg/pages ownership to the transport after
    get_mr() succeeds. If copying the generated cookie back to user space
    fails after that point, the error path must not free those resources
    again before dropping the MR reference.
    
    Remove the duplicate unpin/free from the put_user() failure branch so
    that MR teardown is handled only through the existing final cleanup
    path.
    
    Fixes: 0d4597c8c5ab ("net/rds: Track user mapped pages through special API")
    Cc: [email protected]
    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: Ao Zhou <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Reviewed-by: Allison Henderson <[email protected]>
    Link: https://patch.msgid.link/79c8ef73ec8e5844d71038983940cc2943099baf.1776764247.git.draw51280@163.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: rtnetlink: zero ifla_vf_broadcast to avoid stack infoleak in rtnl_fill_vfinfo [+ + +]
Author: Kai Zen <[email protected]>
Date:   Thu Apr 30 18:26:48 2026 +0300

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

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

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

net: sched: choke: remove unused variables in struct choke_sched_data [+ + +]
Author: Zhengchao Shao <[email protected]>
Date:   Tue Aug 30 17:22:54 2022 +0800

    net: sched: choke: remove unused variables in struct choke_sched_data
    
    [ Upstream commit 38af11717b386560f10f2891350933fc5200aeea ]
    
    The variable "other" in the struct choke_sched_data is not used. Remove it.
    
    Signed-off-by: Zhengchao Shao <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: d3aeb889dcbd ("net/sched: sch_choke: annotate data-races in choke_dump_stats()")
    Signed-off-by: Sasha Levin <[email protected]>

net: sched: gred/red: remove unused variables in struct red_stats [+ + +]
Author: Zhengchao Shao <[email protected]>
Date:   Tue Aug 30 17:22:55 2022 +0800

    net: sched: gred/red: remove unused variables in struct red_stats
    
    [ Upstream commit 4516c873e3b55856012ddd6db9d4366ce3c60c5d ]
    
    The variable "other" in the struct red_stats is not used. Remove it.
    
    Signed-off-by: Zhengchao Shao <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: a8f5192809ca ("net/sched: sch_red: annotate data-races in red_dump_stats()")
    Signed-off-by: Sasha Levin <[email protected]>

net: sched: sch_netem: Refactor code in 4-state loss generator [+ + +]
Author: Harshit Mogalapalli <[email protected]>
Date:   Fri Nov 12 13:36:47 2021 -0800

    net: sched: sch_netem: Refactor code in 4-state loss generator
    
    [ Upstream commit cb3ef7b00042479277cda7871d899378ad91f081 ]
    
    Fixed comments to match description with variable names and
    refactored code to match the convention as per [1].
    
    To match the convention mapping is done as follows:
    State 3 - LOST_IN_BURST_PERIOD
    State 4 - LOST_IN_GAP_PERIOD
    
    [1] S. Salsano, F. Ludovici, A. Ordine, "Definition of a general
    and intuitive loss model for packet networks and its implementation
    in the Netem module in the Linux kernel"
    
    Fixes: a6e2fe17eba4 ("sch_netem: replace magic numbers with enumerate")
    Signed-off-by: Harshit Mogalapalli <[email protected]>
    Acked-by: Stephen Hemminger <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 732b463449fd ("net/sched: netem: fix probability gaps in 4-state loss model")
    Signed-off-by: Sasha Levin <[email protected]>

net: strparser: fix skb_head leak in strp_abort_strp() [+ + +]
Author: Luxiao Xu <[email protected]>
Date:   Sat Apr 11 23:10:10 2026 +0800

    net: strparser: fix skb_head leak in strp_abort_strp()
    
    commit fe72340daaf1af588be88056faf98965f39e6032 upstream.
    
    When the stream parser is aborted, for example after a message assembly timeout,
    it can still hold a reference to a partially assembled message in
    strp->skb_head.
    
    That skb is not released in strp_abort_strp(), which leaks the partially
    assembled message and can be triggered repeatedly to exhaust memory.
    
    Fix this by freeing strp->skb_head and resetting the parser state in the
    abort path. Leave strp_stop() unchanged so final cleanup still happens in
    strp_done() after the work and timer have been synchronized.
    
    Fixes: 43a0c6751a32 ("strparser: Stream parser for messages")
    Cc: [email protected]
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Co-developed-by: Yuan Tan <[email protected]>
    Signed-off-by: Yuan Tan <[email protected]>
    Suggested-by: Xin Liu <[email protected]>
    Tested-by: Yuan Tan <[email protected]>
    Signed-off-by: Luxiao Xu <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Link: https://patch.msgid.link/ade3857a9404999ce9a1c27ec523efc896072678.1775482694.git.rakukuip@gmail.com
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: tap: NULL pointer derefence in dev_parse_header_protocol when skb->dev is null [+ + +]
Author: Cezar Bulinaru <[email protected]>
Date:   Tue Apr 21 16:27:29 2026 +0300

    net: tap: NULL pointer derefence in dev_parse_header_protocol when skb->dev is null
    
    commit 4f61f133f354853bc394ec7d6028adb9b02dd701 upstream.
    
    Fixes a NULL pointer derefence bug triggered from tap driver.
    When tap_get_user calls virtio_net_hdr_to_skb the skb->dev is null
    (in tap.c skb->dev is set after the call to virtio_net_hdr_to_skb)
    virtio_net_hdr_to_skb calls dev_parse_header_protocol which
    needs skb->dev field to be valid.
    
    The line that trigers the bug is in dev_parse_header_protocol
    (dev is at offset 0x10 from skb and is stored in RAX register)
      if (!dev->header_ops || !dev->header_ops->parse_protocol)
      22e1:   mov    0x10(%rbx),%rax
      22e5:   mov    0x230(%rax),%rax
    
    Setting skb->dev before the call in tap.c fixes the issue.
    
    BUG: kernel NULL pointer dereference, address: 0000000000000230
    RIP: 0010:virtio_net_hdr_to_skb.constprop.0+0x335/0x410 [tap]
    Code: c0 0f 85 b7 fd ff ff eb d4 41 39 c6 77 cf 29 c6 48 89 df 44 01 f6 e8 7a 79 83 c1 48 85 c0 0f 85 d9 fd ff ff eb b7 48 8b 43 10 <48> 8b 80 30 02 00 00 48 85 c0 74 55 48 8b 40 28 48 85 c0 74 4c 48
    RSP: 0018:ffffc90005c27c38 EFLAGS: 00010246
    RAX: 0000000000000000 RBX: ffff888298f25300 RCX: 0000000000000010
    RDX: 0000000000000005 RSI: ffffc90005c27cb6 RDI: ffff888298f25300
    RBP: ffffc90005c27c80 R08: 00000000ffffffea R09: 00000000000007e8
    R10: ffff88858ec77458 R11: 0000000000000000 R12: 0000000000000001
    R13: 0000000000000014 R14: ffffc90005c27e08 R15: ffffc90005c27cb6
    FS:  0000000000000000(0000) GS:ffff88858ec40000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000000230 CR3: 0000000281408006 CR4: 00000000003706e0
    Call Trace:
     tap_get_user+0x3f1/0x540 [tap]
     tap_sendmsg+0x56/0x362 [tap]
     ? get_tx_bufs+0xc2/0x1e0 [vhost_net]
     handle_tx_copy+0x114/0x670 [vhost_net]
     handle_tx+0xb0/0xe0 [vhost_net]
     handle_tx_kick+0x15/0x20 [vhost_net]
     vhost_worker+0x7b/0xc0 [vhost]
     ? vhost_vring_call_reset+0x40/0x40 [vhost]
     kthread+0xfa/0x120
     ? kthread_complete_and_exit+0x20/0x20
     ret_from_fork+0x1f/0x30
    
    Fixes: 924a9bc362a5 ("net: check if protocol extracted by virtio_net_hdr_set_proto is correct")
    Signed-off-by: Cezar Bulinaru <[email protected]>
    Reviewed-by: Willem de Bruijn <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    [ kovalev: bp to fix CVE-2022-50073 ]
    Signed-off-by: Vasiliy Kovalev <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: taprio offload: enforce qdisc to netdev queue mapping [+ + +]
Author: Yannick Vignon <[email protected]>
Date:   Tue May 11 19:18:29 2021 +0200

    net: taprio offload: enforce qdisc to netdev queue mapping
    
    [ Upstream commit 13511704f8d7591faf19fdb84f0902dff0535ccb ]
    
    Even though the taprio qdisc is designed for multiqueue devices, all the
    queues still point to the same top-level taprio qdisc. This works and is
    probably required for software taprio, but at least with offload taprio,
    it has an undesirable side effect: because the whole qdisc is run when a
    packet has to be sent, it allows packets in a best-effort class to be
    processed in the context of a task sending higher priority traffic. If
    there are packets left in the qdisc after that first run, the NET_TX
    softirq is raised and gets executed immediately in the same process
    context. As with any other softirq, it runs up to 10 times and for up to
    2ms, during which the calling process is waiting for the sendmsg call (or
    similar) to return. In my use case, that calling process is a real-time
    task scheduled to send a packet every 2ms, so the long sendmsg calls are
    leading to missed timeslots.
    
    By attaching each netdev queue to its own qdisc, as it is done with
    the "classic" mq qdisc, each traffic class can be processed independently
    without touching the other classes. A high-priority process can then send
    packets without getting stuck in the sendmsg call anymore.
    
    Signed-off-by: Yannick Vignon <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 105425b1969c ("net/sched: taprio: fix use-after-free in advance_sched() on schedule switch")
    Signed-off-by: Sasha Levin <[email protected]>

net: tls: fix off-by-one in sg_chain entry count for wrapped sk_msg ring [+ + +]
Author: Jakub Kicinski <[email protected]>
Date:   Mon May 11 10:49:17 2026 -0700

    net: tls: fix off-by-one in sg_chain entry count for wrapped sk_msg ring
    
    [ Upstream commit 285943c6e7ca309bbea84b253745154241d9788a ]
    
    When an sk_msg scatterlist ring wraps (sg.end < sg.start),
    tls_push_record() chains the tail portion of the ring to the head
    using sg_chain(). An extra entry in the sg array is reserved for
    this:
    
      struct sk_msg_sg {
            [...]
            /* The extra two elements:
             * 1) used for chaining the front and sections when the list becomes
             *    partitioned (e.g. end < start). The crypto APIs require the
             *    chaining;
             * 2) to chain tailer SG entries after the message.
             */
            struct scatterlist              data[MAX_MSG_FRAGS + 2];
    
    The current code uses MAX_SKB_FRAGS + 1 as the ring size:
    
        sg_chain(&msg_pl->sg.data[msg_pl->sg.start],
                 MAX_SKB_FRAGS - msg_pl->sg.start + 1,
                 msg_pl->sg.data);
    
    This places the chain pointer at
    
      sg_chain(data[start], (MAX_SKB_FRAGS - msg_start + 1) .. =
      &data[start] + (MAX_SKB_FRAGS - msg_start + 1) - 1 =
      data[start + (MAX_SKB_FRAGS - start + 1) - 1] =
      data[MAX_SKB_FRAGS]
    
    instead of the true last entry. This is likely due to a "race" of
    the commit under Fixes landing close to
    commit 031097d9e079 ("bpf: sk_msg, zap ingress queue on psock down")
    
    Convert to ARRAY_SIZE and drop the data[start] / - start (as suggested
    by Sabrina).
    
    Reported-by: 钱一铭 <[email protected]>
    Fixes: 9aaaa56845a0 ("bpf: Sockmap/tls, skmsg can have wrapped skmsg that needs extra chaining")
    Signed-off-by: Jakub Kicinski <[email protected]>
    Reviewed-by: Sabrina Dubroca <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: tls: prevent chain-after-chain in plain text SG [+ + +]
Author: Jakub Kicinski <[email protected]>
Date:   Mon May 11 10:49:18 2026 -0700

    net: tls: prevent chain-after-chain in plain text SG
    
    [ Upstream commit ff26a0e8377dec07e4a7230db7675bed1b9a6d03 ]
    
    Sashiko points out that if end = 0 (start != 0) the current
    code will create a chain link to content type right after
    the wrap link:
    
      This would create a chain where the wrap link points directly
      to another chain link. The scatterlist API sg_next iterator
      does not recursively resolve consecutive chain links.
    
    meaning this is illegal input to crypto.
    
    The wrapping link is unnecessary if end = 0. end is the entry after
    the last one used so end = 0 means there's nothing pushed after
    the wrap:
    
       end         start            i
        v            v              v
      [   ]...[   ][ d ][ d ][ d ][ d ][rsv for wrap]
    
    Skip the wrapping in this case.
    
    TLS 1.3 can use the "wrapping slot" for it's chaining if end = 0.
    This avoids the chain-after-chain.
    
    Move the wrap chaining before marking END and chaining off content
    type, that feels like more logical ordering to me, but should not
    matter from functional perspective.
    
    Reported-by: Sashiko <[email protected]>
    Fixes: 9aaaa56845a0 ("bpf: Sockmap/tls, skmsg can have wrapped skmsg that needs extra chaining")
    Signed-off-by: Jakub Kicinski <[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: cdc-phonet: fix skb frags[] overflow in rx_complete() [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Sat Apr 11 13:01:35 2026 +0200

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

net: usb: lan78xx: Fix double free issue with interrupt buffer allocation [+ + +]
Author: Oleksij Rempel <[email protected]>
Date:   Mon Mar 23 16:00:21 2026 +0800

    net: usb: lan78xx: Fix double free issue with interrupt buffer allocation
    
    [ Upstream commit 03819abbeb11117dcbba40bfe322b88c0c88a6b6 ]
    
    In lan78xx_probe(), the buffer `buf` was being freed twice: once
    implicitly through `usb_free_urb(dev->urb_intr)` with the
    `URB_FREE_BUFFER` flag and again explicitly by `kfree(buf)`. This caused
    a double free issue.
    
    To resolve this, reordered `kmalloc()` and `usb_alloc_urb()` calls to
    simplify the initialization sequence and removed the redundant
    `kfree(buf)`.  Now, `buf` is allocated after `usb_alloc_urb()`, ensuring
    it is correctly managed by  `usb_fill_int_urb()` and freed by
    `usb_free_urb()` as intended.
    
    Fixes: a6df95cae40b ("lan78xx: Fix memory allocation bug")
    Cc: John Efstathiades <[email protected]>
    Signed-off-by: Oleksij Rempel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ Adjust context. Make the function usb_alloc_urb() call before
    kmalloc(). ]
    Signed-off-by: Wenshan Lan <[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]>

 
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: add missing netlink policy validations [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Tue Mar 10 00:28:29 2026 +0100

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

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

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

netfilter: ip6t_hbh: reject oversized option lists [+ + +]
Author: Zhengchuan Liang <[email protected]>
Date:   Wed May 13 15:57:17 2026 +0800

    netfilter: ip6t_hbh: reject oversized option lists
    
    commit 4322dcde6b4173c2d8e8e6118ed290794263bcc8 upstream.
    
    struct ip6t_opts stores at most IP6T_OPTS_OPTSNR option descriptors,
    but hbh_mt6_check() does not reject larger optsnr values supplied from
    userspace.
    
    Validate optsnr in the rule setup path so only match data that fits the
    fixed-size opts array can be installed. This follows the existing xtables
    pattern of rejecting invalid user-provided counts in checkentry() and
    keeps the packet matching path unchanged.
    
    `struct ip6t_opts` has a fixed `opts[IP6T_OPTS_OPTSNR]` array,
    where `IP6T_OPTS_OPTSNR` is 16, then off-by-one array access is possible:
    
    [  137.924693][ T8692] UBSAN: array-index-out-of-bounds in ../net/ipv6/netfilter/ip6t_hbh.c:110:29
    [  137.926167][ T8692] index 16 is out of range for type '__u16 [16]'
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    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: Zhengchuan Liang <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: ipset: stop hash:* range iteration at end [+ + +]
Author: Nan Li <[email protected]>
Date:   Tue May 12 16:50:01 2026 +0800

    netfilter: ipset: stop hash:* range iteration at end
    
    commit 0d3a282ab5f165fc207ff49ea5b6ad8f54616bd6 upstream.
    
    The following hash set variants:
    
    hash:ip,mark
    hash:ip,port
    hash:ip,port,ip
    hash:ip,port,net
    
    iterate IPv4 ranges with a 32-bit iterator.
    
    The iterator must stop once the last address in the requested range has
    been processed. Advancing it once more can move the traversal state past
    the end of the request, so a later retry may continue from an unintended
    position.
    
    Handle the iterator increment explicitly at the end of the loop and stop
    once the upper bound has been processed. This keeps the existing retry
    behaviour intact for valid ranges while preventing traversal from
    continuing past the original boundary.
    
    Fixes: 48596a8ddc46 ("netfilter: ipset: Fix adding an IPv4 range containing more than 2^31 addresses")
    Cc: [email protected]
    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: Nan Li <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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: nfnetlink_log: initialize nfgenmsg in NLMSG_DONE terminator [+ + +]
Author: Xiang Mei <[email protected]>
Date:   Wed Apr 1 14:20:57 2026 -0700

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

netfilter: nfnetlink_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: nft_set_pipapo: do not rely on ZERO_SIZE_PTR [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Mon Apr 13 04:33:04 2026 +0000

    netfilter: nft_set_pipapo: do not rely on ZERO_SIZE_PTR
    
    commit 07ace0bbe03b3d8e85869af1dec5e4087b1d57b8 upstream
    
    pipapo relies on kmalloc(0) returning ZERO_SIZE_PTR (i.e., not NULL
    but pointer is invalid).
    
    Rework this to not call slab allocator when we'd request a 0-byte
    allocation.
    
    Reviewed-by: Stefano Brivio <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Mukul Sikka <[email protected]>
    Signed-off-by: Brennan Lamoreaux <[email protected]>
    [Keerthana: In older stable branches (v6.6 and earlier), the allocation logic in
    pipapo_clone() still relies on `src->rules` rather than `src->rules_alloc`
    (introduced in v6.9 via 9f439bd6ef4f). Consequently, the previously
    backported INT_MAX clamping check uses `src->rules`. This patch correctly
    moves that `src->rules > (INT_MAX / ...)` check inside the new
    `if (src->rules > 0)` block]
    Signed-off-by: Keerthana K <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

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

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

netfilter: reject zero shift in nft_bitwise [+ + +]
Author: Kai Ma <[email protected]>
Date:   Wed Apr 22 22:54:18 2026 +0800

    netfilter: reject zero shift in nft_bitwise
    
    commit fe11e5c40817b84abaa5d83bfb6586d8412bfd07 upstream.
    
    Reject zero shift operands for nft_bitwise left and right shift
    expressions during initialization.
    
    The carry propagation logic computes the carry from the adjacent 32-bit
    word using BITS_PER_TYPE(u32) - shift. A zero shift operand turns this
    into a 32-bit shift, which is undefined behaviour.
    
    Reject zero shift operands in the control plane, alongside the existing
    check for values greater than or equal to 32, so malformed rules never
    reach the packet path.
    
    Fixes: 567d746b55bc ("netfilter: bitwise: add support for shifts.")
    Cc: [email protected]
    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: Kai Ma <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Reviewed-by: Fernando Fernandez Mancera <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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_multiport: validate range encoding in checkentry [+ + +]
Author: Ren Wei <[email protected]>
Date:   Fri Apr 3 23:52:52 2026 +0800

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

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: 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]>

 
nexthop: Emit a notification when a nexthop group is modified [+ + +]
Author: Ido Schimmel <[email protected]>
Date:   Wed Nov 4 15:30:32 2020 +0200

    nexthop: Emit a notification when a nexthop group is modified
    
    [ Upstream commit f17bc33d7412bcca58825273d9f4abf84a87c4cb ]
    
    When a single nexthop is replaced, the configuration of all the groups
    using the nexthop is effectively modified. In this case, emit a
    notification in the nexthop notification chain for each modified group
    so that listeners would not need to keep track of which nexthops are
    member in which groups.
    
    The notification can only be emitted after the new configuration (i.e.,
    'struct nh_info') is pointed at by the old shell (i.e., 'struct
    nexthop'). Before that the configuration of the nexthop groups is still
    the same as before the replacement.
    
    Signed-off-by: Ido Schimmel <[email protected]>
    Reviewed-by: David Ahern <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 29c95185ba32 ("nexthop: fix IPv6 route referencing IPv4 nexthop")
    Signed-off-by: Sasha Levin <[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: digital: Bounds check NFC-A cascade depth in SDD response handler [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Thu Apr 9 17:18:14 2026 +0200

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

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

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

 
NFC: 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: fix NULL i_assoc_inode dereference in nilfs_mdt_save_to_shadow_map [+ + +]
Author: Deepanshu Kartikey <[email protected]>
Date:   Tue Mar 31 09:47:21 2026 +0900

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

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]>

 
nvmet: avoid recursive nvmet-wq flush in nvmet_ctrl_free [+ + +]
Author: Chaitanya Kulkarni <[email protected]>
Date:   Wed Apr 8 17:56:47 2026 -0700

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

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

ocfs2: fix 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: fix out-of-bounds write in ocfs2_write_end_inline [+ + +]
Author: Joseph Qi <[email protected]>
Date:   Mon Apr 13 12:26:11 2026 -0400

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

ocfs2: fix possible deadlock between unlink and dio_end_io_write [+ + +]
Author: Joseph Qi <[email protected]>
Date:   Mon Apr 20 10:58:33 2026 -0400

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

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

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

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

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

ocfs2: split transactions in dio completion to avoid credit exhaustion [+ + +]
Author: Heming Zhao <[email protected]>
Date:   Thu Apr 2 21:43:27 2026 +0800

    ocfs2: split transactions in dio completion to avoid credit exhaustion
    
    commit d647c5b2fbf81560818dacade360abc8c00a9665 upstream.
    
    During ocfs2 dio operations, JBD2 may report warnings via following
    call trace:
    ocfs2_dio_end_io_write
     ocfs2_mark_extent_written
      ocfs2_change_extent_flag
       ocfs2_split_extent
        ocfs2_try_to_merge_extent
         ocfs2_extend_rotate_transaction
          ocfs2_extend_trans
           jbd2__journal_restart
            start_this_handle
             output: JBD2: kworker/6:2 wants too many credits credits:5450 rsv_credits:0 max:5449
    
    To prevent exceeding the credits limit, modify ocfs2_dio_end_io_write() to
    handle extents in a batch of transaction.
    
    Additionally, relocate ocfs2_del_inode_from_orphan().  The orphan inode
    should only be removed from the orphan list after the extent tree update
    is complete.  This ensures that if a crash occurs in the middle of extent
    tree updates, we won't leave stale blocks beyond EOF.
    
    This patch also changes the logic for updating the inode size and removing
    orphan, making it similar to ext4_dio_write_end_io().  Both operations are
    performed only when everything looks good.
    
    Finally, thanks to Jans and Joseph for providing the bug fix prototype and
    suggestions.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Heming Zhao <[email protected]>
    Suggested-by: Jan Kara <[email protected]>
    Suggested-by: Joseph Qi <[email protected]>
    Reviewed-by: Jan Kara <[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]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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]>

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

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

 
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: Fix pd UAF once and for all [+ + +]
Author: Herbert Xu <[email protected]>
Date:   Tue Apr 28 16:57:00 2026 +0800

    padata: Fix pd UAF once and for all
    
    [ Upstream commit 71203f68c7749609d7fc8ae6ad054bdedeb24f91 ]
    
    There is a race condition/UAF in padata_reorder that goes back
    to the initial commit.  A reference count is taken at the start
    of the process in padata_do_parallel, and released at the end in
    padata_serial_worker.
    
    This reference count is (and only is) required for padata_replace
    to function correctly.  If padata_replace is never called then
    there is no issue.
    
    In the function padata_reorder which serves as the core of padata,
    as soon as padata is added to queue->serial.list, and the associated
    spin lock released, that padata may be processed and the reference
    count on pd would go away.
    
    Fix this by getting the next padata before the squeue->serial lock
    is released.
    
    In order to make this possible, simplify padata_reorder by only
    calling it once the next padata arrives.
    
    Fixes: 16295bec6398 ("padata: Generic parallelization/serialization interface")
    Signed-off-by: Herbert Xu <[email protected]>
    [ Adjust context of padata_find_next(). Replace
    cpumask_next_wrap(cpu, pd->cpumask.pcpu) with
    cpumask_next_wrap(cpu, pd->cpumask.pcpu, -1, false) in padata_reorder() in
    v5.10 according to dc5bb9b769c9 ("cpumask: deprecate cpumask_next_wrap()") and
    f954a2d37637 ("padata: switch padata_find_next() to using cpumask_next_wrap()")
    . ]
    Signed-off-by: Bin Lan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

padata: Remove comment for reorder_work [+ + +]
Author: Herbert Xu <[email protected]>
Date:   Tue Apr 28 16:57:01 2026 +0800

    padata: Remove comment for reorder_work
    
    [ Upstream commit 82a0302e7167d0b7c6cde56613db3748f8dd806d ]
    
    Remove comment for reorder_work which no longer exists.
    
    Reported-by: Stephen Rothwell <[email protected]>
    Fixes: 71203f68c774 ("padata: Fix pd UAF once and for all")
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Bin Lan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
parisc: _llseek syscall is only available for 32-bit userspace [+ + +]
Author: Helge Deller <[email protected]>
Date:   Tue Apr 7 23:56:28 2026 +0200

    parisc: _llseek syscall is only available for 32-bit userspace
    
    commit da3680f564bd787ce974f9931e6e924d908b3b2a upstream.
    
    Cc: [email protected]
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

parisc: Fix IRQ leak in LASI driver [+ + +]
Author: Hongling Zeng <[email protected]>
Date:   Sun May 3 12:17:44 2026 +0800

    parisc: Fix IRQ leak in LASI driver
    
    commit 37b0dc5e279f35036fb638d1e187197b6c05a76d upstream.
    
    When request_irq() succeeds but gsc_common_setup() fails later,
    the IRQ is never released. Fix this by adding proper error handling
    with goto labels to ensure resources are released in LIFO order.
    
    Detected by Smatch:
      drivers/parisc/lasi.c:216 lasi_init_chip() warn: 'lasi->gsc_irq.irq'
    from request_irq() not released on lines: 207.
    
    Reported-by: kernel test robot <[email protected]>
    Reported-by: Dan Carpenter <[email protected]>
    Closes: https://lore.kernel.org/r/[email protected]/
    Signed-off-by: Hongling Zeng <[email protected]>
    Cc: [email protected]
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
PCI/AER: Clear only error bits in PCIe Device Status [+ + +]
Author: Shuai Xue <[email protected]>
Date:   Wed Feb 11 20:46:24 2026 +0800

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

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

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

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

PCI: 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: 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]>

 
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 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]>

 
phonet/pep: disable BH around forwarded sk_receive_skb() [+ + +]
Author: Zijing Yin <[email protected]>
Date:   Tue May 19 10:26:33 2026 -0700

    phonet/pep: disable BH around forwarded sk_receive_skb()
    
    commit dbc81608e3a653dea6cf403f20cae35468b8ab9c upstream.
    
    The networking receive path is usually run from softirq context, but
    protocols that take the socket lock may have packets stored in the
    backlog and processed later from process context. In that case
    release_sock() -> __release_sock() drops the slock with spin_unlock_bh()
    and then calls sk->sk_backlog_rcv() with bottom halves enabled.
    
    Typical sk_backlog_rcv handlers process the socket whose backlog is
    being drained, so the BH state at entry is irrelevant for the slocks
    they touch. pep_do_rcv() is different: when the inbound skb targets an
    existing PEP pipe, it forwards the skb to a different *child* socket
    via sk_receive_skb(). That helper takes the child slock with
    bh_lock_sock_nested(), which is just spin_lock_nested() and assumes BH
    is already off. The same child slock therefore ends up acquired with
    BH on (process path) and with BH off (softirq path):
    
      process context                   softirq context
      ---------------                   ---------------
      release_sock(listener)            __netif_receive_skb()
       __release_sock()                  phonet_rcv()
        spin_unlock_bh()                  __sk_receive_skb(listener)
        [BH now ENABLED]                  [BH already disabled]
        sk_backlog_rcv:                   sk_backlog_rcv:
         pep_do_rcv()                      pep_do_rcv()
          sk_receive_skb(child)             sk_receive_skb(child)
           bh_lock_sock_nested(child)        bh_lock_sock_nested(child)
           => SOFTIRQ-ON-W                   => IN-SOFTIRQ-W
    
    Lockdep flags this as inconsistent lock state, and it can become a real
    self-deadlock if a softirq on the same CPU tries to receive to the same
    child socket while its slock is held in the BH-enabled path:
    
      WARNING: inconsistent lock state
      inconsistent {SOFTIRQ-ON-W} -> {IN-SOFTIRQ-W} usage.
       (slock-AF_PHONET/1){+.?.}-{3:3}, at: __sk_receive_skb+0x1cf/0x900
        __sk_receive_skb              net/core/sock.c:563
        sk_receive_skb                include/net/sock.h:2022 [inline]
        pep_do_rcv                    net/phonet/pep.c:675
        sk_backlog_rcv                include/net/sock.h:1190
        __release_sock                net/core/sock.c:3216
        release_sock                  net/core/sock.c:3815
        pep_sock_accept               net/phonet/pep.c:879
    
    Wrap the forwarded sk_receive_skb() in local_bh_disable() /
    local_bh_enable() so the child slock is always acquired with BH off.
    local_bh_disable() nests safely on the softirq path.
    
    Discovered via in-house syzkaller fuzzing; the same root cause also
    on the linux-6.1.y syzbot dashboard as extid 44f0626dd6284f02663c.
    Reproduced under KASAN + LOCKDEP + PROVE_LOCKING, reproducer:
    https://pastebin.com/A3t8xzCR
    
    Fixes: 9641458d3ec4 ("Phonet: Pipe End Point for Phonet Pipes protocol")
    Link: https://syzkaller.appspot.com/bug?extid=44f0626dd6284f02663c
    Cc: [email protected]
    Signed-off-by: Zijing Yin <[email protected]>
    Acked-by: Rémi Denis-Courmont <[email protected]>
    Reported-by: [email protected]
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
phy: marvell: mvebu-a3700-utmi: fix incorrect USB2_PHY_CTRL register access [+ + +]
Author: Gabor Juhos <[email protected]>
Date:   Sat Mar 21 15:42:32 2026 +0100

    phy: marvell: mvebu-a3700-utmi: fix incorrect USB2_PHY_CTRL register access
    
    [ Upstream commit 91ddf6f722084383fb05be731c0107814b055c0c ]
    
    The mvebu_a3700_utmi_phy_power_off() function tries to modify the
    USB2_PHY_CTRL register by using the IO address of the PHY IP block along
    with the readl/writel IO accessors. However, the register exist in the
    USB miscellaneous register space, and as such it must be accessed via
    regmap like it is done in the mvebu_a3700_utmi_phy_power_on() function.
    
    Change the code to use regmap_update_bits() for modífying the register
    to fix this.
    
    Fixes: cc8b7a0ae866 ("phy: add A3700 UTMI PHY driver")
    Signed-off-by: Gabor Juhos <[email protected]>
    Reviewed-by: Miquel Raynal <[email protected]>
    Link: https://patch.msgid.link/20260321-a3700-utmi-fix-usb2_phy_ctrl-access-v1-1-6005ff4b5058@gmail.com
    Signed-off-by: Vinod Koul <[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: 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/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_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: intel-hid: Check ACPI_HANDLE() against NULL [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Tue May 12 17:13:28 2026 +0200

    platform/x86: intel-hid: Check ACPI_HANDLE() against NULL
    
    [ Upstream commit 5c69e090ae5dd93d910f70db0796357080707d26 ]
    
    Every platform driver can be forced to match a device that doesn't match
    its list of device IDs because of device_match_driver_override(), so
    platform drivers that rely on the existence of a device's ACPI companion
    object need to verify its presence.
    
    Accordingly, add a requisite ACPI_HANDLE() check against NULL to the
    platform/x86 intel-hid driver.
    
    Fixes: ecc83e52b28c ("intel-hid: new hid event driver for hotkeys")
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Reviewed-by: Andy Shevchenko <[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: 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]>

 
power: supply: max17042: avoid overflow when determining health [+ + +]
Author: André Draszik <[email protected]>
Date:   Mon Mar 2 13:32:05 2026 +0000

    power: supply: max17042: avoid overflow when determining health
    
    commit 9a44949da669708f19d29141e65b3ac774d08f5a upstream.
    
    If vmax has the default value of INT_MAX (e.g. because not specified in
    DT), battery health is reported as over-voltage. This is because adding
    any value to vmax (the vmax tolerance in this case) causes it to wrap
    around, making it negative and smaller than the measured battery
    voltage.
    
    Avoid that by using size_add().
    
    Fixes: edd4ab055931 ("power: max17042_battery: add HEALTH and TEMP_* properties support")
    Cc: [email protected]
    Signed-off-by: André Draszik <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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]>

 
powerpc64/bpf: do not increment tailcall count when prog is NULL [+ + +]
Author: Hari Bathini <[email protected]>
Date:   Tue Mar 3 23:40:25 2026 +0530

    powerpc64/bpf: do not increment tailcall count when prog is NULL
    
    commit 521bd39d9d28ce54cbfec7f9b89c94ad4fdb8350 upstream.
    
    Do not increment tailcall count, if tailcall did not succeed due to
    missing BPF program.
    
    Fixes: ce0761419fae ("powerpc/bpf: Implement support for tail calls")
    Cc: [email protected]
    Tested-by: Venkat Rao Bagalkote <[email protected]>
    Signed-off-by: Hari Bathini <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    [ Conflicts due to missing clean up commits
        b10cb163c4b3 ("powerpc64/bpf elfv2: Setup kernel TOC in r2 on entry")
        49c3af43e65f ("powerpc/bpf:   Simplify bpf_to_ppc() and adopt it for powerpc64")
        036d559c0bde ("powerpc/bpf: Use _Rn macros for GPRs")
      and missing feature commit 2ed2d8f6fb38 ("powerpc64/bpf: Support
      tailcalls with subprogs") resolved accordingly. ]
    Signed-off-by: Hari Bathini <[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]>

 
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/mlx4: Fix resource leak on error in mlx4_ib_create_srq() [+ + +]
Author: Jason Gunthorpe <[email protected]>
Date:   Tue Apr 28 13:17:44 2026 -0300

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

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

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

 
RDMA/rxe: Reject unknown opcodes before ICRC processing [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Tue Apr 14 07:15:55 2026 -0400

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

RDMA/rxe: Validate pad and ICRC before payload_size() in rxe_rcv [+ + +]
Author: hkbinbin <[email protected]>
Date:   Wed Apr 1 12:19:07 2026 +0000

    RDMA/rxe: Validate pad and ICRC before payload_size() in rxe_rcv
    
    commit 7244491dab347f648e661da96dc0febadd9daec3 upstream.
    
    rxe_rcv() currently checks only that the incoming packet is at least
    header_size(pkt) bytes long before payload_size() is used.
    
    However, payload_size() subtracts both the attacker-controlled BTH pad
    field and RXE_ICRC_SIZE from pkt->paylen:
    
      payload_size = pkt->paylen - offset[RXE_PAYLOAD] - bth_pad(pkt)
                     - RXE_ICRC_SIZE
    
    This means a short packet can still make payload_size() underflow even
    if it includes enough bytes for the fixed headers. Simply requiring
    header_size(pkt) + RXE_ICRC_SIZE is not sufficient either, because a
    packet with a forged non-zero BTH pad can still leave payload_size()
    negative and pass an underflowed value to later receive-path users.
    
    Fix this by validating pkt->paylen against the full minimum length
    required by payload_size(): header_size(pkt) + bth_pad(pkt) +
    RXE_ICRC_SIZE.
    
    Cc: [email protected]
    Fixes: 8700e3e7c485 ("Soft RoCE driver")
    Link: https://patch.msgid.link/r/[email protected]
    Signed-off-by: hkbinbin <[email protected]>
    Reviewed-by: Zhu Yanjun <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
RDMA/siw: Reject MPA FPDU length underflow before signed receive math [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Wed May 13 13:53:24 2026 -0400

    RDMA/siw: Reject MPA FPDU length underflow before signed receive math
    
    commit 0ce1bc9e46ecabe84772bb561e373c0d9876d6f2 upstream.
    
    A malicious connected siw peer can send an iWARP FPDU whose MPA length
    field (c_hdr->mpa_len, 16 bit big-endian, peer-controlled) is smaller
    than the fixed DDP/RDMAP header for the announced opcode. Soft-iWARP
    parses the full header in siw_get_hdr() based on iwarp_pktinfo[opcode]
    .hdr_len, but never compares mpa_len against that header length.
    
    siw_tcp_rx_data() then derives
    
        srx->fpdu_part_rem = be16_to_cpu(mpa_len) - fpdu_part_rcvd
                             + MPA_HDR_SIZE;
    
    where fpdu_part_rcvd equals iwarp_pktinfo[opcode].hdr_len at this
    point. For a tagged WRITE (hdr_len 16, MPA_HDR_SIZE 2) the smallest
    on-wire mpa_len of 0 yields fpdu_part_rem = -14, and any mpa_len below
    hdr_len - MPA_HDR_SIZE underflows to a negative int.
    
    The signed value then flows into siw_proc_write()/siw_proc_rresp() as
    
        bytes = min(srx->fpdu_part_rem, srx->skb_new);
    
    is handed to siw_check_mem() as an int len (whose interval check
    addr + len > mem->va + mem->len is satisfied for a valid base when
    len is negative), and reaches siw_rx_data() -> siw_rx_kva() /
    siw_rx_umem() -> skb_copy_bits() as a signed copy length. The header
    copy branch in skb_copy_bits() promotes that to size_t, producing a
    multi-gigabyte read.
    
    KASAN under a KUnit harness that drives the real kernel TCP receive
    path -- a loopback AF_INET socketpair, the malformed FPDU written via
    kernel_sendmsg, sk_data_ready firing in softirq, tcp_read_sock
    dispatching to siw_tcp_rx_data -- reports:
    
        BUG: KASAN: use-after-free in skb_copy_bits+0x284/0x480
        Read of size 4294967295 at addr ffff888...
        Call Trace:
         skb_copy_bits
         siw_rx_kva
         siw_rx_data
         siw_check_mem
         siw_proc_write
         siw_tcp_rx_data
         __tcp_read_sock
         siw_qp_llp_data_ready
         tcp_data_ready
         tcp_data_queue
    
    Add the missing invariant at the earliest point where the peer header
    is fully assembled. iwarp_pktinfo[*].hdr_len - MPA_HDR_SIZE is exactly
    the value the siw transmitter uses as the minimum mpa_len for each
    opcode (drivers/infiniband/sw/siw/siw_qp.c:33), so this matches the
    protocol contract. Out-of-range FPDUs terminate the connection with
    TERM_ERROR_LAYER_LLP / LLP_ETYPE_MPA / LLP_ECODE_FPDU_START -- which
    is RFC 5044 Section 8 error code 3 ("Marker and ULPDU Length fields
    do not agree on the start of an FPDU"), the correct framing-error
    class for this inconsistency.
    
    Fixes: 8b6a361b8c48 ("rdma/siw: receive path")
    Link: https://patch.msgid.link/r/[email protected]
    Cc: [email protected]
    Signed-off-by: Michael Bommarito <[email protected]>
    Assisted-by: Claude:claude-opus-4-7
    Acked-by: Bernard Metzler <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

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

 
regulator: act8945a: fix OF node reference imbalance [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Wed Apr 8 09:30:54 2026 +0200

    regulator: act8945a: fix OF node reference imbalance
    
    commit 0d15ce31375ccef4162f960b34547a821b7619d2 upstream.
    
    The driver reuses the OF node of the parent multi-function device but
    fails to take another reference to balance the one dropped by the
    platform bus code when unbinding the MFD and deregistering the child
    devices.
    
    Fix this by using the intended helper for reusing OF nodes.
    
    Fixes: 38c09961048b ("regulator: act8945a: add regulator driver for ACT8945A")
    Cc: [email protected]      # 4.6
    Cc: Wenyou Yang <[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: Greg Kroah-Hartman <[email protected]>

regulator: max77650: fix OF node reference imbalance [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Wed Apr 8 09:30:51 2026 +0200

    regulator: max77650: fix OF node reference imbalance
    
    commit 2edaf5f7ada0ab5c9ec1f0836bd19779a8d85262 upstream.
    
    The driver reuses the OF node of the parent multi-function device but
    fails to take another reference to balance the one dropped by the
    platform bus code when unbinding the MFD and deregistering the child
    devices.
    
    Fix this by using the intended helper for reusing OF nodes.
    
    Fixes: bcc61f1c44fd ("regulator: max77650: add regulator support")
    Cc: [email protected]      # 5.1
    Reviewed-by: Bartosz Golaszewski <[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: Greg Kroah-Hartman <[email protected]>

 
Revert "ALSA: usb: Increase volume range that triggers a warning" [+ + +]
Author: Rong Zhang <[email protected]>
Date:   Wed Mar 4 03:47:56 2026 +0800

    Revert "ALSA: usb: Increase volume range that triggers a warning"
    
    commit 41d78cb724f4b40b7548af420ccfe524b14023bb upstream.
    
    UAC uses 2 bytes to store volume values, so the maximum volume range is
    0xFFFF (65535, val = -32768/32767/1).
    
    The reverted commit bumpped the range of triggering the warning to >
    65535, effectively making the range check a no-op. It didn't fix
    anything but covered any potential problems and deviated from the
    original intention of the range check.
    
    This reverts commit 6b971191fcfc9e3c2c0143eea22534f1f48dbb62.
    
    Fixes: 6b971191fcfc ("ALSA: usb: Increase volume range that triggers a warning")
    Cc: [email protected]
    Signed-off-by: Rong Zhang <[email protected]>
    Acked-by: Arun Raghavan <[email protected]>
    Signed-off-by: Takashi Iwai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "arm64: dts: imx8mq-librem5: Set the DVS voltages lower" [+ + +]
Author: Sebastian Krzyszkowiak <[email protected]>
Date:   Mon Apr 13 10:58:03 2026 -0400

    Revert "arm64: dts: imx8mq-librem5: Set the DVS voltages lower"
    
    [ Upstream commit 4cd46ea0eb4504f7f4fea92cb4601c5c9a3e545e ]
    
    This reverts commit c24a9b698fb02cd0723fa8375abab07f94b97b10.
    
    It's been found that there's a significant per-unit variance in accepted
    supply voltages and the current set still makes some units unstable.
    
    Revert back to nominal values.
    
    Cc: [email protected]
    Fixes: c24a9b698fb0 ("arm64: dts: imx8mq-librem5: Set the DVS voltages lower")
    Signed-off-by: Sebastian Krzyszkowiak <[email protected]>
    Signed-off-by: Frank Li <[email protected]>
    Stable-dep-of: 511f76bf1dce ("arm64: dts: imx8mq-librem5: Bump BUCK1 suspend voltage up to 0.85V")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "riscv: Sparse-Memory/vmemmap out-of-bounds fix" [+ + +]
Author: Sasha Levin <[email protected]>
Date:   Mon Apr 27 12:07:55 2026 -0400

    Revert "riscv: Sparse-Memory/vmemmap out-of-bounds fix"
    
    This reverts commit 8af1c121b0102041809bc137ec600d1865eaeedd.
    
    Signed-off-by: Sasha Levin <[email protected]>

 
Revert "s390/cio: Fix device lifecycle handling in css_alloc_subchannel()" [+ + +]
Author: Ben Hutchings <[email protected]>
Date:   Tue May 26 11:56:02 2026 +0200

    Revert "s390/cio: Fix device lifecycle handling in css_alloc_subchannel()"
    
    This reverts commit 2b2ad7ad4a28ffdb9f94e6d979b88a5b12b71681, which
    was commit f65c75b0b9b5a390bc3beadcde0a6fbc3ad118f7 upstream.  The
    order of initialisation and error paths in this function are
    substantially different in 5.10 and this backport did not take that
    into account.
    
    Signed-off-by: Ben Hutchings <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Revert "scsi: ufs: core: Improve SCSI abort handling" [+ + +]
Author: Sasha Levin <[email protected]>
Date:   Thu Apr 23 09:50:40 2026 -0400

    Revert "scsi: ufs: core: Improve SCSI abort handling"
    
    This reverts commit 133811fbc1cc171477281c829eb5fd567f013ba7.
    
    Signed-off-by: Sasha Levin <[email protected]>

 
Revert "wifi: cfg80211: stop NAN and P2P in cfg80211_leave" [+ + +]
Author: Guocai He <[email protected]>
Date:   Tue Apr 14 12:03:49 2026 +0800

    Revert "wifi: cfg80211: stop NAN and P2P in cfg80211_leave"
    
    This reverts commit d91240f24e831d3bd36954599ada6b456fb1bd0a which is commit
    e1696c8bd0056bc1a5f7766f58ac333adc203e8a upstream.
    
    The reverted patch introduced a deadlock. The locking situation in mainline is
    totally different, so it is incorrect to directly backport the commit from mainline.
    
    Signed-off-by: Guocai He <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Revert "x86/vdso: Fix output operand size of RDPID" [+ + +]
Author: Sasha Levin <[email protected]>
Date:   Sun May 24 10:02:23 2026 -0400

    Revert "x86/vdso: Fix output operand size of RDPID"
    
    This reverts commit f097ba74116fce394160c919bb2039b60fc64159.
    
    Signed-off-by: Sasha Levin <[email protected]>

 
ring-buffer: Fix reporting of missed events in iterator [+ + +]
Author: Steven Rostedt <[email protected]>
Date:   Wed May 20 22:08:01 2026 -0400

    ring-buffer: Fix reporting of missed events in iterator
    
    commit a254b6d13b0edd6272926674d2afc46d46e496b7 upstream.
    
    When tracing is active while reading the trace file, if the iterator
    reading the buffer detects that the writer has passed the iterator head,
    it will reset and set a "missed events" flag. This flag is passed to the
    output processing to show the user that events were missed:
    
      CPU:4 [LOST EVENTS]
    
    The problem is that the flag is reset after it is checked in
    ring_buffer_iter_dropped(). But the "trace" file iterates over all the CPU
    ring buffers and it will check if they are dropped when figuring out which
    buffer to print next. This prematurely clears the missed_events flag if
    the CPU buffer with the missed events is not the one that is printed next.
    
    On the iteration where the CPU buffer with the missed events is printed,
    the check if it had missed events would return false and the output does
    not show that events were missed.
    
    Do not reset the missed_events flag when checking if there were missed
    events, but instead clear it when moving the iterator head to the next
    event.
    
    Cc: [email protected]
    Cc: Mathieu Desnoyers <[email protected]>
    Link: https://patch.msgid.link/20260520220801.4fd09d13@fedora
    Fixes: c9b7a4a72ff64 ("ring-buffer/tracing: Have iterator acknowledge dropped events")
    Acked-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Steven Rostedt <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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]>

rtc: allow rtc_read_alarm without read_alarm callback [+ + +]
Author: Alexandre Belloni <[email protected]>
Date:   Tue Feb 14 23:27:53 2023 +0100

    rtc: allow rtc_read_alarm without read_alarm callback
    
    [ Upstream commit a783c962619271a8b905efad1d89adfec11ae0c8 ]
    
    .read_alarm is not necessary to read the current alarm because it is
    recorded in the aie_timer and so rtc_read_alarm() will never call
    rtc_read_alarm_internal() which is the only function calling the callback.
    
    Reported-by: Zhipeng Wang <[email protected]>
    Reported-by: Marcel Ziswiler <[email protected]>
    Fixes: 7ae41220ef58 ("rtc: introduce features bitfield")
    Tested-by: Philippe Schenker <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

rtc: introduce features bitfield [+ + +]
Author: Alexandre Belloni <[email protected]>
Date:   Mon Jan 11 00:17:36 2021 +0100

    rtc: introduce features bitfield
    
    [ Upstream commit 7ae41220ef5831674f446baef19bfe1b31358260 ]
    
    Introduce a bitfield to allow the drivers to announce the available
    features for an RTC.
    
    The main use case would be to better handle alarms, that could be present
    or not or have a minute resolution or may need a correct week day to be set.
    
    Use the newly introduced RTC_FEATURE_ALARM bit to then test whether alarms
    are available instead of relying on the presence of ops->set_alarm.
    
    Signed-off-by: Alexandre Belloni <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: 0fedce7244e4 ("rtc: abx80x: Disable alarm feature if no interrupt attached")
    Signed-off-by: Sasha Levin <[email protected]>

 
rxrpc: Fix anonymous key handling [+ + +]
Author: David Howells <[email protected]>
Date:   Mon Apr 13 20:36:56 2026 -0400

    rxrpc: Fix anonymous key handling
    
    [ Upstream commit 6a59d84b4fc2f27f7b40e348506cc686712e260b ]
    
    In rxrpc_new_client_call_for_sendmsg(), a key with no payload is meant to
    be substituted for a NULL key pointer, but the variable this is done with
    is subsequently not used.
    
    Fix this by using "key" rather than "rx->key" when filling in the
    connection parameters.
    
    Note that this only affects direct use of AF_RXRPC; the kAFS filesystem
    doesn't use sendmsg() directly and so bypasses the issue.  Further,
    AF_RXRPC passes a NULL key in if no key is set, so using an anonymous key
    in that manner works.  Since this hasn't been noticed to this point, it
    might be better just to remove the "key" variable and the code that sets it
    - and, arguably, rxrpc_init_client_call_security() would be a better place
    to handle it.
    
    Fixes: 19ffa01c9c45 ("rxrpc: Use structs to hold connection params and protocol info")
    Closes: https://sashiko.dev/#/patchset/20260319150150.4189381-1-dhowells%40redhat.com
    Signed-off-by: David Howells <[email protected]>
    cc: Marc Dionne <[email protected]>
    cc: Jeffrey Altman <[email protected]>
    cc: Simon Horman <[email protected]>
    cc: [email protected]
    cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

rxrpc: Fix call removal to use RCU safe deletion [+ + +]
Author: David Howells <[email protected]>
Date:   Tue Apr 14 07:22:02 2026 -0400

    rxrpc: Fix call removal to use RCU safe deletion
    
    [ Upstream commit 146d4ab94cf129ee06cd467cb5c71368a6b5bad6 ]
    
    Fix rxrpc call removal from the rxnet->calls list to use list_del_rcu()
    rather than list_del_init() to prevent stuffing up reading
    /proc/net/rxrpc/calls from potentially getting into an infinite loop.
    
    This, however, means that list_empty() no longer works on an entry that's
    been deleted from the list, making it harder to detect prior deletion.  Fix
    this by:
    
    Firstly, make rxrpc_destroy_all_calls() only dump the first ten calls that
    are unexpectedly still on the list.  Limiting the number of steps means
    there's no need to call cond_resched() or to remove calls from the list
    here, thereby eliminating the need for rxrpc_put_call() to check for that.
    
    rxrpc_put_call() can then be fixed to unconditionally delete the call from
    the list as it is the only place that the deletion occurs.
    
    Fixes: 2baec2c3f854 ("rxrpc: Support network namespacing")
    Closes: https://sashiko.dev/#/patchset/20260319150150.4189381-1-dhowells%40redhat.com
    Signed-off-by: David Howells <[email protected]>
    cc: Marc Dionne <[email protected]>
    cc: Jeffrey Altman <[email protected]>
    cc: Linus Torvalds <[email protected]>
    cc: Simon Horman <[email protected]>
    cc: [email protected]
    cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ adapted spin_lock/spin_unlock to write_lock/write_unlock ]
    Signed-off-by: Sasha Levin <[email protected]>

rxrpc: Fix missing validation of ticket length in non-XDR key preparsing [+ + +]
Author: Anderson Nascimento <[email protected]>
Date:   Wed Apr 22 17:14:35 2026 +0100

    rxrpc: Fix missing validation of ticket length in non-XDR key preparsing
    
    commit ac33733b10b484d666f97688561670afd5861383 upstream.
    
    In rxrpc_preparse(), there are two paths for parsing key payloads: the
    XDR path (for large payloads) and the non-XDR path (for payloads <= 28
    bytes). While the XDR path (rxrpc_preparse_xdr_rxkad()) correctly
    validates the ticket length against AFSTOKEN_RK_TIX_MAX, the non-XDR
    path fails to do so.
    
    This allows an unprivileged user to provide a very large ticket length.
    When this key is later read via rxrpc_read(), the total
    token size (toksize) calculation results in a value that exceeds
    AFSTOKEN_LENGTH_MAX, triggering a WARN_ON().
    
    [ 2001.302904] WARNING: CPU: 2 PID: 2108 at net/rxrpc/key.c:778 rxrpc_read+0x109/0x5c0 [rxrpc]
    
    Fix this by adding a check in the non-XDR parsing path of rxrpc_preparse()
    to ensure the ticket length does not exceed AFSTOKEN_RK_TIX_MAX,
    bringing it into parity with the XDR parsing logic.
    
    Fixes: 8a7a3eb4ddbe ("KEYS: RxRPC: Use key preparsing")
    Fixes: 84924aac08a4 ("rxrpc: Fix checker warning")
    Reported-by: Anderson Nascimento <[email protected]>
    Signed-off-by: Anderson Nascimento <[email protected]>
    Signed-off-by: David Howells <[email protected]>
    cc: Marc Dionne <[email protected]>
    cc: Jeffrey Altman <[email protected]>
    cc: Simon Horman <[email protected]>
    cc: [email protected]
    cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

rxrpc: Fix recvmsg() unconditional requeue [+ + +]
Author: David Howells <[email protected]>
Date:   Wed Apr 22 22:24:32 2026 +0000

    rxrpc: Fix recvmsg() unconditional requeue
    
    [ Upstream commit 2c28769a51deb6022d7fbd499987e237a01dd63a ]
    
    If rxrpc_recvmsg() fails because MSG_DONTWAIT was specified but the call
    at the front of the recvmsg queue already has its mutex locked, it
    requeues the call - whether or not the call is already queued.  The call
    may be on the queue because MSG_PEEK was also passed and so the call was
    not dequeued or because the I/O thread requeued it.
    
    The unconditional requeue may then corrupt the recvmsg queue, leading to
    things like UAFs or refcount underruns.
    
    Fix this by only requeuing the call if it isn't already on the queue -
    and moving it to the front if it is already queued.  If we don't queue
    it, we have to put the ref we obtained by dequeuing it.
    
    Also, MSG_PEEK doesn't dequeue the call so shouldn't call
    rxrpc_notify_socket() for the call if we didn't use up all the data on
    the queue, so fix that also.
    
    Fixes: 540b1c48c37a ("rxrpc: Fix deadlock between call creation and sendmsg/recvmsg")
    Reported-by: Faith <[email protected]>
    Reported-by: Pumpkin Chang <[email protected]>
    Signed-off-by: David Howells <[email protected]>
    Acked-by: Marc Dionne <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Cc: [email protected]
    [Adapted to 5.10: use write_lock_bh/write_unlock_bh, trace_rxrpc_call
     directly for see-call tracing, 5.10 trace enum naming convention, and
     added entries to both plain enum and EM() macro list.]
    Signed-off-by: Jay Wang <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

rxrpc: fix reference count leak in rxrpc_server_keyring() [+ + +]
Author: Luxiao Xu <[email protected]>
Date:   Mon Apr 13 21:19:03 2026 -0400

    rxrpc: fix reference count leak in rxrpc_server_keyring()
    
    [ Upstream commit f125846ee79fcae537a964ce66494e96fa54a6de ]
    
    This patch fixes a reference count leak in rxrpc_server_keyring()
    by checking if rx->securities is already set.
    
    Fixes: 17926a79320a ("[AF_RXRPC]: Provide secure RxRPC sockets for use by userspace and kernel both")
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Co-developed-by: Yuan Tan <[email protected]>
    Signed-off-by: Yuan Tan <[email protected]>
    Suggested-by: Xin Liu <[email protected]>
    Tested-by: Ren Wei <[email protected]>
    Signed-off-by: Luxiao Xu <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: David Howells <[email protected]>
    cc: Marc Dionne <[email protected]>
    cc: Simon Horman <[email protected]>
    cc: [email protected]
    cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ applied patch to net/rxrpc/key.c instead of net/rxrpc/server_key.c ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

rxrpc: only handle RESPONSE during service challenge [+ + +]
Author: Wang Jie <[email protected]>
Date:   Tue Apr 14 07:56:13 2026 -0400

    rxrpc: only handle RESPONSE during service challenge
    
    [ Upstream commit c43ffdcfdbb5567b1f143556df8a04b4eeea041c ]
    
    Only process RESPONSE packets while the service connection is still in
    RXRPC_CONN_SERVICE_CHALLENGING. Check that state under state_lock before
    running response verification and security initialization, then use a local
    secured flag to decide whether to queue the secured-connection work after
    the state transition. This keeps duplicate or late RESPONSE packets from
    re-running the setup path and removes the unlocked post-transition state
    test.
    
    Fixes: 17926a79320a ("[AF_RXRPC]: Provide secure RxRPC sockets for use by userspace and kernel both")
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Co-developed-by: Yuan Tan <[email protected]>
    Signed-off-by: Yuan Tan <[email protected]>
    Suggested-by: Xin Liu <[email protected]>
    Signed-off-by: Jie Wang <[email protected]>
    Signed-off-by: Yang Yang <[email protected]>
    Signed-off-by: David Howells <[email protected]>
    cc: Marc Dionne <[email protected]>
    cc: Jeffrey Altman <[email protected]>
    cc: Simon Horman <[email protected]>
    cc: [email protected]
    cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ adapted to spin_lock_bh usage, 3-arg verify_response(), and direct rxrpc_call_is_secure() ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

rxrpc: proc: size address buffers for %pISpc output [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Tue Apr 14 11:26:31 2026 -0400

    rxrpc: proc: size address buffers for %pISpc output
    
    [ Upstream commit a44ce6aa2efb61fe44f2cfab72bb01544bbca272 ]
    
    The AF_RXRPC procfs helpers format local and remote socket addresses into
    fixed 50-byte stack buffers with "%pISpc".
    
    That is too small for the longest current-tree IPv6-with-port form the
    formatter can produce. In lib/vsprintf.c, the compressed IPv6 path uses a
    dotted-quad tail not only for v4mapped addresses, but also for ISATAP
    addresses via ipv6_addr_is_isatap().
    
    As a result, a case such as
    
      [ffff:ffff:ffff:ffff:0:5efe:255.255.255.255]:65535
    
    is possible with the current formatter. That is 50 visible characters, so
    51 bytes including the trailing NUL, which does not fit in the existing
    char[50] buffers used by net/rxrpc/proc.c.
    
    Size the buffers from the formatter's maximum textual form and switch the
    call sites to scnprintf().
    
    Changes since v1:
    - correct the changelog to cite the actual maximum current-tree case
      explicitly
    - frame the proof around the ISATAP formatting path instead of the earlier
      mapped-v4 example
    
    Fixes: 75b54cb57ca3 ("rxrpc: Add IPv6 support")
    Signed-off-by: Pengpeng Hou <[email protected]>
    Signed-off-by: David Howells <[email protected]>
    cc: Marc Dionne <[email protected]>
    cc: Anderson Nascimento <[email protected]>
    cc: Simon Horman <[email protected]>
    cc: [email protected]
    cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ adapted address accessors and variable declarations ]
    Signed-off-by: Sasha Levin <[email protected]>

rxrpc: reject undecryptable rxkad response tickets [+ + +]
Author: Yuqi Xu <[email protected]>
Date:   Tue Apr 14 08:05:14 2026 -0400

    rxrpc: reject undecryptable rxkad response tickets
    
    [ Upstream commit fe4447cd95623b1cfacc15f280aab73a6d7340b2 ]
    
    rxkad_decrypt_ticket() decrypts the RXKAD response ticket and then
    parses the buffer as plaintext without checking whether
    crypto_skcipher_decrypt() succeeded.
    
    A malformed RESPONSE can therefore use a non-block-aligned ticket
    length, make the decrypt operation fail, and still drive the ticket
    parser with attacker-controlled bytes.
    
    Check the decrypt result and abort the connection with RXKADBADTICKET
    when ticket decryption fails.
    
    Fixes: 17926a79320a ("[AF_RXRPC]: Provide secure RxRPC sockets for use by userspace and kernel both")
    Reported-by: Yifan Wu <[email protected]>
    Reported-by: Juefei Pu <[email protected]>
    Co-developed-by: Yuan Tan <[email protected]>
    Signed-off-by: Yuan Tan <[email protected]>
    Suggested-by: Xin Liu <[email protected]>
    Tested-by: Ren Wei <[email protected]>
    Signed-off-by: Yuqi Xu <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: David Howells <[email protected]>
    cc: Marc Dionne <[email protected]>
    cc: Simon Horman <[email protected]>
    cc: [email protected]
    cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ adapted `rxrpc_abort_conn()` call to existing `goto other_error` error-handling pattern ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
s390/debug: Reject zero-length input before trimming a newline [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Thu May 21 10:28:49 2026 +0800

    s390/debug: Reject zero-length input before trimming a newline
    
    [ Upstream commit c366a7b5ed7564e41345c380285bd3f6cb98971b ]
    
    debug_get_user_string() copies the userspace buffer into a newly
    allocated NUL-terminated buffer and then unconditionally looks at
    buffer[user_len - 1] to strip a trailing newline.
    
    A zero-length write reaches this helper unchanged, so the newline trim
    reads before the start of the allocated buffer.
    
    Reject empty writes before accessing the last input byte.
    
    Fixes: 66a464dbc8e0 ("[PATCH] s390: debug feature changes")
    Cc: [email protected]
    Signed-off-by: Pengpeng Hou <[email protected]>
    Reviewed-by: Benjamin Block <[email protected]>
    Reviewed-by: Vasily Gorbik <[email protected]>
    Tested-by: Vasily Gorbik <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vasily Gorbik <[email protected]>
    Signed-off-by: Alexander Gordeev <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

s390/debug: Reject zero-length input in debug_input_flush_fn() [+ + +]
Author: Vasily Gorbik <[email protected]>
Date:   Fri Apr 17 14:33:43 2026 +0200

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

 
scripts/dtc: Remove unused dts_version in dtc-lexer.l [+ + +]
Author: Nathan Chancellor <[email protected]>
Date:   Mon Apr 20 17:36:46 2026 -0700

    scripts/dtc: Remove unused dts_version in dtc-lexer.l
    
    This patch is for stable only. Commit 5a09df20872c ("scripts/dtc: Update
    to upstream version v1.7.2-69-g53373d135579") upstream applied it as
    part of a regular scripts/dtc sync, which may be unsuitable for older
    versions of stable where the warning it fixes is present.
    
    A recent strengthening of -Wunused-but-set-variable (enabled with -Wall)
    in clang under a new subwarning, -Wunused-but-set-global, points out an
    unused static global variable in dtc-lexer.lex.c (compiled from
    dtc-lexer.l):
    
      scripts/dtc/dtc-lexer.lex.c:641:12: warning: variable 'dts_version' set but not used [-Wunused-but-set-global]
        641 | static int dts_version = 1;
            |            ^
    
    Remove it to clear up the warning, as it is truly unused.
    
    Fixes: 658f29a51e98 ("of/flattree: Update dtc to current mainline.")
    Signed-off-by: Nathan Chancellor <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
scsi: isci: Fix use-after-free in device removal path [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Sun Apr 19 17:04:20 2026 -0400

    scsi: isci: Fix use-after-free in device removal path
    
    commit b52a8d52c3125ec9a93106ed816582368de34426 upstream.
    
    The ISCI completion tasklet is initialized in isci_host_alloc()
    (drivers/scsi/isci/init.c:496) and scheduled from both MSI-X and legacy
    interrupt handlers (drivers/scsi/isci/host.c:223,613).
    
    isci_host_deinit() stops the controller and waits for stop completion,
    but it never kills completion_tasklet before teardown continues. A
    top-of-function tasklet_kill() is not sufficient here: interrupts are
    only disabled when isci_host_stop_complete() runs, so until
    wait_for_stop() returns the IRQ handlers can still requeue the
    tasklet. The tasklet callback also re-enables interrupts after draining
    completions, so killing the tasklet before the source is quiesced leaves
    the same race open.
    
    Once wait_for_stop() returns, no further IRQ-driven scheduling can
    occur. Kill completion_tasklet there so teardown cannot race a queued
    tasklet running on a dead ihost. On remove or unload, the stale callback
    can otherwise dereference ihost and touch ihost->smu_registers after the
    host lifetime ends.
    
    A UML + KASAN analogue reproduced the failure class both with no
    tasklet_kill() and with tasklet_kill() placed before source quiesce, and
    stayed clean once the kill happened after quiescing the scheduling
    source.
    
    This mirrors commit f6ab594672d4 ("scsi: aic94xx: fix use-after-free in
    device removal path"), but ISCI needs the kill after wait_for_stop().
    
    Fixes: 6f231dda6808 ("isci: Intel(R) C600 Series Chipset Storage Control Unit Driver")
    Cc: [email protected]
    Assisted-by: Claude:claude-opus-4-7
    Assisted-by: Codex:gpt-5-4
    Signed-off-by: Michael Bommarito <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: qla2xxx: Fix crash when I/O abort times out [+ + +]
Author: Arun Easi <[email protected]>
Date:   Tue Apr 21 16:23:27 2026 +0300

    scsi: qla2xxx: Fix crash when I/O abort times out
    
    commit 68ad83188d782b2ecef2e41ac245d27e0710fe8e upstream.
    
    While performing CPU hotplug, a crash with the following stack was seen:
    
    Call Trace:
         qla24xx_process_response_queue+0x42a/0x970 [qla2xxx]
         qla2x00_start_nvme_mq+0x3a2/0x4b0 [qla2xxx]
         qla_nvme_post_cmd+0x166/0x240 [qla2xxx]
         nvme_fc_start_fcp_op.part.0+0x119/0x2e0 [nvme_fc]
         blk_mq_dispatch_rq_list+0x17b/0x610
         __blk_mq_sched_dispatch_requests+0xb0/0x140
         blk_mq_sched_dispatch_requests+0x30/0x60
         __blk_mq_run_hw_queue+0x35/0x90
         __blk_mq_delay_run_hw_queue+0x161/0x180
         blk_execute_rq+0xbe/0x160
         __nvme_submit_sync_cmd+0x16f/0x220 [nvme_core]
         nvmf_connect_admin_queue+0x11a/0x170 [nvme_fabrics]
         nvme_fc_create_association.cold+0x50/0x3dc [nvme_fc]
         nvme_fc_connect_ctrl_work+0x19/0x30 [nvme_fc]
         process_one_work+0x1e8/0x3c0
    
    On abort timeout, completion was called without checking if the I/O was
    already completed.
    
    Verify that I/O and abort request are indeed outstanding before attempting
    completion.
    
    Fixes: 71c80b75ce8f ("scsi: qla2xxx: Do command completion on abort timeout")
    Reported-by: Marco Patalano <[email protected]>
    Tested-by: Marco Patalano <[email protected]>
    Cc: [email protected]
    Signed-off-by: Arun Easi <[email protected]>
    Signed-off-by: Nilesh Javali <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    [ kovalev: bp to fix CVE-2022-50493 ]
    Signed-off-by: Vasiliy Kovalev <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: qla2xxx: Fix warning message due to adisc being flushed [+ + +]
Author: Quinn Tran <[email protected]>
Date:   Tue Apr 21 16:23:26 2026 +0300

    scsi: qla2xxx: Fix warning message due to adisc being flushed
    
    commit 64f24af75b79cba3b86b0760e27e0fa904db570f upstream.
    
    Fix warning message due to adisc being flushed.  Linux kernel triggered a
    warning message where a different error code type is not matching up with
    the expected type. Add additional translation of one error code type to
    another.
    
    WARNING: CPU: 2 PID: 1131623 at drivers/scsi/qla2xxx/qla_init.c:498
    qla2x00_async_adisc_sp_done+0x294/0x2b0 [qla2xxx]
    CPU: 2 PID: 1131623 Comm: drmgr Not tainted 5.13.0-rc1-autotest #1
    ..
    GPR28: c000000aaa9c8890 c0080000079ab678 c00000140a104800 c00000002bd19000
    NIP [c00800000790857c] qla2x00_async_adisc_sp_done+0x294/0x2b0 [qla2xxx]
    LR [c008000007908578] qla2x00_async_adisc_sp_done+0x290/0x2b0 [qla2xxx]
    Call Trace:
    [c00000001cdc3620] [c008000007908578] qla2x00_async_adisc_sp_done+0x290/0x2b0 [qla2xxx] (unreliable)
    [c00000001cdc3710] [c0080000078f3080] __qla2x00_abort_all_cmds+0x1b8/0x580 [qla2xxx]
    [c00000001cdc3840] [c0080000078f589c] qla2x00_abort_all_cmds+0x34/0xd0 [qla2xxx]
    [c00000001cdc3880] [c0080000079153d8] qla2x00_abort_isp_cleanup+0x3f0/0x570 [qla2xxx]
    [c00000001cdc3920] [c0080000078fb7e8] qla2x00_remove_one+0x3d0/0x480 [qla2xxx]
    [c00000001cdc39b0] [c00000000071c274] pci_device_remove+0x64/0x120
    [c00000001cdc39f0] [c0000000007fb818] device_release_driver_internal+0x168/0x2a0
    [c00000001cdc3a30] [c00000000070e304] pci_stop_bus_device+0xb4/0x100
    [c00000001cdc3a70] [c00000000070e4f0] pci_stop_and_remove_bus_device+0x20/0x40
    [c00000001cdc3aa0] [c000000000073940] pci_hp_remove_devices+0x90/0x130
    [c00000001cdc3b30] [c0080000070704d0] disable_slot+0x38/0x90 [rpaphp] [
    c00000001cdc3b60] [c00000000073eb4c] power_write_file+0xcc/0x180
    [c00000001cdc3be0] [c0000000007354bc] pci_slot_attr_store+0x3c/0x60
    [c00000001cdc3c00] [c00000000055f820] sysfs_kf_write+0x60/0x80 [c00000001cdc3c20]
    [c00000000055df10] kernfs_fop_write_iter+0x1a0/0x290
    [c00000001cdc3c70] [c000000000447c4c] new_sync_write+0x14c/0x1d0
    [c00000001cdc3d10] [c00000000044b134] vfs_write+0x224/0x330
    [c00000001cdc3d60] [c00000000044b3f4] ksys_write+0x74/0x130
    [c00000001cdc3db0] [c00000000002df70] system_call_exception+0x150/0x2d0
    [c00000001cdc3e10] [c00000000000d45c] system_call_common+0xec/0x278
    
    Link: https://lore.kernel.org/r/[email protected]
    Cc: [email protected]
    Reported-by: Abdul Haleem <[email protected]>
    Reviewed-by: Himanshu Madhani <[email protected]>
    Signed-off-by: Quinn Tran <[email protected]>
    Signed-off-by: Nilesh Javali <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    [ kovalev: bp to fix CVE-2022-49158; in qla2x00_async_prli_sp_done used
      'if (res)' instead of 'else if (res)' due to the older kernel not having
      the preceding QLA_OS_TIMER_EXPIRED check (see upstream commit 4de067e5df12) ]
    Signed-off-by: Vasiliy Kovalev <[email protected]>
    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: sr: Add memory allocation failure handling for get_capabilities() [+ + +]
Author: Enze Li <[email protected]>
Date:   Wed Apr 27 10:56:47 2022 +0800

    scsi: sr: Add memory allocation failure handling for get_capabilities()
    
    [ Upstream commit ebc95c790653508ad7e031cfb9de5d0fa39135e2 ]
    
    The function get_capabilities() has the possibility of failing to allocate
    the transfer buffer but it does not currently handle this. This may lead to
    exceptions when accessing the buffer.
    
    Add error handling when memory allocation fails.
    
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Enze Li <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Stable-dep-of: 0898a817621a ("cdrom, scsi: sr: propagate read-only status to block layer via set_disk_ro()")
    Signed-off-by: Sasha Levin <[email protected]>

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

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

scsi: ufs: core: Improve SCSI abort handling [+ + +]
Author: Bart Van Assche <[email protected]>
Date:   Tue Apr 21 16:19:41 2026 +0300

    scsi: ufs: core: Improve SCSI abort handling
    
    commit 3ff1f6b6ba6f97f50862aa50e79959cc8ddc2566 upstream.
    
    The following has been observed on a test setup:
    
    WARNING: CPU: 4 PID: 250 at drivers/scsi/ufs/ufshcd.c:2737 ufshcd_queuecommand+0x468/0x65c
    Call trace:
     ufshcd_queuecommand+0x468/0x65c
     scsi_send_eh_cmnd+0x224/0x6a0
     scsi_eh_test_devices+0x248/0x418
     scsi_eh_ready_devs+0xc34/0xe58
     scsi_error_handler+0x204/0x80c
     kthread+0x150/0x1b4
     ret_from_fork+0x10/0x30
    
    That warning is triggered by the following statement:
    
            WARN_ON(lrbp->cmd);
    
    Fix this warning by clearing lrbp->cmd from the abort handler.
    
    Link: https://lore.kernel.org/r/[email protected]
    Fixes: 7a3e97b0dc4b ("[SCSI] ufshcd: UFS Host controller driver")
    Reviewed-by: Bean Huo <[email protected]>
    Reviewed-by: Stanley Chu <[email protected]>
    Signed-off-by: Bart Van Assche <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    [ kovalev: bp to fix CVE-2021-47188; adapted placement of
      lrbp->cmd = NULL for 5.10 function structure ]
    Signed-off-by: Vasiliy Kovalev <[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 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]>

sctp: revalidate list cursor after sctp_sendmsg_to_asoc() in SCTP_SENDALL [+ + +]
Author: Ben Morris <[email protected]>
Date:   Thu May 7 17:14:55 2026 -0700

    sctp: revalidate list cursor after sctp_sendmsg_to_asoc() in SCTP_SENDALL
    
    commit abb5f36771cc4c05899b34000829a787572a8817 upstream.
    
    The SCTP_SENDALL path in sctp_sendmsg() iterates ep->asocs with
    list_for_each_entry_safe(), which caches the next entry in @tmp before
    the loop body runs.  The body calls sctp_sendmsg_to_asoc(), which may
    drop the socket lock inside sctp_wait_for_sndbuf().
    
    While the lock is dropped, another thread can SCTP_SOCKOPT_PEELOFF the
    association cached in @tmp, migrating it to a new endpoint via
    sctp_sock_migrate() (list_del_init() + list_add_tail() to
    newep->asocs), and optionally close the new socket which frees the
    association via kfree_rcu().  The cached @tmp can also be freed by a
    network ABORT for that association, processed in softirq while the
    lock is dropped.
    
    sctp_wait_for_sndbuf() revalidates @asoc (the current entry) on re-lock
    via the "sk != asoc->base.sk" and "asoc->base.dead" checks, but nothing
    revalidates @tmp.  After a successful return, the iterator advances to
    the stale @tmp, yielding either a use-after-free (if the peeled socket
    was closed) or a list-walk onto the new endpoint's list head (type
    confusion of &newep->asocs as a struct sctp_association *).
    
    Both are reachable from CapEff=0; the type-confusion path gives
    controlled indirect call via the outqueue.sched->init_sid pointer.
    
    Fix by re-deriving @tmp from @asoc after sctp_sendmsg_to_asoc()
    returns.  @asoc is known to still be on ep->asocs at that point: the
    only callers that list_del an association from ep->asocs are
    sctp_association_free() (which sets asoc->base.dead) and
    sctp_assoc_migrate() (which changes asoc->base.sk), and
    sctp_wait_for_sndbuf() checks both under the lock before any
    successful return; a tripped check propagates as err < 0 and the loop
    bails before the re-derive.
    
    The SCTP_ABORT path in sctp_sendmsg_check_sflags() returns 0 and the
    loop hits 'continue' before sctp_sendmsg_to_asoc() is ever called, so
    the @tmp cached by list_for_each_entry_safe() still covers the
    lock-held free that ba59fb027307 ("sctp: walk the list of asoc
    safely") was added for.
    
    Fixes: 4910280503f3 ("sctp: add support for snd flag SCTP_SENDALL process in sendmsg")
    Cc: [email protected]
    Signed-off-by: Ben Morris <[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: Greg Kroah-Hartman <[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/mqueue: Fix incorrectly named file [+ + +]
Author: Simon Liebold <[email protected]>
Date:   Thu Mar 12 14:02:00 2026 +0000

    selftests/mqueue: Fix incorrectly named file
    
    commit 64fac99037689020ad97e472ae898e96ea3616dc upstream.
    
    Commit 85506aca2eb4 ("selftests/mqueue: Set timeout to 180 seconds")
    intended to increase the timeout for mq_perf_tests from the default
    kselftest limit of 45 seconds to 180 seconds.
    
    Unfortunately, the file storing this information was incorrectly named
    `setting` instead of `settings`, causing the kselftest runner not to
    pick up the limit and keep using the default 45 seconds limit.
    
    Fix this by renaming it to `settings` to ensure that the kselftest
    runner uses the increased timeout of 180 seconds for this test.
    
    Fixes: 85506aca2eb4 ("selftests/mqueue: Set timeout to 180 seconds")
    Cc: <[email protected]> # 5.10.y
    Signed-off-by: Simon Liebold <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Shuah Khan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
selftests: lib.mk: Also install "config" and "settings" [+ + +]
Author: Kees Cook <[email protected]>
Date:   Wed May 26 20:17:54 2021 -0700

    selftests: lib.mk: Also install "config" and "settings"
    
    [ Upstream commit de53fa9baa701963722e9fa3d0fe34b897104497 ]
    
    Installed seccomp tests would time out because the "settings" file was
    missing. Install both "settings" (needed for proper test execution) and
    "config" (needed for informational purposes) with the other test
    targets.
    
    Signed-off-by: Kees Cook <[email protected]>
    Signed-off-by: Shuah Khan <[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: reject userspace cifs.spnego descriptions [+ + +]
Author: Asim Viladi Oglu Manizada <[email protected]>
Date:   Sat May 16 21:15:39 2026 +0000

    smb: client: reject userspace cifs.spnego descriptions
    
    commit 3da1fdf4efbc490041eb4f836bf596201203f8f2 upstream.
    
    cifs.spnego key descriptions contain authority-bearing fields such as
    pid, uid, creduid, and upcall_target that cifs.upcall treats as
    kernel-originating inputs. However, userspace can also create keys of
    this type through request_key(2) or add_key(2), allowing those fields to
    be supplied without CIFS origin.
    
    Only accept cifs.spnego descriptions while CIFS is using its private
    spnego_cred to request the key.
    
    Fixes: f1d662a7d5e5 ("[CIFS] Add upcall files for cifs to use spnego/kerberos")
    Assisted-by: avom-custom-harness:gpt-5.5-qwen3.6-mod-mix
    Reviewed-by: David Howells <[email protected]>
    Signed-off-by: Asim Viladi Oglu Manizada <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    [Salvatore Bonaccorso: Apply changes to fs/cifs/cifs_spnego.c instead of
    fs/smb/client/cifs_spnego.c before 38c8a9a52082 ("smb: move client and server
    files to common directory fs/smb") in v6.4-rc1 and backported to v6.1.36]
    Signed-off-by: Salvatore Bonaccorso <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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: 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]>

 
sound: ua101: fix division by zero at probe [+ + +]
Author: SeungJu Cheon <[email protected]>
Date:   Sun Apr 26 20:12:39 2026 +0900

    sound: ua101: fix division by zero at probe
    
    commit d1f73f169c1014463b5060e3f60813e13ddc7b87 upstream.
    
    Add a missing sanity check for bNrChannels in detect_usb_format()
    to prevent a division by zero in playback_urb_complete() and
    capture_urb_complete().
    
    USB core does not validate class-specific descriptor fields such
    as bNrChannels, so drivers must verify them before use. If a
    device provides bNrChannels = 0, frame_bytes becomes zero and is
    later used as a divisor in the URB completion handlers, leading
    to a kernel crash.
    
    Fixes: 63978ab3e3e9 ("sound: add Edirol UA-101 support")
    Cc: [email protected]
    Signed-off-by: SeungJu Cheon <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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: imx: fix runtime pm leak on probe deferral [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Tue Apr 21 14:56:32 2026 +0200

    spi: imx: fix runtime pm leak on probe deferral
    
    commit a1d50a37d3b1df84f536a982f692371039df4a48 upstream.
    
    Make sure to balance the runtime PM usage count before returning on
    probe failure (e.g. probe deferral) so that the controller can be
    suspended when a driver is later bound.
    
    Fixes: 43b6bf406cd0 ("spi: imx: fix runtime pm support for !CONFIG_PM")
    Cc: [email protected]      # 5.10
    Cc: Sascha Hauer <[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: Greg Kroah-Hartman <[email protected]>

spi: mpc52xx: fix use-after-free on unbind [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Tue Apr 14 15:43:15 2026 +0200

    spi: mpc52xx: fix use-after-free on unbind
    
    commit 706b3dc2ac7a998c55e14b3fd2e8f934c367e6e0 upstream.
    
    The state machine work is scheduled by the interrupt handler and
    therefore needs to be cancelled after disabling interrupts to avoid a
    potential use-after-free.
    
    Fixes: 984836621aad ("spi: mpc52xx: Add cancel_work_sync before module remove")
    Cc: [email protected]
    Cc: Pei Xiao <[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: Greg Kroah-Hartman <[email protected]>

spi: mtk-nor: fix controller deregistration [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Apr 10 10:17:32 2026 +0200

    spi: mtk-nor: fix controller deregistration
    
    commit 76336f24934621db286cabb20b483773ee01dcaa upstream.
    
    Make sure to deregister the controller before disabling underlying
    resources like clocks during driver unbind.
    
    Fixes: 881d1ee9fe81 ("spi: add support for mediatek spi-nor controller")
    Cc: [email protected]      # 5.7
    Cc: Chuanhong Guo <[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: Greg Kroah-Hartman <[email protected]>

spi: orion: fix clock imbalance on registration failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Tue Apr 21 15:02:10 2026 +0200

    spi: orion: fix clock imbalance on registration failure
    
    commit 443cde0dc59c5d154156ac9f27a7dadef8ebc0c2 upstream.
    
    Make sure that the controller is not runtime suspended before disabling
    clocks on probe failure.
    
    Also restore the autosuspend setting.
    
    Fixes: 5c6786945b4e ("spi: spi-orion: add runtime PM support")
    Cc: [email protected]      # 3.17
    Cc: Russell King <[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: Greg Kroah-Hartman <[email protected]>

spi: sprd: fix error pointer deref after DMA setup failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Tue May 12 09:47:33 2026 +0200

    spi: sprd: fix error pointer deref after DMA setup failure
    
    commit 3d67fffb74267772d461c02c67f1eff893ad547d upstream.
    
    The driver falls back to PIO mode if DMA setup fails during probe.
    
    Make sure to check the dma.enabled flag before trying to release the DMA
    channels also on late probe errors to avoid dereferencing an error
    pointer (or attempting to release a channel a second time).
    
    This issue was flagged by Sashiko when reviewing a devres allocation
    conversion patch.
    
    Fixes: 386119bc7be9 ("spi: sprd: spi: sprd: Add DMA mode support")
    Link: https://sashiko.dev/#/patchset/20260505072909.618363-1-johan%40kernel.org?part=10
    Cc: [email protected]      # 5.1
    Cc: Lanqing Liu <[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: Greg Kroah-Hartman <[email protected]>

spi: ti-qspi: fix use-after-free after DMA setup failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Tue May 12 09:48:09 2026 +0200

    spi: ti-qspi: fix use-after-free after DMA setup failure
    
    commit ea6ec3343e05f7937a53eb6d7617b3abdb4abc19 upstream.
    
    The driver falls back to PIO mode if DMA setup fails during probe.
    
    Make sure to clear the DMA channel pointer also if buffer allocation
    fails to avoid passing a pointer to the released channel to the DMA
    engine (or trying to free the channel a second time on late probe errors
    or driver unbind).
    
    This issue was flagged by Sashiko when reviewing a devres allocation
    conversion patch.
    
    Fixes: c687c46e9e45 ("spi: spi-ti-qspi: Use bounce buffer if read buffer is not DMA'ble")
    Link: https://sashiko.dev/#/patchset/20260505072909.618363-1-johan%40kernel.org?part=17
    Cc: [email protected]      # 4.12
    Cc: Vignesh R <[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: Greg Kroah-Hartman <[email protected]>

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

    spi: topcliff-pch: fix use-after-free on unbind
    
    commit 9d72732fe70c11424bc90ed466c7ccfa58b42a9a upstream.
    
    Give the driver a chance to flush its queue before releasing the DMA
    buffers on driver unbind
    
    Fixes: c37f3c2749b5 ("spi/topcliff_pch: DMA support")
    Cc: [email protected]      # 3.1
    Cc: Tomoya MORINAGA <[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: Greg Kroah-Hartman <[email protected]>

spi: zynqmp-gqspi: fix controller deregistration [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Apr 10 10:17:55 2026 +0200

    spi: zynqmp-gqspi: fix controller deregistration
    
    commit 6895fc4faafc9082e15e4e624b23dd5f0c98feb5 upstream.
    
    Make sure to deregister the controller before disabling underlying
    resources like clocks during driver unbind.
    
    Fixes: dfe11a11d523 ("spi: Add support for Zynq Ultrascale+ MPSoC GQSPI controller")
    Cc: [email protected]      # 4.2: 64640f6c972e
    Cc: [email protected]      # 4.2
    Cc: Ranjit Waghmode <[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: Greg Kroah-Hartman <[email protected]>

 
staging: media: atomisp: Disallow all private IOCTLs [+ + +]
Author: Sakari Ailus <[email protected]>
Date:   Thu Feb 26 15:10:54 2026 +0200

    staging: media: atomisp: Disallow all private IOCTLs
    
    commit 2b7eb2c5dc72f0fc954ac4aa155f9e285e937f7c upstream.
    
    Disallow all private IOCTLs. These aren't quite as safe as one could
    assume of IOCTL handlers; disable them for now. Instead of removing the
    code, return in the beginning of the function if cmd is non-zero in order
    to keep static checkers happy.
    
    Reported-by: Soufiane Dani <[email protected]>
    Closes: https://lore.kernel.org/linux-staging/[email protected]/
    Cc: [email protected]
    Fixes: a49d25364dfb ("staging/atomisp: Add support for the Intel IPU v2")
    Fixes: ad85094b293e ("Revert "media: staging: atomisp: Remove driver"")
    Signed-off-by: Sakari Ailus <[email protected]>
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

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

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

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

 
string: add mem_is_zero() helper to check if memory area is all zeros [+ + +]
Author: Jani Nikula <[email protected]>
Date:   Wed Aug 14 13:00:34 2024 +0300

    string: add mem_is_zero() helper to check if memory area is all zeros
    
    [ Upstream commit 3942bb49728ad9e1f94d953a88af169a8f5d8099 ]
    
    Almost two thirds of the memchr_inv() usages check if the memory area is
    all zeros, with no interest in where in the buffer the first non-zero
    byte is located. Checking for !memchr_inv(s, 0, n) is also not very
    intuitive or discoverable. Add an explicit mem_is_zero() helper for this
    use case.
    
    Reviewed-by: Kees Cook <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Jani Nikula <[email protected]>
    Stable-dep-of: 3e6ccd790ed6 ("gpio: cdev: check if uAPI v2 config attributes are correctly zeroed")
    Signed-off-by: Sasha Levin <[email protected]>

 
sysfs: don't remove existing directory on update failure [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Wed May 20 15:05:04 2026 +0200

    sysfs: don't remove existing directory on update failure
    
    commit 237557b8a81ab948e8332f7c0058e758f081c0a3 upstream.
    
    When sysfs_update_group() is called for a named group and create_files()
    fails (e.g. -ENOMEM), internal_create_group() calls kernfs_remove(kn) on
    the group directory.  In the update path, kn was obtained via
    kernfs_find_and_get() and refers to a directory that already existed
    before this call.  Removing it silently destroys a sysfs group that the
    caller did not create.
    
    Only remove the directory if we created it ourselves.  On update failure
    the directory remains as it is left empty by remove_files() inside
    create_files(), but can be repopulated by a retry.
    
    Cc: Rajat Jain <[email protected]>
    Fixes: c855cf2759d2 ("sysfs: Fix internal_create_group() for named group updates")
    Cc: stable <[email protected]>
    Assisted-by: gkh_clanker_t1000
    Reviewed-by: Rafael J. Wysocki (Intel) <[email protected]>
    Reviewed-by: Danilo Krummrich <[email protected]>
    Link: https://patch.msgid.link/2026052003-uniquely-hastily-c093@gregkh
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
taprio: Handle short intervals and large packets [+ + +]
Author: Kurt Kanzenbach <[email protected]>
Date:   Thu Mar 18 08:34:55 2021 +0100

    taprio: Handle short intervals and large packets
    
    [ Upstream commit 497cc00224cfaff89282ec8bfdfb8b797415f72a ]
    
    When using short intervals e.g. below one millisecond, large packets won't be
    transmitted at all. The software implementations checks whether the packet can
    be fit into the remaining interval. Therefore, it takes the packet length and
    the transmission speed into account. That is correct.
    
    However, for large packets it may be that the transmission time exceeds the
    interval resulting in no packet transmission. The same situation works fine with
    hardware offloading applied.
    
    The problem has been observed with the following schedule and iperf3:
    
    |tc qdisc replace dev lan1 parent root handle 100 taprio \
    |   num_tc 8 \
    |   map 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 \
    |   queues 1@0 1@1 1@2 1@3 1@4 1@5 1@6 1@7 \
    |   base-time $base \
    |   sched-entry S 0x40 500000 \
    |   sched-entry S 0xbf 500000 \
    |   clockid CLOCK_TAI \
    |   flags 0x00
    
    [...]
    
    |root@tsn:~# iperf3 -c 192.168.2.105
    |Connecting to host 192.168.2.105, port 5201
    |[  5] local 192.168.2.121 port 52610 connected to 192.168.2.105 port 5201
    |[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
    |[  5]   0.00-1.00   sec  45.2 KBytes   370 Kbits/sec    0   1.41 KBytes
    |[  5]   1.00-2.00   sec  0.00 Bytes  0.00 bits/sec    0   1.41 KBytes
    
    After debugging, it seems that the packet length stored in the SKB is about
    7000-8000 bytes. Using a 100 Mbit/s link the transmission time is about 600us
    which larger than the interval of 500us.
    
    Therefore, segment the SKB into smaller chunks if the packet is too big. This
    yields similar results than the hardware offload:
    
    |root@tsn:~# iperf3 -c 192.168.2.105
    |Connecting to host 192.168.2.105, port 5201
    |- - - - - - - - - - - - - - - - - - - - - - - - -
    |[ ID] Interval           Transfer     Bitrate         Retr
    |[  5]   0.00-10.00  sec  48.9 MBytes  41.0 Mbits/sec    0             sender
    |[  5]   0.00-10.02  sec  48.7 MBytes  40.7 Mbits/sec                  receiver
    
    Furthermore, the segmentation can be skipped for the full offload case, as the
    driver or the hardware is expected to handle this.
    
    Signed-off-by: Kurt Kanzenbach <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 105425b1969c ("net/sched: taprio: fix use-after-free in advance_sched() on schedule switch")
    Signed-off-by: Sasha Levin <[email protected]>

 
taskstats: set version in TGID exit notifications [+ + +]
Author: Yiyang Chen <[email protected]>
Date:   Mon Mar 30 03:00:40 2026 +0800

    taskstats: set version in TGID exit notifications
    
    commit 16c4f0211aaa1ec1422b11b59f64f1abe9009fc0 upstream.
    
    delay accounting started populating taskstats records with a valid version
    field via fill_pid() and fill_tgid().
    
    Later, commit ad4ecbcba728 ("[PATCH] delay accounting taskstats interface
    send tgid once") changed the TGID exit path to send the cached
    signal->stats aggregate directly instead of building the outgoing record
    through fill_tgid().  Unlike fill_tgid(), fill_tgid_exit() only
    accumulates accounting data and never initializes stats->version.
    
    As a result, TGID exit notifications can reach userspace with version == 0
    even though PID exit notifications and TASKSTATS_CMD_GET replies carry a
    valid taskstats version.
    
    This is easy to reproduce with `tools/accounting/getdelays.c`.
    
    I have a small follow-up patch for that tool which:
    
    1. increases the receive buffer/message size so the pid+tgid
       combined exit notification is not dropped/truncated
    
    2. prints `stats->version`.
    
    With that patch, the reproducer is:
    
      Terminal 1:
        ./getdelays -d -v -l -m 0
    
      Terminal 2:
        taskset -c 0 python3 -c 'import threading,time; t=threading.Thread(target=time.sleep,args=(0.1,)); t.start(); t.join()'
    
    That produces both PID and TGID exit notifications for the same
    process.  The PID exit record reports a valid taskstats version, while
    the TGID exit record reports `version 0`.
    
    
    This patch (of 2):
    
    Set stats->version = TASKSTATS_VERSION after copying the cached TGID
    aggregate into the outgoing netlink payload so all taskstats records are
    self-describing again.
    
    Link: https://lkml.kernel.org/r/ba83d934e59edd431b693607de573eb9ca059309.1774810498.git.cyyzero16@gmail.com
    Fixes: ad4ecbcba728 ("[PATCH] delay accounting taskstats interface send tgid once")
    Signed-off-by: Yiyang Chen <[email protected]>
    Cc: Balbir Singh <[email protected]>
    Cc: Dr. Thomas Orgis <[email protected]>
    Cc: Fan Yu <[email protected]>
    Cc: Wang Yaxin <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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]>

 
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]>

 
thermal/drivers/sprd: Fix raw temperature clamping in sprd_thm_rawdata_to_temp [+ + +]
Author: Thorsten Blum <[email protected]>
Date:   Sat Mar 7 11:24:21 2026 +0100

    thermal/drivers/sprd: Fix raw temperature clamping in sprd_thm_rawdata_to_temp
    
    commit b3414148bbc1f9cd56217e58a558c6ac4fd1b4a6 upstream.
    
    The raw temperature data was never clamped to SPRD_THM_RAW_DATA_LOW or
    SPRD_THM_RAW_DATA_HIGH because the return value of clamp() was not used.
    Fix this by assigning the clamped value to 'rawdata'.
    
    Casting SPRD_THM_RAW_DATA_LOW and SPRD_THM_RAW_DATA_HIGH to u32 is also
    redundant and can be removed.
    
    Fixes: 554fdbaf19b1 ("thermal: sprd: Add Spreadtrum thermal driver support")
    Signed-off-by: Thorsten Blum <[email protected]>
    Signed-off-by: Daniel Lezcano <[email protected]>
    Reviewed-by: Baolin Wang <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

thermal/drivers/sprd: Fix temperature clamping in sprd_thm_temp_to_rawdata [+ + +]
Author: Thorsten Blum <[email protected]>
Date:   Sat Mar 7 11:24:20 2026 +0100

    thermal/drivers/sprd: Fix temperature clamping in sprd_thm_temp_to_rawdata
    
    commit 83c0f9a5d679a6f8d84fc49b2f62ea434ccab4b6 upstream.
    
    The temperature was never clamped to SPRD_THM_TEMP_LOW or
    SPRD_THM_TEMP_HIGH because the return value of clamp() was not used. Fix
    this by assigning the clamped value to 'temp'.
    
    Casting SPRD_THM_TEMP_LOW and SPRD_THM_TEMP_HIGH to int is also
    redundant and can be removed.
    
    Fixes: 554fdbaf19b1 ("thermal: sprd: Add Spreadtrum thermal driver support")
    Signed-off-by: Thorsten Blum <[email protected]>
    Signed-off-by: Daniel Lezcano <[email protected]>
    Reviewed-by: Baolin Wang <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
thermal/int340x_thermal: handle data_vault when the value is ZERO_SIZE_PTR [+ + +]
Author: Lee, Chun-Yi <[email protected]>
Date:   Tue Apr 21 16:21:30 2026 +0300

    thermal/int340x_thermal: handle data_vault when the value is ZERO_SIZE_PTR
    
    commit 7931e28098a4c1a2a6802510b0cbe57546d2049d upstream.
    
    In some case, the GDDV returns a package with a buffer which has
    zero length. It causes that kmemdup() returns ZERO_SIZE_PTR (0x10).
    
    Then the data_vault_read() got NULL point dereference problem when
    accessing the 0x10 value in data_vault.
    
    [   71.024560] BUG: kernel NULL pointer dereference, address:
    0000000000000010
    
    This patch uses ZERO_OR_NULL_PTR() for checking ZERO_SIZE_PTR or
    NULL value in data_vault.
    
    Signed-off-by: "Lee, Chun-Yi" <[email protected]>
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    [ kovalev: bp to fix CVE-2022-48703 ]
    Signed-off-by: Vasiliy Kovalev <[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]>

 
tpm: avoid -Wunused-but-set-variable [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Fri Mar 22 14:22:48 2024 +0100

    tpm: avoid -Wunused-but-set-variable
    
    commit 6f1d4d2ecfcd1b577dc87350ea965fe81f272e83 upstream.
    
    Outside of the EFI tpm code, the TPM_MEMREMAP()/TPM_MEMUNMAP functions are
    defined as trivial macros, leading to the mapping_size variable ending
    up unused:
    
    In file included from drivers/char/tpm/tpm-sysfs.c:16:
    In file included from drivers/char/tpm/tpm.h:28:
    include/linux/tpm_eventlog.h:167:6: error: variable 'mapping_size' set but not used [-Werror,-Wunused-but-set-variable]
      167 |         int mapping_size;
    
    Turn the stubs into inline functions to avoid this warning.
    
    Cc: [email protected] # v5.3+
    Fixes: c46f3405692d ("tpm: Reserve the TPM final events table")
    Signed-off-by: Arnd Bergmann <[email protected]>
    Reviewed-by: Thorsten Blum <[email protected]>
    Reviewed-by: Jarkko Sakkinen <[email protected]>
    Signed-off-by: Jarkko Sakkinen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

tpm: tpm_tis: add error logging for data transfer [+ + +]
Author: Jacqueline Wong <[email protected]>
Date:   Wed Apr 15 16:00:05 2026 +0000

    tpm: tpm_tis: add error logging for data transfer
    
    commit 0471921e2d1043dcc6de5cffb49dd37709521abe upstream.
    
    Add logging to more easily determine reason for transmit failure
    
    Cc: [email protected] # v6.6+
    Fixes: 280db21e153d8 ("tpm_tis: Resend command to recover from data transfer errors")
    Signed-off-by: Jacqueline Wong <[email protected]>
    Signed-off-by: Jordan Hand <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jarkko Sakkinen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

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

 
tracing: Avoid NULL return from hist_field_name() on truncation [+ + +]
Author: David Carlier <[email protected]>
Date:   Fri May 8 20:57:47 2026 +0100

    tracing: Avoid NULL return from hist_field_name() on truncation
    
    [ Upstream commit 576ec047d20b368b43c4d5db98c4f2e0f3c101ec ]
    
    hist_field_name() returns "" everywhere except the fully-qualified
    VAR_REF/EXPR case, where snprintf() truncation returns NULL early
    and bypasses the bottom NULL->"" guard. Callers don't expect NULL:
    strcat(expr, hist_field_name(field, 0)) at trace_events_hist.c:1758
    and the strcmp() in the sort-key match loop at :4804 both deref it.
    
    system and event_name are bounded by MAX_EVENT_NAME_LEN, but the
    field name on a VAR_REF is kstrdup'd from a histogram variable
    name parsed out of the trigger string and has no length cap, so
    a long enough var name in a fully qualified reference can reach
    the truncation path.
    
    Keep the length check but leave field_name as "" on overflow.
    
    Link: https://patch.msgid.link/[email protected]
    Fixes: 5ec1d1e97de1 ("tracing: Rebuild full_name on each hist_field_name() call")
    Signed-off-by: David Carlier <[email protected]>
    Signed-off-by: Steven Rostedt <[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: Do not call map->ops->elt_free() if elt_alloc() fails [+ + +]
Author: Masami Hiramatsu (Google) <[email protected]>
Date:   Thu May 21 13:49:14 2026 +0900

    tracing: Do not call map->ops->elt_free() if elt_alloc() fails
    
    commit 8f0f5c4fb9df0e19a341e0c6ed8dc4fda9124f03 upstream.
    
    In paths where tracing_map_elt_alloc() failed to allocate objects,
    the map->ops->elt_alloc() call was never successful. In this case,
    map->ops->elt_free() should not be called.
    
    Link: https://sashiko.dev/#/patchset/20260520223101.34710-1-rosenp%40gmail.com
    
    Cc: [email protected]
    Cc: Tom Zanussi <[email protected]>
    Cc: Mathieu Desnoyers <[email protected]>
    Cc: Rosen Penev <[email protected]>
    Reported-by: Sashiko <[email protected]>
    Fixes: 2734b629525a ("tracing: Add per-element variable support to tracing_map")
    Link: https://patch.msgid.link/177933895460.108746.5396070821443932634.stgit@devnote2
    Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Steven Rostedt <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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: remove HVC_IUCV_MAGIC [+ + +]
Author: наб <[email protected]>
Date:   Fri Sep 16 03:55:18 2022 +0200

    tty: hvc: remove HVC_IUCV_MAGIC
    
    [ Upstream commit eef7381d8134f249dc17138bb1794c249aff7f5a ]
    
    According to Greg, in the context of magic numbers as defined in
    magic-number.rst, "the tty layer should not need this and I'll gladly
    take patches"
    
    This stretches that definition slightly, since it multiplexes it with
    the terminal number as a constant offset, but is equivalent
    
    Acked-by: Jiri Slaby <[email protected]>
    Signed-off-by: Ahelenia Ziemiańska <[email protected]>
    Ref: https://lore.kernel.org/linux-doc/[email protected]/
    Link: https://lore.kernel.org/r/8c8a2c9dfc1bfbe6ef3f3237368e483865fc1c29.1663288066.git.nabijaczleweli@nabijaczleweli.xyz
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: f2a880e802ad ("tty: hvc_iucv: fix off-by-one in number of supported devices")
    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]>

 
udf: reject descriptors with oversized CRC length [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Mon Apr 13 17:12:40 2026 -0400

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

 
um: drivers: call kernel_strrchr() explicitly in cow_user.c [+ + +]
Author: Michael Bommarito <[email protected]>
Date:   Wed Apr 8 03:01:02 2026 -0400

    um: drivers: call kernel_strrchr() explicitly in cow_user.c
    
    commit 91e901c65b4da02a6fd543e3f0049829ae9645b7 upstream.
    
    Building ARCH=um on glibc >= 2.43 fails:
    
      arch/um/drivers/cow_user.c: error: implicit declaration of
      function 'strrchr' [-Wimplicit-function-declaration]
    
    glibc 2.43's C23 const-preserving strrchr() macro does not survive
    UML's global -Dstrrchr=kernel_strrchr remap from arch/um/Makefile.
    Call kernel_strrchr() directly in cow_user.c so the source no longer
    depends on the -D rewrite.
    
    Fixes: 2c51a4bc0233 ("um: fix strrchr() problems")
    Suggested-by: Johannes Berg <[email protected]>
    Cc: [email protected]
    Assisted-by: Claude:claude-opus-4-6
    Assisted-by: Codex:gpt-5-4
    Signed-off-by: Michael Bommarito <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [remove unnecessary 'extern']
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

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

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

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

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

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

 
USB: omap_udc: DMA: Don't enable burst 4 mode [+ + +]
Author: Aaro Koskinen <[email protected]>
Date:   Mon Apr 13 21:49:12 2026 +0300

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

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

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

USB: serial: option: add Telit Cinterion LE910Cx compositions [+ + +]
Author: Fabio Porcedda <[email protected]>
Date:   Mon Apr 27 11:17:46 2026 +0200

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

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

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

usb: ulpi: fix memory leak on ulpi_register() error paths [+ + +]
Author: Felix Gu <[email protected]>
Date:   Tue Apr 7 21:21:22 2026 +0800

    usb: ulpi: fix memory leak on ulpi_register() error paths
    
    commit 0b9fcab1b8608d429e5f239afb197de928d4de7d upstream.
    
    Commit 01af542392b5 ("usb: ulpi: fix double free in
    ulpi_register_interface() error path") removed kfree(ulpi) from
    ulpi_register_interface() to fix a double-free when device_register()
    fails.
    
    But when ulpi_of_register() or ulpi_read_id() fail before
    device_register() is called, the ulpi allocation is leaked.
    
    Add kfree(ulpi) on both error paths to properly clean up the allocation.
    
    Fixes: 01af542392b5 ("usb: ulpi: fix double free in ulpi_register_interface() error path")
    Cc: stable <[email protected]>
    Signed-off-by: Felix Gu <[email protected]>
    Reviewed-by: Heikki Krogerus <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

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

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

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

usb: xhci: Make usb_host_endpoint.hcpriv survive endpoint_disable() [+ + +]
Author: Michal Pecio <[email protected]>
Date:   Thu Apr 2 16:13:42 2026 +0300

    usb: xhci: Make usb_host_endpoint.hcpriv survive endpoint_disable()
    
    commit 25e531b422dc2ac90cdae3b6e74b5cdeb081440d upstream.
    
    xHCI hardware maintains its endpoint state between add_endpoint()
    and drop_endpoint() calls followed by successful check_bandwidth().
    So does the driver.
    
    Core may call endpoint_disable() during xHCI endpoint life, so don't
    clear host_ep->hcpriv then, because this breaks endpoint_reset().
    
    If a driver calls usb_set_interface(), submits URBs which make host
    sequence state non-zero and calls usb_clear_halt(), the device clears
    its sequence state but xhci_endpoint_reset() bails out. The next URB
    malfunctions: USB2 loses one packet, USB3 gets Transaction Error or
    may not complete at all on some (buggy?) HCs from ASMedia and AMD.
    This is triggered by uvcvideo on bulk video devices.
    
    The code was copied from ehci_endpoint_disable() but it isn't needed
    here - hcpriv should only be NULL on emulated root hub endpoints.
    It might prevent resetting and inadvertently enabling a disabled and
    dropped endpoint, but core shouldn't try to reset dropped endpoints.
    
    Document xhci requirements regarding hcpriv. They are currently met.
    
    Fixes: 18b74067ac78 ("xhci: Fix use-after-free regression in xhci clear hub TT implementation")
    Cc: [email protected]
    Signed-off-by: Michal Pecio <[email protected]>
    Signed-off-by: Mathias Nyman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

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

 
userfaultfd: allow registration of ranges below mmap_min_addr [+ + +]
Author: Denis M. Karpov <[email protected]>
Date:   Thu Apr 9 13:33:45 2026 +0300

    userfaultfd: allow registration of ranges below mmap_min_addr
    
    commit 161ce69c2c89781784b945d8e281ff2da9dede9c upstream.
    
    The current implementation of validate_range() in fs/userfaultfd.c
    performs a hard check against mmap_min_addr.  This is redundant because
    UFFDIO_REGISTER operates on memory ranges that must already be backed by a
    VMA.
    
    Enforcing mmap_min_addr or capability checks again in userfaultfd is
    unnecessary and prevents applications like binary compilers from using
    UFFD for valid memory regions mapped by application.
    
    Remove the redundant check for mmap_min_addr.
    
    We started using UFFD instead of the classic mprotect approach in the
    binary translator to track application writes.  During development, we
    encountered this bug.  The translator cannot control where the translated
    application chooses to map its memory and if the app requires a
    low-address area, UFFD fails, whereas mprotect would work just fine.  I
    believe this is a genuine logic bug rather than an improvement, and I
    would appreciate including the fix in stable.
    
    Link: https://lore.kernel.org/[email protected]
    Fixes: 86039bd3b4e6 ("userfaultfd: add new syscall to provide memory externalization")
    Signed-off-by: Denis M. Karpov <[email protected]>
    Reviewed-by: Lorenzo Stoakes <[email protected]>
    Acked-by: Harry Yoo (Oracle) <[email protected]>
    Reviewed-by: Pedro Falcato <[email protected]>
    Reviewed-by: Liam R. Howlett <[email protected]>
    Reviewed-by: Mike Rapoport (Microsoft) <[email protected]>
    Cc: Alexander Viro <[email protected]>
    Cc: Al Viro <[email protected]>
    Cc: Christian Brauner <[email protected]>
    Cc: Jan Kara <[email protected]>
    Cc: Jann Horn <[email protected]>
    Cc: Peter Xu <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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]>

 
vsock/virtio: fix accept queue count leak on transport mismatch [+ + +]
Author: Dudu Lu <[email protected]>
Date:   Mon Apr 13 21:14:09 2026 +0800

    vsock/virtio: fix accept queue count leak on transport mismatch
    
    commit 52bcb57a4e8a0865a76c587c2451906342ae1b2d upstream.
    
    virtio_transport_recv_listen() calls sk_acceptq_added() before
    vsock_assign_transport(). If vsock_assign_transport() fails or
    selects a different transport, the error path returns without
    calling sk_acceptq_removed(), permanently incrementing
    sk_ack_backlog.
    
    After approximately backlog+1 such failures, sk_acceptq_is_full()
    returns true, causing the listener to reject all new connections.
    
    Fix by moving sk_acceptq_added() to after the transport validation,
    matching the pattern used by vmci_transport and hyperv_transport.
    
    Fixes: c0cfa2d8a788 ("vsock: add multi-transports support")
    Signed-off-by: Dudu Lu <[email protected]>
    Reviewed-by: Bobby Eshleman <[email protected]>
    Reviewed-by: Luigi Leonardi <[email protected]>
    Reviewed-by: Stefano Garzarella <[email protected]>
    Acked-by: Michael S. Tsirkin <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Luigi Leonardi <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
vsock/vmci: fix UAF when peer resets connection during handshake [+ + +]
Author: Minh Nguyen <[email protected]>
Date:   Tue May 19 17:23:10 2026 +0700

    vsock/vmci: fix UAF when peer resets connection during handshake
    
    commit 99e22ddf4edb63dc8382bc028af928056d3450cf upstream.
    
    vmci_transport_recv_connecting_server() returned err = 0 for a peer
    RST in its default switch arm:
    
            err = pkt->type == VMCI_TRANSPORT_PACKET_TYPE_RST ? 0 : -EINVAL;
    
    That made vmci_transport_recv_listen() skip vsock_remove_pending(),
    leaving the pending socket on the listener's pending_links with
    sk_state = TCP_CLOSE while destroy: still dropped the explicit
    reference taken before schedule_delayed_work().
    
    One second later vsock_pending_work() observed is_pending=true and
    performed full cleanup: vsock_remove_pending() then the two trailing
    sock_put(sk) calls -- the first reached refcount 0 and __sk_freed
    the socket, and the second wrote into the freed object:
    
      BUG: KASAN: slab-use-after-free in refcount_warn_saturate
      Write of size 4 at addr ffff88800b1cac80 by task kworker
      Workqueue: events vsock_pending_work
    
    Treat peer RST like any other unexpected packet type (err = -EINVAL).
    All destroy: arms now return err < 0, so vmci_transport_recv_listen()
    removes pending from pending_links synchronously and
    vsock_pending_work() takes the is_pending=false / !rejected branch,
    dropping only its own work reference.  This also closes the
    multi-packet race Sashiko reported on v2: pending is removed from
    the list before any subsequent packet can find it.
    
    The pre-existing sk_acceptq_removed() gap on the err < 0 path of
    vmci_transport_recv_listen() that Sashiko also noted is not
    introduced or changed by this patch.
    
    Tested on lts-6.12.79 with KASAN: 52/100 unpatched -> 0/100 patched.
    
    Fixes: d021c344051a ("VSOCK: Introduce VM Sockets")
    Cc: [email protected]
    Signed-off-by: Minh Nguyen <[email protected]>
    Acked-by: Bryan Tan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
vsock: fix buffer size clamping order [+ + +]
Author: Norbert Szetei <[email protected]>
Date:   Thu Apr 9 18:34:12 2026 +0200

    vsock: fix buffer size clamping order
    
    commit d114bfdc9b76bf93b881e195b7ec957c14227bab upstream.
    
    In vsock_update_buffer_size(), the buffer size was being clamped to the
    maximum first, and then to the minimum. If a user sets a minimum buffer
    size larger than the maximum, the minimum check overrides the maximum
    check, inverting the constraint.
    
    This breaks the intended socket memory boundaries by allowing the
    vsk->buffer_size to grow beyond the configured vsk->buffer_max_size.
    
    Fix this by checking the minimum first, and then the maximum. This
    ensures the buffer size never exceeds the buffer_max_size.
    
    Fixes: b9f2b0ffde0c ("vsock: handle buffer_size sockopts in the core")
    Suggested-by: Stefano Garzarella <[email protected]>
    Signed-off-by: Norbert Szetei <[email protected]>
    Reviewed-by: Stefano Garzarella <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Cc: Luigi Leonardi <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
wifi: ath11k: clear shared SRNG pointer state on restart [+ + +]
Author: Kyle Farnung <[email protected]>
Date:   Wed May 13 21:52:12 2026 -0700

    wifi: ath11k: clear shared SRNG pointer state on restart
    
    commit f51e4b3b5574ad8cb5b16b11f8a1452147ece87a upstream.
    
    LMAC rings reuse the shared rdp/wrp pointer buffers without going
    through the normal SRNG hw-init path that zeros non-LMAC ring
    pointers. After restart, ath11k_hal_srng_clear() can therefore hand
    stale hp/tp state from the previous firmware instance back to the new
    one.
    
    Clear the shared pointer buffers while keeping the allocations in
    place so restart still avoids reallocating SRNG DMA memory, but starts
    with fresh ring-pointer state.
    
    Fixes: 32be3ca4cf78b ("wifi: ath11k: HAL SRNG: don't deinitialize and re-initialize again")
    Cc: [email protected]
    Closes: https://lore.kernel.org/all/CAOPSVF04q6uvVdq8GTRLHBrVMdpt9=o9wVcFMc6f-yhmSBcZqQ@mail.gmail.com/
    Signed-off-by: Kyle Farnung <[email protected]>
    Reviewed-by: Rameshkumar Sundaram <[email protected]>
    Reviewed-by: Baochen Qiang <[email protected]>
    Link: https://patch.msgid.link/20260513-kfarnung-ath11k-srng-clear-pointer-state-v1-1-bc700dd8b333@gmail.com
    Signed-off-by: Jeff Johnson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

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

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

    wifi: b43: enforce bounds check on firmware key index in b43_rx()
    
    commit 1f4f78bf8549e6ac4f04fba4176854f3a6e0c332 upstream.
    
    The firmware-controlled key index in b43_rx() can exceed the dev->key[]
    array size (58 entries). The existing B43_WARN_ON is non-enforcing in
    production builds, allowing an out-of-bounds read.
    
    Make the B43_WARN_ON check enforcing by dropping the frame when the
    firmware returns an invalid key index.
    
    Suggested-by: Jonas Gorski <[email protected]>
    Acked-by: Michael Büsch <[email protected]>
    Fixes: e4d6b7951812 ("[B43]: add mac80211-based driver for modern BCM43xx devices")
    Cc: [email protected]
    Signed-off-by: Tristan Madani <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

    wifi: b43legacy: enforce bounds check on firmware key index in RX path
    
    commit a035766f970bde2d4298346a31a80685be5c0205 upstream.
    
    Same fix as b43: the firmware-controlled key index in b43legacy_rx()
    can exceed dev->max_nr_keys. The existing B43legacy_WARN_ON is
    non-enforcing in production builds, allowing an out-of-bounds read of
    dev->key[].
    
    Make the check enforcing by dropping the frame for invalid indices.
    
    Fixes: 75388acd0cd8 ("[B43LEGACY]: add mac80211-based driver for legacy BCM43xx devices")
    Cc: [email protected]
    Signed-off-by: Tristan Madani <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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: brcmfmac: validate bsscfg indices in IF events [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Mon Mar 23 15:45:51 2026 +0800

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

wifi: cfg80211: advance loop vars in cfg80211_merge_profile() [+ + +]
Author: John Walker <[email protected]>
Date:   Thu May 7 17:07:20 2026 -0600

    wifi: cfg80211: advance loop vars in cfg80211_merge_profile()
    
    commit 7666dbb1bacc4ba522b96740cba7283d243d16e1 upstream.
    
    cfg80211_merge_profile() reassembles a Multi-BSSID non-transmitted BSS
    profile that has been split across multiple consecutive MBSSID elements.
    Its while-loop calls
    
            cfg80211_get_profile_continuation(ie, ielen, mbssid_elem, sub_elem)
    
    but never advances mbssid_elem or sub_elem inside the body.  Each
    iteration therefore searches for a continuation that follows the same
    fixed pair; the helper returns the same next_mbssid; and the same
    next_sub bytes are memcpy()'d into merged_ie at a growing offset until
    the buffer fills.
    
    Advance both mbssid_elem and sub_elem to the just-consumed continuation
    so the next call to cfg80211_get_profile_continuation() searches for a
    further continuation beyond it (or returns NULL when none exists).
    
    A specially-crafted malicious beacon can take advantage of this bug
    to cause the kernel to spend an excessive amount of time in
    cfg80211_merge_profile (up to as much as 2ms per beacon received),
    which could theoretically be abused in some way.
    
    Cc: [email protected]
    Fixes: fe806e4992c9 ("cfg80211: support profile split between elements")
    Signed-off-by: John Walker <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

wifi: mac80211: always free skb on ieee80211_tx_prepare_skb() failure [+ + +]
Author: Felix Fietkau <[email protected]>
Date:   Tue Apr 21 10:44:25 2026 +0800

    wifi: mac80211: always free skb on ieee80211_tx_prepare_skb() failure
    
    [ Upstream commit d5ad6ab61cbd89afdb60881f6274f74328af3ee9 ]
    
    ieee80211_tx_prepare_skb() has three error paths, but only two of them
    free the skb. The first error path (ieee80211_tx_prepare() returning
    TX_DROP) does not free it, while invoke_tx_handlers() failure and the
    fragmentation check both do.
    
    Add kfree_skb() to the first error path so all three are consistent,
    and remove the now-redundant frees in callers (ath9k, mt76,
    mac80211_hwsim) to avoid double-free.
    
    Document the skb ownership guarantee in the function's kdoc.
    
    Signed-off-by: Felix Fietkau <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Fixes: 06be6b149f7e ("mac80211: add ieee80211_tx_prepare_skb() helper function")
    Signed-off-by: Johannes Berg <[email protected]>
    [ Exclude changes to drivers/net/wireless/mediatek/mt76/scan.c as this file is first
     introduced by commit 31083e38548f("wifi: mt76: add code for emulating hardware scanning")
     after linux-6.14.]
    Signed-off-by: Li hongliang <[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: rsi: fix kthread lifetime race between self-exit and external-stop [+ + +]
Author: Jeongjun Park <[email protected]>
Date:   Thu Apr 23 02:38:46 2026 +0900

    wifi: rsi: fix kthread lifetime race between self-exit and external-stop
    
    commit db57a1aa54ff68669781976e4edb045e09e2b65b upstream.
    
    RSI driver use both self-exit(kthread_complete_and_exit) and external-stop
    (kthread_stop) when killing a kthread. Generally, kthread_stop() is called
    first, and in this case, no particular issues occur.
    
    However, in rare instances where kthread_complete_and_exit() is called
    first and then kthread_stop() is called, a UAF occurs because the kthread
    object, which has already exited and been freed, is accessed again.
    
    Therefore, to prevent this with minimal modification, you must remove
    kthread_stop() and change the code to wait until the self-exit operation
    is completed.
    
    Cc: <[email protected]>
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/all/[email protected]/
    Fixes: 4c62764d0fc2 ("rsi: improve kernel thread handling to fix kernel panic")
    Signed-off-by: Jeongjun Park <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[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: wl1251: validate packet IDs before indexing tx_frames [+ + +]
Author: Pengpeng Hou <[email protected]>
Date:   Mon Mar 23 16:08:45 2026 +0800

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

 
x86/uprobes: Fix XOL allocation failure for 32-bit tasks [+ + +]
Author: Oleg Nesterov <[email protected]>
Date:   Mon Mar 2 16:51:12 2026 +0100

    x86/uprobes: Fix XOL allocation failure for 32-bit tasks
    
    [ Upstream commit d55c571e4333fac71826e8db3b9753fadfbead6a ]
    
    This script
    
            #!/usr/bin/bash
    
            echo 0 > /proc/sys/kernel/randomize_va_space
    
            echo 'void main(void) {}' > TEST.c
    
            # -fcf-protection to ensure that the 1st endbr32 insn can't be emulated
            gcc -m32 -fcf-protection=branch TEST.c -o test
    
            bpftrace -e 'uprobe:./test:main {}' -c ./test
    
    "hangs", the probed ./test task enters an endless loop.
    
    The problem is that with randomize_va_space == 0
    get_unmapped_area(TASK_SIZE - PAGE_SIZE) called by xol_add_vma() can not
    just return the "addr == TASK_SIZE - PAGE_SIZE" hint, this addr is used
    by the stack vma.
    
    arch_get_unmapped_area_topdown() doesn't take TIF_ADDR32 into account and
    in_32bit_syscall() is false, this leads to info.high_limit > TASK_SIZE.
    vm_unmapped_area() happily returns the high address > TASK_SIZE and then
    get_unmapped_area() returns -ENOMEM after the "if (addr > TASK_SIZE - len)"
    check.
    
    handle_swbp() doesn't report this failure (probably it should) and silently
    restarts the probed insn. Endless loop.
    
    I think that the right fix should change the x86 get_unmapped_area() paths
    to rely on TIF_ADDR32 rather than in_32bit_syscall(). Note also that if
    CONFIG_X86_X32_ABI=y, in_x32_syscall() falsely returns true in this case
    because ->orig_ax = -1.
    
    But we need a simple fix for -stable, so this patch just sets TS_COMPAT if
    the probed task is 32-bit to make in_ia32_syscall() true.
    
    Fixes: 1b028f784e8c ("x86/mm: Introduce mmap_compat_base() for 32-bit mmap()")
    Reported-by: Paulo Andrade <[email protected]>
    Signed-off-by: Oleg Nesterov <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]/
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
xfrm: clear trailing padding in build_polexpire() [+ + +]
Author: Yasuaki Torimaru <[email protected]>
Date:   Mon Apr 13 18:12:15 2026 -0400

    xfrm: clear trailing padding in build_polexpire()
    
    [ Upstream commit 71a98248c63c535eaa4d4c22f099b68d902006d0 ]
    
    build_expire() clears the trailing padding bytes of struct
    xfrm_user_expire after setting the hard field via memset_after(),
    but the analogous function build_polexpire() does not do this for
    struct xfrm_user_polexpire.
    
    The padding bytes after the __u8 hard field are left
    uninitialized from the heap allocation, and are then sent to
    userspace via netlink multicast to XFRMNLGRP_EXPIRE listeners,
    leaking kernel heap memory contents.
    
    Add the missing memset_after() call, matching build_expire().
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Signed-off-by: Yasuaki Torimaru <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Reviewed-by: Breno Leitao <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    [ replaced `memset_after()` macro with equivalent manual `memset()` call ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

xfrm: provide message size for XFRM_MSG_MAPPING [+ + +]
Author: Ruijie Li <[email protected]>
Date:   Wed Apr 29 00:41:43 2026 +0800

    xfrm: provide message size for XFRM_MSG_MAPPING
    
    commit 28465227c80fe417b4013c432be1f3737cb9f9a3 upstream.
    
    The compat 64=>32 translation path handles XFRM_MSG_MAPPING, but
    xfrm_msg_min[] does not provide the native payload size for this
    message type.
    
    Add the missing XFRM_MSG_MAPPING entry so compat translation can size
    and translate mapping notifications correctly.
    
    Fixes: 5461fc0c8d9f ("xfrm/compat: Add 64=>32-bit messages translator")
    Cc: [email protected]
    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: Ruijie Li <[email protected]>
    Signed-off-by: Ren Wei <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

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

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

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