Changelog in Linux kernel 6.6.95

 
ACPI: Add missing prototype for non CONFIG_SUSPEND/CONFIG_X86 case [+ + +]
Author: Mario Limonciello <[email protected]>
Date:   Mon Apr 7 13:36:55 2025 -0500

    ACPI: Add missing prototype for non CONFIG_SUSPEND/CONFIG_X86 case
    
    [ Upstream commit e1bdbbc98279164d910d2de82a745f090a8b249f ]
    
    acpi_register_lps0_dev() and acpi_unregister_lps0_dev() may be used
    in drivers that don't require CONFIG_SUSPEND or compile on !X86.
    
    Add prototypes for those cases.
    
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Signed-off-by: Mario Limonciello <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ACPI: battery: negate current when discharging [+ + +]
Author: Peter Marheine <[email protected]>
Date:   Thu May 8 12:41:45 2025 +1000

    ACPI: battery: negate current when discharging
    
    [ Upstream commit 234f71555019d308c6bc6f98c78c5551cb8cd56a ]
    
    The ACPI specification requires that battery rate is always positive,
    but the kernel ABI for POWER_SUPPLY_PROP_CURRENT_NOW
    (Documentation/ABI/testing/sysfs-class-power) specifies that it should
    be negative when a battery is discharging. When reporting CURRENT_NOW,
    massage the value to match the documented ABI.
    
    This only changes the sign of `current_now` and not `power_now` because
    documentation doesn't describe any particular meaning for `power_now` so
    leaving `power_now` unchanged is less likely to confuse userspace
    unnecessarily, whereas becoming consistent with the documented ABI is
    worth potentially confusing clients that read `current_now`.
    
    Signed-off-by: Peter Marheine <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ACPI: bus: Bail out if acpi_kobj registration fails [+ + +]
Author: Armin Wolf <[email protected]>
Date:   Sun May 18 20:51:11 2025 +0200

    ACPI: bus: Bail out if acpi_kobj registration fails
    
    [ Upstream commit 94a370fc8def6038dbc02199db9584b0b3690f1a ]
    
    The ACPI sysfs code will fail to initialize if acpi_kobj is NULL,
    together with some ACPI drivers.
    
    Follow the other firmware subsystems and bail out if the kobject
    cannot be registered.
    
    Signed-off-by: Armin Wolf <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ACPICA: Avoid sequence overread in call to strncmp() [+ + +]
Author: Ahmed Salem <[email protected]>
Date:   Fri Apr 25 21:30:27 2025 +0200

    ACPICA: Avoid sequence overread in call to strncmp()
    
    [ Upstream commit 64b9dfd0776e9c38d733094859a09f13282ce6f8 ]
    
    ACPICA commit 8b83a8d88dfec59ea147fad35fc6deea8859c58c
    
    ap_get_table_length() checks if tables are valid by
    calling ap_is_valid_header(). The latter then calls
    ACPI_VALIDATE_RSDP_SIG(Table->Signature).
    
    ap_is_valid_header() accepts struct acpi_table_header as an argument, so
    the signature size is always fixed to 4 bytes.
    
    The problem is when the string comparison is between ACPI-defined table
    signature and ACPI_SIG_RSDP. Common ACPI table header specifies the
    Signature field to be 4 bytes long[1], with the exception of the RSDP
    structure whose signature is 8 bytes long "RSD PTR " (including the
    trailing blank character)[2]. Calling strncmp(sig, rsdp_sig, 8) would
    then result in a sequence overread[3] as sig would be smaller (4 bytes)
    than the specified bound (8 bytes).
    
    As a workaround, pass the bound conditionally based on the size of the
    signature being passed.
    
    Link: https://uefi.org/specs/ACPI/6.5_A/05_ACPI_Software_Programming_Model.html#system-description-table-header [1]
    Link: https://uefi.org/specs/ACPI/6.5_A/05_ACPI_Software_Programming_Model.html#root-system-description-pointer-rsdp-structure [2]
    Link: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wstringop-overread [3]
    Link: https://github.com/acpica/acpica/commit/8b83a8d8
    Signed-off-by: Ahmed Salem <[email protected]>
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

ACPICA: fix acpi operand cache leak in dswstate.c [+ + +]
Author: Seunghun Han <[email protected]>
Date:   Wed Mar 26 21:05:24 2025 +0100

    ACPICA: fix acpi operand cache leak in dswstate.c
    
    [ Upstream commit 156fd20a41e776bbf334bd5e45c4f78dfc90ce1c ]
    
    ACPICA commit 987a3b5cf7175916e2a4b6ea5b8e70f830dfe732
    
    I found an ACPI cache leak in ACPI early termination and boot continuing case.
    
    When early termination occurs due to malicious ACPI table, Linux kernel
    terminates ACPI function and continues to boot process. While kernel terminates
    ACPI function, kmem_cache_destroy() reports Acpi-Operand cache leak.
    
    Boot log of ACPI operand cache leak is as follows:
    >[    0.585957] ACPI: Added _OSI(Module Device)
    >[    0.587218] ACPI: Added _OSI(Processor Device)
    >[    0.588530] ACPI: Added _OSI(3.0 _SCP Extensions)
    >[    0.589790] ACPI: Added _OSI(Processor Aggregator Device)
    >[    0.591534] ACPI Error: Illegal I/O port address/length above 64K: C806E00000004002/0x2 (20170303/hwvalid-155)
    >[    0.594351] ACPI Exception: AE_LIMIT, Unable to initialize fixed events (20170303/evevent-88)
    >[    0.597858] ACPI: Unable to start the ACPI Interpreter
    >[    0.599162] ACPI Error: Could not remove SCI handler (20170303/evmisc-281)
    >[    0.601836] kmem_cache_destroy Acpi-Operand: Slab cache still has objects
    >[    0.603556] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.12.0-rc5 #26
    >[    0.605159] Hardware name: innotek gmb_h virtual_box/virtual_box, BIOS virtual_box 12/01/2006
    >[    0.609177] Call Trace:
    >[    0.610063]  ? dump_stack+0x5c/0x81
    >[    0.611118]  ? kmem_cache_destroy+0x1aa/0x1c0
    >[    0.612632]  ? acpi_sleep_proc_init+0x27/0x27
    >[    0.613906]  ? acpi_os_delete_cache+0xa/0x10
    >[    0.617986]  ? acpi_ut_delete_caches+0x3f/0x7b
    >[    0.619293]  ? acpi_terminate+0xa/0x14
    >[    0.620394]  ? acpi_init+0x2af/0x34f
    >[    0.621616]  ? __class_create+0x4c/0x80
    >[    0.623412]  ? video_setup+0x7f/0x7f
    >[    0.624585]  ? acpi_sleep_proc_init+0x27/0x27
    >[    0.625861]  ? do_one_initcall+0x4e/0x1a0
    >[    0.627513]  ? kernel_init_freeable+0x19e/0x21f
    >[    0.628972]  ? rest_init+0x80/0x80
    >[    0.630043]  ? kernel_init+0xa/0x100
    >[    0.631084]  ? ret_from_fork+0x25/0x30
    >[    0.633343] vgaarb: loaded
    >[    0.635036] EDAC MC: Ver: 3.0.0
    >[    0.638601] PCI: Probing PCI hardware
    >[    0.639833] PCI host bridge to bus 0000:00
    >[    0.641031] pci_bus 0000:00: root bus resource [io  0x0000-0xffff]
    > ... Continue to boot and log is omitted ...
    
    I analyzed this memory leak in detail and found acpi_ds_obj_stack_pop_and_
    delete() function miscalculated the top of the stack. acpi_ds_obj_stack_push()
    function uses walk_state->operand_index for start position of the top, but
    acpi_ds_obj_stack_pop_and_delete() function considers index 0 for it.
    Therefore, this causes acpi operand memory leak.
    
    This cache leak causes a security threat because an old kernel (<= 4.9) shows
    memory locations of kernel functions in stack dump. Some malicious users
    could use this information to neutralize kernel ASLR.
    
    I made a patch to fix ACPI operand cache leak.
    
    Link: https://github.com/acpica/acpica/commit/987a3b5c
    Signed-off-by: Seunghun Han <[email protected]>
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

ACPICA: fix acpi parse and parseext cache leaks [+ + +]
Author: Seunghun Han <[email protected]>
Date:   Wed Mar 26 21:06:21 2025 +0100

    ACPICA: fix acpi parse and parseext cache leaks
    
    [ Upstream commit bed18f0bdcd6737a938264a59d67923688696fc4 ]
    
    ACPICA commit 8829e70e1360c81e7a5a901b5d4f48330e021ea5
    
    I'm Seunghun Han, and I work for National Security Research Institute of
    South Korea.
    
    I have been doing a research on ACPI and found an ACPI cache leak in ACPI
    early abort cases.
    
    Boot log of ACPI cache leak is as follows:
    [    0.352414] ACPI: Added _OSI(Module Device)
    [    0.353182] ACPI: Added _OSI(Processor Device)
    [    0.353182] ACPI: Added _OSI(3.0 _SCP Extensions)
    [    0.353182] ACPI: Added _OSI(Processor Aggregator Device)
    [    0.356028] ACPI: Unable to start the ACPI Interpreter
    [    0.356799] ACPI Error: Could not remove SCI handler (20170303/evmisc-281)
    [    0.360215] kmem_cache_destroy Acpi-State: Slab cache still has objects
    [    0.360648] CPU: 0 PID: 1 Comm: swapper/0 Tainted: G        W
    4.12.0-rc4-next-20170608+ #10
    [    0.361273] Hardware name: innotek gmb_h virtual_box/virtual_box, BIOS
    virtual_box 12/01/2006
    [    0.361873] Call Trace:
    [    0.362243]  ? dump_stack+0x5c/0x81
    [    0.362591]  ? kmem_cache_destroy+0x1aa/0x1c0
    [    0.362944]  ? acpi_sleep_proc_init+0x27/0x27
    [    0.363296]  ? acpi_os_delete_cache+0xa/0x10
    [    0.363646]  ? acpi_ut_delete_caches+0x6d/0x7b
    [    0.364000]  ? acpi_terminate+0xa/0x14
    [    0.364000]  ? acpi_init+0x2af/0x34f
    [    0.364000]  ? __class_create+0x4c/0x80
    [    0.364000]  ? video_setup+0x7f/0x7f
    [    0.364000]  ? acpi_sleep_proc_init+0x27/0x27
    [    0.364000]  ? do_one_initcall+0x4e/0x1a0
    [    0.364000]  ? kernel_init_freeable+0x189/0x20a
    [    0.364000]  ? rest_init+0xc0/0xc0
    [    0.364000]  ? kernel_init+0xa/0x100
    [    0.364000]  ? ret_from_fork+0x25/0x30
    
    I analyzed this memory leak in detail. I found that “Acpi-State” cache and
    “Acpi-Parse” cache were merged because the size of cache objects was same
    slab cache size.
    
    I finally found “Acpi-Parse” cache and “Acpi-parse_ext” cache were leaked
    using SLAB_NEVER_MERGE flag in kmem_cache_create() function.
    
    Real ACPI cache leak point is as follows:
    [    0.360101] ACPI: Added _OSI(Module Device)
    [    0.360101] ACPI: Added _OSI(Processor Device)
    [    0.360101] ACPI: Added _OSI(3.0 _SCP Extensions)
    [    0.361043] ACPI: Added _OSI(Processor Aggregator Device)
    [    0.364016] ACPI: Unable to start the ACPI Interpreter
    [    0.365061] ACPI Error: Could not remove SCI handler (20170303/evmisc-281)
    [    0.368174] kmem_cache_destroy Acpi-Parse: Slab cache still has objects
    [    0.369332] CPU: 1 PID: 1 Comm: swapper/0 Tainted: G        W
    4.12.0-rc4-next-20170608+ #8
    [    0.371256] Hardware name: innotek gmb_h virtual_box/virtual_box, BIOS
    virtual_box 12/01/2006
    [    0.372000] Call Trace:
    [    0.372000]  ? dump_stack+0x5c/0x81
    [    0.372000]  ? kmem_cache_destroy+0x1aa/0x1c0
    [    0.372000]  ? acpi_sleep_proc_init+0x27/0x27
    [    0.372000]  ? acpi_os_delete_cache+0xa/0x10
    [    0.372000]  ? acpi_ut_delete_caches+0x56/0x7b
    [    0.372000]  ? acpi_terminate+0xa/0x14
    [    0.372000]  ? acpi_init+0x2af/0x34f
    [    0.372000]  ? __class_create+0x4c/0x80
    [    0.372000]  ? video_setup+0x7f/0x7f
    [    0.372000]  ? acpi_sleep_proc_init+0x27/0x27
    [    0.372000]  ? do_one_initcall+0x4e/0x1a0
    [    0.372000]  ? kernel_init_freeable+0x189/0x20a
    [    0.372000]  ? rest_init+0xc0/0xc0
    [    0.372000]  ? kernel_init+0xa/0x100
    [    0.372000]  ? ret_from_fork+0x25/0x30
    [    0.388039] kmem_cache_destroy Acpi-parse_ext: Slab cache still has objects
    [    0.389063] CPU: 1 PID: 1 Comm: swapper/0 Tainted: G        W
    4.12.0-rc4-next-20170608+ #8
    [    0.390557] Hardware name: innotek gmb_h virtual_box/virtual_box, BIOS
    virtual_box 12/01/2006
    [    0.392000] Call Trace:
    [    0.392000]  ? dump_stack+0x5c/0x81
    [    0.392000]  ? kmem_cache_destroy+0x1aa/0x1c0
    [    0.392000]  ? acpi_sleep_proc_init+0x27/0x27
    [    0.392000]  ? acpi_os_delete_cache+0xa/0x10
    [    0.392000]  ? acpi_ut_delete_caches+0x6d/0x7b
    [    0.392000]  ? acpi_terminate+0xa/0x14
    [    0.392000]  ? acpi_init+0x2af/0x34f
    [    0.392000]  ? __class_create+0x4c/0x80
    [    0.392000]  ? video_setup+0x7f/0x7f
    [    0.392000]  ? acpi_sleep_proc_init+0x27/0x27
    [    0.392000]  ? do_one_initcall+0x4e/0x1a0
    [    0.392000]  ? kernel_init_freeable+0x189/0x20a
    [    0.392000]  ? rest_init+0xc0/0xc0
    [    0.392000]  ? kernel_init+0xa/0x100
    [    0.392000]  ? ret_from_fork+0x25/0x30
    
    When early abort is occurred due to invalid ACPI information, Linux kernel
    terminates ACPI by calling acpi_terminate() function. The function calls
    acpi_ut_delete_caches() function to delete local caches (acpi_gbl_namespace_
    cache, state_cache, operand_cache, ps_node_cache, ps_node_ext_cache).
    
    But the deletion codes in acpi_ut_delete_caches() function only delete
    slab caches using kmem_cache_destroy() function, therefore the cache
    objects should be flushed before acpi_ut_delete_caches() function.
    
    "Acpi-Parse" cache and "Acpi-ParseExt" cache are used in an AML parse
    function, acpi_ps_parse_loop(). The function should complete all ops
    using acpi_ps_complete_final_op() when an error occurs due to invalid
    AML codes.
    However, the current implementation of acpi_ps_complete_final_op() does not
    complete all ops when it meets some errors and this cause cache leak.
    
    This cache leak has a security threat because an old kernel (<= 4.9) shows
    memory locations of kernel functions in stack dump. Some malicious users
    could use this information to neutralize kernel ASLR.
    
    To fix ACPI cache leak for enhancing security, I made a patch to complete all
    ops unconditionally for acpi_ps_complete_final_op() function.
    
    I hope that this patch improves the security of Linux kernel.
    
    Thank you.
    
    Link: https://github.com/acpica/acpica/commit/8829e70e
    Signed-off-by: Seunghun Han <[email protected]>
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

ACPICA: utilities: Fix overflow check in vsnprintf() [+ + +]
Author: gldrk <[email protected]>
Date:   Fri Apr 25 21:21:52 2025 +0200

    ACPICA: utilities: Fix overflow check in vsnprintf()
    
    [ Upstream commit 12b660251007e00a3e4d47ec62dbe3a7ace7023e ]
    
    ACPICA commit d9d59b7918514ae55063b93f3ec041b1a569bf49
    
    The old version breaks sprintf on 64-bit systems for buffers
    outside [0..UINT32_MAX].
    
    Link: https://github.com/acpica/acpica/commit/d9d59b79
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: gldrk <[email protected]>
    [ rjw: Added the tag from gldrk ]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ALSA: hda/intel: Add Thinkpad E15 to PM deny list [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Sun Jun 8 11:14:14 2025 +0200

    ALSA: hda/intel: Add Thinkpad E15 to PM deny list
    
    commit c987a390f1b3b8bdac11031d7004e3410fe259bd upstream.
    
    Lenovo Thinkpad E15 with Conexant CX8070 codec seems causing ugly
    noises after runtime-PM suspend.  Disable the codec runtime PM as a
    workaround.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=220210
    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: hda/realtek: enable headset mic on Latitude 5420 Rugged [+ + +]
Author: Jonathan Lane <[email protected]>
Date:   Wed Jun 11 12:31:25 2025 -0700

    ALSA: hda/realtek: enable headset mic on Latitude 5420 Rugged
    
    commit efa6bdf1bc75e26cafaa5f1d775e8bb7c5b0c431 upstream.
    
    Like many Dell laptops, the 3.5mm port by default can not detect a
    combined headphones+mic headset or even a pure microphone.  This
    change enables the port's functionality.
    
    Signed-off-by: Jonathan Lane <[email protected]>
    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: Rename ALSA kcontrol PCM and PCM1 for the KTMicro sound card [+ + +]
Author: wangdicheng <[email protected]>
Date:   Fri Jun 13 14:36:36 2025 +0800

    ALSA: usb-audio: Rename ALSA kcontrol PCM and PCM1 for the KTMicro sound card
    
    commit 93adf20ff4d6e865e0b974110d3cf2f07c057177 upstream.
    
    PCM1 not in Pulseaudio's control list; standardize control to
    "Speaker" and "Headphone".
    
    Signed-off-by: wangdicheng <[email protected]>
    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]>

 
aoe: clean device rq_list in aoedev_downdev() [+ + +]
Author: Justin Sanders <[email protected]>
Date:   Tue Jun 10 17:05:59 2025 +0000

    aoe: clean device rq_list in aoedev_downdev()
    
    [ Upstream commit 7f90d45e57cb2ef1f0adcaf925ddffdfc5e680ca ]
    
    An aoe device's rq_list contains accepted block requests that are
    waiting to be transmitted to the aoe target. This queue was added as
    part of the conversion to blk_mq. However, the queue was not cleaned out
    when an aoe device is downed which caused blk_mq_freeze_queue() to sleep
    indefinitely waiting for those requests to complete, causing a hang. This
    fix cleans out the queue before calling blk_mq_freeze_queue().
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=212665
    Fixes: 3582dd291788 ("aoe: convert aoeblk to blk-mq")
    Signed-off-by: Justin Sanders <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Tested-By: Valentin Kleibel <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
arm64/mm: Close theoretical race where stale TLB entry remains valid [+ + +]
Author: Ryan Roberts <[email protected]>
Date:   Fri May 30 16:23:47 2025 +0100

    arm64/mm: Close theoretical race where stale TLB entry remains valid
    
    commit 4b634918384c0f84c33aeb4dd9fd4c38e7be5ccb upstream.
    
    Commit 3ea277194daa ("mm, mprotect: flush TLB if potentially racing with
    a parallel reclaim leaving stale TLB entries") describes a race that,
    prior to the commit, could occur between reclaim and operations such as
    mprotect() when using reclaim's tlbbatch mechanism. See that commit for
    details but the summary is:
    
    """
    Nadav Amit identified a theoritical race between page reclaim and
    mprotect due to TLB flushes being batched outside of the PTL being held.
    
    He described the race as follows:
    
            CPU0                            CPU1
            ----                            ----
                                            user accesses memory using RW PTE
                                            [PTE now cached in TLB]
            try_to_unmap_one()
            ==> ptep_get_and_clear()
            ==> set_tlb_ubc_flush_pending()
                                            mprotect(addr, PROT_READ)
                                            ==> change_pte_range()
                                            ==> [ PTE non-present - no flush ]
    
                                            user writes using cached RW PTE
            ...
    
            try_to_unmap_flush()
    """
    
    The solution was to insert flush_tlb_batched_pending() in mprotect() and
    friends to explcitly drain any pending reclaim TLB flushes. In the
    modern version of this solution, arch_flush_tlb_batched_pending() is
    called to do that synchronisation.
    
    arm64's tlbbatch implementation simply issues TLBIs at queue-time
    (arch_tlbbatch_add_pending()), eliding the trailing dsb(ish). The
    trailing dsb(ish) is finally issued in arch_tlbbatch_flush() at the end
    of the batch to wait for all the issued TLBIs to complete.
    
    Now, the Arm ARM states:
    
    """
    The completion of the TLB maintenance instruction is guaranteed only by
    the execution of a DSB by the observer that performed the TLB
    maintenance instruction. The execution of a DSB by a different observer
    does not have this effect, even if the DSB is known to be executed after
    the TLB maintenance instruction is observed by that different observer.
    """
    
    arch_tlbbatch_add_pending() and arch_tlbbatch_flush() conform to this
    requirement because they are called from the same task (either kswapd or
    caller of madvise(MADV_PAGEOUT)), so either they are on the same CPU or
    if the task was migrated, __switch_to() contains an extra dsb(ish).
    
    HOWEVER, arm64's arch_flush_tlb_batched_pending() is also implemented as
    a dsb(ish). But this may be running on a CPU remote from the one that
    issued the outstanding TLBIs. So there is no architectural gurantee of
    synchonization. Therefore we are still vulnerable to the theoretical
    race described in Commit 3ea277194daa ("mm, mprotect: flush TLB if
    potentially racing with a parallel reclaim leaving stale TLB entries").
    
    Fix this by flushing the entire mm in arch_flush_tlb_batched_pending().
    This aligns with what the other arches that implement the tlbbatch
    feature do.
    
    Cc: <[email protected]>
    Fixes: 43b3dfdd0455 ("arm64: support batched/deferred tlb shootdown during page reclamation/migration")
    Signed-off-by: Ryan Roberts <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Will Deacon <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
arm64/ptrace: Fix stack-out-of-bounds read in regs_get_kernel_stack_nth() [+ + +]
Author: Tengda Wu <[email protected]>
Date:   Wed Jun 4 00:55:33 2025 +0000

    arm64/ptrace: Fix stack-out-of-bounds read in regs_get_kernel_stack_nth()
    
    [ Upstream commit 39dfc971e42d886e7df01371cd1bef505076d84c ]
    
    KASAN reports a stack-out-of-bounds read in regs_get_kernel_stack_nth().
    
    Call Trace:
    [   97.283505] BUG: KASAN: stack-out-of-bounds in regs_get_kernel_stack_nth+0xa8/0xc8
    [   97.284677] Read of size 8 at addr ffff800089277c10 by task 1.sh/2550
    [   97.285732]
    [   97.286067] CPU: 7 PID: 2550 Comm: 1.sh Not tainted 6.6.0+ #11
    [   97.287032] Hardware name: linux,dummy-virt (DT)
    [   97.287815] Call trace:
    [   97.288279]  dump_backtrace+0xa0/0x128
    [   97.288946]  show_stack+0x20/0x38
    [   97.289551]  dump_stack_lvl+0x78/0xc8
    [   97.290203]  print_address_description.constprop.0+0x84/0x3c8
    [   97.291159]  print_report+0xb0/0x280
    [   97.291792]  kasan_report+0x84/0xd0
    [   97.292421]  __asan_load8+0x9c/0xc0
    [   97.293042]  regs_get_kernel_stack_nth+0xa8/0xc8
    [   97.293835]  process_fetch_insn+0x770/0xa30
    [   97.294562]  kprobe_trace_func+0x254/0x3b0
    [   97.295271]  kprobe_dispatcher+0x98/0xe0
    [   97.295955]  kprobe_breakpoint_handler+0x1b0/0x210
    [   97.296774]  call_break_hook+0xc4/0x100
    [   97.297451]  brk_handler+0x24/0x78
    [   97.298073]  do_debug_exception+0xac/0x178
    [   97.298785]  el1_dbg+0x70/0x90
    [   97.299344]  el1h_64_sync_handler+0xcc/0xe8
    [   97.300066]  el1h_64_sync+0x78/0x80
    [   97.300699]  kernel_clone+0x0/0x500
    [   97.301331]  __arm64_sys_clone+0x70/0x90
    [   97.302084]  invoke_syscall+0x68/0x198
    [   97.302746]  el0_svc_common.constprop.0+0x11c/0x150
    [   97.303569]  do_el0_svc+0x38/0x50
    [   97.304164]  el0_svc+0x44/0x1d8
    [   97.304749]  el0t_64_sync_handler+0x100/0x130
    [   97.305500]  el0t_64_sync+0x188/0x190
    [   97.306151]
    [   97.306475] The buggy address belongs to stack of task 1.sh/2550
    [   97.307461]  and is located at offset 0 in frame:
    [   97.308257]  __se_sys_clone+0x0/0x138
    [   97.308910]
    [   97.309241] This frame has 1 object:
    [   97.309873]  [48, 184) 'args'
    [   97.309876]
    [   97.310749] The buggy address belongs to the virtual mapping at
    [   97.310749]  [ffff800089270000, ffff800089279000) created by:
    [   97.310749]  dup_task_struct+0xc0/0x2e8
    [   97.313347]
    [   97.313674] The buggy address belongs to the physical page:
    [   97.314604] page: refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x14f69a
    [   97.315885] flags: 0x15ffffe00000000(node=1|zone=2|lastcpupid=0xfffff)
    [   97.316957] raw: 015ffffe00000000 0000000000000000 dead000000000122 0000000000000000
    [   97.318207] raw: 0000000000000000 0000000000000000 00000001ffffffff 0000000000000000
    [   97.319445] page dumped because: kasan: bad access detected
    [   97.320371]
    [   97.320694] Memory state around the buggy address:
    [   97.321511]  ffff800089277b00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    [   97.322681]  ffff800089277b80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    [   97.323846] >ffff800089277c00: 00 00 f1 f1 f1 f1 f1 f1 00 00 00 00 00 00 00 00
    [   97.325023]                          ^
    [   97.325683]  ffff800089277c80: 00 00 00 00 00 00 00 00 00 f3 f3 f3 f3 f3 f3 f3
    [   97.326856]  ffff800089277d00: f3 f3 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    
    This issue seems to be related to the behavior of some gcc compilers and
    was also fixed on the s390 architecture before:
    
     commit d93a855c31b7 ("s390/ptrace: Avoid KASAN false positives in regs_get_kernel_stack_nth()")
    
    As described in that commit, regs_get_kernel_stack_nth() has confirmed that
    `addr` is on the stack, so reading the value at `*addr` should be allowed.
    Use READ_ONCE_NOCHECK() helper to silence the KASAN check for this case.
    
    Fixes: 0a8ea52c3eb1 ("arm64: Add HAVE_REGS_AND_STACK_ACCESS_API feature")
    Signed-off-by: Tengda Wu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    [will: Use '*addr' as the argument to READ_ONCE_NOCHECK()]
    Signed-off-by: Will Deacon <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
arm64: Restrict pagetable teardown to avoid false warning [+ + +]
Author: Dev Jain <[email protected]>
Date:   Tue May 27 13:56:33 2025 +0530

    arm64: Restrict pagetable teardown to avoid false warning
    
    commit 650768c512faba8070bf4cfbb28c95eb5cd203f3 upstream.
    
    Commit 9c006972c3fe ("arm64: mmu: drop pXd_present() checks from
    pXd_free_pYd_table()") removes the pxd_present() checks because the
    caller checks pxd_present(). But, in case of vmap_try_huge_pud(), the
    caller only checks pud_present(); pud_free_pmd_page() recurses on each
    pmd through pmd_free_pte_page(), wherein the pmd may be none. Thus it is
    possible to hit a warning in the latter, since pmd_none => !pmd_table().
    Thus, add a pmd_present() check in pud_free_pmd_page().
    
    This problem was found by code inspection.
    
    Fixes: 9c006972c3fe ("arm64: mmu: drop pXd_present() checks from pXd_free_pYd_table()")
    Cc: [email protected]
    Reported-by: Ryan Roberts <[email protected]>
    Acked-by: David Hildenbrand <[email protected]>
    Signed-off-by: Dev Jain <[email protected]>
    Reviewed-by: Catalin Marinas <[email protected]>
    Reviewed-by: Anshuman Khandual <[email protected]>
    Reviewed-by: Ryan Roberts <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Will Deacon <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ARM: 9447/1: arm/memremap: fix arch_memremap_can_ram_remap() [+ + +]
Author: Ross Stutterheim <[email protected]>
Date:   Wed Apr 16 14:50:06 2025 +0100

    ARM: 9447/1: arm/memremap: fix arch_memremap_can_ram_remap()
    
    commit 96e0b355883006554a0bee3697da475971d6bba8 upstream.
    
    arm/memremap: fix arch_memremap_can_ram_remap()
    
    commit 260364d112bc ("arm[64]/memremap: don't abuse pfn_valid() to ensure
    presence of linear map") added the definition of
    arch_memremap_can_ram_remap() for arm[64] specific filtering of what pages
    can be used from the linear mapping. memblock_is_map_memory() was called
    with the pfn of the address given to arch_memremap_can_ram_remap();
    however, memblock_is_map_memory() expects to be given an address for arm,
    not a pfn.
    
    This results in calls to memremap() returning a newly mapped area when
    it should return an address in the existing linear mapping.
    
    Fix this by removing the address to pfn translation and pass the
    address directly.
    
    Fixes: 260364d112bc ("arm[64]/memremap: don't abuse pfn_valid() to ensure presence of linear map")
    Signed-off-by: Ross Stutterheim <[email protected]>
    Cc: Mike Rapoport <[email protected]>
    Cc: [email protected]
    Reviewed-by: Catalin Marinas <[email protected]>
    Reviewed-by: Linus Walleij <[email protected]>
    Signed-off-by: Russell King (Oracle) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ARM: dts: am335x-bone-common: Increase MDIO reset deassert delay to 50ms [+ + +]
Author: Geert Uytterhoeven <[email protected]>
Date:   Thu Oct 31 10:29:51 2024 +0100

    ARM: dts: am335x-bone-common: Increase MDIO reset deassert delay to 50ms
    
    commit 929d8490f8790164f5f63671c1c58d6c50411cb2 upstream.
    
    Commit b9bf5612610aa7e3 ("ARM: dts: am335x-bone-common: Increase MDIO
    reset deassert time") already increased the MDIO reset deassert delay
    from 6.5 to 13 ms, but this may still cause Ethernet PHY probe failures:
    
        SMSC LAN8710/LAN8720 4a101000.mdio:00: probe with driver SMSC LAN8710/LAN8720 failed with error -5
    
    On BeagleBone Black Rev. C3, ETH_RESETn is controlled by an open-drain
    AND gate.  It is pulled high by a 10K resistor, and has a 4.7µF
    capacitor to ground, giving an RC time constant of 47ms.  As it takes
    0.7RC to charge the capacitor above the threshold voltage of a CMOS
    input (VDD/2), the delay should be at least 33ms.  Considering the
    typical tolerance of 20% on capacitors, 40ms would be safer.  Add an
    additional safety margin and settle for 50ms.
    
    Signed-off-by: Geert Uytterhoeven <[email protected]>
    Reviewed-by: Roger Quadros <[email protected]>
    Link: https://lore.kernel.org/r/9002a58daa1b2983f39815b748ee9d2f8dcc4829.1730366936.git.geert+renesas@glider.be
    Signed-off-by: Kevin Hilman <[email protected]>
    Signed-off-by: Nobuhiro Iwamatsu (CIP) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ARM: dts: am335x-bone-common: Increase MDIO reset deassert time [+ + +]
Author: Colin Foster <[email protected]>
Date:   Fri May 31 13:38:17 2024 -0500

    ARM: dts: am335x-bone-common: Increase MDIO reset deassert time
    
    commit b9bf5612610aa7e38d58fee16f489814db251c01 upstream.
    
    Prior to commit df16c1c51d81 ("net: phy: mdio_device: Reset device only
    when necessary") MDIO reset deasserts were performed twice during boot.
    Now that the second deassert is no longer performed, device probe
    failures happen due to the change in timing with the following error
    message:
    
    SMSC LAN8710/LAN8720: probe of 4a101000.mdio:00 failed with error -5
    
    Restore the original effective timing, which resolves the probe
    failures.
    
    Signed-off-by: Colin Foster <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Kevin Hilman <[email protected]>
    Signed-off-by: Nobuhiro Iwamatsu (CIP) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ARM: OMAP2+: Fix l4ls clk domain handling in STANDBY [+ + +]
Author: Sukrut Bellary <[email protected]>
Date:   Tue Mar 18 16:00:39 2025 -0700

    ARM: OMAP2+: Fix l4ls clk domain handling in STANDBY
    
    [ Upstream commit 47fe74098f3dadba2f9cc1e507d813a4aa93f5f3 ]
    
    Don't put the l4ls clk domain to sleep in case of standby.
    Since CM3 PM FW[1](ti-v4.1.y) doesn't wake-up/enable the l4ls clk domain
    upon wake-up, CM3 PM FW fails to wake-up the MPU.
    
    [1] https://git.ti.com/cgit/processor-firmware/ti-amx3-cm3-pm-firmware/
    
    Signed-off-by: Sukrut Bellary <[email protected]>
    Tested-by: Judith Mendez <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Kevin Hilman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ARM: omap: pmic-cpcap: do not mess around without CPCAP or OMAP4 [+ + +]
Author: Andreas Kemnade <[email protected]>
Date:   Mon Mar 31 16:44:39 2025 +0200

    ARM: omap: pmic-cpcap: do not mess around without CPCAP or OMAP4
    
    commit 7397daf1029d5bfd3415ec8622f5179603d5702d upstream.
    
    The late init call just writes to omap4 registers as soon as
    CONFIG_MFD_CPCAP is enabled without checking whether the
    cpcap driver is actually there or the SoC is indeed an
    OMAP4.
    Rather do these things only with the right device combination.
    
    Fixes booting the BT200 with said configuration enabled and non-factory
    X-Loader and probably also some surprising behavior on other devices.
    
    Fixes: c145649bf262 ("ARM: OMAP2+: Configure voltage controller for cpcap to low-speed")
    CC: [email protected]
    Signed-off-by: Andreas Kemnade <[email protected]>
    Reivewed-by: Tony Lindgren <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Kevin Hilman <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ASoC: amd: yc: Add quirk for Lenovo Yoga Pro 7 14ASP9 [+ + +]
Author: Talhah Peerbhai <[email protected]>
Date:   Fri May 16 01:27:41 2025 +0300

    ASoC: amd: yc: Add quirk for Lenovo Yoga Pro 7 14ASP9
    
    [ Upstream commit a28206060dc5848a1a2a15b7f6ac6223d869084d ]
    
    Similar to many other Lenovo models with AMD chips, the Lenovo
    Yoga Pro 7 14ASP9 (product name 83HN) requires a specific quirk
    to ensure internal mic detection. This patch adds a quirk fixing this.
    
    Signed-off-by: Talhah Peerbhai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: meson: meson-card-utils: use of_property_present() for DT parsing [+ + +]
Author: Martin Blumenstingl <[email protected]>
Date:   Sat Apr 19 23:34:48 2025 +0200

    ASoC: meson: meson-card-utils: use of_property_present() for DT parsing
    
    commit 171eb6f71e9e3ba6a7410a1d93f3ac213f39dae2 upstream.
    
    Commit c141ecc3cecd ("of: Warn when of_property_read_bool() is used on
    non-boolean properties") added a warning when trying to parse a property
    with a value (boolean properties are defined as: absent = false, present
    without any value = true). This causes a warning from meson-card-utils.
    
    meson-card-utils needs to know about the existence of the
    "audio-routing" and/or "audio-widgets" properties in order to properly
    parse them. Switch to of_property_present() in order to silence the
    following warning messages during boot:
      OF: /sound: Read of boolean property 'audio-routing' with a value.
      OF: /sound: Read of boolean property 'audio-widgets' with a value.
    
    Fixes: 7864a79f37b5 ("ASoC: meson: add axg sound card support")
    Tested-by: Christian Hewitt <[email protected]>
    Cc: [email protected]
    Signed-off-by: Martin Blumenstingl <[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: qcom: sdm845: Add error handling in sdm845_slim_snd_hw_params() [+ + +]
Author: Wentao Liang <[email protected]>
Date:   Mon May 19 15:57:39 2025 +0800

    ASoC: qcom: sdm845: Add error handling in sdm845_slim_snd_hw_params()
    
    commit 688abe2860fd9c644705b9e11cb9649eb891b879 upstream.
    
    The function sdm845_slim_snd_hw_params() calls the functuion
    snd_soc_dai_set_channel_map() but does not check its return
    value. A proper implementation can be found in msm_snd_hw_params().
    
    Add error handling for snd_soc_dai_set_channel_map(). If the
    function fails and it is not a unsupported error, return the
    error code immediately.
    
    Fixes: 5caf64c633a3 ("ASoC: qcom: sdm845: add support to DB845c and Lenovo Yoga")
    Cc: [email protected] # v5.6
    Signed-off-by: Wentao Liang <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[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: tas2770: Power cycle amp on ISENSE/VSENSE change [+ + +]
Author: Hector Martin <[email protected]>
Date:   Sun Apr 6 09:15:05 2025 +1000

    ASoC: tas2770: Power cycle amp on ISENSE/VSENSE change
    
    [ Upstream commit f529c91be8a34ac12e7599bf87c65b6f4a2c9f5c ]
    
    The ISENSE/VSENSE blocks are only powered up when the amplifier
    transitions from shutdown to active. This means that if those controls
    are flipped on while the amplifier is already playing back audio, they
    will have no effect.
    
    Fix this by forcing a power cycle around transitions in those controls.
    
    Reviewed-by: Neal Gompa <[email protected]>
    Signed-off-by: Hector Martin <[email protected]>
    Signed-off-by: James Calligeros <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: tegra210_ahub: Add check to of_device_get_match_data() [+ + +]
Author: Yuanjun Gong <[email protected]>
Date:   Tue May 13 20:37:44 2025 +0800

    ASoC: tegra210_ahub: Add check to of_device_get_match_data()
    
    [ Upstream commit 04cb269c204398763a620d426cbee43064854000 ]
    
    In tegra_ahub_probe(), check the result of function
    of_device_get_match_data(), return an error code in case it fails.
    
    Signed-off-by: Yuanjun Gong <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ata: pata_via: Force PIO for ATAPI devices on VT6415/VT6330 [+ + +]
Author: Tasos Sahanidis <[email protected]>
Date:   Mon May 19 11:49:45 2025 +0300

    ata: pata_via: Force PIO for ATAPI devices on VT6415/VT6330
    
    commit d29fc02caad7f94b62d56ee1b01c954f9c961ba7 upstream.
    
    The controller has a hardware bug that can hard hang the system when
    doing ATAPI DMAs without any trace of what happened. Depending on the
    device attached, it can also prevent the system from booting.
    
    In this case, the system hangs when reading the ATIP from optical media
    with cdrecord -vvv -atip on an _NEC DVD_RW ND-4571A 1-01 and an
    Optiarc DVD RW AD-7200A 1.06 attached to an ASRock 990FX Extreme 4,
    running at UDMA/33.
    
    The issue can be reproduced by running the same command with a cygwin
    build of cdrecord on WinXP, although it requires more attempts to cause
    it. The hang in that case is also resolved by forcing PIO. It doesn't
    appear that VIA has produced any drivers for that OS, thus no known
    workaround exists.
    
    HDDs attached to the controller do not suffer from any DMA issues.
    
    Cc: [email protected]
    Link: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/916677
    Signed-off-by: Tasos Sahanidis <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Niklas Cassel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
atm: atmtcp: Free invalid length skb in atmtcp_c_send(). [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Mon Jun 16 11:21:14 2025 -0700

    atm: atmtcp: Free invalid length skb in atmtcp_c_send().
    
    [ Upstream commit 2f370ae1fb6317985f3497b1bb80d457508ca2f7 ]
    
    syzbot reported the splat below. [0]
    
    vcc_sendmsg() copies data passed from userspace to skb and passes
    it to vcc->dev->ops->send().
    
    atmtcp_c_send() accesses skb->data as struct atmtcp_hdr after
    checking if skb->len is 0, but it's not enough.
    
    Also, when skb->len == 0, skb and sk (vcc) were leaked because
    dev_kfree_skb() is not called and sk_wmem_alloc adjustment is missing
    to revert atm_account_tx() in vcc_sendmsg(), which is expected
    to be done in atm_pop_raw().
    
    Let's properly free skb with an invalid length in atmtcp_c_send().
    
    [0]:
    BUG: KMSAN: uninit-value in atmtcp_c_send+0x255/0xed0 drivers/atm/atmtcp.c:294
     atmtcp_c_send+0x255/0xed0 drivers/atm/atmtcp.c:294
     vcc_sendmsg+0xd7c/0xff0 net/atm/common.c:644
     sock_sendmsg_nosec net/socket.c:712 [inline]
     __sock_sendmsg+0x330/0x3d0 net/socket.c:727
     ____sys_sendmsg+0x7e0/0xd80 net/socket.c:2566
     ___sys_sendmsg+0x271/0x3b0 net/socket.c:2620
     __sys_sendmsg net/socket.c:2652 [inline]
     __do_sys_sendmsg net/socket.c:2657 [inline]
     __se_sys_sendmsg net/socket.c:2655 [inline]
     __x64_sys_sendmsg+0x211/0x3e0 net/socket.c:2655
     x64_sys_call+0x32fb/0x3db0 arch/x86/include/generated/asm/syscalls_64.h:47
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xd9/0x210 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Uninit was created at:
     slab_post_alloc_hook mm/slub.c:4154 [inline]
     slab_alloc_node mm/slub.c:4197 [inline]
     kmem_cache_alloc_node_noprof+0x818/0xf00 mm/slub.c:4249
     kmalloc_reserve+0x13c/0x4b0 net/core/skbuff.c:579
     __alloc_skb+0x347/0x7d0 net/core/skbuff.c:670
     alloc_skb include/linux/skbuff.h:1336 [inline]
     vcc_sendmsg+0xb40/0xff0 net/atm/common.c:628
     sock_sendmsg_nosec net/socket.c:712 [inline]
     __sock_sendmsg+0x330/0x3d0 net/socket.c:727
     ____sys_sendmsg+0x7e0/0xd80 net/socket.c:2566
     ___sys_sendmsg+0x271/0x3b0 net/socket.c:2620
     __sys_sendmsg net/socket.c:2652 [inline]
     __do_sys_sendmsg net/socket.c:2657 [inline]
     __se_sys_sendmsg net/socket.c:2655 [inline]
     __x64_sys_sendmsg+0x211/0x3e0 net/socket.c:2655
     x64_sys_call+0x32fb/0x3db0 arch/x86/include/generated/asm/syscalls_64.h:47
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xd9/0x210 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    CPU: 1 UID: 0 PID: 5798 Comm: syz-executor192 Not tainted 6.16.0-rc1-syzkaller-00010-g2c4a1f3fe03e #0 PREEMPT(undef)
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 05/07/2025
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=1d3c235276f62963e93a
    Tested-by: [email protected]
    Signed-off-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]>

atm: Revert atm_account_tx() if copy_from_iter_full() fails. [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Mon Jun 16 11:21:15 2025 -0700

    atm: Revert atm_account_tx() if copy_from_iter_full() fails.
    
    commit 7851263998d4269125fd6cb3fdbfc7c6db853859 upstream.
    
    In vcc_sendmsg(), we account skb->truesize to sk->sk_wmem_alloc by
    atm_account_tx().
    
    It is expected to be reverted by atm_pop_raw() later called by
    vcc->dev->ops->send(vcc, skb).
    
    However, vcc_sendmsg() misses the same revert when copy_from_iter_full()
    fails, and then we will leak a socket.
    
    Let's factorise the revert part as atm_return_tx() and call it in
    the failure path.
    
    Note that the corresponding sk_wmem_alloc operation can be found in
    alloc_tx() as of the blamed commit.
    
      $ git blame -L:alloc_tx net/atm/common.c c55fa3cccbc2c~
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: Simon Horman <[email protected]>
    Closes: https://lore.kernel.org/netdev/[email protected]/
    Signed-off-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]>

 
bpf, sockmap: Fix data lost during EAGAIN retries [+ + +]
Author: Jiayuan Chen <[email protected]>
Date:   Mon Apr 7 22:21:20 2025 +0800

    bpf, sockmap: Fix data lost during EAGAIN retries
    
    [ Upstream commit 7683167196bd727ad5f3c3fc6a9ca70f54520a81 ]
    
    We call skb_bpf_redirect_clear() to clean _sk_redir before handling skb in
    backlog, but when sk_psock_handle_skb() return EAGAIN due to sk_rcvbuf
    limit, the redirect info in _sk_redir is not recovered.
    
    Fix skb redir loss during EAGAIN retries by restoring _sk_redir
    information using skb_bpf_set_redir().
    
    Before this patch:
    '''
    ./bench sockmap -c 2 -p 1 -a --rx-verdict-ingress
    Setting up benchmark 'sockmap'...
    create socket fd c1:13 p1:14 c2:15 p2:16
    Benchmark 'sockmap' started.
    Send Speed 1343.172 MB/s, BPF Speed 1343.238 MB/s, Rcv Speed   65.271 MB/s
    Send Speed 1352.022 MB/s, BPF Speed 1352.088 MB/s, Rcv Speed   0 MB/s
    Send Speed 1354.105 MB/s, BPF Speed 1354.105 MB/s, Rcv Speed   0 MB/s
    Send Speed 1355.018 MB/s, BPF Speed 1354.887 MB/s, Rcv Speed   0 MB/s
    '''
    Due to the high send rate, the RX processing path may frequently hit the
    sk_rcvbuf limit. Once triggered, incorrect _sk_redir will cause the flow
    to mistakenly enter the "!ingress" path, leading to send failures.
    (The Rcv speed depends on tcp_rmem).
    
    After this patch:
    '''
    ./bench sockmap -c 2 -p 1 -a --rx-verdict-ingress
    Setting up benchmark 'sockmap'...
    create socket fd c1:13 p1:14 c2:15 p2:16
    Benchmark 'sockmap' started.
    Send Speed 1347.236 MB/s, BPF Speed 1347.367 MB/s, Rcv Speed   65.402 MB/s
    Send Speed 1353.320 MB/s, BPF Speed 1353.320 MB/s, Rcv Speed   65.536 MB/s
    Send Speed 1353.186 MB/s, BPF Speed 1353.121 MB/s, Rcv Speed   65.536 MB/s
    '''
    
    Signed-off-by: Jiayuan Chen <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf: Check rcu_read_lock_trace_held() in bpf_map_lookup_percpu_elem() [+ + +]
Author: Hou Tao <[email protected]>
Date:   Mon May 26 14:25:34 2025 +0800

    bpf: Check rcu_read_lock_trace_held() in bpf_map_lookup_percpu_elem()
    
    [ Upstream commit d4965578267e2e81f67c86e2608481e77e9c8569 ]
    
    bpf_map_lookup_percpu_elem() helper is also available for sleepable bpf
    program. When BPF JIT is disabled or under 32-bit host,
    bpf_map_lookup_percpu_elem() will not be inlined. Using it in a
    sleepable bpf program will trigger the warning in
    bpf_map_lookup_percpu_elem(), because the bpf program only holds
    rcu_read_lock_trace lock. Therefore, add the missed check.
    
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/bpf/[email protected]/
    Signed-off-by: Hou Tao <[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 L4 csum update on IPv6 in CHECKSUM_COMPLETE [+ + +]
Author: Paul Chaignon <[email protected]>
Date:   Thu May 29 12:28:35 2025 +0200

    bpf: Fix L4 csum update on IPv6 in CHECKSUM_COMPLETE
    
    commit ead7f9b8de65632ef8060b84b0c55049a33cfea1 upstream.
    
    In Cilium, we use bpf_csum_diff + bpf_l4_csum_replace to, among other
    things, update the L4 checksum after reverse SNATing IPv6 packets. That
    use case is however not currently supported and leads to invalid
    skb->csum values in some cases. This patch adds support for IPv6 address
    changes in bpf_l4_csum_update via a new flag.
    
    When calling bpf_l4_csum_replace in Cilium, it ends up calling
    inet_proto_csum_replace_by_diff:
    
        1:  void inet_proto_csum_replace_by_diff(__sum16 *sum, struct sk_buff *skb,
        2:                                       __wsum diff, bool pseudohdr)
        3:  {
        4:      if (skb->ip_summed != CHECKSUM_PARTIAL) {
        5:          csum_replace_by_diff(sum, diff);
        6:          if (skb->ip_summed == CHECKSUM_COMPLETE && pseudohdr)
        7:              skb->csum = ~csum_sub(diff, skb->csum);
        8:      } else if (pseudohdr) {
        9:          *sum = ~csum_fold(csum_add(diff, csum_unfold(*sum)));
        10:     }
        11: }
    
    The bug happens when we're in the CHECKSUM_COMPLETE state. We've just
    updated one of the IPv6 addresses. The helper now updates the L4 header
    checksum on line 5. Next, it updates skb->csum on line 7. It shouldn't.
    
    For an IPv6 packet, the updates of the IPv6 address and of the L4
    checksum will cancel each other. The checksums are set such that
    computing a checksum over the packet including its checksum will result
    in a sum of 0. So the same is true here when we update the L4 checksum
    on line 5. We'll update it as to cancel the previous IPv6 address
    update. Hence skb->csum should remain untouched in this case.
    
    The same bug doesn't affect IPv4 packets because, in that case, three
    fields are updated: the IPv4 address, the IP checksum, and the L4
    checksum. The change to the IPv4 address and one of the checksums still
    cancel each other in skb->csum, but we're left with one checksum update
    and should therefore update skb->csum accordingly. That's exactly what
    inet_proto_csum_replace_by_diff does.
    
    This special case for IPv6 L4 checksums is also described atop
    inet_proto_csum_replace16, the function we should be using in this case.
    
    This patch introduces a new bpf_l4_csum_replace flag, BPF_F_IPV6,
    to indicate that we're updating the L4 checksum of an IPv6 packet. When
    the flag is set, inet_proto_csum_replace_by_diff will skip the
    skb->csum update.
    
    Fixes: 7d672345ed295 ("bpf: add generic bpf_csum_diff helper")
    Signed-off-by: Paul Chaignon <[email protected]>
    Acked-by: Daniel Borkmann <[email protected]>
    Link: https://patch.msgid.link/96a6bc3a443e6f0b21ff7b7834000e17fb549e05.1748509484.git.paul.chaignon@gmail.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Paul Chaignon <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
bus: fsl-mc: do not add a device-link for the UAPI used DPMCP device [+ + +]
Author: Ioana Ciornei <[email protected]>
Date:   Tue Apr 8 13:58:10 2025 +0300

    bus: fsl-mc: do not add a device-link for the UAPI used DPMCP device
    
    commit dd7d8e012b23de158ca0188239c7a1f2a83b4484 upstream.
    
    The fsl-mc bus associated to the root DPRC in a DPAA2 system exports a
    device file for userspace access to the MC firmware. In case the DPRC's
    local MC portal (DPMCP) is currently in use, a new DPMCP device is
    allocated through the fsl_mc_portal_allocate() function.
    
    In this case, the call to fsl_mc_portal_allocate() will fail with -EINVAL
    when trying to add a device link between the root DPRC (consumer) and
    the newly allocated DPMCP device (supplier). This is because the DPMCP
    is a dependent of the DPRC device (the bus).
    
    Fix this by not adding a device link in case the DPMCP is allocated for
    the root DPRC's usage.
    
    Fixes: afb77422819f ("bus: fsl-mc: automatically add a device_link on fsl_mc_[portal,object]_allocate")
    Signed-off-by: Ioana Ciornei <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Christophe Leroy <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

bus: fsl-mc: fix GET/SET_TAILDROP command ids [+ + +]
Author: Wan Junjie <[email protected]>
Date:   Tue Apr 8 13:58:11 2025 +0300

    bus: fsl-mc: fix GET/SET_TAILDROP command ids
    
    commit c78230ad34f82c6c0e0e986865073aeeef1f5d30 upstream.
    
    Command ids for taildrop get/set can not pass the check when they are
    using from the restool user space utility. Correct them according to the
    user manual.
    
    Fixes: d67cc29e6d1f ("bus: fsl-mc: list more commands as accepted through the ioctl")
    Signed-off-by: Wan Junjie <[email protected]>
    Signed-off-by: Ioana Ciornei <[email protected]>
    Cc: [email protected]
    Reviewed-by: Ioana Ciornei <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Christophe Leroy <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

bus: fsl-mc: increase MC_CMD_COMPLETION_TIMEOUT_MS value [+ + +]
Author: Laurentiu Tudor <[email protected]>
Date:   Tue Apr 8 13:58:14 2025 +0300

    bus: fsl-mc: increase MC_CMD_COMPLETION_TIMEOUT_MS value
    
    [ Upstream commit 23d060136841c58c2f9ee8c08ad945d1879ead4b ]
    
    In case the MC firmware runs in debug mode with extensive prints pushed
    to the console, the current timeout of 500ms is not enough.
    Increase the timeout value so that we don't have any chance of wrongly
    assuming that the firmware is not responding when it's just taking more
    time.
    
    Signed-off-by: Laurentiu Tudor <[email protected]>
    Signed-off-by: Ioana Ciornei <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Christophe Leroy <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bus: mhi: ep: Update read pointer only after buffer is written [+ + +]
Author: Sumit Kumar <[email protected]>
Date:   Wed Apr 9 16:17:43 2025 +0530

    bus: mhi: ep: Update read pointer only after buffer is written
    
    commit 6f18d174b73d0ceeaa341f46c0986436b3aefc9a upstream.
    
    Inside mhi_ep_ring_add_element, the read pointer (rd_offset) is updated
    before the buffer is written, potentially causing race conditions where
    the host sees an updated read pointer before the buffer is actually
    written. Updating rd_offset prematurely can lead to the host accessing
    an uninitialized or incomplete element, resulting in data corruption.
    
    Invoke the buffer write before updating rd_offset to ensure the element
    is fully written before signaling its availability.
    
    Fixes: bbdcba57a1a2 ("bus: mhi: ep: Add support for ring management")
    cc: [email protected]
    Co-developed-by: Youssef Samir <[email protected]>
    Signed-off-by: Youssef Samir <[email protected]>
    Signed-off-by: Sumit Kumar <[email protected]>
    Reviewed-by: Jeff Hugo <[email protected]>
    Reviewed-by: Krishna Chaitanya Chundru <[email protected]>
    Reviewed-by: Manivannan Sadhasivam <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

bus: mhi: host: Fix conflict between power_up and SYSERR [+ + +]
Author: Jeff Hugo <[email protected]>
Date:   Fri Mar 28 10:35:26 2025 -0600

    bus: mhi: host: Fix conflict between power_up and SYSERR
    
    commit 4d92e7c5ccadc79764674ffc2c88d329aabbb7e0 upstream.
    
    When mhi_async_power_up() enables IRQs, it is possible that we could
    receive a SYSERR notification from the device if the firmware has crashed
    for some reason. Then the SYSERR notification queues a work item that
    cannot execute until the pm_mutex is released by mhi_async_power_up().
    
    So the SYSERR work item will be pending. If mhi_async_power_up() detects
    the SYSERR, it will handle it. If the device is in PBL, then the PBL state
    transition event will be queued, resulting in a work item after the
    pending SYSERR work item. Once mhi_async_power_up() releases the pm_mutex,
    the SYSERR work item can run. It will blindly attempt to reset the MHI
    state machine, which is the recovery action for SYSERR. PBL/SBL are not
    interrupt driven and will ignore the MHI Reset unless SYSERR is actively
    advertised. This will cause the SYSERR work item to timeout waiting for
    reset to be cleared, and will leave the host state in SYSERR processing.
    The PBL transition work item will then run, and immediately fail because
    SYSERR processing is not a valid state for PBL transition.
    
    This leaves the device uninitialized.
    
    This issue has a fairly unique signature in the kernel log:
    
            mhi mhi3: Requested to power ON
            Qualcomm Cloud AI 100 0000:36:00.0: Fatal error received from
            device.  Attempting to recover
            mhi mhi3: Power on setup success
            mhi mhi3: Device failed to exit MHI Reset state
            mhi mhi3: Device MHI is not in valid state
    
    We cannot remove the SYSERR handling from mhi_async_power_up() because the
    device may be in the SYSERR state, but we missed the notification as the
    irq was fired before irqs were enabled. We also can't queue the SYSERR work
    item from mhi_async_power_up() if SYSERR is detected because that may
    result in a duplicate work item, and cause the same issue since the
    duplicate item will blindly issue MHI reset even if SYSERR is no longer
    active.
    
    Instead, add a check in the SYSERR work item to make sure that MHI reset is
    only issued if the device is in SYSERR state for PBL or SBL EEs.
    
    Fixes: a6e2e3522f29 ("bus: mhi: core: Add support for PM state transitions")
    Signed-off-by: Jeffrey Hugo <[email protected]>
    Signed-off-by: Jeff Hugo <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Reviewed-by: Troy Hanson <[email protected]>
    Reviewed-by: Manivannan Sadhasivam <[email protected]>
    cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
calipso: Fix null-ptr-deref in calipso_req_{set,del}attr(). [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Tue Jun 17 15:40:42 2025 -0700

    calipso: Fix null-ptr-deref in calipso_req_{set,del}attr().
    
    [ Upstream commit 10876da918fa1aec0227fb4c67647513447f53a9 ]
    
    syzkaller reported a null-ptr-deref in sock_omalloc() while allocating
    a CALIPSO option.  [0]
    
    The NULL is of struct sock, which was fetched by sk_to_full_sk() in
    calipso_req_setattr().
    
    Since commit a1a5344ddbe8 ("tcp: avoid two atomic ops for syncookies"),
    reqsk->rsk_listener could be NULL when SYN Cookie is returned to its
    client, as hinted by the leading SYN Cookie log.
    
    Here are 3 options to fix the bug:
    
      1) Return 0 in calipso_req_setattr()
      2) Return an error in calipso_req_setattr()
      3) Alaways set rsk_listener
    
    1) is no go as it bypasses LSM, but 2) effectively disables SYN Cookie
    for CALIPSO.  3) is also no go as there have been many efforts to reduce
    atomic ops and make TCP robust against DDoS.  See also commit 3b24d854cb35
    ("tcp/dccp: do not touch listener sk_refcnt under synflood").
    
    As of the blamed commit, SYN Cookie already did not need refcounting,
    and no one has stumbled on the bug for 9 years, so no CALIPSO user will
    care about SYN Cookie.
    
    Let's return an error in calipso_req_setattr() and calipso_req_delattr()
    in the SYN Cookie case.
    
    This can be reproduced by [1] on Fedora and now connect() of nc times out.
    
    [0]:
    TCP: request_sock_TCPv6: Possible SYN flooding on port [::]:20002. Sending cookies.
    Oops: general protection fault, probably for non-canonical address 0xdffffc0000000006: 0000 [#1] PREEMPT SMP KASAN NOPTI
    KASAN: null-ptr-deref in range [0x0000000000000030-0x0000000000000037]
    CPU: 3 UID: 0 PID: 12262 Comm: syz.1.2611 Not tainted 6.14.0 #2
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014
    RIP: 0010:read_pnet include/net/net_namespace.h:406 [inline]
    RIP: 0010:sock_net include/net/sock.h:655 [inline]
    RIP: 0010:sock_kmalloc+0x35/0x170 net/core/sock.c:2806
    Code: 89 d5 41 54 55 89 f5 53 48 89 fb e8 25 e3 c6 fd e8 f0 91 e3 00 48 8d 7b 30 48 b8 00 00 00 00 00 fc ff df 48 89 fa 48 c1 ea 03 <80> 3c 02 00 0f 85 26 01 00 00 48 b8 00 00 00 00 00 fc ff df 4c 8b
    RSP: 0018:ffff88811af89038 EFLAGS: 00010216
    RAX: dffffc0000000000 RBX: 0000000000000000 RCX: ffff888105266400
    RDX: 0000000000000006 RSI: ffff88800c890000 RDI: 0000000000000030
    RBP: 0000000000000050 R08: 0000000000000000 R09: ffff88810526640e
    R10: ffffed1020a4cc81 R11: ffff88810526640f R12: 0000000000000000
    R13: 0000000000000820 R14: ffff888105266400 R15: 0000000000000050
    FS:  00007f0653a07640(0000) GS:ffff88811af80000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007f863ba096f4 CR3: 00000000163c0005 CR4: 0000000000770ef0
    PKRU: 80000000
    Call Trace:
     <IRQ>
     ipv6_renew_options+0x279/0x950 net/ipv6/exthdrs.c:1288
     calipso_req_setattr+0x181/0x340 net/ipv6/calipso.c:1204
     calipso_req_setattr+0x56/0x80 net/netlabel/netlabel_calipso.c:597
     netlbl_req_setattr+0x18a/0x440 net/netlabel/netlabel_kapi.c:1249
     selinux_netlbl_inet_conn_request+0x1fb/0x320 security/selinux/netlabel.c:342
     selinux_inet_conn_request+0x1eb/0x2c0 security/selinux/hooks.c:5551
     security_inet_conn_request+0x50/0xa0 security/security.c:4945
     tcp_v6_route_req+0x22c/0x550 net/ipv6/tcp_ipv6.c:825
     tcp_conn_request+0xec8/0x2b70 net/ipv4/tcp_input.c:7275
     tcp_v6_conn_request+0x1e3/0x440 net/ipv6/tcp_ipv6.c:1328
     tcp_rcv_state_process+0xafa/0x52b0 net/ipv4/tcp_input.c:6781
     tcp_v6_do_rcv+0x8a6/0x1a40 net/ipv6/tcp_ipv6.c:1667
     tcp_v6_rcv+0x505e/0x5b50 net/ipv6/tcp_ipv6.c:1904
     ip6_protocol_deliver_rcu+0x17c/0x1da0 net/ipv6/ip6_input.c:436
     ip6_input_finish+0x103/0x180 net/ipv6/ip6_input.c:480
     NF_HOOK include/linux/netfilter.h:314 [inline]
     NF_HOOK include/linux/netfilter.h:308 [inline]
     ip6_input+0x13c/0x6b0 net/ipv6/ip6_input.c:491
     dst_input include/net/dst.h:469 [inline]
     ip6_rcv_finish net/ipv6/ip6_input.c:79 [inline]
     ip6_rcv_finish+0xb6/0x490 net/ipv6/ip6_input.c:69
     NF_HOOK include/linux/netfilter.h:314 [inline]
     NF_HOOK include/linux/netfilter.h:308 [inline]
     ipv6_rcv+0xf9/0x490 net/ipv6/ip6_input.c:309
     __netif_receive_skb_one_core+0x12e/0x1f0 net/core/dev.c:5896
     __netif_receive_skb+0x1d/0x170 net/core/dev.c:6009
     process_backlog+0x41e/0x13b0 net/core/dev.c:6357
     __napi_poll+0xbd/0x710 net/core/dev.c:7191
     napi_poll net/core/dev.c:7260 [inline]
     net_rx_action+0x9de/0xde0 net/core/dev.c:7382
     handle_softirqs+0x19a/0x770 kernel/softirq.c:561
     do_softirq.part.0+0x36/0x70 kernel/softirq.c:462
     </IRQ>
     <TASK>
     do_softirq arch/x86/include/asm/preempt.h:26 [inline]
     __local_bh_enable_ip+0xf1/0x110 kernel/softirq.c:389
     local_bh_enable include/linux/bottom_half.h:33 [inline]
     rcu_read_unlock_bh include/linux/rcupdate.h:919 [inline]
     __dev_queue_xmit+0xc2a/0x3c40 net/core/dev.c:4679
     dev_queue_xmit include/linux/netdevice.h:3313 [inline]
     neigh_hh_output include/net/neighbour.h:523 [inline]
     neigh_output include/net/neighbour.h:537 [inline]
     ip6_finish_output2+0xd69/0x1f80 net/ipv6/ip6_output.c:141
     __ip6_finish_output net/ipv6/ip6_output.c:215 [inline]
     ip6_finish_output+0x5dc/0xd60 net/ipv6/ip6_output.c:226
     NF_HOOK_COND include/linux/netfilter.h:303 [inline]
     ip6_output+0x24b/0x8d0 net/ipv6/ip6_output.c:247
     dst_output include/net/dst.h:459 [inline]
     NF_HOOK include/linux/netfilter.h:314 [inline]
     NF_HOOK include/linux/netfilter.h:308 [inline]
     ip6_xmit+0xbbc/0x20d0 net/ipv6/ip6_output.c:366
     inet6_csk_xmit+0x39a/0x720 net/ipv6/inet6_connection_sock.c:135
     __tcp_transmit_skb+0x1a7b/0x3b40 net/ipv4/tcp_output.c:1471
     tcp_transmit_skb net/ipv4/tcp_output.c:1489 [inline]
     tcp_send_syn_data net/ipv4/tcp_output.c:4059 [inline]
     tcp_connect+0x1c0c/0x4510 net/ipv4/tcp_output.c:4148
     tcp_v6_connect+0x156c/0x2080 net/ipv6/tcp_ipv6.c:333
     __inet_stream_connect+0x3a7/0xed0 net/ipv4/af_inet.c:677
     tcp_sendmsg_fastopen+0x3e2/0x710 net/ipv4/tcp.c:1039
     tcp_sendmsg_locked+0x1e82/0x3570 net/ipv4/tcp.c:1091
     tcp_sendmsg+0x2f/0x50 net/ipv4/tcp.c:1358
     inet6_sendmsg+0xb9/0x150 net/ipv6/af_inet6.c:659
     sock_sendmsg_nosec net/socket.c:718 [inline]
     __sock_sendmsg+0xf4/0x2a0 net/socket.c:733
     __sys_sendto+0x29a/0x390 net/socket.c:2187
     __do_sys_sendto net/socket.c:2194 [inline]
     __se_sys_sendto net/socket.c:2190 [inline]
     __x64_sys_sendto+0xe1/0x1c0 net/socket.c:2190
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xc3/0x1d0 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7f06553c47ed
    Code: 02 b8 ff ff ff ff c3 66 0f 1f 44 00 00 f3 0f 1e fa 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 a8 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007f0653a06fc8 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
    RAX: ffffffffffffffda RBX: 00007f0655605fa0 RCX: 00007f06553c47ed
    RDX: 0000000000000000 RSI: 0000000000000000 RDI: 000000000000000b
    RBP: 00007f065545db38 R08: 0000200000000140 R09: 000000000000001c
    R10: f7384d4ea84b01bd R11: 0000000000000246 R12: 0000000000000000
    R13: 00007f0655605fac R14: 00007f0655606038 R15: 00007f06539e7000
     </TASK>
    Modules linked in:
    
    [1]:
    dnf install -y selinux-policy-targeted policycoreutils netlabel_tools procps-ng nmap-ncat
    mount -t selinuxfs none /sys/fs/selinux
    load_policy
    netlabelctl calipso add pass doi:1
    netlabelctl map del default
    netlabelctl map add default address:::1 protocol:calipso,1
    sysctl net.ipv4.tcp_syncookies=2
    nc -l ::1 80 &
    nc ::1 80
    
    Fixes: e1adea927080 ("calipso: Allow request sockets to be relabelled by the lsm.")
    Reported-by: syzkaller <[email protected]>
    Reported-by: John Cheung <[email protected]>
    Closes: https://lore.kernel.org/netdev/CAP=Rh=MvfhrGADy+-WJiftV2_WzMH4VEhEFmeT28qY+4yxNu4w@mail.gmail.com/
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Acked-by: Paul Moore <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
can: tcan4x5x: fix power regulator retrieval during probe [+ + +]
Author: Brett Werling <[email protected]>
Date:   Thu Jun 12 14:18:25 2025 -0500

    can: tcan4x5x: fix power regulator retrieval during probe
    
    commit db22720545207f734aaa9d9f71637bfc8b0155e0 upstream.
    
    Fixes the power regulator retrieval in tcan4x5x_can_probe() by ensuring
    the regulator pointer is not set to NULL in the successful return from
    devm_regulator_get_optional().
    
    Fixes: 3814ca3a10be ("can: tcan4x5x: tcan4x5x_can_probe(): turn on the power before parsing the config")
    Signed-off-by: Brett Werling <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: [email protected]
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ceph: set superblock s_magic for IMA fsmagic matching [+ + +]
Author: Dennis Marttinen <[email protected]>
Date:   Thu May 29 17:45:12 2025 +0000

    ceph: set superblock s_magic for IMA fsmagic matching
    
    commit 72386d5245b249f5a0a8fabb881df7ad947b8ea4 upstream.
    
    The CephFS kernel driver forgets to set the filesystem magic signature in
    its superblock. As a result, IMA policy rules based on fsmagic matching do
    not apply as intended. This causes a major performance regression in Talos
    Linux [1] when mounting CephFS volumes, such as when deploying Rook Ceph
    [2]. Talos Linux ships a hardened kernel with the following IMA policy
    (irrelevant lines omitted):
    
    [...]
    dont_measure fsmagic=0xc36400 # CEPH_SUPER_MAGIC
    [...]
    measure func=FILE_CHECK mask=^MAY_READ euid=0
    measure func=FILE_CHECK mask=^MAY_READ uid=0
    [...]
    
    Currently, IMA compares 0xc36400 == 0x0 for CephFS files, resulting in all
    files opened with O_RDONLY or O_RDWR getting measured with SHA512 on every
    open(2):
    
    10 69990c87e8af323d47e2d6ae4... ima-ng sha512:<hash> /data/cephfs/test-file
    
    Since O_WRONLY is rare, this results in an order of magnitude lower
    performance than expected for practically all file operations. Properly
    setting CEPH_SUPER_MAGIC in the CephFS superblock resolves the regression.
    
    Tests performed on a 3x replicated Ceph v19.3.0 cluster across three
    i5-7200U nodes each equipped with one Micron 7400 MAX M.2 disk (BlueStore)
    and Gigabit ethernet, on Talos Linux v1.10.2:
    
    FS-Mark 3.3
    Test: 500 Files, Empty
    Files/s > Higher Is Better
    6.12.27-talos . 16.6  |====
    +twelho patch . 208.4 |====================================================
    
    FS-Mark 3.3
    Test: 500 Files, 1KB Size
    Files/s > Higher Is Better
    6.12.27-talos . 15.6  |=======
    +twelho patch . 118.6 |====================================================
    
    FS-Mark 3.3
    Test: 500 Files, 32 Sub Dirs, 1MB Size
    Files/s > Higher Is Better
    6.12.27-talos . 12.7 |===============
    +twelho patch . 44.7 |=====================================================
    
    IO500 [3] 2fcd6d6 results (benchmarks within variance omitted):
    
    | IO500 benchmark   | 6.12.27-talos  | +twelho patch  | Speedup   |
    |-------------------|----------------|----------------|-----------|
    | mdtest-easy-write | 0.018524 kIOPS | 1.135027 kIOPS | 6027.33 % |
    | mdtest-hard-write | 0.018498 kIOPS | 0.973312 kIOPS | 5161.71 % |
    | ior-easy-read     | 0.064727 GiB/s | 0.155324 GiB/s | 139.97 %  |
    | mdtest-hard-read  | 0.018246 kIOPS | 0.780800 kIOPS | 4179.29 % |
    
    This applies outside of synthetic benchmarks as well, for example, the time
    to rsync a 55 MiB directory with ~12k of mostly small files drops from an
    unusable 10m5s to a reasonable 26s (23x the throughput).
    
    [1]: https://www.talos.dev/
    [2]: https://www.talos.dev/v1.10/kubernetes-guides/configuration/ceph-with-rook/
    [3]: https://github.com/IO500/io500
    
    Cc: [email protected]
    Signed-off-by: Dennis Marttinen <[email protected]>
    Reviewed-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Ilya Dryomov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cgroup,freezer: fix incomplete freezing when attaching tasks [+ + +]
Author: Chen Ridong <[email protected]>
Date:   Wed Jun 18 07:32:17 2025 +0000

    cgroup,freezer: fix incomplete freezing when attaching tasks
    
    commit 37fb58a7273726e59f9429c89ade5116083a213d upstream.
    
    An issue was found:
    
            # cd /sys/fs/cgroup/freezer/
            # mkdir test
            # echo FROZEN > test/freezer.state
            # cat test/freezer.state
            FROZEN
            # sleep 1000 &
            [1] 863
            # echo 863 > test/cgroup.procs
            # cat test/freezer.state
            FREEZING
    
    When tasks are migrated to a frozen cgroup, the freezer fails to
    immediately freeze the tasks, causing the cgroup to remain in the
    "FREEZING".
    
    The freeze_task() function is called before clearing the CGROUP_FROZEN
    flag. This causes the freezing() check to incorrectly return false,
    preventing __freeze_task() from being invoked for the migrated task.
    
    To fix this issue, clear the CGROUP_FROZEN state before calling
    freeze_task().
    
    Fixes: f5d39b020809 ("freezer,sched: Rewrite core freezer logic")
    Cc: [email protected] # v6.1+
    Reported-by: Zhong Jiawei <[email protected]>
    Signed-off-by: Chen Ridong <[email protected]>
    Acked-by: Michal Koutný <[email protected]>
    Signed-off-by: Tejun Heo <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cifs: deal with the channel loading lag while picking channels [+ + +]
Author: Shyam Prasad N <[email protected]>
Date:   Mon Jun 2 22:37:12 2025 +0530

    cifs: deal with the channel loading lag while picking channels
    
    commit 66d590b828b1fd9fa337047ae58fe1c4c6f43609 upstream.
    
    Our current approach to select a channel for sending requests is this:
    1. iterate all channels to find the min and max queue depth
    2. if min and max are not the same, pick the channel with min depth
    3. if min and max are same, round robin, as all channels are equally loaded
    
    The problem with this approach is that there's a lag between selecting
    a channel and sending the request (that increases the queue depth on the channel).
    While these numbers will eventually catch up, there could be a skew in the
    channel usage, depending on the application's I/O parallelism and the server's
    speed of handling requests.
    
    With sufficient parallelism, this lag can artificially increase the queue depth,
    thereby impacting the performance negatively.
    
    This change will change the step 1 above to start the iteration from the last
    selected channel. This is to reduce the skew in channel usage even in the presence
    of this lag.
    
    Fixes: ea90708d3cf3 ("cifs: use the least loaded channel for sending requests")
    Cc: <[email protected]>
    Signed-off-by: Shyam Prasad N <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

cifs: dns resolution is needed only for primary channel [+ + +]
Author: Shyam Prasad N <[email protected]>
Date:   Mon Jun 2 22:37:16 2025 +0530

    cifs: dns resolution is needed only for primary channel
    
    commit b4f60a053a2534c3e510ba0c1f8727566adf8317 upstream.
    
    When calling cifs_reconnect, before the connection to the
    server is reestablished, the code today does a DNS resolution and
    updates server->dstaddr.
    
    However, this is not necessary for secondary channels. Secondary
    channels use the interface list returned by the server to decide
    which address to connect to. And that happens after tcon is reconnected
    and server interfaces are requested.
    
    Signed-off-by: Shyam Prasad N <[email protected]>
    Cc: [email protected]
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

cifs: do not disable interface polling on failure [+ + +]
Author: Shyam Prasad N <[email protected]>
Date:   Mon Jun 2 22:37:17 2025 +0530

    cifs: do not disable interface polling on failure
    
    commit 42ca547b13a20e7cbb04fbdf8d5f089ac4bb35b7 upstream.
    
    When a server has multichannel enabled, we keep polling the server
    for interfaces periodically. However, when this query fails, we
    disable the polling. This can be problematic as it takes away the
    chance for the server to start advertizing again.
    
    This change reschedules the delayed work, even if the current call
    failed. That way, multichannel sessions can recover.
    
    Signed-off-by: Shyam Prasad N <[email protected]>
    Cc: [email protected]
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

cifs: Remove duplicate fattr->cf_dtype assignment from wsl_to_fattr() function [+ + +]
Author: Pali Rohár <[email protected]>
Date:   Sun Jun 8 16:10:33 2025 +0200

    cifs: Remove duplicate fattr->cf_dtype assignment from wsl_to_fattr() function
    
    [ Upstream commit 840738eae94864993a735ab677b9795bb8f3b961 ]
    
    Commit 8bd25b61c5a5 ("smb: client: set correct d_type for reparse DFS/DFSR
    and mount point") deduplicated assignment of fattr->cf_dtype member from
    all places to end of the function cifs_reparse_point_to_fattr(). The only
    one missing place which was not deduplicated is wsl_to_fattr(). Fix it.
    
    Fixes: 8bd25b61c5a5 ("smb: client: set correct d_type for reparse DFS/DFSR and mount point")
    Signed-off-by: Pali Rohár <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

cifs: reset connections for all channels when reconnect requested [+ + +]
Author: Shyam Prasad N <[email protected]>
Date:   Mon Jun 2 22:37:13 2025 +0530

    cifs: reset connections for all channels when reconnect requested
    
    commit 1f396b9bfe39aaf55ea74a7005806164b236653d upstream.
    
    cifs_reconnect can be called with a flag to mark the session as needing
    reconnect too. When this is done, we expect the connections of all
    channels to be reconnected too, which is not happening today.
    
    Without doing this, we have seen bad things happen when primary and
    secondary channels are connected to different servers (in case of cloud
    services like Azure Files SMB).
    
    This change would force all connections to reconnect as well, not just
    the sessions and tcons.
    
    Cc: <[email protected]>
    Signed-off-by: Shyam Prasad N <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

cifs: serialize other channels when query server interfaces is pending [+ + +]
Author: Shyam Prasad N <[email protected]>
Date:   Mon Jun 2 22:37:15 2025 +0530

    cifs: serialize other channels when query server interfaces is pending
    
    commit b5e3e6e28cf3853566ba5d816f79aba5be579158 upstream.
    
    Today, during smb2_reconnect, session_mutex is released as soon as
    the tcon is reconnected and is in a good state. However, in case
    multichannel is enabled, there is also a query of server interfaces that
    follows. We've seen that this query can race with reconnects of other
    channels, causing them to step on each other with reconnects.
    
    This change extends the hold of session_mutex till after the query of
    server interfaces is complete. In order to avoid recursive smb2_reconnect
    checks during query ioctl, this change also introduces a session flag
    for sessions where such a query is in progress.
    
    Signed-off-by: Shyam Prasad N <[email protected]>
    Cc: [email protected]
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

cifs: update dstaddr whenever channel iface is updated [+ + +]
Author: Shyam Prasad N <[email protected]>
Date:   Mon Jun 2 22:37:14 2025 +0530

    cifs: update dstaddr whenever channel iface is updated
    
    commit c1846893991f3b4ec8a0cc12219ada153f0814d6 upstream.
    
    When the server interface info changes (more common in clustered
    servers like Azure Files), the per-channel iface gets updated.
    However, this did not update the corresponding dstaddr. As a result
    these channels will still connect (or try connecting) to older addresses.
    
    Fixes: b54034a73baf ("cifs: during reconnect, update interface if necessary")
    Cc: <[email protected]>
    Signed-off-by: Shyam Prasad N <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
clk: meson-g12a: add missing fclk_div2 to spicc [+ + +]
Author: Da Xue <[email protected]>
Date:   Mon May 12 10:26:16 2025 -0400

    clk: meson-g12a: add missing fclk_div2 to spicc
    
    commit daf004f87c3520c414992893e2eadd5db5f86a5a upstream.
    
    SPICC is missing fclk_div2, which means fclk_div5 and fclk_div7 indexes
    are wrong on this clock. This causes the spicc module to output sclk at
    2.5x the expected rate when clock index 3 is picked.
    
    Adding the missing fclk_div2 resolves this.
    
    [jbrunet: amended commit description]
    Fixes: a18c8e0b7697 ("clk: meson: g12a: add support for the SPICC SCLK Source clocks")
    Cc: [email protected] # 6.1
    Signed-off-by: Da Xue <[email protected]>
    Reviewed-by: Martin Blumenstingl <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jerome Brunet <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

clk: rockchip: rk3036: mark ddrphy as critical [+ + +]
Author: Heiko Stuebner <[email protected]>
Date:   Sat May 3 22:25:31 2025 +0200

    clk: rockchip: rk3036: mark ddrphy as critical
    
    [ Upstream commit 596a977b34a722c00245801a5774aa79cec4e81d ]
    
    The ddrphy is supplied by the dpll, but due to the limited number of PLLs
    on the rk3036, the dpll also is used for other periperhals, like the GPU.
    
    So it happened, when the Lima driver turned off the gpu clock, this in
    turn also disabled the dpll and thus the ram.
    
    Signed-off-by: Heiko Stuebner <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
clocksource: Fix the CPUs' choice in the watchdog per CPU verification [+ + +]
Author: Guilherme G. Piccoli <[email protected]>
Date:   Sun Mar 23 14:36:24 2025 -0300

    clocksource: Fix the CPUs' choice in the watchdog per CPU verification
    
    [ Upstream commit 08d7becc1a6b8c936e25d827becabfe3bff72a36 ]
    
    Right now, if the clocksource watchdog detects a clocksource skew, it might
    perform a per CPU check, for example in the TSC case on x86.  In other
    words: supposing TSC is detected as unstable by the clocksource watchdog
    running at CPU1, as part of marking TSC unstable the kernel will also run a
    check of TSC readings on some CPUs to be sure it is synced between them
    all.
    
    But that check happens only on some CPUs, not all of them; this choice is
    based on the parameter "verify_n_cpus" and in some random cpumask
    calculation. So, the watchdog runs such per CPU checks on up to
    "verify_n_cpus" random CPUs among all online CPUs, with the risk of
    repeating CPUs (that aren't double checked) in the cpumask random
    calculation.
    
    But if "verify_n_cpus" > num_online_cpus(), it should skip the random
    calculation and just go ahead and check the clocksource sync between
    all online CPUs, without the risk of skipping some CPUs due to
    duplicity in the random cpumask calculation.
    
    Tests in a 4 CPU laptop with TSC skew detected led to some cases of the per
    CPU verification skipping some CPU even with verify_n_cpus=8, due to the
    duplicity on random cpumask generation. Skipping the randomization when the
    number of online CPUs is smaller than verify_n_cpus, solves that.
    
    Suggested-by: Thadeu Lima de Souza Cascardo <[email protected]>
    Signed-off-by: Guilherme G. Piccoli <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Reviewed-by: Paul E. McKenney <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
configfs: Do not override creating attribute file failure in populate_attrs() [+ + +]
Author: Zijun Hu <[email protected]>
Date:   Wed May 7 19:50:26 2025 +0800

    configfs: Do not override creating attribute file failure in populate_attrs()
    
    commit f830edbae247b89228c3e09294151b21e0dc849c upstream.
    
    populate_attrs() may override failure for creating attribute files
    by success for creating subsequent bin attribute files, and have
    wrong return value.
    
    Fix by creating bin attribute files under successfully creating
    attribute files.
    
    Fixes: 03607ace807b ("configfs: implement binary attributes")
    Cc: [email protected]
    Reviewed-by: Joel Becker <[email protected]>
    Reviewed-by: Breno Leitao <[email protected]>
    Signed-off-by: Zijun Hu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Andreas Hindborg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
 
cpufreq: scmi: Skip SCMI devices that aren't used by the CPUs [+ + +]
Author: Mike Tipton <[email protected]>
Date:   Wed May 14 20:53:12 2025 -0700

    cpufreq: scmi: Skip SCMI devices that aren't used by the CPUs
    
    [ Upstream commit 6c9bb86922728c7a4cceb99f131e00dd87514f20 ]
    
    Currently, all SCMI devices with performance domains attempt to register
    a cpufreq driver, even if their performance domains aren't used to
    control the CPUs. The cpufreq framework only supports registering a
    single driver, so only the first device will succeed. And if that device
    isn't used for the CPUs, then cpufreq will scale the wrong domains.
    
    To avoid this, return early from scmi_cpufreq_probe() if the probing
    SCMI device isn't referenced by the CPU device phandles.
    
    This keeps the existing assumption that all CPUs are controlled by a
    single SCMI device.
    
    Signed-off-by: Mike Tipton <[email protected]>
    Reviewed-by: Peng Fan <[email protected]>
    Reviewed-by: Cristian Marussi <[email protected]>
    Reviewed-by: Sudeep Holla <[email protected]>
    Tested-by: Cristian Marussi <[email protected]>
    Signed-off-by: Viresh Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
crypto: marvell/cesa - Do not chain submitted requests [+ + +]
Author: Herbert Xu <[email protected]>
Date:   Thu May 8 13:22:16 2025 +0800

    crypto: marvell/cesa - Do not chain submitted requests
    
    commit 0413bcf0fc460a68a2a7a8354aee833293d7d693 upstream.
    
    This driver tries to chain requests together before submitting them
    to hardware in order to reduce completion interrupts.
    
    However, it even extends chains that have already been submitted
    to hardware.  This is dangerous because there is no way of knowing
    whether the hardware has already read the DMA memory in question
    or not.
    
    Fix this by splitting the chain list into two.  One for submitted
    requests and one for requests that have not yet been submitted.
    Only extend the latter.
    
    Reported-by: Klaus Kudielka <[email protected]>
    Fixes: 85030c5168f1 ("crypto: marvell - Add support for chaining crypto requests in TDMA mode")
    Cc: <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dm-mirror: fix a tiny race condition [+ + +]
Author: Mikulas Patocka <[email protected]>
Date:   Tue Jun 3 18:53:17 2025 +0200

    dm-mirror: fix a tiny race condition
    
    commit 829451beaed6165eb11d7a9fb4e28eb17f489980 upstream.
    
    There's a tiny race condition in dm-mirror. The functions queue_bio and
    write_callback grab a spinlock, add a bio to the list, drop the spinlock
    and wake up the mirrord thread that processes bios in the list.
    
    It may be possible that the mirrord thread processes the bio just after
    spin_unlock_irqrestore is called, before wakeup_mirrord. This spurious
    wake-up is normally harmless, however if the device mapper device is
    unloaded just after the bio was processed, it may be possible that
    wakeup_mirrord(ms) uses invalid "ms" pointer.
    
    Fix this bug by moving wakeup_mirrord inside the spinlock.
    
    Signed-off-by: Mikulas Patocka <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dm-verity: fix a memory leak if some arguments are specified multiple times [+ + +]
Author: Mikulas Patocka <[email protected]>
Date:   Tue Jun 3 18:55:50 2025 +0200

    dm-verity: fix a memory leak if some arguments are specified multiple times
    
    commit 66be40a14e496689e1f0add50118408e22c96169 upstream.
    
    If some of the arguments "check_at_most_once", "ignore_zero_blocks",
    "use_fec_from_device", "root_hash_sig_key_desc" were specified more than
    once on the target line, a memory leak would happen.
    
    This commit fixes the memory leak. It also fixes error handling in
    verity_verify_sig_parse_opt_args.
    
    Signed-off-by: Mikulas Patocka <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drivers/rapidio/rio_cm.c: prevent possible heap overwrite [+ + +]
Author: Andrew Morton <[email protected]>
Date:   Sat Jun 7 17:43:18 2025 -0700

    drivers/rapidio/rio_cm.c: prevent possible heap overwrite
    
    commit 50695153d7ddde3b1696dbf0085be0033bf3ddb3 upstream.
    
    In
    
    riocm_cdev_ioctl(RIO_CM_CHAN_SEND)
       -> cm_chan_msg_send()
          -> riocm_ch_send()
    
    cm_chan_msg_send() checks that userspace didn't send too much data but
    riocm_ch_send() failed to check that userspace sent sufficient data.  The
    result is that riocm_ch_send() can write to fields in the rio_ch_chan_hdr
    which were outside the bounds of the space which cm_chan_msg_send()
    allocated.
    
    Address this by teaching riocm_ch_send() to check that the entire
    rio_ch_chan_hdr was copied in from userspace.
    
    Reported-by: maher azz <[email protected]>
    Cc: Matt Porter <[email protected]>
    Cc: Alexandre Bounine <[email protected]>
    Cc: Linus Torvalds <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Drivers: hv: Allocate interrupt and monitor pages aligned to system page boundary [+ + +]
Author: Long Li <[email protected]>
Date:   Mon May 5 17:56:33 2025 -0700

    Drivers: hv: Allocate interrupt and monitor pages aligned to system page boundary
    
    commit 09eea7ad0b8e973dcf5ed49902838e5d68177f8e upstream.
    
    There are use cases that interrupt and monitor pages are mapped to
    user-mode through UIO, so they need to be system page aligned. Some
    Hyper-V allocation APIs introduced earlier broke those requirements.
    
    Fix this by using page allocation functions directly for interrupt
    and monitor pages.
    
    Cc: [email protected]
    Fixes: ca48739e59df ("Drivers: hv: vmbus: Move Hyper-V page allocator to arch neutral code")
    Signed-off-by: Long Li <[email protected]>
    Reviewed-by: Michael Kelley <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Wei Liu <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/i915/pmu: Fix build error with GCOV and AutoFDO enabled [+ + +]
Author: Tzung-Bi Shih <[email protected]>
Date:   Thu Jun 12 08:30:23 2025 +0000

    drm/i915/pmu: Fix build error with GCOV and AutoFDO enabled
    
    [ Upstream commit a7137b1825b535eb7258b25beeb0d5425e0037d2 ]
    
    i915_pmu.c may fail to build with GCOV and AutoFDO enabled.
    
    ../drivers/gpu/drm/i915/i915_pmu.c:116:3: error: call to '__compiletime_assert_487' declared with 'error' attribute: BUILD_BUG_ON failed: bit > BITS_PER_TYPE(typeof_member(struct i915_pmu, enable)) - 1
      116 |                 BUILD_BUG_ON(bit >
          |                 ^
    
    Here is a way to reproduce the issue:
    $ git checkout v6.15
    $ mkdir build
    $ ./scripts/kconfig/merge_config.sh -O build -n -m <(cat <<EOF
    CONFIG_DRM=y
    CONFIG_PCI=y
    CONFIG_DRM_I915=y
    
    CONFIG_PERF_EVENTS=y
    
    CONFIG_DEBUG_FS=y
    CONFIG_GCOV_KERNEL=y
    CONFIG_GCOV_PROFILE_ALL=y
    
    CONFIG_AUTOFDO_CLANG=y
    EOF
    )
    $ PATH=${PATH}:${HOME}/llvm-20.1.5-x86_64/bin make LLVM=1 O=build \
           olddefconfig
    $ PATH=${PATH}:${HOME}/llvm-20.1.5-x86_64/bin make LLVM=1 O=build \
           CLANG_AUTOFDO_PROFILE=...PATH_TO_SOME_AFDO_PROFILE... \
           drivers/gpu/drm/i915/i915_pmu.o
    
    Although not super sure what happened, by reviewing the code, it should
    depend on `__builtin_constant_p(bit)` directly instead of assuming
    `__builtin_constant_p(config)` makes `bit` a builtin constant.
    
    Also fix a nit, to reuse the `bit` local variable.
    
    Fixes: a644fde77ff7 ("drm/i915/pmu: Change bitmask of enabled events to u32")
    Reviewed-by: Nathan Chancellor <[email protected]>
    Signed-off-by: Tzung-Bi Shih <[email protected]>
    Signed-off-by: Tvrtko Ursulin <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    (cherry picked from commit 686d773186bf72b739bab7e12eb8665d914676ee)
    Signed-off-by: Joonas Lahtinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/msm/disp: Correct porch timing for SDM845 [+ + +]
Author: James A. MacInnes <[email protected]>
Date:   Wed Feb 12 15:03:47 2025 -0800

    drm/msm/disp: Correct porch timing for SDM845
    
    [ Upstream commit 146e87f3e11de0dfa091ff87e34b4bc6eec761a4 ]
    
    Type-C DisplayPort inoperable due to incorrect porch settings.
    - Re-used wide_bus_en as flag to prevent porch shifting
    
    Fixes: c943b4948b58 ("drm/msm/dp: add displayPort driver support")
    Signed-off-by: James A. MacInnes <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/636945/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/msm/dsi/dsi_phy_10nm: Fix missing initial VCO rate [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Tue May 20 13:13:26 2025 +0200

    drm/msm/dsi/dsi_phy_10nm: Fix missing initial VCO rate
    
    [ Upstream commit 8a48e35becb214743214f5504e726c3ec131cd6d ]
    
    Driver unconditionally saves current state on first init in
    dsi_pll_10nm_init(), but does not save the VCO rate, only some of the
    divider registers.  The state is then restored during probe/enable via
    msm_dsi_phy_enable() -> msm_dsi_phy_pll_restore_state() ->
    dsi_10nm_pll_restore_state().
    
    Restoring calls dsi_pll_10nm_vco_set_rate() with
    pll_10nm->vco_current_rate=0, which basically overwrites existing rate of
    VCO and messes with clock hierarchy, by setting frequency to 0 to clock
    tree.  This makes anyway little sense - VCO rate was not saved, so
    should not be restored.
    
    If PLL was not configured configure it to minimum rate to avoid glitches
    and configuring entire in clock hierarchy to 0 Hz.
    
    Suggested-by: Dmitry Baryshkov <[email protected]>
    Link: https://lore.kernel.org/r/sz4kbwy5nwsebgf64ia7uq4ee7wbsa5uy3xmlqwcstsbntzcov@ew3dcyjdzmi2/
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Fixes: a4ccc37693a2 ("drm/msm/dsi_pll_10nm: restore VCO rate during
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/654796/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/nouveau/bl: increase buffer size to avoid truncate warning [+ + +]
Author: Jacob Keller <[email protected]>
Date:   Tue Jun 10 14:54:51 2025 -0700

    drm/nouveau/bl: increase buffer size to avoid truncate warning
    
    [ Upstream commit 61b2b3737499f1fb361a54a16828db24a8345e85 ]
    
    The nouveau_get_backlight_name() function generates a unique name for the
    backlight interface, appending an id from 1 to 99 for all backlight devices
    after the first.
    
    GCC 15 (and likely other compilers) produce the following
    -Wformat-truncation warning:
    
    nouveau_backlight.c: In function ‘nouveau_backlight_init’:
    nouveau_backlight.c:56:69: error: ‘%d’ directive output may be truncated writing between 1 and 10 bytes into a region of size 3 [-Werror=format-truncation=]
       56 |                 snprintf(backlight_name, BL_NAME_SIZE, "nv_backlight%d", nb);
          |                                                                     ^~
    In function ‘nouveau_get_backlight_name’,
        inlined from ‘nouveau_backlight_init’ at nouveau_backlight.c:351:7:
    nouveau_backlight.c:56:56: note: directive argument in the range [1, 2147483647]
       56 |                 snprintf(backlight_name, BL_NAME_SIZE, "nv_backlight%d", nb);
          |                                                        ^~~~~~~~~~~~~~~~
    nouveau_backlight.c:56:17: note: ‘snprintf’ output between 14 and 23 bytes into a destination of size 15
       56 |                 snprintf(backlight_name, BL_NAME_SIZE, "nv_backlight%d", nb);
          |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    The warning started appearing after commit ab244be47a8f ("drm/nouveau:
    Fix a potential theorical leak in nouveau_get_backlight_name()") This fix
    for the ida usage removed the explicit value check for ids larger than 99.
    The compiler is unable to intuit that the ida_alloc_max() limits the
    returned value range between 0 and 99.
    
    Because the compiler can no longer infer that the number ranges from 0 to
    99, it thinks that it could use as many as 11 digits (10 + the potential -
    sign for negative numbers).
    
    The warning has gone unfixed for some time, with at least one kernel test
    robot report. The code breaks W=1 builds, which is especially frustrating
    with the introduction of CONFIG_WERROR.
    
    The string is stored temporarily on the stack and then copied into the
    device name. Its not a big deal to use 11 more bytes of stack rounding out
    to an even 24 bytes. Increase BL_NAME_SIZE to 24 to avoid the truncation
    warning. This fixes the W=1 builds that include this driver.
    
    Compile tested only.
    
    Fixes: ab244be47a8f ("drm/nouveau: Fix a potential theorical leak in nouveau_get_backlight_name()")
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Suggested-by: Timur Tabi <[email protected]>
    Signed-off-by: Jacob Keller <[email protected]>
    Link: https://lore.kernel.org/r/20250610-jk-nouveua-drm-bl-snprintf-fix-v2-1-7fdd4b84b48e@intel.com
    Signed-off-by: Danilo Krummrich <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dt-bindings: i2c: nvidia,tegra20-i2c: Specify the required properties [+ + +]
Author: Akhil R <[email protected]>
Date:   Tue Jun 3 21:00:20 2025 +0530

    dt-bindings: i2c: nvidia,tegra20-i2c: Specify the required properties
    
    commit 903cc7096db22f889d48e2cee8840709ce04fdac upstream.
    
    Specify the properties which are essential and which are not for the
    Tegra I2C driver to function correctly. This was not added correctly when
    the TXT binding was converted to yaml. All the existing DT nodes have
    these properties already and hence this does not break the ABI.
    
    dmas and dma-names which were specified as a must in the TXT binding
    is now made optional since the driver can work in PIO mode if dmas are
    missing.
    
    Fixes: f10a9b722f80 ("dt-bindings: i2c: tegra: Convert to json-schema”)
    Signed-off-by: Akhil R <[email protected]>
    Cc: <[email protected]> # v5.17+
    Reviewed-by: Krzysztof Kozlowski <[email protected]>
    Signed-off-by: Andi Shyti <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
e1000e: set fixed clock frequency indication for Nahum 11 and Nahum 13 [+ + +]
Author: Vitaly Lifshits <[email protected]>
Date:   Sun May 25 11:38:43 2025 +0300

    e1000e: set fixed clock frequency indication for Nahum 11 and Nahum 13
    
    [ Upstream commit 688a0d61b2d7427189c4eb036ce485d8fc957cbb ]
    
    On some systems with Nahum 11 and Nahum 13 the value of the XTAL clock in
    the software STRAP is incorrect. This causes the PTP timer to run at the
    wrong rate and can lead to synchronization issues.
    
    The STRAP value is configured by the system firmware, and a firmware
    update is not always possible. Since the XTAL clock on these systems
    always runs at 38.4MHz, the driver may ignore the STRAP and just set
    the correct value.
    
    Fixes: cc23f4f0b6b9 ("e1000e: Add support for Meteor Lake")
    Signed-off-by: Vitaly Lifshits <[email protected]>
    Tested-by: Mor Bar-Gabay <[email protected]>
    Reviewed-by: Gil Fine <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
EDAC/altera: Use correct write width with the INTTEST register [+ + +]
Author: Niravkumar L Rabara <[email protected]>
Date:   Tue May 27 07:57:07 2025 -0700

    EDAC/altera: Use correct write width with the INTTEST register
    
    commit e5ef4cd2a47f27c0c9d8ff6c0f63a18937c071a3 upstream.
    
    On the SoCFPGA platform, the INTTEST register supports only 16-bit writes.
    A 32-bit write triggers an SError to the CPU so do 16-bit accesses only.
    
      [ bp: AI-massage the commit message. ]
    
    Fixes: c7b4be8db8bc ("EDAC, altera: Add Arria10 OCRAM ECC support")
    Signed-off-by: Niravkumar L Rabara <[email protected]>
    Signed-off-by: Matthew Gerlach <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Acked-by: Dinh Nguyen <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
EDAC/amd64: Correct number of UMCs for family 19h models 70h-7fh [+ + +]
Author: Avadhut Naik <[email protected]>
Date:   Fri Jun 13 00:51:35 2025 +0000

    EDAC/amd64: Correct number of UMCs for family 19h models 70h-7fh
    
    commit b2e673ae53ef4b943f68585207a5f21cfc9a0714 upstream.
    
    AMD's Family 19h-based Models 70h-7fh support 4 unified memory controllers
    (UMC) per processor die.
    
    The amd64_edac driver, however, assumes only 2 UMCs are supported since
    max_mcs variable for the models has not been explicitly set to 4. The same
    results in incomplete or incorrect memory information being logged to dmesg by
    the module during initialization in some instances.
    
    Fixes: 6c79e42169fe ("EDAC/amd64: Add support for ECC on family 19h model 60h-7Fh")
    Closes: https://lore.kernel.org/all/[email protected]/
    Reported-by: reox <[email protected]>
    Signed-off-by: Avadhut Naik <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
emulex/benet: correct command version selection in be_cmd_get_stats() [+ + +]
Author: Alok Tiwari <[email protected]>
Date:   Mon May 19 07:17:19 2025 -0700

    emulex/benet: correct command version selection in be_cmd_get_stats()
    
    [ Upstream commit edb888d29748cee674006a52e544925dacc7728e ]
    
    Logic here always sets hdr->version to 2 if it is not a BE3 or Lancer chip,
    even if it is BE2. Use 'else if' to prevent multiple assignments, setting
    version 0 for BE2, version 1 for BE3 and Lancer, and version 2 for others.
    Fixes potential incorrect version setting when BE2_chip and
    BE3_chip/lancer_chip checks could both be true.
    
    Signed-off-by: Alok Tiwari <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
erofs: remove unused trace event erofs_destroy_inode [+ + +]
Author: Gao Xiang <[email protected]>
Date:   Tue Jun 17 13:40:56 2025 +0800

    erofs: remove unused trace event erofs_destroy_inode
    
    commit 30b58444807c93bffeaba7d776110f2a909d2f9a upstream.
    
    The trace event `erofs_destroy_inode` was added but remains unused. This
    unused event contributes approximately 5KB to the kernel module size.
    
    Reported-by: Steven Rostedt <[email protected]>
    Closes: https://lore.kernel.org/r/[email protected]
    Fixes: 13f06f48f7bf ("staging: erofs: support tracepoint")
    Cc: [email protected]
    Reviewed-by: Hongbo Li <[email protected]>
    Signed-off-by: Gao Xiang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ext4: ensure i_size is smaller than maxbytes [+ + +]
Author: Zhang Yi <[email protected]>
Date:   Tue May 6 09:20:09 2025 +0800

    ext4: ensure i_size is smaller than maxbytes
    
    commit 1a77a028a392fab66dd637cdfac3f888450d00af upstream.
    
    The inode i_size cannot be larger than maxbytes, check it while loading
    inode from the disk.
    
    Signed-off-by: Zhang Yi <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Reviewed-by: Baokun Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: factor out ext4_get_maxbytes() [+ + +]
Author: Zhang Yi <[email protected]>
Date:   Tue May 6 09:20:08 2025 +0800

    ext4: factor out ext4_get_maxbytes()
    
    commit dbe27f06fa38b9bfc598f8864ae1c5d5831d9992 upstream.
    
    There are several locations that get the correct maxbytes value based on
    the inode's block type. It would be beneficial to extract a common
    helper function to make the code more clear.
    
    Signed-off-by: Zhang Yi <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Reviewed-by: Baokun Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: fix calculation of credits for extent tree modification [+ + +]
Author: Jan Kara <[email protected]>
Date:   Tue Apr 29 19:55:36 2025 +0200

    ext4: fix calculation of credits for extent tree modification
    
    commit 32a93f5bc9b9812fc710f43a4d8a6830f91e4988 upstream.
    
    Luis and David are reporting that after running generic/750 test for 90+
    hours on 2k ext4 filesystem, they are able to trigger a warning in
    jbd2_journal_dirty_metadata() complaining that there are not enough
    credits in the running transaction started in ext4_do_writepages().
    
    Indeed the code in ext4_do_writepages() is racy and the extent tree can
    change between the time we compute credits necessary for extent tree
    computation and the time we actually modify the extent tree. Thus it may
    happen that the number of credits actually needed is higher. Modify
    ext4_ext_index_trans_blocks() to count with the worst case of maximum
    tree depth. This can reduce the possible number of writers that can
    operate in the system in parallel (because the credit estimates now won't
    fit in one transaction) but for reasonably sized journals this shouldn't
    really be an issue. So just go with a safe and simple fix.
    
    Link: https://lore.kernel.org/all/20250415013641.f2ppw6wov4kn4wq2@offworld
    Reported-by: Davidlohr Bueso <[email protected]>
    Reported-by: Luis Chamberlain <[email protected]>
    Tested-by: [email protected]
    Signed-off-by: Jan Kara <[email protected]>
    Reviewed-by: Zhang Yi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: inline: fix len overflow in ext4_prepare_inline_data [+ + +]
Author: Thadeu Lima de Souza Cascardo <[email protected]>
Date:   Tue Apr 15 11:53:04 2025 -0300

    ext4: inline: fix len overflow in ext4_prepare_inline_data
    
    commit 227cb4ca5a6502164f850d22aec3104d7888b270 upstream.
    
    When running the following code on an ext4 filesystem with inline_data
    feature enabled, it will lead to the bug below.
    
            fd = open("file1", O_RDWR | O_CREAT | O_TRUNC, 0666);
            ftruncate(fd, 30);
            pwrite(fd, "a", 1, (1UL << 40) + 5UL);
    
    That happens because write_begin will succeed as when
    ext4_generic_write_inline_data calls ext4_prepare_inline_data, pos + len
    will be truncated, leading to ext4_prepare_inline_data parameter to be 6
    instead of 0x10000000006.
    
    Then, later when write_end is called, we hit:
    
            BUG_ON(pos + len > EXT4_I(inode)->i_inline_size);
    
    at ext4_write_inline_data.
    
    Fix it by using a loff_t type for the len parameter in
    ext4_prepare_inline_data instead of an unsigned int.
    
    [   44.545164] ------------[ cut here ]------------
    [   44.545530] kernel BUG at fs/ext4/inline.c:240!
    [   44.545834] Oops: invalid opcode: 0000 [#1] SMP NOPTI
    [   44.546172] CPU: 3 UID: 0 PID: 343 Comm: test Not tainted 6.15.0-rc2-00003-g9080916f4863 #45 PREEMPT(full)  112853fcebfdb93254270a7959841d2c6aa2c8bb
    [   44.546523] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    [   44.546523] RIP: 0010:ext4_write_inline_data+0xfe/0x100
    [   44.546523] Code: 3c 0e 48 83 c7 48 48 89 de 5b 41 5c 41 5d 41 5e 41 5f 5d e9 e4 fa 43 01 5b 41 5c 41 5d 41 5e 41 5f 5d c3 cc cc cc cc cc 0f 0b <0f> 0b 0f 1f 44 00 00 55 41 57 41 56 41 55 41 54 53 48 83 ec 20 49
    [   44.546523] RSP: 0018:ffffb342008b79a8 EFLAGS: 00010216
    [   44.546523] RAX: 0000000000000001 RBX: ffff9329c579c000 RCX: 0000010000000006
    [   44.546523] RDX: 000000000000003c RSI: ffffb342008b79f0 RDI: ffff9329c158e738
    [   44.546523] RBP: 0000000000000001 R08: 0000000000000001 R09: 0000000000000000
    [   44.546523] R10: 00007ffffffff000 R11: ffffffff9bd0d910 R12: 0000006210000000
    [   44.546523] R13: fffffc7e4015e700 R14: 0000010000000005 R15: ffff9329c158e738
    [   44.546523] FS:  00007f4299934740(0000) GS:ffff932a60179000(0000) knlGS:0000000000000000
    [   44.546523] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   44.546523] CR2: 00007f4299a1ec90 CR3: 0000000002886002 CR4: 0000000000770eb0
    [   44.546523] PKRU: 55555554
    [   44.546523] Call Trace:
    [   44.546523]  <TASK>
    [   44.546523]  ext4_write_inline_data_end+0x126/0x2d0
    [   44.546523]  generic_perform_write+0x17e/0x270
    [   44.546523]  ext4_buffered_write_iter+0xc8/0x170
    [   44.546523]  vfs_write+0x2be/0x3e0
    [   44.546523]  __x64_sys_pwrite64+0x6d/0xc0
    [   44.546523]  do_syscall_64+0x6a/0xf0
    [   44.546523]  ? __wake_up+0x89/0xb0
    [   44.546523]  ? xas_find+0x72/0x1c0
    [   44.546523]  ? next_uptodate_folio+0x317/0x330
    [   44.546523]  ? set_pte_range+0x1a6/0x270
    [   44.546523]  ? filemap_map_pages+0x6ee/0x840
    [   44.546523]  ? ext4_setattr+0x2fa/0x750
    [   44.546523]  ? do_pte_missing+0x128/0xf70
    [   44.546523]  ? security_inode_post_setattr+0x3e/0xd0
    [   44.546523]  ? ___pte_offset_map+0x19/0x100
    [   44.546523]  ? handle_mm_fault+0x721/0xa10
    [   44.546523]  ? do_user_addr_fault+0x197/0x730
    [   44.546523]  ? do_syscall_64+0x76/0xf0
    [   44.546523]  ? arch_exit_to_user_mode_prepare+0x1e/0x60
    [   44.546523]  ? irqentry_exit_to_user_mode+0x79/0x90
    [   44.546523]  entry_SYSCALL_64_after_hwframe+0x55/0x5d
    [   44.546523] RIP: 0033:0x7f42999c6687
    [   44.546523] Code: 48 89 fa 4c 89 df e8 58 b3 00 00 8b 93 08 03 00 00 59 5e 48 83 f8 fc 74 1a 5b c3 0f 1f 84 00 00 00 00 00 48 8b 44 24 10 0f 05 <5b> c3 0f 1f 80 00 00 00 00 83 e2 39 83 fa 08 75 de e8 23 ff ff ff
    [   44.546523] RSP: 002b:00007ffeae4a7930 EFLAGS: 00000202 ORIG_RAX: 0000000000000012
    [   44.546523] RAX: ffffffffffffffda RBX: 00007f4299934740 RCX: 00007f42999c6687
    [   44.546523] RDX: 0000000000000001 RSI: 000055ea6149200f RDI: 0000000000000003
    [   44.546523] RBP: 00007ffeae4a79a0 R08: 0000000000000000 R09: 0000000000000000
    [   44.546523] R10: 0000010000000005 R11: 0000000000000202 R12: 0000000000000000
    [   44.546523] R13: 00007ffeae4a7ac8 R14: 00007f4299b86000 R15: 000055ea61493dd8
    [   44.546523]  </TASK>
    [   44.546523] Modules linked in:
    [   44.568501] ---[ end trace 0000000000000000 ]---
    [   44.568889] RIP: 0010:ext4_write_inline_data+0xfe/0x100
    [   44.569328] Code: 3c 0e 48 83 c7 48 48 89 de 5b 41 5c 41 5d 41 5e 41 5f 5d e9 e4 fa 43 01 5b 41 5c 41 5d 41 5e 41 5f 5d c3 cc cc cc cc cc 0f 0b <0f> 0b 0f 1f 44 00 00 55 41 57 41 56 41 55 41 54 53 48 83 ec 20 49
    [   44.570931] RSP: 0018:ffffb342008b79a8 EFLAGS: 00010216
    [   44.571356] RAX: 0000000000000001 RBX: ffff9329c579c000 RCX: 0000010000000006
    [   44.571959] RDX: 000000000000003c RSI: ffffb342008b79f0 RDI: ffff9329c158e738
    [   44.572571] RBP: 0000000000000001 R08: 0000000000000001 R09: 0000000000000000
    [   44.573148] R10: 00007ffffffff000 R11: ffffffff9bd0d910 R12: 0000006210000000
    [   44.573748] R13: fffffc7e4015e700 R14: 0000010000000005 R15: ffff9329c158e738
    [   44.574335] FS:  00007f4299934740(0000) GS:ffff932a60179000(0000) knlGS:0000000000000000
    [   44.575027] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   44.575520] CR2: 00007f4299a1ec90 CR3: 0000000002886002 CR4: 0000000000770eb0
    [   44.576112] PKRU: 55555554
    [   44.576338] Kernel panic - not syncing: Fatal exception
    [   44.576517] Kernel Offset: 0x1a600000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=fe2a25dae02a207717a0
    Fixes: f19d5870cbf7 ("ext4: add normal write support for inline data")
    Signed-off-by: Thadeu Lima de Souza Cascardo <[email protected]>
    Cc: [email protected]
    Reviewed-by: Jan Kara <[email protected]>
    Reviewed-by: Andreas Dilger <[email protected]>
    Link: https://patch.msgid.link/20250415-ext4-prepare-inline-overflow-v1-1-f4c13d900967@igalia.com
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: only dirty folios when data journaling regular files [+ + +]
Author: Brian Foster <[email protected]>
Date:   Fri May 16 13:38:00 2025 -0400

    ext4: only dirty folios when data journaling regular files
    
    commit e26268ff1dcae5662c1b96c35f18cfa6ab73d9de upstream.
    
    fstest generic/388 occasionally reproduces a crash that looks as
    follows:
    
    BUG: kernel NULL pointer dereference, address: 0000000000000000
    ...
    Call Trace:
     <TASK>
     ext4_block_zero_page_range+0x30c/0x380 [ext4]
     ext4_truncate+0x436/0x440 [ext4]
     ext4_process_orphan+0x5d/0x110 [ext4]
     ext4_orphan_cleanup+0x124/0x4f0 [ext4]
     ext4_fill_super+0x262d/0x3110 [ext4]
     get_tree_bdev_flags+0x132/0x1d0
     vfs_get_tree+0x26/0xd0
     vfs_cmd_create+0x59/0xe0
     __do_sys_fsconfig+0x4ed/0x6b0
     do_syscall_64+0x82/0x170
     ...
    
    This occurs when processing a symlink inode from the orphan list. The
    partial block zeroing code in the truncate path calls
    ext4_dirty_journalled_data() -> folio_mark_dirty(). The latter calls
    mapping->a_ops->dirty_folio(), but symlink inodes are not assigned an
    a_ops vector in ext4, hence the crash.
    
    To avoid this problem, update the ext4_dirty_journalled_data() helper to
    only mark the folio dirty on regular files (for which a_ops is
    assigned). This also matches the journaling logic in the ext4_symlink()
    creation path, where ext4_handle_dirty_metadata() is called directly.
    
    Fixes: d84c9ebdac1e ("ext4: Mark pages with journalled data dirty")
    Signed-off-by: Brian Foster <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
f2fs: fix to do sanity check on ino and xnid [+ + +]
Author: Chao Yu <[email protected]>
Date:   Mon Mar 24 13:33:39 2025 +0800

    f2fs: fix to do sanity check on ino and xnid
    
    commit 061cf3a84bde038708eb0f1d065b31b7c2456533 upstream.
    
    syzbot reported a f2fs bug as below:
    
    INFO: task syz-executor140:5308 blocked for more than 143 seconds.
          Not tainted 6.14.0-rc7-syzkaller-00069-g81e4f8d68c66 #0
    "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
    task:syz-executor140 state:D stack:24016 pid:5308  tgid:5308  ppid:5306   task_flags:0x400140 flags:0x00000006
    Call Trace:
     <TASK>
     context_switch kernel/sched/core.c:5378 [inline]
     __schedule+0x190e/0x4c90 kernel/sched/core.c:6765
     __schedule_loop kernel/sched/core.c:6842 [inline]
     schedule+0x14b/0x320 kernel/sched/core.c:6857
     io_schedule+0x8d/0x110 kernel/sched/core.c:7690
     folio_wait_bit_common+0x839/0xee0 mm/filemap.c:1317
     __folio_lock mm/filemap.c:1664 [inline]
     folio_lock include/linux/pagemap.h:1163 [inline]
     __filemap_get_folio+0x147/0xb40 mm/filemap.c:1917
     pagecache_get_page+0x2c/0x130 mm/folio-compat.c:87
     find_get_page_flags include/linux/pagemap.h:842 [inline]
     f2fs_grab_cache_page+0x2b/0x320 fs/f2fs/f2fs.h:2776
     __get_node_page+0x131/0x11b0 fs/f2fs/node.c:1463
     read_xattr_block+0xfb/0x190 fs/f2fs/xattr.c:306
     lookup_all_xattrs fs/f2fs/xattr.c:355 [inline]
     f2fs_getxattr+0x676/0xf70 fs/f2fs/xattr.c:533
     __f2fs_get_acl+0x52/0x870 fs/f2fs/acl.c:179
     f2fs_acl_create fs/f2fs/acl.c:375 [inline]
     f2fs_init_acl+0xd7/0x9b0 fs/f2fs/acl.c:418
     f2fs_init_inode_metadata+0xa0f/0x1050 fs/f2fs/dir.c:539
     f2fs_add_inline_entry+0x448/0x860 fs/f2fs/inline.c:666
     f2fs_add_dentry+0xba/0x1e0 fs/f2fs/dir.c:765
     f2fs_do_add_link+0x28c/0x3a0 fs/f2fs/dir.c:808
     f2fs_add_link fs/f2fs/f2fs.h:3616 [inline]
     f2fs_mknod+0x2e8/0x5b0 fs/f2fs/namei.c:766
     vfs_mknod+0x36d/0x3b0 fs/namei.c:4191
     unix_bind_bsd net/unix/af_unix.c:1286 [inline]
     unix_bind+0x563/0xe30 net/unix/af_unix.c:1379
     __sys_bind_socket net/socket.c:1817 [inline]
     __sys_bind+0x1e4/0x290 net/socket.c:1848
     __do_sys_bind net/socket.c:1853 [inline]
     __se_sys_bind net/socket.c:1851 [inline]
     __x64_sys_bind+0x7a/0x90 net/socket.c:1851
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Let's dump and check metadata of corrupted inode, it shows its xattr_nid
    is the same to its i_ino.
    
    dump.f2fs -i 3 chaseyu.img.raw
    i_xattr_nid                             [0x       3 : 3]
    
    So that, during mknod in the corrupted directory, it tries to get and
    lock inode page twice, result in deadlock.
    
    - f2fs_mknod
     - f2fs_add_inline_entry
      - f2fs_get_inode_page --- lock dir's inode page
       - f2fs_init_acl
        - f2fs_acl_create(dir,..)
         - __f2fs_get_acl
          - f2fs_getxattr
           - lookup_all_xattrs
            - __get_node_page --- try to lock dir's inode page
    
    In order to fix this, let's add sanity check on ino and xnid.
    
    Cc: [email protected]
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/linux-f2fs-devel/[email protected]
    Signed-off-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: fix to do sanity check on sit_bitmap_size [+ + +]
Author: Chao Yu <[email protected]>
Date:   Mon Apr 14 18:55:20 2025 +0800

    f2fs: fix to do sanity check on sit_bitmap_size
    
    commit 5db0d252c64e91ba1929c70112352e85dc5751e7 upstream.
    
    w/ below testcase, resize will generate a corrupted image which
    contains inconsistent metadata, so when mounting such image, it
    will trigger kernel panic:
    
    touch img
    truncate -s $((512*1024*1024*1024)) img
    mkfs.f2fs -f img $((256*1024*1024))
    resize.f2fs -s -i img -t $((1024*1024*1024))
    mount img /mnt/f2fs
    
    ------------[ cut here ]------------
    kernel BUG at fs/f2fs/segment.h:863!
    Oops: invalid opcode: 0000 [#1] SMP PTI
    CPU: 11 UID: 0 PID: 3922 Comm: mount Not tainted 6.15.0-rc1+ #191 PREEMPT(voluntary)
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    RIP: 0010:f2fs_ra_meta_pages+0x47c/0x490
    
    Call Trace:
     f2fs_build_segment_manager+0x11c3/0x2600
     f2fs_fill_super+0xe97/0x2840
     mount_bdev+0xf4/0x140
     legacy_get_tree+0x2b/0x50
     vfs_get_tree+0x29/0xd0
     path_mount+0x487/0xaf0
     __x64_sys_mount+0x116/0x150
     do_syscall_64+0x82/0x190
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    RIP: 0033:0x7fdbfde1bcfe
    
    The reaseon is:
    
    sit_i->bitmap_size is 192, so size of sit bitmap is 192*8=1536, at maximum
    there are 1536 sit blocks, however MAIN_SEGS is 261893, so that sit_blk_cnt
    is 4762, build_sit_entries() -> current_sit_addr() tries to access
    out-of-boundary in sit_bitmap at offset from [1536, 4762), once sit_bitmap
    and sit_bitmap_mirror is not the same, it will trigger f2fs_bug_on().
    
    Let's add sanity check in f2fs_sanity_check_ckpt() to avoid panic.
    
    Cc: [email protected]
    Signed-off-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: fix to set atomic write status more clear [+ + +]
Author: Chao Yu <[email protected]>
Date:   Thu Mar 27 13:56:06 2025 +0800

    f2fs: fix to set atomic write status more clear
    
    [ Upstream commit db03c20c0850dc8d2bcabfa54b9438f7d666c863 ]
    
    1. After we start atomic write in a database file, before committing
    all data, we'd better not set inode w/ vfs dirty status to avoid
    redundant updates, instead, we only set inode w/ atomic dirty status.
    
    2. After we commit all data, before committing metadata, we need to
    clear atomic dirty status, and set vfs dirty status to allow vfs flush
    dirty inode.
    
    Cc: Daeho Jeong <[email protected]>
    Reported-by: Zhiguo Niu <[email protected]>
    Signed-off-by: Chao Yu <[email protected]>
    Reviewed-by: Daeho Jeong <[email protected]>
    Reviewed-by: Zhiguo Niu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

f2fs: prevent kernel warning due to negative i_nlink from corrupted image [+ + +]
Author: Jaegeuk Kim <[email protected]>
Date:   Sat Apr 12 21:09:46 2025 +0000

    f2fs: prevent kernel warning due to negative i_nlink from corrupted image
    
    commit 42cb74a92adaf88061039601ddf7c874f58b554e upstream.
    
    WARNING: CPU: 1 PID: 9426 at fs/inode.c:417 drop_nlink+0xac/0xd0
    home/cc/linux/fs/inode.c:417
    Modules linked in:
    CPU: 1 UID: 0 PID: 9426 Comm: syz-executor568 Not tainted
    6.14.0-12627-g94d471a4f428 #2 PREEMPT(full)
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
    1.13.0-1ubuntu1.1 04/01/2014
    RIP: 0010:drop_nlink+0xac/0xd0 home/cc/linux/fs/inode.c:417
    Code: 48 8b 5d 28 be 08 00 00 00 48 8d bb 70 07 00 00 e8 f9 67 e6 ff
    f0 48 ff 83 70 07 00 00 5b 5d e9 9a 12 82 ff e8 95 12 82 ff 90
    <0f> 0b 90 c7 45 48 ff ff ff ff 5b 5d e9 83 12 82 ff e8 fe 5f e6
    ff
    RSP: 0018:ffffc900026b7c28 EFLAGS: 00010293
    RAX: 0000000000000000 RBX: 0000000000000000 RCX: ffffffff8239710f
    RDX: ffff888041345a00 RSI: ffffffff8239717b RDI: 0000000000000005
    RBP: ffff888054509ad0 R08: 0000000000000005 R09: 0000000000000000
    R10: 0000000000000000 R11: ffffffff9ab36f08 R12: ffff88804bb40000
    R13: ffff8880545091e0 R14: 0000000000008000 R15: ffff8880545091e0
    FS:  000055555d0c5880(0000) GS:ffff8880eb3e3000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007f915c55b178 CR3: 0000000050d20000 CR4: 0000000000352ef0
    Call Trace:
     <task>
     f2fs_i_links_write home/cc/linux/fs/f2fs/f2fs.h:3194 [inline]
     f2fs_drop_nlink+0xd1/0x3c0 home/cc/linux/fs/f2fs/dir.c:845
     f2fs_delete_entry+0x542/0x1450 home/cc/linux/fs/f2fs/dir.c:909
     f2fs_unlink+0x45c/0x890 home/cc/linux/fs/f2fs/namei.c:581
     vfs_unlink+0x2fb/0x9b0 home/cc/linux/fs/namei.c:4544
     do_unlinkat+0x4c5/0x6a0 home/cc/linux/fs/namei.c:4608
     __do_sys_unlink home/cc/linux/fs/namei.c:4654 [inline]
     __se_sys_unlink home/cc/linux/fs/namei.c:4652 [inline]
     __x64_sys_unlink+0xc5/0x110 home/cc/linux/fs/namei.c:4652
     do_syscall_x64 home/cc/linux/arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xc7/0x250 home/cc/linux/arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7fb3d092324b
    Code: 73 01 c3 48 c7 c1 c0 ff ff ff f7 d8 64 89 01 48 83 c8 ff c3 66
    2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa b8 57 00 00 00 0f 05
    <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 c0 ff ff ff f7 d8 64 89 01
    48
    RSP: 002b:00007ffdc232d938 EFLAGS: 00000206 ORIG_RAX: 0000000000000057
    RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007fb3d092324b
    RDX: 00007ffdc232d960 RSI: 00007ffdc232d960 RDI: 00007ffdc232d9f0
    RBP: 00007ffdc232d9f0 R08: 0000000000000001 R09: 00007ffdc232d7c0
    R10: 00000000fffffffd R11: 0000000000000206 R12: 00007ffdc232eaf0
    R13: 000055555d0cebb0 R14: 00007ffdc232d958 R15: 0000000000000001
     </task>
    
    Cc: [email protected]
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: use vmalloc instead of kvmalloc in .init_{,de}compress_ctx [+ + +]
Author: Chao Yu <[email protected]>
Date:   Tue May 13 13:57:20 2025 +0800

    f2fs: use vmalloc instead of kvmalloc in .init_{,de}compress_ctx
    
    [ Upstream commit 70dd07c888451503c3e93b6821e10d1ea1ec9930 ]
    
    .init_{,de}compress_ctx uses kvmalloc() to alloc memory, it will try
    to allocate physically continuous page first, it may cause more memory
    allocation pressure, let's use vmalloc instead to mitigate it.
    
    [Test]
    cd /data/local/tmp
    touch file
    f2fs_io setflags compression file
    f2fs_io getflags file
    for i in $(seq 1 10); do sync; echo 3 > /proc/sys/vm/drop_caches;\
    time f2fs_io write 512 0 4096 zero osync file; truncate -s 0 file;\
    done
    
    [Result]
    Before          After           Delta
    21.243          21.694          -2.12%
    
    For compression, we recommend to use ioctl to compress file data in
    background for workaround.
    
    For decompression, only zstd will be affected.
    
    Signed-off-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
fbcon: Make sure modelist not set on unregistered console [+ + +]
Author: Kees Cook <[email protected]>
Date:   Fri May 9 13:06:47 2025 -0700

    fbcon: Make sure modelist not set on unregistered console
    
    [ Upstream commit cedc1b63394a866bf8663a3e40f4546f1d28c8d8 ]
    
    It looks like attempting to write to the "store_modes" sysfs node will
    run afoul of unregistered consoles:
    
    UBSAN: array-index-out-of-bounds in drivers/video/fbdev/core/fbcon.c:122:28
    index -1 is out of range for type 'fb_info *[32]'
    ...
     fbcon_info_from_console+0x192/0x1a0 drivers/video/fbdev/core/fbcon.c:122
     fbcon_new_modelist+0xbf/0x2d0 drivers/video/fbdev/core/fbcon.c:3048
     fb_new_modelist+0x328/0x440 drivers/video/fbdev/core/fbmem.c:673
     store_modes+0x1c9/0x3e0 drivers/video/fbdev/core/fbsysfs.c:113
     dev_attr_store+0x55/0x80 drivers/base/core.c:2439
    
    static struct fb_info *fbcon_registered_fb[FB_MAX];
    ...
    static signed char con2fb_map[MAX_NR_CONSOLES];
    ...
    static struct fb_info *fbcon_info_from_console(int console)
    ...
            return fbcon_registered_fb[con2fb_map[console]];
    
    If con2fb_map contains a -1 things go wrong here. Instead, return NULL,
    as callers of fbcon_info_from_console() are trying to compare against
    existing "info" pointers, so error handling should kick in correctly.
    
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Kees Cook <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
fbdev: Fix do_register_framebuffer to prevent null-ptr-deref in fb_videomode_to_var [+ + +]
Author: Murad Masimov <[email protected]>
Date:   Mon Apr 28 18:34:06 2025 +0300

    fbdev: Fix do_register_framebuffer to prevent null-ptr-deref in fb_videomode_to_var
    
    commit 17186f1f90d34fa701e4f14e6818305151637b9e upstream.
    
    If fb_add_videomode() in do_register_framebuffer() fails to allocate
    memory for fb_videomode, it will later lead to a null-ptr dereference in
    fb_videomode_to_var(), as the fb_info is registered while not having the
    mode in modelist that is expected to be there, i.e. the one that is
    described in fb_info->var.
    
    ================================================================
    general protection fault, probably for non-canonical address 0xdffffc0000000001: 0000 [#1] PREEMPT SMP KASAN NOPTI
    KASAN: null-ptr-deref in range [0x0000000000000008-0x000000000000000f]
    CPU: 1 PID: 30371 Comm: syz-executor.1 Not tainted 5.10.226-syzkaller #0
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014
    RIP: 0010:fb_videomode_to_var+0x24/0x610 drivers/video/fbdev/core/modedb.c:901
    Call Trace:
     display_to_var+0x3a/0x7c0 drivers/video/fbdev/core/fbcon.c:929
     fbcon_resize+0x3e2/0x8f0 drivers/video/fbdev/core/fbcon.c:2071
     resize_screen drivers/tty/vt/vt.c:1176 [inline]
     vc_do_resize+0x53a/0x1170 drivers/tty/vt/vt.c:1263
     fbcon_modechanged+0x3ac/0x6e0 drivers/video/fbdev/core/fbcon.c:2720
     fbcon_update_vcs+0x43/0x60 drivers/video/fbdev/core/fbcon.c:2776
     do_fb_ioctl+0x6d2/0x740 drivers/video/fbdev/core/fbmem.c:1128
     fb_ioctl+0xe7/0x150 drivers/video/fbdev/core/fbmem.c:1203
     vfs_ioctl fs/ioctl.c:48 [inline]
     __do_sys_ioctl fs/ioctl.c:753 [inline]
     __se_sys_ioctl fs/ioctl.c:739 [inline]
     __x64_sys_ioctl+0x19a/0x210 fs/ioctl.c:739
     do_syscall_64+0x33/0x40 arch/x86/entry/common.c:46
     entry_SYSCALL_64_after_hwframe+0x67/0xd1
    ================================================================
    
    Even though fbcon_init() checks beforehand if fb_match_mode() in
    var_to_display() fails, it can not prevent the panic because fbcon_init()
    does not return error code. Considering this and the comment in the code
    about fb_match_mode() returning NULL - "This should not happen" - it is
    better to prevent registering the fb_info if its mode was not set
    successfully. Also move fb_add_videomode() closer to the beginning of
    do_register_framebuffer() to avoid having to do the cleanup on fail.
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Signed-off-by: Murad Masimov <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

fbdev: Fix fb_set_var to prevent null-ptr-deref in fb_videomode_to_var [+ + +]
Author: Murad Masimov <[email protected]>
Date:   Mon Apr 28 18:34:07 2025 +0300

    fbdev: Fix fb_set_var to prevent null-ptr-deref in fb_videomode_to_var
    
    commit 05f6e183879d9785a3cdf2f08a498bc31b7a20aa upstream.
    
    If fb_add_videomode() in fb_set_var() fails to allocate memory for
    fb_videomode, later it may lead to a null-ptr dereference in
    fb_videomode_to_var(), as the fb_info is registered while not having the
    mode in modelist that is expected to be there, i.e. the one that is
    described in fb_info->var.
    
    ================================================================
    general protection fault, probably for non-canonical address 0xdffffc0000000001: 0000 [#1] PREEMPT SMP KASAN NOPTI
    KASAN: null-ptr-deref in range [0x0000000000000008-0x000000000000000f]
    CPU: 1 PID: 30371 Comm: syz-executor.1 Not tainted 5.10.226-syzkaller #0
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014
    RIP: 0010:fb_videomode_to_var+0x24/0x610 drivers/video/fbdev/core/modedb.c:901
    Call Trace:
     display_to_var+0x3a/0x7c0 drivers/video/fbdev/core/fbcon.c:929
     fbcon_resize+0x3e2/0x8f0 drivers/video/fbdev/core/fbcon.c:2071
     resize_screen drivers/tty/vt/vt.c:1176 [inline]
     vc_do_resize+0x53a/0x1170 drivers/tty/vt/vt.c:1263
     fbcon_modechanged+0x3ac/0x6e0 drivers/video/fbdev/core/fbcon.c:2720
     fbcon_update_vcs+0x43/0x60 drivers/video/fbdev/core/fbcon.c:2776
     do_fb_ioctl+0x6d2/0x740 drivers/video/fbdev/core/fbmem.c:1128
     fb_ioctl+0xe7/0x150 drivers/video/fbdev/core/fbmem.c:1203
     vfs_ioctl fs/ioctl.c:48 [inline]
     __do_sys_ioctl fs/ioctl.c:753 [inline]
     __se_sys_ioctl fs/ioctl.c:739 [inline]
     __x64_sys_ioctl+0x19a/0x210 fs/ioctl.c:739
     do_syscall_64+0x33/0x40 arch/x86/entry/common.c:46
     entry_SYSCALL_64_after_hwframe+0x67/0xd1
    ================================================================
    
    The reason is that fb_info->var is being modified in fb_set_var(), and
    then fb_videomode_to_var() is called. If it fails to add the mode to
    fb_info->modelist, fb_set_var() returns error, but does not restore the
    old value of fb_info->var. Restore fb_info->var on failure the same way
    it is done earlier in the function.
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Signed-off-by: Murad Masimov <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fs/nfs/read: fix double-unlock bug in nfs_return_empty_folio() [+ + +]
Author: Max Kellermann <[email protected]>
Date:   Wed Apr 23 15:22:50 2025 +0200

    fs/nfs/read: fix double-unlock bug in nfs_return_empty_folio()
    
    commit 4c10fa44bc5f700e2ea21de2fbae520ba21f19d9 upstream.
    
    Sometimes, when a file was read while it was being truncated by
    another NFS client, the kernel could deadlock because folio_unlock()
    was called twice, and the second call would XOR back the `PG_locked`
    flag.
    
    Most of the time (depending on the timing of the truncation), nobody
    notices the problem because folio_unlock() gets called three times,
    which flips `PG_locked` back off:
    
     1. vfs_read, nfs_read_folio, ... nfs_read_add_folio,
        nfs_return_empty_folio
     2. vfs_read, nfs_read_folio, ... netfs_read_collection,
        netfs_unlock_abandoned_read_pages
     3. vfs_read, ... nfs_do_read_folio, nfs_read_add_folio,
        nfs_return_empty_folio
    
    The problem is that nfs_read_add_folio() is not supposed to unlock the
    folio if fscache is enabled, and a nfs_netfs_folio_unlock() check is
    missing in nfs_return_empty_folio().
    
    Rarely this leads to a warning in netfs_read_collection():
    
     ------------[ cut here ]------------
     R=0000031c: folio 10 is not locked
     WARNING: CPU: 0 PID: 29 at fs/netfs/read_collect.c:133 netfs_read_collection+0x7c0/0xf00
     [...]
     Workqueue: events_unbound netfs_read_collection_worker
     RIP: 0010:netfs_read_collection+0x7c0/0xf00
     [...]
     Call Trace:
      <TASK>
      netfs_read_collection_worker+0x67/0x80
      process_one_work+0x12e/0x2c0
      worker_thread+0x295/0x3a0
    
    Most of the time, however, processes just get stuck forever in
    folio_wait_bit_common(), waiting for `PG_locked` to disappear, which
    never happens because nobody is really holding the folio lock.
    
    Fixes: 000dbe0bec05 ("NFS: Convert buffered read paths to use netfs when fscache is enabled")
    Cc: [email protected]
    Signed-off-by: Max Kellermann <[email protected]>
    Reviewed-by: Dave Wysochanski <[email protected]>
    Signed-off-by: Anna Schumaker <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fs/xattr.c: fix simple_xattr_list() [+ + +]
Author: Stephen Smalley <[email protected]>
Date:   Thu Jun 5 12:51:16 2025 -0400

    fs/xattr.c: fix simple_xattr_list()
    
    [ Upstream commit 800d0b9b6a8b1b354637b4194cc167ad1ce2bdd3 ]
    
    commit 8b0ba61df5a1 ("fs/xattr.c: fix simple_xattr_list to always
    include security.* xattrs") failed to reset err after the call to
    security_inode_listsecurity(), which returns the length of the
    returned xattr name. This results in simple_xattr_list() incorrectly
    returning this length even if a POSIX acl is also set on the inode.
    
    Reported-by: Collin Funk <[email protected]>
    Closes: https://lore.kernel.org/selinux/[email protected]/
    Reported-by: Paul Eggert <[email protected]>
    Closes: https://bugzilla.redhat.com/show_bug.cgi?id=2369561
    Fixes: 8b0ba61df5a1 ("fs/xattr.c: fix simple_xattr_list to always include security.* xattrs")
    
    Signed-off-by: Stephen Smalley <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ftrace: Fix UAF when lookup kallsym after ftrace disabled [+ + +]
Author: Ye Bin <[email protected]>
Date:   Thu May 29 19:19:54 2025 +0800

    ftrace: Fix UAF when lookup kallsym after ftrace disabled
    
    commit f914b52c379c12288b7623bb814d0508dbe7481d upstream.
    
    The following issue happens with a buggy module:
    
    BUG: unable to handle page fault for address: ffffffffc05d0218
    PGD 1bd66f067 P4D 1bd66f067 PUD 1bd671067 PMD 101808067 PTE 0
    Oops: Oops: 0000 [#1] SMP KASAN PTI
    Tainted: [O]=OOT_MODULE, [E]=UNSIGNED_MODULE
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
    RIP: 0010:sized_strscpy+0x81/0x2f0
    RSP: 0018:ffff88812d76fa08 EFLAGS: 00010246
    RAX: 0000000000000000 RBX: ffffffffc0601010 RCX: dffffc0000000000
    RDX: 0000000000000038 RSI: dffffc0000000000 RDI: ffff88812608da2d
    RBP: 8080808080808080 R08: ffff88812608da2d R09: ffff88812608da68
    R10: ffff88812608d82d R11: ffff88812608d810 R12: 0000000000000038
    R13: ffff88812608da2d R14: ffffffffc05d0218 R15: fefefefefefefeff
    FS:  00007fef552de740(0000) GS:ffff8884251c7000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: ffffffffc05d0218 CR3: 00000001146f0000 CR4: 00000000000006f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     ftrace_mod_get_kallsym+0x1ac/0x590
     update_iter_mod+0x239/0x5b0
     s_next+0x5b/0xa0
     seq_read_iter+0x8c9/0x1070
     seq_read+0x249/0x3b0
     proc_reg_read+0x1b0/0x280
     vfs_read+0x17f/0x920
     ksys_read+0xf3/0x1c0
     do_syscall_64+0x5f/0x2e0
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    The above issue may happen as follows:
    (1) Add kprobe tracepoint;
    (2) insmod test.ko;
    (3)  Module triggers ftrace disabled;
    (4) rmmod test.ko;
    (5) cat /proc/kallsyms; --> Will trigger UAF as test.ko already removed;
    ftrace_mod_get_kallsym()
    ...
    strscpy(module_name, mod_map->mod->name, MODULE_NAME_LEN);
    ...
    
    The problem is when a module triggers an issue with ftrace and
    sets ftrace_disable. The ftrace_disable is set when an anomaly is
    discovered and to prevent any more damage, ftrace stops all text
    modification. The issue that happened was that the ftrace_disable stops
    more than just the text modification.
    
    When a module is loaded, its init functions can also be traced. Because
    kallsyms deletes the init functions after a module has loaded, ftrace
    saves them when the module is loaded and function tracing is enabled. This
    allows the output of the function trace to show the init function names
    instead of just their raw memory addresses.
    
    When a module is removed, ftrace_release_mod() is called, and if
    ftrace_disable is set, it just returns without doing anything more. The
    problem here is that it leaves the mod_list still around and if kallsyms
    is called, it will call into this code and access the module memory that
    has already been freed as it will return:
    
      strscpy(module_name, mod_map->mod->name, MODULE_NAME_LEN);
    
    Where the "mod" no longer exists and triggers a UAF bug.
    
    Link: https://lore.kernel.org/all/[email protected]/
    
    Cc: [email protected]
    Fixes: aba4b5c22cba ("ftrace: Save module init functions kallsyms symbols for tracing")
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Ye Bin <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
gfs2: move msleep to sleepable context [+ + +]
Author: Alexander Aring <[email protected]>
Date:   Mon Mar 31 19:03:24 2025 -0400

    gfs2: move msleep to sleepable context
    
    commit ac5ee087d31ed93b6e45d2968a66828c6f621d8c upstream.
    
    This patch moves the msleep_interruptible() out of the non-sleepable
    context by moving the ls->ls_recover_spin spinlock around so
    msleep_interruptible() will be called in a sleepable context.
    
    Cc: [email protected]
    Fixes: 4a7727725dc7 ("GFS2: Fix recovery issues for spectators")
    Suggested-by: Andreas Gruenbacher <[email protected]>
    Signed-off-by: Alexander Aring <[email protected]>
    Signed-off-by: Andreas Gruenbacher <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
gpio: mlxbf3: only get IRQ for device instance 0 [+ + +]
Author: David Thompson <[email protected]>
Date:   Fri Jun 13 16:34:43 2025 +0000

    gpio: mlxbf3: only get IRQ for device instance 0
    
    [ Upstream commit 10af0273a35ab4513ca1546644b8c853044da134 ]
    
    The gpio-mlxbf3 driver interfaces with two GPIO controllers,
    device instance 0 and 1. There is a single IRQ resource shared
    between the two controllers, and it is found in the ACPI table for
    device instance 0.  The driver should not attempt to get an IRQ
    resource when probing device instance 1, otherwise the following
    error is logged:
      mlxbf3_gpio MLNXBF33:01: error -ENXIO: IRQ index 0 not found
    
    Signed-off-by: David Thompson <[email protected]>
    Reviewed-by: Shravan Kumar Ramani <[email protected]>
    Fixes: cd33f216d241 ("gpio: mlxbf3: Add gpio driver support")
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
gpiolib: of: Add polarity quirk for s5m8767 [+ + +]
Author: Peng Fan <[email protected]>
Date:   Thu Mar 27 08:49:44 2025 +0800

    gpiolib: of: Add polarity quirk for s5m8767
    
    [ Upstream commit 4e310626eb4df52a31a142c1360fead0fcbd3793 ]
    
    This is prepare patch for switching s5m8767 regulator driver to
    use GPIO descriptor. DTS for exynos5250 spring incorrectly specifies
    "active low" polarity for the DVS and DS line. But per datasheet,
    they are actually active high. So add polarity quirk for it.
    
    Signed-off-by: Peng Fan <[email protected]>
    Reviewed-by: Linus Walleij <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
hwmon: (ftsteutates) Fix TOCTOU race in fts_read() [+ + +]
Author: Gui-Dong Han <[email protected]>
Date:   Fri Jun 6 07:16:40 2025 +0000

    hwmon: (ftsteutates) Fix TOCTOU race in fts_read()
    
    commit 14c9ede9ca4cd078ad76a6ab9617b81074eb58bf upstream.
    
    In the fts_read() function, when handling hwmon_pwm_auto_channels_temp,
    the code accesses the shared variable data->fan_source[channel] twice
    without holding any locks. It is first checked against
    FTS_FAN_SOURCE_INVALID, and if the check passes, it is read again
    when used as an argument to the BIT() macro.
    
    This creates a Time-of-Check to Time-of-Use (TOCTOU) race condition.
    Another thread executing fts_update_device() can modify the value of
    data->fan_source[channel] between the check and its use. If the value
    is changed to FTS_FAN_SOURCE_INVALID (0xff) during this window, the
    BIT() macro will be called with a large shift value (BIT(255)).
    A bit shift by a value greater than or equal to the type width is
    undefined behavior and can lead to a crash or incorrect values being
    returned to userspace.
    
    Fix this by reading data->fan_source[channel] into a local variable
    once, eliminating the race condition. Additionally, add a bounds check
    to ensure the value is less than BITS_PER_LONG before passing it to
    the BIT() macro, making the code more robust against undefined behavior.
    
    This possible bug was found by an experimental static analysis tool
    developed by our team.
    
    Fixes: 1c5759d8ce05 ("hwmon: (ftsteutates) Replace fanX_source with pwmX_auto_channels_temp")
    Cc: [email protected]
    Signed-off-by: Gui-Dong Han <[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: (occ) fix unaligned accesses [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Tue Jun 10 11:25:49 2025 +0200

    hwmon: (occ) fix unaligned accesses
    
    [ Upstream commit 2c021b45c154958566aad0cae9f74ab26a2d5732 ]
    
    Passing a pointer to an unaligned integer as a function argument is
    undefined behavior:
    
    drivers/hwmon/occ/common.c:492:27: warning: taking address of packed member 'accumulator' of class or structure 'power_sensor_2' may result in an unaligned pointer value [-Waddress-of-packed-member]
      492 |   val = occ_get_powr_avg(&power->accumulator,
          |                           ^~~~~~~~~~~~~~~~~~
    drivers/hwmon/occ/common.c:493:13: warning: taking address of packed member 'update_tag' of class or structure 'power_sensor_2' may result in an unaligned pointer value [-Waddress-of-packed-member]
      493 |            &power->update_tag);
          |             ^~~~~~~~~~~~~~~~~
    
    Move the get_unaligned() calls out of the function and pass these
    through argument registers instead.
    
    Fixes: c10e753d43eb ("hwmon (occ): Add sensor types and versions")
    Signed-off-by: Arnd Bergmann <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

hwmon: (occ) Rework attribute registration for stack usage [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Tue Jun 10 11:23:06 2025 +0200

    hwmon: (occ) Rework attribute registration for stack usage
    
    [ Upstream commit 744c2fe950e936c4d62430de899d6253424200ed ]
    
    clang produces an output with excessive stack usage when building the
    occ_setup_sensor_attrs() function, apparently the result of having
    a lot of struct literals and building with the -fno-strict-overflow
    option that leads clang to skip some optimization in case the 'attr'
    pointer overruns:
    
    drivers/hwmon/occ/common.c:775:12: error: stack frame size (1392) exceeds limit (1280) in 'occ_setup_sensor_attrs' [-Werror,-Wframe-larger-than]
    
    Replace the custom macros for initializing the attributes with a
    simpler function call that does not run into this corner case.
    
    Link: https://godbolt.org/z/Wf1Yx76a5
    Fixes: 54076cb3b5ff ("hwmon (occ): Add sensor attributes and register hwmon device")
    Signed-off-by: Arnd Bergmann <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
i2c: designware: Invoke runtime suspend on quick slave re-registration [+ + +]
Author: Tan En De <[email protected]>
Date:   Sat Apr 12 10:33:03 2025 +0800

    i2c: designware: Invoke runtime suspend on quick slave re-registration
    
    [ Upstream commit 2fe2b969d911a09abcd6a47401a3c66c38a310e6 ]
    
    Replaced pm_runtime_put() with pm_runtime_put_sync_suspend() to ensure
    the runtime suspend is invoked immediately when unregistering a slave.
    This prevents a race condition where suspend was skipped when
    unregistering and registering slave in quick succession.
    
    For example, consider the rapid sequence of
    `delete_device -> new_device -> delete_device -> new_device`.
    In this sequence, it is observed that the dw_i2c_plat_runtime_suspend()
    might not be invoked after `delete_device` operation.
    
    This is because after `delete_device` operation, when the
    pm_runtime_put() is about to trigger suspend, the following `new_device`
    operation might race and cancel the suspend.
    
    If that happens, during the `new_device` operation,
    dw_i2c_plat_runtime_resume() is skipped (since there was no suspend), which
    means `i_dev->init()`, i.e. i2c_dw_init_slave(), is skipped.
    Since i2c_dw_init_slave() is skipped, i2c_dw_configure_fifo_slave() is
    skipped too, which leaves `DW_IC_INTR_MASK` unconfigured. If we inspect
    the interrupt mask register using devmem, it will show as zero.
    
    Example shell script to reproduce the issue:
    ```
      #!/bin/sh
    
      SLAVE_LADDR=0x1010
      SLAVE_BUS=13
      NEW_DEVICE=/sys/bus/i2c/devices/i2c-$SLAVE_BUS/new_device
      DELETE_DEVICE=/sys/bus/i2c/devices/i2c-$SLAVE_BUS/delete_device
    
      # Create initial device
      echo slave-24c02 $SLAVE_LADDR > $NEW_DEVICE
      sleep 2
    
      # Rapid sequence of
      # delete_device -> new_device -> delete_device -> new_device
      echo $SLAVE_LADDR > $DELETE_DEVICE
      echo slave-24c02 $SLAVE_LADDR > $NEW_DEVICE
      echo $SLAVE_LADDR > $DELETE_DEVICE
      echo slave-24c02 $SLAVE_LADDR > $NEW_DEVICE
    
      # Using devmem to inspect IC_INTR_MASK will show as zero
    ```
    
    Signed-off-by: Tan En De <[email protected]>
    Acked-by: Jarkko Nikula <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Andi Shyti <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

i2c: npcm: Add clock toggle recovery [+ + +]
Author: Tali Perry <[email protected]>
Date:   Fri Mar 28 19:32:50 2025 +0000

    i2c: npcm: Add clock toggle recovery
    
    [ Upstream commit 38010591a0fc3203f1cee45b01ab358b72dd9ab2 ]
    
    During init of the bus, the module checks that the bus is idle.
    If one of the lines are stuck try to recover them first before failing.
    Sometimes SDA and SCL are low if improper reset occurs (e.g., reboot).
    
    Signed-off-by: Tali Perry <[email protected]>
    Signed-off-by: Mohammed Elbadry <[email protected]>
    Reviewed-by: Mukesh Kumar Savaliya <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Andi Shyti <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

i2c: tegra: check msg length in SMBUS block read [+ + +]
Author: Akhil R <[email protected]>
Date:   Thu Apr 24 11:03:20 2025 +0530

    i2c: tegra: check msg length in SMBUS block read
    
    [ Upstream commit a6e04f05ce0b070ab39d5775580e65c7d943da0b ]
    
    For SMBUS block read, do not continue to read if the message length
    passed from the device is '0' or greater than the maximum allowed bytes.
    
    Signed-off-by: Akhil R <[email protected]>
    Acked-by: Thierry Reding <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Andi Shyti <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
i40e: fix MMIO write access to an invalid page in i40e_clear_hw [+ + +]
Author: Kyungwook Boo <[email protected]>
Date:   Tue Mar 11 14:16:02 2025 +0900

    i40e: fix MMIO write access to an invalid page in i40e_clear_hw
    
    [ Upstream commit 015bac5daca978448f2671478c553ce1f300c21e ]
    
    When the device sends a specific input, an integer underflow can occur, leading
    to MMIO write access to an invalid page.
    
    Prevent the integer underflow by changing the type of related variables.
    
    Signed-off-by: Kyungwook Boo <[email protected]>
    Link: https://lore.kernel.org/lkml/[email protected]/T/
    Reviewed-by: Przemek Kitszel <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Reviewed-by: Aleksandr Loktionov <[email protected]>
    Tested-by: Rinitha S <[email protected]> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ice: fix check for existing switch rule [+ + +]
Author: Mateusz Pacuszka <[email protected]>
Date:   Fri Feb 14 09:50:35 2025 +0100

    ice: fix check for existing switch rule
    
    [ Upstream commit a808691df39b52cd9db861b118e88e18b63e2299 ]
    
    In case the rule already exists and another VSI wants to subscribe to it
    new VSI list is being created and both VSIs are moved to it.
    Currently, the check for already existing VSI with the same rule is done
    based on fdw_id.hw_vsi_id, which applies only to LOOKUP_RX flag.
    Change it to vsi_handle. This is software VSI ID, but it can be applied
    here, because vsi_map itself is also based on it.
    
    Additionally change return status in case the VSI already exists in the
    VSI map to "Already exists". Such case should be handled by the caller.
    
    Signed-off-by: Mateusz Pacuszka <[email protected]>
    Reviewed-by: Przemek Kitszel <[email protected]>
    Reviewed-by: Michal Swiatkowski <[email protected]>
    Signed-off-by: Larysa Zaremba <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Tested-by: Rafal Romanowski <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
iio: accel: fxls8962af: Fix temperature calculation [+ + +]
Author: Sean Nyekjaer <[email protected]>
Date:   Mon May 5 21:20:07 2025 +0200

    iio: accel: fxls8962af: Fix temperature calculation
    
    commit 16038474e3a0263572f36326ef85057aaf341814 upstream.
    
    According to spec temperature should be returned in milli degrees Celsius.
    Add in_temp_scale to calculate from Celsius to milli Celsius.
    
    Fixes: a3e0b51884ee ("iio: accel: add support for FXLS8962AF/FXLS8964AF accelerometers")
    Cc: [email protected]
    Reviewed-by: Marcelo Schmitt <[email protected]>
    Signed-off-by: Sean Nyekjaer <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: accel: fxls8962af: Fix temperature scan element sign [+ + +]
Author: Sean Nyekjaer <[email protected]>
Date:   Mon May 5 21:20:08 2025 +0200

    iio: accel: fxls8962af: Fix temperature scan element sign
    
    commit 9c78317b42e7c32523c91099859bc4721e9f75dd upstream.
    
    Mark the temperature element signed, data read from the TEMP_OUT register
    is in two's complement format.
    This will avoid the temperature being mishandled and miss displayed.
    
    Fixes: a3e0b51884ee ("iio: accel: add support for FXLS8962AF/FXLS8964AF accelerometers")
    Suggested-by: Marcelo Schmitt <[email protected]>
    Cc: [email protected]
    Reviewed-by: Marcelo Schmitt <[email protected]>
    Signed-off-by: Sean Nyekjaer <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: adc: ad7606_spi: fix reg write value mask [+ + +]
Author: David Lechner <[email protected]>
Date:   Mon Apr 28 20:55:34 2025 -0500

    iio: adc: ad7606_spi: fix reg write value mask
    
    commit 89944d88f8795c6c89b9514cb365998145511cd4 upstream.
    
    Fix incorrect value mask for register write. Register values are 8-bit,
    not 9. If this function was called with a value > 0xFF and an even addr,
    it would cause writing to the next register.
    
    Fixes: f2a22e1e172f ("iio: adc: ad7606: Add support for software mode for ad7616")
    Signed-off-by: David Lechner <[email protected]>
    Reviewed-by: Angelo Dureghello <[email protected]>
    Link: https://patch.msgid.link/20250428-iio-adc-ad7606_spi-fix-write-value-mask-v1-1-a2d5e85a809f@baylibre.com
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: imu: inv_icm42600: Fix temperature calculation [+ + +]
Author: Sean Nyekjaer <[email protected]>
Date:   Fri May 2 11:37:26 2025 +0200

    iio: imu: inv_icm42600: Fix temperature calculation
    
    commit e2f820014239df9360064079ae93f838ff3b7f8c upstream.
    
    >From the documentation:
    "offset to be added to <type>[Y]_raw prior toscaling by <type>[Y]_scale"
    Offset should be applied before multiplying scale, so divide offset by
    scale to make this correct.
    
    Fixes: bc3eb0207fb5 ("iio: imu: inv_icm42600: add temperature sensor support")
    Signed-off-by: Sean Nyekjaer <[email protected]>
    Acked-by: Jean-Baptiste Maneyrol <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Input: gpio-keys - fix possible concurrent access in gpio_keys_irq_timer() [+ + +]
Author: Gatien Chevallier <[email protected]>
Date:   Fri May 30 16:09:23 2025 -0700

    Input: gpio-keys - fix possible concurrent access in gpio_keys_irq_timer()
    
    commit 8f38219fa139623c29db2cb0f17d0a197a86e344 upstream.
    
    gpio_keys_irq_isr() and gpio_keys_irq_timer() access the same resources.
    There could be a concurrent access if a GPIO interrupt occurs in parallel
    of a HR timer interrupt.
    
    Guard back those resources with a spinlock.
    
    Fixes: 019002f20cb5 ("Input: gpio-keys - use hrtimer for release timer")
    Signed-off-by: Gatien Chevallier <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Cc: [email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: ims-pcu - check record size in ims_pcu_flash_firmware() [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Fri May 30 16:13:32 2025 -0700

    Input: ims-pcu - check record size in ims_pcu_flash_firmware()
    
    commit a95ef0199e80f3384eb992889322957d26c00102 upstream.
    
    The "len" variable comes from the firmware and we generally do
    trust firmware, but it's always better to double check.  If the "len"
    is too large it could result in memory corruption when we do
    "memcpy(fragment->data, rec->data, len);"
    
    Fixes: 628329d52474 ("Input: add IMS Passenger Control Unit driver")
    Signed-off-by: Dan Carpenter <[email protected]>
    Link: https://lore.kernel.org/r/131fd1ae92c828ee9f4fa2de03d8c210ae1f3524.1748463049.git.dan.carpenter@linaro.org
    Cc: [email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: sparcspkr - avoid unannotated fall-through [+ + +]
Author: WangYuli <[email protected]>
Date:   Fri Apr 18 18:37:18 2025 -0700

    Input: sparcspkr - avoid unannotated fall-through
    
    commit 8b1d858cbd4e1800e9336404ba7892b5a721230d upstream.
    
    Fix follow warnings with clang-21i (and reformat for clarity):
      drivers/input/misc/sparcspkr.c:78:3: warning: unannotated fall-through between switch labels [-Wimplicit-fallthrough]
         78 |                 case SND_TONE: break;
            |                 ^
      drivers/input/misc/sparcspkr.c:78:3: note: insert 'break;' to avoid fall-through
         78 |                 case SND_TONE: break;
            |                 ^
            |                 break;
      drivers/input/misc/sparcspkr.c:113:3: warning: unannotated fall-through between switch labels [-Wimplicit-fallthrough]
        113 |                 case SND_TONE: break;
            |                 ^
      drivers/input/misc/sparcspkr.c:113:3: note: insert 'break;' to avoid fall-through
        113 |                 case SND_TONE: break;
            |                 ^
            |                 break;
      2 warnings generated.
    
    Signed-off-by: WangYuli <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
io_uring/kbuf: account ring io_buffer_list memory [+ + +]
Author: Pavel Begunkov <[email protected]>
Date:   Tue May 13 18:26:46 2025 +0100

    io_uring/kbuf: account ring io_buffer_list memory
    
    commit 475a8d30371604a6363da8e304a608a5959afc40 upstream.
    
    Follow the non-ringed pbuf struct io_buffer_list allocations and account
    it against the memcg. There is low chance of that being an actual
    problem as ring provided buffer should either pin user memory or
    allocate it, which is already accounted.
    
    Cc: [email protected] # 6.1
    Signed-off-by: Pavel Begunkov <[email protected]>
    Link: https://lore.kernel.org/r/3985218b50d341273cafff7234e1a7e6d0db9808.1747150490.git.asml.silence@gmail.com
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
io_uring: account drain memory to cgroup [+ + +]
Author: Pavel Begunkov <[email protected]>
Date:   Fri May 9 12:12:47 2025 +0100

    io_uring: account drain memory to cgroup
    
    commit f979c20547e72568e3c793bc92c7522bc3166246 upstream.
    
    Account drain allocations against memcg. It's not a big problem as each
    such allocation is paired with a request, which is accounted, but it's
    nicer to follow the limits more closely.
    
    Cc: [email protected] # 6.1
    Signed-off-by: Pavel Begunkov <[email protected]>
    Link: https://lore.kernel.org/r/f8dfdbd755c41fd9c75d12b858af07dfba5bbb68.1746788718.git.asml.silence@gmail.com
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

io_uring: fix task leak issue in io_wq_create() [+ + +]
Author: Penglei Jiang <[email protected]>
Date:   Sun Jun 15 09:39:06 2025 -0700

    io_uring: fix task leak issue in io_wq_create()
    
    commit 89465d923bda180299e69ee2800aab84ad0ba689 upstream.
    
    Add missing put_task_struct() in the error path
    
    Cc: [email protected]
    Fixes: 0f8baa3c9802 ("io-wq: fully initialize wqe before calling cpuhp_state_add_instance_nocalls()")
    Signed-off-by: Penglei Jiang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
iommu/amd: Ensure GA log notifier callbacks finish running before module unload [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Fri Mar 14 20:10:48 2025 -0700

    iommu/amd: Ensure GA log notifier callbacks finish running before module unload
    
    [ Upstream commit 94c721ea03c7078163f41dbaa101ac721ddac329 ]
    
    Synchronize RCU when unregistering KVM's GA log notifier to ensure all
    in-flight interrupt handlers complete before KVM-the module is unloaded.
    
    Signed-off-by: Sean Christopherson <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Joerg Roedel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ionic: Prevent driver/fw getting out of sync on devcmd(s) [+ + +]
Author: Brett Creeley <[email protected]>
Date:   Mon Jun 9 14:28:27 2025 -0700

    ionic: Prevent driver/fw getting out of sync on devcmd(s)
    
    [ Upstream commit 5466491c9e3309ed5c7adbb8fad6e93fcc9a8fe9 ]
    
    Some stress/negative firmware testing around devcmd(s) returning
    EAGAIN found that the done bit could get out of sync in the
    firmware when it wasn't cleared in a retry case.
    
    While here, change the type of the local done variable to a bool
    to match the return type from ionic_dev_cmd_done().
    
    Fixes: ec8ee714736e ("ionic: stretch heartbeat detection")
    Signed-off-by: Brett Creeley <[email protected]>
    Signed-off-by: Shannon Nelson <[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]>

 
ipc: fix to protect IPCS lookups using RCU [+ + +]
Author: Jeongjun Park <[email protected]>
Date:   Thu Apr 24 23:33:22 2025 +0900

    ipc: fix to protect IPCS lookups using RCU
    
    commit d66adabe91803ef34a8b90613c81267b5ded1472 upstream.
    
    syzbot reported that it discovered a use-after-free vulnerability, [0]
    
    [0]: https://lore.kernel.org/all/[email protected]/
    
    idr_for_each() is protected by rwsem, but this is not enough.  If it is
    not protected by RCU read-critical region, when idr_for_each() calls
    radix_tree_node_free() through call_rcu() to free the radix_tree_node
    structure, the node will be freed immediately, and when reading the next
    node in radix_tree_for_each_slot(), the already freed memory may be read.
    
    Therefore, we need to add code to make sure that idr_for_each() is
    protected within the RCU read-critical region when we call it in
    shm_destroy_orphaned().
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: b34a6b1da371 ("ipc: introduce shm_rmid_forced sysctl")
    Signed-off-by: Jeongjun Park <[email protected]>
    Reported-by: [email protected]
    Cc: Jeongjun Park <[email protected]>
    Cc: Liam Howlett <[email protected]>
    Cc: Lorenzo Stoakes <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Vasiliy Kulikov <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ipv4/route: Use this_cpu_inc() for stats on PREEMPT_RT [+ + +]
Author: Sebastian Andrzej Siewior <[email protected]>
Date:   Mon May 12 11:27:24 2025 +0200

    ipv4/route: Use this_cpu_inc() for stats on PREEMPT_RT
    
    [ Upstream commit 1c0829788a6e6e165846b9bedd0b908ef16260b6 ]
    
    The statistics are incremented with raw_cpu_inc() assuming it always
    happens with bottom half disabled. Without per-CPU locking in
    local_bh_disable() on PREEMPT_RT this is no longer true.
    
    Use this_cpu_inc() on PREEMPT_RT for the increment to not worry about
    preemption.
    
    Cc: David Ahern <[email protected]>
    Signed-off-by: Sebastian Andrzej Siewior <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
jbd2: fix data-race and null-ptr-deref in jbd2_journal_dirty_metadata() [+ + +]
Author: Jeongjun Park <[email protected]>
Date:   Wed May 14 22:08:55 2025 +0900

    jbd2: fix data-race and null-ptr-deref in jbd2_journal_dirty_metadata()
    
    commit af98b0157adf6504fade79b3e6cb260c4ff68e37 upstream.
    
    Since handle->h_transaction may be a NULL pointer, so we should change it
    to call is_handle_aborted(handle) first before dereferencing it.
    
    And the following data-race was reported in my fuzzer:
    
    ==================================================================
    BUG: KCSAN: data-race in jbd2_journal_dirty_metadata / jbd2_journal_dirty_metadata
    
    write to 0xffff888011024104 of 4 bytes by task 10881 on cpu 1:
     jbd2_journal_dirty_metadata+0x2a5/0x770 fs/jbd2/transaction.c:1556
     __ext4_handle_dirty_metadata+0xe7/0x4b0 fs/ext4/ext4_jbd2.c:358
     ext4_do_update_inode fs/ext4/inode.c:5220 [inline]
     ext4_mark_iloc_dirty+0x32c/0xd50 fs/ext4/inode.c:5869
     __ext4_mark_inode_dirty+0xe1/0x450 fs/ext4/inode.c:6074
     ext4_dirty_inode+0x98/0xc0 fs/ext4/inode.c:6103
    ....
    
    read to 0xffff888011024104 of 4 bytes by task 10880 on cpu 0:
     jbd2_journal_dirty_metadata+0xf2/0x770 fs/jbd2/transaction.c:1512
     __ext4_handle_dirty_metadata+0xe7/0x4b0 fs/ext4/ext4_jbd2.c:358
     ext4_do_update_inode fs/ext4/inode.c:5220 [inline]
     ext4_mark_iloc_dirty+0x32c/0xd50 fs/ext4/inode.c:5869
     __ext4_mark_inode_dirty+0xe1/0x450 fs/ext4/inode.c:6074
     ext4_dirty_inode+0x98/0xc0 fs/ext4/inode.c:6103
    ....
    
    value changed: 0x00000000 -> 0x00000001
    ==================================================================
    
    This issue is caused by missing data-race annotation for jh->b_modified.
    Therefore, the missing annotation needs to be added.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=de24c3fe3c4091051710
    Fixes: 6e06ae88edae ("jbd2: speedup jbd2_journal_dirty_metadata()")
    Signed-off-by: Jeongjun Park <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
jffs2: check jffs2_prealloc_raw_node_refs() result in few other places [+ + +]
Author: Fedor Pchelkin <[email protected]>
Date:   Tue Mar 25 19:32:13 2025 +0300

    jffs2: check jffs2_prealloc_raw_node_refs() result in few other places
    
    commit 2b6d96503255a3ed676cd70f8368870c6d6a25c6 upstream.
    
    Fuzzing hit another invalid pointer dereference due to the lack of
    checking whether jffs2_prealloc_raw_node_refs() completed successfully.
    Subsequent logic implies that the node refs have been allocated.
    
    Handle that. The code is ready for propagating the error upwards.
    
    KASAN: null-ptr-deref in range [0x0000000000000008-0x000000000000000f]
    CPU: 1 PID: 5835 Comm: syz-executor145 Not tainted 5.10.234-syzkaller #0
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014
    RIP: 0010:jffs2_link_node_ref+0xac/0x690 fs/jffs2/nodelist.c:600
    Call Trace:
     jffs2_mark_erased_block fs/jffs2/erase.c:460 [inline]
     jffs2_erase_pending_blocks+0x688/0x1860 fs/jffs2/erase.c:118
     jffs2_garbage_collect_pass+0x638/0x1a00 fs/jffs2/gc.c:253
     jffs2_reserve_space+0x3f4/0xad0 fs/jffs2/nodemgmt.c:167
     jffs2_write_inode_range+0x246/0xb50 fs/jffs2/write.c:362
     jffs2_write_end+0x712/0x1110 fs/jffs2/file.c:302
     generic_perform_write+0x2c2/0x500 mm/filemap.c:3347
     __generic_file_write_iter+0x252/0x610 mm/filemap.c:3465
     generic_file_write_iter+0xdb/0x230 mm/filemap.c:3497
     call_write_iter include/linux/fs.h:2039 [inline]
     do_iter_readv_writev+0x46d/0x750 fs/read_write.c:740
     do_iter_write+0x18c/0x710 fs/read_write.c:866
     vfs_writev+0x1db/0x6a0 fs/read_write.c:939
     do_pwritev fs/read_write.c:1036 [inline]
     __do_sys_pwritev fs/read_write.c:1083 [inline]
     __se_sys_pwritev fs/read_write.c:1078 [inline]
     __x64_sys_pwritev+0x235/0x310 fs/read_write.c:1078
     do_syscall_64+0x30/0x40 arch/x86/entry/common.c:46
     entry_SYSCALL_64_after_hwframe+0x67/0xd1
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Fixes: 2f785402f39b ("[JFFS2] Reduce visibility of raw_node_ref to upper layers of JFFS2 code.")
    Fixes: f560928baa60 ("[JFFS2] Allocate node_ref for wasted space when skipping to page boundary")
    Cc: [email protected]
    Signed-off-by: Fedor Pchelkin <[email protected]>
    Reviewed-by: Zhihao Cheng <[email protected]>
    Signed-off-by: Richard Weinberger <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

jffs2: check that raw node were preallocated before writing summary [+ + +]
Author: Artem Sadovnikov <[email protected]>
Date:   Fri Mar 7 16:34:09 2025 +0000

    jffs2: check that raw node were preallocated before writing summary
    
    commit ec9e6f22bce433b260ea226de127ec68042849b0 upstream.
    
    Syzkaller detected a kernel bug in jffs2_link_node_ref, caused by fault
    injection in jffs2_prealloc_raw_node_refs. jffs2_sum_write_sumnode doesn't
    check return value of jffs2_prealloc_raw_node_refs and simply lets any
    error propagate into jffs2_sum_write_data, which eventually calls
    jffs2_link_node_ref in order to link the summary to an expectedly allocated
    node.
    
    kernel BUG at fs/jffs2/nodelist.c:592!
    invalid opcode: 0000 [#1] PREEMPT SMP KASAN NOPTI
    CPU: 1 PID: 31277 Comm: syz-executor.7 Not tainted 6.1.128-syzkaller-00139-ge10f83ca10a1 #0
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014
    RIP: 0010:jffs2_link_node_ref+0x570/0x690 fs/jffs2/nodelist.c:592
    Call Trace:
     <TASK>
     jffs2_sum_write_data fs/jffs2/summary.c:841 [inline]
     jffs2_sum_write_sumnode+0xd1a/0x1da0 fs/jffs2/summary.c:874
     jffs2_do_reserve_space+0xa18/0xd60 fs/jffs2/nodemgmt.c:388
     jffs2_reserve_space+0x55f/0xaa0 fs/jffs2/nodemgmt.c:197
     jffs2_write_inode_range+0x246/0xb50 fs/jffs2/write.c:362
     jffs2_write_end+0x726/0x15d0 fs/jffs2/file.c:301
     generic_perform_write+0x314/0x5d0 mm/filemap.c:3856
     __generic_file_write_iter+0x2ae/0x4d0 mm/filemap.c:3973
     generic_file_write_iter+0xe3/0x350 mm/filemap.c:4005
     call_write_iter include/linux/fs.h:2265 [inline]
     do_iter_readv_writev+0x20f/0x3c0 fs/read_write.c:735
     do_iter_write+0x186/0x710 fs/read_write.c:861
     vfs_iter_write+0x70/0xa0 fs/read_write.c:902
     iter_file_splice_write+0x73b/0xc90 fs/splice.c:685
     do_splice_from fs/splice.c:763 [inline]
     direct_splice_actor+0x10c/0x170 fs/splice.c:950
     splice_direct_to_actor+0x337/0xa10 fs/splice.c:896
     do_splice_direct+0x1a9/0x280 fs/splice.c:1002
     do_sendfile+0xb13/0x12c0 fs/read_write.c:1255
     __do_sys_sendfile64 fs/read_write.c:1323 [inline]
     __se_sys_sendfile64 fs/read_write.c:1309 [inline]
     __x64_sys_sendfile64+0x1cf/0x210 fs/read_write.c:1309
     do_syscall_x64 arch/x86/entry/common.c:51 [inline]
     do_syscall_64+0x35/0x80 arch/x86/entry/common.c:81
     entry_SYSCALL_64_after_hwframe+0x6e/0xd8
    
    Fix this issue by checking return value of jffs2_prealloc_raw_node_refs
    before calling jffs2_sum_write_data.
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Cc: [email protected]
    Fixes: 2f785402f39b ("[JFFS2] Reduce visibility of raw_node_ref to upper layers of JFFS2 code.")
    Signed-off-by: Artem Sadovnikov <[email protected]>
    Reviewed-by: Zhihao Cheng <[email protected]>
    Signed-off-by: Richard Weinberger <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ksmbd: fix null pointer dereference in destroy_previous_session [+ + +]
Author: Namjae Jeon <[email protected]>
Date:   Fri Jun 13 10:12:43 2025 +0900

    ksmbd: fix null pointer dereference in destroy_previous_session
    
    commit 7ac5b66acafcc9292fb935d7e03790f2b8b2dc0e upstream.
    
    If client set ->PreviousSessionId on kerberos session setup stage,
    NULL pointer dereference error will happen. Since sess->user is not
    set yet, It can pass the user argument as NULL to destroy_previous_session.
    sess->user will be set in ksmbd_krb5_authenticate(). So this patch move
    calling destroy_previous_session() after ksmbd_krb5_authenticate().
    
    Cc: [email protected]
    Reported-by: [email protected] # ZDI-CAN-27391
    Signed-off-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
KVM: s390: rename PROT_NONE to PROT_TYPE_DUMMY [+ + +]
Author: Lorenzo Stoakes <[email protected]>
Date:   Mon May 19 15:56:57 2025 +0100

    KVM: s390: rename PROT_NONE to PROT_TYPE_DUMMY
    
    commit 15ac613f124e51a6623975efad9657b1f3ee47e7 upstream.
    
    The enum type prot_type declared in arch/s390/kvm/gaccess.c declares an
    unfortunate identifier within it - PROT_NONE.
    
    This clashes with the protection bit define from the uapi for mmap()
    declared in include/uapi/asm-generic/mman-common.h, which is indeed what
    those casually reading this code would assume this to refer to.
    
    This means that any changes which subsequently alter headers in any way
    which results in the uapi header being imported here will cause build
    errors.
    
    Resolve the issue by renaming PROT_NONE to PROT_TYPE_DUMMY.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: b3cefd6bf16e ("KVM: s390: Pass initialized arg even if unused")
    Signed-off-by: Lorenzo Stoakes <[email protected]>
    Suggested-by: Ignacio Moreno Gonzalez <[email protected]>
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Acked-by: Christian Borntraeger <[email protected]>
    Acked-by: Ignacio Moreno Gonzalez <[email protected]>
    Acked-by: Yang Shi <[email protected]>
    Reviewed-by: David Hildenbrand <[email protected]>
    Acked-by: Liam R. Howlett <[email protected]>
    Reviewed-by: Oscar Salvador <[email protected]>
    Reviewed-by: Claudio Imbrenda <[email protected]>
    Cc: <[email protected]>
    Cc: Alexander Gordeev <[email protected]>
    Cc: Heiko Carstens <[email protected]>
    Cc: James Houghton <[email protected]>
    Cc: Janosch Frank <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Paolo Bonzini <[email protected]>
    Cc: Sven Schnelle <[email protected]>
    Cc: Vasily Gorbik <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: SVM: Clear current_vmcb during vCPU free for all *possible* CPUs [+ + +]
Author: Yosry Ahmed <[email protected]>
Date:   Tue Apr 29 08:32:15 2025 -0700

    KVM: SVM: Clear current_vmcb during vCPU free for all *possible* CPUs
    
    commit 1bee4838eb3a2c689f23c7170ea66ae87ea7d93a upstream.
    
    When freeing a vCPU and thus its VMCB, clear current_vmcb for all possible
    CPUs, not just online CPUs, as it's theoretically possible a CPU could go
    offline and come back online in conjunction with KVM reusing the page for
    a new VMCB.
    
    Link: https://lore.kernel.org/all/[email protected]
    Fixes: fd65d3142f73 ("kvm: svm: Ensure an IBPB on all affected CPUs when freeing a vmcb")
    Cc: [email protected]
    Cc: Jim Mattson <[email protected]>
    Signed-off-by: Yosry Ahmed <[email protected]>
    [sean: split to separate patch, write changelog]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: VMX: Flush shadow VMCS on emergency reboot [+ + +]
Author: Chao Gao <[email protected]>
Date:   Mon Mar 24 22:08:48 2025 +0800

    KVM: VMX: Flush shadow VMCS on emergency reboot
    
    commit a0ee1d5faff135e28810f29e0f06328c66f89852 upstream.
    
    Ensure the shadow VMCS cache is evicted during an emergency reboot to
    prevent potential memory corruption if the cache is evicted after reboot.
    
    This issue was identified through code inspection, as __loaded_vmcs_clear()
    flushes both the normal VMCS and the shadow VMCS.
    
    Avoid checking the "launched" state during an emergency reboot, unlike the
    behavior in __loaded_vmcs_clear(). This is important because reboot NMIs
    can interfere with operations like copy_shadow_to_vmcs12(), where shadow
    VMCSes are loaded directly using VMPTRLD. In such cases, if NMIs occur
    right after the VMCS load, the shadow VMCSes will be active but the
    "launched" state may not be set.
    
    Fixes: 16f5b9034b69 ("KVM: nVMX: Copy processor-specific shadow-vmcs to VMCS12")
    Cc: [email protected]
    Signed-off-by: Chao Gao <[email protected]>
    Reviewed-by: Kai Huang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
libbpf: Add identical pointer detection to btf_dedup_is_equiv() [+ + +]
Author: Alan Maguire <[email protected]>
Date:   Tue Apr 29 17:10:42 2025 +0100

    libbpf: Add identical pointer detection to btf_dedup_is_equiv()
    
    [ Upstream commit 8e64c387c942229c551d0f23de4d9993d3a2acb6 ]
    
    Recently as a side-effect of
    
    commit ac053946f5c4 ("compiler.h: introduce TYPEOF_UNQUAL() macro")
    
    issues were observed in deduplication between modules and kernel BTF
    such that a large number of kernel types were not deduplicated so
    were found in module BTF (task_struct, bpf_prog etc).  The root cause
    appeared to be a failure to dedup struct types, specifically those
    with members that were pointers with __percpu annotations.
    
    The issue in dedup is at the point that we are deduplicating structures,
    we have not yet deduplicated reference types like pointers.  If multiple
    copies of a pointer point at the same (deduplicated) integer as in this
    case, we do not see them as identical.  Special handling already exists
    to deal with structures and arrays, so add pointer handling here too.
    
    Reported-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Alan Maguire <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
Linux: Linux 6.6.95 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Fri Jun 27 11:09:04 2025 +0100

    Linux 6.6.95
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Peter Schneider <[email protected]>
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Ron Economos <[email protected]>
    Tested-by: Mark Brown <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Peter Schneider <[email protected]>
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Tested-by: Linux Kernel Functional Testing <[email protected]>
    Tested-by: Harshit Mogalapalli <[email protected]>
    Tested-by: Mark Brown <[email protected]>
    Tested-by: Miguel Ojeda <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
LoongArch: Avoid using $r0/$r1 as "mask" for csrxchg [+ + +]
Author: Huacai Chen <[email protected]>
Date:   Fri May 30 21:45:48 2025 +0800

    LoongArch: Avoid using $r0/$r1 as "mask" for csrxchg
    
    commit 52c22661c79a7b6af7fad9f77200738fc6c51878 upstream.
    
    When building kernel with LLVM there are occasionally such errors:
    
    In file included from ./include/linux/spinlock.h:59:
    In file included from ./include/linux/irqflags.h:17:
    arch/loongarch/include/asm/irqflags.h:38:3: error: must not be $r0 or $r1
       38 |                 "csrxchg %[val], %[mask], %[reg]\n\t"
          |                 ^
    <inline asm>:1:16: note: instantiated into assembly here
        1 |         csrxchg $a1, $ra, 0
          |                       ^
    
    To prevent the compiler from allocating $r0 or $r1 for the "mask" of the
    csrxchg instruction, the 'q' constraint must be used but Clang < 21 does
    not support it. So force to use $t0 in the inline asm, in order to avoid
    using $r0/$r1 while keeping the backward compatibility.
    
    Cc: [email protected]
    Link: https://github.com/llvm/llvm-project/pull/141037
    Reviewed-by: Yanteng Si <[email protected]>
    Suggested-by: WANG Rui <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

LoongArch: Fix panic caused by NULL-PMD in huge_pte_offset() [+ + +]
Author: Tianyang Zhang <[email protected]>
Date:   Fri May 30 21:45:57 2025 +0800

    LoongArch: Fix panic caused by NULL-PMD in huge_pte_offset()
    
    commit ee084fa96123ede8b0563a1b5a9b23adc43cd50d upstream.
    
    ERROR INFO:
    
    CPU 25 Unable to handle kernel paging request at virtual address 0x0
             ...
     Call Trace:
     [<900000000023c30c>] huge_pte_offset+0x3c/0x58
     [<900000000057fd4c>] hugetlb_follow_page_mask+0x74/0x438
     [<900000000051fee8>] __get_user_pages+0xe0/0x4c8
     [<9000000000522414>] faultin_page_range+0x84/0x380
     [<9000000000564e8c>] madvise_vma_behavior+0x534/0xa48
     [<900000000056689c>] do_madvise+0x1bc/0x3e8
     [<9000000000566df4>] sys_madvise+0x24/0x38
     [<90000000015b9e88>] do_syscall+0x78/0x98
     [<9000000000221f18>] handle_syscall+0xb8/0x158
    
    In some cases, pmd may be NULL and rely on NULL as the return value for
    processing, so it is necessary to determine this situation here.
    
    Cc: [email protected]
    Fixes: bd51834d1cf6 ("LoongArch: Return NULL from huge_pte_offset() for invalid PMD")
    Signed-off-by: Tianyang Zhang <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
media: ccs-pll: Check for too high VT PLL multiplier in dual PLL case [+ + +]
Author: Sakari Ailus <[email protected]>
Date:   Thu Feb 20 10:54:44 2025 +0200

    media: ccs-pll: Check for too high VT PLL multiplier in dual PLL case
    
    commit 6868b955acd6e5d7405a2b730c2ffb692ad50d2c upstream.
    
    The check for VT PLL upper limit in dual PLL case was missing. Add it now.
    
    Fixes: 6c7469e46b60 ("media: ccs-pll: Add trivial dual PLL support")
    Cc: [email protected]
    Signed-off-by: Sakari Ailus <[email protected]>
    Reviewed-by: Laurent Pinchart <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: ccs-pll: Correct the upper limit of maximum op_pre_pll_clk_div [+ + +]
Author: Sakari Ailus <[email protected]>
Date:   Wed Feb 19 15:06:11 2025 +0200

    media: ccs-pll: Correct the upper limit of maximum op_pre_pll_clk_div
    
    commit f639494db450770fa30d6845d9c84b9cb009758f upstream.
    
    The PLL calculator does a search of the PLL configuration space for all
    valid OP pre-PLL clock dividers. The maximum did not take into account the
    CCS PLL flag CCS_PLL_FLAG_EXT_IP_PLL_DIVIDER in which case also odd PLL
    dividers (other than 1) are valid. Do that now.
    
    Fixes: 4e1e8d240dff ("media: ccs-pll: Add support for extended input PLL clock divider")
    Cc: [email protected]
    Signed-off-by: Sakari Ailus <[email protected]>
    Reviewed-by: Laurent Pinchart <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: ccs-pll: Start OP pre-PLL multiplier search from correct value [+ + +]
Author: Sakari Ailus <[email protected]>
Date:   Tue Feb 18 23:43:58 2025 +0200

    media: ccs-pll: Start OP pre-PLL multiplier search from correct value
    
    commit 660e613d05e449766784c549faf5927ffaf281f1 upstream.
    
    The ccs_pll_calculate() function does a search over possible PLL
    configurations to find the "best" one. If the sensor does not support odd
    pre-PLL divisors and the minimum value (with constraints) isn't 1, other
    odd values could be errorneously searched (and selected) for the pre-PLL
    divisor. Fix this.
    
    Fixes: 415ddd993978 ("media: ccs-pll: Split limits and PLL configuration into front and back parts")
    Cc: [email protected]
    Signed-off-by: Sakari Ailus <[email protected]>
    Reviewed-by: Laurent Pinchart <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: ccs-pll: Start VT pre-PLL multiplier search from correct value [+ + +]
Author: Sakari Ailus <[email protected]>
Date:   Tue Feb 18 23:47:13 2025 +0200

    media: ccs-pll: Start VT pre-PLL multiplier search from correct value
    
    commit 06d2d478b09e6764fb6161d1621fc10d9f0f2860 upstream.
    
    The ccs_pll_calculate_vt_tree() function does a search over possible VT
    PLL configurations to find the "best" one. If the sensor does not support
    odd pre-PLL divisors and the minimum value (with constraints) isn't 1,
    other odd values could be errorneously searched (and selected) for the
    pre-PLL divisor. Fix this.
    
    Fixes: 415ddd993978 ("media: ccs-pll: Split limits and PLL configuration into front and back parts")
    Cc: [email protected]
    Signed-off-by: Sakari Ailus <[email protected]>
    Reviewed-by: Laurent Pinchart <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: cxusb: no longer judge rbuf when the write fails [+ + +]
Author: Edward Adam Davis <[email protected]>
Date:   Sat Apr 5 19:56:41 2025 +0800

    media: cxusb: no longer judge rbuf when the write fails
    
    commit 73fb3b92da84637e3817580fa205d48065924e15 upstream.
    
    syzbot reported a uninit-value in cxusb_i2c_xfer. [1]
    
    Only when the write operation of usb_bulk_msg() in dvb_usb_generic_rw()
    succeeds and rlen is greater than 0, the read operation of usb_bulk_msg()
    will be executed to read rlen bytes of data from the dvb device into the
    rbuf.
    
    In this case, although rlen is 1, the write operation failed which resulted
    in the dvb read operation not being executed, and ultimately variable i was
    not initialized.
    
    [1]
    BUG: KMSAN: uninit-value in cxusb_gpio_tuner drivers/media/usb/dvb-usb/cxusb.c:124 [inline]
    BUG: KMSAN: uninit-value in cxusb_i2c_xfer+0x153a/0x1a60 drivers/media/usb/dvb-usb/cxusb.c:196
     cxusb_gpio_tuner drivers/media/usb/dvb-usb/cxusb.c:124 [inline]
     cxusb_i2c_xfer+0x153a/0x1a60 drivers/media/usb/dvb-usb/cxusb.c:196
     __i2c_transfer+0xe25/0x3150 drivers/i2c/i2c-core-base.c:-1
     i2c_transfer+0x317/0x4a0 drivers/i2c/i2c-core-base.c:2315
     i2c_transfer_buffer_flags+0x125/0x1e0 drivers/i2c/i2c-core-base.c:2343
     i2c_master_send include/linux/i2c.h:109 [inline]
     i2cdev_write+0x210/0x280 drivers/i2c/i2c-dev.c:183
     do_loop_readv_writev fs/read_write.c:848 [inline]
     vfs_writev+0x963/0x14e0 fs/read_write.c:1057
     do_writev+0x247/0x5c0 fs/read_write.c:1101
     __do_sys_writev fs/read_write.c:1169 [inline]
     __se_sys_writev fs/read_write.c:1166 [inline]
     __x64_sys_writev+0x98/0xe0 fs/read_write.c:1166
     x64_sys_call+0x2229/0x3c80 arch/x86/include/generated/asm/syscalls_64.h:21
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xcd/0x1e0 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=526bd95c0ec629993bf3
    Tested-by: [email protected]
    Fixes: 22c6d93a7310 ("[PATCH] dvb: usb: support Medion hybrid USB2.0 DVB-T/analogue box")
    Cc: [email protected]
    Signed-off-by: Edward Adam Davis <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: davinci: vpif: Fix memory leak in probe error path [+ + +]
Author: Dmitry Nikiforov <[email protected]>
Date:   Wed Apr 16 23:51:19 2025 +0300

    media: davinci: vpif: Fix memory leak in probe error path
    
    commit 024bf40edf1155e7a587f0ec46294049777d9b02 upstream.
    
    If an error occurs during the initialization of `pdev_display`,
    the allocated platform device `pdev_capture` is not released properly,
    leading to a memory leak.
    
    Adjust error path handling to fix the leak.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 43acb728bbc4 ("media: davinci: vpif: fix use-after-free on driver unbind")
    Cc: [email protected]
    Signed-off-by: Dmitry Nikiforov <[email protected]>
    Reviewed-by: Johan Hovold <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: gspca: Add error handling for stv06xx_read_sensor() [+ + +]
Author: Wentao Liang <[email protected]>
Date:   Tue Apr 22 11:07:39 2025 +0800

    media: gspca: Add error handling for stv06xx_read_sensor()
    
    commit 398a1b33f1479af35ca915c5efc9b00d6204f8fa upstream.
    
    In hdcs_init(), the return value of stv06xx_read_sensor() needs to be
    checked. A proper implementation can be found in vv6410_dump(). Add a
    check in loop condition and propergate error code to fix this issue.
    
    Fixes: 4c98834addfe ("V4L/DVB (10048): gspca - stv06xx: New subdriver.")
    Cc: [email protected] # v2.6+
    Signed-off-by: Wentao Liang <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: i2c: ds90ub913: Fix returned fmt from .set_fmt() [+ + +]
Author: Tomi Valkeinen <[email protected]>
Date:   Mon Mar 3 21:32:05 2025 +0530

    media: i2c: ds90ub913: Fix returned fmt from .set_fmt()
    
    commit ef205273132bdc9bcfa1540eef8105475a453300 upstream.
    
    When setting the sink pad's stream format, set_fmt accidentally changes
    the returned format's code to 'outcode', while the purpose is to only
    use the 'outcode' for the propagated source stream format.
    
    Fixes: c158d0d4ff15 ("media: i2c: add DS90UB913 driver")
    Cc: [email protected]
    Signed-off-by: Tomi Valkeinen <[email protected]>
    Signed-off-by: Jai Luthra <[email protected]>
    Signed-off-by: Sakari Ailus <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: imx-jpeg: Cleanup after an allocation error [+ + +]
Author: Ming Qian <[email protected]>
Date:   Mon Apr 21 16:12:54 2025 +0800

    media: imx-jpeg: Cleanup after an allocation error
    
    commit 7500bb9cf164edbb2c8117d57620227b1a4a8369 upstream.
    
    When allocation failures are not cleaned up by the driver, further
    allocation errors will be false-positives, which will cause buffers to
    remain uninitialized and cause NULL pointer dereferences.
    Ensure proper cleanup of failed allocations to prevent these issues.
    
    Fixes: 2db16c6ed72c ("media: imx-jpeg: Add V4L2 driver for i.MX8 JPEG Encoder/Decoder")
    Cc: [email protected]
    Signed-off-by: Ming Qian <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Signed-off-by: Nicolas Dufresne <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: imx-jpeg: Drop the first error frames [+ + +]
Author: Ming Qian <[email protected]>
Date:   Mon Apr 21 15:06:12 2025 +0800

    media: imx-jpeg: Drop the first error frames
    
    commit d52b9b7e2f10d22a49468128540533e8d76910cd upstream.
    
    When an output buffer contains error frame header,
    v4l2_jpeg_parse_header() will return error, then driver will mark this
    buffer and a capture buffer done with error flag in device_run().
    
    But if the error occurs in the first frames, before setup the capture
    queue, there is no chance to schedule device_run(), and there may be no
    capture to mark error.
    
    So we need to drop this buffer with error flag, and make the decoding
    can continue.
    
    Fixes: 2db16c6ed72c ("media: imx-jpeg: Add V4L2 driver for i.MX8 JPEG Encoder/Decoder")
    Cc: [email protected]
    Signed-off-by: Ming Qian <[email protected]>
    Reviewed-by: Nicolas Dufresne <[email protected]>
    Signed-off-by: Nicolas Dufresne <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: imx-jpeg: Move mxc_jpeg_free_slot_data() ahead [+ + +]
Author: Ming Qian <[email protected]>
Date:   Mon Apr 21 16:12:52 2025 +0800

    media: imx-jpeg: Move mxc_jpeg_free_slot_data() ahead
    
    commit 46e9c092f850bd7b4d06de92d3d21877f49a3fcb upstream.
    
    Move function mxc_jpeg_free_slot_data() above mxc_jpeg_alloc_slot_data()
    allowing to call that function during allocation failures.
    No functional changes are made.
    
    Fixes: 2db16c6ed72c ("media: imx-jpeg: Add V4L2 driver for i.MX8 JPEG Encoder/Decoder")
    Cc: [email protected]
    Signed-off-by: Ming Qian <[email protected]>
    Reviewed-by: Nicolas Dufresne <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Signed-off-by: Nicolas Dufresne <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: imx-jpeg: Reset slot data pointers when freed [+ + +]
Author: Ming Qian <[email protected]>
Date:   Mon Apr 21 16:12:53 2025 +0800

    media: imx-jpeg: Reset slot data pointers when freed
    
    commit faa8051b128f4b34277ea8a026d02d83826f8122 upstream.
    
    Ensure that the slot data pointers are reset to NULL and handles are
    set to 0 after freeing the coherent memory. This makes he function
    mxc_jpeg_alloc_slot_data() and mxc_jpeg_free_slot_data() safe to be
    called multiple times.
    
    Fixes: 2db16c6ed72c ("media: imx-jpeg: Add V4L2 driver for i.MX8 JPEG Encoder/Decoder")
    Cc: [email protected]
    Signed-off-by: Ming Qian <[email protected]>
    Reviewed-by: Nicolas Dufresne <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Signed-off-by: Nicolas Dufresne <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: mediatek: vcodec: Correct vsi_core framebuffer size [+ + +]
Author: Fei Shao <[email protected]>
Date:   Fri Mar 14 15:56:17 2025 +0800

    media: mediatek: vcodec: Correct vsi_core framebuffer size
    
    commit f19035b86382f635a0d13d177b601babaf263a12 upstream.
    
    The framebuffer size for decoder instances was being incorrectly set -
    inst->vsi_core->fb.y.size was assigned twice consecutively.
    
    Assign the second picinfo framebuffer size to the C framebuffer instead,
    which appears to be the intended target based on the surrounding code.
    
    Fixes: 2674486aac7d ("media: mediatek: vcodec: support stateless hevc decoder")
    Cc: [email protected]
    Signed-off-by: Fei Shao <[email protected]>
    Reviewed-by: Nicolas Dufresne <[email protected]>
    Signed-off-by: Nicolas Dufresne <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: nxp: imx8-isi: better handle the m2m usage_count [+ + +]
Author: Laurentiu Palcu <[email protected]>
Date:   Wed Oct 23 11:56:43 2024 +0300

    media: nxp: imx8-isi: better handle the m2m usage_count
    
    commit 910efa649076be9c2e1326059830327cf4228cf6 upstream.
    
    Currently, if streamon/streamoff calls are imbalanced we can either end up
    with a negative ISI m2m usage_count (if streamoff() is called more times
    than streamon()) in which case we'll not be able to restart the ISI pipe
    next time, or the usage_count never gets to 0 and the pipe is never
    switched off.
    
    To avoid that, add a 'streaming' flag to mxc_isi_m2m_ctx_queue_data and use it
    in the streamon/streamoff to avoid incrementing/decrementing the usage_count
    uselessly, if called multiple times from the same context.
    
    Fixes: cf21f328fcafac ("media: nxp: Add i.MX8 ISI driver")
    Cc: [email protected]
    Suggested-by: Laurent Pinchart <[email protected]>
    Signed-off-by: Laurentiu Palcu <[email protected]>
    Reviewed-by: Laurent Pinchart <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Laurent Pinchart <[email protected]>
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: omap3isp: use sgtable-based scatterlist wrappers [+ + +]
Author: Marek Szyprowski <[email protected]>
Date:   Wed May 7 18:09:13 2025 +0200

    media: omap3isp: use sgtable-based scatterlist wrappers
    
    commit 3de572fe2189a4a0bd80295e1f478401e739498e upstream.
    
    Use common wrappers operating directly on the struct sg_table objects to
    fix incorrect use of scatterlists sync calls. dma_sync_sg_for_*()
    functions have to be called with the number of elements originally passed
    to dma_map_sg_*() function, not the one returned in sgtable's nents.
    
    Fixes: d33186d0be18 ("[media] omap3isp: ccdc: Use the DMA API for LSC")
    Fixes: 0e24e90f2ca7 ("[media] omap3isp: stat: Use the DMA API")
    CC: [email protected]
    Signed-off-by: Marek Szyprowski <[email protected]>
    Reviewed-by: Laurent Pinchart <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: ov5675: suppress probe deferral errors [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Apr 25 14:52:37 2025 +0200

    media: ov5675: suppress probe deferral errors
    
    commit 8268da3c474a43a79a6540fb06c5d3b730a0d5a5 upstream.
    
    Probe deferral should not be logged as an error:
    
            ov5675 24-0010: failed to get HW configuration: -517
    
    Drop the (mostly) redundant dev_err() from sensor probe() to suppress
    it.
    
    Note that errors during clock and regulator lookup are already correctly
    logged using dev_err_probe().
    
    Fixes: 49d9ad719e89 ("media: ov5675: add device-tree support and support runtime PM")
    Cc: [email protected]
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Sakari Ailus <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: ov8856: suppress probe deferral errors [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Apr 25 14:52:38 2025 +0200

    media: ov8856: suppress probe deferral errors
    
    commit e3d86847fba58cf71f66e81b6a2515e07039ae17 upstream.
    
    Probe deferral should not be logged as an error:
    
            ov8856 24-0010: failed to get HW configuration: -517
    
    Use dev_err_probe() for the clock lookup and drop the (mostly) redundant
    dev_err() from sensor probe() to suppress it.
    
    Note that errors during regulator lookup is already correctly logged
    using dev_err_probe().
    
    Fixes: 0c2c7a1e0d69 ("media: ov8856: Add devicetree support")
    Cc: [email protected]
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Sakari Ailus <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: uvcvideo: Fix deferred probing error [+ + +]
Author: Ricardo Ribalda <[email protected]>
Date:   Thu Mar 13 12:20:39 2025 +0000

    media: uvcvideo: Fix deferred probing error
    
    commit 387e8939307192d5a852a2afeeb83427fa477151 upstream.
    
    uvc_gpio_parse() can return -EPROBE_DEFER when the GPIOs it depends on
    have not yet been probed. This return code should be propagated to the
    caller of uvc_probe() to ensure that probing is retried when the required
    GPIOs become available.
    
    Currently, this error code is incorrectly converted to -ENODEV,
    causing some internal cameras to be ignored.
    
    This commit fixes this issue by propagating the -EPROBE_DEFER error.
    
    Cc: [email protected]
    Fixes: 2886477ff987 ("media: uvcvideo: Implement UVC_EXT_GPIO_UNIT")
    Reviewed-by: Douglas Anderson <[email protected]>
    Signed-off-by: Ricardo Ribalda <[email protected]>
    Message-ID: <[email protected]>
    Reviewed-by: Hans de Goede <[email protected]>
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: uvcvideo: Return the number of processed controls [+ + +]
Author: Ricardo Ribalda <[email protected]>
Date:   Mon Feb 24 10:34:53 2025 +0000

    media: uvcvideo: Return the number of processed controls
    
    commit ba4fafb02ad6a4eb2e00f861893b5db42ba54369 upstream.
    
    If we let know our callers that we have not done anything, they will be
    able to optimize their decisions.
    
    Cc: [email protected]
    Fixes: b4012002f3a3 ("[media] uvcvideo: Add support for control events")
    Reviewed-by: Laurent Pinchart <[email protected]>
    Signed-off-by: Ricardo Ribalda <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: uvcvideo: Send control events for partial succeeds [+ + +]
Author: Ricardo Ribalda <[email protected]>
Date:   Mon Feb 24 10:34:54 2025 +0000

    media: uvcvideo: Send control events for partial succeeds
    
    commit 5c791467aea6277430da5f089b9b6c2a9d8a4af7 upstream.
    
    Today, when we are applying a change to entities A, B. If A succeeds and B
    fails the events for A are not sent.
    
    This change changes the code so the events for A are send right after
    they happen.
    
    Cc: [email protected]
    Fixes: b4012002f3a3 ("[media] uvcvideo: Add support for control events")
    Signed-off-by: Ricardo Ribalda <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: v4l2-dev: fix error handling in __video_register_device() [+ + +]
Author: Ma Ke <[email protected]>
Date:   Wed Mar 19 16:02:48 2025 +0800

    media: v4l2-dev: fix error handling in __video_register_device()
    
    commit 2a934fdb01db6458288fc9386d3d8ceba6dd551a upstream.
    
    Once device_register() failed, we should call put_device() to
    decrement reference count for cleanup. Or it could cause memory leak.
    And move callback function v4l2_device_release() and v4l2_device_get()
    before put_device().
    
    As comment of device_register() says, 'NOTE: _Never_ directly free
    @dev after calling this function, even if it returned an error! Always
    use put_device() to give up the reference initialized in this function
    instead.'
    
    Found by code review.
    
    Cc: [email protected]
    Fixes: dc93a70cc7f9 ("V4L/DVB (9973): v4l2-dev: use the release callback from device instead of cdev")
    Signed-off-by: Ma Ke <[email protected]>
    Reviewed-by: Sakari Ailus <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: venus: Fix probe error handling [+ + +]
Author: Loic Poulain <[email protected]>
Date:   Thu Mar 27 13:53:04 2025 +0100

    media: venus: Fix probe error handling
    
    commit 523cea3a19f0b3b020a4745344c136a636e6ffd7 upstream.
    
    Video device registering has been moved earlier in the probe function,
    but the new order has not been propagated to error handling. This means
    we can end with unreleased resources on error (e.g dangling video device
    on missing firmware probe aborting).
    
    Fixes: 08b1cf474b7f7 ("media: venus: core, venc, vdec: Fix probe dependency error")
    Cc: [email protected]
    Signed-off-by: Loic Poulain <[email protected]>
    Reviewed-by: Dikshita Agarwal <[email protected]>
    Reviewed-by: Bryan O'Donoghue <[email protected]>
    Signed-off-by: Bryan O'Donoghue <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: videobuf2: use sgtable-based scatterlist wrappers [+ + +]
Author: Marek Szyprowski <[email protected]>
Date:   Wed May 7 18:09:11 2025 +0200

    media: videobuf2: use sgtable-based scatterlist wrappers
    
    commit a704a3c503ae1cfd9de8a2e2d16a0c9430e98162 upstream.
    
    Use common wrappers operating directly on the struct sg_table objects to
    fix incorrect use of scatterlists sync calls. dma_sync_sg_for_*()
    functions have to be called with the number of elements originally passed
    to dma_map_sg_*() function, not the one returned in sgt->nents.
    
    Fixes: d4db5eb57cab ("media: videobuf2: add begin/end cpu_access callbacks to dma-sg")
    CC: [email protected]
    Signed-off-by: Marek Szyprowski <[email protected]>
    Reviewed-by: Sergey Senozhatsky <[email protected]>
    Acked-by: Tomasz Figa <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: vidtv: Terminating the subsequent process of initialization failure [+ + +]
Author: Edward Adam Davis <[email protected]>
Date:   Tue Mar 11 15:20:14 2025 +0800

    media: vidtv: Terminating the subsequent process of initialization failure
    
    commit 1d5f88f053480326873115092bc116b7d14916ba upstream.
    
    syzbot reported a slab-use-after-free Read in vidtv_mux_init. [1]
    
    After PSI initialization fails, the si member is accessed again, resulting
    in this uaf.
    
    After si initialization fails, the subsequent process needs to be exited.
    
    [1]
    BUG: KASAN: slab-use-after-free in vidtv_mux_pid_ctx_init drivers/media/test-drivers/vidtv/vidtv_mux.c:78 [inline]
    BUG: KASAN: slab-use-after-free in vidtv_mux_init+0xac2/0xbe0 drivers/media/test-drivers/vidtv/vidtv_mux.c:524
    Read of size 8 at addr ffff88802fa42acc by task syz.2.37/6059
    
    CPU: 0 UID: 0 PID: 6059 Comm: syz.2.37 Not tainted 6.14.0-rc5-syzkaller #0
    Hardware name: Google Compute Engine, BIOS Google 02/12/2025
    Call Trace:
    <TASK>
    __dump_stack lib/dump_stack.c:94 [inline]
    dump_stack_lvl+0x116/0x1f0 lib/dump_stack.c:120
    print_address_description mm/kasan/report.c:408 [inline]
    print_report+0xc3/0x670 mm/kasan/report.c:521
    kasan_report+0xd9/0x110 mm/kasan/report.c:634
    vidtv_mux_pid_ctx_init drivers/media/test-drivers/vidtv/vidtv_mux.c:78
    vidtv_mux_init+0xac2/0xbe0 drivers/media/test-drivers/vidtv/vidtv_mux.c:524
    vidtv_start_streaming drivers/media/test-drivers/vidtv/vidtv_bridge.c:194
    vidtv_start_feed drivers/media/test-drivers/vidtv/vidtv_bridge.c:239
    dmx_section_feed_start_filtering drivers/media/dvb-core/dvb_demux.c:973
    dvb_dmxdev_feed_start drivers/media/dvb-core/dmxdev.c:508 [inline]
    dvb_dmxdev_feed_restart.isra.0 drivers/media/dvb-core/dmxdev.c:537
    dvb_dmxdev_filter_stop+0x2b4/0x3a0 drivers/media/dvb-core/dmxdev.c:564
    dvb_dmxdev_filter_free drivers/media/dvb-core/dmxdev.c:840 [inline]
    dvb_demux_release+0x92/0x550 drivers/media/dvb-core/dmxdev.c:1246
    __fput+0x3ff/0xb70 fs/file_table.c:464
    task_work_run+0x14e/0x250 kernel/task_work.c:227
    exit_task_work include/linux/task_work.h:40 [inline]
    do_exit+0xad8/0x2d70 kernel/exit.c:938
    do_group_exit+0xd3/0x2a0 kernel/exit.c:1087
    __do_sys_exit_group kernel/exit.c:1098 [inline]
    __se_sys_exit_group kernel/exit.c:1096 [inline]
    __x64_sys_exit_group+0x3e/0x50 kernel/exit.c:1096
    x64_sys_call+0x151f/0x1720 arch/x86/include/generated/asm/syscalls_64.h:232
    do_syscall_x64 arch/x86/entry/common.c:52 [inline]
    do_syscall_64+0xcd/0x250 arch/x86/entry/common.c:83
    entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7f871d58d169
    Code: Unable to access opcode bytes at 0x7f871d58d13f.
    RSP: 002b:00007fff4b19a788 EFLAGS: 00000246 ORIG_RAX: 00000000000000e7
    RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f871d58d169
    RDX: 0000000000000064 RSI: 0000000000000000 RDI: 0000000000000000
    RBP: 00007fff4b19a7ec R08: 0000000b4b19a87f R09: 00000000000927c0
    R10: 0000000000000001 R11: 0000000000000246 R12: 0000000000000003
    R13: 00000000000927c0 R14: 000000000001d553 R15: 00007fff4b19a840
     </TASK>
    
    Allocated by task 6059:
     kasan_save_stack+0x33/0x60 mm/kasan/common.c:47
     kasan_save_track+0x14/0x30 mm/kasan/common.c:68
     poison_kmalloc_redzone mm/kasan/common.c:377 [inline]
     __kasan_kmalloc+0xaa/0xb0 mm/kasan/common.c:394
     kmalloc_noprof include/linux/slab.h:901 [inline]
     kzalloc_noprof include/linux/slab.h:1037 [inline]
     vidtv_psi_pat_table_init drivers/media/test-drivers/vidtv/vidtv_psi.c:970
     vidtv_channel_si_init drivers/media/test-drivers/vidtv/vidtv_channel.c:423
     vidtv_mux_init drivers/media/test-drivers/vidtv/vidtv_mux.c:519
     vidtv_start_streaming drivers/media/test-drivers/vidtv/vidtv_bridge.c:194
     vidtv_start_feed drivers/media/test-drivers/vidtv/vidtv_bridge.c:239
     dmx_section_feed_start_filtering drivers/media/dvb-core/dvb_demux.c:973
     dvb_dmxdev_feed_start drivers/media/dvb-core/dmxdev.c:508 [inline]
     dvb_dmxdev_feed_restart.isra.0 drivers/media/dvb-core/dmxdev.c:537
     dvb_dmxdev_filter_stop+0x2b4/0x3a0 drivers/media/dvb-core/dmxdev.c:564
     dvb_dmxdev_filter_free drivers/media/dvb-core/dmxdev.c:840 [inline]
     dvb_demux_release+0x92/0x550 drivers/media/dvb-core/dmxdev.c:1246
     __fput+0x3ff/0xb70 fs/file_table.c:464
     task_work_run+0x14e/0x250 kernel/task_work.c:227
     exit_task_work include/linux/task_work.h:40 [inline]
     do_exit+0xad8/0x2d70 kernel/exit.c:938
     do_group_exit+0xd3/0x2a0 kernel/exit.c:1087
     __do_sys_exit_group kernel/exit.c:1098 [inline]
     __se_sys_exit_group kernel/exit.c:1096 [inline]
     __x64_sys_exit_group+0x3e/0x50 kernel/exit.c:1096
     x64_sys_call arch/x86/include/generated/asm/syscalls_64.h:232
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xcd/0x250 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Freed by task 6059:
     kasan_save_stack+0x33/0x60 mm/kasan/common.c:47
     kasan_save_track+0x14/0x30 mm/kasan/common.c:68
     kasan_save_free_info+0x3b/0x60 mm/kasan/generic.c:576
     poison_slab_object mm/kasan/common.c:247 [inline]
     __kasan_slab_free+0x51/0x70 mm/kasan/common.c:264
     kasan_slab_free include/linux/kasan.h:233 [inline]
     slab_free_hook mm/slub.c:2353 [inline]
     slab_free mm/slub.c:4609 [inline]
     kfree+0x2c4/0x4d0 mm/slub.c:4757
     vidtv_channel_si_init drivers/media/test-drivers/vidtv/vidtv_channel.c:499
     vidtv_mux_init drivers/media/test-drivers/vidtv/vidtv_mux.c:519
     vidtv_start_streaming drivers/media/test-drivers/vidtv/vidtv_bridge.c:194
     vidtv_start_feed drivers/media/test-drivers/vidtv/vidtv_bridge.c:239
     dmx_section_feed_start_filtering drivers/media/dvb-core/dvb_demux.c:973
     dvb_dmxdev_feed_start drivers/media/dvb-core/dmxdev.c:508 [inline]
     dvb_dmxdev_feed_restart.isra.0 drivers/media/dvb-core/dmxdev.c:537
     dvb_dmxdev_filter_stop+0x2b4/0x3a0 drivers/media/dvb-core/dmxdev.c:564
     dvb_dmxdev_filter_free drivers/media/dvb-core/dmxdev.c:840 [inline]
     dvb_demux_release+0x92/0x550 drivers/media/dvb-core/dmxdev.c:1246
     __fput+0x3ff/0xb70 fs/file_table.c:464
     task_work_run+0x14e/0x250 kernel/task_work.c:227
     exit_task_work include/linux/task_work.h:40 [inline]
     do_exit+0xad8/0x2d70 kernel/exit.c:938
     do_group_exit+0xd3/0x2a0 kernel/exit.c:1087
     __do_sys_exit_group kernel/exit.c:1098 [inline]
     __se_sys_exit_group kernel/exit.c:1096 [inline]
     __x64_sys_exit_group+0x3e/0x50 kernel/exit.c:1096
     x64_sys_call arch/x86/include/generated/asm/syscalls_64.h:232
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xcd/0x250 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Fixes: 3be8037960bc ("media: vidtv: add error checks")
    Cc: [email protected]
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=0d33ab192bd50b6c91e6
    Signed-off-by: Edward Adam Davis <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: vivid: Change the siize of the composing [+ + +]
Author: Denis Arefev <[email protected]>
Date:   Tue Apr 15 11:27:21 2025 +0300

    media: vivid: Change the siize of the composing
    
    commit f83ac8d30c43fd902af7c84c480f216157b60ef0 upstream.
    
    syzkaller found a bug:
    
    BUG: KASAN: vmalloc-out-of-bounds in tpg_fill_plane_pattern drivers/media/common/v4l2-tpg/v4l2-tpg-core.c:2608 [inline]
    BUG: KASAN: vmalloc-out-of-bounds in tpg_fill_plane_buffer+0x1a9c/0x5af0 drivers/media/common/v4l2-tpg/v4l2-tpg-core.c:2705
    Write of size 1440 at addr ffffc9000d0ffda0 by task vivid-000-vid-c/5304
    
    CPU: 0 UID: 0 PID: 5304 Comm: vivid-000-vid-c Not tainted 6.14.0-rc2-syzkaller-00039-g09fbf3d50205 #0
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014
    
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:94 [inline]
     dump_stack_lvl+0x241/0x360 lib/dump_stack.c:120
     print_address_description mm/kasan/report.c:378 [inline]
     print_report+0x169/0x550 mm/kasan/report.c:489
     kasan_report+0x143/0x180 mm/kasan/report.c:602
     kasan_check_range+0x282/0x290 mm/kasan/generic.c:189
     __asan_memcpy+0x40/0x70 mm/kasan/shadow.c:106
     tpg_fill_plane_pattern drivers/media/common/v4l2-tpg/v4l2-tpg-core.c:2608 [inline]
     tpg_fill_plane_buffer+0x1a9c/0x5af0 drivers/media/common/v4l2-tpg/v4l2-tpg-core.c:2705
     vivid_fillbuff drivers/media/test-drivers/vivid/vivid-kthread-cap.c:470 [inline]
     vivid_thread_vid_cap_tick+0xf8e/0x60d0 drivers/media/test-drivers/vivid/vivid-kthread-cap.c:629
     vivid_thread_vid_cap+0x8aa/0xf30 drivers/media/test-drivers/vivid/vivid-kthread-cap.c:767
     kthread+0x7a9/0x920 kernel/kthread.c:464
     ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:148
     ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244
     </TASK>
    
    The composition size cannot be larger than the size of fmt_cap_rect.
    So execute v4l2_rect_map_inside() even if has_compose_cap == 0.
    
    Fixes: 94a7ad928346 ("media: vivid: fix compose size exceed boundary")
    Cc: [email protected]
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?id=8ed8e8cc30cbe0d86c9a25bd1d6a5775129b8ea3
    Signed-off-by: Denis Arefev <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mips: Add -std= flag specified in KBUILD_CFLAGS to vdso CFLAGS [+ + +]
Author: Khem Raj <[email protected]>
Date:   Sat Mar 29 08:39:03 2025 -0700

    mips: Add -std= flag specified in KBUILD_CFLAGS to vdso CFLAGS
    
    commit 0f4ae7c6ecb89bfda026d210dcf8216fb67d2333 upstream.
    
    GCC 15 changed the default C standard dialect from gnu17 to gnu23,
    which should not have impacted the kernel because it explicitly requests
    the gnu11 standard in the main Makefile. However, mips/vdso code uses
    its own CFLAGS without a '-std=' value, which break with this dialect
    change because of the kernel's own definitions of bool, false, and true
    conflicting with the C23 reserved keywords.
    
      include/linux/stddef.h:11:9: error: cannot use keyword 'false' as enumeration constant
         11 |         false   = 0,
            |         ^~~~~
      include/linux/stddef.h:11:9: note: 'false' is a keyword with '-std=c23' onwards
      include/linux/types.h:35:33: error: 'bool' cannot be defined via 'typedef'
         35 | typedef _Bool                   bool;
            |                                 ^~~~
      include/linux/types.h:35:33: note: 'bool' is a keyword with '-std=c23' onwards
    
    Add -std as specified in KBUILD_CFLAGS to the decompressor and purgatory
    CFLAGS to eliminate these errors and make the C standard version of these
    areas match the rest of the kernel.
    
    Signed-off-by: Khem Raj <[email protected]>
    Cc: [email protected]
    Signed-off-by: Thomas Bogendoerfer <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/huge_memory: fix dereferencing invalid pmd migration entry [+ + +]
Author: Gavin Guo <[email protected]>
Date:   Mon Apr 21 19:35:36 2025 +0800

    mm/huge_memory: fix dereferencing invalid pmd migration entry
    
    commit be6e843fc51a584672dfd9c4a6a24c8cb81d5fb7 upstream.
    
    When migrating a THP, concurrent access to the PMD migration entry during
    a deferred split scan can lead to an invalid address access, as
    illustrated below.  To prevent this invalid access, it is necessary to
    check the PMD migration entry and return early.  In this context, there is
    no need to use pmd_to_swp_entry and pfn_swap_entry_to_page to verify the
    equality of the target folio.  Since the PMD migration entry is locked, it
    cannot be served as the target.
    
    Mailing list discussion and explanation from Hugh Dickins: "An anon_vma
    lookup points to a location which may contain the folio of interest, but
    might instead contain another folio: and weeding out those other folios is
    precisely what the "folio != pmd_folio((*pmd)" check (and the "risk of
    replacing the wrong folio" comment a few lines above it) is for."
    
    BUG: unable to handle page fault for address: ffffea60001db008
    CPU: 0 UID: 0 PID: 2199114 Comm: tee Not tainted 6.14.0+ #4 NONE
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    RIP: 0010:split_huge_pmd_locked+0x3b5/0x2b60
    Call Trace:
    <TASK>
    try_to_migrate_one+0x28c/0x3730
    rmap_walk_anon+0x4f6/0x770
    unmap_folio+0x196/0x1f0
    split_huge_page_to_list_to_order+0x9f6/0x1560
    deferred_split_scan+0xac5/0x12a0
    shrinker_debugfs_scan_write+0x376/0x470
    full_proxy_write+0x15c/0x220
    vfs_write+0x2fc/0xcb0
    ksys_write+0x146/0x250
    do_syscall_64+0x6a/0x120
    entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    The bug is found by syzkaller on an internal kernel, then confirmed on
    upstream.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lore.kernel.org/all/[email protected]/
    Link: https://lore.kernel.org/all/[email protected]/
    Fixes: 84c3fc4e9c56 ("mm: thp: check pmd migration entry in common path")
    Signed-off-by: Gavin Guo <[email protected]>
    Acked-by: David Hildenbrand <[email protected]>
    Acked-by: Hugh Dickins <[email protected]>
    Acked-by: Zi Yan <[email protected]>
    Reviewed-by: Gavin Shan <[email protected]>
    Cc: Florent Revest <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Miaohe Lin <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    [gavin: backport the migration checking logic to __split_huge_pmd]
    Signed-off-by: Gavin Guo <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/hugetlb: fix huge_pmd_unshare() vs GUP-fast race [+ + +]
Author: Jann Horn <[email protected]>
Date:   Tue May 27 23:23:54 2025 +0200

    mm/hugetlb: fix huge_pmd_unshare() vs GUP-fast race
    
    commit 1013af4f585fccc4d3e5c5824d174de2257f7d6d upstream.
    
    huge_pmd_unshare() drops a reference on a page table that may have
    previously been shared across processes, potentially turning it into a
    normal page table used in another process in which unrelated VMAs can
    afterwards be installed.
    
    If this happens in the middle of a concurrent gup_fast(), gup_fast() could
    end up walking the page tables of another process.  While I don't see any
    way in which that immediately leads to kernel memory corruption, it is
    really weird and unexpected.
    
    Fix it with an explicit broadcast IPI through tlb_remove_table_sync_one(),
    just like we do in khugepaged when removing page tables for a THP
    collapse.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 39dde65c9940 ("[PATCH] shared page table for hugetlb page")
    Signed-off-by: Jann Horn <[email protected]>
    Reviewed-by: Lorenzo Stoakes <[email protected]>
    Cc: Liam Howlett <[email protected]>
    Cc: Muchun Song <[email protected]>
    Cc: Oscar Salvador <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm/hugetlb: unshare page tables during VMA split, not before [+ + +]
Author: Jann Horn <[email protected]>
Date:   Tue May 27 23:23:53 2025 +0200

    mm/hugetlb: unshare page tables during VMA split, not before
    
    commit 081056dc00a27bccb55ccc3c6f230a3d5fd3f7e0 upstream.
    
    Currently, __split_vma() triggers hugetlb page table unsharing through
    vm_ops->may_split().  This happens before the VMA lock and rmap locks are
    taken - which is too early, it allows racing VMA-locked page faults in our
    process and racing rmap walks from other processes to cause page tables to
    be shared again before we actually perform the split.
    
    Fix it by explicitly calling into the hugetlb unshare logic from
    __split_vma() in the same place where THP splitting also happens.  At that
    point, both the VMA and the rmap(s) are write-locked.
    
    An annoying detail is that we can now call into the helper
    hugetlb_unshare_pmds() from two different locking contexts:
    
    1. from hugetlb_split(), holding:
        - mmap lock (exclusively)
        - VMA lock
        - file rmap lock (exclusively)
    2. hugetlb_unshare_all_pmds(), which I think is designed to be able to
       call us with only the mmap lock held (in shared mode), but currently
       only runs while holding mmap lock (exclusively) and VMA lock
    
    Backporting note:
    This commit fixes a racy protection that was introduced in commit
    b30c14cd6102 ("hugetlb: unshare some PMDs when splitting VMAs"); that
    commit claimed to fix an issue introduced in 5.13, but it should actually
    also go all the way back.
    
    [[email protected]: v2]
      Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 39dde65c9940 ("[PATCH] shared page table for hugetlb page")
    Signed-off-by: Jann Horn <[email protected]>
    Cc: Liam Howlett <[email protected]>
    Reviewed-by: Lorenzo Stoakes <[email protected]>
    Reviewed-by: Oscar Salvador <[email protected]>
    Cc: Lorenzo Stoakes <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: <[email protected]>    [b30c14cd6102: hugetlb: unshare some PMDs when splitting VMAs]
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    [stable backport: code got moved from mmap.c to vma.c]
    Signed-off-by: Jann Horn <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm: fix ratelimit_pages update error in dirty_ratio_handler() [+ + +]
Author: Jinliang Zheng <[email protected]>
Date:   Tue Apr 15 17:02:32 2025 +0800

    mm: fix ratelimit_pages update error in dirty_ratio_handler()
    
    commit f83f362d40ccceb647f7d80eb92206733d76a36b upstream.
    
    In dirty_ratio_handler(), vm_dirty_bytes must be set to zero before
    calling writeback_set_ratelimit(), as global_dirty_limits() always
    prioritizes the value of vm_dirty_bytes.
    
    It's domain_dirty_limits() that's relevant here, not node_dirty_ok:
    
      dirty_ratio_handler
        writeback_set_ratelimit
          global_dirty_limits(&dirty_thresh)           <- ratelimit_pages based on dirty_thresh
            domain_dirty_limits
              if (bytes)                               <- bytes = vm_dirty_bytes <--------+
                thresh = f1(bytes)                     <- prioritizes vm_dirty_bytes      |
              else                                                                        |
                thresh = f2(ratio)                                                        |
          ratelimit_pages = f3(dirty_thresh)                                              |
        vm_dirty_bytes = 0                             <- it's late! ---------------------+
    
    This causes ratelimit_pages to still use the value calculated based on
    vm_dirty_bytes, which is wrong now.
    
    
    The impact visible to userspace is difficult to capture directly because
    there is no procfs/sysfs interface exported to user space.  However, it
    will have a real impact on the balance of dirty pages.
    
    For example:
    
    1. On default, we have vm_dirty_ratio=40, vm_dirty_bytes=0
    
    2. echo 8192 > dirty_bytes, then vm_dirty_bytes=8192,
       vm_dirty_ratio=0, and ratelimit_pages is calculated based on
       vm_dirty_bytes now.
    
    3. echo 20 > dirty_ratio, then since vm_dirty_bytes is not reset to
       zero when writeback_set_ratelimit() -> global_dirty_limits() ->
       domain_dirty_limits() is called, reallimit_pages is still calculated
       based on vm_dirty_bytes instead of vm_dirty_ratio.  This does not
       conform to the actual intent of the user.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 9d823e8f6b1b ("writeback: per task dirty rate limit")
    Signed-off-by: Jinliang Zheng <[email protected]>
    Reviewed-by: MengEn Sun <[email protected]>
    Cc: Andrea Righi <[email protected]>
    Cc: Fenggaung Wu <[email protected]>
    Cc: Jinliang Zheng <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mmc: Add quirk to disable DDR50 tuning [+ + +]
Author: Erick Shepherd <[email protected]>
Date:   Mon Mar 31 17:13:37 2025 -0500

    mmc: Add quirk to disable DDR50 tuning
    
    [ Upstream commit 9510b38dc0ba358c93cbf5ee7c28820afb85937b ]
    
    Adds the MMC_QUIRK_NO_UHS_DDR50_TUNING quirk and updates
    mmc_execute_tuning() to return 0 if that quirk is set. This fixes an
    issue on certain Swissbit SD cards that do not support DDR50 tuning
    where tuning requests caused I/O errors to be thrown.
    
    Signed-off-by: Erick Shepherd <[email protected]>
    Acked-by: Adrian Hunter <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mpls: Use rcu_dereference_rtnl() in mpls_route_input_rcu(). [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Mon Jun 16 13:15:12 2025 -0700

    mpls: Use rcu_dereference_rtnl() in mpls_route_input_rcu().
    
    [ Upstream commit 6dbb0d97c5096072c78a6abffe393584e57ae945 ]
    
    As syzbot reported [0], mpls_route_input_rcu() can be called
    from mpls_getroute(), where is under RTNL.
    
    net->mpls.platform_label is only updated under RTNL.
    
    Let's use rcu_dereference_rtnl() in mpls_route_input_rcu() to
    silence the splat.
    
    [0]:
    WARNING: suspicious RCU usage
    6.15.0-rc7-syzkaller-00082-g5cdb2c77c4c3 #0 Not tainted
     ----------------------------
    net/mpls/af_mpls.c:84 suspicious rcu_dereference_check() usage!
    
    other info that might help us debug this:
    
    rcu_scheduler_active = 2, debug_locks = 1
    1 lock held by syz.2.4451/17730:
     #0: ffffffff9012a3e8 (rtnl_mutex){+.+.}-{4:4}, at: rtnl_lock net/core/rtnetlink.c:80 [inline]
     #0: ffffffff9012a3e8 (rtnl_mutex){+.+.}-{4:4}, at: rtnetlink_rcv_msg+0x371/0xe90 net/core/rtnetlink.c:6961
    
    stack backtrace:
    CPU: 1 UID: 0 PID: 17730 Comm: syz.2.4451 Not tainted 6.15.0-rc7-syzkaller-00082-g5cdb2c77c4c3 #0 PREEMPT(full)
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 05/07/2025
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:94 [inline]
     dump_stack_lvl+0x16c/0x1f0 lib/dump_stack.c:120
     lockdep_rcu_suspicious+0x166/0x260 kernel/locking/lockdep.c:6865
     mpls_route_input_rcu+0x1d4/0x200 net/mpls/af_mpls.c:84
     mpls_getroute+0x621/0x1ea0 net/mpls/af_mpls.c:2381
     rtnetlink_rcv_msg+0x3c9/0xe90 net/core/rtnetlink.c:6964
     netlink_rcv_skb+0x16d/0x440 net/netlink/af_netlink.c:2534
     netlink_unicast_kernel net/netlink/af_netlink.c:1313 [inline]
     netlink_unicast+0x53a/0x7f0 net/netlink/af_netlink.c:1339
     netlink_sendmsg+0x8d1/0xdd0 net/netlink/af_netlink.c:1883
     sock_sendmsg_nosec net/socket.c:712 [inline]
     __sock_sendmsg net/socket.c:727 [inline]
     ____sys_sendmsg+0xa98/0xc70 net/socket.c:2566
     ___sys_sendmsg+0x134/0x1d0 net/socket.c:2620
     __sys_sendmmsg+0x200/0x420 net/socket.c:2709
     __do_sys_sendmmsg net/socket.c:2736 [inline]
     __se_sys_sendmmsg net/socket.c:2733 [inline]
     __x64_sys_sendmmsg+0x9c/0x100 net/socket.c:2733
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xcd/0x230 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7f0a2818e969
    Code: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 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 a8 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007f0a28f52038 EFLAGS: 00000246 ORIG_RAX: 0000000000000133
    RAX: ffffffffffffffda RBX: 00007f0a283b5fa0 RCX: 00007f0a2818e969
    RDX: 0000000000000003 RSI: 0000200000000080 RDI: 0000000000000003
    RBP: 00007f0a28210ab1 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    R13: 0000000000000000 R14: 00007f0a283b5fa0 R15: 00007ffce5e9f268
     </TASK>
    
    Fixes: 0189197f4416 ("mpls: Basic routing support")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/
    Signed-off-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]>

 
mtd: nand: sunxi: Add randomizer configuration before randomizer enable [+ + +]
Author: Wentao Liang <[email protected]>
Date:   Mon May 19 23:42:24 2025 +0800

    mtd: nand: sunxi: Add randomizer configuration before randomizer enable
    
    commit 4a5a99bc79cdc4be63933653682b0261a67a0c9f upstream.
    
    In sunxi_nfc_hw_ecc_read_chunk(), the sunxi_nfc_randomizer_enable() is
    called without the config of randomizer. A proper implementation can be
    found in sunxi_nfc_hw_ecc_read_chunks_dma().
    
    Add sunxi_nfc_randomizer_config() before the start of randomization.
    
    Fixes: 4be4e03efc7f ("mtd: nand: sunxi: add randomizer support")
    Cc: [email protected] # v4.6
    Signed-off-by: Wentao Liang <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mtd: rawnand: qcom: Fix read len for onfi param page [+ + +]
Author: Md Sadre Alam <[email protected]>
Date:   Thu Apr 10 15:30:19 2025 +0530

    mtd: rawnand: qcom: Fix read len for onfi param page
    
    commit e6031b11544b44966ba020c867fe438bccd3bdfa upstream.
    
    The minimum size to fetch the data from device to QPIC buffer
    is 512-bytes. If size is less than 512-bytes the data will not be
    protected by ECC as per QPIC standard. So while reading onfi parameter
    page from NAND device set nandc->buf_count = 512.
    
    Cc: [email protected]
    Fixes: 89550beb098e ("mtd: rawnand: qcom: Implement exec_op()")
    Reviewed-by: Manivannan Sadhasivam <[email protected]>
    Tested-by: Lakshmi Sowjanya D <[email protected]>
    Signed-off-by: Md Sadre Alam <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mtd: rawnand: sunxi: Add randomizer configuration in sunxi_nfc_hw_ecc_write_chunk [+ + +]
Author: Wentao Liang <[email protected]>
Date:   Mon May 26 11:43:44 2025 +0800

    mtd: rawnand: sunxi: Add randomizer configuration in sunxi_nfc_hw_ecc_write_chunk
    
    commit 44ed1f5ff73e9e115b6f5411744d5a22ea1c855b upstream.
    
    The function sunxi_nfc_hw_ecc_write_chunk() calls the
    sunxi_nfc_hw_ecc_write_chunk(), but does not call the configuration
    function sunxi_nfc_randomizer_config(). Consequently, the randomization
    might not conduct correctly, which will affect the lifespan of NAND flash.
    A proper implementation can be found in sunxi_nfc_hw_ecc_write_page_dma().
    
    Add the sunxi_nfc_randomizer_config() to config randomizer.
    
    Fixes: 4be4e03efc7f ("mtd: nand: sunxi: add randomizer support")
    Cc: [email protected] # v4.6
    Signed-off-by: Wentao Liang <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net/mlx5: Add error handling in mlx5_query_nic_vport_node_guid() [+ + +]
Author: Wentao Liang <[email protected]>
Date:   Sun May 25 00:34:25 2025 +0800

    net/mlx5: Add error handling in mlx5_query_nic_vport_node_guid()
    
    commit c6bb8a21cdad8c975a3a646b9e5c8df01ad29783 upstream.
    
    The function mlx5_query_nic_vport_node_guid() calls the function
    mlx5_query_nic_vport_context() but does not check its return value.
    A proper implementation can be found in mlx5_nic_vport_query_local_lb().
    
    Add error handling for mlx5_query_nic_vport_context(). If it fails, free
    the out buffer via kvfree() and return error code.
    
    Fixes: 9efa75254593 ("net/mlx5_core: Introduce access functions to query vport RoCE fields")
    Cc: [email protected] # v4.5
    Signed-off-by: Wentao Liang <[email protected]>
    Reviewed-by: Tariq Toukan <[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/mlx5_core: Add error handling inmlx5_query_nic_vport_qkey_viol_cntr() [+ + +]
Author: Wentao Liang <[email protected]>
Date:   Wed May 21 21:36:20 2025 +0800

    net/mlx5_core: Add error handling inmlx5_query_nic_vport_qkey_viol_cntr()
    
    commit f0b50730bdd8f2734e548de541e845c0d40dceb6 upstream.
    
    The function mlx5_query_nic_vport_qkey_viol_cntr() calls the function
    mlx5_query_nic_vport_context() but does not check its return value. This
    could lead to undefined behavior if the query fails. A proper
    implementation can be found in mlx5_nic_vport_query_local_lb().
    
    Add error handling for mlx5_query_nic_vport_context(). If it fails, free
    the out buffer via kvfree() and return error code.
    
    Fixes: 9efa75254593 ("net/mlx5_core: Introduce access functions to query vport RoCE fields")
    Cc: [email protected] # v4.5
    Signed-off-by: Wentao Liang <[email protected]>
    Reviewed-by: Tariq Toukan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net/sched: fix use-after-free in taprio_dev_notifier [+ + +]
Author: Hyunwoo Kim <[email protected]>
Date:   Fri Jun 13 20:54:57 2025 -0400

    net/sched: fix use-after-free in taprio_dev_notifier
    
    commit b160766e26d4e2e2d6fe2294e0b02f92baefcec5 upstream.
    
    Since taprio’s taprio_dev_notifier() isn’t protected by an
    RCU read-side critical section, a race with advance_sched()
    can lead to a use-after-free.
    
    Adding rcu_read_lock() inside taprio_dev_notifier() prevents this.
    
    Fixes: fed87cc6718a ("net/sched: taprio: automatically calculate queueMaxSDU based on TC gate durations")
    Cc: [email protected]
    Signed-off-by: Hyunwoo Kim <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/aEzIYYxt0is9upYG@v4bel-B760M-AORUS-ELITE-AX
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net: atlantic: generate software timestamp just before the doorbell [+ + +]
Author: Jason Xing <[email protected]>
Date:   Sat May 10 21:48:10 2025 +0800

    net: atlantic: generate software timestamp just before the doorbell
    
    [ Upstream commit 285ad7477559b6b5ceed10ba7ecfed9d17c0e7c6 ]
    
    Make sure the call of skb_tx_timestamp is as close as possible to the
    doorbell.
    
    Signed-off-by: Jason Xing <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: atm: add lec_mutex [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Wed Jun 18 14:08:43 2025 +0000

    net: atm: add lec_mutex
    
    [ Upstream commit d13a3824bfd2b4774b671a75cf766a16637a0e67 ]
    
    syzbot found its way in net/atm/lec.c, and found an error path
    in lecd_attach() could leave a dangling pointer in dev_lec[].
    
    Add a mutex to protect dev_lecp[] uses from lecd_attach(),
    lec_vcc_attach() and lec_mcast_attach().
    
    Following patch will use this mutex for /proc/net/atm/lec.
    
    BUG: KASAN: slab-use-after-free in lecd_attach net/atm/lec.c:751 [inline]
    BUG: KASAN: slab-use-after-free in lane_ioctl+0x2224/0x23e0 net/atm/lec.c:1008
    Read of size 8 at addr ffff88807c7b8e68 by task syz.1.17/6142
    
    CPU: 1 UID: 0 PID: 6142 Comm: syz.1.17 Not tainted 6.16.0-rc1-syzkaller-00239-g08215f5486ec #0 PREEMPT(full)
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 05/07/2025
    Call Trace:
     <TASK>
      __dump_stack lib/dump_stack.c:94 [inline]
      dump_stack_lvl+0x116/0x1f0 lib/dump_stack.c:120
      print_address_description mm/kasan/report.c:408 [inline]
      print_report+0xcd/0x680 mm/kasan/report.c:521
      kasan_report+0xe0/0x110 mm/kasan/report.c:634
      lecd_attach net/atm/lec.c:751 [inline]
      lane_ioctl+0x2224/0x23e0 net/atm/lec.c:1008
      do_vcc_ioctl+0x12c/0x930 net/atm/ioctl.c:159
      sock_do_ioctl+0x118/0x280 net/socket.c:1190
      sock_ioctl+0x227/0x6b0 net/socket.c:1311
      vfs_ioctl fs/ioctl.c:51 [inline]
      __do_sys_ioctl fs/ioctl.c:907 [inline]
      __se_sys_ioctl fs/ioctl.c:893 [inline]
      __x64_sys_ioctl+0x18e/0x210 fs/ioctl.c:893
      do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
      do_syscall_64+0xcd/0x4c0 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
     </TASK>
    
    Allocated by task 6132:
      kasan_save_stack+0x33/0x60 mm/kasan/common.c:47
      kasan_save_track+0x14/0x30 mm/kasan/common.c:68
      poison_kmalloc_redzone mm/kasan/common.c:377 [inline]
      __kasan_kmalloc+0xaa/0xb0 mm/kasan/common.c:394
      kasan_kmalloc include/linux/kasan.h:260 [inline]
      __do_kmalloc_node mm/slub.c:4328 [inline]
      __kvmalloc_node_noprof+0x27b/0x620 mm/slub.c:5015
      alloc_netdev_mqs+0xd2/0x1570 net/core/dev.c:11711
      lecd_attach net/atm/lec.c:737 [inline]
      lane_ioctl+0x17db/0x23e0 net/atm/lec.c:1008
      do_vcc_ioctl+0x12c/0x930 net/atm/ioctl.c:159
      sock_do_ioctl+0x118/0x280 net/socket.c:1190
      sock_ioctl+0x227/0x6b0 net/socket.c:1311
      vfs_ioctl fs/ioctl.c:51 [inline]
      __do_sys_ioctl fs/ioctl.c:907 [inline]
      __se_sys_ioctl fs/ioctl.c:893 [inline]
      __x64_sys_ioctl+0x18e/0x210 fs/ioctl.c:893
      do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
      do_syscall_64+0xcd/0x4c0 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Freed by task 6132:
      kasan_save_stack+0x33/0x60 mm/kasan/common.c:47
      kasan_save_track+0x14/0x30 mm/kasan/common.c:68
      kasan_save_free_info+0x3b/0x60 mm/kasan/generic.c:576
      poison_slab_object mm/kasan/common.c:247 [inline]
      __kasan_slab_free+0x51/0x70 mm/kasan/common.c:264
      kasan_slab_free include/linux/kasan.h:233 [inline]
      slab_free_hook mm/slub.c:2381 [inline]
      slab_free mm/slub.c:4643 [inline]
      kfree+0x2b4/0x4d0 mm/slub.c:4842
      free_netdev+0x6c5/0x910 net/core/dev.c:11892
      lecd_attach net/atm/lec.c:744 [inline]
      lane_ioctl+0x1ce8/0x23e0 net/atm/lec.c:1008
      do_vcc_ioctl+0x12c/0x930 net/atm/ioctl.c:159
      sock_do_ioctl+0x118/0x280 net/socket.c:1190
      sock_ioctl+0x227/0x6b0 net/socket.c:1311
      vfs_ioctl fs/ioctl.c:51 [inline]
      __do_sys_ioctl fs/ioctl.c:907 [inline]
      __se_sys_ioctl fs/ioctl.c:893 [inline]
      __x64_sys_ioctl+0x18e/0x210 fs/ioctl.c:893
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: atm: fix /proc/net/atm/lec handling [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Wed Jun 18 14:08:44 2025 +0000

    net: atm: fix /proc/net/atm/lec handling
    
    [ Upstream commit d03b79f459c7935cff830d98373474f440bd03ae ]
    
    /proc/net/atm/lec must ensure safety against dev_lec[] changes.
    
    It appears it had dev_put() calls without prior dev_hold(),
    leading to imbalance and UAF.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Eric Dumazet <[email protected]>
    Acked-by: Francois Romieu <[email protected]> # Minor atm contributor
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: bridge: mcast: re-implement br_multicast_{enable, disable}_port functions [+ + +]
Author: Yong Wang <[email protected]>
Date:   Thu Apr 17 15:43:12 2025 +0200

    net: bridge: mcast: re-implement br_multicast_{enable, disable}_port functions
    
    [ Upstream commit 4b30ae9adb047dd0a7982975ec3933c529537026 ]
    
    When a bridge port STP state is changed from BLOCKING/DISABLED to
    FORWARDING, the port's igmp query timer will NOT re-arm itself if the
    bridge has been configured as per-VLAN multicast snooping.
    
    Solve this by choosing the correct multicast context(s) to enable/disable
    port multicast based on whether per-VLAN multicast snooping is enabled or
    not, i.e. using per-{port, VLAN} context in case of per-VLAN multicast
    snooping by re-implementing br_multicast_enable_port() and
    br_multicast_disable_port() functions.
    
    Before the patch, the IGMP query does not happen in the last step of the
    following test sequence, i.e. no growth for tx counter:
     # ip link add name br1 up type bridge vlan_filtering 1 mcast_snooping 1 mcast_vlan_snooping 1 mcast_querier 1 mcast_stats_enabled 1
     # bridge vlan global set vid 1 dev br1 mcast_snooping 1 mcast_querier 1 mcast_query_interval 100 mcast_startup_query_count 0
     # ip link add name swp1 up master br1 type dummy
     # bridge link set dev swp1 state 0
     # ip -j -p stats show dev swp1 group xstats_slave subgroup bridge suite mcast | jq '.[]["multicast"]["igmp_queries"]["tx_v2"]'
    1
     # sleep 1
     # ip -j -p stats show dev swp1 group xstats_slave subgroup bridge suite mcast | jq '.[]["multicast"]["igmp_queries"]["tx_v2"]'
    1
     # bridge link set dev swp1 state 3
     # sleep 2
     # ip -j -p stats show dev swp1 group xstats_slave subgroup bridge suite mcast | jq '.[]["multicast"]["igmp_queries"]["tx_v2"]'
    1
    
    After the patch, the IGMP query happens in the last step of the test:
     # ip link add name br1 up type bridge vlan_filtering 1 mcast_snooping 1 mcast_vlan_snooping 1 mcast_querier 1 mcast_stats_enabled 1
     # bridge vlan global set vid 1 dev br1 mcast_snooping 1 mcast_querier 1 mcast_query_interval 100 mcast_startup_query_count 0
     # ip link add name swp1 up master br1 type dummy
     # bridge link set dev swp1 state 0
     # ip -j -p stats show dev swp1 group xstats_slave subgroup bridge suite mcast | jq '.[]["multicast"]["igmp_queries"]["tx_v2"]'
    1
     # sleep 1
     # ip -j -p stats show dev swp1 group xstats_slave subgroup bridge suite mcast | jq '.[]["multicast"]["igmp_queries"]["tx_v2"]'
    1
     # bridge link set dev swp1 state 3
     # sleep 2
     # ip -j -p stats show dev swp1 group xstats_slave subgroup bridge suite mcast | jq '.[]["multicast"]["igmp_queries"]["tx_v2"]'
    3
    
    Signed-off-by: Yong Wang <[email protected]>
    Reviewed-by: Andy Roulin <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Signed-off-by: Petr Machata <[email protected]>
    Acked-by: Nikolay Aleksandrov <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: bridge: mcast: update multicast contex when vlan state is changed [+ + +]
Author: Yong Wang <[email protected]>
Date:   Thu Apr 17 15:43:13 2025 +0200

    net: bridge: mcast: update multicast contex when vlan state is changed
    
    [ Upstream commit 6c131043eaf1be2a6cc2d228f92ceb626fbcc0f3 ]
    
    When the vlan STP state is changed, which could be manipulated by
    "bridge vlan" commands, similar to port STP state, this also impacts
    multicast behaviors such as igmp query. In the scenario of per-VLAN
    snooping, there's a need to update the corresponding multicast context
    to re-arm the port query timer when vlan state becomes "forwarding" etc.
    
    Update br_vlan_set_state() function to enable vlan multicast context
    in such scenario.
    
    Before the patch, the IGMP query does not happen in the last step of the
    following test sequence, i.e. no growth for tx counter:
     # ip link add name br1 up type bridge vlan_filtering 1 mcast_snooping 1 mcast_vlan_snooping 1 mcast_querier 1 mcast_stats_enabled 1
     # bridge vlan global set vid 1 dev br1 mcast_snooping 1 mcast_querier 1 mcast_query_interval 100 mcast_startup_query_count 0
     # ip link add name swp1 up master br1 type dummy
     # sleep 1
     # bridge vlan set vid 1 dev swp1 state 4
     # ip -j -p stats show dev swp1 group xstats_slave subgroup bridge suite mcast | jq '.[]["multicast"]["igmp_queries"]["tx_v2"]'
    1
     # sleep 1
     # ip -j -p stats show dev swp1 group xstats_slave subgroup bridge suite mcast | jq '.[]["multicast"]["igmp_queries"]["tx_v2"]'
    1
     # bridge vlan set vid 1 dev swp1 state 3
     # sleep 2
     # ip -j -p stats show dev swp1 group xstats_slave subgroup bridge suite mcast | jq '.[]["multicast"]["igmp_queries"]["tx_v2"]'
    1
    
    After the patch, the IGMP query happens in the last step of the test:
     # ip link add name br1 up type bridge vlan_filtering 1 mcast_snooping 1 mcast_vlan_snooping 1 mcast_querier 1 mcast_stats_enabled 1
     # bridge vlan global set vid 1 dev br1 mcast_snooping 1 mcast_querier 1 mcast_query_interval 100 mcast_startup_query_count 0
     # ip link add name swp1 up master br1 type dummy
     # sleep 1
     # bridge vlan set vid 1 dev swp1 state 4
     # ip -j -p stats show dev swp1 group xstats_slave subgroup bridge suite mcast | jq '.[]["multicast"]["igmp_queries"]["tx_v2"]'
    1
     # sleep 1
     # ip -j -p stats show dev swp1 group xstats_slave subgroup bridge suite mcast | jq '.[]["multicast"]["igmp_queries"]["tx_v2"]'
    1
     # bridge vlan set vid 1 dev swp1 state 3
     # sleep 2
     # ip -j -p stats show dev swp1 group xstats_slave subgroup bridge suite mcast | jq '.[]["multicast"]["igmp_queries"]["tx_v2"]'
    3
    
    Signed-off-by: Yong Wang <[email protected]>
    Reviewed-by: Andy Roulin <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Signed-off-by: Petr Machata <[email protected]>
    Acked-by: Nikolay Aleksandrov <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: ch9200: fix uninitialised access during mii_nway_restart [+ + +]
Author: Qasim Ijaz <[email protected]>
Date:   Mon May 26 19:36:07 2025 +0100

    net: ch9200: fix uninitialised access during mii_nway_restart
    
    commit 9ad0452c0277b816a435433cca601304cfac7c21 upstream.
    
    In mii_nway_restart() the code attempts to call
    mii->mdio_read which is ch9200_mdio_read(). ch9200_mdio_read()
    utilises a local buffer called "buff", which is initialised
    with control_read(). However "buff" is conditionally
    initialised inside control_read():
    
            if (err == size) {
                    memcpy(data, buf, size);
            }
    
    If the condition of "err == size" is not met, then
    "buff" remains uninitialised. Once this happens the
    uninitialised "buff" is accessed and returned during
    ch9200_mdio_read():
    
            return (buff[0] | buff[1] << 8);
    
    The problem stems from the fact that ch9200_mdio_read()
    ignores the return value of control_read(), leading to
    uinit-access of "buff".
    
    To fix this we should check the return value of
    control_read() and return early on error.
    
    Reported-by: syzbot <[email protected]>
    Closes: https://syzkaller.appspot.com/bug?extid=3361c2d6f78a3e0892f9
    Tested-by: syzbot <[email protected]>
    Fixes: 4a476bd6d1d9 ("usbnet: New driver for QinHeng CH9200 devices")
    Cc: [email protected]
    Signed-off-by: Qasim Ijaz <[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: clear the dst when changing skb protocol [+ + +]
Author: Jakub Kicinski <[email protected]>
Date:   Mon Jun 9 17:12:44 2025 -0700

    net: clear the dst when changing skb protocol
    
    commit ba9db6f907ac02215e30128770f85fbd7db2fcf9 upstream.
    
    A not-so-careful NAT46 BPF program can crash the kernel
    if it indiscriminately flips ingress packets from v4 to v6:
    
      BUG: kernel NULL pointer dereference, address: 0000000000000000
        ip6_rcv_core (net/ipv6/ip6_input.c:190:20)
        ipv6_rcv (net/ipv6/ip6_input.c:306:8)
        process_backlog (net/core/dev.c:6186:4)
        napi_poll (net/core/dev.c:6906:9)
        net_rx_action (net/core/dev.c:7028:13)
        do_softirq (kernel/softirq.c:462:3)
        netif_rx (net/core/dev.c:5326:3)
        dev_loopback_xmit (net/core/dev.c:4015:2)
        ip_mc_finish_output (net/ipv4/ip_output.c:363:8)
        NF_HOOK (./include/linux/netfilter.h:314:9)
        ip_mc_output (net/ipv4/ip_output.c:400:5)
        dst_output (./include/net/dst.h:459:9)
        ip_local_out (net/ipv4/ip_output.c:130:9)
        ip_send_skb (net/ipv4/ip_output.c:1496:8)
        udp_send_skb (net/ipv4/udp.c:1040:8)
        udp_sendmsg (net/ipv4/udp.c:1328:10)
    
    The output interface has a 4->6 program attached at ingress.
    We try to loop the multicast skb back to the sending socket.
    Ingress BPF runs as part of netif_rx(), pushes a valid v6 hdr
    and changes skb->protocol to v6. We enter ip6_rcv_core which
    tries to use skb_dst(). But the dst is still an IPv4 one left
    after IPv4 mcast output.
    
    Clear the dst in all BPF helpers which change the protocol.
    Try to preserve metadata dsts, those may carry non-routing
    metadata.
    
    Cc: [email protected]
    Reviewed-by: Maciej Żenczykowski <[email protected]>
    Acked-by: Daniel Borkmann <[email protected]>
    Fixes: d219df60a70e ("bpf: Add ipip6 and ip6ip decap support for bpf_skb_adjust_room()")
    Fixes: 1b00e0dfe7d0 ("bpf: update skb->protocol in bpf_skb_net_grow")
    Fixes: 6578171a7ff0 ("bpf: add bpf_skb_change_proto helper")
    Reviewed-by: Willem de Bruijn <[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: dlink: add synchronization for stats update [+ + +]
Author: Moon Yeounsu <[email protected]>
Date:   Thu May 15 16:53:31 2025 +0900

    net: dlink: add synchronization for stats update
    
    [ Upstream commit 12889ce926e9a9baf6b83d809ba316af539b89e2 ]
    
    This patch synchronizes code that accesses from both user-space
    and IRQ contexts. The `get_stats()` function can be called from both
    context.
    
    `dev->stats.tx_errors` and `dev->stats.collisions` are also updated
    in the `tx_errors()` function. Therefore, these fields must also be
    protected by synchronized.
    
    There is no code that accessses `dev->stats.tx_errors` between the
    previous and updated lines, so the updating point can be moved.
    
    Signed-off-by: Moon Yeounsu <[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: Use TOE/TSO on all TCP [+ + +]
Author: Linus Walleij <[email protected]>
Date:   Tue Apr 8 11:26:58 2025 +0200

    net: ethernet: cortina: Use TOE/TSO on all TCP
    
    [ Upstream commit 6a07e3af4973402fa199a80036c10060b922c92c ]
    
    It is desireable to push the hardware accelerator to also
    process non-segmented TCP frames: we pass the skb->len
    to the "TOE/TSO" offloader and it will handle them.
    
    Without this quirk the driver becomes unstable and lock
    up and and crash.
    
    I do not know exactly why, but it is probably due to the
    TOE (TCP offload engine) feature that is coupled with the
    segmentation feature - it is not possible to turn one
    part off and not the other, either both TOE and TSO are
    active, or neither of them.
    
    Not having the TOE part active seems detrimental, as if
    that hardware feature is not really supposed to be turned
    off.
    
    The datasheet says:
    
      "Based on packet parsing and TCP connection/NAT table
       lookup results, the NetEngine puts the packets
       belonging to the same TCP connection to the same queue
       for the software to process. The NetEngine puts
       incoming packets to the buffer or series of buffers
       for a jumbo packet. With this hardware acceleration,
       IP/TCP header parsing, checksum validation and
       connection lookup are offloaded from the software
       processing."
    
    After numerous tests with the hardware locking up after
    something between minutes and hours depending on load
    using iperf3 I have concluded this is necessary to stabilize
    the hardware.
    
    Signed-off-by: Linus Walleij <[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: ti: am65-cpsw: handle -EPROBE_DEFER [+ + +]
Author: Michael Walle <[email protected]>
Date:   Mon Apr 14 10:43:36 2025 +0200

    net: ethernet: ti: am65-cpsw: handle -EPROBE_DEFER
    
    [ Upstream commit 09737cb80b8686ffca4ed1805fee745d5c85604d ]
    
    of_get_mac_address() might fetch the MAC address from NVMEM and that
    driver might not have been loaded. In that case, -EPROBE_DEFER is
    returned. Right now, this will trigger an immediate fallback to
    am65_cpsw_am654_get_efuse_macid() possibly resulting in a random MAC
    address although the MAC address is stored in the referenced NVMEM.
    
    Fix it by handling the -EPROBE_DEFER return code correctly. This also
    means that the creation of the MDIO device has to be moved to a later
    stage as -EPROBE_DEFER must not be returned after child devices are
    created.
    
    Signed-off-by: Michael Walle <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: Fix checksum update for ILA adj-transport [+ + +]
Author: Paul Chaignon <[email protected]>
Date:   Thu May 29 12:28:05 2025 +0200

    net: Fix checksum update for ILA adj-transport
    
    commit 6043b794c7668c19dabc4a93c75b924a19474d59 upstream.
    
    During ILA address translations, the L4 checksums can be handled in
    different ways. One of them, adj-transport, consist in parsing the
    transport layer and updating any found checksum. This logic relies on
    inet_proto_csum_replace_by_diff and produces an incorrect skb->csum when
    in state CHECKSUM_COMPLETE.
    
    This bug can be reproduced with a simple ILA to SIR mapping, assuming
    packets are received with CHECKSUM_COMPLETE:
    
      $ ip a show dev eth0
      14: eth0@if15: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
          link/ether 62:ae:35:9e:0f:8d brd ff:ff:ff:ff:ff:ff link-netnsid 0
          inet6 3333:0:0:1::c078/64 scope global
             valid_lft forever preferred_lft forever
          inet6 fd00:10:244:1::c078/128 scope global nodad
             valid_lft forever preferred_lft forever
          inet6 fe80::60ae:35ff:fe9e:f8d/64 scope link proto kernel_ll
             valid_lft forever preferred_lft forever
      $ ip ila add loc_match fd00:10:244:1 loc 3333:0:0:1 \
          csum-mode adj-transport ident-type luid dev eth0
    
    Then I hit [fd00:10:244:1::c078]:8000 with a server listening only on
    [3333:0:0:1::c078]:8000. With the bug, the SYN packet is dropped with
    SKB_DROP_REASON_TCP_CSUM after inet_proto_csum_replace_by_diff changed
    skb->csum. The translation and drop are visible on pwru [1] traces:
    
      IFACE   TUPLE                                                        FUNC
      eth0:9  [fd00:10:244:3::3d8]:51420->[fd00:10:244:1::c078]:8000(tcp)  ipv6_rcv
      eth0:9  [fd00:10:244:3::3d8]:51420->[fd00:10:244:1::c078]:8000(tcp)  ip6_rcv_core
      eth0:9  [fd00:10:244:3::3d8]:51420->[fd00:10:244:1::c078]:8000(tcp)  nf_hook_slow
      eth0:9  [fd00:10:244:3::3d8]:51420->[fd00:10:244:1::c078]:8000(tcp)  inet_proto_csum_replace_by_diff
      eth0:9  [fd00:10:244:3::3d8]:51420->[3333:0:0:1::c078]:8000(tcp)     tcp_v6_early_demux
      eth0:9  [fd00:10:244:3::3d8]:51420->[3333:0:0:1::c078]:8000(tcp)     ip6_route_input
      eth0:9  [fd00:10:244:3::3d8]:51420->[3333:0:0:1::c078]:8000(tcp)     ip6_input
      eth0:9  [fd00:10:244:3::3d8]:51420->[3333:0:0:1::c078]:8000(tcp)     ip6_input_finish
      eth0:9  [fd00:10:244:3::3d8]:51420->[3333:0:0:1::c078]:8000(tcp)     ip6_protocol_deliver_rcu
      eth0:9  [fd00:10:244:3::3d8]:51420->[3333:0:0:1::c078]:8000(tcp)     raw6_local_deliver
      eth0:9  [fd00:10:244:3::3d8]:51420->[3333:0:0:1::c078]:8000(tcp)     ipv6_raw_deliver
      eth0:9  [fd00:10:244:3::3d8]:51420->[3333:0:0:1::c078]:8000(tcp)     tcp_v6_rcv
      eth0:9  [fd00:10:244:3::3d8]:51420->[3333:0:0:1::c078]:8000(tcp)     __skb_checksum_complete
      eth0:9  [fd00:10:244:3::3d8]:51420->[3333:0:0:1::c078]:8000(tcp)     kfree_skb_reason(SKB_DROP_REASON_TCP_CSUM)
      eth0:9  [fd00:10:244:3::3d8]:51420->[3333:0:0:1::c078]:8000(tcp)     skb_release_head_state
      eth0:9  [fd00:10:244:3::3d8]:51420->[3333:0:0:1::c078]:8000(tcp)     skb_release_data
      eth0:9  [fd00:10:244:3::3d8]:51420->[3333:0:0:1::c078]:8000(tcp)     skb_free_head
      eth0:9  [fd00:10:244:3::3d8]:51420->[3333:0:0:1::c078]:8000(tcp)     kfree_skbmem
    
    This is happening because inet_proto_csum_replace_by_diff is updating
    skb->csum when it shouldn't. The L4 checksum is updated such that it
    "cancels" the IPv6 address change in terms of checksum computation, so
    the impact on skb->csum is null.
    
    Note this would be different for an IPv4 packet since three fields
    would be updated: the IPv4 address, the IP checksum, and the L4
    checksum. Two would cancel each other and skb->csum would still need
    to be updated to take the L4 checksum change into account.
    
    This patch fixes it by passing an ipv6 flag to
    inet_proto_csum_replace_by_diff, to skip the skb->csum update if we're
    in the IPv6 case. Note the behavior of the only other user of
    inet_proto_csum_replace_by_diff, the BPF subsystem, is left as is in
    this patch and fixed in the subsequent patch.
    
    With the fix, using the reproduction from above, I can confirm
    skb->csum is not touched by inet_proto_csum_replace_by_diff and the TCP
    SYN proceeds to the application after the ILA translation.
    
    Link: https://github.com/cilium/pwru [1]
    Fixes: 65d7ab8de582 ("net: Identifier Locator Addressing module")
    Signed-off-by: Paul Chaignon <[email protected]>
    Acked-by: Daniel Borkmann <[email protected]>
    Link: https://patch.msgid.link/b5539869e3550d46068504feb02d37653d939c0b.1748509484.git.paul.chaignon@gmail.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Paul Chaignon <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: ftgmac100: select FIXED_PHY [+ + +]
Author: Heiner Kallweit <[email protected]>
Date:   Tue Jun 17 20:20:17 2025 +0200

    net: ftgmac100: select FIXED_PHY
    
    commit ae409629e022fbebbc6d31a1bfeccdbbeee20fd6 upstream.
    
    Depending on e.g. DT configuration this driver uses a fixed link.
    So we shouldn't rely on the user to enable FIXED_PHY, select it in
    Kconfig instead. We may end up with a non-functional driver otherwise.
    
    Fixes: 38561ded50d0 ("net: ftgmac100: support fixed link")
    Cc: [email protected]
    Signed-off-by: Heiner Kallweit <[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: ice: Perform accurate aRFS flow match [+ + +]
Author: Krishna Kumar <[email protected]>
Date:   Tue May 20 22:36:56 2025 +0530

    net: ice: Perform accurate aRFS flow match
    
    [ Upstream commit 5d3bc9e5e725aa36cca9b794e340057feb6880b4 ]
    
    This patch fixes an issue seen in a large-scale deployment under heavy
    incoming pkts where the aRFS flow wrongly matches a flow and reprograms the
    NIC with wrong settings. That mis-steering causes RX-path latency spikes
    and noisy neighbor effects when many connections collide on the same
    hash (some of our production servers have 20-30K connections).
    
    set_rps_cpu() calls ndo_rx_flow_steer() with flow_id that is calculated by
    hashing the skb sized by the per rx-queue table size. This results in
    multiple connections (even across different rx-queues) getting the same
    hash value. The driver steer function modifies the wrong flow to use this
    rx-queue, e.g.: Flow#1 is first added:
        Flow#1:  <ip1, port1, ip2, port2>, Hash 'h', q#10
    
    Later when a new flow needs to be added:
                Flow#2:  <ip3, port3, ip4, port4>, Hash 'h', q#20
    
    The driver finds the hash 'h' from Flow#1 and updates it to use q#20. This
    results in both flows getting un-optimized - packets for Flow#1 goes to
    q#20, and then reprogrammed back to q#10 later and so on; and Flow #2
    programming is never done as Flow#1 is matched first for all misses. Many
    flows may wrongly share the same hash and reprogram rules of the original
    flow each with their own q#.
    
    Tested on two 144-core servers with 16K netperf sessions for 180s. Netperf
    clients are pinned to cores 0-71 sequentially (so that wrong packets on q#s
    72-143 can be measured). IRQs are set 1:1 for queues -> CPUs, enable XPS,
    enable aRFS (global value is 144 * rps_flow_cnt).
    
    Test notes about results from ice_rx_flow_steer():
    ---------------------------------------------------
    1. "Skip:" counter increments here:
        if (fltr_info->q_index == rxq_idx ||
            arfs_entry->fltr_state != ICE_ARFS_ACTIVE)
                goto out;
    2. "Add:" counter increments here:
        ret = arfs_entry->fltr_info.fltr_id;
        INIT_HLIST_NODE(&arfs_entry->list_entry);
    3. "Update:" counter increments here:
        /* update the queue to forward to on an already existing flow */
    
    Runtime comparison: original code vs with the patch for different
    rps_flow_cnt values.
    
    +-------------------------------+--------------+--------------+
    | rps_flow_cnt                  |      512     |    2048      |
    +-------------------------------+--------------+--------------+
    | Ratio of Pkts on Good:Bad q's | 214 vs 822K  | 1.1M vs 980K |
    | Avoid wrong aRFS programming  | 0 vs 310K    | 0 vs 30K     |
    | CPU User                      | 216 vs 183   | 216 vs 206   |
    | CPU System                    | 1441 vs 1171 | 1447 vs 1320 |
    | CPU Softirq                   | 1245 vs 920  | 1238 vs 961  |
    | CPU Total                     | 29 vs 22.7   | 29 vs 24.9   |
    | aRFS Update                   | 533K vs 59   | 521K vs 32   |
    | aRFS Skip                     | 82M vs 77M   | 7.2M vs 4.5M |
    +-------------------------------+--------------+--------------+
    
    A separate TCP_STREAM and TCP_RR with 1,4,8,16,64,128,256,512 connections
    showed no performance degradation.
    
    Some points on the patch/aRFS behavior:
    1. Enabling full tuple matching ensures flows are always correctly matched,
       even with smaller hash sizes.
    2. 5-6% drop in CPU utilization as the packets arrive at the correct CPUs
       and fewer calls to driver for programming on misses.
    3. Larger hash tables reduces mis-steering due to more unique flow hashes,
       but still has clashes. However, with larger per-device rps_flow_cnt, old
       flows take more time to expire and new aRFS flows cannot be added if h/w
       limits are reached (rps_may_expire_flow() succeeds when 10*rps_flow_cnt
       pkts have been processed by this cpu that are not part of the flow).
    
    Fixes: 28bf26724fdb0 ("ice: Implement aRFS")
    Signed-off-by: Krishna Kumar <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Tested-by: Rinitha S <[email protected]> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: lan743x: fix potential out-of-bounds write in lan743x_ptp_io_event_clock_get() [+ + +]
Author: Alexey Kodanev <[email protected]>
Date:   Mon Jun 16 11:37:43 2025 +0000

    net: lan743x: fix potential out-of-bounds write in lan743x_ptp_io_event_clock_get()
    
    [ Upstream commit e353b0854d3a1a31cb061df8d022fbfea53a0f24 ]
    
    Before calling lan743x_ptp_io_event_clock_get(), the 'channel' value
    is checked against the maximum value of PCI11X1X_PTP_IO_MAX_CHANNELS(8).
    This seems correct and aligns with the PTP interrupt status register
    (PTP_INT_STS) specifications.
    
    However, lan743x_ptp_io_event_clock_get() writes to ptp->extts[] with
    only LAN743X_PTP_N_EXTTS(4) elements, using channel as an index:
    
        lan743x_ptp_io_event_clock_get(..., u8 channel,...)
        {
            ...
            /* Update Local timestamp */
            extts = &ptp->extts[channel];
            extts->ts.tv_sec = sec;
            ...
        }
    
    To avoid an out-of-bounds write and utilize all the supported GPIO
    inputs, set LAN743X_PTP_N_EXTTS to 8.
    
    Detected using the static analysis tool - Svace.
    Fixes: 60942c397af6 ("net: lan743x: Add support for PTP-IO Event Input External Timestamp (extts)")
    Signed-off-by: Alexey Kodanev <[email protected]>
    Reviewed-by: Jacob Keller <[email protected]>
    Acked-by: Rengarajan S <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: lan743x: Modify the EEPROM and OTP size for PCI1xxxx devices [+ + +]
Author: Rengarajan S <[email protected]>
Date:   Fri May 23 23:03:26 2025 +0530

    net: lan743x: Modify the EEPROM and OTP size for PCI1xxxx devices
    
    [ Upstream commit 3b9935586a9b54d2da27901b830d3cf46ad66a1e ]
    
    Maximum OTP and EEPROM size for hearthstone PCI1xxxx devices are 8 Kb
    and 64 Kb respectively. Adjust max size definitions and return correct
    EEPROM length based on device. Also prevent out-of-bound read/write.
    
    Signed-off-by: Rengarajan S <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: macb: Check return value of dma_set_mask_and_coherent() [+ + +]
Author: Sergio Perez Gonzalez <[email protected]>
Date:   Sun May 25 21:20:31 2025 -0600

    net: macb: Check return value of dma_set_mask_and_coherent()
    
    [ Upstream commit 3920a758800762917177a6b5ab39707d8e376fe6 ]
    
    Issue flagged by coverity. Add a safety check for the return value
    of dma_set_mask_and_coherent, go to a safe exit if it returns error.
    
    Link: https://scan7.scan.coverity.com/#/project-view/53936/11354?selectedIssue=1643754
    Signed-off-by: Sergio Perez Gonzalez <[email protected]>
    Reviewed-by: Claudiu Beznea <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: make for_each_netdev_dump() a little more bug-proof [+ + +]
Author: Jakub Kicinski <[email protected]>
Date:   Thu Jun 13 14:33:16 2024 -0700

    net: make for_each_netdev_dump() a little more bug-proof
    
    commit f22b4b55edb507a2b30981e133b66b642be4d13f upstream.
    
    I find the behavior of xa_for_each_start() slightly counter-intuitive.
    It doesn't end the iteration by making the index point after the last
    element. IOW calling xa_for_each_start() again after it "finished"
    will run the body of the loop for the last valid element, instead
    of doing nothing.
    
    This works fine for netlink dumps if they terminate correctly
    (i.e. coalesce or carefully handle NLM_DONE), but as we keep getting
    reminded legacy dumps are unlikely to go away.
    
    Fixing this generically at the xa_for_each_start() level seems hard -
    there is no index reserved for "end of iteration".
    ifindexes are 31b wide, tho, and iterator is ulong so for
    for_each_netdev_dump() it's safe to go to the next element.
    
    Signed-off-by: Jakub Kicinski <[email protected]>
    Reviewed-by: Przemek Kitszel <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    [ The mctp RTM_GETADDR rework backport of acab78ae12c7 ("net: mctp: Don't
      access ifa_index when missing") pulled 2d45eeb7d5d7 ("mctp: no longer
      rely on net->dev_index_head[]") as a dependency. However, that change
      relies on this backport for correct behaviour of
      for_each_netdev_dump().
    
      Jakub mentions[1] that nothing should be relying on the old behaviour
      of for_each_netdev_dump(), hence the backport.
    
      [1]: https://lore.kernel.org/netdev/[email protected]/ ]
    Signed-off-by: Jeremy Kerr <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: microchip: lan743x: Reduce PTP timeout on HW failure [+ + +]
Author: Rengarajan S <[email protected]>
Date:   Thu May 2 10:33:00 2024 +0530

    net: microchip: lan743x: Reduce PTP timeout on HW failure
    
    [ Upstream commit b1de3c0df7abc41dc41862c0b08386411f2799d7 ]
    
    The PTP_CMD_CTL is a self clearing register which controls the PTP clock
    values. In the current implementation driver waits for a duration of 20
    sec in case of HW failure to clear the PTP_CMD_CTL register bit. This
    timeout of 20 sec is very long to recognize a HW failure, as it is
    typically cleared in one clock(<16ns). Hence reducing the timeout to 1 sec
    would be sufficient to conclude if there is any HW failure observed. The
    usleep_range will sleep somewhere between 1 msec to 20 msec for each
    iteration. By setting the PTP_CMD_CTL_TIMEOUT_CNT to 50 the max timeout
    is extended to 1 sec.
    
    Signed-off-by: Rengarajan S <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Stable-dep-of: e353b0854d3a ("net: lan743x: fix potential out-of-bounds write in lan743x_ptp_io_event_clock_get()")
    Signed-off-by: Sasha Levin <[email protected]>

net: mlx4: add SOF_TIMESTAMPING_TX_SOFTWARE flag when getting ts info [+ + +]
Author: Jason Xing <[email protected]>
Date:   Sat May 10 17:34:42 2025 +0800

    net: mlx4: add SOF_TIMESTAMPING_TX_SOFTWARE flag when getting ts info
    
    [ Upstream commit b86bcfee30576b752302c55693fff97242b35dfd ]
    
    As mlx4 has implemented skb_tx_timestamp() in mlx4_en_xmit(), the
    SOFTWARE flag is surely needed when users are trying to get timestamp
    information.
    
    Signed-off-by: Jason Xing <[email protected]>
    Reviewed-by: Tariq Toukan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: vertexcom: mse102x: Return code for mse102x_rx_pkt_spi [+ + +]
Author: Stefan Wahren <[email protected]>
Date:   Fri May 9 14:04:34 2025 +0200

    net: vertexcom: mse102x: Return code for mse102x_rx_pkt_spi
    
    [ Upstream commit 4ecf56f4b66011b583644bf9a62188d05dfcd78c ]
    
    The MSE102x doesn't provide any interrupt register, so the only way
    to handle the level interrupt is to fetch the whole packet from
    the MSE102x internal buffer via SPI. So in cases the interrupt
    handler fails to do this, it should return IRQ_NONE. This allows
    the core to disable the interrupt in case the issue persists
    and prevent an interrupt storm.
    
    Signed-off-by: Stefan Wahren <[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_sfq: reject invalid perturb period [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Wed Jun 11 08:35:01 2025 +0000

    net_sched: sch_sfq: reject invalid perturb period
    
    commit 7ca52541c05c832d32b112274f81a985101f9ba8 upstream.
    
    Gerrard Tai reported that SFQ perturb_period has no range check yet,
    and this can be used to trigger a race condition fixed in a separate patch.
    
    We want to make sure ctl->perturb_period * HZ will not overflow
    and is positive.
    
    Tested:
    
    tc qd add dev lo root sfq perturb -10   # negative value : error
    Error: sch_sfq: invalid perturb period.
    
    tc qd add dev lo root sfq perturb 1000000000 # too big : error
    Error: sch_sfq: invalid perturb period.
    
    tc qd add dev lo root sfq perturb 2000000 # acceptable value
    tc -s -d qd sh dev lo
    qdisc sfq 8005: root refcnt 2 limit 127p quantum 64Kb depth 127 flows 128 divisor 1024 perturb 2000000sec
     Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
     backlog 0b 0p requeues 0
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: Gerrard Tai <[email protected]>
    Signed-off-by: Eric Dumazet <[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]>

 
NFC: nci: uart: Set tty->disc_data only in success path [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Wed Jun 18 09:36:50 2025 +0200

    NFC: nci: uart: Set tty->disc_data only in success path
    
    commit fc27ab48904ceb7e4792f0c400f1ef175edf16fe upstream.
    
    Setting tty->disc_data before opening the NCI device means we need to
    clean it up on error paths.  This also opens some short window if device
    starts sending data, even before NCIUARTSETDRIVER IOCTL succeeded
    (broken hardware?).  Close the window by exposing tty->disc_data only on
    the success path, when opening of the NCI device and try_module_get()
    succeeds.
    
    The code differs in error path in one aspect: tty->disc_data won't be
    ever assigned thus NULL-ified.  This however should not be relevant
    difference, because of "tty->disc_data=NULL" in nci_uart_tty_open().
    
    Cc: Linus Torvalds <[email protected]>
    Fixes: 9961127d4bce ("NFC: nci: add generic uart support")
    Cc: <[email protected]>
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Reviewed-by: Greg Kroah-Hartman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nfsd: Initialize ssc before laundromat_work to prevent NULL dereference [+ + +]
Author: Li Lingfeng <[email protected]>
Date:   Mon Apr 14 22:38:52 2025 +0800

    nfsd: Initialize ssc before laundromat_work to prevent NULL dereference
    
    commit b31da62889e6d610114d81dc7a6edbcaa503fcf8 upstream.
    
    In nfs4_state_start_net(), laundromat_work may access nfsd_ssc through
    nfs4_laundromat -> nfsd4_ssc_expire_umount. If nfsd_ssc isn't initialized,
    this can cause NULL pointer dereference.
    
    Normally the delayed start of laundromat_work allows sufficient time for
    nfsd_ssc initialization to complete. However, when the kernel waits too
    long for userspace responses (e.g. in nfs4_state_start_net ->
    nfsd4_end_grace -> nfsd4_record_grace_done -> nfsd4_cld_grace_done ->
    cld_pipe_upcall -> __cld_pipe_upcall -> wait_for_completion path), the
    delayed work may start before nfsd_ssc initialization finishes.
    
    Fix this by moving nfsd_ssc initialization before starting laundromat_work.
    
    Fixes: f4e44b393389 ("NFSD: delay unmount source's export after inter-server copy completed.")
    Cc: [email protected]
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Li Lingfeng <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

nfsd: nfsd4_spo_must_allow() must check this is a v4 compound request [+ + +]
Author: NeilBrown <[email protected]>
Date:   Fri Mar 28 11:05:59 2025 +1100

    nfsd: nfsd4_spo_must_allow() must check this is a v4 compound request
    
    commit 1244f0b2c3cecd3f349a877006e67c9492b41807 upstream.
    
    If the request being processed is not a v4 compound request, then
    examining the cstate can have undefined results.
    
    This patch adds a check that the rpc procedure being executed
    (rq_procinfo) is the NFSPROC4_COMPOUND procedure.
    
    Reported-by: Olga Kornievskaia <[email protected]>
    Cc: [email protected]
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: NeilBrown <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
octeontx2-pf: Add error log forcn10k_map_unmap_rq_policer() [+ + +]
Author: Wentao Liang <[email protected]>
Date:   Tue Apr 8 11:26:02 2025 +0800

    octeontx2-pf: Add error log forcn10k_map_unmap_rq_policer()
    
    [ Upstream commit 9c056ec6dd1654b1420dafbbe2a69718850e6ff2 ]
    
    The cn10k_free_matchall_ipolicer() calls the cn10k_map_unmap_rq_policer()
    for each queue in a for loop without checking for any errors.
    
    Check the return value of the cn10k_map_unmap_rq_policer() function during
    each loop, and report a warning if the function fails.
    
    Signed-off-by: Wentao Liang <[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]>

 
parisc/unaligned: Fix hex output to show 8 hex chars [+ + +]
Author: Helge Deller <[email protected]>
Date:   Sat May 31 15:26:27 2025 +0200

    parisc/unaligned: Fix hex output to show 8 hex chars
    
    commit 213205889d5ffc19cb8df06aa6778b2d4724c887 upstream.
    
    Change back printk format to 0x%08lx instead of %#08lx, since the latter
    does not seem to reliably format the value to 8 hex chars.
    
    Signed-off-by: Helge Deller <[email protected]>
    Cc: [email protected] # v5.18+
    Fixes: e5e9e7f222e5b ("parisc/unaligned: Enhance user-space visible output")
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
parisc: fix building with gcc-15 [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Tue May 20 11:00:46 2025 +0200

    parisc: fix building with gcc-15
    
    commit 7cbb015e2d3d6f180256cde0c908eab21268e7b9 upstream.
    
    The decompressor is built with the default C dialect, which is now gnu23
    on gcc-15, and this clashes with the kernel's bool type definition:
    
    In file included from include/uapi/linux/posix_types.h:5,
                     from arch/parisc/boot/compressed/misc.c:7:
    include/linux/stddef.h:11:9: error: cannot use keyword 'false' as enumeration constant
       11 |         false   = 0,
    
    Add the -std=gnu11 argument here, as we do for all other architectures.
    
    Cc: [email protected]
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
PCI: Add ACS quirk for Loongson PCIe [+ + +]
Author: Huacai Chen <[email protected]>
Date:   Thu Apr 3 12:07:56 2025 +0800

    PCI: Add ACS quirk for Loongson PCIe
    
    commit 1f3303aa92e15fa273779acac2d0023609de30f1 upstream.
    
    Loongson PCIe Root Ports don't advertise an ACS capability, but they do not
    allow peer-to-peer transactions between Root Ports. Add an ACS quirk so
    each Root Port can be in a separate IOMMU group.
    
    Signed-off-by: Xianglai Li <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: cadence-ep: Correct PBA offset in .set_msix() callback [+ + +]
Author: Niklas Cassel <[email protected]>
Date:   Wed May 14 09:43:15 2025 +0200

    PCI: cadence-ep: Correct PBA offset in .set_msix() callback
    
    commit c8bcb01352a86bc5592403904109c22b66bd916e upstream.
    
    While cdns_pcie_ep_set_msix() writes the Table Size field correctly (N-1),
    the calculation of the PBA offset is wrong because it calculates space for
    (N-1) entries instead of N.
    
    This results in the following QEMU error when using PCI passthrough on a
    device which relies on the PCI endpoint subsystem:
    
      failed to add PCI capability 0x11[0x50]@0xb0: table & pba overlap, or they don't fit in BARs, or don't align
    
    Fix the calculation of PBA offset in the MSI-X capability.
    
    [bhelgaas: more specific subject and commit log]
    
    Fixes: 3ef5d16f50f8 ("PCI: cadence: Add MSI-X support to Endpoint driver")
    Signed-off-by: Niklas Cassel <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Reviewed-by: Wilfred Mallawa <[email protected]>
    Reviewed-by: Damien Le Moal <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: dw-rockchip: Fix PHY function call sequence in rockchip_pcie_phy_deinit() [+ + +]
Author: Diederik de Haas <[email protected]>
Date:   Thu Apr 17 16:21:18 2025 +0200

    PCI: dw-rockchip: Fix PHY function call sequence in rockchip_pcie_phy_deinit()
    
    commit 286ed198b899739862456f451eda884558526a9d upstream.
    
    The documentation for the phy_power_off() function explicitly says that it
    must be called before phy_exit().
    
    Hence, follow the same rule in rockchip_pcie_phy_deinit().
    
    Fixes: 0e898eb8df4e ("PCI: rockchip-dwc: Add Rockchip RK356X host controller driver")
    Signed-off-by: Diederik de Haas <[email protected]>
    [mani: commit message change]
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Reviewed-by: Niklas Cassel <[email protected]>
    Reviewed-by: Dragan Simic <[email protected]>
    Acked-by: Shawn Lin <[email protected]>
    Cc: [email protected]      # v5.15+
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: Fix lock symmetry in pci_slot_unlock() [+ + +]
Author: Ilpo Järvinen <[email protected]>
Date:   Mon May 5 14:54:12 2025 +0300

    PCI: Fix lock symmetry in pci_slot_unlock()
    
    commit f3efb9569b4a21354ef2caf7ab0608a3e14cc6e4 upstream.
    
    The commit a4e772898f8b ("PCI: Add missing bridge lock to pci_bus_lock()")
    made the lock function to call depend on dev->subordinate but left
    pci_slot_unlock() unmodified creating locking asymmetry compared with
    pci_slot_lock().
    
    Because of the asymmetric lock handling, the same bridge device is unlocked
    twice. First pci_bus_unlock() unlocks bus->self and then pci_slot_unlock()
    will unconditionally unlock the same bridge device.
    
    Move pci_dev_unlock() inside an else branch to match the logic in
    pci_slot_lock().
    
    Fixes: a4e772898f8b ("PCI: Add missing bridge lock to pci_bus_lock()")
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Reviewed-by: Lukas Wunner <[email protected]>
    Reviewed-by: Dave Jiang <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
perf evsel: Missed close() when probing hybrid core PMUs [+ + +]
Author: Ian Rogers <[email protected]>
Date:   Fri Jun 13 17:41:05 2025 -0700

    perf evsel: Missed close() when probing hybrid core PMUs
    
    [ Upstream commit ebec62bc7ec435b475722a5467d67c720a1ad79f ]
    
    Add missing close() to avoid leaking perf events.
    
    In past perfs this mattered little as the function was just used by 'perf
    list'.
    
    As the function is now used to detect hybrid PMUs leaking the perf event
    is somewhat more painful.
    
    Fixes: b41f1cec91c37eee ("perf list: Skip unsupported events")
    Signed-off-by: Ian Rogers <[email protected]>
    Cc: Adrian Hunter <[email protected]>
    Cc: Alexander Shishkin <[email protected]>
    Cc: Andi Kleen <[email protected]>
    Cc: Ingo Molnar <[email protected]>
    Cc: Jiapeng Chong <[email protected]>
    Cc: Jiri Olsa <[email protected]>
    Cc: Kan Liang <[email protected]>
    Cc: Mark Rutland <[email protected]>
    Cc: Michael Petlan <[email protected]>
    Cc: Namhyung Kim <[email protected]>
    Cc: Namhyung Kim <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Cc: Tiezhu Yang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
perf/core: Fix WARN in perf_cgroup_switch() [+ + +]
Author: Luo Gengkun <[email protected]>
Date:   Wed Jun 4 03:39:24 2025 +0000

    perf/core: Fix WARN in perf_cgroup_switch()
    
    [ Upstream commit 3172fb986666dfb71bf483b6d3539e1e587fa197 ]
    
    There may be concurrency between perf_cgroup_switch and
    perf_cgroup_event_disable. Consider the following scenario: after a new
    perf cgroup event is created on CPU0, the new event may not trigger
    a reprogramming, causing ctx->is_active to be 0. In this case, when CPU1
    disables this perf event, it executes __perf_remove_from_context->
    list _del_event->perf_cgroup_event_disable on CPU1, which causes a race
    with perf_cgroup_switch running on CPU0.
    
    The following describes the details of this concurrency scenario:
    
    CPU0                                            CPU1
    
    perf_cgroup_switch:
       ...
       # cpuctx->cgrp is not NULL here
       if (READ_ONCE(cpuctx->cgrp) == NULL)
            return;
    
                                                    perf_remove_from_context:
                                                       ...
                                                       raw_spin_lock_irq(&ctx->lock);
                                                       ...
                                                       # ctx->is_active == 0 because reprogramm is not
                                                       # tigger, so CPU1 can do __perf_remove_from_context
                                                       # for CPU0
                                                       __perf_remove_from_context:
                                                             perf_cgroup_event_disable:
                                                                ...
                                                                if (--ctx->nr_cgroups)
                                                                ...
    
       # this warning will happened because CPU1 changed
       # ctx.nr_cgroups to 0.
       WARN_ON_ONCE(cpuctx->ctx.nr_cgroups == 0);
    
    [peterz: use guard instead of goto unlock]
    Fixes: db4a835601b7 ("perf/core: Set cgroup in CPU contexts for new cgroup events")
    Signed-off-by: Luo Gengkun <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
perf: Fix cgroup state vs ERROR [+ + +]
Author: Peter Zijlstra <[email protected]>
Date:   Thu Jun 5 12:37:11 2025 +0200

    perf: Fix cgroup state vs ERROR
    
    [ Upstream commit 61988e36dc5457cdff7ae7927e8d9ad1419ee998 ]
    
    While chasing down a missing perf_cgroup_event_disable() elsewhere,
    Leo Yan found that both perf_put_aux_event() and
    perf_remove_sibling_event() were also missing one.
    
    Specifically, the rule is that events that switch to OFF,ERROR need to
    call perf_cgroup_event_disable().
    
    Unify the disable paths to ensure this.
    
    Fixes: ab43762ef010 ("perf: Allow normal events to output AUX data")
    Fixes: 9f0c4fa111dc ("perf/core: Add a new PERF_EV_CAP_SIBLING event capability")
    Reported-by: Leo Yan <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

perf: Fix sample vs do_exit() [+ + +]
Author: Peter Zijlstra <[email protected]>
Date:   Thu Jun 5 12:31:45 2025 +0200

    perf: Fix sample vs do_exit()
    
    [ Upstream commit 4f6fc782128355931527cefe3eb45338abd8ab39 ]
    
    Baisheng Gao reported an ARM64 crash, which Mark decoded as being a
    synchronous external abort -- most likely due to trying to access
    MMIO in bad ways.
    
    The crash further shows perf trying to do a user stack sample while in
    exit_mmap()'s tlb_finish_mmu() -- i.e. while tearing down the address
    space it is trying to access.
    
    It turns out that we stop perf after we tear down the userspace mm; a
    receipie for disaster, since perf likes to access userspace for
    various reasons.
    
    Flip this order by moving up where we stop perf in do_exit().
    
    Additionally, harden PERF_SAMPLE_CALLCHAIN and PERF_SAMPLE_STACK_USER
    to abort when the current task does not have an mm (exit_mm() makes
    sure to set current->mm = NULL; before commencing with the actual
    teardown). Such that CPU wide events don't trip on this same problem.
    
    Fixes: c5ebcedb566e ("perf: Add ability to attach user stack dump to sample")
    Reported-by: Baisheng Gao <[email protected]>
    Suggested-by: Mark Rutland <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
phy: fsl-imx8mq-usb: fix phy_tx_vboost_level_from_property() [+ + +]
Author: Xu Yang <[email protected]>
Date:   Wed Apr 30 17:45:01 2025 +0800

    phy: fsl-imx8mq-usb: fix phy_tx_vboost_level_from_property()
    
    commit b15ee09ddb987a122e74fb0fdf1bd6e864959fd3 upstream.
    
    The description of TX_VBOOST_LVL is wrong in register PHY_CTRL3
    bit[31:29].
    
    The updated description as below:
      011: Corresponds to a launch amplitude of 0.844 V.
      100: Corresponds to a launch amplitude of 1.008 V.
      101: Corresponds to a launch amplitude of 1.156 V.
    
    This will fix the parsing function
    phy_tx_vboost_level_from_property() to return correct value.
    
    Fixes: 63c85ad0cd81 ("phy: fsl-imx8mp-usb: add support for phy tuning")
    Cc: [email protected]
    Reviewed-by: Jun Li <[email protected]>
    Signed-off-by: Xu Yang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
pinctrl: armada-37xx: propagate error from armada_37xx_gpio_get() [+ + +]
Author: Gabor Juhos <[email protected]>
Date:   Wed May 14 21:18:35 2025 +0200

    pinctrl: armada-37xx: propagate error from armada_37xx_gpio_get()
    
    [ Upstream commit 57273ff8bb16f3842c2597b5bbcd49e7fa12edf7 ]
    
    The regmap_read() function can fail, so propagate its error up to
    the stack instead of silently ignoring that.
    
    Signed-off-by: Imre Kaloz <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Signed-off-by: Gabor Juhos <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

pinctrl: armada-37xx: propagate error from armada_37xx_gpio_get_direction() [+ + +]
Author: Gabor Juhos <[email protected]>
Date:   Wed May 14 21:18:37 2025 +0200

    pinctrl: armada-37xx: propagate error from armada_37xx_gpio_get_direction()
    
    [ Upstream commit 6481c0a83367b0672951ccc876fbae7ee37b594b ]
    
    The regmap_read() function can fail, so propagate its error up to
    the stack instead of silently ignoring that.
    
    Signed-off-by: Imre Kaloz <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Signed-off-by: Gabor Juhos <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

pinctrl: armada-37xx: propagate error from armada_37xx_pmx_gpio_set_direction() [+ + +]
Author: Gabor Juhos <[email protected]>
Date:   Wed May 14 21:18:36 2025 +0200

    pinctrl: armada-37xx: propagate error from armada_37xx_pmx_gpio_set_direction()
    
    [ Upstream commit bfa0ff804ffa8b1246ade8be08de98c9eb19d16f ]
    
    The armada_37xx_gpio_direction_{in,out}put() functions can fail, so
    propagate their error values back to the stack instead of silently
    ignoring those.
    
    Signed-off-by: Imre Kaloz <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Signed-off-by: Gabor Juhos <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

pinctrl: armada-37xx: propagate error from armada_37xx_pmx_set_by_name() [+ + +]
Author: Gabor Juhos <[email protected]>
Date:   Wed May 14 21:18:38 2025 +0200

    pinctrl: armada-37xx: propagate error from armada_37xx_pmx_set_by_name()
    
    [ Upstream commit 4229c28323db141eda69cb99427be75d3edba071 ]
    
    The regmap_update_bits() function can fail, so propagate its error
    up to the stack instead of silently ignoring that.
    
    Signed-off-by: Imre Kaloz <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Signed-off-by: Gabor Juhos <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

pinctrl: mcp23s08: Reset all pins to input at probe [+ + +]
Author: Mike Looijmans <[email protected]>
Date:   Fri Mar 14 16:17:45 2025 +0100

    pinctrl: mcp23s08: Reset all pins to input at probe
    
    [ Upstream commit 3ede3f8b4b4b399b0ca41e44959f80d5cf84fc98 ]
    
    At startup, the driver just assumes that all registers have their
    default values. But after a soft reset, the chip will just be in the
    state it was, and some pins may have been configured as outputs. Any
    modification of the output register will cause these pins to be driven
    low, which leads to unexpected/unwanted effects. To prevent this from
    happening, set the chip's IO configuration register to a known safe
    mode (all inputs) before toggling any other bits.
    
    Signed-off-by: Mike Looijmans <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
platform/loongarch: laptop: Add backlight power control support [+ + +]
Author: Yao Zi <[email protected]>
Date:   Thu Jun 5 20:34:46 2025 +0800

    platform/loongarch: laptop: Add backlight power control support
    
    commit 53c762b47f726e4079a1f06f684bce2fc0d56fba upstream.
    
    loongson_laptop_turn_{on,off}_backlight() are designed for controlling
    the power of the backlight, but they aren't really used in the driver
    previously.
    
    Unify these two functions since they only differ in arguments passed to
    ACPI method, and wire up loongson_laptop_backlight_update() to update
    the power state of the backlight as well. Tested on the TongFang L860-T2
    Loongson-3A5000 laptop.
    
    Cc: [email protected]
    Fixes: 6246ed09111f ("LoongArch: Add ACPI-based generic laptop driver")
    Signed-off-by: Yao Zi <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

platform/loongarch: laptop: Get brightness setting from EC on probe [+ + +]
Author: Yao Zi <[email protected]>
Date:   Thu Jun 5 20:34:46 2025 +0800

    platform/loongarch: laptop: Get brightness setting from EC on probe
    
    commit 1205088fd0393bd9eae96b62bf1e4b9eb1b73edf upstream.
    
    Previously during driver probe, 1 is unconditionally taken as current
    brightness value and set to props.brightness, which will be considered
    as the brightness before suspend and restored to EC on resume. Since a
    brightness value of 1 almost never matches EC's state on coldboot (my
    laptop's EC defaults to 80), this causes surprising changes of screen
    brightness on the first time of resume after coldboot.
    
    Let's get brightness from EC and take it as the current brightness on
    probe of the laptop driver to avoid the surprising behavior. Tested on
    TongFang L860-T2 Loongson-3A5000 laptop.
    
    Cc: [email protected]
    Fixes: 6246ed09111f ("LoongArch: Add ACPI-based generic laptop driver")
    Signed-off-by: Yao Zi <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

platform/loongarch: laptop: Unregister generic_sub_drivers on exit [+ + +]
Author: Yao Zi <[email protected]>
Date:   Thu Jun 5 20:34:46 2025 +0800

    platform/loongarch: laptop: Unregister generic_sub_drivers on exit
    
    commit f78fb2576f22b0ba5297412a9aa7691920666c41 upstream.
    
    Without correct unregisteration, ACPI notify handlers and the platform
    drivers installed by generic_subdriver_init() will become dangling
    references after removing the loongson_laptop module, triggering various
    kernel faults when a hotkey is sent or at kernel shutdown.
    
    Cc: [email protected]
    Fixes: 6246ed09111f ("LoongArch: Add ACPI-based generic laptop driver")
    Signed-off-by: Yao Zi <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
platform/x86/amd: pmc: Clear metrics table at start of cycle [+ + +]
Author: Mario Limonciello <[email protected]>
Date:   Tue Jun 3 08:24:08 2025 -0500

    platform/x86/amd: pmc: Clear metrics table at start of cycle
    
    [ Upstream commit 4dbd11796f3a8eb95647507befc41995458a4023 ]
    
    The area of memory that contains the metrics table may contain garbage
    when the cycle starts.  This normally doesn't matter because the cycle
    itself will populate it with valid data, however commit 9f5595d5f03fd
    ("platform/x86/amd: pmc: Require at least 2.5 seconds between HW sleep
    cycles") started to use it during the check() phase.  Depending upon
    what garbage is in the table it's possible that the system will wait
    2.5 seconds for even the first cycle, which will be visible to a user.
    
    To prevent this from happening explicitly clear the table when logging
    is started.
    
    Fixes: 9f5595d5f03fd ("platform/x86/amd: pmc: Require at least 2.5 seconds between HW sleep cycles")
    Signed-off-by: Mario Limonciello <[email protected]>
    Link: https://lore.kernel.org/r/[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/intel-uncore-freq: Fail module load when plat_info is NULL [+ + +]
Author: Srinivas Pandruvada <[email protected]>
Date:   Fri Jun 6 13:53:00 2025 -0700

    platform/x86/intel-uncore-freq: Fail module load when plat_info is NULL
    
    commit 685f88c72a0c4d12d3bd2ff50286938f14486f85 upstream.
    
    Address a Smatch static checker warning regarding an unchecked
    dereference in the function call:
    set_cdie_id(i, cluster_info, plat_info)
    when plat_info is NULL.
    
    Instead of addressing this one case, in general if plat_info is NULL
    then it can cause other issues. For example in a two package system it
    will give warning for duplicate sysfs entry as package ID will be always
    zero for both packages when creating string for attribute group name.
    
    plat_info is derived from TPMI ID TPMI_BUS_INFO, which is integral to
    the core TPMI design. Therefore, it should not be NULL on a production
    platform. Consequently, the module should fail to load if plat_info is
    NULL.
    
    Reported-by: Dan Carpenter <[email protected]>
    Closes: https://lore.kernel.org/platform-driver-x86/[email protected]/T/#u
    Fixes: 8a54e2253e4c ("platform/x86/intel-uncore-freq: Uncore frequency control via TPMI")
    Signed-off-by: Srinivas Pandruvada <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
platform/x86: dell_rbu: Fix list usage [+ + +]
Author: Stuart Hayes <[email protected]>
Date:   Mon Jun 9 13:46:56 2025 -0500

    platform/x86: dell_rbu: Fix list usage
    
    [ Upstream commit 61ce04601e0d8265ec6d2ffa6df5a7e1bce64854 ]
    
    Pass the correct list head to list_for_each_entry*() when looping through
    the packet list.
    
    Without this patch, reading the packet data via sysfs will show the data
    incorrectly (because it starts at the wrong packet), and clearing the
    packet list will result in a NULL pointer dereference.
    
    Fixes: d19f359fbdc6 ("platform/x86: dell_rbu: don't open code list_for_each_entry*()")
    Signed-off-by: Stuart Hayes <[email protected]>
    Link: https://lore.kernel.org/r/[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: Stop overwriting data buffer [+ + +]
Author: Stuart Hayes <[email protected]>
Date:   Mon Jun 9 13:46:58 2025 -0500

    platform/x86: dell_rbu: Stop overwriting data buffer
    
    [ Upstream commit f4b0fa38d5fefe9aed6ed831f3bd3538c168ee19 ]
    
    The dell_rbu driver will use memset() to clear the data held by each
    packet when it is no longer needed (when the driver is unloaded, the
    packet size is changed, etc).
    
    The amount of memory that is cleared (before this patch) is the normal
    packet size. However, the last packet in the list may be smaller.
    
    Fix this to only clear the memory actually used by each packet, to prevent
    it from writing past the end of data buffer.
    
    Because the packet data buffers are allocated with __get_free_pages() (in
    page-sized increments), this bug could only result in a buffer being
    overwritten when a packet size larger than one page is used. The only user
    of the dell_rbu module should be the Dell BIOS update program, which uses
    a packet size of 4096, so no issues should be seen without the patch, it
    just blocks the possiblity.
    
    Fixes: 6c54c28e69f2 ("[PATCH] dell_rbu: new Dell BIOS update driver")
    Signed-off-by: Stuart Hayes <[email protected]>
    Link: https://lore.kernel.org/r/[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: ideapad-laptop: add missing Ideapad Pro 5 fn keys [+ + +]
Author: Renato Caldas <[email protected]>
Date:   Sat Nov 2 18:31:16 2024 +0000

    platform/x86: ideapad-laptop: add missing Ideapad Pro 5 fn keys
    
    commit 36e66be874a7ea9d28fb9757629899a8449b8748 upstream.
    
    The scancodes for the Mic Mute and Airplane keys on the Ideapad Pro 5
    (14AHP9 at least, probably the other variants too) are different and
    were not being picked up by the driver. This adds them to the keymap.
    
    Apart from what is already supported, the remaining fn keys are
    unfortunately producing windows-specific key-combos.
    
    Signed-off-by: Renato Caldas <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Hans de Goede <[email protected]>
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: WangYuli <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
pldmfw: Select CRC32 when PLDMFW is selected [+ + +]
Author: Simon Horman <[email protected]>
Date:   Fri Jun 13 17:46:20 2025 +0100

    pldmfw: Select CRC32 when PLDMFW is selected
    
    [ Upstream commit 1224b218a4b9203656ecc932152f4c81a97b4fcc ]
    
    pldmfw calls crc32 code and depends on it being enabled, else
    there is a link error as follows. So PLDMFW should select CRC32.
    
      lib/pldmfw/pldmfw.o: In function `pldmfw_flash_image':
      pldmfw.c:(.text+0x70f): undefined reference to `crc32_le_base'
    
    This problem was introduced by commit b8265621f488 ("Add pldmfw library
    for PLDM firmware update").
    
    It manifests as of commit d69ea414c9b4 ("ice: implement device flash
    update via devlink").
    
    And is more likely to occur as of commit 9ad19171b6d6 ("lib/crc: remove
    unnecessary prompt for CONFIG_CRC32 and drop 'default y'").
    
    Found by chance while exercising builds based on tinyconfig.
    
    Fixes: b8265621f488 ("Add pldmfw library for PLDM firmware update")
    Signed-off-by: Simon Horman <[email protected]>
    Reviewed-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]>

 
PM: runtime: fix denying of auto suspend in pm_suspend_timer_fn() [+ + +]
Author: Charan Teja Kalla <[email protected]>
Date:   Thu May 15 12:11:25 2025 +0530

    PM: runtime: fix denying of auto suspend in pm_suspend_timer_fn()
    
    [ Upstream commit 40d3b40dce375d6f1c1dbf08d79eed3aed6c691d ]
    
    pm_runtime_put_autosuspend() schedules a hrtimer to expire
    at "dev->power.timer_expires". If the hrtimer's callback,
    pm_suspend_timer_fn(), observes that the current time equals
    "dev->power.timer_expires", it unexpectedly bails out instead of
    proceeding with runtime suspend.
    
    pm_suspend_timer_fn():
    
     if (expires > 0 && expires < ktime_get_mono_fast_ns()) {
            dev->power.timer_expires = 0;
            rpm_suspend(..)
     }
    
    Additionally, as ->timer_expires is not cleared, all the future auto
    suspend requests will not schedule hrtimer to perform auto suspend.
    
    rpm_suspend():
    
     if ((rpmflags & RPM_AUTO) &&...) {
            if (!(dev->power.timer_expires && ...) { <-- this will fail.
                    hrtimer_start_range_ns(&dev->power.suspend_timer,...);
            }
     }
    
    Fix this by as well checking if current time reaches the set expiration.
    
    Co-developed-by: Patrick Daly <[email protected]>
    Signed-off-by: Patrick Daly <[email protected]>
    Signed-off-by: Charan Teja Kalla <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
power: supply: bq27xxx: Retrieve again when busy [+ + +]
Author: Jerry Lv <[email protected]>
Date:   Tue Apr 15 11:40:47 2025 +0800

    power: supply: bq27xxx: Retrieve again when busy
    
    [ Upstream commit f16d9fb6cf03fdbdefa41a8b32ba1e57afb7ae3d ]
    
    Multiple applications may access the battery gauge at the same time, so
    the gauge may be busy and EBUSY will be returned. The driver will set a
    flag to record the EBUSY state, and this flag will be kept until the next
    periodic update. When this flag is set, bq27xxx_battery_get_property()
    will just return ENODEV until the flag is updated.
    
    Even if the gauge was busy during the last accessing attempt, returning
    ENODEV is not ideal, and can cause confusion in the applications layer.
    
    Instead, retry accessing the I2C to update the flag is as expected, for
    the gauge typically recovers from busy state within a few milliseconds.
    If still failed to access the gauge, the real error code would be returned
    instead of ENODEV (as suggested by Pali Rohár).
    
    Reviewed-by: Pali Rohár <[email protected]>
    Signed-off-by: Jerry Lv <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

power: supply: collie: Fix wakeup source leaks on device unbind [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Sun Apr 6 22:27:29 2025 +0200

    power: supply: collie: Fix wakeup source leaks on device unbind
    
    [ Upstream commit c73d19f89cb03c43abbbfa3b9caa1b8fc719764c ]
    
    Device can be unbound, so driver must also release memory for the wakeup
    source.
    
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
powerpc/eeh: Fix missing PE bridge reconfiguration during VFIO EEH recovery [+ + +]
Author: Narayana Murty N <[email protected]>
Date:   Thu May 8 02:29:28 2025 -0400

    powerpc/eeh: Fix missing PE bridge reconfiguration during VFIO EEH recovery
    
    [ Upstream commit 33bc69cf6655cf60829a803a45275f11a74899e5 ]
    
    VFIO EEH recovery for PCI passthrough devices fails on PowerNV and pseries
    platforms due to missing host-side PE bridge reconfiguration. In the
    current implementation, eeh_pe_configure() only performs RTAS or OPAL-based
    bridge reconfiguration for native host devices, but skips it entirely for
    PEs managed through VFIO in guest passthrough scenarios.
    
    This leads to incomplete EEH recovery when a PCI error affects a
    passthrough device assigned to a QEMU/KVM guest. Although VFIO triggers the
    EEH recovery flow through VFIO_EEH_PE_ENABLE ioctl, the platform-specific
    bridge reconfiguration step is silently bypassed. As a result, the PE's
    config space is not fully restored, causing subsequent config space access
    failures or EEH freeze-on-access errors inside the guest.
    
    This patch fixes the issue by ensuring that eeh_pe_configure() always
    invokes the platform's configure_bridge() callback (e.g.,
    pseries_eeh_phb_configure_bridge) even for VFIO-managed PEs. This ensures
    that RTAS or OPAL calls to reconfigure the PE bridge are correctly issued
    on the host side, restoring the PE's configuration space after an EEH
    event.
    
    This fix is essential for reliable EEH recovery in QEMU/KVM guests using
    VFIO PCI passthrough on PowerNV and pseries systems.
    
    Tested with:
    - QEMU/KVM guest using VFIO passthrough (IBM Power9,(lpar)Power11 host)
    - Injected EEH errors with pseries EEH errinjct tool on host, recovery
      verified on qemu guest.
    - Verified successful config space access and CAP_EXP DevCtl restoration
      after recovery
    
    Fixes: 212d16cdca2d ("powerpc/eeh: EEH support for VFIO PCI device")
    Signed-off-by: Narayana Murty N <[email protected]>
    Reviewed-by: Vaibhav Jain <[email protected]>
    Reviewed-by: Ganesh Goudar <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
powerpc/pseries/msi: Avoid reading PCI device registers in reduced power states [+ + +]
Author: Gautam Menghani <[email protected]>
Date:   Wed Mar 5 14:32:36 2025 +0530

    powerpc/pseries/msi: Avoid reading PCI device registers in reduced power states
    
    commit 9cc0eafd28c7faef300822992bb08d79cab2a36c upstream.
    
    When a system is being suspended to RAM, the PCI devices are also
    suspended and the PPC code ends up calling pseries_msi_compose_msg() and
    this triggers the BUG_ON() in __pci_read_msi_msg() because the device at
    this point is in reduced power state. In reduced power state, the memory
    mapped registers of the PCI device are not accessible.
    
    To replicate the bug:
    1. Make sure deep sleep is selected
            # cat /sys/power/mem_sleep
            s2idle [deep]
    
    2. Make sure console is not suspended (so that dmesg logs are visible)
            echo N > /sys/module/printk/parameters/console_suspend
    
    3. Suspend the system
            echo mem > /sys/power/state
    
    To fix this behaviour, read the cached msi message of the device when the
    device is not in PCI_D0 power state instead of touching the hardware.
    
    Fixes: a5f3d2c17b07 ("powerpc/pseries/pci: Add MSI domains")
    Cc: [email protected] # v5.15+
    Signed-off-by: Gautam Menghani <[email protected]>
    Tested-by: Venkat Rao Bagalkote <[email protected]>
    Reviewed-by: Vaibhav Jain <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
powerpc/vdso: Fix build of VDSO32 with pcrel [+ + +]
Author: Christophe Leroy <[email protected]>
Date:   Mon May 12 20:14:55 2025 +0200

    powerpc/vdso: Fix build of VDSO32 with pcrel
    
    [ Upstream commit b93755f408325170edb2156c6a894ed1cae5f4f6 ]
    
    Building vdso32 on power10 with pcrel leads to following errors:
    
              VDSO32A arch/powerpc/kernel/vdso/gettimeofday-32.o
            arch/powerpc/kernel/vdso/gettimeofday.S: Assembler messages:
            arch/powerpc/kernel/vdso/gettimeofday.S:40: Error: syntax error; found `@', expected `,'
            arch/powerpc/kernel/vdso/gettimeofday.S:71:  Info: macro invoked from here
            arch/powerpc/kernel/vdso/gettimeofday.S:40: Error: junk at end of line: `@notoc'
            arch/powerpc/kernel/vdso/gettimeofday.S:71:  Info: macro invoked from here
             ...
            make[2]: *** [arch/powerpc/kernel/vdso/Makefile:85: arch/powerpc/kernel/vdso/gettimeofday-32.o] Error 1
            make[1]: *** [arch/powerpc/Makefile:388: vdso_prepare] Error 2
    
    Once the above is fixed, the following happens:
    
              VDSO32C arch/powerpc/kernel/vdso/vgettimeofday-32.o
            cc1: error: '-mpcrel' requires '-mcmodel=medium'
            make[2]: *** [arch/powerpc/kernel/vdso/Makefile:89: arch/powerpc/kernel/vdso/vgettimeofday-32.o] Error 1
            make[1]: *** [arch/powerpc/Makefile:388: vdso_prepare] Error 2
            make: *** [Makefile:251: __sub-make] Error 2
    
    Make sure pcrel version of CFUNC() macro is used only for powerpc64
    builds and remove -mpcrel for powerpc32 builds.
    
    Fixes: 7e3a68be42e1 ("powerpc/64: vmlinux support building with PCREL addresing")
    Signed-off-by: Christophe Leroy <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/1fa3453f07d42a50a70114da9905bf7b73304fca.1747073669.git.christophe.leroy@csgroup.eu
    Signed-off-by: Sasha Levin <[email protected]>

 
ptp: allow reading of currently dialed frequency to succeed on free-running clocks [+ + +]
Author: Vladimir Oltean <[email protected]>
Date:   Fri Jun 13 20:47:49 2025 +0300

    ptp: allow reading of currently dialed frequency to succeed on free-running clocks
    
    [ Upstream commit aa112cbc5f0ac6f3b44d829005bf34005d9fe9bb ]
    
    There is a bug in ptp_clock_adjtime() which makes it refuse the
    operation even if we just want to read the current clock dialed
    frequency, not modify anything (tx->modes == 0). That should be possible
    even if the clock is free-running. For context, the kernel UAPI is the
    same for getting and setting the frequency of a POSIX clock.
    
    For example, ptp4l errors out at clock_create() -> clockadj_get_freq()
    -> clock_adjtime() time, when it should logically only have failed on
    actual adjustments to the clock, aka if the clock was configured as
    slave. But in master mode it should work.
    
    This was discovered when examining the issue described in the previous
    commit, where ptp_clock_freerun() returned true despite n_vclocks being
    zero.
    
    Fixes: 73f37068d540 ("ptp: support ptp physical/virtual clocks conversion")
    Signed-off-by: Vladimir Oltean <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ptp: fix breakage after ptp_vclock_in_use() rework [+ + +]
Author: Vladimir Oltean <[email protected]>
Date:   Fri Jun 13 20:47:48 2025 +0300

    ptp: fix breakage after ptp_vclock_in_use() rework
    
    [ Upstream commit 5ab73b010cad294851e558f1d4714a85c6f206c7 ]
    
    What is broken
    --------------
    
    ptp4l, and any other application which calls clock_adjtime() on a
    physical clock, is greeted with error -EBUSY after commit 87f7ce260a3c
    ("ptp: remove ptp->n_vclocks check logic in ptp_vclock_in_use()").
    
    Explanation for the breakage
    ----------------------------
    
    The blamed commit was based on the false assumption that
    ptp_vclock_in_use() callers already test for n_vclocks prior to calling
    this function.
    
    This is notably incorrect for the code path below, in which there is, in
    fact, no n_vclocks test:
    
    ptp_clock_adjtime()
    -> ptp_clock_freerun()
       -> ptp_vclock_in_use()
    
    The result is that any clock adjustment on any physical clock is now
    impossible. This is _despite_ there not being any vclock over this
    physical clock.
    
    $ ptp4l -i eno0 -2 -P -m
    ptp4l[58.425]: selected /dev/ptp0 as PTP clock
    [   58.429749] ptp: physical clock is free running
    ptp4l[58.431]: Failed to open /dev/ptp0: Device or resource busy
    failed to create a clock
    $ cat /sys/class/ptp/ptp0/n_vclocks
    0
    
    The patch makes the ptp_vclock_in_use() function say "if it's not a
    virtual clock, then this physical clock does have virtual clocks on
    top".
    
    Then ptp_clock_freerun() uses this information to say "this physical
    clock has virtual clocks on top, so it must stay free-running".
    
    Then ptp_clock_adjtime() uses this information to say "well, if this
    physical clock has to be free-running, I can't do it, return -EBUSY".
    
    Simply put, ptp_vclock_in_use() cannot be simplified so as to remove the
    test whether vclocks are in use.
    
    What did the blamed commit intend to fix
    ----------------------------------------
    
    The blamed commit presents a lockdep warning stating "possible recursive
    locking detected", with the n_vclocks_store() and ptp_clock_unregister()
    functions involved.
    
    The recursive locking seems this:
    n_vclocks_store()
    -> mutex_lock_interruptible(&ptp->n_vclocks_mux) // 1
    -> device_for_each_child_reverse(..., unregister_vclock)
       -> unregister_vclock()
          -> ptp_vclock_unregister()
             -> ptp_clock_unregister()
                -> ptp_vclock_in_use()
                   -> mutex_lock_interruptible(&ptp->n_vclocks_mux) // 2
    
    The issue can be triggered by creating and then deleting vclocks:
    $ echo 2 > /sys/class/ptp/ptp0/n_vclocks
    $ echo 0 > /sys/class/ptp/ptp0/n_vclocks
    
    But note that in the original stack trace, the address of the first lock
    is different from the address of the second lock. This is because at
    step 1 marked above, &ptp->n_vclocks_mux is the lock of the parent
    (physical) PTP clock, and at step 2, the lock is of the child (virtual)
    PTP clock. They are different locks of different devices.
    
    In this situation there is no real deadlock, the lockdep warning is
    caused by the fact that the mutexes have the same lock class on both the
    parent and the child. Functionally it is fine.
    
    Proposed alternative solution
    -----------------------------
    
    We must reintroduce the body of ptp_vclock_in_use() mostly as it was
    structured prior to the blamed commit, but avoid the lockdep warning.
    
    Based on the fact that vclocks cannot be nested on top of one another
    (ptp_is_attribute_visible() hides n_vclocks for virtual clocks), we
    already know that ptp->n_vclocks is zero for a virtual clock. And
    ptp->is_virtual_clock is a runtime invariant, established at
    ptp_clock_register() time and never changed. There is no need to
    serialize on any mutex in order to read ptp->is_virtual_clock, and we
    take advantage of that by moving it outside the lock.
    
    Thus, virtual clocks do not need to acquire &ptp->n_vclocks_mux at
    all, and step 2 in the code walkthrough above can simply go away.
    We can simply return false to the question "ptp_vclock_in_use(a virtual
    clock)".
    
    Other notes
    -----------
    
    Releasing &ptp->n_vclocks_mux before ptp_vclock_in_use() returns
    execution seems racy, because the returned value can become stale as
    soon as the function returns and before the return value is used (i.e.
    n_vclocks_store() can run any time). The locking requirement should
    somehow be transferred to the caller, to ensure a longer life time for
    the returned value, but this seems out of scope for this severe bug fix.
    
    Because we are also fixing up the logic from the original commit, there
    is another Fixes: tag for that.
    
    Fixes: 87f7ce260a3c ("ptp: remove ptp->n_vclocks check logic in ptp_vclock_in_use()")
    Fixes: 73f37068d540 ("ptp: support ptp physical/virtual clocks conversion")
    Signed-off-by: Vladimir Oltean <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/iwcm: Fix use-after-free of work objects after cm_id destruction [+ + +]
Author: Shin'ichiro Kawasaki <[email protected]>
Date:   Sat May 10 19:10:36 2025 +0900

    RDMA/iwcm: Fix use-after-free of work objects after cm_id destruction
    
    commit 6883b680e703c6b2efddb4e7a8d891ce1803d06b upstream.
    
    The commit 59c68ac31e15 ("iw_cm: free cm_id resources on the last
    deref") simplified cm_id resource management by freeing cm_id once all
    references to the cm_id were removed. The references are removed either
    upon completion of iw_cm event handlers or when the application destroys
    the cm_id. This commit introduced the use-after-free condition where
    cm_id_private object could still be in use by event handler works during
    the destruction of cm_id. The commit aee2424246f9 ("RDMA/iwcm: Fix a
    use-after-free related to destroying CM IDs") addressed this use-after-
    free by flushing all pending works at the cm_id destruction.
    
    However, still another use-after-free possibility remained. It happens
    with the work objects allocated for each cm_id_priv within
    alloc_work_entries() during cm_id creation, and subsequently freed in
    dealloc_work_entries() once all references to the cm_id are removed.
    If the cm_id's last reference is decremented in the event handler work,
    the work object for the work itself gets removed, and causes the use-
    after-free BUG below:
    
      BUG: KASAN: slab-use-after-free in __pwq_activate_work+0x1ff/0x250
      Read of size 8 at addr ffff88811f9cf800 by task kworker/u16:1/147091
    
      CPU: 2 UID: 0 PID: 147091 Comm: kworker/u16:1 Not tainted 6.15.0-rc2+ #27 PREEMPT(voluntary)
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-3.fc41 04/01/2014
      Workqueue:  0x0 (iw_cm_wq)
      Call Trace:
       <TASK>
       dump_stack_lvl+0x6a/0x90
       print_report+0x174/0x554
       ? __virt_addr_valid+0x208/0x430
       ? __pwq_activate_work+0x1ff/0x250
       kasan_report+0xae/0x170
       ? __pwq_activate_work+0x1ff/0x250
       __pwq_activate_work+0x1ff/0x250
       pwq_dec_nr_in_flight+0x8c5/0xfb0
       process_one_work+0xc11/0x1460
       ? __pfx_process_one_work+0x10/0x10
       ? assign_work+0x16c/0x240
       worker_thread+0x5ef/0xfd0
       ? __pfx_worker_thread+0x10/0x10
       kthread+0x3b0/0x770
       ? __pfx_kthread+0x10/0x10
       ? rcu_is_watching+0x11/0xb0
       ? _raw_spin_unlock_irq+0x24/0x50
       ? rcu_is_watching+0x11/0xb0
       ? __pfx_kthread+0x10/0x10
       ret_from_fork+0x30/0x70
       ? __pfx_kthread+0x10/0x10
       ret_from_fork_asm+0x1a/0x30
       </TASK>
    
      Allocated by task 147416:
       kasan_save_stack+0x2c/0x50
       kasan_save_track+0x10/0x30
       __kasan_kmalloc+0xa6/0xb0
       alloc_work_entries+0xa9/0x260 [iw_cm]
       iw_cm_connect+0x23/0x4a0 [iw_cm]
       rdma_connect_locked+0xbfd/0x1920 [rdma_cm]
       nvme_rdma_cm_handler+0x8e5/0x1b60 [nvme_rdma]
       cma_cm_event_handler+0xae/0x320 [rdma_cm]
       cma_work_handler+0x106/0x1b0 [rdma_cm]
       process_one_work+0x84f/0x1460
       worker_thread+0x5ef/0xfd0
       kthread+0x3b0/0x770
       ret_from_fork+0x30/0x70
       ret_from_fork_asm+0x1a/0x30
    
      Freed by task 147091:
       kasan_save_stack+0x2c/0x50
       kasan_save_track+0x10/0x30
       kasan_save_free_info+0x37/0x60
       __kasan_slab_free+0x4b/0x70
       kfree+0x13a/0x4b0
       dealloc_work_entries+0x125/0x1f0 [iw_cm]
       iwcm_deref_id+0x6f/0xa0 [iw_cm]
       cm_work_handler+0x136/0x1ba0 [iw_cm]
       process_one_work+0x84f/0x1460
       worker_thread+0x5ef/0xfd0
       kthread+0x3b0/0x770
       ret_from_fork+0x30/0x70
       ret_from_fork_asm+0x1a/0x30
    
      Last potentially related work creation:
       kasan_save_stack+0x2c/0x50
       kasan_record_aux_stack+0xa3/0xb0
       __queue_work+0x2ff/0x1390
       queue_work_on+0x67/0xc0
       cm_event_handler+0x46a/0x820 [iw_cm]
       siw_cm_upcall+0x330/0x650 [siw]
       siw_cm_work_handler+0x6b9/0x2b20 [siw]
       process_one_work+0x84f/0x1460
       worker_thread+0x5ef/0xfd0
       kthread+0x3b0/0x770
       ret_from_fork+0x30/0x70
       ret_from_fork_asm+0x1a/0x30
    
    This BUG is reproducible by repeating the blktests test case nvme/061
    for the rdma transport and the siw driver.
    
    To avoid the use-after-free of cm_id_private work objects, ensure that
    the last reference to the cm_id is decremented not in the event handler
    works, but in the cm_id destruction context. For that purpose, move
    iwcm_deref_id() call from destroy_cm_id() to the callers of
    destroy_cm_id(). In iw_destroy_cm_id(), call iwcm_deref_id() after
    flushing the pending works.
    
    During the fix work, I noticed that iw_destroy_cm_id() is called from
    cm_work_handler() and process_event() context. However, the comment of
    iw_destroy_cm_id() notes that the function "cannot be called by the
    event thread". Drop the false comment.
    
    Closes: https://lore.kernel.org/linux-rdma/r5676e754sv35aq7cdsqrlnvyhiq5zktteaurl7vmfih35efko@z6lay7uypy3c/
    Fixes: 59c68ac31e15 ("iw_cm: free cm_id resources on the last deref")
    Cc: [email protected]
    Signed-off-by: Shin'ichiro Kawasaki <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Zhu Yanjun <[email protected]>
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
regulator: max14577: Add error check for max14577_read_reg() [+ + +]
Author: Wentao Liang <[email protected]>
Date:   Mon May 26 10:56:27 2025 +0800

    regulator: max14577: Add error check for max14577_read_reg()
    
    commit 65271f868cb1dca709ff69e45939bbef8d6d0b70 upstream.
    
    The function max14577_reg_get_current_limit() calls the function
    max14577_read_reg(), but does not check its return value. A proper
    implementation can be found in max14577_get_online().
    
    Add a error check for the max14577_read_reg() and return error code
    if the function fails.
    
    Fixes: b0902bbeb768 ("regulator: max14577: Add regulator driver for Maxim 14577")
    Cc: [email protected] # v3.14
    Signed-off-by: Wentao Liang <[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: max20086: Change enable gpio to optional [+ + +]
Author: João Paulo Gonçalves <[email protected]>
Date:   Sun Apr 20 15:28:02 2025 -0300

    regulator: max20086: Change enable gpio to optional
    
    commit e8ac7336dd62f0443a675ed80b17f0f0e6846e20 upstream.
    
    The enable pin can be configured as always enabled by the hardware. Make
    the enable gpio request optional so the driver doesn't fail to probe
    when `enable-gpios` property is not present in the device tree.
    
    Cc: [email protected]
    Fixes: bfff546aae50 ("regulator: Add MAX20086-MAX20089 driver")
    Signed-off-by: João Paulo Gonçalves <[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: max20086: Fix MAX200086 chip id [+ + +]
Author: João Paulo Gonçalves <[email protected]>
Date:   Sun Apr 20 15:28:01 2025 -0300

    regulator: max20086: Fix MAX200086 chip id
    
    commit 71406b6d1155d883c80c1b4405939a52f723aa05 upstream.
    
    >From MAX20086-MAX20089 datasheet, the id for a MAX20086 is 0x30 and not
    0x40. With the current code, the driver will fail on probe when the
    driver tries to identify the chip id from a MAX20086 device over I2C.
    
    Cc: [email protected]
    Fixes: bfff546aae50 ("regulator: Add MAX20086-MAX20089 driver")
    Signed-off-by: João Paulo Gonçalves <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
remoteproc: core: Cleanup acquired resources when rproc_handle_resources() fails in rproc_attach() [+ + +]
Author: Xiaolei Wang <[email protected]>
Date:   Wed Apr 30 17:20:42 2025 +0800

    remoteproc: core: Cleanup acquired resources when rproc_handle_resources() fails in rproc_attach()
    
    commit 7692c9fbedd9087dc9050903f58095915458d9b1 upstream.
    
    When rproc->state = RPROC_DETACHED and rproc_attach() is used
    to attach to the remote processor, if rproc_handle_resources()
    returns a failure, the resources allocated by imx_rproc_prepare()
    should be released, otherwise the following memory leak will occur.
    
    Since almost the same thing is done in imx_rproc_prepare() and
    rproc_resource_cleanup(), Function rproc_resource_cleanup() is able
    to deal with empty lists so it is better to fix the "goto" statements
    in rproc_attach(). replace the "unprepare_device" goto statement with
    "clean_up_resources" and get rid of the "unprepare_device" label.
    
    unreferenced object 0xffff0000861c5d00 (size 128):
    comm "kworker/u12:3", pid 59, jiffies 4294893509 (age 149.220s)
    hex dump (first 32 bytes):
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    00 00 02 88 00 00 00 00 00 00 10 00 00 00 00 00 ............
    backtrace:
     [<00000000f949fe18>] slab_post_alloc_hook+0x98/0x37c
     [<00000000adbfb3e7>] __kmem_cache_alloc_node+0x138/0x2e0
     [<00000000521c0345>] kmalloc_trace+0x40/0x158
     [<000000004e330a49>] rproc_mem_entry_init+0x60/0xf8
     [<000000002815755e>] imx_rproc_prepare+0xe0/0x180
     [<0000000003f61b4e>] rproc_boot+0x2ec/0x528
     [<00000000e7e994ac>] rproc_add+0x124/0x17c
     [<0000000048594076>] imx_rproc_probe+0x4ec/0x5d4
     [<00000000efc298a1>] platform_probe+0x68/0xd8
     [<00000000110be6fe>] really_probe+0x110/0x27c
     [<00000000e245c0ae>] __driver_probe_device+0x78/0x12c
     [<00000000f61f6f5e>] driver_probe_device+0x3c/0x118
     [<00000000a7874938>] __device_attach_driver+0xb8/0xf8
     [<0000000065319e69>] bus_for_each_drv+0x84/0xe4
     [<00000000db3eb243>] __device_attach+0xfc/0x18c
     [<0000000072e4e1a4>] device_initial_probe+0x14/0x20
    
    Fixes: 10a3d4079eae ("remoteproc: imx_rproc: move memory parsing to rproc_ops")
    Suggested-by: Mathieu Poirier <[email protected]>
    Signed-off-by: Xiaolei Wang <[email protected]>
    Reviewed-by: Peng Fan <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mathieu Poirier <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

remoteproc: core: Release rproc->clean_table after rproc_attach() fails [+ + +]
Author: Xiaolei Wang <[email protected]>
Date:   Wed Apr 30 17:20:43 2025 +0800

    remoteproc: core: Release rproc->clean_table after rproc_attach() fails
    
    commit bcd241230fdbc6005230f80a4f8646ff5a84f15b upstream.
    
    When rproc->state = RPROC_DETACHED is attached to remote processor
    through rproc_attach(), if rproc_handle_resources() returns failure,
    then the clean table should be released, otherwise the following
    memory leak will occur.
    
    unreferenced object 0xffff000086a99800 (size 1024):
    comm "kworker/u12:3", pid 59, jiffies 4294893670 (age 121.140s)
    hex dump (first 32 bytes):
    00 00 00 00 00 80 00 00 00 00 00 00 00 00 10 00 ............
    00 00 00 00 00 00 08 00 00 00 00 00 00 00 00 00 ............
    backtrace:
     [<000000008bbe4ca8>] slab_post_alloc_hook+0x98/0x3fc
     [<000000003b8a272b>] __kmem_cache_alloc_node+0x13c/0x230
     [<000000007a507c51>] __kmalloc_node_track_caller+0x5c/0x260
     [<0000000037818dae>] kmemdup+0x34/0x60
     [<00000000610f7f57>] rproc_boot+0x35c/0x56c
     [<0000000065f8871a>] rproc_add+0x124/0x17c
     [<00000000497416ee>] imx_rproc_probe+0x4ec/0x5d4
     [<000000003bcaa37d>] platform_probe+0x68/0xd8
     [<00000000771577f9>] really_probe+0x110/0x27c
     [<00000000531fea59>] __driver_probe_device+0x78/0x12c
     [<0000000080036a04>] driver_probe_device+0x3c/0x118
     [<000000007e0bddcb>] __device_attach_driver+0xb8/0xf8
     [<000000000cf1fa33>] bus_for_each_drv+0x84/0xe4
     [<000000001a53b53e>] __device_attach+0xfc/0x18c
     [<00000000d1a2a32c>] device_initial_probe+0x14/0x20
     [<00000000d8f8b7ae>] bus_probe_device+0xb0/0xb4
     unreferenced object 0xffff0000864c9690 (size 16):
    
    Fixes: 9dc9507f1880 ("remoteproc: Properly deal with the resource table when detaching")
    Signed-off-by: Xiaolei Wang <[email protected]>
    Reviewed-by: Peng Fan <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mathieu Poirier <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "bus: ti-sysc: Probe for l4_wkup and l4_cfg interconnect devices first" [+ + +]
Author: Alexander Sverdlin <[email protected]>
Date:   Tue Apr 1 11:06:34 2025 +0200

    Revert "bus: ti-sysc: Probe for l4_wkup and l4_cfg interconnect devices first"
    
    [ Upstream commit 36305857b1ead8f6ca033a913162ebc09bee0b43 ]
    
    This reverts commit 4700a00755fb5a4bb5109128297d6fd2d1272ee6.
    
    It breaks target-module@2b300050 ("ti,sysc-omap2") probe on AM62x in a case
    when minimally-configured system tries to network-boot:
    
    [    6.888776] probe of 2b300050.target-module returned 517 after 258 usecs
    [   17.129637] probe of 2b300050.target-module returned 517 after 708 usecs
    [   17.137397] platform 2b300050.target-module: deferred probe pending: (reason unknown)
    [   26.878471] Waiting up to 100 more seconds for network.
    
    There are minimal configurations possible when the deferred device is not
    being probed any more (because everything else has been successfully
    probed) and deferral lists are not processed any more.
    
    Stable mmc enumeration can be achieved by filling /aliases node properly
    (4700a00755fb commit's rationale).
    
    After revert:
    
    [    9.006816] IP-Config: Complete:
    [    9.010058]      device=lan0, ...
    
    Tested-by: Andreas Kemnade <[email protected]> # GTA04, Panda, BT200
    Reviewed-by: Tony Lindgren <[email protected]>
    Signed-off-by: Alexander Sverdlin <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Kevin Hilman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Revert "cpufreq: tegra186: Share policy per cluster" [+ + +]
Author: Jon Hunter <[email protected]>
Date:   Thu Jun 5 13:53:41 2025 +0100

    Revert "cpufreq: tegra186: Share policy per cluster"
    
    This reverts commit ac64f0e893ff370c4d3426c83c1bd0acae75bcf4 which is
    upstream commit be4ae8c19492cd6d5de61ccb34ffb3f5ede5eec8.
    
    This commit is causing a suspend regression on Tegra186 Jetson TX2 with
    Linux v6.12.y kernels. This is not seen with Linux v6.15 that includes
    this change but indicates that there are there changes missing.
    Therefore, revert this change.
    
    Fixes: ac64f0e893ff ("cpufreq: tegra186: Share policy per cluster")
    Link: https://lore.kernel.org/linux-tegra/[email protected]/
    Signed-off-by: Jon Hunter <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "x86/bugs: Make spectre user default depend on MITIGATION_SPECTRE_V2" on v6.6 and older [+ + +]
Author: Breno Leitao <[email protected]>
Date:   Fri Jun 20 06:51:23 2025 -0700

    Revert "x86/bugs: Make spectre user default depend on MITIGATION_SPECTRE_V2" on v6.6 and older
    
    This reverts commit 7adb96687ce8819de5c7bb172c4eeb6e45736e06 which is
    commit 98fdaeb296f51ef08e727a7cc72e5b5c864c4f4d upstream.
    
    commit 7adb96687ce8 ("x86/bugs: Make spectre user default depend on
    MITIGATION_SPECTRE_V2") depends on commit 72c70f480a70 ("x86/bugs: Add
    a separate config for Spectre V2"), which introduced
    MITIGATION_SPECTRE_V2.
    
    commit 72c70f480a70 ("x86/bugs: Add a separate config for Spectre V2")
    never landed in stable tree, thus, stable tree doesn't have
    MITIGATION_SPECTRE_V2, that said, commit 7adb96687ce8 ("x86/bugs: Make
    spectre user default depend on MITIGATION_SPECTRE_V2") has no value if
    the dependecy was not applied.
    
    Revert commit 7adb96687ce8 ("x86/bugs: Make spectre user default
    depend on MITIGATION_SPECTRE_V2")  in stable kernel which landed in in
    5.4.294, 5.10.238, 5.15.185, 6.1.141 and 6.6.93 stable versions.
    
    Cc: [email protected]
    Cc: [email protected]
    Cc: [email protected]
    Cc: [email protected]
    Cc: [email protected]
    Cc: [email protected] # 6.6 6.1 5.15 5.10 5.4
    Reported-by: Brad Spengler <[email protected]>
    Reported-by: Salvatore Bonaccorso <[email protected]>
    Signed-off-by: Breno Leitao <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
RISC-V: KVM: Don't treat SBI HFENCE calls as NOPs [+ + +]
Author: Anup Patel <[email protected]>
Date:   Thu Jun 5 11:44:47 2025 +0530

    RISC-V: KVM: Don't treat SBI HFENCE calls as NOPs
    
    [ Upstream commit 2e7be162996640bbe3b6da694cc064c511b8a5d9 ]
    
    The SBI specification clearly states that SBI HFENCE calls should
    return SBI_ERR_NOT_SUPPORTED when one of the target hart doesn’t
    support hypervisor extension (aka nested virtualization in-case
    of KVM RISC-V).
    
    Fixes: c7fa3c48de86 ("RISC-V: KVM: Treat SBI HFENCE calls as NOPs")
    Reviewed-by: Atish Patra <[email protected]>
    Signed-off-by: Anup Patel <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Anup Patel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

RISC-V: KVM: Fix the size parameter check in SBI SFENCE calls [+ + +]
Author: Anup Patel <[email protected]>
Date:   Thu Jun 5 11:44:46 2025 +0530

    RISC-V: KVM: Fix the size parameter check in SBI SFENCE calls
    
    [ Upstream commit 6aba0cb5bba6141158d5449f2cf53187b7f755f9 ]
    
    As-per the SBI specification, an SBI remote fence operation applies
    to the entire address space if either:
    1) start_addr and size are both 0
    2) size is equal to 2^XLEN-1
    
    >From the above, only #1 is checked by SBI SFENCE calls so fix the
    size parameter check in SBI SFENCE calls to cover #2 as well.
    
    Fixes: 13acfec2dbcc ("RISC-V: KVM: Add remote HFENCE functions based on VCPU requests")
    Reviewed-by: Atish Patra <[email protected]>
    Signed-off-by: Anup Patel <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Anup Patel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
s390/pci: Fix __pcilg_mio_inuser() inline assembly [+ + +]
Author: Heiko Carstens <[email protected]>
Date:   Mon May 19 18:07:11 2025 +0200

    s390/pci: Fix __pcilg_mio_inuser() inline assembly
    
    commit c4abe6234246c75cdc43326415d9cff88b7cf06c upstream.
    
    Use "a" constraint for the shift operand of the __pcilg_mio_inuser() inline
    assembly. The used "d" constraint allows the compiler to use any general
    purpose register for the shift operand, including register zero.
    
    If register zero is used this my result in incorrect code generation:
    
     8f6:   a7 0a ff f8             ahi     %r0,-8
     8fa:   eb 32 00 00 00 0c       srlg    %r3,%r2,0  <----
    
    If register zero is selected to contain the shift value, the srlg
    instruction ignores the contents of the register and always shifts zero
    bits. Therefore use the "a" constraint which does not permit to select
    register zero.
    
    Fixes: f058599e22d5 ("s390/pci: Fix s390_mmio_read/write with MIO")
    Cc: [email protected]
    Reported-by: Niklas Schnelle <[email protected]>
    Reviewed-by: Niklas Schnelle <[email protected]>
    Signed-off-by: Heiko Carstens <[email protected]>
    Signed-off-by: Niklas Schnelle <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
scsi: elx: efct: Fix memory leak in efct_hw_parse_filter() [+ + +]
Author: Vitaliy Shevtsov <[email protected]>
Date:   Thu Jun 12 21:35:18 2025 +0500

    scsi: elx: efct: Fix memory leak in efct_hw_parse_filter()
    
    [ Upstream commit 2a8a5a5dd06eef580f9818567773fd75057cb875 ]
    
    strsep() modifies the address of the pointer passed to it so that it no
    longer points to the original address. This means kfree() gets the wrong
    pointer.
    
    Fix this by passing unmodified pointer returned from kstrdup() to
    kfree().
    
    Found by Linux Verification Center (linuxtesting.org) with Svace.
    
    Fixes: 4df84e846624 ("scsi: elx: efct: Driver initialization routines")
    Signed-off-by: Vitaliy Shevtsov <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Daniel Wagner <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: lpfc: Fix lpfc_check_sli_ndlp() handling for GEN_REQUEST64 commands [+ + +]
Author: Justin Tee <[email protected]>
Date:   Fri Apr 25 12:47:59 2025 -0700

    scsi: lpfc: Fix lpfc_check_sli_ndlp() handling for GEN_REQUEST64 commands
    
    [ Upstream commit 05ae6c9c7315d844fbc15afe393f5ba5e5771126 ]
    
    In lpfc_check_sli_ndlp(), the get_job_els_rsp64_did remote_id assignment
    does not apply for GEN_REQUEST64 commands as it only has meaning for a
    ELS_REQUEST64 command.  So, if (iocb->ndlp == ndlp) is false, we could
    erroneously return the wrong value.  Fix by replacing the fallthrough
    statement with a break statement before the remote_id check.
    
    Signed-off-by: Justin Tee <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: lpfc: Use memcpy() for BIOS version [+ + +]
Author: Daniel Wagner <[email protected]>
Date:   Wed Apr 9 13:34:22 2025 +0200

    scsi: lpfc: Use memcpy() for BIOS version
    
    [ Upstream commit ae82eaf4aeea060bb736c3e20c0568b67c701d7d ]
    
    The strlcat() with FORTIFY support is triggering a panic because it
    thinks the target buffer will overflow although the correct target
    buffer size is passed in.
    
    Anyway, instead of memset() with 0 followed by a strlcat(), just use
    memcpy() and ensure that the resulting buffer is NULL terminated.
    
    BIOSVersion is only used for the lpfc_printf_log() which expects a
    properly terminated string.
    
    Signed-off-by: Daniel Wagner <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Justin Tee <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: s390: zfcp: Ensure synchronous unit_add [+ + +]
Author: Peter Oberparleiter <[email protected]>
Date:   Tue Jun 3 20:21:56 2025 +0200

    scsi: s390: zfcp: Ensure synchronous unit_add
    
    commit 9697ca0d53e3db357be26d2414276143c4a2cd49 upstream.
    
    Improve the usability of the unit_add sysfs attribute by ensuring that
    the associated FCP LUN scan processing is completed synchronously.  This
    enables configuration tooling to consistently determine the end of the
    scan process to allow for serialization of follow-on actions.
    
    While the scan process associated with unit_add typically completes
    synchronously, it is deferred to an asynchronous background process if
    unit_add is used before initial remote port scanning has completed.  This
    occurs when unit_add is used immediately after setting the associated FCP
    device online.
    
    To ensure synchronous unit_add processing, wait for remote port scanning
    to complete before initiating the FCP LUN scan.
    
    Cc: [email protected]
    Reviewed-by: M Nikhil <[email protected]>
    Reviewed-by: Nihar Panda <[email protected]>
    Signed-off-by: Peter Oberparleiter <[email protected]>
    Signed-off-by: Nihar Panda <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: storvsc: Increase the timeouts to storvsc_timeout [+ + +]
Author: Dexuan Cui <[email protected]>
Date:   Fri Jun 6 13:57:39 2025 -0700

    scsi: storvsc: Increase the timeouts to storvsc_timeout
    
    commit b2f966568faaad326de97481096d0f3dc0971c43 upstream.
    
    Currently storvsc_timeout is only used in storvsc_sdev_configure(), and
    5s and 10s are used elsewhere. It turns out that rarely the 5s is not
    enough on Azure, so let's use storvsc_timeout everywhere.
    
    In case a timeout happens and storvsc_channel_init() returns an error,
    close the VMBus channel so that any host-to-guest messages in the
    channel's ringbuffer, which might come late, can be safely ignored.
    
    Add a "const" to storvsc_timeout.
    
    Cc: [email protected]
    Signed-off-by: Dexuan Cui <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Long Li <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sctp: Do not wake readers in __sctp_write_space() [+ + +]
Author: Petr Malat <[email protected]>
Date:   Fri May 16 10:17:28 2025 +0200

    sctp: Do not wake readers in __sctp_write_space()
    
    [ Upstream commit af295892a7abbf05a3c2ba7abc4d81bb448623d6 ]
    
    Function __sctp_write_space() doesn't set poll key, which leads to
    ep_poll_callback() waking up all waiters, not only these waiting
    for the socket being writable. Set the key properly using
    wake_up_interruptible_poll(), which is preferred over the sync
    variant, as writers are not woken up before at least half of the
    queue is available. Also, TCP does the same.
    
    Signed-off-by: Petr Malat <[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]>

 
selftests/x86: Add a test to detect infinite SIGTRAP handler loop [+ + +]
Author: Xin Li (Intel) <[email protected]>
Date:   Mon Jun 9 01:40:54 2025 -0700

    selftests/x86: Add a test to detect infinite SIGTRAP handler loop
    
    commit f287822688eeb44ae1cf6ac45701d965efc33218 upstream.
    
    When FRED is enabled, if the Trap Flag (TF) is set without an external
    debugger attached, it can lead to an infinite loop in the SIGTRAP
    handler.  To avoid this, the software event flag in the augmented SS
    must be cleared, ensuring that no single-step trap remains pending when
    ERETU completes.
    
    This test checks for that specific scenario—verifying whether the kernel
    correctly prevents an infinite SIGTRAP loop in this edge case when FRED
    is enabled.
    
    The test should _always_ pass with IDT event delivery, thus no need to
    disable the test even when FRED is not enabled.
    
    Signed-off-by: Xin Li (Intel) <[email protected]>
    Signed-off-by: Dave Hansen <[email protected]>
    Tested-by: Sohil Mehta <[email protected]>
    Cc:[email protected]
    Link: https://lore.kernel.org/all/20250609084054.2083189-3-xin%40zytor.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
selinux: fix selinux_xfrm_alloc_user() to set correct ctx_len [+ + +]
Author: Stephen Smalley <[email protected]>
Date:   Fri Jun 13 15:37:05 2025 -0400

    selinux: fix selinux_xfrm_alloc_user() to set correct ctx_len
    
    commit 86c8db86af43f52f682e53a0f2f0828683be1e52 upstream.
    
    We should count the terminating NUL byte as part of the ctx_len.
    Otherwise, UBSAN logs a warning:
      UBSAN: array-index-out-of-bounds in security/selinux/xfrm.c:99:14
      index 60 is out of range for type 'char [*]'
    
    The allocation itself is correct so there is no actual out of bounds
    indexing, just a warning.
    
    Cc: [email protected]
    Suggested-by: Christian Göttsche <[email protected]>
    Link: https://lore.kernel.org/selinux/CAEjxPJ6tA5+LxsGfOJokzdPeRomBHjKLBVR6zbrg+_w3ZZbM3A@mail.gmail.com/
    Signed-off-by: Stephen Smalley <[email protected]>
    Signed-off-by: Paul Moore <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
serial: sh-sci: Increment the runtime usage counter for the earlycon device [+ + +]
Author: Claudiu Beznea <[email protected]>
Date:   Thu Jan 16 20:22:49 2025 +0200

    serial: sh-sci: Increment the runtime usage counter for the earlycon device
    
    commit 651dee03696e1dfde6d9a7e8664bbdcd9a10ea7f upstream.
    
    In the sh-sci driver, serial ports are mapped to the sci_ports[] array,
    with earlycon mapped at index zero.
    
    The uart_add_one_port() function eventually calls __device_attach(),
    which, in turn, calls pm_request_idle(). The identified code path is as
    follows:
    
    uart_add_one_port() ->
      serial_ctrl_register_port() ->
        serial_core_register_port() ->
          serial_core_port_device_add() ->
            serial_base_port_add() ->
              device_add() ->
                bus_probe_device() ->
                  device_initial_probe() ->
                    __device_attach() ->
                      // ...
                      if (dev->p->dead) {
                        // ...
                      } else if (dev->driver) {
                        // ...
                      } else {
                        // ...
                        pm_request_idle(dev);
                        // ...
                      }
    
    The earlycon device clocks are enabled by the bootloader. However, the
    pm_request_idle() call in __device_attach() disables the SCI port clocks
    while earlycon is still active.
    
    The earlycon write function, serial_console_write(), calls
    sci_poll_put_char() via serial_console_putchar(). If the SCI port clocks
    are disabled, writing to earlycon may sometimes cause the SR.TDFE bit to
    remain unset indefinitely, causing the while loop in sci_poll_put_char()
    to never exit. On single-core SoCs, this can result in the system being
    blocked during boot when this issue occurs.
    
    To resolve this, increment the runtime PM usage counter for the earlycon
    SCI device before registering the UART port.
    
    Fixes: 0b0cced19ab1 ("serial: sh-sci: Add CONFIG_SERIAL_EARLYCON support")
    Cc: [email protected]
    Signed-off-by: Claudiu Beznea <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
smb: client: add NULL check in automount_fullpath [+ + +]
Author: Ruben Devos <[email protected]>
Date:   Sun Jun 1 19:18:55 2025 +0200

    smb: client: add NULL check in automount_fullpath
    
    commit f1e7a277a1736e12cc4bd6d93b8a5c439b8ca20c upstream.
    
    page is checked for null in __build_path_from_dentry_optional_prefix
    when tcon->origin_fullpath is not set. However, the check is missing when
    it is set.
    Add a check to prevent a potential NULL pointer dereference.
    
    Signed-off-by: Ruben Devos <[email protected]>
    Cc: [email protected]
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

smb: client: fix first command failure during re-negotiation [+ + +]
Author: zhangjian <[email protected]>
Date:   Thu Jun 19 09:18:29 2025 +0800

    smb: client: fix first command failure during re-negotiation
    
    commit 34331d7beed7576acfc98e991c39738b96162499 upstream.
    
    after fabc4ed200f9, server_unresponsive add a condition to check whether client
    need to reconnect depending on server->lstrp. When client failed to reconnect
    for some time and abort connection, server->lstrp is updated for the last time.
    In the following scene, server->lstrp is too old. This cause next command
    failure in re-negotiation rather than waiting for re-negotiation done.
    
    1. mount -t cifs -o username=Everyone,echo_internal=10 //$server_ip/export /mnt
    2. ssh $server_ip "echo b > /proc/sysrq-trigger &"
    3. ls /mnt
    4. sleep 21s
    5. ssh $server_ip "service firewalld stop"
    6. ls # return EHOSTDOWN
    
    If the interval between 5 and 6 is too small, 6 may trigger sending negotiation
    request. Before backgrounding cifsd thread try to receive negotiation response
    from server in cifs_readv_from_socket, server_unresponsive may trigger
    cifs_reconnect which cause 6 to be failed:
    
    ls thread
    ----------------
      smb2_negotiate
        server->tcpStatus = CifsInNegotiate
        compound_send_recv
          wait_for_compound_request
    
    cifsd thread
    ----------------
      cifs_readv_from_socket
        server_unresponsive
          server->tcpStatus == CifsInNegotiate && jiffies > server->lstrp + 20s
            cifs_reconnect
              cifs_abort_connection: mid_state = MID_RETRY_NEEDED
    
    ls thread
    ----------------
          cifs_sync_mid_result return EAGAIN
      smb2_negotiate return EHOSTDOWN
    
    Though server->lstrp means last server response time, it is updated in
    cifs_abort_connection and cifs_get_tcp_session. We can also update server->lstrp
    before switching into CifsInNegotiate state to avoid failure in 6.
    
    Fixes: 7ccc1465465d ("smb: client: fix hang in wait_for_response() for negproto")
    Acked-by: Paulo Alcantara (Red Hat) <[email protected]>
    Acked-by: Meetakshi Setiya <[email protected]>
    Signed-off-by: zhangjian <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

smb: fix secondary channel creation issue with kerberos by populating hostname when adding channels [+ + +]
Author: Bharath SM <[email protected]>
Date:   Mon Mar 17 15:57:27 2025 +0530

    smb: fix secondary channel creation issue with kerberos by populating hostname when adding channels
    
    commit 306cb65bb0cb243389fcbd0a66907d5bdea07d1e upstream.
    
    When mounting a share with kerberos authentication with multichannel
    support, share mounts correctly, but fails to create secondary
    channels. This occurs because the hostname is not populated when
    adding the channels. The hostname is necessary for the userspace
    cifs.upcall program to retrieve the required credentials and pass
    it back to kernel, without hostname secondary channels fails
    establish.
    
    Cc: [email protected]
    Reviewed-by: Shyam Prasad N <[email protected]>
    Signed-off-by: Bharath SM <[email protected]>
    Reported-by: xfuren <[email protected]>
    Link: https://bugzilla.samba.org/show_bug.cgi?id=15824
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

smb: improve directory cache reuse for readdir operations [+ + +]
Author: Bharath SM <[email protected]>
Date:   Wed Jun 11 16:59:02 2025 +0530

    smb: improve directory cache reuse for readdir operations
    
    commit 72dd7961a4bb4fa1fc456169a61dd12e68e50645 upstream.
    
    Currently, cached directory contents were not reused across subsequent
    'ls' operations because the cache validity check relied on comparing
    the ctx pointer, which changes with each readdir invocation. As a
    result, the cached dir entries was not marked as valid and the cache was
    not utilized for subsequent 'ls' operations.
    
    This change uses the file pointer, which remains consistent across all
    readdir calls for a given directory instance, to associate and validate
    the cache. As a result, cached directory contents can now be
    correctly reused, improving performance for repeated directory listings.
    
    Performance gains with local windows SMB server:
    
    Without the patch and default actimeo=1:
     1000 directory enumeration operations on dir with 10k files took 135.0s
    
    With this patch and actimeo=0:
     1000 directory enumeration operations on dir with 10k files took just 5.1s
    
    Signed-off-by: Bharath SM <[email protected]>
    Reviewed-by: Shyam Prasad N <[email protected]>
    Cc: [email protected]
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

smb: Log an error when close_all_cached_dirs fails [+ + +]
Author: Paul Aurich <[email protected]>
Date:   Wed Nov 20 08:01:54 2024 -0800

    smb: Log an error when close_all_cached_dirs fails
    
    commit a2182743a8b4969481f64aec4908ff162e8a206c upstream.
    
    Under low-memory conditions, close_all_cached_dirs() can't move the
    dentries to a separate list to dput() them once the locks are dropped.
    This will result in a "Dentry still in use" error, so add an error
    message that makes it clear this is what happened:
    
    [  495.281119] CIFS: VFS: \\otters.example.com\share Out of memory while dropping dentries
    [  495.281595] ------------[ cut here ]------------
    [  495.281887] BUG: Dentry ffff888115531138{i=78,n=/}  still in use (2) [unmount of cifs cifs]
    [  495.282391] WARNING: CPU: 1 PID: 2329 at fs/dcache.c:1536 umount_check+0xc8/0xf0
    
    Also, bail out of looping through all tcons as soon as a single
    allocation fails, since we're already in trouble, and kmalloc() attempts
    for subseqeuent tcons are likely to fail just like the first one did.
    
    Signed-off-by: Paul Aurich <[email protected]>
    Acked-by: Bharath SM <[email protected]>
    Suggested-by: Ruben Devos <[email protected]>
    Cc: [email protected]
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sock: Correct error checking condition for (assign|release)_proto_idx() [+ + +]
Author: Zijun Hu <[email protected]>
Date:   Thu Apr 10 09:01:27 2025 +0800

    sock: Correct error checking condition for (assign|release)_proto_idx()
    
    [ Upstream commit faeefc173be40512341b102cf1568aa0b6571acd ]
    
    (assign|release)_proto_idx() wrongly check find_first_zero_bit() failure
    by condition '(prot->inuse_idx == PROTO_INUSE_NR - 1)' obviously.
    
    Fix by correcting the condition to '(prot->inuse_idx == PROTO_INUSE_NR)'
    
    Signed-off-by: Zijun Hu <[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]>

 
software node: Correct a OOB check in software_node_get_reference_args() [+ + +]
Author: Zijun Hu <[email protected]>
Date:   Mon Apr 14 19:36:52 2025 +0800

    software node: Correct a OOB check in software_node_get_reference_args()
    
    [ Upstream commit 31e4e12e0e9609850cefd4b2e1adf782f56337d6 ]
    
    software_node_get_reference_args() wants to get @index-th element, so
    the property value requires at least '(index + 1) * sizeof(*ref)' bytes
    but that can not be guaranteed by current OOB check, and may cause OOB
    for malformed property.
    
    Fix by using as OOB check '((index + 1) * sizeof(*ref) > prop->length)'.
    
    Reviewed-by: Sakari Ailus <[email protected]>
    Signed-off-by: Zijun Hu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
staging: iio: ad5933: Correct settling cycles encoding per datasheet [+ + +]
Author: Gabriel Shahrouzi <[email protected]>
Date:   Sat Apr 19 21:30:09 2025 -0400

    staging: iio: ad5933: Correct settling cycles encoding per datasheet
    
    commit 60638e2a2d4bc03798f00d5ab65ce9b83cb8b03b upstream.
    
    The AD5933 datasheet (Table 13) lists the maximum cycles to be 0x7FC
    (2044).
    
    Clamp the user input to the maximum effective value of 0x7FC cycles.
    
    Fixes: f94aa354d676 ("iio: impedance-analyzer: New driver for AD5933/4 Impedance Converter, Network Analyzer")
    Cc: [email protected]
    Signed-off-by: Gabriel Shahrouzi <[email protected]>
    Reviewed-by: Marcelo Schmitt <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sunrpc: handle SVC_GARBAGE during svc auth processing as auth error [+ + +]
Author: Jeff Layton <[email protected]>
Date:   Thu Jun 19 06:01:55 2025 -0400

    sunrpc: handle SVC_GARBAGE during svc auth processing as auth error
    
    commit 94d10a4dba0bc482f2b01e39f06d5513d0f75742 upstream.
    
    tianshuo han reported a remotely-triggerable crash if the client sends a
    kernel RPC server a specially crafted packet. If decoding the RPC reply
    fails in such a way that SVC_GARBAGE is returned without setting the
    rq_accept_statp pointer, then that pointer can be dereferenced and a
    value stored there.
    
    If it's the first time the thread has processed an RPC, then that
    pointer will be set to NULL and the kernel will crash. In other cases,
    it could create a memory scribble.
    
    The server sunrpc code treats a SVC_GARBAGE return from svc_authenticate
    or pg_authenticate as if it should send a GARBAGE_ARGS reply. RFC 5531
    says that if authentication fails that the RPC should be rejected
    instead with a status of AUTH_ERR.
    
    Handle a SVC_GARBAGE return as an AUTH_ERROR, with a reason of
    AUTH_BADCRED instead of returning GARBAGE_ARGS in that case. This
    sidesteps the whole problem of touching the rpc_accept_statp pointer in
    this situation and avoids the crash.
    
    Cc: [email protected]
    Fixes: 29cd2927fb91 ("SUNRPC: Fix encoding of accepted but unsuccessful RPC replies")
    Reported-by: tianshuo han <[email protected]>
    Reviewed-by: Chuck Lever <[email protected]>
    Signed-off-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
SUNRPC: Prevent hang on NFS mount with xprtsec=[m]tls [+ + +]
Author: Chuck Lever <[email protected]>
Date:   Wed May 21 16:34:13 2025 -0400

    SUNRPC: Prevent hang on NFS mount with xprtsec=[m]tls
    
    commit 0bd2f6b8996d4f1ca4573652454987826730a04a upstream.
    
    Engineers at Hammerspace noticed that sometimes mounting with
    "xprtsec=tls" hangs for a minute or so, and then times out, even
    when the NFS server is reachable and responsive.
    
    kTLS shuts off data_ready callbacks if strp->msg_ready is set to
    mitigate data_ready callbacks when a full TLS record is not yet
    ready to be read from the socket.
    
    Normally msg_ready is clear when the first TLS record arrives on
    a socket. However, I observed that sometimes tls_setsockopt() sets
    strp->msg_ready, and that prevents forward progress because
    tls_data_ready() becomes a no-op.
    
    Moreover, Jakub says: "If there's a full record queued at the time
    when [tlshd] passes the socket back to the kernel, it's up to the
    reader to read the already queued data out." So SunRPC cannot
    expect a data_ready call when ingress data is already waiting.
    
    Add an explicit poll after SunRPC's upper transport is set up to
    pick up any data that arrived after the TLS handshake but before
    transport set-up is complete.
    
    Reported-by: Steve Sears <[email protected]>
    Suggested-by: Jakub Kacinski <[email protected]>
    Fixes: 75eb6af7acdf ("SUNRPC: Add a TCP-with-TLS RPC transport class")
    Tested-by: Mike Snitzer <[email protected]>
    Reviewed-by: Mike Snitzer <[email protected]>
    Cc: [email protected]
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Anna Schumaker <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tcp: always seek for minimal rtt in tcp_rcv_rtt_update() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Tue May 13 19:39:15 2025 +0000

    tcp: always seek for minimal rtt in tcp_rcv_rtt_update()
    
    [ Upstream commit b879dcb1aeeca278eacaac0b1e2425b1c7599f9f ]
    
    tcp_rcv_rtt_update() goal is to maintain an estimation of the RTT
    in tp->rcv_rtt_est.rtt_us, used by tcp_rcv_space_adjust()
    
    When TCP TS are enabled, tcp_rcv_rtt_update() is using
    EWMA to smooth the samples.
    
    Change this to immediately latch the incoming value if it
    is lower than tp->rcv_rtt_est.rtt_us, so that tcp_rcv_space_adjust()
    does not overshoot tp->rcvq_space.space and sk->sk_rcvbuf.
    
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

tcp: fix initial tp->rcvq_space.space value for passive TS enabled flows [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Tue May 13 19:39:14 2025 +0000

    tcp: fix initial tp->rcvq_space.space value for passive TS enabled flows
    
    [ Upstream commit cd171461b90a2d2cf230943df60d580174633718 ]
    
    tcp_rcv_state_process() must tweak tp->advmss for TS enabled flows
    before the call to tcp_init_transfer() / tcp_init_buffer_space().
    
    Otherwise tp->rcvq_space.space is off by 120 bytes
    (TCP_INIT_CWND * TCPOLEN_TSTAMP_ALIGNED).
    
    Signed-off-by: Eric Dumazet <[email protected]>
    Reviewed-by: Wei Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

tcp: fix passive TFO socket having invalid NAPI ID [+ + +]
Author: David Wei <[email protected]>
Date:   Tue Jun 17 14:21:02 2025 -0700

    tcp: fix passive TFO socket having invalid NAPI ID
    
    [ Upstream commit dbe0ca8da1f62b6252e7be6337209f4d86d4a914 ]
    
    There is a bug with passive TFO sockets returning an invalid NAPI ID 0
    from SO_INCOMING_NAPI_ID. Normally this is not an issue, but zero copy
    receive relies on a correct NAPI ID to process sockets on the right
    queue.
    
    Fix by adding a sk_mark_napi_id_set().
    
    Fixes: e5907459ce7e ("tcp: Record Rx hash and NAPI ID in tcp_child_process")
    Signed-off-by: David Wei <[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]>

tcp: fix tcp_packet_delayed() for tcp_is_non_sack_preventing_reopen() behavior [+ + +]
Author: Neal Cardwell <[email protected]>
Date:   Fri Jun 13 15:30:56 2025 -0400

    tcp: fix tcp_packet_delayed() for tcp_is_non_sack_preventing_reopen() behavior
    
    [ Upstream commit d0fa59897e049e84432600e86df82aab3dce7aa5 ]
    
    After the following commit from 2024:
    
    commit e37ab7373696 ("tcp: fix to allow timestamp undo if no retransmits were sent")
    
    ...there was buggy behavior where TCP connections without SACK support
    could easily see erroneous undo events at the end of fast recovery or
    RTO recovery episodes. The erroneous undo events could cause those
    connections to suffer repeated loss recovery episodes and high
    retransmit rates.
    
    The problem was an interaction between the non-SACK behavior on these
    connections and the undo logic. The problem is that, for non-SACK
    connections at the end of a loss recovery episode, if snd_una ==
    high_seq, then tcp_is_non_sack_preventing_reopen() holds steady in
    CA_Recovery or CA_Loss, but clears tp->retrans_stamp to 0. Then upon
    the next ACK the "tcp: fix to allow timestamp undo if no retransmits
    were sent" logic saw the tp->retrans_stamp at 0 and erroneously
    concluded that no data was retransmitted, and erroneously performed an
    undo of the cwnd reduction, restoring cwnd immediately to the value it
    had before loss recovery.  This caused an immediate burst of traffic
    and build-up of queues and likely another immediate loss recovery
    episode.
    
    This commit fixes tcp_packet_delayed() to ignore zero retrans_stamp
    values for non-SACK connections when snd_una is at or above high_seq,
    because tcp_is_non_sack_preventing_reopen() clears retrans_stamp in
    this case, so it's not a valid signal that we can undo.
    
    Note that the commit named in the Fixes footer restored long-present
    behavior from roughly 2005-2019, so apparently this bug was present
    for a while during that era, and this was simply not caught.
    
    Fixes: e37ab7373696 ("tcp: fix to allow timestamp undo if no retransmits were sent")
    Reported-by: Eric Wheeler <[email protected]>
    Closes: https://lore.kernel.org/netdev/[email protected]/
    Signed-off-by: Neal Cardwell <[email protected]>
    Co-developed-by: Yuchung Cheng <[email protected]>
    Signed-off-by: Yuchung Cheng <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tee: Prevent size calculation wraparound on 32-bit kernels [+ + +]
Author: Jann Horn <[email protected]>
Date:   Mon Apr 28 15:06:43 2025 +0200

    tee: Prevent size calculation wraparound on 32-bit kernels
    
    [ Upstream commit 39bb67edcc582b3b386a9ec983da67fa8a10ec03 ]
    
    The current code around TEE_IOCTL_PARAM_SIZE() is a bit wrong on
    32-bit kernels: Multiplying a user-provided 32-bit value with the
    size of a structure can wrap around on such platforms.
    
    Fix it by using saturating arithmetic for the size calculation.
    
    This has no security consequences because, in all users of
    TEE_IOCTL_PARAM_SIZE(), the subsequent kcalloc() implicitly checks
    for wrapping.
    
    Signed-off-by: Jann Horn <[email protected]>
    Signed-off-by: Jens Wiklander <[email protected]>
    Tested-by: Rouven Czerwinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tipc: fix null-ptr-deref when acquiring remote ip of ethernet bearer [+ + +]
Author: Haixia Qu <[email protected]>
Date:   Tue Jun 17 05:56:24 2025 +0000

    tipc: fix null-ptr-deref when acquiring remote ip of ethernet bearer
    
    [ Upstream commit f82727adcf2992822e12198792af450a76ebd5ef ]
    
    The reproduction steps:
    1. create a tun interface
    2. enable l2 bearer
    3. TIPC_NL_UDP_GET_REMOTEIP with media name set to tun
    
    tipc: Started in network mode
    tipc: Node identity 8af312d38a21, cluster identity 4711
    tipc: Enabled bearer <eth:syz_tun>, priority 1
    Oops: general protection fault
    KASAN: null-ptr-deref in range
    CPU: 1 UID: 1000 PID: 559 Comm: poc Not tainted 6.16.0-rc1+ #117 PREEMPT
    Hardware name: QEMU Ubuntu 24.04 PC
    RIP: 0010:tipc_udp_nl_dump_remoteip+0x4a4/0x8f0
    
    the ub was in fact a struct dev.
    
    when bid != 0 && skip_cnt != 0, bearer_list[bid] may be NULL or
    other media when other thread changes it.
    
    fix this by checking media_id.
    
    Fixes: 832629ca5c313 ("tipc: add UDP remoteip dump to netlink API")
    Signed-off-by: Haixia Qu <[email protected]>
    Reviewed-by: Tung Nguyen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

tipc: use kfree_sensitive() for aead cleanup [+ + +]
Author: Zilin Guan <[email protected]>
Date:   Fri May 23 11:47:17 2025 +0000

    tipc: use kfree_sensitive() for aead cleanup
    
    [ Upstream commit c8ef20fe7274c5766a317f9193b70bed717b6b3d ]
    
    The tipc_aead_free() function currently uses kfree() to release the aead
    structure. However, this structure contains sensitive information, such
    as key's SALT value, which should be securely erased from memory to
    prevent potential leakage.
    
    To enhance security, replace kfree() with kfree_sensitive() when freeing
    the aead structure. This change ensures that sensitive data is explicitly
    cleared before memory deallocation, aligning with the approach used in
    tipc_aead_init() and adhering to best practices for handling confidential
    information.
    
    Signed-off-by: Zilin Guan <[email protected]>
    Reviewed-by: Tung Nguyen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ublk: santizize the arguments from userspace when adding a device [+ + +]
Author: Ronnie Sahlberg <[email protected]>
Date:   Thu Jun 19 12:10:31 2025 +1000

    ublk: santizize the arguments from userspace when adding a device
    
    [ Upstream commit 8c8472855884355caf3d8e0c50adf825f83454b2 ]
    
    Sanity check the values for queue depth and number of queues
    we get from userspace when adding a device.
    
    Signed-off-by: Ronnie Sahlberg <[email protected]>
    Reviewed-by: Ming Lei <[email protected]>
    Fixes: 71f28f3136af ("ublk_drv: add io_uring based userspace block driver")
    Fixes: 62fe99cef94a ("ublk: add read()/write() support for ublk char device")
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
udmabuf: use sgtable-based scatterlist wrappers [+ + +]
Author: Marek Szyprowski <[email protected]>
Date:   Wed May 7 18:09:12 2025 +0200

    udmabuf: use sgtable-based scatterlist wrappers
    
    commit afe382843717d44b24ef5014d57dcbaab75a4052 upstream.
    
    Use common wrappers operating directly on the struct sg_table objects to
    fix incorrect use of scatterlists sync calls. dma_sync_sg_for_*()
    functions have to be called with the number of elements originally passed
    to dma_map_sg_*() function, not the one returned in sgtable's nents.
    
    Fixes: 1ffe09590121 ("udmabuf: fix dma-buf cpu access")
    CC: [email protected]
    Signed-off-by: Marek Szyprowski <[email protected]>
    Acked-by: Vivek Kasireddy <[email protected]>
    Reviewed-by: Christian König <[email protected]>
    Signed-off-by: Christian König <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
uio_hv_generic: Use correct size for interrupt and monitor pages [+ + +]
Author: Long Li <[email protected]>
Date:   Mon May 5 17:56:34 2025 -0700

    uio_hv_generic: Use correct size for interrupt and monitor pages
    
    commit c951ab8fd3589cf6991ed4111d2130816f2e3ac2 upstream.
    
    Interrupt and monitor pages should be in Hyper-V page size (4k bytes).
    This can be different from the system page size.
    
    This size is read and used by the user-mode program to determine the
    mapped data region. An example of such user-mode program is the VMBus
    driver in DPDK.
    
    Cc: [email protected]
    Fixes: 95096f2fbd10 ("uio-hv-generic: new userspace i/o driver for VMBus")
    Signed-off-by: Long Li <[email protected]>
    Reviewed-by: Michael Kelley <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Wei Liu <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usbnet: asix AX88772: leave the carrier control to phylink [+ + +]
Author: Krzysztof Hałasa <[email protected]>
Date:   Tue Apr 8 13:59:41 2025 +0200

    usbnet: asix AX88772: leave the carrier control to phylink
    
    [ Upstream commit 4145f00227ee80f21ab274e9cd9c09758e9bcf3d ]
    
    ASIX AX88772B based USB 10/100 Ethernet adapter doesn't come
    up ("carrier off"), despite the built-in 100BASE-FX PHY positive link
    indication. The internal PHY is configured (using EEPROM) in fixed
    100 Mbps full duplex mode.
    
    The primary problem appears to be using carrier_netif_{on,off}() while,
    at the same time, delegating carrier management to phylink. Use only the
    latter and remove "manual control" in the asix driver.
    
    I don't have any other AX88772 board here, but the problem doesn't seem
    specific to a particular board or settings - it's probably
    timing-dependent.
    
    Remove unused asix_adjust_link() as well.
    
    Signed-off-by: Krzysztof Hałasa <[email protected]>
    Tested-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]>

 
vgacon: Add check for vc_origin address range in vgacon_scroll() [+ + +]
Author: GONG Ruiqi <[email protected]>
Date:   Sun Apr 27 10:53:03 2025 +0800

    vgacon: Add check for vc_origin address range in vgacon_scroll()
    
    commit 864f9963ec6b4b76d104d595ba28110b87158003 upstream.
    
    Our in-house Syzkaller reported the following BUG (twice), which we
    believed was the same issue with [1]:
    
    ==================================================================
    BUG: KASAN: slab-out-of-bounds in vcs_scr_readw+0xc2/0xd0 drivers/tty/vt/vt.c:4740
    Read of size 2 at addr ffff88800f5bef60 by task syz.7.2620/12393
    ...
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:88 [inline]
     dump_stack_lvl+0x72/0xa0 lib/dump_stack.c:106
     print_address_description.constprop.0+0x6b/0x3d0 mm/kasan/report.c:364
     print_report+0xba/0x280 mm/kasan/report.c:475
     kasan_report+0xa9/0xe0 mm/kasan/report.c:588
     vcs_scr_readw+0xc2/0xd0 drivers/tty/vt/vt.c:4740
     vcs_write_buf_noattr drivers/tty/vt/vc_screen.c:493 [inline]
     vcs_write+0x586/0x840 drivers/tty/vt/vc_screen.c:690
     vfs_write+0x219/0x960 fs/read_write.c:584
     ksys_write+0x12e/0x260 fs/read_write.c:639
     do_syscall_x64 arch/x86/entry/common.c:51 [inline]
     do_syscall_64+0x59/0x110 arch/x86/entry/common.c:81
     entry_SYSCALL_64_after_hwframe+0x78/0xe2
     ...
     </TASK>
    
    Allocated by task 5614:
     kasan_save_stack+0x20/0x40 mm/kasan/common.c:45
     kasan_set_track+0x25/0x30 mm/kasan/common.c:52
     ____kasan_kmalloc mm/kasan/common.c:374 [inline]
     __kasan_kmalloc+0x8f/0xa0 mm/kasan/common.c:383
     kasan_kmalloc include/linux/kasan.h:201 [inline]
     __do_kmalloc_node mm/slab_common.c:1007 [inline]
     __kmalloc+0x62/0x140 mm/slab_common.c:1020
     kmalloc include/linux/slab.h:604 [inline]
     kzalloc include/linux/slab.h:721 [inline]
     vc_do_resize+0x235/0xf40 drivers/tty/vt/vt.c:1193
     vgacon_adjust_height+0x2d4/0x350 drivers/video/console/vgacon.c:1007
     vgacon_font_set+0x1f7/0x240 drivers/video/console/vgacon.c:1031
     con_font_set drivers/tty/vt/vt.c:4628 [inline]
     con_font_op+0x4da/0xa20 drivers/tty/vt/vt.c:4675
     vt_k_ioctl+0xa10/0xb30 drivers/tty/vt/vt_ioctl.c:474
     vt_ioctl+0x14c/0x1870 drivers/tty/vt/vt_ioctl.c:752
     tty_ioctl+0x655/0x1510 drivers/tty/tty_io.c:2779
     vfs_ioctl fs/ioctl.c:51 [inline]
     __do_sys_ioctl fs/ioctl.c:871 [inline]
     __se_sys_ioctl+0x12d/0x190 fs/ioctl.c:857
     do_syscall_x64 arch/x86/entry/common.c:51 [inline]
     do_syscall_64+0x59/0x110 arch/x86/entry/common.c:81
     entry_SYSCALL_64_after_hwframe+0x78/0xe2
    
    Last potentially related work creation:
     kasan_save_stack+0x20/0x40 mm/kasan/common.c:45
     __kasan_record_aux_stack+0x94/0xa0 mm/kasan/generic.c:492
     __call_rcu_common.constprop.0+0xc3/0xa10 kernel/rcu/tree.c:2713
     netlink_release+0x620/0xc20 net/netlink/af_netlink.c:802
     __sock_release+0xb5/0x270 net/socket.c:663
     sock_close+0x1e/0x30 net/socket.c:1425
     __fput+0x408/0xab0 fs/file_table.c:384
     __fput_sync+0x4c/0x60 fs/file_table.c:465
     __do_sys_close fs/open.c:1580 [inline]
     __se_sys_close+0x68/0xd0 fs/open.c:1565
     do_syscall_x64 arch/x86/entry/common.c:51 [inline]
     do_syscall_64+0x59/0x110 arch/x86/entry/common.c:81
     entry_SYSCALL_64_after_hwframe+0x78/0xe2
    
    Second to last potentially related work creation:
     kasan_save_stack+0x20/0x40 mm/kasan/common.c:45
     __kasan_record_aux_stack+0x94/0xa0 mm/kasan/generic.c:492
     __call_rcu_common.constprop.0+0xc3/0xa10 kernel/rcu/tree.c:2713
     netlink_release+0x620/0xc20 net/netlink/af_netlink.c:802
     __sock_release+0xb5/0x270 net/socket.c:663
     sock_close+0x1e/0x30 net/socket.c:1425
     __fput+0x408/0xab0 fs/file_table.c:384
     task_work_run+0x154/0x240 kernel/task_work.c:239
     exit_task_work include/linux/task_work.h:45 [inline]
     do_exit+0x8e5/0x1320 kernel/exit.c:874
     do_group_exit+0xcd/0x280 kernel/exit.c:1023
     get_signal+0x1675/0x1850 kernel/signal.c:2905
     arch_do_signal_or_restart+0x80/0x3b0 arch/x86/kernel/signal.c:310
     exit_to_user_mode_loop kernel/entry/common.c:111 [inline]
     exit_to_user_mode_prepare include/linux/entry-common.h:328 [inline]
     __syscall_exit_to_user_mode_work kernel/entry/common.c:207 [inline]
     syscall_exit_to_user_mode+0x1b3/0x1e0 kernel/entry/common.c:218
     do_syscall_64+0x66/0x110 arch/x86/entry/common.c:87
     entry_SYSCALL_64_after_hwframe+0x78/0xe2
    
    The buggy address belongs to the object at ffff88800f5be000
     which belongs to the cache kmalloc-2k of size 2048
    The buggy address is located 2656 bytes to the right of
     allocated 1280-byte region [ffff88800f5be000, ffff88800f5be500)
    
    ...
    
    Memory state around the buggy address:
     ffff88800f5bee00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
     ffff88800f5bee80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    >ffff88800f5bef00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
                                                           ^
     ffff88800f5bef80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
     ffff88800f5bf000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    ==================================================================
    
    By analyzing the vmcore, we found that vc->vc_origin was somehow placed
    one line prior to vc->vc_screenbuf when vc was in KD_TEXT mode, and
    further writings to /dev/vcs caused out-of-bounds reads (and writes
    right after) in vcs_write_buf_noattr().
    
    Our further experiments show that in most cases, vc->vc_origin equals to
    vga_vram_base when the console is in KD_TEXT mode, and it's around
    vc->vc_screenbuf for the KD_GRAPHICS mode. But via triggerring a
    TIOCL_SETVESABLANK ioctl beforehand, we can make vc->vc_origin be around
    vc->vc_screenbuf while the console is in KD_TEXT mode, and then by
    writing the special 'ESC M' control sequence to the tty certain times
    (depends on the value of `vc->state.y - vc->vc_top`), we can eventually
    move vc->vc_origin prior to vc->vc_screenbuf. Here's the PoC, tested on
    QEMU:
    
    ```
    int main() {
            const int RI_NUM = 10; // should be greater than `vc->state.y - vc->vc_top`
            int tty_fd, vcs_fd;
            const char *tty_path = "/dev/tty0";
            const char *vcs_path = "/dev/vcs";
            const char escape_seq[] = "\x1bM";  // ESC + M
            const char trigger_seq[] = "Let's trigger an OOB write.";
            struct vt_sizes vt_size = { 70, 2 };
            int blank = TIOCL_BLANKSCREEN;
    
            tty_fd = open(tty_path, O_RDWR);
    
            char vesa_mode[] = { TIOCL_SETVESABLANK, 1 };
            ioctl(tty_fd, TIOCLINUX, vesa_mode);
    
            ioctl(tty_fd, TIOCLINUX, &blank);
            ioctl(tty_fd, VT_RESIZE, &vt_size);
    
            for (int i = 0; i < RI_NUM; ++i)
                    write(tty_fd, escape_seq, sizeof(escape_seq) - 1);
    
            vcs_fd = open(vcs_path, O_RDWR);
            write(vcs_fd, trigger_seq, sizeof(trigger_seq));
    
            close(vcs_fd);
            close(tty_fd);
            return 0;
    }
    ```
    
    To solve this problem, add an address range validation check in
    vgacon_scroll(), ensuring vc->vc_origin never precedes vc_screenbuf.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=9c09fda97a1a65ea859b [1]
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Co-developed-by: Yi Yang <[email protected]>
    Signed-off-by: Yi Yang <[email protected]>
    Signed-off-by: GONG Ruiqi <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
video: screen_info: Relocate framebuffers behind PCI bridges [+ + +]
Author: Thomas Zimmermann <[email protected]>
Date:   Wed May 28 10:02:08 2025 +0200

    video: screen_info: Relocate framebuffers behind PCI bridges
    
    commit 2f29b5c231011b94007d2c8a6d793992f2275db1 upstream.
    
    Apply PCI host-bridge window offsets to screen_info framebuffers. Fixes
    invalid access to I/O memory.
    
    Resources behind a PCI host bridge can be relocated by a certain offset
    in the kernel's CPU address range used for I/O. The framebuffer memory
    range stored in screen_info refers to the CPU addresses as seen during
    boot (where the offset is 0). During boot up, firmware may assign a
    different memory offset to the PCI host bridge and thereby relocating
    the framebuffer address of the PCI graphics device as seen by the kernel.
    The information in screen_info must be updated as well.
    
    The helper pcibios_bus_to_resource() performs the relocation of the
    screen_info's framebuffer resource (given in PCI bus addresses). The
    result matches the I/O-memory resource of the PCI graphics device (given
    in CPU addresses). As before, we store away the information necessary to
    later update the information in screen_info itself.
    
    Commit 78aa89d1dfba ("firmware/sysfb: Update screen_info for relocated
    EFI framebuffers") added the code for updating screen_info. It is based
    on similar functionality that pre-existed in efifb. Efifb uses a pointer
    to the PCI resource, while the newer code does a memcpy of the region.
    Hence efifb sees any updates to the PCI resource and avoids the issue.
    
    v3:
    - Only use struct pci_bus_region for PCI bus addresses (Bjorn)
    - Clarify address semantics in commit messages and comments (Bjorn)
    v2:
    - Fixed tags (Takashi, Ivan)
    - Updated information on efifb
    
    Signed-off-by: Thomas Zimmermann <[email protected]>
    Reviewed-by: Javier Martinez Canillas <[email protected]>
    Reported-by: "Ivan T. Ivanov" <[email protected]>
    Closes: https://bugzilla.suse.com/show_bug.cgi?id=1240696
    Tested-by: "Ivan T. Ivanov" <[email protected]>
    Fixes: 78aa89d1dfba ("firmware/sysfb: Update screen_info for relocated EFI framebuffers")
    Cc: [email protected]
    Cc: <[email protected]> # v6.9+
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
vxlan: Do not treat dst cache initialization errors as fatal [+ + +]
Author: Ido Schimmel <[email protected]>
Date:   Tue Apr 15 15:11:41 2025 +0300

    vxlan: Do not treat dst cache initialization errors as fatal
    
    [ Upstream commit 20c76dadc783759fd3819d289c72be590660cc8b ]
    
    FDB entries are allocated in an atomic context as they can be added from
    the data path when learning is enabled.
    
    After converting the FDB hash table to rhashtable, the insertion rate
    will be much higher (*) which will entail a much higher rate of per-CPU
    allocations via dst_cache_init().
    
    When adding a large number of entries (e.g., 256k) in a batch, a small
    percentage (< 0.02%) of these per-CPU allocations will fail [1]. This
    does not happen with the current code since the insertion rate is low
    enough to give the per-CPU allocator a chance to asynchronously create
    new chunks of per-CPU memory.
    
    Given that:
    
    a. Only a small percentage of these per-CPU allocations fail.
    
    b. The scenario where this happens might not be the most realistic one.
    
    c. The driver can work correctly without dst caches. The dst_cache_*()
    APIs first check that the dst cache was properly initialized.
    
    d. The dst caches are not always used (e.g., 'tos inherit').
    
    It seems reasonable to not treat these allocation failures as fatal.
    
    Therefore, do not bail when dst_cache_init() fails and suppress warnings
    by specifying '__GFP_NOWARN'.
    
    [1] percpu: allocation failed, size=40 align=8 atomic=1, atomic alloc failed, no space left
    
    (*) 97% reduction in average latency of vxlan_fdb_update() when adding
    256k entries in a batch.
    
    Reviewed-by: Petr Machata <[email protected]>
    Signed-off-by: Ido Schimmel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Nikolay Aleksandrov <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
watchdog: da9052_wdt: respect TWDMIN [+ + +]
Author: Marcus Folkesson <[email protected]>
Date:   Wed Mar 26 09:29:51 2025 +0100

    watchdog: da9052_wdt: respect TWDMIN
    
    [ Upstream commit 325f510fcd9cda5a44bcb662b74ba4e3dabaca10 ]
    
    We have to wait at least the minimium time for the watchdog window
    (TWDMIN) before writings to the wdt register after the
    watchdog is activated.
    Otherwise the chip will assert TWD_ERROR and power down to reset mode.
    
    Signed-off-by: Marcus Folkesson <[email protected]>
    Reviewed-by: Guenter Roeck <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Wim Van Sebroeck <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

watchdog: fix watchdog may detect false positive of softlockup [+ + +]
Author: Luo Gengkun <[email protected]>
Date:   Mon Apr 21 03:50:21 2025 +0000

    watchdog: fix watchdog may detect false positive of softlockup
    
    commit 7123dbbef88cfd9f09e8a7899b0911834600cfa3 upstream.
    
    When updating `watchdog_thresh`, there is a race condition between writing
    the new `watchdog_thresh` value and stopping the old watchdog timer.  If
    the old timer triggers during this window, it may falsely detect a
    softlockup due to the old interval and the new `watchdog_thresh` value
    being used.  The problem can be described as follow:
    
     # We asuume previous watchdog_thresh is 60, so the watchdog timer is
     # coming every 24s.
    echo 10 > /proc/sys/kernel/watchdog_thresh (User space)
    |
    +------>+ update watchdog_thresh (We are in kernel now)
            |
            |         # using old interval and new `watchdog_thresh`
            +------>+ watchdog hrtimer (irq context: detect softlockup)
                    |
                    |
            +-------+
            |
            |
            + softlockup_stop_all
    
    To fix this problem, introduce a shadow variable for `watchdog_thresh`.
    The update to the actual `watchdog_thresh` is delayed until after the old
    timer is stopped, preventing false positives.
    
    The following testcase may help to understand this problem.
    
    ---------------------------------------------
    echo RT_RUNTIME_SHARE > /sys/kernel/debug/sched/features
    echo -1 > /proc/sys/kernel/sched_rt_runtime_us
    echo 0 > /sys/kernel/debug/sched/fair_server/cpu3/runtime
    echo 60 > /proc/sys/kernel/watchdog_thresh
    taskset -c 3 chrt -r 99 /bin/bash -c "while true;do true; done" &
    echo 10 > /proc/sys/kernel/watchdog_thresh &
    ---------------------------------------------
    
    The test case above first removes the throttling restrictions for
    real-time tasks.  It then sets watchdog_thresh to 60 and executes a
    real-time task ,a simple while(1) loop, on cpu3.  Consequently, the final
    command gets blocked because the presence of this real-time thread
    prevents kworker:3 from being selected by the scheduler.  This eventually
    triggers a softlockup detection on cpu3 due to watchdog_timer_fn operating
    with inconsistent variable - using both the old interval and the updated
    watchdog_thresh simultaneously.
    
    [[email protected]: fix the SOFTLOCKUP_DETECTOR=n case]
      Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Luo Gengkun <[email protected]>
    Signed-off-by: Nysal Jan K.A. <[email protected]>
    Cc: Doug Anderson <[email protected]>
    Cc: Joel Granados <[email protected]>
    Cc: Song Liu <[email protected]>
    Cc: Thomas Gleinxer <[email protected]>
    Cc: "Nysal Jan K.A." <[email protected]>
    Cc: Venkat Rao Bagalkote <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
wifi: ath11k: determine PM policy based on machine model [+ + +]
Author: Baochen Qiang <[email protected]>
Date:   Fri Mar 28 13:32:24 2025 +0800

    wifi: ath11k: determine PM policy based on machine model
    
    [ Upstream commit ce8669a27016354dfa8bf3c954255cb9f3583bae ]
    
    To handle the Lenovo unexpected wakeup issue [1], previously we revert
    commit 166a490f59ac ("wifi: ath11k: support hibernation"). So currently
    WLAN target is put into WoWLAN mode during suspend. This is a temporary
    solution as it does not work on machines where WLAN power is cut off.
    
    The thought here is that we do WoWLAN suspend on Lenovo machines while
    do non-WoWLAN suspend (which is done in the reverted commit) on other
    machines. This requires us to identify Lenovo machines from others.
    For that purpose, read board vendor and product name from DMI interface,
    match it against all known affected machines. If there is a match, choose
    WoWLAN suspend mode, else choose non-WoWLAN mode. Save the mode in ab
    for later reference.
    
    [1] https://bugzilla.kernel.org/show_bug.cgi?id=219196
    
    Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.30
    
    Tested-by: Muhammad Usama Anjum <[email protected]>
    Tested-by: Takashi Iwai <[email protected]>
    Signed-off-by: Baochen Qiang <[email protected]>
    Link: https://patch.msgid.link/20250328-ath11k-bring-hibernation-back-v3-1-23405ae23431@quicinc.com
    Signed-off-by: Jeff Johnson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: ath11k: Fix QMI memory reuse logic [+ + +]
Author: Muhammad Usama Anjum <[email protected]>
Date:   Mon Apr 28 13:02:41 2025 +0500

    wifi: ath11k: Fix QMI memory reuse logic
    
    [ Upstream commit cd2e7bae92bd7e65063ab8d04721d2b711ba4cbe ]
    
    Firmware requests 2 segments at first. The first segment is of 6799360
    whose allocation fails due to dma remapping not available. The success
    is returned to firmware. Then firmware asks for 22 smaller segments
    instead of 2 big ones. Those get allocated successfully. At suspend/
    hibernation time, these segments aren't freed as they will be reused
    by firmware after resuming.
    
    After resuming, the firmware asks for the 2 segments again with the
    first segment of 6799360 size. Since chunk->vaddr is not NULL, the
    type and size are compared with the previous type and size to know if
    it can be reused or not. Unfortunately, it is detected that it cannot
    be reused and this first smaller segment is freed. Then we continue to
    allocate 6799360 size memory which fails and ath11k_qmi_free_target_mem_chunk()
    is called which frees the second smaller segment as well. Later success
    is returned to firmware which asks for 22 smaller segments again. But
    as we had freed 2 segments already, we'll allocate the first 2 new
    smaller segments again and reuse the remaining 20. Hence 20 small
    segments are being reused instead of 22.
    
    Add skip logic when vaddr is set, but size/type don't match. Use the
    same skip and success logic as used when dma_alloc_coherent() fails.
    By skipping, the possibility of resume failure due to kernel failing to
    allocate memory for QMI can be avoided.
    
            kernel: ath11k_pci 0000:03:00.0: failed to allocate dma memory for qmi (524288 B type 1)
            ath11k_pci 0000:03:00.0: failed to allocate qmi target memory: -22
    
    Tested-on: WCN6855 WLAN.HSP.1.1-03926.13-QCAHSPSWPL_V2_SILICONZ_CE-2.52297.6
    
    Signed-off-by: Muhammad Usama Anjum <[email protected]>
    Reviewed-by: Baochen Qiang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jeff Johnson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: ath11k: fix ring-buffer corruption [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Mar 21 10:49:16 2025 +0100

    wifi: ath11k: fix ring-buffer corruption
    
    commit 6d037a372f817e9fcb56482f37917545596bd776 upstream.
    
    Users of the Lenovo ThinkPad X13s have reported that Wi-Fi sometimes
    breaks and the log fills up with errors like:
    
        ath11k_pci 0006:01:00.0: HTC Rx: insufficient length, got 1484, expected 1492
        ath11k_pci 0006:01:00.0: HTC Rx: insufficient length, got 1460, expected 1484
    
    which based on a quick look at the driver seemed to indicate some kind
    of ring-buffer corruption.
    
    Miaoqing Pan tracked it down to the host seeing the updated destination
    ring head pointer before the updated descriptor, and the error handling
    for that in turn leaves the ring buffer in an inconsistent state.
    
    Add the missing memory barrier to make sure that the descriptor is read
    after the head pointer to address the root cause of the corruption while
    fixing up the error handling in case there are ever any (ordering) bugs
    on the device side.
    
    Note that the READ_ONCE() are only needed to avoid compiler mischief in
    case the ring-buffer helpers are ever inlined.
    
    Tested-on: WCN6855 hw2.1 WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.41
    
    Fixes: d5c65159f289 ("ath11k: driver for Qualcomm IEEE 802.11ax devices")
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218623
    Link: https://lore.kernel.org/[email protected]
    Cc: Miaoqing Pan <[email protected]>
    Cc: [email protected]      # 5.6
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Miaoqing Pan <[email protected]>
    Tested-by: Steev Klimaszewski <[email protected]>
    Tested-by: Jens Glathe <[email protected]>
    Tested-by: Clayton Craft <[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: ath11k: fix rx completion meta data corruption [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Mar 21 15:53:02 2025 +0100

    wifi: ath11k: fix rx completion meta data corruption
    
    commit ab52e3e44fe9b666281752e2481d11e25b0e3fdd upstream.
    
    Add the missing memory barrier to make sure that the REO dest ring
    descriptor is read after the head pointer to avoid using stale data on
    weakly ordered architectures like aarch64.
    
    This may fix the ring-buffer corruption worked around by commit
    f9fff67d2d7c ("wifi: ath11k: Fix SKB corruption in REO destination
    ring") by silently discarding data, and may possibly also address user
    reported errors like:
    
            ath11k_pci 0006:01:00.0: msdu_done bit in attention is not set
    
    Tested-on: WCN6855 hw2.1 WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.41
    
    Fixes: d5c65159f289 ("ath11k: driver for Qualcomm IEEE 802.11ax devices")
    Cc: [email protected]      # 5.6
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=218005
    Signed-off-by: Johan Hovold <[email protected]>
    Tested-by: Clayton Craft <[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: ath12k: fix a possible dead lock caused by ab->base_lock [+ + +]
Author: Baochen Qiang <[email protected]>
Date:   Fri Apr 18 10:55:34 2025 +0800

    wifi: ath12k: fix a possible dead lock caused by ab->base_lock
    
    [ Upstream commit ef115c265a21e3c11deee7f73bd1061775a7bf20 ]
    
    spin_lock/spin_unlock are used in ath12k_reg_chan_list_event
    to acquire/release ab->base_lock. For now this is safe because
    that function is only called in soft IRQ context.
    
    But ath12k_reg_chan_list_event() will be called from process
    context in an upcoming patch, and this can result in a deadlock
    if ab->base_lock is acquired in process context and then soft
    IRQ occurs on the same CPU and tries to acquire that lock.
    
    Fix it by using spin_lock_bh and spin_unlock_bh instead.
    
    Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3
    
    Signed-off-by: Baochen Qiang <[email protected]>
    Reviewed-by: Vasanthakumar Thiagarajan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jeff Johnson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: ath12k: fix failed to set mhi state error during reboot with hardware grouping [+ + +]
Author: Aditya Kumar Singh <[email protected]>
Date:   Tue Apr 8 11:36:31 2025 +0530

    wifi: ath12k: fix failed to set mhi state error during reboot with hardware grouping
    
    [ Upstream commit dce7aec6b1f74b0a46b901ab8de1f7bd0515f733 ]
    
    With hardware grouping, during reboot, whenever a device is removed, it
    powers down itself and all its partner devices in the same group. Now this
    is done by all devices and hence there is multiple power down for devices
    and hence the following error messages can be seen:
    
    ath12k_pci 0002:01:00.0: failed to set mhi state POWER_OFF(3) in current mhi state (0x0)
    ath12k_pci 0002:01:00.0: failed to set mhi state: POWER_OFF(3)
    ath12k_pci 0002:01:00.0: failed to set mhi state DEINIT(1) in current mhi state (0x0)
    ath12k_pci 0002:01:00.0: failed to set mhi state: DEINIT(1)
    ath12k_pci 0003:01:00.0: failed to set mhi state POWER_OFF(3) in current mhi state (0x0)
    ath12k_pci 0003:01:00.0: failed to set mhi state: POWER_OFF(3)
    ath12k_pci 0003:01:00.0: failed to set mhi state DEINIT(1) in current mhi state (0x0)
    ath12k_pci 0003:01:00.0: failed to set mhi state: DEINIT(1)
    ath12k_pci 0004:01:00.0: failed to set mhi state POWER_OFF(3) in current mhi state (0x0)
    ath12k_pci 0004:01:00.0: failed to set mhi state: POWER_OFF(3)
    
    To prevent this, check if the ATH12K_PCI_FLAG_INIT_DONE flag is already
    set before powering down. If it is set, it indicates that another partner
    device has already performed the power down, and this device can skip this
    step.
    
    Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
    Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1
    Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3
    
    Signed-off-by: Aditya Kumar Singh <[email protected]>
    Reviewed-by: Vasanthakumar Thiagarajan <[email protected]>
    Link: https://patch.msgid.link/20250408-fix_reboot_issues_with_hw_grouping-v4-3-95e7bf048595@oss.qualcomm.com
    Signed-off-by: Jeff Johnson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: ath12k: fix incorrect CE addresses [+ + +]
Author: Balamurugan S <[email protected]>
Date:   Fri Mar 21 16:22:39 2025 +0530

    wifi: ath12k: fix incorrect CE addresses
    
    [ Upstream commit 60031d9c3589c7983fd1deb4a4c0bebf0929890e ]
    
    In the current ath12k implementation, the CE addresses
    CE_HOST_IE_ADDRESS and CE_HOST_IE_2_ADDRESS are incorrect. These
    values were inherited from ath11k, but ath12k does not currently use
    them.
    
    However, the Ath12k AHB support relies on these addresses. Therefore,
    correct the CE addresses for ath12k.
    
    Tested-on: IPQ5332 hw1.0 AHB WLAN.WBE.1.3.1-00130-QCAHKSWPL_SILICONZ-1
    Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.1.1-00210-QCAHKSWPL_SILICONZ-1
    
    Signed-off-by: Balamurugan S <[email protected]>
    Reviewed-by: Vasanthakumar Thiagarajan <[email protected]>
    Signed-off-by: Raj Kumar Bhagat <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jeff Johnson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: ath12k: fix link valid field initialization in the monitor Rx [+ + +]
Author: Hari Chandrakanthan <[email protected]>
Date:   Mon Mar 24 11:55:09 2025 +0530

    wifi: ath12k: fix link valid field initialization in the monitor Rx
    
    [ Upstream commit 2826139f9295821fe2b049318a1cc057ec003131 ]
    
    Currently, the link_valid field is not initialized in the monitor Rx path.
    This can result in random values for the link_valid and link_id leads to
    undefined behaviour in mac80211. Therefore, initialize the link_valid
    field in the monitor Rx path.
    
    Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
    Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3
    
    Signed-off-by: Hari Chandrakanthan <[email protected]>
    Tested-by: Nicolas Escande <[email protected]>
    Reviewed-by: Vasanthakumar Thiagarajan <[email protected]>
    Signed-off-by: Karthikeyan Periyasamy <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jeff Johnson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: ath12k: fix macro definition HAL_RX_MSDU_PKT_LENGTH_GET [+ + +]
Author: Kang Yang <[email protected]>
Date:   Mon Apr 21 10:34:39 2025 +0800

    wifi: ath12k: fix macro definition HAL_RX_MSDU_PKT_LENGTH_GET
    
    [ Upstream commit a69bbf89d751ba2d6da21d773c4e29c91c5e53c4 ]
    
    Currently, HAL_RX_MSDU_PKT_LENGTH_GET uses u32_get_bits to obtain the
    MSDU length from the MSDU description.
    
    This is not right. Because all halphy descriptions are little endian.
    
    So use le32_get_bits for HAL_RX_MSDU_PKT_LENGTH_GET.
    
    Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3
    Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
    
    Signed-off-by: Kang Yang <[email protected]>
    Reviewed-by: Vasanthakumar Thiagarajan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jeff Johnson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: ath12k: fix ring-buffer corruption [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Mar 21 10:52:19 2025 +0100

    wifi: ath12k: fix ring-buffer corruption
    
    commit 6b67d2cf14ea997061f61e9c8afd4e1c0f22acb9 upstream.
    
    Users of the Lenovo ThinkPad X13s have reported that Wi-Fi sometimes
    breaks and the log fills up with errors like:
    
        ath11k_pci 0006:01:00.0: HTC Rx: insufficient length, got 1484, expected 1492
        ath11k_pci 0006:01:00.0: HTC Rx: insufficient length, got 1460, expected 1484
    
    which based on a quick look at the ath11k driver seemed to indicate some
    kind of ring-buffer corruption.
    
    Miaoqing Pan tracked it down to the host seeing the updated destination
    ring head pointer before the updated descriptor, and the error handling
    for that in turn leaves the ring buffer in an inconsistent state.
    
    While this has not yet been observed with ath12k, the ring-buffer
    implementation is very similar to the ath11k one and it suffers from the
    same bugs.
    
    Add the missing memory barrier to make sure that the descriptor is read
    after the head pointer to address the root cause of the corruption while
    fixing up the error handling in case there are ever any (ordering) bugs
    on the device side.
    
    Note that the READ_ONCE() are only needed to avoid compiler mischief in
    case the ring-buffer helpers are ever inlined.
    
    Tested-on: WCN7850 hw2.0 WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3
    
    Fixes: d889913205cf ("wifi: ath12k: driver for Qualcomm Wi-Fi 7 devices")
    Cc: [email protected]      # 6.3
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=218623
    Link: https://lore.kernel.org/[email protected]
    Cc: Miaoqing Pan <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Miaoqing Pan <[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: ath12k: Pass correct values of center freq1 and center freq2 for 160 MHz [+ + +]
Author: Suraj P Kizhakkethil <[email protected]>
Date:   Tue Mar 4 15:23:14 2025 +0530

    wifi: ath12k: Pass correct values of center freq1 and center freq2 for 160 MHz
    
    [ Upstream commit b1b01e46a3db5ad44d1e4691ba37c1e0832cd5cf ]
    
    Currently, for 160 MHz bandwidth, center frequency1 and
    center frequency2 are not passed correctly to the firmware.
    Set center frequency1 as the center frequency
    of the primary 80 MHz channel segment and center frequency2 as
    the center frequency of the 160 MHz channel and pass the values
    to the firmware.
    
    Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
    
    Signed-off-by: Suraj P Kizhakkethil <[email protected]>
    Reviewed-by: Aditya Kumar Singh <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jeff Johnson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: carl9170: do not ping device which has failed to load firmware [+ + +]
Author: Dmitry Antipov <[email protected]>
Date:   Mon Jun 16 21:12:05 2025 +0300

    wifi: carl9170: do not ping device which has failed to load firmware
    
    [ Upstream commit 15d25307692312cec4b57052da73387f91a2e870 ]
    
    Syzkaller reports [1, 2] crashes caused by an attempts to ping
    the device which has failed to load firmware. Since such a device
    doesn't pass 'ieee80211_register_hw()', an internal workqueue
    managed by 'ieee80211_queue_work()' is not yet created and an
    attempt to queue work on it causes null-ptr-deref.
    
    [1] https://syzkaller.appspot.com/bug?extid=9a4aec827829942045ff
    [2] https://syzkaller.appspot.com/bug?extid=0d8afba53e8fb2633217
    
    Fixes: e4a668c59080 ("carl9170: fix spurious restart due to high latency")
    Signed-off-by: Dmitry Antipov <[email protected]>
    Acked-by: Christian Lamparter <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jeff Johnson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: cfg80211: init wiphy_work before allocating rfkill fails [+ + +]
Author: Edward Adam Davis <[email protected]>
Date:   Tue Mar 18 11:13:45 2025 +0800

    wifi: cfg80211: init wiphy_work before allocating rfkill fails
    
    commit fc88dee89d7b63eeb17699393eb659aadf9d9b7c upstream.
    
    syzbort reported a uninitialize wiphy_work_lock in cfg80211_dev_free. [1]
    
    After rfkill allocation fails, the wiphy release process will be performed,
    which will cause cfg80211_dev_free to access the uninitialized wiphy_work
    related data.
    
    Move the initialization of wiphy_work to before rfkill initialization to
    avoid this issue.
    
    [1]
    INFO: trying to register non-static key.
    The code is fine but needs lockdep annotation, or maybe
    you didn't initialize this object before use?
    turning off the locking correctness validator.
    CPU: 0 UID: 0 PID: 5935 Comm: syz-executor550 Not tainted 6.14.0-rc6-syzkaller-00103-g4003c9e78778 #0
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:94 [inline]
     dump_stack_lvl+0x116/0x1f0 lib/dump_stack.c:120
     assign_lock_key kernel/locking/lockdep.c:983 [inline]
     register_lock_class+0xc39/0x1240 kernel/locking/lockdep.c:1297
     __lock_acquire+0x135/0x3c40 kernel/locking/lockdep.c:5103
     lock_acquire.part.0+0x11b/0x380 kernel/locking/lockdep.c:5851
     __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
     _raw_spin_lock_irqsave+0x3a/0x60 kernel/locking/spinlock.c:162
     cfg80211_dev_free+0x30/0x3d0 net/wireless/core.c:1196
     device_release+0xa1/0x240 drivers/base/core.c:2568
     kobject_cleanup lib/kobject.c:689 [inline]
     kobject_release lib/kobject.c:720 [inline]
     kref_put include/linux/kref.h:65 [inline]
     kobject_put+0x1e4/0x5a0 lib/kobject.c:737
     put_device+0x1f/0x30 drivers/base/core.c:3774
     wiphy_free net/wireless/core.c:1224 [inline]
     wiphy_new_nm+0x1c1f/0x2160 net/wireless/core.c:562
     ieee80211_alloc_hw_nm+0x1b7a/0x2260 net/mac80211/main.c:835
     mac80211_hwsim_new_radio+0x1d6/0x54e0 drivers/net/wireless/virtual/mac80211_hwsim.c:5185
     hwsim_new_radio_nl+0xb42/0x12b0 drivers/net/wireless/virtual/mac80211_hwsim.c:6242
     genl_family_rcv_msg_doit+0x202/0x2f0 net/netlink/genetlink.c:1115
     genl_family_rcv_msg net/netlink/genetlink.c:1195 [inline]
     genl_rcv_msg+0x565/0x800 net/netlink/genetlink.c:1210
     netlink_rcv_skb+0x16b/0x440 net/netlink/af_netlink.c:2533
     genl_rcv+0x28/0x40 net/netlink/genetlink.c:1219
     netlink_unicast_kernel net/netlink/af_netlink.c:1312 [inline]
     netlink_unicast+0x53c/0x7f0 net/netlink/af_netlink.c:1338
     netlink_sendmsg+0x8b8/0xd70 net/netlink/af_netlink.c:1882
     sock_sendmsg_nosec net/socket.c:718 [inline]
     __sock_sendmsg net/socket.c:733 [inline]
     ____sys_sendmsg+0xaaf/0xc90 net/socket.c:2573
     ___sys_sendmsg+0x135/0x1e0 net/socket.c:2627
     __sys_sendmsg+0x16e/0x220 net/socket.c:2659
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xcd/0x250 arch/x86/entry/common.c:83
    
    Fixes: 72d520476a2f ("wifi: cfg80211: cancel wiphy_work before freeing wiphy")
    Reported-by: [email protected]
    Close: https://syzkaller.appspot.com/bug?extid=aaf0488c83d1d5f4f029
    Tested-by: [email protected]
    Signed-off-by: Edward Adam Davis <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: WangYuli <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

wifi: iwlwifi: Add missing MODULE_FIRMWARE for Qu-c0-jf-b0 [+ + +]
Author: Víctor Gonzalo <[email protected]>
Date:   Wed Mar 13 20:02:27 2024 +0200

    wifi: iwlwifi: Add missing MODULE_FIRMWARE for Qu-c0-jf-b0
    
    [ Upstream commit 2b801487ac3be7bec561ae62d1a6c4d6f5283f8c ]
    
    The module metadata for the firmware file iwlwifi-Qu-c0-jf-b0-* is missing.
    
    Signed-off-by: Víctor Gonzalo <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: iwlwifi: pcie: make sure to lock rxq->read [+ + +]
Author: Miri Korenblit <[email protected]>
Date:   Thu Apr 24 15:38:30 2025 +0300

    wifi: iwlwifi: pcie: make sure to lock rxq->read
    
    [ Upstream commit 1cc2c48c4af81bed5ddbe9f2c9d6e20fa163acf9 ]
    
    rxq->read is accessed without the rxq->lock in a few places,
    Make sure to have the lock there.
    
    Signed-off-by: Miri Korenblit <[email protected]>
    Reviewed-by: Emmanuel Grumbach <[email protected]>
    Tested-by: Emmanuel Grumbach <[email protected]>
    Link: https://patch.msgid.link/20250424153620.73725f207aaa.I1a3e4b6c5fd370e029fdacfcdc9ee335788afa98@changeid
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mac80211: do not offer a mesh path if forwarding is disabled [+ + +]
Author: Benjamin Berg <[email protected]>
Date:   Wed Apr 30 21:10:42 2025 +0200

    wifi: mac80211: do not offer a mesh path if forwarding is disabled
    
    [ Upstream commit cf1b684a06170d253b47d6a5287821de976435bd ]
    
    When processing a PREQ the code would always check whether we have a
    mesh path locally and reply accordingly. However, when forwarding is
    disabled then we should not reply with this information as we will not
    forward data packets down that path.
    
    Move the check for dot11MeshForwarding up in the function and skip the
    mesh path lookup in that case. In the else block, set forward to false
    so that the rest of the function becomes a no-op and the
    dot11MeshForwarding check does not need to be duplicated.
    
    This explains an effect observed in the Freifunk community where mesh
    forwarding is disabled. In that case a mesh with three STAs and only bad
    links in between them, individual STAs would occionally have indirect
    mpath entries. This should not have happened.
    
    Signed-off-by: Benjamin Berg <[email protected]>
    Reviewed-by: Rouven Czerwinski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mac80211: VLAN traffic in multicast path [+ + +]
Author: Muna Sinada <[email protected]>
Date:   Tue Mar 25 14:31:25 2025 -0700

    wifi: mac80211: VLAN traffic in multicast path
    
    [ Upstream commit 1a4a6a22552ca9d723f28a1fe35eab1b9b3d8b33 ]
    
    Currently for MLO, sending out multicast frames on each link is handled by
    mac80211 only when IEEE80211_HW_MLO_MCAST_MULTI_LINK_TX flag is not set.
    
    Dynamic VLAN multicast traffic utilizes software encryption.
    Due to this, mac80211 should handle transmitting multicast frames on
    all links for multicast VLAN traffic.
    
    Signed-off-by: Muna Sinada <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [remove unnecessary parentheses]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mac80211_hwsim: Prevent tsf from setting if beacon is disabled [+ + +]
Author: Edward Adam Davis <[email protected]>
Date:   Wed Apr 23 22:15:53 2025 +0800

    wifi: mac80211_hwsim: Prevent tsf from setting if beacon is disabled
    
    [ Upstream commit c575f5374be7a5c4be4acb9fe6be3a4669d94674 ]
    
    Setting tsf is meaningless if beacon is disabled, so check that beacon
    is enabled before setting tsf.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=064815c6cd721082a52a
    Tested-by: [email protected]
    Signed-off-by: Edward Adam Davis <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mt76: mt76x2: Add support for LiteOn WN4516R,WN4519R [+ + +]
Author: Henk Vergonet <[email protected]>
Date:   Fri Apr 18 16:39:14 2025 +0200

    wifi: mt76: mt76x2: Add support for LiteOn WN4516R,WN4519R
    
    [ Upstream commit 3c0e4f606d8693795a2c965d6f4987b1bfc31097 ]
    
    Adds support for:
     - LiteOn WN4516R
     - LiteOn WN4519R
     Both use:
     - A nonstandard USB connector
     - Mediatek chipset MT7600U
     - ASIC revision: 76320044
    
    Disabled VHT support on ASIC revision 76320044:
    
     This fixes the 5G connectibity issue on LiteOn WN4519R module
     see https://github.com/openwrt/mt76/issues/971
    
     And may also fix the 5G issues on the XBox One Wireless Adapter
     see https://github.com/openwrt/mt76/issues/200
    
     I have looked at the FCC info related to the MT7632U chip as mentioned in here:
     https://github.com/openwrt/mt76/issues/459
     These confirm the chipset does not support 'ac' mode and hence VHT should be turned of.
    
    Signed-off-by: Henk Vergonet <[email protected]>
    Acked-by: Lorenzo Bianconi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Felix Fietkau <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mt76: mt7921: add 160 MHz AP for mt7922 device [+ + +]
Author: Samuel Williams <[email protected]>
Date:   Sat May 10 19:53:09 2025 -0500

    wifi: mt76: mt7921: add 160 MHz AP for mt7922 device
    
    [ Upstream commit 7011faebe543f8f094fdb3281d0ec9e1eab81309 ]
    
    This allows mt7922 in hostapd mode to transmit up to 1.4 Gbps.
    
    Signed-off-by: Samuel Williams <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Felix Fietkau <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mt76: mt7996: drop fragments with multicast or broadcast RA [+ + +]
Author: Benjamin Lin <[email protected]>
Date:   Thu May 15 11:29:47 2025 +0800

    wifi: mt76: mt7996: drop fragments with multicast or broadcast RA
    
    [ Upstream commit 80fda1cd7b0a1edd0849dc71403a070d0922118d ]
    
    IEEE 802.11 fragmentation can only be applied to unicast frames.
    Therefore, drop fragments with multicast or broadcast RA. This patch
    addresses vulnerabilities such as CVE-2020-26145.
    
    Signed-off-by: Benjamin Lin <[email protected]>
    Signed-off-by: Shayne Chen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Felix Fietkau <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: p54: prevent buffer-overflow in p54_rx_eeprom_readback() [+ + +]
Author: Christian Lamparter <[email protected]>
Date:   Fri May 16 20:41:06 2025 +0200

    wifi: p54: prevent buffer-overflow in p54_rx_eeprom_readback()
    
    commit da1b9a55ff116cb040528ef664c70a4eec03ae99 upstream.
    
    Robert Morris reported:
    
    |If a malicious USB device pretends to be an Intersil p54 wifi
    |interface and generates an eeprom_readback message with a large
    |eeprom->v1.len, p54_rx_eeprom_readback() will copy data from the
    |message beyond the end of priv->eeprom.
    |
    |static void p54_rx_eeprom_readback(struct p54_common *priv,
    |                                   struct sk_buff *skb)
    |{
    |        struct p54_hdr *hdr = (struct p54_hdr *) skb->data;
    |        struct p54_eeprom_lm86 *eeprom = (struct p54_eeprom_lm86 *) hdr->data;
    |
    |        if (priv->fw_var >= 0x509) {
    |                memcpy(priv->eeprom, eeprom->v2.data,
    |                       le16_to_cpu(eeprom->v2.len));
    |        } else {
    |                memcpy(priv->eeprom, eeprom->v1.data,
    |                       le16_to_cpu(eeprom->v1.len));
    |        }
    | [...]
    
    The eeprom->v{1,2}.len is set by the driver in p54_download_eeprom().
    The device is supposed to provide the same length back to the driver.
    But yes, it's possible (like shown in the report) to alter the value
    to something that causes a crash/panic due to overrun.
    
    This patch addresses the issue by adding the size to the common device
    context, so p54_rx_eeprom_readback no longer relies on possibly tampered
    values... That said, it also checks if the "firmware" altered the value
    and no longer copies them.
    
    The one, small saving grace is: Before the driver tries to read the eeprom,
    it needs to upload >a< firmware. the vendor firmware has a proprietary
    license and as a reason, it is not present on most distributions by
    default.
    
    Cc: <[email protected]>
    Reported-by: Robert Morris <[email protected]>
    Closes: https://lore.kernel.org/linux-wireless/28782.1747258414@localhost/
    Fixes: 7cb770729ba8 ("p54: move eeprom code into common library")
    Signed-off-by: Christian Lamparter <[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: disable ASPM for RTL8723BE with subsystem ID 11ad:1723 [+ + +]
Author: Mingcong Bai <[email protected]>
Date:   Tue Apr 22 14:17:54 2025 +0800

    wifi: rtlwifi: disable ASPM for RTL8723BE with subsystem ID 11ad:1723
    
    commit 77a6407c6ab240527166fb19ee96e95f5be4d3cd upstream.
    
    RTL8723BE found on some ASUSTek laptops, such as F441U and X555UQ with
    subsystem ID 11ad:1723 are known to output large amounts of PCIe AER
    errors during and after boot up, causing heavy lags and at times lock-ups:
    
      pcieport 0000:00:1c.5: AER: Correctable error message received from 0000:00:1c.5
      pcieport 0000:00:1c.5: PCIe Bus Error: severity=Correctable, type=Physical Layer, (Receiver ID)
      pcieport 0000:00:1c.5:   device [8086:9d15] error status/mask=00000001/00002000
      pcieport 0000:00:1c.5:    [ 0] RxErr
    
    Disable ASPM on this combo as a quirk.
    
    This patch is a revision of a previous patch (linked below) which
    attempted to disable ASPM for RTL8723BE on all Intel Skylake and Kaby Lake
    PCIe bridges. I take a more conservative approach as all known reports
    point to ASUSTek laptops of these two generations with this particular
    wireless card.
    
    Please note, however, before the rtl8723be finishes probing, the AER
    errors remained. After the module finishes probing, all AER errors would
    indeed be eliminated, along with heavy lags, poor network throughput,
    and/or occasional lock-ups.
    
    Cc: <[email protected]>
    Fixes: a619d1abe20c ("rtlwifi: rtl8723be: Add new driver")
    Reported-by: Liangliang Zou <[email protected]>
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=218127
    Link: https://lore.kernel.org/lkml/[email protected]/T/
    Tested-by: Liangliang Zou <[email protected]>
    Signed-off-by: Mingcong Bai <[email protected]>
    Signed-off-by: Ping-Ke Shih <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

wifi: rtw88: usb: Reduce control message timeout to 500 ms [+ + +]
Author: Bitterblue Smith <[email protected]>
Date:   Sat May 10 15:21:25 2025 +0300

    wifi: rtw88: usb: Reduce control message timeout to 500 ms
    
    commit 490340faddea461319652ce36dbc7c1b4482c35e upstream.
    
    RTL8811AU stops responding during the firmware download on some systems:
    
    [  809.256440] rtw_8821au 5-2.1:1.0: Firmware version 42.4.0, H2C version 0
    [  812.759142] rtw_8821au 5-2.1:1.0 wlp48s0f4u2u1: renamed from wlan0
    [  837.315388] rtw_8821au 1-4:1.0: write register 0x1ef4 failed with -110
    [  867.524259] rtw_8821au 1-4:1.0: write register 0x1ef8 failed with -110
    [  868.930976] rtw_8821au 5-2.1:1.0 wlp48s0f4u2u1: entered promiscuous mode
    [  897.730952] rtw_8821au 1-4:1.0: write register 0x1efc failed with -110
    
    Each write takes 30 seconds to fail because that's the timeout currently
    used for control messages in rtw_usb_write().
    
    In this scenario the firmware download takes at least 2000 seconds.
    Because this is done from the USB probe function, the long delay makes
    other things in the system hang.
    
    Reduce the timeout to 500 ms. This is the value used by the official USB
    wifi drivers from Realtek.
    
    Of course this only makes things hang for ~30 seconds instead of ~30
    minutes. It doesn't fix the firmware download.
    
    Tested with RTL8822CU, RTL8812BU, RTL8811CU, RTL8814AU, RTL8811AU,
    RTL8812AU, RTL8821AU, RTL8723DU.
    
    Cc: [email protected]
    Fixes: a82dfd33d123 ("wifi: rtw88: Add common USB chip support")
    Link: https://github.com/lwfinger/rtw88/issues/344
    Signed-off-by: Bitterblue Smith <[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: Greg Kroah-Hartman <[email protected]>

wifi: rtw89: leave idle mode when setting WEP encryption for AP mode [+ + +]
Author: Dian-Syuan Yang <[email protected]>
Date:   Wed May 7 11:12:03 2025 +0800

    wifi: rtw89: leave idle mode when setting WEP encryption for AP mode
    
    [ Upstream commit d105652b33245162867ac769bea336976e67efb8 ]
    
    Due to mac80211 triggering the hardware to enter idle mode, it fails
    to install WEP key causing connected station can't ping successfully.
    Currently, it forces the hardware to leave idle mode before driver
    adding WEP keys.
    
    Signed-off-by: Dian-Syuan Yang <[email protected]>
    Signed-off-by: Ping-Ke Shih <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

wifi: rtw89: pci: use DBI function for 8852AE/8852BE/8851BE [+ + +]
Author: Chin-Yen Lee <[email protected]>
Date:   Wed Jan 3 09:23:46 2024 +0800

    wifi: rtw89: pci: use DBI function for 8852AE/8852BE/8851BE
    
    commit 9496d62f3877bc0f97b415bc04af98d092878026 upstream.
    
    Sometimes driver can't use kernel API pci_read/write_config_byte
    to access the PCI config space of above address 0x100 due to
    the negotiated PCI setting. 8852AE/8852BE/8851BE provide another
    way called DBI function, which belongs to WiFi mac and could
    access all PCI config space for this case.
    
    Link: https://lore.kernel.org/linux-wireless/[email protected]/T/#t
    Signed-off-by: Chin-Yen Lee <[email protected]>
    Signed-off-by: Ping-Ke Shih <[email protected]>
    Signed-off-by: Kalle Valo <[email protected]>
    Link: https://msgid.link/[email protected]
    Signed-off-by: Zenm Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
wireless: purelifi: plfxlc: fix memory leak in plfxlc_usb_wreq_asyn() [+ + +]
Author: Salah Triki <[email protected]>
Date:   Sun Apr 27 10:57:45 2025 +0100

    wireless: purelifi: plfxlc: fix memory leak in plfxlc_usb_wreq_asyn()
    
    [ Upstream commit 63a9a727d373fa5b8ce509eef50dbc45e0f745b9 ]
    
    Add usb_free_urb() in the error path to prevent memory leak.
    
    Signed-off-by: Salah Triki <[email protected]>
    Link: https://patch.msgid.link/aA3_maPlEJzO7wrL@pc
    [fix subject]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
x86/sgx: Prevent attempts to reclaim poisoned pages [+ + +]
Author: Andrew Zaborowski <[email protected]>
Date:   Fri May 9 01:04:29 2025 +0200

    x86/sgx: Prevent attempts to reclaim poisoned pages
    
    [ Upstream commit ed16618c380c32c68c06186d0ccbb0d5e0586e59 ]
    
    TL;DR: SGX page reclaim touches the page to copy its contents to
    secondary storage. SGX instructions do not gracefully handle machine
    checks. Despite this, the existing SGX code will try to reclaim pages
    that it _knows_ are poisoned. Avoid even trying to reclaim poisoned pages.
    
    The longer story:
    
    Pages used by an enclave only get epc_page->poison set in
    arch_memory_failure() but they currently stay on sgx_active_page_list until
    sgx_encl_release(), with the SGX_EPC_PAGE_RECLAIMER_TRACKED flag untouched.
    
    epc_page->poison is not checked in the reclaimer logic meaning that, if other
    conditions are met, an attempt will be made to reclaim an EPC page that was
    poisoned.  This is bad because 1. we don't want that page to end up added
    to another enclave and 2. it is likely to cause one core to shut down
    and the kernel to panic.
    
    Specifically, reclaiming uses microcode operations including "EWB" which
    accesses the EPC page contents to encrypt and write them out to non-SGX
    memory.  Those operations cannot handle MCEs in their accesses other than
    by putting the executing core into a special shutdown state (affecting
    both threads with HT.)  The kernel will subsequently panic on the
    remaining cores seeing the core didn't enter MCE handler(s) in time.
    
    Call sgx_unmark_page_reclaimable() to remove the affected EPC page from
    sgx_active_page_list on memory error to stop it being considered for
    reclaiming.
    
    Testing epc_page->poison in sgx_reclaim_pages() would also work but I assume
    it's better to add code in the less likely paths.
    
    The affected EPC page is not added to &node->sgx_poison_page_list until
    later in sgx_encl_release()->sgx_free_epc_page() when it is EREMOVEd.
    Membership on other lists doesn't change to avoid changing any of the
    lists' semantics except for sgx_active_page_list.  There's a "TBD" comment
    in arch_memory_failure() about pre-emptive actions, the goal here is not
    to address everything that it may imply.
    
    This also doesn't completely close the time window when a memory error
    notification will be fatal (for a not previously poisoned EPC page) --
    the MCE can happen after sgx_reclaim_pages() has selected its candidates
    or even *inside* a microcode operation (actually easy to trigger due to
    the amount of time spent in them.)
    
    The spinlock in sgx_unmark_page_reclaimable() is safe because
    memory_failure() runs in process context and no spinlocks are held,
    explicitly noted in a mm/memory-failure.c comment.
    
    Signed-off-by: Andrew Zaborowski <[email protected]>
    Signed-off-by: Ingo Molnar <[email protected]>
    Acked-by: Dave Hansen <[email protected]>
    Cc: H. Peter Anvin <[email protected]>
    Cc: Linus Torvalds <[email protected]>
    Cc: Tony Luck <[email protected]>
    Cc: [email protected]
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>