Changelog in Linux kernel 6.6.103

 
Linux: (powerpc/512) Fix possible `dma_unmap_single()` on uninitialized pointer [+ + +]
Author: Thomas Fourier <[email protected]>
Date:   Tue Jun 10 16:29:11 2025 +0200

    (powerpc/512) Fix possible `dma_unmap_single()` on uninitialized pointer
    
    [ Upstream commit 760b9b4f6de9a33ca56a05f950cabe82138d25bd ]
    
    If the device configuration fails (if `dma_dev->device_config()`),
    `sg_dma_address(&sg)` is not initialized and the jump to `err_dma_prep`
    leads to calling `dma_unmap_single()` on `sg_dma_address(&sg)`.
    
    Signed-off-by: Thomas Fourier <[email protected]>
    Reviewed-by: Christophe Leroy <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
ACPI: APEI: GHES: add TAINT_MACHINE_CHECK on GHES panic path [+ + +]
Author: Breno Leitao <[email protected]>
Date:   Wed Jul 2 08:39:51 2025 -0700

    ACPI: APEI: GHES: add TAINT_MACHINE_CHECK on GHES panic path
    
    [ Upstream commit 4734c8b46b901cff2feda8b82abc710b65dc31c1 ]
    
    When a GHES (Generic Hardware Error Source) triggers a panic, add the
    TAINT_MACHINE_CHECK taint flag to the kernel. This explicitly marks the
    kernel as tainted due to a machine check event, improving diagnostics
    and post-mortem analysis. The taint is set with LOCKDEP_STILL_OK to
    indicate lockdep remains valid.
    
    At large scale deployment, this helps to quickly determine panics that
    are coming due to hardware failures.
    
    Signed-off-by: Breno Leitao <[email protected]>
    Reviewed-by: Tony Luck <[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: APEI: send SIGBUS to current task if synchronous memory error not recovered [+ + +]
Author: Shuai Xue <[email protected]>
Date:   Mon Jul 14 19:42:11 2025 +0800

    ACPI: APEI: send SIGBUS to current task if synchronous memory error not recovered
    
    [ Upstream commit 79a5ae3c4c5eb7e38e0ebe4d6bf602d296080060 ]
    
    If a synchronous error is detected as a result of user-space process
    triggering a 2-bit uncorrected error, the CPU will take a synchronous
    error exception such as Synchronous External Abort (SEA) on Arm64. The
    kernel will queue a memory_failure() work which poisons the related
    page, unmaps the page, and then sends a SIGBUS to the process, so that
    a system wide panic can be avoided.
    
    However, no memory_failure() work will be queued when abnormal
    synchronous errors occur. These errors can include situations like
    invalid PA, unexpected severity, no memory failure config support,
    invalid GUID section, etc. In such a case, the user-space process will
    trigger SEA again.  This loop can potentially exceed the platform
    firmware threshold or even trigger a kernel hard lockup, leading to a
    system reboot.
    
    Fix it by performing a force kill if no memory_failure() work is queued
    for synchronous errors.
    
    Signed-off-by: Shuai Xue <[email protected]>
    Reviewed-by: Jarkko Sakkinen <[email protected]>
    Reviewed-by: Jonathan Cameron <[email protected]>
    Reviewed-by: Yazen Ghannam <[email protected]>
    Reviewed-by: Jane Chu <[email protected]>
    Reviewed-by: Hanjun Guo <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [ rjw: Changelog edits ]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ACPI: pfr_update: Fix the driver update version check [+ + +]
Author: Chen Yu <[email protected]>
Date:   Tue Jul 22 22:32:33 2025 +0800

    ACPI: pfr_update: Fix the driver update version check
    
    commit 8151320c747efb22d30b035af989fed0d502176e upstream.
    
    The security-version-number check should be used rather
    than the runtime version check for driver updates.
    
    Otherwise, the firmware update would fail when the update binary had
    a lower runtime version number than the current one.
    
    Fixes: 0db89fa243e5 ("ACPI: Introduce Platform Firmware Runtime Update device driver")
    Cc: 5.17+ <[email protected]> # 5.17+
    Reported-by: "Govindarajulu, Hariganesh" <[email protected]>
    Signed-off-by: Chen Yu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [ rjw: Changelog edits ]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ACPI: PRM: Reduce unnecessary printing to avoid user confusion [+ + +]
Author: Zhu Qiyu <[email protected]>
Date:   Fri Jul 4 01:41:04 2025 +0000

    ACPI: PRM: Reduce unnecessary printing to avoid user confusion
    
    [ Upstream commit 3db5648c4d608b5483470efc1da9780b081242dd ]
    
    Commit 088984c8d54c ("ACPI: PRM: Find EFI_MEMORY_RUNTIME block for PRM
    handler and context") introduced non-essential printing "Failed to find
    VA for GUID: xxxx, PA: 0x0" which may confuse users to think that
    something wrong is going on while it is not the case.
    
    According to the PRM Spec Section 4.1.2 [1], both static data buffer
    address and ACPI parameter buffer address may be NULL if they are not
    needed, so there is no need to print out the "Failed to find VA ... "
    in those cases.
    
    Link: https://uefi.org/sites/default/files/resources/Platform%20Runtime%20Mechanism%20-%20with%20legal%20notice.pdf # [1]
    Signed-off-by: Zhu Qiyu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [ rjw: Edits in new comments, subject and changelog ]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ACPI: processor: fix acpi_object initialization [+ + +]
Author: Sebastian Ott <[email protected]>
Date:   Thu Jul 3 14:42:15 2025 +0200

    ACPI: processor: fix acpi_object initialization
    
    [ Upstream commit 13edf7539211d8f7d0068ce3ed143005f1da3547 ]
    
    Initialization of the local acpi_object in acpi_processor_get_info()
    only sets the first 4 bytes to zero and is thus incomplete. This is
    indicated by messages like:
            acpi ACPI0007:be: Invalid PBLK length [166288104]
    
    Fix this by initializing all 16 bytes of the processor member of that
    union.
    
    Signed-off-by: Sebastian Ott <[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: processor: perflib: Fix initial _PPC limit application [+ + +]
Author: Jiayi Li <[email protected]>
Date:   Mon Jul 21 11:26:06 2025 +0800

    ACPI: processor: perflib: Fix initial _PPC limit application
    
    commit d33bd88ac0ebb49e7f7c8f29a8c7ee9eae85d765 upstream.
    
    If the BIOS sets a _PPC frequency limit upfront, it will fail to take
    effect due to a call ordering issue.  Namely, freq_qos_update_request()
    is called before freq_qos_add_request() for the given request causing
    the constraint update to be ignored.  The call sequence in question is
    as follows:
    
    cpufreq_policy_online()
      acpi_cpufreq_cpu_init()
        acpi_processor_register_performance()
          acpi_processor_get_performance_info()
            acpi_processor_get_platform_limit()
             freq_qos_update_request(&perflib_req) <- inactive QoS request
      blocking_notifier_call_chain(&cpufreq_policy_notifier_list,
                                   CPUFREQ_CREATE_POLICY)
        acpi_processor_notifier()
          acpi_processor_ppc_init()
            freq_qos_add_request(&perflib_req) <- QoS request activation
    
    Address this by adding an acpi_processor_get_platform_limit() call
    to acpi_processor_ppc_init(), after the perflib_req activation via
    freq_qos_add_request(), which causes the initial _PPC limit to be
    picked up as appropriate.  However, also ensure that the _PPC limit
    will not be picked up in the cases when the cpufreq driver does not
    call acpi_processor_register_performance() by adding a pr->performance
    check to the related_cpus loop in acpi_processor_ppc_init().
    
    Fixes: d15ce412737a ("ACPI: cpufreq: Switch to QoS requests instead of cpufreq notifier")
    Signed-off-by: Jiayi Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [ rjw: Consolidate pr-related checks in acpi_processor_ppc_init() ]
    [ rjw: Subject and changelog adjustments ]
    Cc: 5.4+ <[email protected]> # 5.4+: 2d8b39a62a5d ACPI: processor: Avoid NULL pointer dereferences at init time
    Cc: 5.4+ <[email protected]> # 5.4+: 3000ce3c52f8 cpufreq: Use per-policy frequency QoS
    Cc: 5.4+ <[email protected]> # 5.4+: a1bb46c36ce3 ACPI: processor: Add QoS requests for all CPUs
    Cc: 5.4+ <[email protected]> # 5.4+
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ACPI: processor: perflib: Move problematic pr->performance check [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Tue Aug 12 14:57:06 2025 +0200

    ACPI: processor: perflib: Move problematic pr->performance check
    
    commit d405ec23df13e6df599f5bd965a55d13420366b8 upstream.
    
    Commit d33bd88ac0eb ("ACPI: processor: perflib: Fix initial _PPC limit
    application") added a pr->performance check that prevents the frequency
    QoS request from being added when the given processor has no performance
    object.  Unfortunately, this causes a WARN() in freq_qos_remove_request()
    to trigger on an attempt to take the given CPU offline later because the
    frequency QoS object has not been added for it due to the missing
    performance object.
    
    Address this by moving the pr->performance check before calling
    acpi_processor_get_platform_limit() so it only prevents a limit from
    being set for the CPU if the performance object is not present.  This
    way, the frequency QoS request is added as it was before the above
    commit and it is present all the time along with the CPU's cpufreq
    policy regardless of whether or not the CPU is online.
    
    Fixes: d33bd88ac0eb ("ACPI: processor: perflib: Fix initial _PPC limit application")
    Tested-by: Rafael J. Wysocki <[email protected]>
    Cc: 5.4+ <[email protected]> # 5.4+
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
alloc_fdtable(): change calling conventions. [+ + +]
Author: Al Viro <[email protected]>
Date:   Tue Aug 6 22:14:07 2024 -0400

    alloc_fdtable(): change calling conventions.
    
    [ Upstream commit 1d3b4bec3ce55e0c46cdce7d0402dbd6b4af3a3d ]
    
    First of all, tell it how many slots do we want, not which slot
    is wanted.  It makes one caller (dup_fd()) more straightforward
    and doesn't harm another (expand_fdtable()).
    
    Furthermore, make it return ERR_PTR() on failure rather than
    returning NULL.  Simplifies the callers.
    
    Simplify the size calculation, while we are at it - note that we
    always have slots_wanted greater than BITS_PER_LONG.  What the
    rules boil down to is
            * use the smallest power of two large enough to give us
    that many slots
            * on 32bit skip 64 and 128 - the minimal capacity we want
    there is 256 slots (i.e. 1Kb fd array).
            * on 64bit don't skip anything, the minimal capacity is
    128 - and we'll never be asked for 64 or less.  128 slots means
    1Kb fd array, again.
            * on 128bit, if that ever happens, don't skip anything -
    we'll never be asked for 128 or less, so the fd array allocation
    will be at least 2Kb.
    
    Reviewed-by: Christian Brauner <[email protected]>
    Signed-off-by: Al Viro <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ALSA: hda/ca0132: Fix buffer overflow in add_tuning_control [+ + +]
Author: Lucy Thrun <[email protected]>
Date:   Tue Jun 10 19:50:12 2025 +0200

    ALSA: hda/ca0132: Fix buffer overflow in add_tuning_control
    
    [ Upstream commit a409c60111e6bb98fcabab2aeaa069daa9434ca0 ]
    
    The 'sprintf' call in 'add_tuning_control' may exceed the 44-byte
    buffer if either string argument is too long. This triggers a compiler
    warning.
    Replaced 'sprintf' with 'snprintf' to limit string lengths to prevent
    overflow.
    
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Signed-off-by: Lucy Thrun <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda/realtek: Add Framework Laptop 13 (AMD Ryzen AI 300) to quirks [+ + +]
Author: Christopher Eby <[email protected]>
Date:   Sat Aug 9 20:00:06 2025 -0700

    ALSA: hda/realtek: Add Framework Laptop 13 (AMD Ryzen AI 300) to quirks
    
    commit 0db77eccd964b11ab2b757031d1354fcc5a025ea upstream.
    
    Framework Laptop 13 (AMD Ryzen AI 300) requires the same quirk for
    headset detection as other Framework 13 models.
    
    Signed-off-by: Christopher Eby <[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: hda/realtek: Add support for HP EliteBook x360 830 G6 and EliteBook 830 G6 [+ + +]
Author: Evgeniy Harchenko <[email protected]>
Date:   Fri Aug 15 12:58:14 2025 +0300

    ALSA: hda/realtek: Add support for HP EliteBook x360 830 G6 and EliteBook 830 G6
    
    commit eafae0fdd115a71b3a200ef1a31f86da04bac77f upstream.
    
    The HP EliteBook x360 830 G6 and HP EliteBook 830 G6 have
    Realtek HDA codec ALC215. It needs the ALC285_FIXUP_HP_GPIO_LED
    quirk to enable the mute LED.
    
    Cc: <[email protected]>
    Signed-off-by: Evgeniy Harchenko <[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: Fix headset mic on HONOR BRB-X [+ + +]
Author: Vasiliy Kovalev <[email protected]>
Date:   Mon Aug 11 16:27:16 2025 +0300

    ALSA: hda/realtek: Fix headset mic on HONOR BRB-X
    
    commit b26e2afb3834d4a61ce54c8484ff6014bef0b4b7 upstream.
    
    Add a PCI quirk to enable microphone input on the headphone jack on
    the HONOR BRB-X M1010 laptop.
    
    Signed-off-by: Vasiliy Kovalev <[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: hda: Disable jack polling at shutdown [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Mon Jun 23 15:14:30 2025 +0200

    ALSA: hda: Disable jack polling at shutdown
    
    [ Upstream commit 1adcbdf54f76e1004bdf71df4eb1888c26e7ad06 ]
    
    Although the jack polling is canceled at shutdown in
    snd_hda_codec_shutdown(), it might be still re-triggered when the work
    is being processed at cancel_delayed_work_sync() call.  This may
    result in the unexpected hardware access that should have been already
    disabled.
    
    For assuring to stop the jack polling, clear codec->jackpoll_interval
    at shutdown.
    
    Reported-by: Joakim Zhang <[email protected]>
    Closes: https://lore.kernel.org/[email protected]
    Tested-by: Joakim Zhang <[email protected]>
    Signed-off-by: Takashi Iwai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda: Handle the jack polling always via a work [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Mon Jun 23 15:14:32 2025 +0200

    ALSA: hda: Handle the jack polling always via a work
    
    [ Upstream commit 5f7e54b23e4d253eff3b10b12d6fa92d28d7dddc ]
    
    We used to call directly hda_jackpoll_work() from a couple of places
    for updating the jack and notify to user-space, but this makes rather
    the code flow fragile.  Namely, because of those direct calls,
    hda_jackpoll_work() uses snd_hda_power_up_pm() and *_down_pm() calls
    instead of the standard snd_hda_power_up() and *_down() calls.  The
    latter pair assures the runtime PM resume sync, so it can avoid the
    race against the PM callbacks gracefully, while the former pair may
    continue if called concurrently, hence it may race (by design).
    
    In this patch, we change the call pattern of hda_jackpoll_work(); now
    all callers are replaced with the standard snd_hda_jack_report_sync()
    and the additional schedule_delayed_work().
    
    Since hda_jackpoll_work() is called only from the associated work,
    it's always outside the PM code path, and we can safely use
    snd_hda_power_up() and *_down() there instead.  This allows us to
    remove the racy check of power-state in hda_jackpoll_work(), as well
    as the tricky cancel_delayed_work() and rescheduling at
    hda_codec_runtime_suspend().
    
    Reported-by: Joakim Zhang <[email protected]>
    Closes: https://lore.kernel.org/[email protected]
    Tested-by: Joakim Zhang <[email protected]>
    Signed-off-by: Takashi Iwai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: intel8x0: Fix incorrect codec index usage in mixer for ICH4 [+ + +]
Author: Alok Tiwari <[email protected]>
Date:   Sat Jun 21 11:52:24 2025 -0700

    ALSA: intel8x0: Fix incorrect codec index usage in mixer for ICH4
    
    [ Upstream commit 87aafc8580acf87fcaf1a7e30ed858d8c8d37d81 ]
    
    code mistakenly used a hardcoded index (codec[1]) instead of
    iterating, over the codec array using the loop variable i.
    Use codec[i] instead of codec[1] to match the loop iteration.
    
    Signed-off-by: Alok Tiwari <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: pcm: Rewrite recalculate_boundary() to avoid costly loop [+ + +]
Author: Christophe Leroy <[email protected]>
Date:   Fri Jun 6 11:44:02 2025 +0200

    ALSA: pcm: Rewrite recalculate_boundary() to avoid costly loop
    
    [ Upstream commit 92f59aeb13252265c20e7aef1379a8080c57e0a2 ]
    
    At the time being recalculate_boundary() is implemented with a
    loop which shows up as costly in a perf profile, as depicted by
    the annotate below:
    
        0.00 :   c057e934:       3d 40 7f ff     lis     r10,32767
        0.03 :   c057e938:       61 4a ff ff     ori     r10,r10,65535
        0.21 :   c057e93c:       7d 49 50 50     subf    r10,r9,r10
        5.39 :   c057e940:       7d 3c 4b 78     mr      r28,r9
        2.11 :   c057e944:       55 29 08 3c     slwi    r9,r9,1
        3.04 :   c057e948:       7c 09 50 40     cmplw   r9,r10
        2.47 :   c057e94c:       40 81 ff f4     ble     c057e940 <snd_pcm_ioctl+0xee0>
    
    Total: 13.2% on that simple loop.
    
    But what the loop does is to multiply the boundary by 2 until it is
    over the wanted border. This can be avoided by using fls() to get the
    boundary value order and shift it by the appropriate number of bits at
    once.
    
    This change provides the following profile:
    
        0.04 :   c057f6e8:       3d 20 7f ff     lis     r9,32767
        0.02 :   c057f6ec:       61 29 ff ff     ori     r9,r9,65535
        0.34 :   c057f6f0:       7d 5a 48 50     subf    r10,r26,r9
        0.23 :   c057f6f4:       7c 1a 50 40     cmplw   r26,r10
        0.02 :   c057f6f8:       41 81 00 20     bgt     c057f718 <snd_pcm_ioctl+0xf08>
        0.26 :   c057f6fc:       7f 47 00 34     cntlzw  r7,r26
        0.09 :   c057f700:       7d 48 00 34     cntlzw  r8,r10
        0.22 :   c057f704:       7d 08 38 50     subf    r8,r8,r7
        0.04 :   c057f708:       7f 5a 40 30     slw     r26,r26,r8
        0.35 :   c057f70c:       7c 0a d0 40     cmplw   r10,r26
        0.13 :   c057f710:       40 80 05 f8     bge     c057fd08 <snd_pcm_ioctl+0x14f8>
        0.00 :   c057f714:       57 5a f8 7e     srwi    r26,r26,1
    
    Total: 1.7% with that loopless alternative.
    
    Signed-off-by: Christophe Leroy <[email protected]>
    Link: https://patch.msgid.link/4836e2cde653eebaf2709ebe30eec736bb8c67fd.1749202237.git.christophe.leroy@csgroup.eu
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: usb-audio: Avoid precedence issues in mixer_quirks macros [+ + +]
Author: Cristian Ciocaltea <[email protected]>
Date:   Mon May 26 17:07:42 2025 +0300

    ALSA: usb-audio: Avoid precedence issues in mixer_quirks macros
    
    [ Upstream commit fd3ab72e42e9871a9902b945a2bf8bb87b49c718 ]
    
    Fix all macro related issues identified by checkpatch.pl:
    
      CHECK: Macro argument 'x' may be better as '(x)' to avoid precedence issues
    
    Signed-off-by: Cristian Ciocaltea <[email protected]>
    Signed-off-by: Takashi Iwai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: usb-audio: Fix size validation in convert_chmap_v3() [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Mon Aug 18 12:59:45 2025 +0300

    ALSA: usb-audio: Fix size validation in convert_chmap_v3()
    
    [ Upstream commit 89f0addeee3cb2dc49837599330ed9c4612f05b0 ]
    
    The "p" pointer is void so sizeof(*p) is 1.  The intent was to check
    sizeof(*cs_desc), which is 3, instead.
    
    Fixes: ecfd41166b72 ("ALSA: usb-audio: Validate UAC3 cluster segment descriptors")
    Signed-off-by: Dan Carpenter <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: usb-audio: Use correct sub-type for UAC3 feature unit validation [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Thu Aug 21 17:08:34 2025 +0200

    ALSA: usb-audio: Use correct sub-type for UAC3 feature unit validation
    
    [ Upstream commit 8410fe81093ff231e964891e215b624dabb734b0 ]
    
    The entry of the validators table for UAC3 feature unit is defined
    with a wrong sub-type UAC_FEATURE (= 0x06) while it should have been
    UAC3_FEATURE (= 0x07).  This patch corrects the entry value.
    
    Fixes: 57f8770620e9 ("ALSA: usb-audio: More validations of descriptor units")
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: usb-audio: Validate UAC3 cluster segment descriptors [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Thu Aug 14 10:12:43 2025 +0200

    ALSA: usb-audio: Validate UAC3 cluster segment descriptors
    
    commit ecfd41166b72b67d3bdeb88d224ff445f6163869 upstream.
    
    UAC3 class segment descriptors need to be verified whether their sizes
    match with the declared lengths and whether they fit with the
    allocated buffer sizes, too.  Otherwise malicious firmware may lead to
    the unexpected OOB accesses.
    
    Fixes: 11785ef53228 ("ALSA: usb-audio: Initial Power Domain support")
    Reported-and-tested-by: Youngjun Lee <[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: Validate UAC3 power domain descriptors, too [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Thu Aug 14 10:12:42 2025 +0200

    ALSA: usb-audio: Validate UAC3 power domain descriptors, too
    
    commit d832ccbc301fbd9e5a1d691bdcf461cdb514595f upstream.
    
    UAC3 power domain descriptors need to be verified with its variable
    bLength for avoiding the unexpected OOB accesses by malicious
    firmware, too.
    
    Fixes: 9a2fe9b801f5 ("ALSA: usb: initial USB Audio Device Class 3.0 support")
    Reported-and-tested-by: Youngjun Lee <[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]>

 
apparmor: shift ouid when mediating hard links in userns [+ + +]
Author: Gabriel Totev <[email protected]>
Date:   Wed Apr 16 18:42:08 2025 -0400

    apparmor: shift ouid when mediating hard links in userns
    
    [ Upstream commit c5bf96d20fd787e4909b755de4705d52f3458836 ]
    
    When using AppArmor profiles inside an unprivileged container,
    the link operation observes an unshifted ouid.
    (tested with LXD and Incus)
    
    For example, root inside container and uid 1000000 outside, with
    `owner /root/link l,` profile entry for ln:
    
    /root$ touch chain && ln chain link
    ==> dmesg
    apparmor="DENIED" operation="link" class="file"
    namespace="root//lxd-feet_<var-snap-lxd-common-lxd>" profile="linkit"
    name="/root/link" pid=1655 comm="ln" requested_mask="l" denied_mask="l"
    fsuid=1000000 ouid=0 [<== should be 1000000] target="/root/chain"
    
    Fix by mapping inode uid of old_dentry in aa_path_link() rather than
    using it directly, similarly to how it's mapped in __file_path_perm()
    later in the file.
    
    Signed-off-by: Gabriel Totev <[email protected]>
    Signed-off-by: John Johansen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

apparmor: use the condition in AA_BUG_FMT even with debug disabled [+ + +]
Author: Mateusz Guzik <[email protected]>
Date:   Mon Jan 27 21:54:04 2025 +0100

    apparmor: use the condition in AA_BUG_FMT even with debug disabled
    
    [ Upstream commit 67e370aa7f968f6a4f3573ed61a77b36d1b26475 ]
    
    This follows the established practice and fixes a build failure for me:
    security/apparmor/file.c: In function ‘__file_sock_perm’:
    security/apparmor/file.c:544:24: error: unused variable ‘sock’ [-Werror=unused-variable]
      544 |         struct socket *sock = (struct socket *) file->private_data;
          |                        ^~~~
    
    Signed-off-by: Mateusz Guzik <[email protected]>
    Signed-off-by: John Johansen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
arm64/amu: Use capacity_ref_freq() to set AMU ratio [+ + +]
Author: Vincent Guittot <[email protected]>
Date:   Mon Dec 11 11:48:55 2023 +0100

    arm64/amu: Use capacity_ref_freq() to set AMU ratio
    
    commit 1f023007f5e782bda19ad9104830c404fd622c5d upstream.
    
    Use the new capacity_ref_freq() method to set the ratio that is used by AMU for
    computing the arch_scale_freq_capacity().
    This helps to keep everything aligned using the same reference for
    computing CPUs capacity.
    
    The default value of the ratio (stored in per_cpu(arch_max_freq_scale))
    ensures that arch_scale_freq_capacity() returns max capacity until it is
    set to its correct value with the cpu capacity and capacity_ref_freq().
    
    Signed-off-by: Vincent Guittot <[email protected]>
    Signed-off-by: Ingo Molnar <[email protected]>
    Acked-by: Sudeep Holla <[email protected]>
    Acked-by: Will Deacon <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: e37617c8e53a ("sched/fair: Fix frequency selection for non-invariant case")
    Signed-off-by: Wentao Guan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
arm64: dts: ti: k3-am62-main: Remove eMMC High Speed DDR support [+ + +]
Author: Judith Mendez <[email protected]>
Date:   Fri Aug 22 09:59:41 2025 -0400

    arm64: dts: ti: k3-am62-main: Remove eMMC High Speed DDR support
    
    [ Upstream commit 265f70af805f33a0dfc90f50cc0f116f702c3811 ]
    
    For eMMC, High Speed DDR mode is not supported [0], so remove
    mmc-ddr-1_8v flag which adds the capability.
    
    [0] https://www.ti.com/lit/gpn/am625
    
    Fixes: c37c58fdeb8a ("arm64: dts: ti: k3-am62: Add more peripheral nodes")
    Cc: [email protected]
    Signed-off-by: Judith Mendez <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vignesh Raghavendra <[email protected]>
    [ adapted context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

arm64: dts: ti: k3-am62-verdin: Enable pull-ups on I2C buses [+ + +]
Author: Emanuele Ghidoli <[email protected]>
Date:   Wed May 28 13:07:37 2025 +0200

    arm64: dts: ti: k3-am62-verdin: Enable pull-ups on I2C buses
    
    commit bdf4252f736cc1d2a8e3e633c70fe6c728f0756e upstream.
    
    Enable internal bias pull-ups on the SoC-side I2C buses that do not have
    external pull resistors populated on the SoM. This ensures proper
    default line levels.
    
    Cc: [email protected]
    Fixes: 316b80246b16 ("arm64: dts: ti: add verdin am62")
    Signed-off-by: Emanuele Ghidoli <[email protected]>
    Reviewed-by: Francesco Dolcini <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vignesh Raghavendra <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

arm64: dts: ti: k3-am62a7-sk: fix pinmux for main_uart1 [+ + +]
Author: Hong Guan <[email protected]>
Date:   Mon Jul 7 11:55:13 2025 -0500

    arm64: dts: ti: k3-am62a7-sk: fix pinmux for main_uart1
    
    commit 8e44ac61abaae56fc6eb537a04ed78b458c5b984 upstream.
    
    main_uart1 reserved for TIFS firmware traces is routed to the
    onboard FT4232 via a FET switch which is connected to pin A21 and
    B21 of the SoC and not E17 and C17. Fix it.
    
    Fixes: cf39ff15cc01a ("arm64: dts: ti: k3-am62a7-sk: Describe main_uart1 and wkup_uart")
    Cc: [email protected]
    Signed-off-by: Hong Guan <[email protected]>
    [[email protected]: expanded commit message]
    Signed-off-by: Bryan Brattlof <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vignesh Raghavendra <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

arm64: dts: ti: k3-pinctrl: Enable Schmitt Trigger by default [+ + +]
Author: Alexander Sverdlin <[email protected]>
Date:   Tue Jul 1 12:54:35 2025 +0200

    arm64: dts: ti: k3-pinctrl: Enable Schmitt Trigger by default
    
    commit 5b272127884bded21576a6ddceca13725a351c63 upstream.
    
    Switch Schmitt Trigger functions for PIN_INPUT* macros by default. This is
    HW PoR configuration, the slew rate requirements without ST enabled are
    pretty tough for these devices. We've noticed spurious GPIO interrupts even
    with noise-free edges but not meeting slew rate requirements (3.3E+6 V/s
    for 3.3v LVCMOS).
    
    It's not obvious why one might want to disable the PoR-enabled ST on any
    pin. Just enable it by default. As it's not possible to provide OR-able
    macros to disable the ST, shall anyone require it, provide a set of
    new macros with _NOST suffix.
    
    Fixes: fe49f2d776f7 ("arm64: dts: ti: Use local header for pinctrl register values")
    Cc: [email protected]
    Signed-off-by: Alexander Sverdlin <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    [[email protected]: Add Fixes tag]
    Signed-off-by: Vignesh Raghavendra <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

arm64: Handle KCOV __init vs inline mismatches [+ + +]
Author: Kees Cook <[email protected]>
Date:   Wed Jul 23 22:50:25 2025 -0700

    arm64: Handle KCOV __init vs inline mismatches
    
    [ Upstream commit 65c430906efffee9bd7551d474f01a6b1197df90 ]
    
    GCC appears to have kind of fragile inlining heuristics, in the
    sense that it can change whether or not it inlines something based on
    optimizations. It looks like the kcov instrumentation being added (or in
    this case, removed) from a function changes the optimization results,
    and some functions marked "inline" are _not_ inlined. In that case,
    we end up with __init code calling a function not marked __init, and we
    get the build warnings I'm trying to eliminate in the coming patch that
    adds __no_sanitize_coverage to __init functions:
    
    WARNING: modpost: vmlinux: section mismatch in reference: acpi_get_enable_method+0x1c (section: .text.unlikely) -> acpi_psci_present (section: .init.text)
    
    This problem is somewhat fragile (though using either __always_inline
    or __init will deterministically solve it), but we've tripped over
    this before with GCC and the solution has usually been to just use
    __always_inline and move on.
    
    For arm64 this requires forcing one ACPI function to be inlined with
    __always_inline.
    
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Kees Cook <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: Mark kernel as tainted on SAE and SError panic [+ + +]
Author: Breno Leitao <[email protected]>
Date:   Wed Jul 16 02:42:01 2025 -0700

    arm64: Mark kernel as tainted on SAE and SError panic
    
    [ Upstream commit d7ce7e3a84642aadf7c4787f7ec4f58eb163d129 ]
    
    Set TAINT_MACHINE_CHECK when SError or Synchronous External Abort (SEA)
    interrupts trigger a panic to flag potential hardware faults. This
    tainting mechanism aids in debugging and enables correlation of
    hardware-related crashes in large-scale deployments.
    
    This change aligns with similar patches[1] that mark machine check
    events when the system crashes due to hardware errors.
    
    Link: https://lore.kernel.org/all/[email protected]/ [1]
    Signed-off-by: Breno Leitao <[email protected]>
    Acked-by: Mark Rutland <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Will Deacon <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ARM: rockchip: fix kernel hang during smp initialization [+ + +]
Author: Alexander Kochetkov <[email protected]>
Date:   Thu Jul 3 17:04:53 2025 +0300

    ARM: rockchip: fix kernel hang during smp initialization
    
    [ Upstream commit 7cdb433bb44cdc87dc5260cdf15bf03cc1cd1814 ]
    
    In order to bring up secondary CPUs main CPU write trampoline
    code to SRAM. The trampoline code is written while secondary
    CPUs are powered on (at least that true for RK3188 CPU).
    Sometimes that leads to kernel hang. Probably because secondary
    CPU execute trampoline code while kernel doesn't expect.
    
    The patch moves SRAM initialization step to the point where all
    secondary CPUs are powered down.
    
    That fixes rarely hangs on RK3188:
    [    0.091568] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
    [    0.091996] rockchip_smp_prepare_cpus: ncores 4
    
    Signed-off-by: Alexander Kochetkov <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Heiko Stuebner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ARM: tegra: Use I/O memcpy to write to IRAM [+ + +]
Author: Aaron Kling <[email protected]>
Date:   Thu May 22 11:11:24 2025 -0500

    ARM: tegra: Use I/O memcpy to write to IRAM
    
    [ Upstream commit 398e67e0f5ae04b29bcc9cbf342e339fe9d3f6f1 ]
    
    Kasan crashes the kernel trying to check boundaries when using the
    normal memcpy.
    
    Signed-off-by: Aaron Kling <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Thierry Reding <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ASoC: codecs: rt5640: Retry DEVICE_ID verification [+ + +]
Author: Xinxin Wan <[email protected]>
Date:   Fri May 30 16:21:19 2025 +0200

    ASoC: codecs: rt5640: Retry DEVICE_ID verification
    
    [ Upstream commit 19f971057b2d7b99c80530ec1052b45de236a8da ]
    
    To be more resilient to codec-detection failures when the hardware
    powers on slowly, add retry mechanism to the device verification check.
    Similar pattern is found throughout a number of Realtek codecs. Our
    tests show that 60ms delay is sufficient to address readiness issues on
    rt5640 chip.
    
    Reviewed-by: Amadeusz Sławiński <[email protected]>
    Reviewed-by: Cezary Rojewski <[email protected]>
    Signed-off-by: Xinxin Wan <[email protected]>
    Signed-off-by: Cezary Rojewski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: core: Check for rtd == NULL in snd_soc_remove_pcm_runtime() [+ + +]
Author: Peter Ujfalusi <[email protected]>
Date:   Thu Jun 19 11:42:20 2025 +0300

    ASoC: core: Check for rtd == NULL in snd_soc_remove_pcm_runtime()
    
    [ Upstream commit 2d91cb261cac6d885954b8f5da28b5c176c18131 ]
    
    snd_soc_remove_pcm_runtime() might be called with rtd == NULL which will
    leads to null pointer dereference.
    This was reproduced with topology loading and marking a link as ignore
    due to missing hardware component on the system.
    On module removal the soc_tplg_remove_link() would call
    snd_soc_remove_pcm_runtime() with rtd == NULL since the link was ignored,
    no runtime was created.
    
    Signed-off-by: Peter Ujfalusi <[email protected]>
    Reviewed-by: Bard Liao <[email protected]>
    Reviewed-by: Ranjani Sridharan <[email protected]>
    Reviewed-by: Liam Girdwood <[email protected]>
    Reviewed-by: Kai Vehmanen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: fsl_sai: replace regmap_write with regmap_update_bits [+ + +]
Author: Shengjiu Wang <[email protected]>
Date:   Thu Aug 7 10:03:18 2025 +0800

    ASoC: fsl_sai: replace regmap_write with regmap_update_bits
    
    [ Upstream commit 0e270f32975fd21874185ba53653630dd40bf560 ]
    
    Use the regmap_write() for software reset in fsl_sai_config_disable would
    cause the FSL_SAI_CSR_BCE bit to be cleared. Refer to
    commit 197c53c8ecb34 ("ASoC: fsl_sai: Don't disable bitclock for i.MX8MP")
    FSL_SAI_CSR_BCE should not be cleared. So need to use regmap_update_bits()
    instead of regmap_write() for these bit operations.
    
    Fixes: dc78f7e59169d ("ASoC: fsl_sai: Force a software reset when starting in consumer mode")
    Signed-off-by: Shengjiu Wang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: hdac_hdmi: Rate limit logging on connection and disconnection [+ + +]
Author: Mark Brown <[email protected]>
Date:   Fri Jun 13 17:41:04 2025 +0100

    ASoC: hdac_hdmi: Rate limit logging on connection and disconnection
    
    [ Upstream commit c4ca928a6db1593802cd945f075a7e21dd0430c1 ]
    
    We currently log parse failures for ELD data and some disconnection events
    as errors without rate limiting. These log messages can be triggered very
    frequently in some situations, especially ELD parsing when there is nothing
    connected to a HDMI port which will generate:
    
    hdmi-audio-codec hdmi-audio-codec.1.auto: HDMI: Unknown ELD version 0
    
    While there's doubtless work that could be done on reducing the number of
    connection notification callbacks it's possible these may be legitimately
    generated by poor quality physical connections so let's use rate limiting
    to mitigate the log spam for the parse errors and lower the severity for
    disconnect logging to debug level.
    
    Signed-off-by: Mark Brown <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: Intel: avs: Fix uninitialized pointer error in probe() [+ + +]
Author: Cezary Rojewski <[email protected]>
Date:   Wed Jul 30 14:49:06 2025 +0200

    ASoC: Intel: avs: Fix uninitialized pointer error in probe()
    
    [ Upstream commit 11f74f48c14c1f4fe16541900ea5944c42e30ccf ]
    
    If pcim_request_all_regions() fails, error path operates on
    uninitialized 'bus' pointer. Found out by Coverity static analyzer.
    
    Reviewed-by: Amadeusz Sławiński <[email protected]>
    Signed-off-by: Cezary Rojewski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: qcom: use drvdata instead of component to keep id [+ + +]
Author: Srinivas Kandagatla <[email protected]>
Date:   Wed Jun 4 02:06:48 2025 +0000

    ASoC: qcom: use drvdata instead of component to keep id
    
    [ Upstream commit 8167f4f42572818fa8153be2b03e4c2120846603 ]
    
    Qcom lpass is using component->id to keep DAI ID (A).
    
    (S)     static int lpass_platform_pcmops_open(
                                    sruct snd_soc_component *component,
                                    struct snd_pcm_substream *substream)
            {                                                 ^^^^^^^^^(B0)
                    ...
    (B1)            struct snd_soc_pcm_runtime *soc_runtime = snd_soc_substream_to_rtd(substream);
    (B2)            struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(soc_runtime, 0);
                    ...
    (B3)            unsigned int dai_id = cpu_dai->driver->id;
    
    (A)             component->id = dai_id;
                    ...
            }
    
    This driver can get dai_id from substream (B0 - B3).
    In this driver, below functions get dai_id from component->id (A).
    
    (X)     lpass_platform_pcmops_suspend()
    (Y)     lpass_platform_pcmops_resume()
    (Z)     lpass_platform_copy()
    
    Here, (Z) can get it from substream (B0 - B3), don't need to use
    component->id (A). On suspend/resume (X)(Y), dai_id can only be obtained
    from component->id (A), because there is no substream (B0) in function
    parameter.
    
    But, component->id (A) itself should not be used for such purpose.
    It is intilialized at snd_soc_component_initialize(), and parsed its ID
    (= component->id) from device name (a).
    
            int snd_soc_component_initialize(...)
            {
                    ...
                    if (!component->name) {
    (a)                     component->name = fmt_single_name(dev, &component->id);
                            ...                                     ^^^^^^^^^^^^^
                    }
                    ...
            }
    
    Unfortunately, current code is broken to start with.
    
    There are many regmaps that the driver cares about, however its only
    managing one (either dp or i2s) in component suspend/resume path.
    
    I2S regmap is mandatory however other regmaps are setup based on flags
    like "hdmi_port_enable" and "codec_dma_enable".
    
    Correct thing for suspend/resume path to handle is by checking these
    flags, instead of using component->id.
    
    Signed-off-by: Srinivas Kandagatla <[email protected]>
    Suggested-by: Kuninori Morimoto <[email protected]>
    Signed-off-by: Kuninori Morimoto <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: soc-dapm: set bias_level if snd_soc_dapm_set_bias_level() was successed [+ + +]
Author: Kuninori Morimoto <[email protected]>
Date:   Fri Jul 11 02:26:39 2025 +0000

    ASoC: soc-dapm: set bias_level if snd_soc_dapm_set_bias_level() was successed
    
    [ Upstream commit f40ecc2743652c0b0f19935f81baf57c601eb7f0 ]
    
    ASoC has 2 functions to set bias level.
            (A) snd_soc_dapm_force_bias_level()
            (B) snd_soc_dapm_set_bias_level()
    
    snd_soc_dapm_force_bias_level() (A) will set dapm->bias_level (a) if
    successed.
    
    (A)     int snd_soc_dapm_force_bias_level(...)
            {
                    ...
                    if (ret == 0)
    (a)                     dapm->bias_level = level;
                    ...
            }
    
    snd_soc_dapm_set_bias_level() (B) is also a function that sets bias_level.
    It will call snd_soc_dapm_force_bias_level() (A) inside, but doesn't
    set dapm->bias_level by itself. One note is that (A) might not be called.
    
    (B)     static int snd_soc_dapm_set_bias_level(...)
            {
                    ...
                    ret = snd_soc_card_set_bias_level(...);
                    ...
                    if (dapm != &card->dapm)
    (A)                     ret = snd_soc_dapm_force_bias_level(...);
                    ...
                    ret = snd_soc_card_set_bias_level_post(...);
                    ...
            }
    
    dapm->bias_level will be set if (A) was called, but might not be set
    if (B) was called, even though it calles set_bias_level() function.
    
    We should set dapm->bias_level if we calls
    snd_soc_dapm_set_bias_level() (B), too.
    
    Signed-off-by: Kuninori Morimoto <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ata: Fix SATA_MOBILE_LPM_POLICY description in Kconfig [+ + +]
Author: Damien Le Moal <[email protected]>
Date:   Thu Aug 21 12:28:07 2025 -0400

    ata: Fix SATA_MOBILE_LPM_POLICY description in Kconfig
    
    [ Upstream commit ed62a62a18bc144f73eadf866ae46842e8f6606e ]
    
    Improve the description of the possible default SATA link power
    management policies and add the missing description for policy 5.
    No functional changes.
    
    Fixes: a5ec5a7bfd1f ("ata: ahci: Support state with min power but Partial low power state")
    Cc: [email protected]
    Signed-off-by: Damien Le Moal <[email protected]>
    Reviewed-by: Hannes Reinecke <[email protected]>
    Reviewed-by: Niklas Cassel <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ata: libata-sata: Disallow changing LPM state if not supported [+ + +]
Author: Damien Le Moal <[email protected]>
Date:   Tue Jul 1 21:53:16 2025 +0900

    ata: libata-sata: Disallow changing LPM state if not supported
    
    [ Upstream commit 413e800cadbf67550d76c77c230b2ecd96bce83a ]
    
    Modify ata_scsi_lpm_store() to return an error if a user attempts to set
    a link power management policy for a port that does not support LPM,
    that is, ports flagged with ATA_FLAG_NO_LPM.
    
    Signed-off-by: Damien Le Moal <[email protected]>
    Reviewed-by: Niklas Cassel <[email protected]>
    Reviewed-by: Hannes Reinecke <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Niklas Cassel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ata: libata-scsi: Fix ata_to_sense_error() status handling [+ + +]
Author: Damien Le Moal <[email protected]>
Date:   Tue Jul 29 18:28:07 2025 +0900

    ata: libata-scsi: Fix ata_to_sense_error() status handling
    
    commit cf3fc037623c54de48d2ec1a1ee686e2d1de2d45 upstream.
    
    Commit 8ae720449fca ("libata: whitespace fixes in ata_to_sense_error()")
    inadvertantly added the entry 0x40 (ATA_DRDY) to the stat_table array in
    the function ata_to_sense_error(). This entry ties a failed qc which has
    a status filed equal to ATA_DRDY to the sense key ILLEGAL REQUEST with
    the additional sense code UNALIGNED WRITE COMMAND. This entry will be
    used to generate a failed qc sense key and sense code when the qc is
    missing sense data and there is no match for the qc error field in the
    sense_table array of ata_to_sense_error().
    
    As a result, for a failed qc for which we failed to get sense data (e.g.
    read log 10h failed if qc is an NCQ command, or REQUEST SENSE EXT
    command failed for the non-ncq case, the user very often end up seeing
    the completely misleading "unaligned write command" error, even if qc
    was not a write command. E.g.:
    
    sd 0:0:0:0: [sda] tag#12 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s
    sd 0:0:0:0: [sda] tag#12 Sense Key : Illegal Request [current]
    sd 0:0:0:0: [sda] tag#12 Add. Sense: Unaligned write command
    sd 0:0:0:0: [sda] tag#12 CDB: Read(10) 28 00 00 00 10 00 00 00 08 00
    I/O error, dev sda, sector 4096 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 0
    
    Fix this by removing the ATA_DRDY entry from the stat_table array so
    that we default to always returning ABORTED COMMAND without any
    additional sense code, since we do not know any better. The entry 0x08
    (ATA_DRQ) is also removed since signaling ABORTED COMMAND with a parity
    error is also misleading (as a parity error would likely be signaled
    through a bus error). So for this case, also default to returning
    ABORTED COMMAND without any additional sense code. With this, the
    previous example error case becomes:
    
    sd 0:0:0:0: [sda] tag#17 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s
    sd 0:0:0:0: [sda] tag#17 Sense Key : Aborted Command [current]
    sd 0:0:0:0: [sda] tag#17 Add. Sense: No additional sense information
    sd 0:0:0:0: [sda] tag#17 CDB: Read(10) 28 00 00 00 10 00 00 00 08 00
    I/O error, dev sda, sector 4096 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 0
    
    Together with these fixes, refactor stat_table to make it more readable
    by putting the entries comments in front of the entries and using the
    defined status bits macros instead of hardcoded values.
    
    Reported-by: Lorenz Brun <[email protected]>
    Reported-by: Brandon Schwartz <[email protected]>
    Fixes: 8ae720449fca ("libata: whitespace fixes in ata_to_sense_error()")
    Cc: [email protected]
    Signed-off-by: Damien Le Moal <[email protected]>
    Reviewed-by: Hannes Reinecke <[email protected]>
    Reviewed-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ata: libata-scsi: Fix CDL control [+ + +]
Author: Igor Pylypiv <[email protected]>
Date:   Wed Aug 13 19:22:56 2025 -0700

    ata: libata-scsi: Fix CDL control
    
    commit 58768b0563916ddcb73d8ed26ede664915f8df31 upstream.
    
    Delete extra checks for the ATA_DFLAG_CDL_ENABLED flag that prevent
    SET FEATURES command from being issued to a drive when NCQ commands
    are active.
    
    ata_mselect_control_ata_feature() sets / clears the ATA_DFLAG_CDL_ENABLED
    flag during the translation of MODE SELECT to SET FEATURES. If SET FEATURES
    gets deferred due to outstanding NCQ commands, the original MODE SELECT
    command will be re-queued. When the re-queued MODE SELECT goes through
    the ata_mselect_control_ata_feature() translation again, SET FEATURES
    will not be issued because ATA_DFLAG_CDL_ENABLED has been already set or
    cleared by the initial translation of MODE SELECT.
    
    The ATA_DFLAG_CDL_ENABLED checks in ata_mselect_control_ata_feature()
    are safe to remove because scsi_cdl_enable() implements a similar logic
    that avoids enabling CDL if it has been enabled already.
    
    Fixes: 17e897a45675 ("ata: libata-scsi: Improve CDL control")
    Cc: [email protected]
    Signed-off-by: Igor Pylypiv <[email protected]>
    Reviewed-by: Niklas Cassel <[email protected]>
    Signed-off-by: Damien Le Moal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ata: libata-scsi: Return aborted command when missing sense and result TF [+ + +]
Author: Damien Le Moal <[email protected]>
Date:   Fri Aug 22 11:50:39 2025 +0900

    ata: libata-scsi: Return aborted command when missing sense and result TF
    
    Commit d2be9ea9a75550a35c5127a6c2633658bc38c76b upstream.
    
    ata_gen_ata_sense() is always called for a failed qc missing sense data
    so that a sense key, code and code qualifier can be generated using
    ata_to_sense_error() from the qc status and error fields of its result
    task file. However, if the qc does not have its result task file filled,
    ata_gen_ata_sense() returns early without setting a sense key.
    
    Improve this by defaulting to returning ABORTED COMMAND without any
    additional sense code, since we do not know the reason for the failure.
    The same fix is also applied in ata_gen_passthru_sense() with the
    additional check that the qc failed (qc->err_mask is set).
    
    Fixes: 816be86c7993 ("ata: libata-scsi: Check ATA_QCFLAG_RTF_FILLED before using result_tf")
    Cc: [email protected]
    Signed-off-by: Damien Le Moal <[email protected]>
    Reviewed-by: Hannes Reinecke <[email protected]>
    Reviewed-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
be2net: Use correct byte order and format string for TCP seq and ack_seq [+ + +]
Author: Alok Tiwari <[email protected]>
Date:   Thu Jul 17 12:35:47 2025 -0700

    be2net: Use correct byte order and format string for TCP seq and ack_seq
    
    [ Upstream commit 4701ee5044fb3992f1c910630a9673c2dc600ce5 ]
    
    The TCP header fields seq and ack_seq are 32-bit values in network
    byte order as (__be32). these fields were earlier printed using
    ntohs(), which converts only 16-bit values and produces incorrect
    results for 32-bit fields. This patch is changeing the conversion
    to ntohl(), ensuring correct interpretation of these sequence numbers.
    
    Notably, the format specifier is updated from %d to %u to reflect the
    unsigned nature of these fields.
    
    improves the accuracy of debug log messages for TCP sequence and
    acknowledgment numbers during TX timeouts.
    
    Signed-off-by: Alok Tiwari <[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]>

 
Linux: better lockdep annotations for simple_recursive_removal() [+ + +]
Author: Al Viro <[email protected]>
Date:   Wed Jul 2 22:30:32 2025 -0400

    better lockdep annotations for simple_recursive_removal()
    
    [ Upstream commit 2a8061ee5e41034eb14170ec4517b5583dbeff9f ]
    
    We want a class that nests outside of I_MUTEX_NORMAL (for the sake of
    callbacks that might want to lock the victim) and inside I_MUTEX_PARENT
    (so that a variant of that could be used with parent of the victim
    held locked by the caller).
    
    In reality, simple_recursive_removal()
            * never holds two locks at once
            * holds the lock on parent of dentry passed to callback
            * is used only on the trees with fixed topology, so the depths
    are not changing.
    
    So the locking order is actually fine.
    
    AFAICS, the best solution is to assign I_MUTEX_CHILD to the locks
    grabbed by that thing.
    
    Reported-by: [email protected]
    Signed-off-by: Al Viro <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
block: avoid possible overflow for chunk_sectors check in blk_stack_limits() [+ + +]
Author: John Garry <[email protected]>
Date:   Tue Jul 29 09:14:47 2025 +0000

    block: avoid possible overflow for chunk_sectors check in blk_stack_limits()
    
    [ Upstream commit 448dfecc7ff807822ecd47a5c052acedca7d09e8 ]
    
    In blk_stack_limits(), we check that the t->chunk_sectors value is a
    multiple of the t->physical_block_size value.
    
    However, by finding the chunk_sectors value in bytes, we may overflow
    the unsigned int which holds chunk_sectors, so change the check to be
    based on sectors.
    
    Reviewed-by: Hannes Reinecke <[email protected]>
    Reviewed-by: Martin K. Petersen <[email protected]>
    Signed-off-by: John Garry <[email protected]>
    Reviewed-by: Damien Le Moal <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

block: Make REQ_OP_ZONE_FINISH a write operation [+ + +]
Author: Damien Le Moal <[email protected]>
Date:   Fri Aug 15 18:07:59 2025 -0400

    block: Make REQ_OP_ZONE_FINISH a write operation
    
    [ Upstream commit 3f66ccbaaef3a0c5bd844eab04e3207b4061c546 ]
    
    REQ_OP_ZONE_FINISH is defined as "12", which makes
    op_is_write(REQ_OP_ZONE_FINISH) return false, despite the fact that a
    zone finish operation is an operation that modifies a zone (transition
    it to full) and so should be considered as a write operation (albeit
    one that does not transfer any data to the device).
    
    Fix this by redefining REQ_OP_ZONE_FINISH to be an odd number (13), and
    redefine REQ_OP_ZONE_RESET and REQ_OP_ZONE_RESET_ALL using sequential
    odd numbers from that new value.
    
    Fixes: 6c1b1da58f8c ("block: add zone open, close and finish operations")
    Cc: [email protected]
    Signed-off-by: Damien Le Moal <[email protected]>
    Reviewed-by: Bart Van Assche <[email protected]>
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

block: reject invalid operation in submit_bio_noacct [+ + +]
Author: Christoph Hellwig <[email protected]>
Date:   Fri Aug 15 18:07:58 2025 -0400

    block: reject invalid operation in submit_bio_noacct
    
    [ Upstream commit 1c042f8d4bc342b7985b1de3d76836f1a1083b65 ]
    
    submit_bio_noacct allows completely invalid operations, or operations
    that are not supported in the bio path.  Extent the existing switch
    statement to rejcect all invalid types.
    
    Move the code point for REQ_OP_ZONE_APPEND so that it's not right in the
    middle of the zone management operations and the switch statement can
    follow the numerical order of the operations.
    
    Signed-off-by: Christoph Hellwig <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Stable-dep-of: 3f66ccbaaef3 ("block: Make REQ_OP_ZONE_FINISH a write operation")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Bluetooth: hci_conn: do return error from hci_enhanced_setup_sync() [+ + +]
Author: Sergey Shtylyov <[email protected]>
Date:   Tue Aug 5 22:14:51 2025 +0300

    Bluetooth: hci_conn: do return error from hci_enhanced_setup_sync()
    
    [ Upstream commit 0eaf7c7e85da7495c0e03a99375707fc954f5e7b ]
    
    The commit e07a06b4eb41 ("Bluetooth: Convert SCO configure_datapath to
    hci_sync") missed to update the *return* statement under the *case* of
    BT_CODEC_TRANSPARENT in hci_enhanced_setup_sync(), which led to returning
    success (0) instead of the negative error code (-EINVAL).  However, the
    result of hci_enhanced_setup_sync() seems to be ignored anyway, since NULL
    gets passed to hci_cmd_sync_queue() as the last argument in that case and
    the only function interested in that result is specified by that argument.
    
    Fixes: e07a06b4eb41 ("Bluetooth: Convert SCO configure_datapath to hci_sync")
    Signed-off-by: Sergey Shtylyov <[email protected]>
    Reviewed-by: Paul Menzel <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: hci_event: fix MTU for BN == 0 in CIS Established [+ + +]
Author: Pauli Virtanen <[email protected]>
Date:   Sat Aug 9 11:36:20 2025 +0300

    Bluetooth: hci_event: fix MTU for BN == 0 in CIS Established
    
    [ Upstream commit 0b3725dbf61b51e7c663834811b3691157ae17d6 ]
    
    BN == 0x00 in CIS Established means no isochronous data for the
    corresponding direction (Core v6.1 pp. 2394). In this case SDU MTU
    should be 0.
    
    However, the specification does not say the Max_PDU_C_To_P or P_To_C are
    then zero.  Intel AX210 in Framed CIS mode sets nonzero Max_PDU for
    direction with zero BN.  This causes failure later when we try to LE
    Setup ISO Data Path for disabled direction, which is disallowed (Core
    v6.1 pp. 2750).
    
    Fix by setting SDU MTU to 0 if BN == 0.
    
    Fixes: 2be22f1941d5f ("Bluetooth: hci_event: Fix parsing of CIS Established Event")
    Signed-off-by: Pauli Virtanen <[email protected]>
    Reviewed-by: Paul Menzel <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: hci_sock: Reset cookie to zero in hci_sock_free_cookie() [+ + +]
Author: Zijun Hu <[email protected]>
Date:   Mon Jun 23 20:31:16 2025 +0800

    Bluetooth: hci_sock: Reset cookie to zero in hci_sock_free_cookie()
    
    [ Upstream commit 4d7936e8a5b1fa803f4a631d2da4a80fa4f0f37f ]
    
    Reset cookie value to 0 instead of 0xffffffff in hci_sock_free_cookie()
    since:
    0         :  means cookie has not been assigned yet
    0xffffffff:  means cookie assignment failure
    
    Also fix generating cookie failure with usage shown below:
    hci_sock_gen_cookie(sk)   // generate cookie
    hci_sock_free_cookie(sk)  // free cookie
    hci_sock_gen_cookie(sk)   // Can't generate cookie any more
    
    Signed-off-by: Zijun Hu <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bonding: Add independent control state machine [+ + +]
Author: Aahil Awatramani <[email protected]>
Date:   Fri Feb 2 17:58:58 2024 +0000

    bonding: Add independent control state machine
    
    [ Upstream commit 240fd405528bbf7fafa0559202ca7aa524c9cd96 ]
    
    Add support for the independent control state machine per IEEE
    802.1AX-2008 5.4.15 in addition to the existing implementation of the
    coupled control state machine.
    
    Introduces two new states, AD_MUX_COLLECTING and AD_MUX_DISTRIBUTING in
    the LACP MUX state machine for separated handling of an initial
    Collecting state before the Collecting and Distributing state. This
    enables a port to be in a state where it can receive incoming packets
    while not still distributing. This is useful for reducing packet loss when
    a port begins distributing before its partner is able to collect.
    
    Added new functions such as bond_set_slave_tx_disabled_flags and
    bond_set_slave_rx_enabled_flags to precisely manage the port's collecting
    and distributing states. Previously, there was no dedicated method to
    disable TX while keeping RX enabled, which this patch addresses.
    
    Note that the regular flow process in the kernel's bonding driver remains
    unaffected by this patch. The extension requires explicit opt-in by the
    user (in order to ensure no disruptions for existing setups) via netlink
    support using the new bonding parameter coupled_control. The default value
    for coupled_control is set to 1 so as to preserve existing behaviour.
    
    Signed-off-by: Aahil Awatramani <[email protected]>
    Reviewed-by: Hangbin Liu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Stable-dep-of: 0599640a21e9 ("bonding: send LACPDUs periodically in passive mode after receiving partner's LACPDU")
    Signed-off-by: Sasha Levin <[email protected]>

bonding: send LACPDUs periodically in passive mode after receiving partner's LACPDU [+ + +]
Author: Hangbin Liu <[email protected]>
Date:   Fri Aug 15 06:19:59 2025 +0000

    bonding: send LACPDUs periodically in passive mode after receiving partner's LACPDU
    
    [ Upstream commit 0599640a21e98f0d6a3e9ff85c0a687c90a8103b ]
    
    When `lacp_active` is set to `off`, the bond operates in passive mode, meaning
    it only "speaks when spoken to." However, the current kernel implementation
    only sends an LACPDU in response when the partner's state changes.
    
    As a result, once LACP negotiation succeeds, the actor stops sending LACPDUs
    until the partner times out and sends an "expired" LACPDU. This causes
    continuous LACP state flapping.
    
    According to IEEE 802.1AX-2014, 6.4.13 Periodic Transmission machine. The
    values of Partner_Oper_Port_State.LACP_Activity and
    Actor_Oper_Port_State.LACP_Activity determine whether periodic transmissions
    take place. If either or both parameters are set to Active LACP, then periodic
    transmissions occur; if both are set to Passive LACP, then periodic
    transmissions do not occur.
    
    To comply with this, we remove the `!bond->params.lacp_active` check in
    `ad_periodic_machine()`. Instead, we initialize the actor's port's
    `LACP_STATE_LACP_ACTIVITY` state based on `lacp_active` setting.
    
    Additionally, we avoid setting the partner's state to
    `LACP_STATE_LACP_ACTIVITY` in the EXPIRED state, since we should not assume
    the partner is active by default.
    
    This ensures that in passive mode, the bond starts sending periodic LACPDUs
    after receiving one from the partner, and avoids flapping due to inactivity.
    
    Fixes: 3a755cd8b7c6 ("bonding: add new option lacp_active")
    Signed-off-by: Hangbin Liu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bonding: update LACP activity flag after setting lacp_active [+ + +]
Author: Hangbin Liu <[email protected]>
Date:   Fri Aug 15 06:19:58 2025 +0000

    bonding: update LACP activity flag after setting lacp_active
    
    [ Upstream commit b64d035f77b1f02ab449393342264b44950a75ae ]
    
    The port's actor_oper_port_state activity flag should be updated immediately
    after changing the lacp_active option to reflect the current mode correctly.
    
    Fixes: 3a755cd8b7c6 ("bonding: add new option lacp_active")
    Signed-off-by: Hangbin Liu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf: Make reg_not_null() true for CONST_PTR_TO_MAP [+ + +]
Author: Ihor Solodrai <[email protected]>
Date:   Mon Jun 9 11:30:22 2025 -0700

    bpf: Make reg_not_null() true for CONST_PTR_TO_MAP
    
    [ Upstream commit 5534e58f2e9bd72b253d033ee0af6e68eb8ac96b ]
    
    When reg->type is CONST_PTR_TO_MAP, it can not be null. However the
    verifier explores the branches under rX == 0 in check_cond_jmp_op()
    even if reg->type is CONST_PTR_TO_MAP, because it was not checked for
    in reg_not_null().
    
    Fix this by adding CONST_PTR_TO_MAP to the set of types that are
    considered non nullable in reg_not_null().
    
    An old "unpriv: cmp map pointer with zero" selftest fails with this
    change, because now early out correctly triggers in
    check_cond_jmp_op(), making the verification to pass.
    
    In practice verifier may allow pointer to null comparison in unpriv,
    since in many cases the relevant branch and comparison op are removed
    as dead code. So change the expected test result to __success_unpriv.
    
    Signed-off-by: Ihor Solodrai <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Acked-by: Andrii Nakryiko <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
bpftool: Fix JSON writer resource leak in version command [+ + +]
Author: Yuan Chen <[email protected]>
Date:   Tue Jun 17 09:24:42 2025 -0400

    bpftool: Fix JSON writer resource leak in version command
    
    [ Upstream commit 85cd83fed8267cde0dd1cea719808aad95ae4de7 ]
    
    When using `bpftool --version -j/-p`, the JSON writer object
    created in do_version() was not properly destroyed after use.
    This caused a memory leak each time the version command was
    executed with JSON output.
    
    Fix: 004b45c0e51a (tools: bpftool: provide JSON output for all possible commands)
    
    Suggested-by: Quentin Monnet <[email protected]>
    Signed-off-by: Yuan Chen <[email protected]>
    Signed-off-by: Andrii Nakryiko <[email protected]>
    Reviewed-by: Quentin Monnet <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
btrfs: abort transaction during log replay if walk_log_tree() failed [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Wed May 21 17:41:18 2025 +0100

    btrfs: abort transaction during log replay if walk_log_tree() failed
    
    commit 2a5898c4aac67494c2f0f7fe38373c95c371c930 upstream.
    
    If we failed walking a log tree during replay, we have a missing
    transaction abort to prevent committing a transaction where we didn't
    fully replay all the changes from a log tree and therefore can leave the
    respective subvolume tree in some inconsistent state. So add the missing
    transaction abort.
    
    CC: [email protected] # 6.1+
    Reviewed-by: Qu Wenruo <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: abort transaction on unexpected eb generation at btrfs_copy_root() [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Mon Aug 18 21:15:16 2025 -0400

    btrfs: abort transaction on unexpected eb generation at btrfs_copy_root()
    
    [ Upstream commit 33e8f24b52d2796b8cfb28c19a1a7dd6476323a8 ]
    
    If we find an unexpected generation for the extent buffer we are cloning
    at btrfs_copy_root(), we just WARN_ON() and don't error out and abort the
    transaction, meaning we allow to persist metadata with an unexpected
    generation. Instead of warning only, abort the transaction and return
    -EUCLEAN.
    
    CC: [email protected] # 6.1+
    Reviewed-by: Daniel Vacek <[email protected]>
    Reviewed-by: Qu Wenruo <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: always abort transaction on failure to add block group to free space tree [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Mon Aug 18 20:57:51 2025 -0400

    btrfs: always abort transaction on failure to add block group to free space tree
    
    [ Upstream commit 1f06c942aa709d397cf6bed577a0d10a61509667 ]
    
    Only one of the callers of __add_block_group_free_space() aborts the
    transaction if the call fails, while the others don't do it and it's
    either never done up the call chain or much higher in the call chain.
    
    So make sure we abort the transaction at __add_block_group_free_space()
    if it fails, which brings a couple benefits:
    
    1) If some call chain never aborts the transaction, we avoid having some
       metadata inconsistency because BLOCK_GROUP_FLAG_NEEDS_FREE_SPACE is
       cleared when we enter __add_block_group_free_space() and therefore
       __add_block_group_free_space() is never called again to add the block
       group items to the free space tree, since the function is only called
       when that flag is set in a block group;
    
    2) If the call chain already aborts the transaction, then we get a better
       trace that points to the exact step from __add_block_group_free_space()
       which failed, which is better for analysis.
    
    So abort the transaction at __add_block_group_free_space() if any of its
    steps fails.
    
    CC: [email protected] # 6.6+
    Reviewed-by: Boris Burkov <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: clear dirty status from extent buffer on error at insert_new_root() [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Mon Jun 30 10:50:46 2025 +0100

    btrfs: clear dirty status from extent buffer on error at insert_new_root()
    
    commit c0d013495a80cbb53e2288af7ae0ec4170aafd7c upstream.
    
    If we failed to insert the tree mod log operation, we are not removing the
    dirty status from the allocated and dirtied extent buffer before we free
    it. Removing the dirty status is needed for several reasons such as to
    adjust the fs_info->dirty_metadata_bytes counter and remove the dirty
    status from the respective folios. So add the missing call to
    btrfs_clear_buffer_dirty().
    
    Fixes: f61aa7ba08ab ("btrfs: do not BUG_ON() on tree mod log failure at insert_new_root()")
    CC: [email protected] # 6.6+
    Reviewed-by: Boris Burkov <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: constify more pointer parameters [+ + +]
Author: David Sterba <[email protected]>
Date:   Mon Aug 18 22:27:53 2025 -0400

    btrfs: constify more pointer parameters
    
    [ Upstream commit ca283ea9920ac20ae23ed398b693db3121045019 ]
    
    Continue adding const to parameters.  This is for clarity and minor
    addition to safety. There are some minor effects, in the assembly code
    and .ko measured on release config.
    
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: do not allow relocation of partially dropped subvolumes [+ + +]
Author: Qu Wenruo <[email protected]>
Date:   Fri Jul 25 20:33:25 2025 +0930

    btrfs: do not allow relocation of partially dropped subvolumes
    
    commit 4289b494ac553e74e86fed1c66b2bf9530bc1082 upstream.
    
    [BUG]
    There is an internal report that balance triggered transaction abort,
    with the following call trace:
    
      item 85 key (594509824 169 0) itemoff 12599 itemsize 33
              extent refs 1 gen 197740 flags 2
              ref#0: tree block backref root 7
      item 86 key (594558976 169 0) itemoff 12566 itemsize 33
              extent refs 1 gen 197522 flags 2
              ref#0: tree block backref root 7
     ...
     BTRFS error (device loop0): extent item not found for insert, bytenr 594526208 num_bytes 16384 parent 449921024 root_objectid 934 owner 1 offset 0
     BTRFS error (device loop0): failed to run delayed ref for logical 594526208 num_bytes 16384 type 182 action 1 ref_mod 1: -117
     ------------[ cut here ]------------
     BTRFS: Transaction aborted (error -117)
     WARNING: CPU: 1 PID: 6963 at ../fs/btrfs/extent-tree.c:2168 btrfs_run_delayed_refs+0xfa/0x110 [btrfs]
    
    And btrfs check doesn't report anything wrong related to the extent
    tree.
    
    [CAUSE]
    The cause is a little complex, firstly the extent tree indeed doesn't
    have the backref for 594526208.
    
    The extent tree only have the following two backrefs around that bytenr
    on-disk:
    
            item 65 key (594509824 METADATA_ITEM 0) itemoff 13880 itemsize 33
                    refs 1 gen 197740 flags TREE_BLOCK
                    tree block skinny level 0
                    (176 0x7) tree block backref root CSUM_TREE
            item 66 key (594558976 METADATA_ITEM 0) itemoff 13847 itemsize 33
                    refs 1 gen 197522 flags TREE_BLOCK
                    tree block skinny level 0
                    (176 0x7) tree block backref root CSUM_TREE
    
    But the such missing backref item is not an corruption on disk, as the
    offending delayed ref belongs to subvolume 934, and that subvolume is
    being dropped:
    
            item 0 key (934 ROOT_ITEM 198229) itemoff 15844 itemsize 439
                    generation 198229 root_dirid 256 bytenr 10741039104 byte_limit 0 bytes_used 345571328
                    last_snapshot 198229 flags 0x1000000000001(RDONLY) refs 0
                    drop_progress key (206324 EXTENT_DATA 2711650304) drop_level 2
                    level 2 generation_v2 198229
    
    And that offending tree block 594526208 is inside the dropped range of
    that subvolume.  That explains why there is no backref item for that
    bytenr and why btrfs check is not reporting anything wrong.
    
    But this also shows another problem, as btrfs will do all the orphan
    subvolume cleanup at a read-write mount.
    
    So half-dropped subvolume should not exist after an RW mount, and
    balance itself is also exclusive to subvolume cleanup, meaning we
    shouldn't hit a subvolume half-dropped during relocation.
    
    The root cause is, there is no orphan item for this subvolume.
    In fact there are 5 subvolumes from around 2021 that have the same
    problem.
    
    It looks like the original report has some older kernels running, and
    caused those zombie subvolumes.
    
    Thankfully upstream commit 8d488a8c7ba2 ("btrfs: fix subvolume/snapshot
    deletion not triggered on mount") has long fixed the bug.
    
    [ENHANCEMENT]
    For repairing such old fs, btrfs-progs will be enhanced.
    
    Considering how delayed the problem will show up (at run delayed ref
    time) and at that time we have to abort transaction already, it is too
    late.
    
    Instead here we reject any half-dropped subvolume for reloc tree at the
    earliest time, preventing confusion and extra time wasted on debugging
    similar bugs.
    
    CC: [email protected] # 5.15+
    Reviewed-by: Filipe Manana <[email protected]>
    Signed-off-by: Qu Wenruo <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: don't ignore inode missing when replaying log tree [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Mon Aug 18 19:47:23 2025 -0400

    btrfs: don't ignore inode missing when replaying log tree
    
    [ Upstream commit 7ebf381a69421a88265d3c49cd0f007ba7336c9d ]
    
    During log replay, at add_inode_ref(), we return -ENOENT if our current
    inode isn't found on the subvolume tree or if a parent directory isn't
    found. The error comes from btrfs_iget_logging() <- btrfs_iget() <-
    btrfs_read_locked_inode().
    
    The single caller of add_inode_ref(), replay_one_buffer(), ignores an
    -ENOENT error because it expects that error to mean only that a parent
    directory wasn't found and that is ok.
    
    Before commit 5f61b961599a ("btrfs: fix inode lookup error handling during
    log replay") we were converting any error when getting a parent directory
    to -ENOENT and any error when getting the current inode to -EIO, so our
    caller would fail log replay in case we can't find the current inode.
    After that commit however in case the current inode is not found we return
    -ENOENT to the caller and therefore it ignores the critical fact that the
    current inode was not found in the subvolume tree.
    
    Fix this by converting -ENOENT to 0 when we don't find a parent directory,
    returning -ENOENT when we don't find the current inode and making the
    caller, replay_one_buffer(), not ignore -ENOENT anymore.
    
    Fixes: 5f61b961599a ("btrfs: fix inode lookup error handling during log replay")
    CC: [email protected] # 6.16
    Reviewed-by: Boris Burkov <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    [ adapted btrfs_inode pointer usage to older inode API ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: fix log tree replay failure due to file with 0 links and extents [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Wed Jul 30 19:18:37 2025 +0100

    btrfs: fix log tree replay failure due to file with 0 links and extents
    
    commit 0a32e4f0025a74c70dcab4478e9b29c22f5ecf2f upstream.
    
    If we log a new inode (not persisted in a past transaction) that has 0
    links and extents, then log another inode with an higher inode number, we
    end up with failing to replay the log tree with -EINVAL. The steps for
    this are:
    
    1) create new file A
    2) write some data to file A
    3) open an fd on file A
    4) unlink file A
    5) fsync file A using the previously open fd
    6) create file B (has higher inode number than file A)
    7) fsync file B
    8) power fail before current transaction commits
    
    Now when attempting to mount the fs, the log replay will fail with
    -ENOENT at replay_one_extent() when attempting to replay the first
    extent of file A. The failure comes when trying to open the inode for
    file A in the subvolume tree, since it doesn't exist.
    
    Before commit 5f61b961599a ("btrfs: fix inode lookup error handling
    during log replay"), the returned error was -EIO instead of -ENOENT,
    since we converted any errors when attempting to read an inode during
    log replay to -EIO.
    
    The reason for this is that the log replay procedure fails to ignore
    the current inode when we are at the stage LOG_WALK_REPLAY_ALL, our
    current inode has 0 links and last inode we processed in the previous
    stage has a non 0 link count. In other words, the issue is that at
    replay_one_extent() we only update wc->ignore_cur_inode if the current
    replay stage is LOG_WALK_REPLAY_INODES.
    
    Fix this by updating wc->ignore_cur_inode whenever we find an inode item
    regardless of the current replay stage. This is a simple solution and easy
    to backport, but later we can do other alternatives like avoid logging
    extents or inode items other than the inode item for inodes with a link
    count of 0.
    
    The problem with the wc->ignore_cur_inode logic has been around since
    commit f2d72f42d5fa ("Btrfs: fix warning when replaying log after fsync
    of a tmpfile") but it only became frequent to hit since the more recent
    commit 5e85262e542d ("btrfs: fix fsync of files with no hard links not
    persisting deletion"), because we stopped skipping inodes with a link
    count of 0 when logging, while before the problem would only be triggered
    if trying to replay a log tree created with an older kernel which has a
    logged inode with 0 links.
    
    A test case for fstests will be submitted soon.
    
    Reported-by: Peter Jung <[email protected]>
    Link: https://lore.kernel.org/linux-btrfs/[email protected]/
    Reported-by: burneddi <[email protected]>
    Link: https://lore.kernel.org/linux-btrfs/lh4W-Lwc0Mbk-QvBhhQyZxf6VbM3E8VtIvU3fPIQgweP_Q1n7wtlUZQc33sYlCKYd-o6rryJQfhHaNAOWWRKxpAXhM8NZPojzsJPyHMf2qY=@protonmail.com/#t
    Reported-by: Russell Haley <[email protected]>
    Link: https://lore.kernel.org/linux-btrfs/[email protected]/
    Fixes: f2d72f42d5fa ("Btrfs: fix warning when replaying log after fsync of a tmpfile")
    CC: [email protected] # 5.4+
    Reviewed-by: Boris Burkov <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: fix ssd_spread overallocation [+ + +]
Author: Boris Burkov <[email protected]>
Date:   Mon Aug 18 22:27:52 2025 -0400

    btrfs: fix ssd_spread overallocation
    
    [ Upstream commit 807d9023e75fc20bfd6dd2ac0408ce4af53f1648 ]
    
    If the ssd_spread mount option is enabled, then we run the so called
    clustered allocator for data block groups. In practice, this results in
    creating a btrfs_free_cluster which caches a block_group and borrows its
    free extents for allocation.
    
    Since the introduction of allocation size classes in 6.1, there has been
    a bug in the interaction between that feature and ssd_spread.
    find_free_extent() has a number of nested loops. The loop going over the
    allocation stages, stored in ffe_ctl->loop and managed by
    find_free_extent_update_loop(), the loop over the raid levels, and the
    loop over all the block_groups in a space_info. The size class feature
    relies on the block_group loop to ensure it gets a chance to see a
    block_group of a given size class.  However, the clustered allocator
    uses the cached cluster block_group and breaks that loop. Each call to
    do_allocation() will really just go back to the same cached block_group.
    Normally, this is OK, as the allocation either succeeds and we don't
    want to loop any more or it fails, and we clear the cluster and return
    its space to the block_group.
    
    But with size classes, the allocation can succeed, then later fail,
    outside of do_allocation() due to size class mismatch. That latter
    failure is not properly handled due to the highly complex multi loop
    logic. The result is a painful loop where we continue to allocate the
    same num_bytes from the cluster in a tight loop until it fails and
    releases the cluster and lets us try a new block_group. But by then, we
    have skipped great swaths of the available block_groups and are likely
    to fail to allocate, looping the outer loop. In pathological cases like
    the reproducer below, the cached block_group is often the very last one,
    in which case we don't perform this tight bg loop but instead rip
    through the ffe stages to LOOP_CHUNK_ALLOC and allocate a chunk, which
    is now the last one, and we enter the tight inner loop until an
    allocation failure. Then allocation succeeds on the final block_group
    and if the next allocation is a size mismatch, the exact same thing
    happens again.
    
    Triggering this is as easy as mounting with -o ssd_spread and then
    running:
    
      mount -o ssd_spread $dev $mnt
      dd if=/dev/zero of=$mnt/big bs=16M count=1 &>/dev/null
      dd if=/dev/zero of=$mnt/med bs=4M count=1 &>/dev/null
      sync
    
    if you do the two writes + sync in a loop, you can force btrfs to spin
    an excessive amount on semi-successful clustered allocations, before
    ultimately failing and advancing to the stage where we force a chunk
    allocation. This results in 2G of data allocated per iteration, despite
    only using ~20M of data. By using a small size classed extent, the inner
    loop takes longer and we can spin for longer.
    
    The simplest, shortest term fix to unbreak this is to make the clustered
    allocator size_class aware in the dumbest way, where it fails on size
    class mismatch. This may hinder the operation of the clustered
    allocator, but better hindered than completely broken and terribly
    overallocating.
    
    Further re-design improvements are also in the works.
    
    Fixes: 52bb7a2166af ("btrfs: introduce size class to block group allocator")
    CC: [email protected] # 6.1+
    Reported-by: David Sterba <[email protected]>
    Reviewed-by: Filipe Manana <[email protected]>
    Signed-off-by: Boris Burkov <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: move transaction aborts to the error site in add_block_group_free_space() [+ + +]
Author: David Sterba <[email protected]>
Date:   Mon Aug 18 20:57:50 2025 -0400

    btrfs: move transaction aborts to the error site in add_block_group_free_space()
    
    [ Upstream commit b63c8c1ede4407835cb8c8bed2014d96619389f3 ]
    
    Transaction aborts should be done next to the place the error happens,
    which was not done in add_block_group_free_space().
    
    Reviewed-by: Filipe Manana <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Stable-dep-of: 1f06c942aa70 ("btrfs: always abort transaction on failure to add block group to free space tree")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: open code timespec64 in struct btrfs_inode [+ + +]
Author: David Sterba <[email protected]>
Date:   Mon Aug 18 23:04:31 2025 -0400

    btrfs: open code timespec64 in struct btrfs_inode
    
    [ Upstream commit c6e8f898f56fae2cb5bc4396bec480f23cd8b066 ]
    
    The type of timespec64::tv_nsec is 'unsigned long', while we have only
    u32 for on-disk and in-memory. This wastes a few bytes in btrfs_inode.
    Add separate members for sec and nsec with the corresponding type width.
    This creates a 4 byte hole in btrfs_inode which can be utilized in the
    future.
    
    Signed-off-by: David Sterba <[email protected]>
    Stable-dep-of: 1ef94169db09 ("btrfs: populate otime when logging an inode item")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: populate otime when logging an inode item [+ + +]
Author: Qu Wenruo <[email protected]>
Date:   Mon Aug 18 23:04:32 2025 -0400

    btrfs: populate otime when logging an inode item
    
    [ Upstream commit 1ef94169db0958d6de39f9ea6e063ce887342e2d ]
    
    [TEST FAILURE WITH EXPERIMENTAL FEATURES]
    When running test case generic/508, the test case will fail with the new
    btrfs shutdown support:
    
    generic/508       - output mismatch (see /home/adam/xfstests/results//generic/508.out.bad)
    #    --- tests/generic/508.out  2022-05-11 11:25:30.806666664 +0930
    #    +++ /home/adam/xfstests/results//generic/508.out.bad       2025-07-02 14:53:22.401824212 +0930
    #    @@ -1,2 +1,6 @@
    #     QA output created by 508
    #     Silence is golden
    #    +Before:
    #    +After : stat.btime = Thu Jan  1 09:30:00 1970
    #    +Before:
    #    +After : stat.btime = Wed Jul  2 14:53:22 2025
    #    ...
    #    (Run 'diff -u /home/adam/xfstests/tests/generic/508.out /home/adam/xfstests/results//generic/508.out.bad'  to see the entire diff)
    Ran: generic/508
    Failures: generic/508
    Failed 1 of 1 tests
    
    Please note that the test case requires shutdown support, thus the test
    case will be skipped using the current upstream kernel, as it doesn't
    have shutdown ioctl support.
    
    [CAUSE]
    The direct cause the 0 time stamp in the log tree:
    
    leaf 30507008 items 2 free space 16057 generation 9 owner TREE_LOG
    leaf 30507008 flags 0x1(WRITTEN) backref revision 1
    checksum stored e522548d
    checksum calced e522548d
    fs uuid 57d45451-481e-43e4-aa93-289ad707a3a0
    chunk uuid d52bd3fd-5163-4337-98a7-7986993ad398
            item 0 key (257 INODE_ITEM 0) itemoff 16123 itemsize 160
                    generation 9 transid 9 size 0 nbytes 0
                    block group 0 mode 100644 links 1 uid 0 gid 0 rdev 0
                    sequence 1 flags 0x0(none)
                    atime 1751432947.492000000 (2025-07-02 14:39:07)
                    ctime 1751432947.492000000 (2025-07-02 14:39:07)
                    mtime 1751432947.492000000 (2025-07-02 14:39:07)
                    otime 0.0 (1970-01-01 09:30:00) <<<
    
    But the old fs tree has all the correct time stamp:
    
    btrfs-progs v6.12
    fs tree key (FS_TREE ROOT_ITEM 0)
    leaf 30425088 items 2 free space 16061 generation 5 owner FS_TREE
    leaf 30425088 flags 0x1(WRITTEN) backref revision 1
    checksum stored 48f6c57e
    checksum calced 48f6c57e
    fs uuid 57d45451-481e-43e4-aa93-289ad707a3a0
    chunk uuid d52bd3fd-5163-4337-98a7-7986993ad398
            item 0 key (256 INODE_ITEM 0) itemoff 16123 itemsize 160
                    generation 3 transid 0 size 0 nbytes 16384
                    block group 0 mode 40755 links 1 uid 0 gid 0 rdev 0
                    sequence 0 flags 0x0(none)
                    atime 1751432947.0 (2025-07-02 14:39:07)
                    ctime 1751432947.0 (2025-07-02 14:39:07)
                    mtime 1751432947.0 (2025-07-02 14:39:07)
                    otime 1751432947.0 (2025-07-02 14:39:07) <<<
    
    The root cause is that fill_inode_item() in tree-log.c is only
    populating a/c/m time, not the otime (or btime in statx output).
    
    Part of the reason is that, the vfs inode only has a/c/m time, no native
    btime support yet.
    
    [FIX]
    Thankfully btrfs has its otime stored in btrfs_inode::i_otime_sec and
    btrfs_inode::i_otime_nsec.
    
    So what we really need is just fill the otime time stamp in
    fill_inode_item() of tree-log.c
    
    There is another fill_inode_item() in inode.c, which is doing the proper
    otime population.
    
    Fixes: 94edf4ae43a5 ("Btrfs: don't bother committing delayed inode updates when fsyncing")
    CC: [email protected]
    Reviewed-by: Filipe Manana <[email protected]>
    Signed-off-by: Qu Wenruo <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: qgroup: fix race between quota disable and quota rescan ioctl [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Mon Aug 18 20:07:19 2025 -0400

    btrfs: qgroup: fix race between quota disable and quota rescan ioctl
    
    [ Upstream commit e1249667750399a48cafcf5945761d39fa584edf ]
    
    There's a race between a task disabling quotas and another running the
    rescan ioctl that can result in a use-after-free of qgroup records from
    the fs_info->qgroup_tree rbtree.
    
    This happens as follows:
    
    1) Task A enters btrfs_ioctl_quota_rescan() -> btrfs_qgroup_rescan();
    
    2) Task B enters btrfs_quota_disable() and calls
       btrfs_qgroup_wait_for_completion(), which does nothing because at that
       point fs_info->qgroup_rescan_running is false (it wasn't set yet by
       task A);
    
    3) Task B calls btrfs_free_qgroup_config() which starts freeing qgroups
       from fs_info->qgroup_tree without taking the lock fs_info->qgroup_lock;
    
    4) Task A enters qgroup_rescan_zero_tracking() which starts iterating
       the fs_info->qgroup_tree tree while holding fs_info->qgroup_lock,
       but task B is freeing qgroup records from that tree without holding
       the lock, resulting in a use-after-free.
    
    Fix this by taking fs_info->qgroup_lock at btrfs_free_qgroup_config().
    Also at btrfs_qgroup_rescan() don't start the rescan worker if quotas
    were already disabled.
    
    Reported-by: cen zhang <[email protected]>
    Link: https://lore.kernel.org/linux-btrfs/CAFRLqsV+cMDETFuzqdKSHk_FDm6tneea45krsHqPD6B3FetLpQ@mail.gmail.com/
    CC: [email protected] # 6.1+
    Reviewed-by: Boris Burkov <[email protected]>
    Reviewed-by: Qu Wenruo <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    [ Check for BTRFS_FS_QUOTA_ENABLED, instead of btrfs_qgroup_full_accounting() ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: send: add and use helper to rename current inode when processing refs [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Mon Aug 18 22:40:16 2025 -0400

    btrfs: send: add and use helper to rename current inode when processing refs
    
    [ Upstream commit ec666c84deba56f714505b53556a97565f72db86 ]
    
    Extract the logic to rename the current inode at process_recorded_refs()
    into a helper function and use it, therefore removing duplicated logic
    and making it easier for an upcoming patch by avoiding yet more duplicated
    logic.
    
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Stable-dep-of: 005b0a0c24e1 ("btrfs: send: use fallocate for hole punching with send stream v2")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: send: avoid path allocation for the current inode when issuing commands [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Mon Aug 18 22:40:18 2025 -0400

    btrfs: send: avoid path allocation for the current inode when issuing commands
    
    [ Upstream commit 374d45af6435534a11b01b88762323abf03dd755 ]
    
    Whenever we issue a command we allocate a path and then compute it. For
    the current inode this is not necessary since we have one preallocated
    and computed in the send context structure, so we can use it instead
    and avoid allocating and freeing a path.
    
    For example if we have 100 extents to send (100 write commands) for a
    file, we are allocating and freeing paths 100 times.
    
    So improve on this by avoiding path allocation and freeing whenever a
    command is for the current inode by using the current inode's path
    stored in the send context structure.
    
    A test was run before applying this patch and the previous one in the
    series:
    
      "btrfs: send: keep the current inode's path cached"
    
    The test script is the following:
    
      $ cat test.sh
      #!/bin/bash
    
      DEV=/dev/nullb0
      MNT=/mnt/nullb0
    
      mkfs.btrfs -f $DEV > /dev/null
      mount $DEV $MNT
    
      DIR="$MNT/one/two/three/four"
      FILE="$DIR/foobar"
    
      mkdir -p $DIR
    
      # Create some empty files to get a deeper btree and therefore make
      # path computations slower.
      for ((i = 1; i <= 30000; i++)); do
          echo -n > "$DIR/filler_$i"
      done
    
      for ((i = 0; i < 10000; i += 2)); do
         offset=$(( i * 4096 ))
         xfs_io -f -c "pwrite -S 0xab $offset 4K" $FILE > /dev/null
      done
    
      btrfs subvolume snapshot -r $MNT $MNT/snap
    
      start=$(date +%s%N)
      btrfs send -f /dev/null $MNT/snap
      end=$(date +%s%N)
    
      echo -e "\nsend took $(( (end - start) / 1000000 )) milliseconds"
    
      umount $MNT
    
    Result before applying the 2 patches:  1121 milliseconds
    Result after applying the 2 patches:    815 milliseconds  (-31.6%)
    
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Stable-dep-of: 005b0a0c24e1 ("btrfs: send: use fallocate for hole punching with send stream v2")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: send: factor out common logic when sending xattrs [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Mon Aug 18 22:40:14 2025 -0400

    btrfs: send: factor out common logic when sending xattrs
    
    [ Upstream commit 17f6a74d0b89092e38e3328b66eda1ab29a195d4 ]
    
    We always send xattrs for the current inode only and both callers of
    send_set_xattr() pass a path for the current inode. So move the path
    allocation and computation to send_set_xattr(), reducing duplicated
    code. This also facilitates an upcoming patch.
    
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Stable-dep-of: 005b0a0c24e1 ("btrfs: send: use fallocate for hole punching with send stream v2")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: send: keep the current inode's path cached [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Mon Aug 18 22:40:17 2025 -0400

    btrfs: send: keep the current inode's path cached
    
    [ Upstream commit fc746acb7aa9aeaa2cb5dcba449323319ba5c8eb ]
    
    Whenever we need to send a command for the current inode, like sending
    writes, xattr updates, truncates, utimes, etc, we compute the inode's
    path each time, which implies doing some memory allocations and traversing
    the inode hierarchy to extract the name of the inode and each ancestor
    directory, and that implies doing lookups in the subvolume tree amongst
    other operations.
    
    Most of the time, by far, the current inode's path doesn't change while
    we are processing it (like if we need to issue 100 write commands, the
    path remains the same and it's pointless to compute it 100 times).
    
    To avoid this keep the current inode's path cached in the send context
    and invalidate it or update it whenever it's needed (after unlinks or
    renames).
    
    A performance test, and its results, is mentioned in the next patch in
    the series (subject: "btrfs: send: avoid path allocation for the current
    inode when issuing commands").
    
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Stable-dep-of: 005b0a0c24e1 ("btrfs: send: use fallocate for hole punching with send stream v2")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: send: make fs_path_len() inline and constify its argument [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Mon Aug 18 22:40:20 2025 -0400

    btrfs: send: make fs_path_len() inline and constify its argument
    
    [ Upstream commit 920e8ee2bfcaf886fd8c0ad9df097a7dddfeb2d8 ]
    
    The helper function fs_path_len() is trivial and doesn't need to change
    its path argument, so make it inline and constify the argument.
    
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: send: only use boolean variables at process_recorded_refs() [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Mon Aug 18 22:40:15 2025 -0400

    btrfs: send: only use boolean variables at process_recorded_refs()
    
    [ Upstream commit 9453fe329789073d9a971de01da5902c32c1a01a ]
    
    We have several local variables at process_recorded_refs() that are used
    as booleans, with some of them having a 'bool' type while two of them
    having an 'int' type. Change this to make them all use the 'bool' type
    which is more clear and to make everything more consistent.
    
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Stable-dep-of: 005b0a0c24e1 ("btrfs: send: use fallocate for hole punching with send stream v2")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: send: use fallocate for hole punching with send stream v2 [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Mon Aug 18 22:40:19 2025 -0400

    btrfs: send: use fallocate for hole punching with send stream v2
    
    [ Upstream commit 005b0a0c24e1628313e951516b675109a92cacfe ]
    
    Currently holes are sent as writes full of zeroes, which results in
    unnecessarily using disk space at the receiving end and increasing the
    stream size.
    
    In some cases we avoid sending writes of zeroes, like during a full
    send operation where we just skip writes for holes.
    
    But for some cases we fill previous holes with writes of zeroes too, like
    in this scenario:
    
    1) We have a file with a hole in the range [2M, 3M), we snapshot the
       subvolume and do a full send. The range [2M, 3M) stays as a hole at
       the receiver since we skip sending write commands full of zeroes;
    
    2) We punch a hole for the range [3M, 4M) in our file, so that now it
       has a 2M hole in the range [2M, 4M), and snapshot the subvolume.
       Now if we do an incremental send, we will send write commands full
       of zeroes for the range [2M, 4M), removing the hole for [2M, 3M) at
       the receiver.
    
    We could improve cases such as this last one by doing additional
    comparisons of file extent items (or their absence) between the parent
    and send snapshots, but that's a lot of code to add plus additional CPU
    and IO costs.
    
    Since the send stream v2 already has a fallocate command and btrfs-progs
    implements a callback to execute fallocate since the send stream v2
    support was added to it, update the kernel to use fallocate for punching
    holes for V2+ streams.
    
    Test coverage is provided by btrfs/284 which is a version of btrfs/007
    that exercises send stream v2 instead of v1, using fsstress with random
    operations and fssum to verify file contents.
    
    Link: https://github.com/kdave/btrfs-progs/issues/1001
    CC: [email protected] # 6.1+
    Reviewed-by: Boris Burkov <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: zoned: do not remove unwritten non-data block group [+ + +]
Author: Naohiro Aota <[email protected]>
Date:   Sun Jun 29 23:07:42 2025 +0900

    btrfs: zoned: do not remove unwritten non-data block group
    
    commit 3061801420469610c8fa6080a950e56770773ef1 upstream.
    
    There are some reports of "unable to find chunk map for logical 2147483648
    length 16384" error message appears in dmesg. This means some IOs are
    occurring after a block group is removed.
    
    When a metadata tree node is cleaned on a zoned setup, we keep that node
    still dirty and write it out not to create a write hole. However, this can
    make a block group's used bytes == 0 while there is a dirty region left.
    
    Such an unused block group is moved into the unused_bg list and processed
    for removal. When the removal succeeds, the block group is removed from the
    transaction->dirty_bgs list, so the unused dirty nodes in the block group
    are not sent at the transaction commit time. It will be written at some
    later time e.g, sync or umount, and causes "unable to find chunk map"
    errors.
    
    This can happen relatively easy on SMR whose zone size is 256MB. However,
    calling do_zone_finish() on such block group returns -EAGAIN and keep that
    block group intact, which is why the issue is hidden until now.
    
    Fixes: afba2bc036b0 ("btrfs: zoned: implement active zone tracking")
    CC: [email protected] # 6.1+
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Signed-off-by: Naohiro Aota <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: zoned: do not select metadata BG as finish target [+ + +]
Author: Naohiro Aota <[email protected]>
Date:   Wed Jul 16 16:59:52 2025 +0900

    btrfs: zoned: do not select metadata BG as finish target
    
    commit 3a931e9b39c7ff8066657042f5f00d3b7e6ad315 upstream.
    
    We call btrfs_zone_finish_one_bg() to zone finish one block group and make
    room to activate another block group. Currently, we can choose a metadata
    block group as a target. But, as we reserve an active metadata block group,
    we no longer want to select a metadata block group. So, skip it in the
    loop.
    
    CC: [email protected] # 6.6+
    Reviewed-by: Damien Le Moal <[email protected]>
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Signed-off-by: Naohiro Aota <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: zoned: fix write time activation failure for metadata block group [+ + +]
Author: Naohiro Aota <[email protected]>
Date:   Wed Jul 16 16:59:54 2025 +0900

    btrfs: zoned: fix write time activation failure for metadata block group
    
    commit 5c4b93f4c8e5c53574c1a48d66a27a2c68b414af upstream.
    
    Since commit 13bb483d32ab ("btrfs: zoned: activate metadata block group on
    write time"), we activate a metadata block group at the write time. If the
    zone capacity is small enough, we can allocate the entire region before the
    first write. Then, we hit the btrfs_zoned_bg_is_full() in
    btrfs_zone_activate() and the activation fails.
    
    For a data block group, we activate it at the allocation time and we should
    check the fullness condition in the caller side. Add, a WARN to check the
    fullness condition.
    
    For a metadata block group, we don't need the fullness check because we
    activate it at the write time. Instead, activating it once it is written
    should be invalid. Catch that with a WARN too.
    
    Fixes: 13bb483d32ab ("btrfs: zoned: activate metadata block group on write time")
    CC: [email protected] # 6.6+
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Signed-off-by: Naohiro Aota <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: zoned: use filesystem size not disk size for reclaim decision [+ + +]
Author: Johannes Thumshirn <[email protected]>
Date:   Tue May 20 09:20:47 2025 +0200

    btrfs: zoned: use filesystem size not disk size for reclaim decision
    
    commit 55f7c65b2f69c7e4cb7aa7c1654a228ccf734fd8 upstream.
    
    When deciding if a zoned filesystem is reaching the threshold to reclaim
    data block groups, look at the size of the filesystem not to potentially
    total available size of all drives in the filesystem.
    
    Especially if a filesystem was created with mkfs' -b option, constraining
    it to only a portion of the block device, the numbers won't match and
    potentially garbage collection is kicking in too late.
    
    Fixes: 3687fcb0752a ("btrfs: zoned: make auto-reclaim less aggressive")
    CC: [email protected] # 6.1+
    Reviewed-by: Damien Le Moal <[email protected]>
    Tested-by: Damien Le Moal <[email protected]>
    Signed-off-by: Johannes Thumshirn <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
bus: mhi: host: Detect events pointing to unexpected TREs [+ + +]
Author: Youssef Samir <[email protected]>
Date:   Mon Jul 14 18:30:39 2025 +0200

    bus: mhi: host: Detect events pointing to unexpected TREs
    
    commit 5bd398e20f0833ae8a1267d4f343591a2dd20185 upstream.
    
    When a remote device sends a completion event to the host, it contains a
    pointer to the consumed TRE. The host uses this pointer to process all of
    the TREs between it and the host's local copy of the ring's read pointer.
    This works when processing completion for chained transactions, but can
    lead to nasty results if the device sends an event for a single-element
    transaction with a read pointer that is multiple elements ahead of the
    host's read pointer.
    
    For instance, if the host accesses an event ring while the device is
    updating it, the pointer inside of the event might still point to an old
    TRE. If the host uses the channel's xfer_cb() to directly free the buffer
    pointed to by the TRE, the buffer will be double-freed.
    
    This behavior was observed on an ep that used upstream EP stack without
    'commit 6f18d174b73d ("bus: mhi: ep: Update read pointer only after buffer
    is written")'. Where the device updated the events ring pointer before
    updating the event contents, so it left a window where the host was able to
    access the stale data the event pointed to, before the device had the
    chance to update them. The usual pattern was that the host received an
    event pointing to a TRE that is not immediately after the last processed
    one, so it got treated as if it was a chained transaction, processing all
    of the TREs in between the two read pointers.
    
    This commit aims to harden the host by ensuring transactions where the
    event points to a TRE that isn't local_rp + 1 are chained.
    
    Fixes: 1d3173a3bae7 ("bus: mhi: core: Add support for processing events from client device")
    Signed-off-by: Youssef Samir <[email protected]>
    [mani: added stable tag and reworded commit message]
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Reviewed-by: Jeff Hugo <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

bus: mhi: host: Fix endianness of BHI vector table [+ + +]
Author: Alexander Wilhelm <[email protected]>
Date:   Mon May 19 16:58:37 2025 +0200

    bus: mhi: host: Fix endianness of BHI vector table
    
    commit f471578e8b1a90623674433a01a8845110bc76ce upstream.
    
    On big endian platform like PowerPC, the MHI bus (which is little endian)
    does not start properly. The following example shows the error messages by
    using QCN9274 WLAN device with ath12k driver:
    
        ath12k_pci 0001:01:00.0: BAR 0: assigned [mem 0xc00000000-0xc001fffff 64bit]
        ath12k_pci 0001:01:00.0: MSI vectors: 1
        ath12k_pci 0001:01:00.0: Hardware name: qcn9274 hw2.0
        ath12k_pci 0001:01:00.0: failed to set mhi state: POWER_ON(2)
        ath12k_pci 0001:01:00.0: failed to start mhi: -110
        ath12k_pci 0001:01:00.0: failed to power up :-110
        ath12k_pci 0001:01:00.0: failed to create soc core: -110
        ath12k_pci 0001:01:00.0: failed to init core: -110
        ath12k_pci: probe of 0001:01:00.0 failed with error -110
    
    The issue seems to be with the incorrect DMA address/size used for
    transferring the firmware image over BHI. So fix it by converting the DMA
    address and size of the BHI vector table to little endian format before
    sending them to the device.
    
    Fixes: 6cd330ae76ff ("bus: mhi: core: Add support for ringing channel/event ring doorbells")
    Signed-off-by: Alexander Wilhelm <[email protected]>
    [mani: added stable tag and reworded commit message]
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Reviewed-by: Jeff Hugo <[email protected]>
    Reviewed-by: Krishna Chaitanya Chundru <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cdc-acm: fix race between initial clearing halt and open [+ + +]
Author: Oliver Neukum <[email protected]>
Date:   Thu Jul 17 16:12:50 2025 +0200

    cdc-acm: fix race between initial clearing halt and open
    
    commit 64690a90cd7c6db16d3af8616be1f4bf8d492850 upstream.
    
    On the devices that need their endpoints to get an
    initial clear_halt, this needs to be done before
    the devices can be opened. That means it needs to be
    before the devices are registered.
    
    Fixes: 15bf722e6f6c0 ("cdc-acm: Add support of ATOL FPrint fiscal printers")
    Cc: stable <[email protected]>
    Signed-off-by: Oliver Neukum <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cdx: Fix off-by-one error in cdx_rpmsg_probe() [+ + +]
Author: Thorsten Blum <[email protected]>
Date:   Wed Aug 6 11:05:09 2025 +0200

    cdx: Fix off-by-one error in cdx_rpmsg_probe()
    
    commit 300a0cfe9f375b2843bcb331bcfa7503475ef5dd upstream.
    
    In cdx_rpmsg_probe(), strscpy() is incorrectly called with the length of
    the source string (excluding the NUL terminator) rather than the size of
    the destination buffer. This results in one character less being copied
    from 'cdx_rpmsg_id_table[0].name' to 'chinfo.name'.
    
    Use the destination buffer size instead to ensure the name is copied
    correctly.
    
    Cc: stable <[email protected]>
    Fixes: 2a226927d9b8 ("cdx: add rpmsg communication channel for CDX")
    Signed-off-by: Thorsten Blum <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cgroup/cpuset: Use static_branch_enable_cpuslocked() on cpusets_insane_config_key [+ + +]
Author: Waiman Long <[email protected]>
Date:   Wed Aug 6 13:24:28 2025 -0400

    cgroup/cpuset: Use static_branch_enable_cpuslocked() on cpusets_insane_config_key
    
    [ Upstream commit 65f97cc81b0adc5f49cf6cff5d874be0058e3f41 ]
    
    The following lockdep splat was observed.
    
    [  812.359086] ============================================
    [  812.359089] WARNING: possible recursive locking detected
    [  812.359097] --------------------------------------------
    [  812.359100] runtest.sh/30042 is trying to acquire lock:
    [  812.359105] ffffffffa7f27420 (cpu_hotplug_lock){++++}-{0:0}, at: static_key_enable+0xe/0x20
    [  812.359131]
    [  812.359131] but task is already holding lock:
    [  812.359134] ffffffffa7f27420 (cpu_hotplug_lock){++++}-{0:0}, at: cpuset_write_resmask+0x98/0xa70
         :
    [  812.359267] Call Trace:
    [  812.359272]  <TASK>
    [  812.359367]  cpus_read_lock+0x3c/0xe0
    [  812.359382]  static_key_enable+0xe/0x20
    [  812.359389]  check_insane_mems_config.part.0+0x11/0x30
    [  812.359398]  cpuset_write_resmask+0x9f2/0xa70
    [  812.359411]  cgroup_file_write+0x1c7/0x660
    [  812.359467]  kernfs_fop_write_iter+0x358/0x530
    [  812.359479]  vfs_write+0xabe/0x1250
    [  812.359529]  ksys_write+0xf9/0x1d0
    [  812.359558]  do_syscall_64+0x5f/0xe0
    
    Since commit d74b27d63a8b ("cgroup/cpuset: Change cpuset_rwsem
    and hotplug lock order"), the ordering of cpu hotplug lock
    and cpuset_mutex had been reversed. That patch correctly
    used the cpuslocked version of the static branch API to enable
    cpusets_pre_enable_key and cpusets_enabled_key, but it didn't do the
    same for cpusets_insane_config_key.
    
    The cpusets_insane_config_key can be enabled in the
    check_insane_mems_config() which is called from update_nodemask()
    or cpuset_hotplug_update_tasks() with both cpu hotplug lock and
    cpuset_mutex held. Deadlock can happen with a pending hotplug event that
    tries to acquire the cpu hotplug write lock which will block further
    cpus_read_lock() attempt from check_insane_mems_config(). Fix that by
    switching to use static_branch_enable_cpuslocked().
    
    Fixes: d74b27d63a8b ("cgroup/cpuset: Change cpuset_rwsem and hotplug lock order")
    Signed-off-by: Waiman Long <[email protected]>
    Reviewed-by: Juri Lelli <[email protected]>
    Signed-off-by: Tejun Heo <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
char: misc: Fix improper and inaccurate error code returned by misc_init() [+ + +]
Author: Zijun Hu <[email protected]>
Date:   Fri Jun 20 22:35:20 2025 +0800

    char: misc: Fix improper and inaccurate error code returned by misc_init()
    
    [ Upstream commit 0ef1fe4bc38673db72e39b700b29c50dfcc5a415 ]
    
    misc_init() returns -EIO for __register_chrdev() invocation failure, but:
    
    - -EIO is for I/O error normally, but __register_chrdev() does not do I/O.
    - -EIO can not cover various error codes returned by __register_chrdev().
    
    Fix by returning error code of __register_chrdev().
    
    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]>

 
cifs: Fix calling CIFSFindFirst() for root path without msearch [+ + +]
Author: Pali Rohár <[email protected]>
Date:   Mon Dec 30 20:54:11 2024 +0100

    cifs: Fix calling CIFSFindFirst() for root path without msearch
    
    [ Upstream commit b460249b9a1dab7a9f58483e5349d045ad6d585c ]
    
    To query root path (without msearch wildcard) it is needed to
    send pattern '\' instead of '' (empty string).
    
    This allows to use CIFSFindFirst() to query information about root path
    which is being used in followup changes.
    
    This change fixes the stat() syscall called on the root path on the mount.
    It is because stat() syscall uses the cifs_query_path_info() function and
    it can fallback to the CIFSFindFirst() usage with msearch=false.
    
    Signed-off-by: Pali Rohár <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

cifs: reset iface weights when we cannot find a candidate [+ + +]
Author: Shyam Prasad N <[email protected]>
Date:   Thu Jul 17 17:36:13 2025 +0530

    cifs: reset iface weights when we cannot find a candidate
    
    commit 9d5eff7821f6d70f7d1b4d8a60680fba4de868a7 upstream.
    
    We now do a weighted selection of server interfaces when allocating
    new channels. The weights are decided based on the speed advertised.
    The fulfilled weight for an interface is a counter that is used to
    track the interface selection. It should be reset back to zero once
    all interfaces fulfilling their weight.
    
    In cifs_chan_update_iface, this reset logic was missing. As a result
    when the server interface list changes, the client may not be able
    to find a new candidate for other channels after all interfaces have
    been fulfilled.
    
    Fixes: a6d8fb54a515 ("cifs: distribute channels across interfaces based on speed")
    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: qcom: ipq5018: keep XO clock always on [+ + +]
Author: George Moussalem <[email protected]>
Date:   Fri May 16 16:36:08 2025 +0400

    clk: qcom: ipq5018: keep XO clock always on
    
    [ Upstream commit 693a723291d0634eaea24cff2f9d807f3223f204 ]
    
    The XO clock must not be disabled to avoid the kernel trying to disable
    the it. As such, keep the XO clock always on by flagging it as critical.
    
    Signed-off-by: George Moussalem <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

clk: tegra: periph: Fix error handling and resolve unsigned compare warning [+ + +]
Author: Pei Xiao <[email protected]>
Date:   Wed Jul 9 15:37:13 2025 +0800

    clk: tegra: periph: Fix error handling and resolve unsigned compare warning
    
    [ Upstream commit 2dc2ca9000eea2eb749f658196204cb84d4306f7 ]
    
    ./drivers/clk/tegra/clk-periph.c:59:5-9: WARNING:
            Unsigned expression compared with zero: rate < 0
    
    The unsigned long 'rate' variable caused:
    - Incorrect handling of negative errors
    - Compile warning: "Unsigned expression compared with zero"
    
    Fix by changing to long type and adding req->rate cast.
    
    Signed-off-by: Pei Xiao <[email protected]>
    Link: https://lore.kernel.org/r/79c7f01e29876c612e90d6d0157fb1572ca8b3fb.1752046270.git.xiaopei01@kylinos.cn
    Acked-by: Thierry Reding <[email protected]>
    Signed-off-by: Stephen Boyd <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
comedi: fix race between polling and detaching [+ + +]
Author: Ian Abbott <[email protected]>
Date:   Tue Jul 22 16:53:16 2025 +0100

    comedi: fix race between polling and detaching
    
    commit 35b6fc51c666fc96355be5cd633ed0fe4ccf68b2 upstream.
    
    syzbot reports a use-after-free in comedi in the below link, which is
    due to comedi gladly removing the allocated async area even though poll
    requests are still active on the wait_queue_head inside of it. This can
    cause a use-after-free when the poll entries are later triggered or
    removed, as the memory for the wait_queue_head has been freed.  We need
    to check there are no tasks queued on any of the subdevices' wait queues
    before allowing the device to be detached by the `COMEDI_DEVCONFIG`
    ioctl.
    
    Tasks will read-lock `dev->attach_lock` before adding themselves to the
    subdevice wait queue, so fix the problem in the `COMEDI_DEVCONFIG` ioctl
    handler by write-locking `dev->attach_lock` before checking that all of
    the subdevices are safe to be deleted.  This includes testing for any
    sleepers on the subdevices' wait queues.  It remains locked until the
    device has been detached.  This requires the `comedi_device_detach()`
    function to be refactored slightly, moving the bulk of it into new
    function `comedi_device_detach_locked()`.
    
    Note that the refactor of `comedi_device_detach()` results in
    `comedi_device_cancel_all()` now being called while `dev->attach_lock`
    is write-locked, which wasn't the case previously, but that does not
    matter.
    
    Thanks to Jens Axboe for diagnosing the problem and co-developing this
    patch.
    
    Cc: stable <[email protected]>
    Fixes: 2f3fdcd7ce93 ("staging: comedi: add rw_semaphore to protect against device detachment")
    Link: https://lore.kernel.org/all/[email protected]/
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=01523a0ae5600aef5895
    Co-developed-by: Jens Axboe <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Ian Abbott <[email protected]>
    Tested-by: Jens Axboe <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

comedi: Fix use of uninitialized memory in do_insn_ioctl() and do_insnlist_ioctl() [+ + +]
Author: Ian Abbott <[email protected]>
Date:   Fri Jul 25 13:53:24 2025 +0100

    comedi: Fix use of uninitialized memory in do_insn_ioctl() and do_insnlist_ioctl()
    
    commit 3cd212e895ca2d58963fdc6422502b10dd3966bb upstream.
    
    syzbot reports a KMSAN kernel-infoleak in `do_insn_ioctl()`.  A kernel
    buffer is allocated to hold `insn->n` samples (each of which is an
    `unsigned int`).  For some instruction types, `insn->n` samples are
    copied back to user-space, unless an error code is being returned.  The
    problem is that not all the instruction handlers that need to return
    data to userspace fill in the whole `insn->n` samples, so that there is
    an information leak.  There is a similar syzbot report for
    `do_insnlist_ioctl()`, although it does not have a reproducer for it at
    the time of writing.
    
    One culprit is `insn_rw_emulate_bits()` which is used as the handler for
    `INSN_READ` or `INSN_WRITE` instructions for subdevices that do not have
    a specific handler for that instruction, but do have an `INSN_BITS`
    handler.  For `INSN_READ` it only fills in at most 1 sample, so if
    `insn->n` is greater than 1, the remaining `insn->n - 1` samples copied
    to userspace will be uninitialized kernel data.
    
    Another culprit is `vm80xx_ai_insn_read()` in the "vm80xx" driver.  It
    never returns an error, even if it fails to fill the buffer.
    
    Fix it in `do_insn_ioctl()` and `do_insnlist_ioctl()` by making sure
    that uninitialized parts of the allocated buffer are zeroed before
    handling each instruction.
    
    Thanks to Arnaud Lecomte for their fix to `do_insn_ioctl()`.  That fix
    replaced the call to `kmalloc_array()` with `kcalloc()`, but it is not
    always necessary to clear the whole buffer.
    
    Fixes: ed9eccbe8970 ("Staging: add comedi core")
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=a5e45f768aab5892da5d
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=fb4362a104d45ab09cf9
    Cc: stable <[email protected]> # 5.13+
    Cc: Arnaud Lecomte <[email protected]>
    Signed-off-by: Ian Abbott <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

comedi: Make insn_rw_emulate_bits() do insn->n samples [+ + +]
Author: Ian Abbott <[email protected]>
Date:   Fri Jul 25 15:10:34 2025 +0100

    comedi: Make insn_rw_emulate_bits() do insn->n samples
    
    commit 7afba9221f70d4cbce0f417c558879cba0eb5e66 upstream.
    
    The `insn_rw_emulate_bits()` function is used as a default handler for
    `INSN_READ` instructions for subdevices that have a handler for
    `INSN_BITS` but not for `INSN_READ`.  Similarly, it is used as a default
    handler for `INSN_WRITE` instructions for subdevices that have a handler
    for `INSN_BITS` but not for `INSN_WRITE`. It works by emulating the
    `INSN_READ` or `INSN_WRITE` instruction handling with a constructed
    `INSN_BITS` instruction.  However, `INSN_READ` and `INSN_WRITE`
    instructions are supposed to be able read or write multiple samples,
    indicated by the `insn->n` value, but `insn_rw_emulate_bits()` currently
    only handles a single sample.  For `INSN_READ`, the comedi core will
    copy `insn->n` samples back to user-space.  (That triggered KASAN
    kernel-infoleak errors when `insn->n` was greater than 1, but that is
    being fixed more generally elsewhere in the comedi core.)
    
    Make `insn_rw_emulate_bits()` either handle `insn->n` samples, or return
    an error, to conform to the general expectation for `INSN_READ` and
    `INSN_WRITE` handlers.
    
    Fixes: ed9eccbe8970 ("Staging: add comedi core")
    Cc: stable <[email protected]> # 5.13+
    Signed-off-by: Ian Abbott <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

comedi: pcl726: Prevent invalid irq number [+ + +]
Author: Edward Adam Davis <[email protected]>
Date:   Mon Jul 7 20:39:58 2025 +0800

    comedi: pcl726: Prevent invalid irq number
    
    commit 96cb948408b3adb69df7e451ba7da9d21f814d00 upstream.
    
    The reproducer passed in an irq number(0x80008000) that was too large,
    which triggered the oob.
    
    Added an interrupt number check to prevent users from passing in an irq
    number that was too large.
    
    If `it->options[1]` is 31, then `1 << it->options[1]` is still invalid
    because it shifts a 1-bit into the sign bit (which is UB in C).
    Possible solutions include reducing the upper bound on the
    `it->options[1]` value to 30 or lower, or using `1U << it->options[1]`.
    
    The old code would just not attempt to request the IRQ if the
    `options[1]` value were invalid.  And it would still configure the
    device without interrupts even if the call to `request_irq` returned an
    error.  So it would be better to combine this test with the test below.
    
    Fixes: fff46207245c ("staging: comedi: pcl726: enable the interrupt support code")
    Cc: stable <[email protected]> # 5.13+
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=5cd373521edd68bebcb3
    Tested-by: [email protected]
    Signed-off-by: Edward Adam Davis <[email protected]>
    Reviewed-by: Ian Abbott <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
compiler: remove __ADDRESSABLE_ASM{_STR,}() again [+ + +]
Author: Jan Beulich <[email protected]>
Date:   Sat Aug 23 20:32:21 2025 -0400

    compiler: remove __ADDRESSABLE_ASM{_STR,}() again
    
    [ Upstream commit 8ea815399c3fcce1889bd951fec25b5b9a3979c1 ]
    
    __ADDRESSABLE_ASM_STR() is where the necessary stringification happens.
    As long as "sym" doesn't contain any odd characters, no quoting is
    required for its use with .quad / .long. In fact the quotation gets in
    the way with gas 2.25; it's only from 2.26 onwards that quoted symbols
    are half-way properly supported.
    
    However, assembly being different from C anyway, drop
    __ADDRESSABLE_ASM_STR() and its helper macro altogether. A simple
    .global directive will suffice to get the symbol "declared", i.e. into
    the symbol table. While there also stop open-coding STATIC_CALL_TRAMP()
    and STATIC_CALL_KEY().
    
    Fixes: 0ef8047b737d ("x86/static-call: provide a way to do very early static-call updates")
    Signed-off-by: Jan Beulich <[email protected]>
    Acked-by: Josh Poimboeuf <[email protected]>
    Cc: [email protected]
    Signed-off-by: Juergen Gross <[email protected]>
    Message-ID: <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cpufreq/cppc: Set the frequency used for computing the capacity [+ + +]
Author: Vincent Guittot <[email protected]>
Date:   Mon Dec 11 11:48:54 2023 +0100

    cpufreq/cppc: Set the frequency used for computing the capacity
    
    commit 5477fa249b56c59c3baa1b237bf083cffa64c84a upstream.
    
    Save the frequency associated to the performance that has been used when
    initializing the capacity of CPUs.
    
    Also, cppc cpufreq driver can register an artificial energy model. In such
    case, it needs the frequency for this compute capacity.
    
    Signed-off-by: Vincent Guittot <[email protected]>
    Signed-off-by: Ingo Molnar <[email protected]>
    Tested-by: Pierre Gondois <[email protected]>
    Acked-by: Sudeep Holla <[email protected]>
    Acked-by: Viresh Kumar <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: e37617c8e53a ("sched/fair: Fix frequency selection for non-invariant case")
    Signed-off-by: Wentao Guan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cpufreq/schedutil: Use a fixed reference frequency [+ + +]
Author: Vincent Guittot <[email protected]>
Date:   Mon Dec 11 11:48:51 2023 +0100

    cpufreq/schedutil: Use a fixed reference frequency
    
    commit b3edde44e5d4504c23a176819865cd603fd16d6c upstream.
    
    cpuinfo.max_freq can change at runtime because of boost as an example. This
    implies that the value could be different than the one that has been
    used when computing the capacity of a CPU.
    
    The new arch_scale_freq_ref() returns a fixed and coherent reference
    frequency that can be used when computing a frequency based on utilization.
    
    Use this arch_scale_freq_ref() when available and fallback to
    policy otherwise.
    
    Signed-off-by: Vincent Guittot <[email protected]>
    Signed-off-by: Ingo Molnar <[email protected]>
    Tested-by: Lukasz Luba <[email protected]>
    Reviewed-by: Lukasz Luba <[email protected]>
    Reviewed-by: Dietmar Eggemann <[email protected]>
    Acked-by: Rafael J. Wysocki <[email protected]>
    Acked-by: Viresh Kumar <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: e37617c8e53a ("sched/fair: Fix frequency selection for non-invariant case")
    Signed-off-by: Wentao Guan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cpufreq: armada-8k: Fix off by one in armada_8k_cpufreq_free_table() [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Tue Jul 1 17:30:01 2025 -0500

    cpufreq: armada-8k: Fix off by one in armada_8k_cpufreq_free_table()
    
    commit 4a26df233266a628157d7f0285451d8655defdfc upstream.
    
    The freq_tables[] array has num_possible_cpus() elements so, to avoid an
    out of bounds access, this loop should be capped at "< nb_cpus" instead
    of "<= nb_cpus".  The freq_tables[] array is allocated in
    armada_8k_cpufreq_init().
    
    Cc: [email protected]
    Fixes: f525a670533d ("cpufreq: ap806: add cpufreq driver for Armada 8K")
    Signed-off-by: Dan Carpenter <[email protected]>
    Signed-off-by: Viresh Kumar <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

cpufreq: CPPC: Mark driver with NEED_UPDATE_LIMITS flag [+ + +]
Author: Prashant Malani <[email protected]>
Date:   Tue Jul 22 05:55:40 2025 +0000

    cpufreq: CPPC: Mark driver with NEED_UPDATE_LIMITS flag
    
    [ Upstream commit 0a1416a49e63c320f6e6c1c8d07e1b58c0d4a3f3 ]
    
    AMU counters on certain CPPC-based platforms tend to yield inaccurate
    delivered performance measurements on systems that are idle/mostly idle.
    This results in an inaccurate frequency being stored by cpufreq in its
    policy structure when the CPU is brought online. [1]
    
    Consequently, if the userspace governor tries to set the frequency to a
    new value, there is a possibility that it would be the erroneous value
    stored earlier. In such a scenario, cpufreq would assume that the
    requested frequency has already been set and return early, resulting in
    the correct/new frequency request never making it to the hardware.
    
    Since the operating frequency is liable to this sort of inconsistency,
    mark the CPPC driver with CPUFREQ_NEED_UPDATE_LIMITS so that it is always
    invoked when a target frequency update is requested.
    
    Link: https://lore.kernel.org/linux-pm/[email protected]/ [1]
    Suggested-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Prashant Malani <[email protected]>
    Acked-by: Viresh Kumar <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

cpufreq: Exit governor when failed to start old governor [+ + +]
Author: Lifeng Zheng <[email protected]>
Date:   Wed Jul 9 18:41:45 2025 +0800

    cpufreq: Exit governor when failed to start old governor
    
    [ Upstream commit 0ae204405095abfbc2d694ee0fbb49bcbbe55c57 ]
    
    Detect the result of starting old governor in cpufreq_set_policy(). If it
    fails, exit the governor and clear policy->governor.
    
    Signed-off-by: Lifeng Zheng <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

cpufreq: Use the fixed and coherent frequency for scaling capacity [+ + +]
Author: Vincent Guittot <[email protected]>
Date:   Mon Dec 11 11:48:50 2023 +0100

    cpufreq: Use the fixed and coherent frequency for scaling capacity
    
    commit 599457ba15403037b489fe536266a3d5f9efaed7 upstream.
    
    cpuinfo.max_freq can change at runtime because of boost as an example. This
    implies that the value could be different from the frequency that has been
    used to compute the capacity of a CPU.
    
    The new arch_scale_freq_ref() returns a fixed and coherent frequency
    that can be used to compute the capacity for a given frequency.
    
    [ Also fix a arch_set_freq_scale()  newline style wart in <linux/cpufreq.h>. ]
    
    Signed-off-by: Vincent Guittot <[email protected]>
    Signed-off-by: Ingo Molnar <[email protected]>
    Tested-by: Lukasz Luba <[email protected]>
    Reviewed-by: Lukasz Luba <[email protected]>
    Acked-by: Viresh Kumar <[email protected]>
    Acked-by: Rafael J. Wysocki <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: e37617c8e53a ("sched/fair: Fix frequency selection for non-invariant case")
    Signed-off-by: Wentao Guan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cpuidle: governors: menu: Avoid selecting states with too much latency [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Sat Aug 23 09:34:49 2025 -0400

    cpuidle: governors: menu: Avoid selecting states with too much latency
    
    [ Upstream commit 779b1a1cb13ae17028aeddb2fbbdba97357a1e15 ]
    
    Occasionally, the exit latency of the idle state selected by the menu
    governor may exceed the PM QoS CPU wakeup latency limit.  Namely, if the
    scheduler tick has been stopped already and predicted_ns is greater than
    the tick period length, the governor may return an idle state whose exit
    latency exceeds latency_req because that decision is made before
    checking the current idle state's exit latency.
    
    For instance, say that there are 3 idle states, 0, 1, and 2.  For idle
    states 0 and 1, the exit latency is equal to the target residency and
    the values are 0 and 5 us, respectively.  State 2 is deeper and has the
    exit latency and target residency of 200 us and 2 ms (which is greater
    than the tick period length), respectively.
    
    Say that predicted_ns is equal to TICK_NSEC and the PM QoS latency
    limit is 20 us.  After the first two iterations of the main loop in
    menu_select(), idx becomes 1 and in the third iteration of it the target
    residency of the current state (state 2) is greater than predicted_ns.
    State 2 is not a polling one and predicted_ns is not less than TICK_NSEC,
    so the check on whether or not the tick has been stopped is done.  Say
    that the tick has been stopped already and there are no imminent timers
    (that is, delta_tick is greater than the target residency of state 2).
    In that case, idx becomes 2 and it is returned immediately, but the exit
    latency of state 2 exceeds the latency limit.
    
    Address this issue by modifying the code to compare the exit latency of
    the current idle state (idle state i) with the latency limit before
    comparing its target residency with predicted_ns, which allows one
    more exit_latency_ns check that becomes redundant to be dropped.
    
    However, after the above change, latency_req cannot take the predicted_ns
    value any more, which takes place after commit 38f83090f515 ("cpuidle:
    menu: Remove iowait influence"), because it may cause a polling state
    to be returned prematurely.
    
    In the context of the previous example say that predicted_ns is 3000 and
    the PM QoS latency limit is still 20 us.  Additionally, say that idle
    state 0 is a polling one.  Moving the exit_latency_ns check before the
    target_residency_ns one causes the loop to terminate in the second
    iteration, before the target_residency_ns check, so idle state 0 will be
    returned even though previously state 1 would be returned if there were
    no imminent timers.
    
    For this reason, remove the assignment of the predicted_ns value to
    latency_req from the code.
    
    Fixes: 5ef499cd571c ("cpuidle: menu: Handle stopped tick more aggressively")
    Cc: 4.17+ <[email protected]> # 4.17+
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Reviewed-by: Christian Loehle <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

cpuidle: governors: menu: Avoid using invalid recent intervals data [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Mon Aug 11 17:03:11 2025 +0200

    cpuidle: governors: menu: Avoid using invalid recent intervals data
    
    [ Upstream commit fa3fa55de0d6177fdcaf6fc254f13cc8f33c3eed ]
    
    Marc has reported that commit 85975daeaa4d ("cpuidle: menu: Avoid
    discarding useful information") caused the number of wakeup interrupts
    to increase on an idle system [1], which was not expected to happen
    after merely allowing shallower idle states to be selected by the
    governor in some cases.
    
    However, on the system in question, all of the idle states deeper than
    WFI are rejected by the driver due to a firmware issue [2].  This causes
    the governor to only consider the recent interval duriation data
    corresponding to attempts to enter WFI that are successful and the
    recent invervals table is filled with values lower than the scheduler
    tick period.  Consequently, the governor predicts an idle duration
    below the scheduler tick period length and avoids stopping the tick
    more often which leads to the observed symptom.
    
    Address it by modifying the governor to update the recent intervals
    table also when entering the previously selected idle state fails, so
    it knows that the short idle intervals might have been the minority
    had the selected idle states been actually entered every time.
    
    Fixes: 85975daeaa4d ("cpuidle: menu: Avoid discarding useful information")
    Link: https://lore.kernel.org/linux-pm/[email protected]/ [1]
    Link: https://lore.kernel.org/linux-pm/[email protected]/ [2]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Tested-by: Christian Loehle <[email protected]>
    Tested-by: Marc Zyngier <[email protected]>
    Reviewed-by: Christian Loehle <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

cpuidle: menu: Remove iowait influence [+ + +]
Author: Christian Loehle <[email protected]>
Date:   Sat Aug 23 09:34:48 2025 -0400

    cpuidle: menu: Remove iowait influence
    
    [ Upstream commit 38f83090f515b4b5d59382dfada1e7457f19aa47 ]
    
    Remove CPU iowaiters influence on idle state selection.
    
    Remove the menu notion of performance multiplier which increased with
    the number of tasks that went to iowait sleep on this CPU and haven't
    woken up yet.
    
    Relying on iowait for cpuidle is problematic for a few reasons:
    
     1. There is no guarantee that an iowaiting task will wake up on the
        same CPU.
    
     2. The task being in iowait says nothing about the idle duration, we
        could be selecting shallower states for a long time.
    
     3. The task being in iowait doesn't always imply a performance hit
        with increased latency.
    
     4. If there is such a performance hit, the number of iowaiting tasks
        doesn't directly correlate.
    
     5. The definition of iowait altogether is vague at best, it is
        sprinkled across kernel code.
    
    Signed-off-by: Christian Loehle <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [ rjw: Minor edits in the changelog ]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Stable-dep-of: 779b1a1cb13a ("cpuidle: governors: menu: Avoid selecting states with too much latency")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
crypto: hisilicon/hpre - fix dma unmap sequence [+ + +]
Author: Zhiqi Song <[email protected]>
Date:   Fri Jul 18 18:05:01 2025 +0800

    crypto: hisilicon/hpre - fix dma unmap sequence
    
    [ Upstream commit 982fd1a74de63c388c060e4fa6f7fbd088d6d02e ]
    
    Perform DMA unmapping operations before processing data.
    Otherwise, there may be unsynchronized data accessed by
    the CPU when the SWIOTLB is enabled.
    
    Signed-off-by: Zhiqi Song <[email protected]>
    Signed-off-by: Chenghai Huang <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: jitter - fix intermediary handling [+ + +]
Author: Markus Theil <[email protected]>
Date:   Sat Jun 21 13:36:43 2025 +0200

    crypto: jitter - fix intermediary handling
    
    [ Upstream commit 735b72568c73875269a6b73ab9543a70f6ac8a9f ]
    
    The intermediary value was included in the wrong
    hash state. While there, adapt to user-space by
    setting the timestamp to 0 if stuck and inserting
    the values nevertheless.
    
    Acked-by: Stephan Mueller <[email protected]>
    Signed-off-by: Markus Theil <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: octeontx2 - add timeout for load_fvc completion poll [+ + +]
Author: Bharat Bhushan <[email protected]>
Date:   Thu May 22 15:36:24 2025 +0530

    crypto: octeontx2 - add timeout for load_fvc completion poll
    
    [ Upstream commit 2157e50f65d2030f07ea27ef7ac4cfba772e98ac ]
    
    Adds timeout to exit from possible infinite loop, which polls
    on CPT instruction(load_fvc) completion.
    
    Signed-off-by: Srujana Challa <[email protected]>
    Signed-off-by: Bharat Bhushan <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

crypto: qat - flush misc workqueue during device shutdown [+ + +]
Author: Giovanni Cabiddu <[email protected]>
Date:   Fri Jul 11 13:27:43 2025 +0100

    crypto: qat - flush misc workqueue during device shutdown
    
    commit 3d4df408ba9bad2b205c7fb8afc1836a6a4ca88a upstream.
    
    Repeated loading and unloading of a device specific QAT driver, for
    example qat_4xxx, in a tight loop can lead to a crash due to a
    use-after-free scenario. This occurs when a power management (PM)
    interrupt triggers just before the device-specific driver (e.g.,
    qat_4xxx.ko) is unloaded, while the core driver (intel_qat.ko) remains
    loaded.
    
    Since the driver uses a shared workqueue (`qat_misc_wq`) across all
    devices and owned by intel_qat.ko, a deferred routine from the
    device-specific driver may still be pending in the queue. If this
    routine executes after the driver is unloaded, it can dereference freed
    memory, resulting in a page fault and kernel crash like the following:
    
        BUG: unable to handle page fault for address: ffa000002e50a01c
        #PF: supervisor read access in kernel mode
        RIP: 0010:pm_bh_handler+0x1d2/0x250 [intel_qat]
        Call Trace:
          pm_bh_handler+0x1d2/0x250 [intel_qat]
          process_one_work+0x171/0x340
          worker_thread+0x277/0x3a0
          kthread+0xf0/0x120
          ret_from_fork+0x2d/0x50
    
    To prevent this, flush the misc workqueue during device shutdown to
    ensure that all pending work items are completed before the driver is
    unloaded.
    
    Note: This approach may slightly increase shutdown latency if the
    workqueue contains jobs from other devices, but it ensures correctness
    and stability.
    
    Fixes: e5745f34113b ("crypto: qat - enable power management for QAT GEN4")
    Signed-off-by: Giovanni Cabiddu <[email protected]>
    Cc: [email protected]
    Reviewed-by: Ahsan Atta <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

crypto: qat - lower priority for skcipher and aead algorithms [+ + +]
Author: Giovanni Cabiddu <[email protected]>
Date:   Fri Jun 13 11:32:27 2025 +0100

    crypto: qat - lower priority for skcipher and aead algorithms
    
    commit 8024774190a5ef2af2c5846f60a50b23e0980a32 upstream.
    
    Most kernel applications utilizing the crypto API operate synchronously
    and on small buffer sizes, therefore do not benefit from QAT acceleration.
    
    Reduce the priority of QAT implementations for both skcipher and aead
    algorithms, allowing more suitable alternatives to be selected by default.
    
    Signed-off-by: Giovanni Cabiddu <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]/
    Cc: [email protected]
    Acked-by: Eric Biggers <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dm-mpath: don't print the "loaded" message if registering fails [+ + +]
Author: Mikulas Patocka <[email protected]>
Date:   Mon Jun 30 15:24:22 2025 +0200

    dm-mpath: don't print the "loaded" message if registering fails
    
    [ Upstream commit 6e11952a6abc4641dc8ae63f01b318b31b44e8db ]
    
    If dm_register_path_selector, don't print the "version X loaded" message.
    
    Signed-off-by: Mikulas Patocka <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dm-table: fix checking for rq stackable devices [+ + +]
Author: Benjamin Marzinski <[email protected]>
Date:   Fri Jun 13 19:08:52 2025 -0400

    dm-table: fix checking for rq stackable devices
    
    [ Upstream commit 8ca719b81987be690f197e82fdb030580c0a07f3 ]
    
    Due to the semantics of iterate_devices(), the current code allows a
    request-based dm table as long as it includes one request-stackable
    device. It is supposed to only allow tables where there are no
    non-request-stackable devices.
    
    Signed-off-by: Benjamin Marzinski <[email protected]>
    Reviewed-by: Mike Snitzer <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dmaengine: stm32-dma: configure next sg only if there are more than 2 sgs [+ + +]
Author: Amelie Delaunay <[email protected]>
Date:   Tue Jun 24 09:31:37 2025 +0200

    dmaengine: stm32-dma: configure next sg only if there are more than 2 sgs
    
    [ Upstream commit e19bdbaa31082b43dab1d936e20efcebc30aa73d ]
    
    DMA operates in Double Buffer Mode (DBM) when the transfer is cyclic and
    there are at least two periods.
    When DBM is enabled, the DMA toggles between two memory targets (SxM0AR and
    SxM1AR), indicated by the SxSCR.CT bit (Current Target).
    There is no need to update the next memory address if two periods are
    configured, as SxM0AR and SxM1AR are already properly set up before the
    transfer begins in the stm32_dma_start_transfer() function.
    This avoids unnecessary updates to SxM0AR/SxM1AR, thereby preventing
    potential Transfer Errors. Specifically, when the channel is enabled,
    SxM0AR and SxM1AR can only be written if SxSCR.CT=1 and SxSCR.CT=0,
    respectively. Otherwise, a Transfer Error interrupt is triggered, and the
    stream is automatically disabled.
    
    Signed-off-by: Amelie Delaunay <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Documentation: ACPI: Fix parent device references [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Thu Jul 10 20:00:23 2025 +0300

    Documentation: ACPI: Fix parent device references
    
    commit e65cb011349e653ded541dddd6469c2ca813edcf upstream.
    
    The _CRS resources in many cases want to have ResourceSource field
    to be a type of ACPI String. This means that to compile properly
    we need to enclosure the name path into double quotes. This will
    in practice defer the interpretation to a run-time stage, However,
    this may be interpreted differently on different OSes and ACPI
    interpreter implementations. In particular ACPICA might not correctly
    recognize the leading '^' (caret) character and will not resolve
    the relative name path properly. On top of that, this piece may be
    used in SSDTs which are loaded after the DSDT and on itself may also
    not resolve relative name paths outside of their own scopes.
    With this all said, fix documentation to use fully-qualified name
    paths always to avoid any misinterpretations, which is proven to
    work.
    
    Fixes: 8eb5c87a92c0 ("i2c: add ACPI support for I2C mux ports")
    Reported-by: Yevhen Kondrashyn <[email protected]>
    Cc: All applicable <[email protected]>
    Signed-off-by: Andy Shevchenko <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dpaa_eth: don't use fixed_phy_change_carrier [+ + +]
Author: Heiner Kallweit <[email protected]>
Date:   Mon Jun 16 23:24:05 2025 +0200

    dpaa_eth: don't use fixed_phy_change_carrier
    
    [ Upstream commit d8155c1df5c8b717052567b188455d41fa7a8908 ]
    
    This effectively reverts 6e8b0ff1ba4c ("dpaa_eth: Add change_carrier()
    for Fixed PHYs"). Usage of fixed_phy_change_carrier() requires that
    fixed_phy_register() has been called before, directly or indirectly.
    And that's not the case in this driver.
    
    Signed-off-by: Heiner Kallweit <[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]>

 
drbd: add missing kref_get in handle_write_conflicts [+ + +]
Author: Sarah Newman <[email protected]>
Date:   Fri Jun 27 11:57:28 2025 +0200

    drbd: add missing kref_get in handle_write_conflicts
    
    [ Upstream commit 00c9c9628b49e368d140cfa61d7df9b8922ec2a8 ]
    
    With `two-primaries` enabled, DRBD tries to detect "concurrent" writes
    and handle write conflicts, so that even if you write to the same sector
    simultaneously on both nodes, they end up with the identical data once
    the writes are completed.
    
    In handling "superseeded" writes, we forgot a kref_get,
    resulting in a premature drbd_destroy_device and use after free,
    and further to kernel crashes with symptoms.
    
    Relevance: No one should use DRBD as a random data generator, and apparently
    all users of "two-primaries" handle concurrent writes correctly on layer up.
    That is cluster file systems use some distributed lock manager,
    and live migration in virtualization environments stops writes on one node
    before starting writes on the other node.
    
    Which means that other than for "test cases",
    this code path is never taken in real life.
    
    FYI, in DRBD 9, things are handled differently nowadays.  We still detect
    "write conflicts", but no longer try to be smart about them.
    We decided to disconnect hard instead: upper layers must not submit concurrent
    writes. If they do, that's their fault.
    
    Signed-off-by: Sarah Newman <[email protected]>
    Signed-off-by: Lars Ellenberg <[email protected]>
    Signed-off-by: Christoph Böhmwalder <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amd/display: Add null pointer check in mod_hdcp_hdcp1_create_session() [+ + +]
Author: Chenyuan Yang <[email protected]>
Date:   Wed Jul 23 21:36:41 2025 -0500

    drm/amd/display: Add null pointer check in mod_hdcp_hdcp1_create_session()
    
    [ Upstream commit 7a2ca2ea64b1b63c8baa94a8f5deb70b2248d119 ]
    
    The function mod_hdcp_hdcp1_create_session() calls the function
    get_first_active_display(), but does not check its return value.
    The return value is a null pointer if the display list is empty.
    This will lead to a null pointer dereference.
    
    Add a null pointer check for get_first_active_display() and return
    MOD_HDCP_STATUS_DISPLAY_NOT_FOUND if the function return null.
    
    This is similar to the commit c3e9826a2202
    ("drm/amd/display: Add null pointer check for get_first_active_display()").
    
    Fixes: 2deade5ede56 ("drm/amd/display: Remove hdcp display state with mst fix")
    Signed-off-by: Chenyuan Yang <[email protected]>
    Reviewed-by: Alex Hung <[email protected]>
    Tested-by: Dan Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 5e43eb3cd731649c4f8b9134f857be62a416c893)
    Signed-off-by: Sasha Levin <[email protected]>

drm/amd/display: Add primary plane to commits for correct VRR handling [+ + +]
Author: Michel Dänzer <[email protected]>
Date:   Wed Jul 30 10:09:02 2025 +0200

    drm/amd/display: Add primary plane to commits for correct VRR handling
    
    commit 3477c1b0972dc1c8a46f78e8fb1fa6966095b5ec upstream.
    
    amdgpu_dm_commit_planes calls update_freesync_state_on_stream only for
    the primary plane. If a commit affects a CRTC but not its primary plane,
    it would previously not trigger a refresh cycle or affect LFC, violating
    current UAPI semantics.
    
    Fixes e.g. atomic commits affecting only the cursor plane being limited
    to the minimum refresh rate.
    
    Don't do this for the legacy cursor ioctls though, it would break the
    UAPI semantics for those.
    
    Suggested-by: Xaver Hugl <[email protected]>
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3034
    Signed-off-by: Michel Dänzer <[email protected]>
    Reviewed-by: Harry Wentland <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit cc7bfba95966251b254cb970c21627124da3b7f4)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amd/display: Avoid a NULL pointer dereference [+ + +]
Author: Mario Limonciello <[email protected]>
Date:   Thu Jul 24 15:00:43 2025 -0500

    drm/amd/display: Avoid a NULL pointer dereference
    
    commit 07b93a5704b0b72002f0c4bd1076214af67dc661 upstream.
    
    [WHY]
    Although unlikely drm_atomic_get_new_connector_state() or
    drm_atomic_get_old_connector_state() can return NULL.
    
    [HOW]
    Check returns before dereference.
    
    Cc: Mario Limonciello <[email protected]>
    Cc: Alex Deucher <[email protected]>
    Reviewed-by: Harry Wentland <[email protected]>
    Signed-off-by: Mario Limonciello <[email protected]>
    Signed-off-by: Alex Hung <[email protected]>
    Tested-by: Dan Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 1e5e8d672fec9f2ab352be121be971877bff2af9)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amd/display: Avoid configuring PSR granularity if PSR-SU not supported [+ + +]
Author: Mario Limonciello <[email protected]>
Date:   Sun Jul 6 08:38:05 2025 -0500

    drm/amd/display: Avoid configuring PSR granularity if PSR-SU not supported
    
    [ Upstream commit a5ce8695d6d1b40d6960d2d298b579042c158f25 ]
    
    [Why]
    If PSR-SU is disabled on the link, then configuring su_y granularity in
    mod_power_calc_psr_configs() can lead to assertions in
    psr_su_set_dsc_slice_height().
    
    [How]
    Check the PSR version in amdgpu_dm_link_setup_psr() to determine whether
    or not to configure granularity.
    
    Reviewed-by: Sun peng (Leo) Li <[email protected]>
    Signed-off-by: Mario Limonciello <[email protected]>
    Signed-off-by: Ivan Lipski <[email protected]>
    Tested-by: Daniel Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/amd/display: Avoid trying AUX transactions on disconnected ports [+ + +]
Author: Wayne Lin <[email protected]>
Date:   Tue May 13 16:06:50 2025 +0800

    drm/amd/display: Avoid trying AUX transactions on disconnected ports
    
    [ Upstream commit deb24e64c8881c462b29e2c69afd9e6669058be5 ]
    
    [Why & How]
    Observe that we try to access DPCD 0x600h of disconnected DP ports.
    In order not to wasting time on retrying these ports, call
    dpcd_write_rx_power_ctrl() after checking its connection status.
    
    Reviewed-by: Aurabindo Pillai <[email protected]>
    Signed-off-by: Wayne Lin <[email protected]>
    Tested-by: Daniel Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/amd/display: Don't overclock DCE 6 by 15% [+ + +]
Author: Timur Kristóf <[email protected]>
Date:   Sat Aug 23 19:46:46 2025 -0400

    drm/amd/display: Don't overclock DCE 6 by 15%
    
    [ Upstream commit cb7b7ae53b557d168b4af5cd8549f3eff920bfb5 ]
    
    The extra 15% clock was added as a workaround for a Polaris issue
    which uses DCE 11, and should not have been used on DCE 6 which
    is already hardcoded to the highest possible display clock.
    Unfortunately, the extra 15% was mistakenly copied and kept
    even on code paths which don't affect Polaris.
    
    This commit fixes that and also adds a check to make sure
    not to exceed the maximum DCE 6 display clock.
    
    Fixes: 8cd61c313d8b ("drm/amd/display: Raise dispclk value for Polaris")
    Fixes: dc88b4a684d2 ("drm/amd/display: make clk mgr soc specific")
    Fixes: 3ecb3b794e2c ("drm/amd/display: dc/clk_mgr: add support for SI parts (v2)")
    Signed-off-by: Timur Kristóf <[email protected]>
    Acked-by: Alex Deucher <[email protected]>
    Reviewed-by: Rodrigo Siqueira <[email protected]>
    Reviewed-by: Alex Hung <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 427980c1cbd22bb256b9385f5ce73c0937562408)
    Cc: [email protected]
    [ `MIN` => `min` ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amd/display: Don't overwrite dce60_clk_mgr [+ + +]
Author: Timur Kristóf <[email protected]>
Date:   Tue Jul 22 17:58:29 2025 +0200

    drm/amd/display: Don't overwrite dce60_clk_mgr
    
    commit 4db9cd554883e051df1840d4d58d636043101034 upstream.
    
    dc_clk_mgr_create accidentally overwrites the dce60_clk_mgr
    with the dce_clk_mgr, causing incorrect behaviour on DCE6.
    Fix it by removing the extra dce_clk_mgr_construct.
    
    Fixes: 62eab49faae7 ("drm/amd/display: hide VGH asic specific structs")
    Reviewed-by: Rodrigo Siqueira <[email protected]>
    Reviewed-by: Alex Deucher <[email protected]>
    Signed-off-by: Timur Kristóf <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit bbddcbe36a686af03e91341b9bbfcca94bd45fb6)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amd/display: Fill display clock and vblank time in dce110_fill_display_configs [+ + +]
Author: Timur Kristóf <[email protected]>
Date:   Thu Jul 31 11:43:49 2025 +0200

    drm/amd/display: Fill display clock and vblank time in dce110_fill_display_configs
    
    commit 7d07140d37f792f01cfdb8ca9a6a792ab1d29126 upstream.
    
    Also needed by DCE 6.
    This way the code that gathers this info can be shared between
    different DCE versions and doesn't have to be repeated.
    
    Signed-off-by: Timur Kristóf <[email protected]>
    Acked-by: Alex Deucher <[email protected]>
    Reviewed-by: Rodrigo Siqueira <[email protected]>
    Reviewed-by: Alex Hung <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 8107432dff37db26fcb641b6cebeae8981cd73a0)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amd/display: Find first CRTC and its line time in dce110_fill_display_configs [+ + +]
Author: Timur Kristóf <[email protected]>
Date:   Thu Jul 31 11:43:48 2025 +0200

    drm/amd/display: Find first CRTC and its line time in dce110_fill_display_configs
    
    commit 669f73a26f6112eedbadac53a2f2707ac6d0b9c8 upstream.
    
    dce110_fill_display_configs is shared between DCE 6-11, and
    finding the first CRTC and its line time is relevant to DCE 6 too.
    Move the code to find it from DCE 11 specific code.
    
    Signed-off-by: Timur Kristóf <[email protected]>
    Acked-by: Alex Deucher <[email protected]>
    Reviewed-by: Rodrigo Siqueira <[email protected]>
    Reviewed-by: Alex Hung <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 4ab09785f8d5d03df052827af073d5c508ff5f63)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amd/display: Fix 'failed to blank crtc!' [+ + +]
Author: Wen Chen <[email protected]>
Date:   Mon Jun 2 16:37:08 2025 -0400

    drm/amd/display: Fix 'failed to blank crtc!'
    
    [ Upstream commit 01f60348d8fb6b3fbcdfc7bdde5d669f95b009a4 ]
    
    [why]
    DCN35 is having “DC: failed to blank crtc!” when running HPO
    test cases. It's caused by not having sufficient udelay time.
    
    [how]
    Replace the old wait_for_blank_complete function with fsleep function to
    sleep just until the next frame should come up. This way it doesn't poll
    in case the pixel clock or other clock was bugged or until vactive and
    the vblank are hit again.
    
    Reviewed-by: Nicholas Kazlauskas <[email protected]>
    Signed-off-by: Wen Chen <[email protected]>
    Signed-off-by: Fangzhi Zuo <[email protected]>
    Tested-by: Daniel Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/amd/display: Fix DP audio DTO1 clock source on DCE 6. [+ + +]
Author: Timur Kristóf <[email protected]>
Date:   Sat Aug 2 17:51:53 2025 +0200

    drm/amd/display: Fix DP audio DTO1 clock source on DCE 6.
    
    commit 297a4833a68aac3316eb808b4123eb016ef242d7 upstream.
    
    On DCE 6, DP audio was not working. However, it worked when an
    HDMI monitor was also plugged in.
    
    Looking at dce_aud_wall_dto_setup it seems that the main
    difference is that we use DTO1 when only DP is plugged in.
    
    When programming DTO1, it uses audio_dto_source_clock_in_khz
    which is set from get_dp_ref_freq_khz
    
    The dce60_get_dp_ref_freq_khz implementation looks incorrect,
    because DENTIST_DISPCLK_CNTL seems to be always zero on DCE 6,
    so it isn't usable.
    I compared dce60_get_dp_ref_freq_khz to the legacy display code,
    specifically dce_v6_0_audio_set_dto, and it turns out that in
    case of DCE 6, it needs to use the display clock. With that,
    DP audio started working on Pitcairn, Oland and Cape Verde.
    
    However, it still didn't work on Tahiti. Despite having the
    same DCE version, Tahiti seems to have a different audio device.
    After some trial and error I realized that it works with the
    default display clock as reported by the VBIOS, not the current
    display clock.
    
    The patch was tested on all four SI GPUs:
    
    * Pitcairn (DCE 6.0)
    * Oland (DCE 6.4)
    * Cape Verde (DCE 6.0)
    * Tahiti (DCE 6.0 but different)
    
    The testing was done on Samsung Odyssey G7 LS28BG700EPXEN on
    each of the above GPUs, at the following settings:
    
    * 4K 60 Hz
    * 1080p 60 Hz
    * 1080p 144 Hz
    
    Acked-by: Alex Deucher <[email protected]>
    Reviewed-by: Rodrigo Siqueira <[email protected]>
    Signed-off-by: Timur Kristóf <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 645cc7863da5de700547d236697dffd6760cf051)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amd/display: Fix fractional fb divider in set_pixel_clock_v3 [+ + +]
Author: Timur Kristóf <[email protected]>
Date:   Thu Jul 31 11:43:52 2025 +0200

    drm/amd/display: Fix fractional fb divider in set_pixel_clock_v3
    
    commit 10507478468f165ea681605d133991ed05cdff62 upstream.
    
    For later VBIOS versions, the fractional feedback divider is
    calculated as the remainder of dividing the feedback divider by
    a factor, which is set to 1000000. For reference, see:
    - calculate_fb_and_fractional_fb_divider
    - calc_pll_max_vco_construct
    
    However, in case of old VBIOS versions that have
    set_pixel_clock_v3, they only have 1 byte available for the
    fractional feedback divider, and it's expected to be set to the
    remainder from dividing the feedback divider by 10.
    For reference see the legacy display code:
    - amdgpu_pll_compute
    - amdgpu_atombios_crtc_program_pll
    
    This commit fixes set_pixel_clock_v3 by dividing the fractional
    feedback divider passed to the function by 100000.
    
    Fixes: 4562236b3bc0 ("drm/amd/dc: Add dc display driver (v2)")
    Signed-off-by: Timur Kristóf <[email protected]>
    Acked-by: Alex Deucher <[email protected]>
    Reviewed-by: Rodrigo Siqueira <[email protected]>
    Reviewed-by: Alex Hung <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 027e7acc7e17802ebf28e1edb88a404836ad50d6)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amd/display: Only finalize atomic_obj if it was initialized [+ + +]
Author: Mario Limonciello <[email protected]>
Date:   Tue Jul 15 14:41:46 2025 -0500

    drm/amd/display: Only finalize atomic_obj if it was initialized
    
    [ Upstream commit b174084b3fe15ad1acc69530e673c1535d2e4f85 ]
    
    [Why]
    If amdgpu_dm failed to initalize before amdgpu_dm_initialize_drm_device()
    completed then freeing atomic_obj will lead to list corruption.
    
    [How]
    Check if atomic_obj state is initialized before trying to free.
    
    Reviewed-by: Harry Wentland <[email protected]>
    Signed-off-by: Mario Limonciello <[email protected]>
    Signed-off-by: Ivan Lipski <[email protected]>
    Tested-by: Daniel Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/amd/display: Separate set_gsl from set_gsl_source_select [+ + +]
Author: Ilya Bakoulin <[email protected]>
Date:   Wed Jun 18 13:07:14 2025 -0400

    drm/amd/display: Separate set_gsl from set_gsl_source_select
    
    [ Upstream commit 660a467a5e7366cd6642de61f1aaeaf0d253ee68 ]
    
    [Why/How]
    Separate the checks for set_gsl and set_gsl_source_select, since
    source_select may not be implemented/necessary.
    
    Reviewed-by: Nevenko Stupar <[email protected]>
    Signed-off-by: Ilya Bakoulin <[email protected]>
    Signed-off-by: Ray Wu <[email protected]>
    Tested-by: Daniel Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amd: Allow printing VanGogh OD SCLK levels without setting dpm to manual [+ + +]
Author: Mario Limonciello <[email protected]>
Date:   Sun Jun 8 22:12:26 2025 -0500

    drm/amd: Allow printing VanGogh OD SCLK levels without setting dpm to manual
    
    [ Upstream commit 2d1ec1e955414e8e8358178011c35afca1a1c0b1 ]
    
    Several other ASICs allow printing OD SCLK levels without setting DPM
    control to manual.  When OD is disabled it will show the range the
    hardware supports. When OD is enabled it will show what values have
    been programmed. Adjust VanGogh to work the same.
    
    Cc: Pierre-Loup A. Griffais <[email protected]>
    Reported-by: Vicki Pfau <[email protected]>
    Reviewed-by: Alex Deucher <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mario Limonciello <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/amd: Restore cached power limit during resume [+ + +]
Author: Mario Limonciello <[email protected]>
Date:   Thu Jul 24 22:12:21 2025 -0500

    drm/amd: Restore cached power limit during resume
    
    commit ed4efe426a49729952b3dc05d20e33b94409bdd1 upstream.
    
    The power limit will be cached in smu->current_power_limit but
    if the ASIC goes into S3 this value won't be restored.
    
    Restore the value during SMU resume.
    
    Acked-by: Alex Deucher <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mario Limonciello <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 26a609e053a6fc494403e95403bc6a2470383bec)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdgpu: Avoid extra evict-restore process. [+ + +]
Author: Gang Ba <[email protected]>
Date:   Tue Jul 8 14:36:13 2025 -0400

    drm/amdgpu: Avoid extra evict-restore process.
    
    commit 1f02f2044bda1db1fd995bc35961ab075fa7b5a2 upstream.
    
    If vm belongs to another process, this is fclose after fork,
    wait may enable signaling KFD eviction fence and cause parent process queue evicted.
    
    [677852.634569]  amdkfd_fence_enable_signaling+0x56/0x70 [amdgpu]
    [677852.634814]  __dma_fence_enable_signaling+0x3e/0xe0
    [677852.634820]  dma_fence_wait_timeout+0x3a/0x140
    [677852.634825]  amddma_resv_wait_timeout+0x7f/0xf0 [amdkcl]
    [677852.634831]  amdgpu_vm_wait_idle+0x2d/0x60 [amdgpu]
    [677852.635026]  amdgpu_flush+0x34/0x50 [amdgpu]
    [677852.635208]  filp_flush+0x38/0x90
    [677852.635213]  filp_close+0x14/0x30
    [677852.635216]  do_close_on_exec+0xdd/0x130
    [677852.635221]  begin_new_exec+0x1da/0x490
    [677852.635225]  load_elf_binary+0x307/0xea0
    [677852.635231]  ? srso_alias_return_thunk+0x5/0xfbef5
    [677852.635235]  ? ima_bprm_check+0xa2/0xd0
    [677852.635240]  search_binary_handler+0xda/0x260
    [677852.635245]  exec_binprm+0x58/0x1a0
    [677852.635249]  bprm_execve.part.0+0x16f/0x210
    [677852.635254]  bprm_execve+0x45/0x80
    [677852.635257]  do_execveat_common.isra.0+0x190/0x200
    
    Suggested-by: Christian König <[email protected]>
    Signed-off-by: Gang Ba <[email protected]>
    Reviewed-by: Christian König <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amdgpu: fix incorrect vm flags to map bo [+ + +]
Author: Jack Xiao <[email protected]>
Date:   Mon Aug 11 15:20:55 2025 +0800

    drm/amdgpu: fix incorrect vm flags to map bo
    
    [ Upstream commit 040bc6d0e0e9c814c9c663f6f1544ebaff6824a8 ]
    
    It should use vm flags instead of pte flags
    to specify bo vm attributes.
    
    Fixes: 7946340fa389 ("drm/amdgpu: Move csa related code to separate file")
    Signed-off-by: Jack Xiao <[email protected]>
    Reviewed-by: Likun Gao <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit b08425fa77ad2f305fe57a33dceb456be03b653f)
    Signed-off-by: Sasha Levin <[email protected]>

drm/amdgpu: update mmhub 3.0.1 client id mappings [+ + +]
Author: Alex Deucher <[email protected]>
Date:   Fri Jul 18 15:52:04 2025 -0400

    drm/amdgpu: update mmhub 3.0.1 client id mappings
    
    commit 0bae62cc989fa99ac9cb564eb573aad916d1eb61 upstream.
    
    Update the client id mapping so the correct clients
    get printed when there is a mmhub page fault.
    
    Reviewed-by: David (Ming Qiang) Wu <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 2a2681eda73b99a2c1ee8cdb006099ea5d0c2505)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdkfd: Destroy KFD debugfs after destroy KFD wq [+ + +]
Author: Amber Lin <[email protected]>
Date:   Thu Jul 31 20:45:00 2025 -0400

    drm/amdkfd: Destroy KFD debugfs after destroy KFD wq
    
    commit 2e58401a24e7b2d4ec619104e1a76590c1284a4c upstream.
    
    Since KFD proc content was moved to kernel debugfs, we can't destroy KFD
    debugfs before kfd_process_destroy_wq. Move kfd_process_destroy_wq prior
    to kfd_debugfs_fini to fix a kernel NULL pointer problem. It happens
    when /sys/kernel/debug/kfd was already destroyed in kfd_debugfs_fini but
    kfd_process_destroy_wq calls kfd_debugfs_remove_process. This line
        debugfs_remove_recursive(entry->proc_dentry);
    tries to remove /sys/kernel/debug/kfd/proc/<pid> while
    /sys/kernel/debug/kfd is already gone. It hangs the kernel by kernel
    NULL pointer.
    
    Signed-off-by: Amber Lin <[email protected]>
    Reviewed-by: Eric Huang <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 0333052d90683d88531558dcfdbf2525cc37c233)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/dp: Change AUX DPCD probe address from DPCD_REV to LANE0_1_STATUS [+ + +]
Author: Imre Deak <[email protected]>
Date:   Sat Aug 23 09:10:01 2025 -0400

    drm/dp: Change AUX DPCD probe address from DPCD_REV to LANE0_1_STATUS
    
    [ Upstream commit a40c5d727b8111b5db424a1e43e14a1dcce1e77f ]
    
    Reading DPCD registers has side-effects in general. In particular
    accessing registers outside of the link training register range
    (0x102-0x106, 0x202-0x207, 0x200c-0x200f, 0x2216) is explicitly
    forbidden by the DP v2.1 Standard, see
    
    3.6.5.1 DPTX AUX Transaction Handling Mandates
    3.6.7.4 128b/132b DP Link Layer LTTPR Link Training Mandates
    
    Based on my tests, accessing the DPCD_REV register during the link
    training of an UHBR TBT DP tunnel sink leads to link training failures.
    
    Solve the above by using the DP_LANE0_1_STATUS (0x202) register for the
    DPCD register access quirk.
    
    Cc: <[email protected]>
    Cc: Ville Syrjälä <[email protected]>
    Cc: Jani Nikula <[email protected]>
    Acked-by: Jani Nikula <[email protected]>
    Signed-off-by: Imre Deak <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/hisilicon/hibmc: fix the hibmc loaded failed bug [+ + +]
Author: Baihan Li <[email protected]>
Date:   Wed Aug 13 17:42:31 2025 +0800

    drm/hisilicon/hibmc: fix the hibmc loaded failed bug
    
    [ Upstream commit 93a08f856fcc5aaeeecad01f71bef3088588216a ]
    
    When hibmc loaded failed, the driver use hibmc_unload to free the
    resource, but the mutexes in mode.config are not init, which will
    access an NULL pointer. Just change goto statement to return, because
    hibnc_hw_init() doesn't need to free anything.
    
    Fixes: b3df5e65cc03 ("drm/hibmc: Drop drm_vblank_cleanup")
    Signed-off-by: Baihan Li <[email protected]>
    Signed-off-by: Yongbang Shi <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/msm: use trylock for debugfs [+ + +]
Author: Rob Clark <[email protected]>
Date:   Sun Jun 29 13:13:22 2025 -0700

    drm/msm: use trylock for debugfs
    
    [ Upstream commit 0a1ff88ec5b60b41ba830c5bf08b6cd8f45ab411 ]
    
    This resolves a potential deadlock vs msm_gem_vm_close().  Otherwise for
    _NO_SHARE buffers msm_gem_describe() could be trying to acquire the
    shared vm resv, while already holding priv->obj_lock.  But _vm_close()
    might drop the last reference to a GEM obj while already holding the vm
    resv, and msm_gem_free_object() needs to grab priv->obj_lock, a locking
    inversion.
    
    OTOH this is only for debugfs and it isn't critical if we undercount by
    skipping a locked obj.  So just use trylock() and move along if we can't
    get the lock.
    
    Signed-off-by: Rob Clark <[email protected]>
    Signed-off-by: Rob Clark <[email protected]>
    Tested-by: Antonino Maniscalco <[email protected]>
    Reviewed-by: Antonino Maniscalco <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/661525/
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/nouveau/nvif: Fix potential memory leak in nvif_vmm_ctor(). [+ + +]
Author: Fanhua Li <[email protected]>
Date:   Mon Jul 28 19:50:27 2025 +0800

    drm/nouveau/nvif: Fix potential memory leak in nvif_vmm_ctor().
    
    [ Upstream commit bb8aeaa3191b617c6faf8ae937252e059673b7ea ]
    
    When the nvif_vmm_type is invalid, we will return error directly
    without freeing the args in nvif_vmm_ctor(), which leading a memory
    leak. Fix it by setting the ret -EINVAL and goto done.
    
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Fixes: 6b252cf42281 ("drm/nouveau: nvkm/vmm: implement raw ops to manage uvmm")
    Signed-off-by: Fanhua Li <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Danilo Krummrich <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/ttm: Respect the shrinker core free target [+ + +]
Author: Tvrtko Ursulin <[email protected]>
Date:   Tue Jun 3 12:27:49 2025 +0100

    drm/ttm: Respect the shrinker core free target
    
    [ Upstream commit eac21f8ebeb4f84d703cf41dc3f81d16fa9dc00a ]
    
    Currently the TTM shrinker aborts shrinking as soon as it frees pages from
    any of the page order pools and by doing so it can fail to respect the
    freeing target which was configured by the shrinker core.
    
    We use the wording "can fail" because the number of freed pages will
    depend on the presence of pages in the pools and the order of the pools on
    the LRU list. For example if there are no free pages in the high order
    pools the shrinker core may require multiple passes over the TTM shrinker
    before it will free the default target of 128 pages (assuming there are
    free pages in the low order pools). This inefficiency can be compounded by
    the pool LRU where multiple further calls into the TTM shrinker are
    required to end up looking at the pool with pages.
    
    Improve this by never freeing less than the shrinker core has requested.
    
    At the same time we start reporting the number of scanned pages (freed in
    this case), which prevents the core shrinker from giving up on the TTM
    shrinker too soon and moving on.
    
    v2:
     * Simplify loop logic. (Christian)
     * Improve commit message.
    
    Signed-off-by: Tvrtko Ursulin <[email protected]>
    Cc: Christian König <[email protected]>
    Cc: Thomas Hellström <[email protected]>
    Reviewed-by: Christian König <[email protected]>
    Signed-off-by: Tvrtko Ursulin <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

drm/ttm: Should to return the evict error [+ + +]
Author: Emily Deng <[email protected]>
Date:   Tue Jun 3 17:11:54 2025 +0800

    drm/ttm: Should to return the evict error
    
    [ Upstream commit 4e16a9a00239db5d819197b9a00f70665951bf50 ]
    
    For the evict fail case, the evict error should be returned.
    
    v2: Consider ENOENT case.
    
    v3: Abort directly when the eviction failed for some reason (except for -ENOENT)
     and not wait for the move to finish
    
    Signed-off-by: Emily Deng <[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: Sasha Levin <[email protected]>

 
drm: renesas: rz-du: mipi_dsi: Add min check for VCLK range [+ + +]
Author: Lad Prabhakar <[email protected]>
Date:   Mon Jun 9 23:56:22 2025 +0100

    drm: renesas: rz-du: mipi_dsi: Add min check for VCLK range
    
    [ Upstream commit e37a95d01d5acce211da8446fefbd8684c67f516 ]
    
    The VCLK range for Renesas RZ/G2L SoC is 5.803 MHz to 148.5 MHz. Add a
    minimum clock check in the mode_valid callback to ensure that the clock
    value does not fall below the valid range.
    
    Co-developed-by: Fabrizio Castro <[email protected]>
    Signed-off-by: Fabrizio Castro <[email protected]>
    Signed-off-by: Lad Prabhakar <[email protected]>
    Reviewed-by: Biju Das <[email protected]>
    Reviewed-by: Laurent Pinchart <[email protected]>
    Signed-off-by: Biju Das <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
dt-bindings: display: sprd,sharkl3-dpu: Fix missing clocks constraints [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Sun Jul 20 14:30:04 2025 +0200

    dt-bindings: display: sprd,sharkl3-dpu: Fix missing clocks constraints
    
    commit 934da599e694d476f493d3927a30414e98a81561 upstream.
    
    'minItems' alone does not impose upper bound, unlike 'maxItems' which
    implies lower bound.  Add missing clock constraint so the list will have
    exact number of items (clocks).
    
    Fixes: 8cae15c60cf0 ("dt-bindings: display: add Unisoc's dpu bindings")
    Cc: [email protected]
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Rob Herring (Arm) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dt-bindings: display: sprd,sharkl3-dsi-host: Fix missing clocks constraints [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Sun Jul 20 14:30:05 2025 +0200

    dt-bindings: display: sprd,sharkl3-dsi-host: Fix missing clocks constraints
    
    commit 2558df8c13ae3bd6c303b28f240ceb0189519c91 upstream.
    
    'minItems' alone does not impose upper bound, unlike 'maxItems' which
    implies lower bound.  Add missing clock constraint so the list will have
    exact number of items (clocks).
    
    Fixes: 2295bbd35edb ("dt-bindings: display: add Unisoc's mipi dsi controller bindings")
    Cc: [email protected]
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Rob Herring (Arm) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
EDAC/synopsys: Clear the ECC counters on init [+ + +]
Author: Shubhrajyoti Datta <[email protected]>
Date:   Sun Jul 13 10:37:53 2025 +0530

    EDAC/synopsys: Clear the ECC counters on init
    
    [ Upstream commit b1dc7f097b78eb8d25b071ead2384b07a549692b ]
    
    Clear the ECC error and counter registers during initialization/probe to avoid
    reporting stale errors that may have occurred before EDAC registration.
    
    For that, unify the Zynq and ZynqMP ECC state reading paths and simplify the
    code.
    
      [ bp: Massage commit message.
        Fix an -Wsometimes-uninitialized warning as reported by
        Reported-by: kernel test robot <[email protected]>
        Closes: https://lore.kernel.org/oe-kbuild-all/[email protected] ]
    
    Signed-off-by: Shubhrajyoti Datta <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
energy_model: Use a fixed reference frequency [+ + +]
Author: Vincent Guittot <[email protected]>
Date:   Mon Dec 11 11:48:52 2023 +0100

    energy_model: Use a fixed reference frequency
    
    commit 15cbbd1d317e07b4e5c6aca5d4c5579539a82784 upstream.
    
    The last item of a performance domain is not always the performance point
    that has been used to compute CPU's capacity. This can lead to different
    target frequency compared with other part of the system like schedutil and
    would result in wrong energy estimation.
    
    A new arch_scale_freq_ref() is available to return a fixed and coherent
    frequency reference that can be used when computing the CPU's frequency
    for an level of utilization. Use this function to get this reference
    frequency.
    
    Energy model is never used without defining arch_scale_freq_ref() but
    can be compiled. Define a default arch_scale_freq_ref() returning 0
    in such case.
    
    Signed-off-by: Vincent Guittot <[email protected]>
    Signed-off-by: Ingo Molnar <[email protected]>
    Tested-by: Lukasz Luba <[email protected]>
    Reviewed-by: Lukasz Luba <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: e37617c8e53a ("sched/fair: Fix frequency selection for non-invariant case")
    Signed-off-by: Wentao Guan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
et131x: Add missing check after DMA map [+ + +]
Author: Thomas Fourier <[email protected]>
Date:   Wed Jul 16 11:47:30 2025 +0200

    et131x: Add missing check after DMA map
    
    [ Upstream commit d61f6cb6f6ef3c70d2ccc0d9c85c508cb8017da9 ]
    
    The DMA map functions can fail and should be tested for errors.
    If the mapping fails, unmap and return an error.
    
    Signed-off-by: Thomas Fourier <[email protected]>
    Acked-by: Mark Einon <[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]>

 
eventpoll: Fix semi-unbounded recursion [+ + +]
Author: Jann Horn <[email protected]>
Date:   Fri Jul 11 18:33:36 2025 +0200

    eventpoll: Fix semi-unbounded recursion
    
    commit f2e467a48287c868818085aa35389a224d226732 upstream.
    
    Ensure that epoll instances can never form a graph deeper than
    EP_MAX_NESTS+1 links.
    
    Currently, ep_loop_check_proc() ensures that the graph is loop-free and
    does some recursion depth checks, but those recursion depth checks don't
    limit the depth of the resulting tree for two reasons:
    
     - They don't look upwards in the tree.
     - If there are multiple downwards paths of different lengths, only one of
       the paths is actually considered for the depth check since commit
       28d82dc1c4ed ("epoll: limit paths").
    
    Essentially, the current recursion depth check in ep_loop_check_proc() just
    serves to prevent it from recursing too deeply while checking for loops.
    
    A more thorough check is done in reverse_path_check() after the new graph
    edge has already been created; this checks, among other things, that no
    paths going upwards from any non-epoll file with a length of more than 5
    edges exist. However, this check does not apply to non-epoll files.
    
    As a result, it is possible to recurse to a depth of at least roughly 500,
    tested on v6.15. (I am unsure if deeper recursion is possible; and this may
    have changed with commit 8c44dac8add7 ("eventpoll: Fix priority inversion
    problem").)
    
    To fix it:
    
    1. In ep_loop_check_proc(), note the subtree depth of each visited node,
    and use subtree depths for the total depth calculation even when a subtree
    has already been visited.
    2. Add ep_get_upwards_depth_proc() for similarly determining the maximum
    depth of an upwards walk.
    3. In ep_loop_check(), use these values to limit the total path length
    between epoll nodes to EP_MAX_NESTS edges.
    
    Fixes: 22bacca48a17 ("epoll: prevent creating circular epoll structures")
    Cc: [email protected]
    Signed-off-by: Jann Horn <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
exfat: add cluster chain loop check for dir [+ + +]
Author: Yuezhang Mo <[email protected]>
Date:   Tue Mar 18 17:00:49 2025 +0800

    exfat: add cluster chain loop check for dir
    
    [ Upstream commit 99f9a97dce39ad413c39b92c90393bbd6778f3fd ]
    
    An infinite loop may occur if the following conditions occur due to
    file system corruption.
    
    (1) Condition for exfat_count_dir_entries() to loop infinitely.
        - The cluster chain includes a loop.
        - There is no UNUSED entry in the cluster chain.
    
    (2) Condition for exfat_create_upcase_table() to loop infinitely.
        - The cluster chain of the root directory includes a loop.
        - There are no UNUSED entry and up-case table entry in the cluster
          chain of the root directory.
    
    (3) Condition for exfat_load_bitmap() to loop infinitely.
        - The cluster chain of the root directory includes a loop.
        - There are no UNUSED entry and bitmap entry in the cluster chain
          of the root directory.
    
    (4) Condition for exfat_find_dir_entry() to loop infinitely.
        - The cluster chain includes a loop.
        - The unused directory entries were exhausted by some operation.
    
    (5) Condition for exfat_check_dir_empty() to loop infinitely.
        - The cluster chain includes a loop.
        - The unused directory entries were exhausted by some operation.
        - All files and sub-directories under the directory are deleted.
    
    This commit adds checks to break the above infinite loop.
    
    Signed-off-by: Yuezhang Mo <[email protected]>
    Signed-off-by: Namjae Jeon <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ext2: Handle fiemap on empty files to prevent EINVAL [+ + +]
Author: Wei Gao <[email protected]>
Date:   Fri Jun 13 11:18:38 2025 -0400

    ext2: Handle fiemap on empty files to prevent EINVAL
    
    [ Upstream commit a099b09a3342a0b28ea330e405501b5b4d0424b4 ]
    
    Previously, ext2_fiemap would unconditionally apply "len = min_t(u64, len,
    i_size_read(inode));", When inode->i_size was 0 (for an empty file), this
    would reduce the requested len to 0. Passing len = 0 to iomap_fiemap could
    then result in an -EINVAL error, even for valid queries on empty files.
    
    Link: https://github.com/linux-test-project/ltp/issues/1246
    Signed-off-by: Wei Gao <[email protected]>
    Signed-off-by: Jan Kara <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
ext4: check fast symlink for ea_inode correctly [+ + +]
Author: Andreas Dilger <[email protected]>
Date:   Wed Jul 16 19:36:42 2025 -0600

    ext4: check fast symlink for ea_inode correctly
    
    commit b4cc4a4077268522e3d0d34de4b2dc144e2330fa upstream.
    
    The check for a fast symlink in the presence of only an
    external xattr inode is incorrect.  If a fast symlink does
    not have an xattr block (i_file_acl == 0), but does have
    an external xattr inode that increases inode i_blocks, then
    the check for a fast symlink will incorrectly fail and
    __ext4_iget()->ext4_ind_check_inode() will report the inode
    is corrupt when it "validates" i_data[] on the next read:
    
        # ln -s foo /mnt/tmp/bar
        # setfattr -h -n trusted.test \
                   -v "$(yes | head -n 4000)" /mnt/tmp/bar
        # umount /mnt/tmp
        # mount /mnt/tmp
        # ls -l /mnt/tmp
        ls: cannot access '/mnt/tmp/bar': Structure needs cleaning
        total 4
         ? l?????????? ? ?    ?        ?            ? bar
        # dmesg | tail -1
        EXT4-fs error (device dm-8): __ext4_iget:5098:
            inode #24578: block 7303014: comm ls: invalid block
    
    (note that "block 7303014" = 0x6f6f66 = "foo" in LE order).
    
    ext4_inode_is_fast_symlink() should check the superblock
    EXT4_FEATURE_INCOMPAT_EA_INODE feature flag, not the inode
    EXT4_EA_INODE_FL, since the latter is only set on the xattr
    inode itself, and not on the inode that uses this xattr.
    
    Cc: [email protected]
    Fixes: fc82228a5e38 ("ext4: support fast symlinks from ext3 file systems")
    Signed-off-by: Andreas Dilger <[email protected]>
    Reviewed-by: Li Dongyang <[email protected]>
    Reviewed-by: Alex Zhuravlev <[email protected]>
    Reviewed-by: Oleg Drokin <[email protected]>
    Reviewed-on: https://review.whamcloud.com/59879
    Lustre-bug-id: https://jira.whamcloud.com/browse/LU-19121
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: do not BUG when INLINE_DATA_FL lacks system.data xattr [+ + +]
Author: Theodore Ts'o <[email protected]>
Date:   Thu Jul 17 10:54:34 2025 -0400

    ext4: do not BUG when INLINE_DATA_FL lacks system.data xattr
    
    [ Upstream commit 099b847ccc6c1ad2f805d13cfbcc83f5b6d4bc42 ]
    
    A syzbot fuzzed image triggered a BUG_ON in ext4_update_inline_data()
    when an inode had the INLINE_DATA_FL flag set but was missing the
    system.data extended attribute.
    
    Since this can happen due to a maiciouly fuzzed file system, we
    shouldn't BUG, but rather, report it as a corrupted file system.
    
    Add similar replacements of BUG_ON with EXT4_ERROR_INODE() ii
    ext4_create_inline_data() and ext4_inline_data_truncate().
    
    Reported-by: [email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ext4: don't try to clear the orphan_present feature block device is r/o [+ + +]
Author: Theodore Ts'o <[email protected]>
Date:   Thu Aug 7 09:35:20 2025 -0400

    ext4: don't try to clear the orphan_present feature block device is r/o
    
    commit c5e104a91e7b6fa12c1dc2d8bf84abb7ef9b89ad upstream.
    
    When the file system is frozen in preparation for taking an LVM
    snapshot, the journal is checkpointed and if the orphan_file feature
    is enabled, and the orphan file is empty, we clear the orphan_present
    feature flag.  But if there are pending inodes that need to be removed
    the orphan_present feature flag can't be cleared.
    
    The problem comes if the block device is read-only.  In that case, we
    can't process the orphan inode list, so it is skipped in
    ext4_orphan_cleanup().  But then in ext4_mark_recovery_complete(),
    this results in the ext4 error "Orphan file not empty on read-only fs"
    firing and the file system mount is aborted.
    
    Fix this by clearing the needs_recovery flag in the block device is
    read-only.  We do this after the call to ext4_load_and_init-journal()
    since there are some error checks need to be done in case the journal
    needs to be replayed and the block device is read-only, or if the
    block device containing the externa journal is read-only, etc.
    
    Cc: [email protected]
    Link: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1108271
    Cc: [email protected]
    Fixes: 02f310fcf47f ("ext4: Speedup ext4 orphan inode handling")
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: fix fsmap end of range reporting with bigalloc [+ + +]
Author: Ojaswin Mujoo <[email protected]>
Date:   Tue Aug 5 14:00:30 2025 +0530

    ext4: fix fsmap end of range reporting with bigalloc
    
    commit bae76c035bf0852844151e68098c9b7cd63ef238 upstream.
    
    With bigalloc enabled, the logic to report last extent has a bug since
    we try to use cluster units instead of block units. This can cause an
    issue where extra incorrect entries might be returned back to the
    user. This was flagged by generic/365 with 64k bs and -O bigalloc.
    
    ** Details of issue **
    
    The issue was noticed on 5G 64k blocksize FS with -O bigalloc which has
    only 1 bg.
    
    $ xfs_io -c "fsmap -d" /mnt/scratch
    
      0: 253:48 [0..127]: static fs metadata 128   /* sb */
      1: 253:48 [128..255]: special 102:1 128   /* gdt */
      3: 253:48 [256..383]: special 102:3 128   /* block bitmap */
      4: 253:48 [384..2303]: unknown 1920       /* flex bg empty space */
      5: 253:48 [2304..2431]: special 102:4 128   /* inode bitmap */
      6: 253:48 [2432..4351]: unknown 1920      /* flex bg empty space */
      7: 253:48 [4352..6911]: inodes 2560
      8: 253:48 [6912..538623]: unknown 531712
      9: 253:48 [538624..10485759]: free space 9947136
    
    The issue can be seen with:
    
    $ xfs_io -c "fsmap -d 0 3" /mnt/scratch
    
      0: 253:48 [0..127]: static fs metadata 128
      1: 253:48 [384..2047]: unknown 1664
    
    Only the first entry was expected to be returned but we get 2. This is
    because:
    
    ext4_getfsmap_datadev()
      first_cluster, last_cluster = 0
      ...
      info->gfi_last = true;
      ext4_getfsmap_datadev_helper(sb, end_ag, last_cluster + 1, 0, info);
        fsb = C2B(1) = 16
        fslen = 0
        ...
        /* Merge in any relevant extents from the meta_list */
        list_for_each_entry_safe(p, tmp, &info->gfi_meta_list, fmr_list) {
          ...
          // since fsb = 16, considers all metadata which starts before 16 blockno
          iter 1: error = ext4_getfsmap_helper(sb, info, p);  // p = sb (0,1), nop
            info->gfi_next_fsblk = 1
          iter 2: error = ext4_getfsmap_helper(sb, info, p);  // p = gdt (1,2), nop
            info->gfi_next_fsblk = 2
          iter 3: error = ext4_getfsmap_helper(sb, info, p);  // p = blk bitmap (2,3), nop
            info->gfi_next_fsblk = 3
          iter 4: error = ext4_getfsmap_helper(sb, info, p);  // p = ino bitmap (18,19)
            if (rec_blk > info->gfi_next_fsblk) { // (18 > 3)
              // emits an extra entry ** BUG **
            }
        }
    
    Fix this by directly calling ext4_getfsmap_datadev() with a dummy
    record that has fmr_physical set to (end_fsb + 1) instead of
    last_cluster + 1. By using the block instead of cluster we get the
    correct behavior.
    
    Replacing ext4_getfsmap_datadev_helper() with ext4_getfsmap_helper()
    is okay since the gfi_lastfree and metadata checks in
    ext4_getfsmap_datadev_helper() are anyways redundant when we only want
    to emit the last allocated block of the range, as we have already
    taken care of emitting metadata and any last free blocks.
    
    Cc: [email protected]
    Reported-by: Disha Goel <[email protected]>
    Fixes: 4a622e4d477b ("ext4: fix FS_IOC_GETFSMAP handling")
    Signed-off-by: Ojaswin Mujoo <[email protected]>
    Reviewed-by: Darrick J. Wong <[email protected]>
    Link: https://patch.msgid.link/e7472c8535c9c5ec10f425f495366864ea12c9da.1754377641.git.ojaswin@linux.ibm.com
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: fix hole length calculation overflow in non-extent inodes [+ + +]
Author: Zhang Yi <[email protected]>
Date:   Mon Aug 11 14:45:32 2025 +0800

    ext4: fix hole length calculation overflow in non-extent inodes
    
    commit 02c7f7219ac0e2277b3379a3a0e9841ef464b6d4 upstream.
    
    In a filesystem with a block size larger than 4KB, the hole length
    calculation for a non-extent inode in ext4_ind_map_blocks() can easily
    exceed INT_MAX. Then it could return a zero length hole and trigger the
    following waring and infinite in the iomap infrastructure.
    
      ------------[ cut here ]------------
      WARNING: CPU: 3 PID: 434101 at fs/iomap/iter.c:34 iomap_iter_done+0x148/0x190
      CPU: 3 UID: 0 PID: 434101 Comm: fsstress Not tainted 6.16.0-rc7+ #128 PREEMPT(voluntary)
      Hardware name: QEMU KVM Virtual Machine, BIOS unknown 2/2/2022
      pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
      pc : iomap_iter_done+0x148/0x190
      lr : iomap_iter+0x174/0x230
      sp : ffff8000880af740
      x29: ffff8000880af740 x28: ffff0000db8e6840 x27: 0000000000000000
      x26: 0000000000000000 x25: ffff8000880af830 x24: 0000004000000000
      x23: 0000000000000002 x22: 000001bfdbfa8000 x21: ffffa6a41c002e48
      x20: 0000000000000001 x19: ffff8000880af808 x18: 0000000000000000
      x17: 0000000000000000 x16: ffffa6a495ee6cd0 x15: 0000000000000000
      x14: 00000000000003d4 x13: 00000000fa83b2da x12: 0000b236fc95f18c
      x11: ffffa6a4978b9c08 x10: 0000000000001da0 x9 : ffffa6a41c1a2a44
      x8 : ffff8000880af5c8 x7 : 0000000001000000 x6 : 0000000000000000
      x5 : 0000000000000004 x4 : 000001bfdbfa8000 x3 : 0000000000000000
      x2 : 0000000000000000 x1 : 0000004004030000 x0 : 0000000000000000
      Call trace:
       iomap_iter_done+0x148/0x190 (P)
       iomap_iter+0x174/0x230
       iomap_fiemap+0x154/0x1d8
       ext4_fiemap+0x110/0x140 [ext4]
       do_vfs_ioctl+0x4b8/0xbc0
       __arm64_sys_ioctl+0x8c/0x120
       invoke_syscall+0x6c/0x100
       el0_svc_common.constprop.0+0x48/0xf0
       do_el0_svc+0x24/0x38
       el0_svc+0x38/0x120
       el0t_64_sync_handler+0x10c/0x138
       el0t_64_sync+0x198/0x1a0
      ---[ end trace 0000000000000000 ]---
    
    Cc: [email protected]
    Fixes: facab4d9711e ("ext4: return hole from ext4_map_blocks()")
    Reported-by: Qu Wenruo <[email protected]>
    Closes: https://lore.kernel.org/linux-ext4/[email protected]/
    Tested-by: Qu Wenruo <[email protected]>
    Signed-off-by: Zhang Yi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: fix largest free orders lists corruption on mb_optimize_scan switch [+ + +]
Author: Baokun Li <[email protected]>
Date:   Mon Jul 14 21:03:21 2025 +0800

    ext4: fix largest free orders lists corruption on mb_optimize_scan switch
    
    commit 7d345aa1fac4c2ec9584fbd6f389f2c2368671d5 upstream.
    
    The grp->bb_largest_free_order is updated regardless of whether
    mb_optimize_scan is enabled. This can lead to inconsistencies between
    grp->bb_largest_free_order and the actual s_mb_largest_free_orders list
    index when mb_optimize_scan is repeatedly enabled and disabled via remount.
    
    For example, if mb_optimize_scan is initially enabled, largest free
    order is 3, and the group is in s_mb_largest_free_orders[3]. Then,
    mb_optimize_scan is disabled via remount, block allocations occur,
    updating largest free order to 2. Finally, mb_optimize_scan is re-enabled
    via remount, more block allocations update largest free order to 1.
    
    At this point, the group would be removed from s_mb_largest_free_orders[3]
    under the protection of s_mb_largest_free_orders_locks[2]. This lock
    mismatch can lead to list corruption.
    
    To fix this, whenever grp->bb_largest_free_order changes, we now always
    attempt to remove the group from its old order list. However, we only
    insert the group into the new order list if `mb_optimize_scan` is enabled.
    This approach helps prevent lock inconsistencies and ensures the data in
    the order lists remains reliable.
    
    Fixes: 196e402adf2e ("ext4: improve cr 0 / cr 1 group scanning")
    CC: [email protected]
    Suggested-by: Jan Kara <[email protected]>
    Signed-off-by: Baokun Li <[email protected]>
    Reviewed-by: Zhang Yi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: fix reserved gdt blocks handling in fsmap [+ + +]
Author: Ojaswin Mujoo <[email protected]>
Date:   Tue Aug 5 14:00:31 2025 +0530

    ext4: fix reserved gdt blocks handling in fsmap
    
    commit 3ffbdd1f1165f1b2d6a94d1b1aabef57120deaf7 upstream.
    
    In some cases like small FSes with no meta_bg and where the resize
    doesn't need extra gdt blocks as it can fit in the current one,
    s_reserved_gdt_blocks is set as 0, which causes fsmap to emit a 0
    length entry, which is incorrect.
    
      $ mkfs.ext4 -b 65536 -O bigalloc /dev/sda 5G
      $ mount /dev/sda /mnt/scratch
      $ xfs_io -c "fsmap -d" /mnt/scartch
    
            0: 253:48 [0..127]: static fs metadata 128
            1: 253:48 [128..255]: special 102:1 128
            2: 253:48 [256..255]: special 102:2 0     <---- 0 len entry
            3: 253:48 [256..383]: special 102:3 128
    
    Fix this by adding a check for this case.
    
    Cc: [email protected]
    Fixes: 0c9ec4beecac ("ext4: support GETFSMAP ioctls")
    Signed-off-by: Ojaswin Mujoo <[email protected]>
    Reviewed-by: Darrick J. Wong <[email protected]>
    Link: https://patch.msgid.link/08781b796453a5770112aa96ad14c864fbf31935.1754377641.git.ojaswin@linux.ibm.com
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: fix zombie groups in average fragment size lists [+ + +]
Author: Baokun Li <[email protected]>
Date:   Mon Jul 14 21:03:20 2025 +0800

    ext4: fix zombie groups in average fragment size lists
    
    commit 1c320d8e92925bb7615f83a7b6e3f402a5c2ca63 upstream.
    
    Groups with no free blocks shouldn't be in any average fragment size list.
    However, when all blocks in a group are allocated(i.e., bb_fragments or
    bb_free is 0), we currently skip updating the average fragment size, which
    means the group isn't removed from its previous s_mb_avg_fragment_size[old]
    list.
    
    This created "zombie" groups that were always skipped during traversal as
    they couldn't satisfy any block allocation requests, negatively impacting
    traversal efficiency.
    
    Therefore, when a group becomes completely full, bb_avg_fragment_size_order
    is now set to -1. If the old order was not -1, a removal operation is
    performed; if the new order is not -1, an insertion is performed.
    
    Fixes: 196e402adf2e ("ext4: improve cr 0 / cr 1 group scanning")
    CC: [email protected]
    Signed-off-by: Baokun Li <[email protected]>
    Reviewed-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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: preserve SB_I_VERSION on remount [+ + +]
Author: Baokun Li <[email protected]>
Date:   Fri Aug 22 10:19:40 2025 -0400

    ext4: preserve SB_I_VERSION on remount
    
    [ Upstream commit f2326fd14a224e4cccbab89e14c52279ff79b7ec ]
    
    IMA testing revealed that after an ext4 remount, file accesses triggered
    full measurements even without modifications, instead of skipping as
    expected when i_version is unchanged.
    
    Debugging showed `SB_I_VERSION` was cleared in reconfigure_super() during
    remount due to commit 1ff20307393e ("ext4: unconditionally enable the
    i_version counter") removing the fix from commit 960e0ab63b2e ("ext4: fix
    i_version handling on remount").
    
    To rectify this, `SB_I_VERSION` is always set for `fc->sb_flags` in
    ext4_init_fs_context(), instead of `sb->s_flags` in __ext4_fill_super(),
    ensuring it persists across all mounts.
    
    Cc: [email protected]
    Fixes: 1ff20307393e ("ext4: unconditionally enable the i_version counter")
    Signed-off-by: Baokun Li <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: use kmalloc_array() for array space allocation [+ + +]
Author: Liao Yuanhong <[email protected]>
Date:   Mon Aug 11 20:58:16 2025 +0800

    ext4: use kmalloc_array() for array space allocation
    
    commit 76dba1fe277f6befd6ef650e1946f626c547387a upstream.
    
    Replace kmalloc(size * sizeof) with kmalloc_array() for safer memory
    allocation and overflow prevention.
    
    Cc: [email protected]
    Signed-off-by: Liao Yuanhong <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
f2fs: check the generic conditions first [+ + +]
Author: Jaegeuk Kim <[email protected]>
Date:   Mon Jun 30 16:06:09 2025 +0000

    f2fs: check the generic conditions first
    
    [ Upstream commit e23ab8028de0d92df5921a570f5212c0370db3b5 ]
    
    Let's return errors caught by the generic checks. This fixes generic/494 where
    it expects to see EBUSY by setattr_prepare instead of EINVAL by f2fs for active
    swapfile.
    
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

f2fs: fix to avoid out-of-boundary access in dnode page [+ + +]
Author: Chao Yu <[email protected]>
Date:   Thu Jul 17 21:26:33 2025 +0800

    f2fs: fix to avoid out-of-boundary access in dnode page
    
    commit 77de19b6867f2740cdcb6c9c7e50d522b47847a4 upstream.
    
    As Jiaming Zhang reported:
    
     <TASK>
     __dump_stack lib/dump_stack.c:94 [inline]
     dump_stack_lvl+0x1c1/0x2a0 lib/dump_stack.c:120
     print_address_description mm/kasan/report.c:378 [inline]
     print_report+0x17e/0x800 mm/kasan/report.c:480
     kasan_report+0x147/0x180 mm/kasan/report.c:593
     data_blkaddr fs/f2fs/f2fs.h:3053 [inline]
     f2fs_data_blkaddr fs/f2fs/f2fs.h:3058 [inline]
     f2fs_get_dnode_of_data+0x1a09/0x1c40 fs/f2fs/node.c:855
     f2fs_reserve_block+0x53/0x310 fs/f2fs/data.c:1195
     prepare_write_begin fs/f2fs/data.c:3395 [inline]
     f2fs_write_begin+0xf39/0x2190 fs/f2fs/data.c:3594
     generic_perform_write+0x2c7/0x910 mm/filemap.c:4112
     f2fs_buffered_write_iter fs/f2fs/file.c:4988 [inline]
     f2fs_file_write_iter+0x1ec8/0x2410 fs/f2fs/file.c:5216
     new_sync_write fs/read_write.c:593 [inline]
     vfs_write+0x546/0xa90 fs/read_write.c:686
     ksys_write+0x149/0x250 fs/read_write.c:738
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xf3/0x3d0 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    The root cause is in the corrupted image, there is a dnode has the same
    node id w/ its inode, so during f2fs_get_dnode_of_data(), it tries to
    access block address in dnode at offset 934, however it parses the dnode
    as inode node, so that get_dnode_addr() returns 360, then it tries to
    access page address from 360 + 934 * 4 = 4096 w/ 4 bytes.
    
    To fix this issue, let's add sanity check for node id of all direct nodes
    during f2fs_get_dnode_of_data().
    
    Cc: [email protected]
    Reported-by: Jiaming Zhang <[email protected]>
    Closes: https://groups.google.com/g/syzkaller/c/-ZnaaOOfO3M
    Signed-off-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fbdev: fix potential buffer overflow in do_register_framebuffer() [+ + +]
Author: Yongzhen Zhang <[email protected]>
Date:   Tue Jul 1 17:07:04 2025 +0800

    fbdev: fix potential buffer overflow in do_register_framebuffer()
    
    [ Upstream commit 523b84dc7ccea9c4d79126d6ed1cf9033cf83b05 ]
    
    The current implementation may lead to buffer overflow when:
    1.  Unregistration creates NULL gaps in registered_fb[]
    2.  All array slots become occupied despite num_registered_fb < FB_MAX
    3.  The registration loop exceeds array bounds
    
    Add boundary check to prevent registered_fb[FB_MAX] access.
    
    Signed-off-by: Yongzhen Zhang <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

fbdev: Fix vmalloc out-of-bounds write in fast_imageblit [+ + +]
Author: Sravan Kumar Gundu <[email protected]>
Date:   Thu Jul 31 15:36:18 2025 -0500

    fbdev: Fix vmalloc out-of-bounds write in fast_imageblit
    
    commit af0db3c1f898144846d4c172531a199bb3ca375d upstream.
    
    This issue triggers when a userspace program does an ioctl
    FBIOPUT_CON2FBMAP by passing console number and frame buffer number.
    Ideally this maps console to frame buffer and updates the screen if
    console is visible.
    
    As part of mapping it has to do resize of console according to frame
    buffer info. if this resize fails and returns from vc_do_resize() and
    continues further. At this point console and new frame buffer are mapped
    and sets display vars. Despite failure still it continue to proceed
    updating the screen at later stages where vc_data is related to previous
    frame buffer and frame buffer info and display vars are mapped to new
    frame buffer and eventully leading to out-of-bounds write in
    fast_imageblit(). This bheviour is excepted only when fg_console is
    equal to requested console which is a visible console and updates screen
    with invalid struct references in fbcon_putcs().
    
    Reported-and-tested-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=c4b7aa0513823e2ea880
    Signed-off-by: Sravan Kumar Gundu <[email protected]>
    Cc: [email protected]
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
firmware: tegra: Fix IVC dependency problems [+ + +]
Author: Thierry Reding <[email protected]>
Date:   Tue May 6 15:31:16 2025 +0200

    firmware: tegra: Fix IVC dependency problems
    
    [ Upstream commit 78eb18020a88a4eed15f5af7700ed570642ff8f1 ]
    
    The IVC code is library code that other drivers need to select if they
    need that library. However, if the symbol is user-selectable this can
    lead to conflicts.
    
    Fix this by making the symbol only selectable for COMPILE_TEST and add
    a select TEGRA_IVC to TEGRA_BPMP, which is currently the only user.
    
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Thierry Reding <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Linux: fix locking in efi_secret_unlink() [+ + +]
Author: Al Viro <[email protected]>
Date:   Tue May 14 08:48:58 2024 -0600

    fix locking in efi_secret_unlink()
    
    [ Upstream commit 2c58d42de71f9c73e40afacc9d062892d2cc8862 ]
    
    We used to need securityfs_remove() to undo simple_pin_fs() done when
    the file had been created and to drop the second extra reference
    taken at the same time.  Now that neither is needed (or done by
    securityfs_remove()), we can simply call simple_unlink() and be done
    with that - the broken games with locking had been there only for the
    sake of securityfs_remove().
    
    Signed-off-by: Al Viro <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
fpga: zynq_fpga: Fix the wrong usage of dma_map_sgtable() [+ + +]
Author: Xu Yilun <[email protected]>
Date:   Wed Aug 6 15:06:05 2025 +0800

    fpga: zynq_fpga: Fix the wrong usage of dma_map_sgtable()
    
    commit 1ca61060de92a4320d73adfe5dc8d335653907ac upstream.
    
    dma_map_sgtable() returns only 0 or the error code. Read sgt->nents to
    get the number of mapped segments.
    
    Fixes: 37e00703228a ("zynq_fpga: use sgtable-based scatterlist wrappers")
    Reported-by: Pavel Pisa <[email protected]>
    Closes: https://lore.kernel.org/linux-fpga/[email protected]/
    Reviewed-by: Jason Gunthorpe <[email protected]>
    Reviewed-by: Marek Szyprowski <[email protected]>
    Signed-off-by: Xu Yilun <[email protected]>
    Tested-by: Pavel Pisa <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fs/buffer: fix use-after-free when call bh_read() helper [+ + +]
Author: Ye Bin <[email protected]>
Date:   Mon Aug 11 22:18:30 2025 +0800

    fs/buffer: fix use-after-free when call bh_read() helper
    
    [ Upstream commit 7375f22495e7cd1c5b3b5af9dcc4f6dffe34ce49 ]
    
    There's issue as follows:
    BUG: KASAN: stack-out-of-bounds in end_buffer_read_sync+0xe3/0x110
    Read of size 8 at addr ffffc9000168f7f8 by task swapper/3/0
    CPU: 3 UID: 0 PID: 0 Comm: swapper/3 Not tainted 6.16.0-862.14.0.6.x86_64
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996)
    Call Trace:
     <IRQ>
     dump_stack_lvl+0x55/0x70
     print_address_description.constprop.0+0x2c/0x390
     print_report+0xb4/0x270
     kasan_report+0xb8/0xf0
     end_buffer_read_sync+0xe3/0x110
     end_bio_bh_io_sync+0x56/0x80
     blk_update_request+0x30a/0x720
     scsi_end_request+0x51/0x2b0
     scsi_io_completion+0xe3/0x480
     ? scsi_device_unbusy+0x11e/0x160
     blk_complete_reqs+0x7b/0x90
     handle_softirqs+0xef/0x370
     irq_exit_rcu+0xa5/0xd0
     sysvec_apic_timer_interrupt+0x6e/0x90
     </IRQ>
    
     Above issue happens when do ntfs3 filesystem mount, issue may happens
     as follows:
               mount                            IRQ
    ntfs_fill_super
      read_cache_page
        do_read_cache_folio
          filemap_read_folio
            mpage_read_folio
             do_mpage_readpage
              ntfs_get_block_vbo
               bh_read
                 submit_bh
                 wait_on_buffer(bh);
                                        blk_complete_reqs
                                         scsi_io_completion
                                          scsi_end_request
                                           blk_update_request
                                            end_bio_bh_io_sync
                                             end_buffer_read_sync
                                              __end_buffer_read_notouch
                                               unlock_buffer
    
                wait_on_buffer(bh);--> return will return to caller
    
                                              put_bh
                                                --> trigger stack-out-of-bounds
    In the mpage_read_folio() function, the stack variable 'map_bh' is
    passed to ntfs_get_block_vbo(). Once unlock_buffer() unlocks and
    wait_on_buffer() returns to continue processing, the stack variable
    is likely to be reclaimed. Consequently, during the end_buffer_read_sync()
    process, calling put_bh() may result in stack overrun.
    
    If the bh is not allocated on the stack, it belongs to a folio.  Freeing
    a buffer head which belongs to a folio is done by drop_buffers() which
    will fail to free buffers which are still locked.  So it is safe to call
    put_bh() before __end_buffer_read_notouch().
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Ye Bin <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Reviewed-by: Matthew Wilcox (Oracle) <[email protected]>
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
fs/ntfs3: Add sanity check for file name [+ + +]
Author: Lizhi Xu <[email protected]>
Date:   Fri Jun 6 13:16:16 2025 +0800

    fs/ntfs3: Add sanity check for file name
    
    [ Upstream commit e841ecb139339602bc1853f5f09daa5d1ea920a2 ]
    
    The length of the file name should be smaller than the directory entry size.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=598057afa0f49e62bd23
    Signed-off-by: Lizhi Xu <[email protected]>
    Signed-off-by: Konstantin Komarov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

fs/ntfs3: correctly create symlink for relative path [+ + +]
Author: Rong Zhang <[email protected]>
Date:   Wed May 7 15:35:34 2025 +0800

    fs/ntfs3: correctly create symlink for relative path
    
    [ Upstream commit b1e9d89408f402858c00103f9831b25ffa0994d3 ]
    
    After applying this patch, could correctly create symlink:
    
    ln -s "relative/path/to/file" symlink
    
    Signed-off-by: Rong Zhang <[email protected]>
    [[email protected]: added cpu_to_le32 macro to
    rs->Flags assignment]
    Signed-off-by: Konstantin Komarov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
fs/orangefs: use snprintf() instead of sprintf() [+ + +]
Author: Amir Mohammad Jahangirzad <[email protected]>
Date:   Sun Jun 8 20:05:59 2025 +0330

    fs/orangefs: use snprintf() instead of sprintf()
    
    [ Upstream commit cdfa1304657d6f23be8fd2bb0516380a3c89034e ]
    
    sprintf() is discouraged for use with bounded destination buffers
    as it does not prevent buffer overflows when the formatted output
    exceeds the destination buffer size. snprintf() is a safer
    alternative as it limits the number of bytes written and ensures
    NUL-termination.
    
    Replace sprintf() with snprintf() for copying the debug string
    into a temporary buffer, using ORANGEFS_MAX_DEBUG_STRING_LEN as
    the maximum size to ensure safe formatting and prevent memory
    corruption in edge cases.
    
    EDIT: After this patch sat on linux-next for a few days, Dan
    Carpenter saw it and suggested that I use scnprintf instead of
    snprintf. I made the change and retested.
    
    Signed-off-by: Amir Mohammad Jahangirzad <[email protected]>
    Signed-off-by: Mike Marshall <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
fs: Prevent file descriptor table allocations exceeding INT_MAX [+ + +]
Author: Sasha Levin <[email protected]>
Date:   Sun Jun 29 03:40:21 2025 -0400

    fs: Prevent file descriptor table allocations exceeding INT_MAX
    
    commit 04a2c4b4511d186b0fce685da21085a5d4acd370 upstream.
    
    When sysctl_nr_open is set to a very high value (for example, 1073741816
    as set by systemd), processes attempting to use file descriptors near
    the limit can trigger massive memory allocation attempts that exceed
    INT_MAX, resulting in a WARNING in mm/slub.c:
    
      WARNING: CPU: 0 PID: 44 at mm/slub.c:5027 __kvmalloc_node_noprof+0x21a/0x288
    
    This happens because kvmalloc_array() and kvmalloc() check if the
    requested size exceeds INT_MAX and emit a warning when the allocation is
    not flagged with __GFP_NOWARN.
    
    Specifically, when nr_open is set to 1073741816 (0x3ffffff8) and a
    process calls dup2(oldfd, 1073741880), the kernel attempts to allocate:
    - File descriptor array: 1073741880 * 8 bytes = 8,589,935,040 bytes
    - Multiple bitmaps: ~400MB
    - Total allocation size: > 8GB (exceeding INT_MAX = 2,147,483,647)
    
    Reproducer:
    1. Set /proc/sys/fs/nr_open to 1073741816:
       # echo 1073741816 > /proc/sys/fs/nr_open
    
    2. Run a program that uses a high file descriptor:
       #include <unistd.h>
       #include <sys/resource.h>
    
       int main() {
           struct rlimit rlim = {1073741824, 1073741824};
           setrlimit(RLIMIT_NOFILE, &rlim);
           dup2(2, 1073741880);  // Triggers the warning
           return 0;
       }
    
    3. Observe WARNING in dmesg at mm/slub.c:5027
    
    systemd commit a8b627a introduced automatic bumping of fs.nr_open to the
    maximum possible value. The rationale was that systems with memory
    control groups (memcg) no longer need separate file descriptor limits
    since memory is properly accounted. However, this change overlooked
    that:
    
    1. The kernel's allocation functions still enforce INT_MAX as a maximum
       size regardless of memcg accounting
    2. Programs and tests that legitimately test file descriptor limits can
       inadvertently trigger massive allocations
    3. The resulting allocations (>8GB) are impractical and will always fail
    
    systemd's algorithm starts with INT_MAX and keeps halving the value
    until the kernel accepts it. On most systems, this results in nr_open
    being set to 1073741816 (0x3ffffff8), which is just under 1GB of file
    descriptors.
    
    While processes rarely use file descriptors near this limit in normal
    operation, certain selftests (like
    tools/testing/selftests/core/unshare_test.c) and programs that test file
    descriptor limits can trigger this issue.
    
    Fix this by adding a check in alloc_fdtable() to ensure the requested
    allocation size does not exceed INT_MAX. This causes the operation to
    fail with -EMFILE instead of triggering a kernel warning and avoids the
    impractical >8GB memory allocation request.
    
    Fixes: 9cfe015aa424 ("get rid of NR_OPEN and introduce a sysctl_nr_open")
    Cc: [email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fscrypt: Don't use problematic non-inline crypto engines [+ + +]
Author: Eric Biggers <[email protected]>
Date:   Fri Aug 15 17:14:21 2025 -0400

    fscrypt: Don't use problematic non-inline crypto engines
    
    [ Upstream commit b41c1d8d07906786c60893980d52688f31d114a6 ]
    
    Make fscrypt no longer use Crypto API drivers for non-inline crypto
    engines, even when the Crypto API prioritizes them over CPU-based code
    (which unfortunately it often does).  These drivers tend to be really
    problematic, especially for fscrypt's workload.  This commit has no
    effect on inline crypto engines, which are different and do work well.
    
    Specifically, exclude drivers that have CRYPTO_ALG_KERN_DRIVER_ONLY or
    CRYPTO_ALG_ALLOCATES_MEMORY set.  (Later, CRYPTO_ALG_ASYNC should be
    excluded too.  That's omitted for now to keep this commit backportable,
    since until recently some CPU-based code had CRYPTO_ALG_ASYNC set.)
    
    There are two major issues with these drivers: bugs and performance.
    
    First, these drivers tend to be buggy.  They're fundamentally much more
    error-prone and harder to test than the CPU-based code.  They often
    don't get tested before kernel releases, and even if they do, the crypto
    self-tests don't properly test these drivers.  Released drivers have
    en/decrypted or hashed data incorrectly.  These bugs cause issues for
    fscrypt users who often didn't even want to use these drivers, e.g.:
    
    - https://github.com/google/fscryptctl/issues/32
    - https://github.com/google/fscryptctl/issues/9
    - https://lore.kernel.org/r/PH0PR02MB731916ECDB6C613665863B6CFFAA2@PH0PR02MB7319.namprd02.prod.outlook.com
    
    These drivers have also similarly caused issues for dm-crypt users,
    including data corruption and deadlocks.  Since Linux v5.10, dm-crypt
    has disabled most of them by excluding CRYPTO_ALG_ALLOCATES_MEMORY.
    
    Second, these drivers tend to be *much* slower than the CPU-based code.
    This may seem counterintuitive, but benchmarks clearly show it.  There's
    a *lot* of overhead associated with going to a hardware driver, off the
    CPU, and back again.  To prove this, I gathered as many systems with
    this type of crypto engine as I could, and I measured synchronous
    encryption of 4096-byte messages (which matches fscrypt's workload):
    
    Intel Emerald Rapids server:
       AES-256-XTS:
          xts-aes-vaes-avx512   16171 MB/s  [CPU-based, Vector AES]
          qat_aes_xts             289 MB/s  [Offload, Intel QuickAssist]
    
    Qualcomm SM8650 HDK:
       AES-256-XTS:
          xts-aes-ce             4301 MB/s  [CPU-based, ARMv8 Crypto Extensions]
          xts-aes-qce              73 MB/s  [Offload, Qualcomm Crypto Engine]
    
    i.MX 8M Nano LPDDR4 EVK:
       AES-256-XTS:
          xts-aes-ce              647 MB/s   [CPU-based, ARMv8 Crypto Extensions]
          xts(ecb-aes-caam)        20 MB/s   [Offload, CAAM]
       AES-128-CBC-ESSIV:
          essiv(cbc-aes-caam,sha256-lib) 23 MB/s   [Offload, CAAM]
    
    STM32MP157F-DK2:
       AES-256-XTS:
          xts-aes-neonbs         13.2 MB/s   [CPU-based, ARM NEON]
          xts(stm32-ecb-aes)     3.1 MB/s    [Offload, STM32 crypto engine]
       AES-128-CBC-ESSIV:
          essiv(cbc-aes-neonbs,sha256-lib)
                                 14.7 MB/s   [CPU-based, ARM NEON]
          essiv(stm32-cbc-aes,sha256-lib)
                                 3.2 MB/s    [Offload, STM32 crypto engine]
       Adiantum:
          adiantum(xchacha12-arm,aes-arm,nhpoly1305-neon)
                                 52.8 MB/s   [CPU-based, ARM scalar + NEON]
    
    So, there was no case in which the crypto engine was even *close* to
    being faster.  On the first three, which have AES instructions in the
    CPU, the CPU was 30 to 55 times faster (!).  Even on STM32MP157F-DK2
    which has a Cortex-A7 CPU that doesn't have AES instructions, AES was
    over 4 times faster on the CPU.  And Adiantum encryption, which is what
    actually should be used on CPUs like that, was over 17 times faster.
    
    Other justifications that have been given for these non-inline crypto
    engines (almost always coming from the hardware vendors, not actual
    users) don't seem very plausible either:
    
      - The crypto engine throughput could be improved by processing
        multiple requests concurrently.  Currently irrelevant to fscrypt,
        since it doesn't do that.  This would also be complex, and unhelpful
        in many cases.  2 of the 4 engines I tested even had only one queue.
    
      - Some of the engines, e.g. STM32, support hardware keys.  Also
        currently irrelevant to fscrypt, since it doesn't support these.
        Interestingly, the STM32 driver itself doesn't support this either.
    
      - Free up CPU for other tasks and/or reduce energy usage.  Not very
        plausible considering the "short" message length, driver overhead,
        and scheduling overhead.  There's just very little time for the CPU
        to do something else like run another task or enter low-power state,
        before the message finishes and it's time to process the next one.
    
      - Some of these engines resist power analysis and electromagnetic
        attacks, while the CPU-based crypto generally does not.  In theory,
        this sounds great.  In practice, if this benefit requires the use of
        an off-CPU offload that massively regresses performance and has a
        low-quality, buggy driver, the price for this hardening (which is
        not relevant to most fscrypt users, and tends to be incomplete) is
        just too high.  Inline crypto engines are much more promising here,
        as are on-CPU solutions like RISC-V High Assurance Cryptography.
    
    Fixes: b30ab0e03407 ("ext4 crypto: add ext4 encryption facilities")
    Cc: [email protected]
    Acked-by: Ard Biesheuvel <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Eric Biggers <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ftrace: Also allocate and copy hash for reading of filter files [+ + +]
Author: Steven Rostedt <[email protected]>
Date:   Fri Aug 22 18:36:06 2025 -0400

    ftrace: Also allocate and copy hash for reading of filter files
    
    commit bfb336cf97df7b37b2b2edec0f69773e06d11955 upstream.
    
    Currently the reader of set_ftrace_filter and set_ftrace_notrace just adds
    the pointer to the global tracer hash to its iterator. Unlike the writer
    that allocates a copy of the hash, the reader keeps the pointer to the
    filter hashes. This is problematic because this pointer is static across
    function calls that release the locks that can update the global tracer
    hashes. This can cause UAF and similar bugs.
    
    Allocate and copy the hash for reading the filter files like it is done
    for the writers. This not only fixes UAF bugs, but also makes the code a
    bit simpler as it doesn't have to differentiate when to free the
    iterator's hash between writers and readers.
    
    Cc: [email protected]
    Cc: Masami Hiramatsu <[email protected]>
    Cc: Mathieu Desnoyers <[email protected]>
    Cc: Nathan Chancellor <[email protected]>
    Cc: Linus Torvalds <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Fixes: c20489dad156 ("ftrace: Assign iter->hash to filter or notrace hashes on seq read")
    Closes: https://lore.kernel.org/all/[email protected]/
    Closes: https://lore.kernel.org/all/20250822192437.GA458494@ax162/
    Reported-by: Tengda Wu <[email protected]>
    Tested-by: Tengda Wu <[email protected]>
    Tested-by: Nathan Chancellor <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
gfs2: Set .migrate_folio in gfs2_{rgrp,meta}_aops [+ + +]
Author: Andrew Price <[email protected]>
Date:   Mon Jul 14 16:21:15 2025 +0100

    gfs2: Set .migrate_folio in gfs2_{rgrp,meta}_aops
    
    [ Upstream commit 5c8f12cf1e64e0e8e6cb80b0c935389973e8be8d ]
    
    Clears up the warning added in 7ee3647243e5 ("migrate: Remove call to
    ->writepage") that occurs in various xfstests, causing "something found
    in dmesg" failures.
    
    [  341.136573] gfs2_meta_aops does not implement migrate_folio
    [  341.136953] WARNING: CPU: 1 PID: 36 at mm/migrate.c:944 move_to_new_folio+0x2f8/0x300
    
    Signed-off-by: Andrew Price <[email protected]>
    Signed-off-by: Andreas Gruenbacher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
gpio: mlxbf2: use platform_get_irq_optional() [+ + +]
Author: David Thompson <[email protected]>
Date:   Mon Jul 28 10:46:19 2025 -0400

    gpio: mlxbf2: use platform_get_irq_optional()
    
    commit 63c7bc53a35e785accdc2ceab8f72d94501931ab upstream.
    
    The gpio-mlxbf2 driver interfaces with four GPIO controllers,
    device instances 0-3. There are two IRQ resources shared between
    the four controllers, and they are found in the ACPI table for
    instances 0 and 3. The driver should not use platform_get_irq(),
    otherwise this error is logged when probing instances 1 and 2:
      mlxbf2_gpio MLNXBF22:01: error -ENXIO: IRQ index 0 not found
    
    Fixes: 2b725265cb08 ("gpio: mlxbf2: Introduce IRQ support")
    Cc: [email protected]
    Signed-off-by: David Thompson <[email protected]>
    Reviewed-by: Shravan Kumar Ramani <[email protected]>
    Reviewed-by: Mika Westerberg <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

gpio: mlxbf3: use platform_get_irq_optional() [+ + +]
Author: David Thompson <[email protected]>
Date:   Mon Aug 11 13:50:45 2025 -0400

    gpio: mlxbf3: use platform_get_irq_optional()
    
    commit 810bd9066fb1871b8a9528f31f2fdbf2a8b73bf2 upstream.
    
    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 use platform_get_irq(),
    otherwise this error is logged when probing instance 1:
        mlxbf3_gpio MLNXBF33:01: error -ENXIO: IRQ index 0 not found
    
    Cc: [email protected]
    Fixes: cd33f216d241 ("gpio: mlxbf3: Add gpio driver support")
    Signed-off-by: David Thompson <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Link: https://lore.kernel.org/r/ce70b98a201ce82b9df9aa80ac7a5eeaa2268e52.1754928650.git.davthompson@nvidia.com
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

gpio: tps65912: check the return value of regmap_update_bits() [+ + +]
Author: Bartosz Golaszewski <[email protected]>
Date:   Mon Jul 7 09:50:15 2025 +0200

    gpio: tps65912: check the return value of regmap_update_bits()
    
    [ Upstream commit a0b2a6bbff8c26aafdecd320f38f52c341d5cafa ]
    
    regmap_update_bits() can fail, check its return value like we do
    elsewhere in the driver.
    
    Link: https://lore.kernel.org/r/20250707-gpiochip-set-rv-gpio-round4-v1-2-35668aaaf6d2@linaro.org
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

gpio: virtio: Fix config space reading. [+ + +]
Author: Harald Mommer <[email protected]>
Date:   Thu Jul 24 16:36:53 2025 +0200

    gpio: virtio: Fix config space reading.
    
    commit 4740e1e2f320061c2f0dbadc0dd3dfb58df986d5 upstream.
    
    Quote from the virtio specification chapter 4.2.2.2:
    
    "For the device-specific configuration space, the driver MUST use 8 bit
    wide accesses for 8 bit wide fields, 16 bit wide and aligned accesses
    for 16 bit wide fields and 32 bit wide and aligned accesses for 32 and
    64 bit wide fields."
    
    Signed-off-by: Harald Mommer <[email protected]>
    Cc: [email protected]
    Fixes: 3a29355a22c0 ("gpio: Add virtio-gpio driver")
    Acked-by: Viresh Kumar <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

gpio: wcd934x: check the return value of regmap_update_bits() [+ + +]
Author: Bartosz Golaszewski <[email protected]>
Date:   Wed Jul 9 08:41:39 2025 +0200

    gpio: wcd934x: check the return value of regmap_update_bits()
    
    [ Upstream commit ff0f0d7c6587e38c308be9905e36f86e98fb9c1f ]
    
    regmap_update_bits() can fail so check its return value in
    wcd_gpio_direction_output() for consistency with the rest of the code
    and propagate any errors.
    
    Link: https://lore.kernel.org/r/20250709-gpiochip-set-rv-gpio-remaining-v1-2-b8950f69618d@linaro.org
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
gve: prevent ethtool ops after shutdown [+ + +]
Author: Jordan Rhee <[email protected]>
Date:   Mon Aug 18 14:12:45 2025 -0700

    gve: prevent ethtool ops after shutdown
    
    [ Upstream commit 75a9a46d67f46d608205888f9b34e315c1786345 ]
    
    A crash can occur if an ethtool operation is invoked
    after shutdown() is called.
    
    shutdown() is invoked during system shutdown to stop DMA operations
    without performing expensive deallocations. It is discouraged to
    unregister the netdev in this path, so the device may still be visible
    to userspace and kernel helpers.
    
    In gve, shutdown() tears down most internal data structures. If an
    ethtool operation is dispatched after shutdown(), it will dereference
    freed or NULL pointers, leading to a kernel panic. While graceful
    shutdown normally quiesces userspace before invoking the reboot
    syscall, forced shutdowns (as observed on GCP VMs) can still trigger
    this path.
    
    Fix by calling netif_device_detach() in shutdown().
    This marks the device as detached so the ethtool ioctl handler
    will skip dispatching operations to the driver.
    
    Fixes: 974365e51861 ("gve: Implement suspend/resume/shutdown")
    Signed-off-by: Jordan Rhee <[email protected]>
    Signed-off-by: Jeroen de Borst <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

gve: Return error for unknown admin queue command [+ + +]
Author: Alok Tiwari <[email protected]>
Date:   Sun Jun 15 22:45:01 2025 -0700

    gve: Return error for unknown admin queue command
    
    [ Upstream commit b11344f63fdd9e8c5121148a6965b41079071dd2 ]
    
    In gve_adminq_issue_cmd(), return -EINVAL instead of 0 when an unknown
    admin queue command opcode is encountered.
    
    This prevents the function from silently succeeding on invalid input
    and prevents undefined behavior by ensuring the function fails gracefully
    when an unrecognized opcode is provided.
    
    These changes improve error handling.
    
    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]>

 
hfs: fix general protection fault in hfs_find_init() [+ + +]
Author: Viacheslav Dubeyko <[email protected]>
Date:   Thu Jul 10 14:36:57 2025 -0700

    hfs: fix general protection fault in hfs_find_init()
    
    [ Upstream commit 736a0516a16268995f4898eded49bfef077af709 ]
    
    The hfs_find_init() method can trigger the crash
    if tree pointer is NULL:
    
    [   45.746290][ T9787] Oops: general protection fault, probably for non-canonical address 0xdffffc0000000008: 0000 [#1] SMP KAI
    [   45.747287][ T9787] KASAN: null-ptr-deref in range [0x0000000000000040-0x0000000000000047]
    [   45.748716][ T9787] CPU: 2 UID: 0 PID: 9787 Comm: repro Not tainted 6.16.0-rc3 #10 PREEMPT(full)
    [   45.750250][ T9787] Hardware name: QEMU Ubuntu 24.04 PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    [   45.751983][ T9787] RIP: 0010:hfs_find_init+0x86/0x230
    [   45.752834][ T9787] Code: c1 ea 03 80 3c 02 00 0f 85 9a 01 00 00 4c 8d 6b 40 48 c7 45 18 00 00 00 00 48 b8 00 00 00 00 00 fc
    [   45.755574][ T9787] RSP: 0018:ffffc90015157668 EFLAGS: 00010202
    [   45.756432][ T9787] RAX: dffffc0000000000 RBX: 0000000000000000 RCX: ffffffff819a4d09
    [   45.757457][ T9787] RDX: 0000000000000008 RSI: ffffffff819acd3a RDI: ffffc900151576e8
    [   45.758282][ T9787] RBP: ffffc900151576d0 R08: 0000000000000005 R09: 0000000000000000
    [   45.758943][ T9787] R10: 0000000080000000 R11: 0000000000000001 R12: 0000000000000004
    [   45.759619][ T9787] R13: 0000000000000040 R14: ffff88802c50814a R15: 0000000000000000
    [   45.760293][ T9787] FS:  00007ffb72734540(0000) GS:ffff8880cec64000(0000) knlGS:0000000000000000
    [   45.761050][ T9787] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   45.761606][ T9787] CR2: 00007f9bd8225000 CR3: 000000010979a000 CR4: 00000000000006f0
    [   45.762286][ T9787] Call Trace:
    [   45.762570][ T9787]  <TASK>
    [   45.762824][ T9787]  hfs_ext_read_extent+0x190/0x9d0
    [   45.763269][ T9787]  ? submit_bio_noacct_nocheck+0x2dd/0xce0
    [   45.763766][ T9787]  ? __pfx_hfs_ext_read_extent+0x10/0x10
    [   45.764250][ T9787]  hfs_get_block+0x55f/0x830
    [   45.764646][ T9787]  block_read_full_folio+0x36d/0x850
    [   45.765105][ T9787]  ? __pfx_hfs_get_block+0x10/0x10
    [   45.765541][ T9787]  ? const_folio_flags+0x5b/0x100
    [   45.765972][ T9787]  ? __pfx_hfs_read_folio+0x10/0x10
    [   45.766415][ T9787]  filemap_read_folio+0xbe/0x290
    [   45.766840][ T9787]  ? __pfx_filemap_read_folio+0x10/0x10
    [   45.767325][ T9787]  ? __filemap_get_folio+0x32b/0xbf0
    [   45.767780][ T9787]  do_read_cache_folio+0x263/0x5c0
    [   45.768223][ T9787]  ? __pfx_hfs_read_folio+0x10/0x10
    [   45.768666][ T9787]  read_cache_page+0x5b/0x160
    [   45.769070][ T9787]  hfs_btree_open+0x491/0x1740
    [   45.769481][ T9787]  hfs_mdb_get+0x15e2/0x1fb0
    [   45.769877][ T9787]  ? __pfx_hfs_mdb_get+0x10/0x10
    [   45.770316][ T9787]  ? find_held_lock+0x2b/0x80
    [   45.770731][ T9787]  ? lockdep_init_map_type+0x5c/0x280
    [   45.771200][ T9787]  ? lockdep_init_map_type+0x5c/0x280
    [   45.771674][ T9787]  hfs_fill_super+0x38e/0x720
    [   45.772092][ T9787]  ? __pfx_hfs_fill_super+0x10/0x10
    [   45.772549][ T9787]  ? snprintf+0xbe/0x100
    [   45.772931][ T9787]  ? __pfx_snprintf+0x10/0x10
    [   45.773350][ T9787]  ? do_raw_spin_lock+0x129/0x2b0
    [   45.773796][ T9787]  ? find_held_lock+0x2b/0x80
    [   45.774215][ T9787]  ? set_blocksize+0x40a/0x510
    [   45.774636][ T9787]  ? sb_set_blocksize+0x176/0x1d0
    [   45.775087][ T9787]  ? setup_bdev_super+0x369/0x730
    [   45.775533][ T9787]  get_tree_bdev_flags+0x384/0x620
    [   45.775985][ T9787]  ? __pfx_hfs_fill_super+0x10/0x10
    [   45.776453][ T9787]  ? __pfx_get_tree_bdev_flags+0x10/0x10
    [   45.776950][ T9787]  ? bpf_lsm_capable+0x9/0x10
    [   45.777365][ T9787]  ? security_capable+0x80/0x260
    [   45.777803][ T9787]  vfs_get_tree+0x8e/0x340
    [   45.778203][ T9787]  path_mount+0x13de/0x2010
    [   45.778604][ T9787]  ? kmem_cache_free+0x2b0/0x4c0
    [   45.779052][ T9787]  ? __pfx_path_mount+0x10/0x10
    [   45.779480][ T9787]  ? getname_flags.part.0+0x1c5/0x550
    [   45.779954][ T9787]  ? putname+0x154/0x1a0
    [   45.780335][ T9787]  __x64_sys_mount+0x27b/0x300
    [   45.780758][ T9787]  ? __pfx___x64_sys_mount+0x10/0x10
    [   45.781232][ T9787]  do_syscall_64+0xc9/0x480
    [   45.781631][ T9787]  entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [   45.782149][ T9787] RIP: 0033:0x7ffb7265b6ca
    [   45.782539][ T9787] Code: 48 8b 0d c9 17 0d 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48
    [   45.784212][ T9787] RSP: 002b:00007ffc0c10cfb8 EFLAGS: 00000206 ORIG_RAX: 00000000000000a5
    [   45.784935][ T9787] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007ffb7265b6ca
    [   45.785626][ T9787] RDX: 0000200000000240 RSI: 0000200000000280 RDI: 00007ffc0c10d100
    [   45.786316][ T9787] RBP: 00007ffc0c10d190 R08: 00007ffc0c10d000 R09: 0000000000000000
    [   45.787011][ T9787] R10: 0000000000000048 R11: 0000000000000206 R12: 0000560246733250
    [   45.787697][ T9787] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
    [   45.788393][ T9787]  </TASK>
    [   45.788665][ T9787] Modules linked in:
    [   45.789058][ T9787] ---[ end trace 0000000000000000 ]---
    [   45.789554][ T9787] RIP: 0010:hfs_find_init+0x86/0x230
    [   45.790028][ T9787] Code: c1 ea 03 80 3c 02 00 0f 85 9a 01 00 00 4c 8d 6b 40 48 c7 45 18 00 00 00 00 48 b8 00 00 00 00 00 fc
    [   45.792364][ T9787] RSP: 0018:ffffc90015157668 EFLAGS: 00010202
    [   45.793155][ T9787] RAX: dffffc0000000000 RBX: 0000000000000000 RCX: ffffffff819a4d09
    [   45.794123][ T9787] RDX: 0000000000000008 RSI: ffffffff819acd3a RDI: ffffc900151576e8
    [   45.795105][ T9787] RBP: ffffc900151576d0 R08: 0000000000000005 R09: 0000000000000000
    [   45.796135][ T9787] R10: 0000000080000000 R11: 0000000000000001 R12: 0000000000000004
    [   45.797114][ T9787] R13: 0000000000000040 R14: ffff88802c50814a R15: 0000000000000000
    [   45.798024][ T9787] FS:  00007ffb72734540(0000) GS:ffff8880cec64000(0000) knlGS:0000000000000000
    [   45.799019][ T9787] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   45.799822][ T9787] CR2: 00007f9bd8225000 CR3: 000000010979a000 CR4: 00000000000006f0
    [   45.800747][ T9787] Kernel panic - not syncing: Fatal exception
    
    The hfs_fill_super() calls hfs_mdb_get() method that tries
    to construct Extents Tree and Catalog Tree:
    
    HFS_SB(sb)->ext_tree = hfs_btree_open(sb, HFS_EXT_CNID, hfs_ext_keycmp);
    if (!HFS_SB(sb)->ext_tree) {
            pr_err("unable to open extent tree\n");
            goto out;
    }
    HFS_SB(sb)->cat_tree = hfs_btree_open(sb, HFS_CAT_CNID, hfs_cat_keycmp);
    if (!HFS_SB(sb)->cat_tree) {
            pr_err("unable to open catalog tree\n");
            goto out;
    }
    
    However, hfs_btree_open() calls read_mapping_page() that
    calls hfs_get_block(). And this method calls hfs_ext_read_extent():
    
    static int hfs_ext_read_extent(struct inode *inode, u16 block)
    {
            struct hfs_find_data fd;
            int res;
    
            if (block >= HFS_I(inode)->cached_start &&
                block < HFS_I(inode)->cached_start + HFS_I(inode)->cached_blocks)
                    return 0;
    
            res = hfs_find_init(HFS_SB(inode->i_sb)->ext_tree, &fd);
            if (!res) {
                    res = __hfs_ext_cache_extent(&fd, inode, block);
                    hfs_find_exit(&fd);
            }
            return res;
    }
    
    The problem here that hfs_find_init() is trying to use
    HFS_SB(inode->i_sb)->ext_tree that is not initialized yet.
    It will be initailized when hfs_btree_open() finishes
    the execution.
    
    The patch adds checking of tree pointer in hfs_find_init()
    and it reworks the logic of hfs_btree_open() by reading
    the b-tree's header directly from the volume. The read_mapping_page()
    is exchanged on filemap_grab_folio() that grab the folio from
    mapping. Then, sb_bread() extracts the b-tree's header
    content and copy it into the folio.
    
    Reported-by: Wenzhi Wang <[email protected]>
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    cc: John Paul Adrian Glaubitz <[email protected]>
    cc: Yangtao Li <[email protected]>
    cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

hfs: fix not erasing deleted b-tree node issue [+ + +]
Author: Viacheslav Dubeyko <[email protected]>
Date:   Tue Apr 29 17:12:11 2025 -0700

    hfs: fix not erasing deleted b-tree node issue
    
    [ Upstream commit d3ed6d6981f4756f145766753c872482bc3b28d3 ]
    
    The generic/001 test of xfstests suite fails and corrupts
    the HFS volume:
    
    sudo ./check generic/001
    FSTYP         -- hfs
    PLATFORM      -- Linux/x86_64 hfsplus-testing-0001 6.15.0-rc2+ #3 SMP PREEMPT_DYNAMIC Fri Apr 25 17:13:00 PDT 2>
    MKFS_OPTIONS  -- /dev/loop51
    MOUNT_OPTIONS -- /dev/loop51 /mnt/scratch
    
    generic/001 32s ... _check_generic_filesystem: filesystem on /dev/loop50 is inconsistent
    (see /home/slavad/XFSTESTS-2/xfstests-dev/results//generic/001.full for details)
    
    Ran: generic/001
    Failures: generic/001
    Failed 1 of 1 tests
    
    fsck.hfs -d -n ./test-image.bin
    ** ./test-image.bin (NO WRITE)
            Using cacheBlockSize=32K cacheTotalBlock=1024 cacheSize=32768K.
       Executing fsck_hfs (version 540.1-Linux).
    ** Checking HFS volume.
       The volume name is untitled
    ** Checking extents overflow file.
    ** Checking catalog file.
       Unused node is not erased (node = 2)
       Unused node is not erased (node = 4)
    <skipped>
       Unused node is not erased (node = 253)
       Unused node is not erased (node = 254)
       Unused node is not erased (node = 255)
       Unused node is not erased (node = 256)
    ** Checking catalog hierarchy.
    ** Checking volume bitmap.
    ** Checking volume information.
       Verify Status: VIStat = 0x0000, ABTStat = 0x0000 EBTStat = 0x0000
                      CBTStat = 0x0004 CatStat = 0x00000000
    ** The volume untitled was found corrupt and needs to be repaired.
            volume type is HFS
            primary MDB is at block 2 0x02
            alternate MDB is at block 20971518 0x13ffffe
            primary VHB is at block 0 0x00
            alternate VHB is at block 0 0x00
            sector size = 512 0x200
            VolumeObject flags = 0x19
            total sectors for volume = 20971520 0x1400000
            total sectors for embedded volume = 0 0x00
    
    This patch adds logic of clearing the deleted b-tree node.
    
    sudo ./check generic/001
    FSTYP         -- hfs
    PLATFORM      -- Linux/x86_64 hfsplus-testing-0001 6.15.0-rc2+ #3 SMP PREEMPT_DYNAMIC Fri Apr 25 17:13:00 PDT 2025
    MKFS_OPTIONS  -- /dev/loop51
    MOUNT_OPTIONS -- /dev/loop51 /mnt/scratch
    
    generic/001 9s ...  32s
    Ran: generic/001
    Passed all 1 tests
    
    fsck.hfs -d -n ./test-image.bin
    ** ./test-image.bin (NO WRITE)
            Using cacheBlockSize=32K cacheTotalBlock=1024 cacheSize=32768K.
       Executing fsck_hfs (version 540.1-Linux).
    ** Checking HFS volume.
       The volume name is untitled
    ** Checking extents overflow file.
    ** Checking catalog file.
    ** Checking catalog hierarchy.
    ** Checking volume bitmap.
    ** Checking volume information.
    ** The volume untitled appears to be OK.
    
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

hfs: fix slab-out-of-bounds in hfs_bnode_read() [+ + +]
Author: Viacheslav Dubeyko <[email protected]>
Date:   Thu Jul 3 14:49:12 2025 -0700

    hfs: fix slab-out-of-bounds in hfs_bnode_read()
    
    [ Upstream commit a431930c9bac518bf99d6b1da526a7f37ddee8d8 ]
    
    This patch introduces is_bnode_offset_valid() method that checks
    the requested offset value. Also, it introduces
    check_and_correct_requested_length() method that checks and
    correct the requested length (if it is necessary). These methods
    are used in hfs_bnode_read(), hfs_bnode_write(), hfs_bnode_clear(),
    hfs_bnode_copy(), and hfs_bnode_move() with the goal to prevent
    the access out of allocated memory and triggering the crash.
    
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
hfsplus: don't use BUG_ON() in hfsplus_create_attributes_file() [+ + +]
Author: Tetsuo Handa <[email protected]>
Date:   Tue Jul 15 14:17:56 2025 +0900

    hfsplus: don't use BUG_ON() in hfsplus_create_attributes_file()
    
    [ Upstream commit c7c6363ca186747ebc2df10c8a1a51e66e0e32d9 ]
    
    When the volume header contains erroneous values that do not reflect
    the actual state of the filesystem, hfsplus_fill_super() assumes that
    the attributes file is not yet created, which later results in hitting
    BUG_ON() when hfsplus_create_attributes_file() is called. Replace this
    BUG_ON() with -EIO error with a message to suggest running fsck tool.
    
    Reported-by: syzbot <[email protected]>
    Closes: https://syzkaller.appspot.com/bug?extid=1107451c16b9eb9d29e6
    Signed-off-by: Tetsuo Handa <[email protected]>
    Reviewed-by: Viacheslav Dubeyko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

hfsplus: fix slab-out-of-bounds in hfsplus_bnode_read() [+ + +]
Author: Viacheslav Dubeyko <[email protected]>
Date:   Thu Jul 3 14:48:04 2025 -0700

    hfsplus: fix slab-out-of-bounds in hfsplus_bnode_read()
    
    [ Upstream commit c80aa2aaaa5e69d5219c6af8ef7e754114bd08d2 ]
    
    The hfsplus_bnode_read() method can trigger the issue:
    
    [  174.852007][ T9784] ==================================================================
    [  174.852709][ T9784] BUG: KASAN: slab-out-of-bounds in hfsplus_bnode_read+0x2f4/0x360
    [  174.853412][ T9784] Read of size 8 at addr ffff88810b5fc6c0 by task repro/9784
    [  174.854059][ T9784]
    [  174.854272][ T9784] CPU: 1 UID: 0 PID: 9784 Comm: repro Not tainted 6.16.0-rc3 #7 PREEMPT(full)
    [  174.854281][ T9784] Hardware name: QEMU Ubuntu 24.04 PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    [  174.854286][ T9784] Call Trace:
    [  174.854289][ T9784]  <TASK>
    [  174.854292][ T9784]  dump_stack_lvl+0x10e/0x1f0
    [  174.854305][ T9784]  print_report+0xd0/0x660
    [  174.854315][ T9784]  ? __virt_addr_valid+0x81/0x610
    [  174.854323][ T9784]  ? __phys_addr+0xe8/0x180
    [  174.854330][ T9784]  ? hfsplus_bnode_read+0x2f4/0x360
    [  174.854337][ T9784]  kasan_report+0xc6/0x100
    [  174.854346][ T9784]  ? hfsplus_bnode_read+0x2f4/0x360
    [  174.854354][ T9784]  hfsplus_bnode_read+0x2f4/0x360
    [  174.854362][ T9784]  hfsplus_bnode_dump+0x2ec/0x380
    [  174.854370][ T9784]  ? __pfx_hfsplus_bnode_dump+0x10/0x10
    [  174.854377][ T9784]  ? hfsplus_bnode_write_u16+0x83/0xb0
    [  174.854385][ T9784]  ? srcu_gp_start+0xd0/0x310
    [  174.854393][ T9784]  ? __mark_inode_dirty+0x29e/0xe40
    [  174.854402][ T9784]  hfsplus_brec_remove+0x3d2/0x4e0
    [  174.854411][ T9784]  __hfsplus_delete_attr+0x290/0x3a0
    [  174.854419][ T9784]  ? __pfx_hfs_find_1st_rec_by_cnid+0x10/0x10
    [  174.854427][ T9784]  ? __pfx___hfsplus_delete_attr+0x10/0x10
    [  174.854436][ T9784]  ? __asan_memset+0x23/0x50
    [  174.854450][ T9784]  hfsplus_delete_all_attrs+0x262/0x320
    [  174.854459][ T9784]  ? __pfx_hfsplus_delete_all_attrs+0x10/0x10
    [  174.854469][ T9784]  ? rcu_is_watching+0x12/0xc0
    [  174.854476][ T9784]  ? __mark_inode_dirty+0x29e/0xe40
    [  174.854483][ T9784]  hfsplus_delete_cat+0x845/0xde0
    [  174.854493][ T9784]  ? __pfx_hfsplus_delete_cat+0x10/0x10
    [  174.854507][ T9784]  hfsplus_unlink+0x1ca/0x7c0
    [  174.854516][ T9784]  ? __pfx_hfsplus_unlink+0x10/0x10
    [  174.854525][ T9784]  ? down_write+0x148/0x200
    [  174.854532][ T9784]  ? __pfx_down_write+0x10/0x10
    [  174.854540][ T9784]  vfs_unlink+0x2fe/0x9b0
    [  174.854549][ T9784]  do_unlinkat+0x490/0x670
    [  174.854557][ T9784]  ? __pfx_do_unlinkat+0x10/0x10
    [  174.854565][ T9784]  ? __might_fault+0xbc/0x130
    [  174.854576][ T9784]  ? getname_flags.part.0+0x1c5/0x550
    [  174.854584][ T9784]  __x64_sys_unlink+0xc5/0x110
    [  174.854592][ T9784]  do_syscall_64+0xc9/0x480
    [  174.854600][ T9784]  entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [  174.854608][ T9784] RIP: 0033:0x7f6fdf4c3167
    [  174.854614][ T9784] Code: f0 ff ff 73 01 c3 48 8b 0d 26 0d 0e 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 08
    [  174.854622][ T9784] RSP: 002b:00007ffcb948bca8 EFLAGS: 00000206 ORIG_RAX: 0000000000000057
    [  174.854630][ T9784] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f6fdf4c3167
    [  174.854636][ T9784] RDX: 00007ffcb948bcc0 RSI: 00007ffcb948bcc0 RDI: 00007ffcb948bd50
    [  174.854641][ T9784] RBP: 00007ffcb948cd90 R08: 0000000000000001 R09: 00007ffcb948bb40
    [  174.854645][ T9784] R10: 00007f6fdf564fc0 R11: 0000000000000206 R12: 0000561e1bc9c2d0
    [  174.854650][ T9784] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
    [  174.854658][ T9784]  </TASK>
    [  174.854661][ T9784]
    [  174.879281][ T9784] Allocated by task 9784:
    [  174.879664][ T9784]  kasan_save_stack+0x20/0x40
    [  174.880082][ T9784]  kasan_save_track+0x14/0x30
    [  174.880500][ T9784]  __kasan_kmalloc+0xaa/0xb0
    [  174.880908][ T9784]  __kmalloc_noprof+0x205/0x550
    [  174.881337][ T9784]  __hfs_bnode_create+0x107/0x890
    [  174.881779][ T9784]  hfsplus_bnode_find+0x2d0/0xd10
    [  174.882222][ T9784]  hfsplus_brec_find+0x2b0/0x520
    [  174.882659][ T9784]  hfsplus_delete_all_attrs+0x23b/0x320
    [  174.883144][ T9784]  hfsplus_delete_cat+0x845/0xde0
    [  174.883595][ T9784]  hfsplus_rmdir+0x106/0x1b0
    [  174.884004][ T9784]  vfs_rmdir+0x206/0x690
    [  174.884379][ T9784]  do_rmdir+0x2b7/0x390
    [  174.884751][ T9784]  __x64_sys_rmdir+0xc5/0x110
    [  174.885167][ T9784]  do_syscall_64+0xc9/0x480
    [  174.885568][ T9784]  entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [  174.886083][ T9784]
    [  174.886293][ T9784] The buggy address belongs to the object at ffff88810b5fc600
    [  174.886293][ T9784]  which belongs to the cache kmalloc-192 of size 192
    [  174.887507][ T9784] The buggy address is located 40 bytes to the right of
    [  174.887507][ T9784]  allocated 152-byte region [ffff88810b5fc600, ffff88810b5fc698)
    [  174.888766][ T9784]
    [  174.888976][ T9784] The buggy address belongs to the physical page:
    [  174.889533][ T9784] page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x10b5fc
    [  174.890295][ T9784] flags: 0x57ff00000000000(node=1|zone=2|lastcpupid=0x7ff)
    [  174.890927][ T9784] page_type: f5(slab)
    [  174.891284][ T9784] raw: 057ff00000000000 ffff88801b4423c0 ffffea000426dc80 dead000000000002
    [  174.892032][ T9784] raw: 0000000000000000 0000000080100010 00000000f5000000 0000000000000000
    [  174.892774][ T9784] page dumped because: kasan: bad access detected
    [  174.893327][ T9784] page_owner tracks the page as allocated
    [  174.893825][ T9784] page last allocated via order 0, migratetype Unmovable, gfp_mask 0x52c00(GFP_NOIO|__GFP_NOWARN|__GFP_NO1
    [  174.895373][ T9784]  post_alloc_hook+0x1c0/0x230
    [  174.895801][ T9784]  get_page_from_freelist+0xdeb/0x3b30
    [  174.896284][ T9784]  __alloc_frozen_pages_noprof+0x25c/0x2460
    [  174.896810][ T9784]  alloc_pages_mpol+0x1fb/0x550
    [  174.897242][ T9784]  new_slab+0x23b/0x340
    [  174.897614][ T9784]  ___slab_alloc+0xd81/0x1960
    [  174.898028][ T9784]  __slab_alloc.isra.0+0x56/0xb0
    [  174.898468][ T9784]  __kmalloc_noprof+0x2b0/0x550
    [  174.898896][ T9784]  usb_alloc_urb+0x73/0xa0
    [  174.899289][ T9784]  usb_control_msg+0x1cb/0x4a0
    [  174.899718][ T9784]  usb_get_string+0xab/0x1a0
    [  174.900133][ T9784]  usb_string_sub+0x107/0x3c0
    [  174.900549][ T9784]  usb_string+0x307/0x670
    [  174.900933][ T9784]  usb_cache_string+0x80/0x150
    [  174.901355][ T9784]  usb_new_device+0x1d0/0x19d0
    [  174.901786][ T9784]  register_root_hub+0x299/0x730
    [  174.902231][ T9784] page last free pid 10 tgid 10 stack trace:
    [  174.902757][ T9784]  __free_frozen_pages+0x80c/0x1250
    [  174.903217][ T9784]  vfree.part.0+0x12b/0xab0
    [  174.903645][ T9784]  delayed_vfree_work+0x93/0xd0
    [  174.904073][ T9784]  process_one_work+0x9b5/0x1b80
    [  174.904519][ T9784]  worker_thread+0x630/0xe60
    [  174.904927][ T9784]  kthread+0x3a8/0x770
    [  174.905291][ T9784]  ret_from_fork+0x517/0x6e0
    [  174.905709][ T9784]  ret_from_fork_asm+0x1a/0x30
    [  174.906128][ T9784]
    [  174.906338][ T9784] Memory state around the buggy address:
    [  174.906828][ T9784]  ffff88810b5fc580: fb fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
    [  174.907528][ T9784]  ffff88810b5fc600: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    [  174.908222][ T9784] >ffff88810b5fc680: 00 00 00 fc fc fc fc fc fc fc fc fc fc fc fc fc
    [  174.908917][ T9784]                                            ^
    [  174.909481][ T9784]  ffff88810b5fc700: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [  174.910432][ T9784]  ffff88810b5fc780: fb fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
    [  174.911401][ T9784] ==================================================================
    
    The reason of the issue that code doesn't check the correctness
    of the requested offset and length. As a result, incorrect value
    of offset or/and length could result in access out of allocated
    memory.
    
    This patch introduces is_bnode_offset_valid() method that checks
    the requested offset value. Also, it introduces
    check_and_correct_requested_length() method that checks and
    correct the requested length (if it is necessary). These methods
    are used in hfsplus_bnode_read(), hfsplus_bnode_write(),
    hfsplus_bnode_clear(), hfsplus_bnode_copy(), and hfsplus_bnode_move()
    with the goal to prevent the access out of allocated memory
    and triggering the crash.
    
    Reported-by: Kun Hu <[email protected]>
    Reported-by: Jiaji Qin <[email protected]>
    Reported-by: Shuoran Bai <[email protected]>
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

hfsplus: fix slab-out-of-bounds read in hfsplus_uni2asc() [+ + +]
Author: Viacheslav Dubeyko <[email protected]>
Date:   Thu Jul 10 16:08:30 2025 -0700

    hfsplus: fix slab-out-of-bounds read in hfsplus_uni2asc()
    
    [ Upstream commit 94458781aee6045bd3d0ad4b80b02886b9e2219b ]
    
    The hfsplus_readdir() method is capable to crash by calling
    hfsplus_uni2asc():
    
    [  667.121659][ T9805] ==================================================================
    [  667.122651][ T9805] BUG: KASAN: slab-out-of-bounds in hfsplus_uni2asc+0x902/0xa10
    [  667.123627][ T9805] Read of size 2 at addr ffff88802592f40c by task repro/9805
    [  667.124578][ T9805]
    [  667.124876][ T9805] CPU: 3 UID: 0 PID: 9805 Comm: repro Not tainted 6.16.0-rc3 #1 PREEMPT(full)
    [  667.124886][ T9805] Hardware name: QEMU Ubuntu 24.04 PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    [  667.124890][ T9805] Call Trace:
    [  667.124893][ T9805]  <TASK>
    [  667.124896][ T9805]  dump_stack_lvl+0x10e/0x1f0
    [  667.124911][ T9805]  print_report+0xd0/0x660
    [  667.124920][ T9805]  ? __virt_addr_valid+0x81/0x610
    [  667.124928][ T9805]  ? __phys_addr+0xe8/0x180
    [  667.124934][ T9805]  ? hfsplus_uni2asc+0x902/0xa10
    [  667.124942][ T9805]  kasan_report+0xc6/0x100
    [  667.124950][ T9805]  ? hfsplus_uni2asc+0x902/0xa10
    [  667.124959][ T9805]  hfsplus_uni2asc+0x902/0xa10
    [  667.124966][ T9805]  ? hfsplus_bnode_read+0x14b/0x360
    [  667.124974][ T9805]  hfsplus_readdir+0x845/0xfc0
    [  667.124984][ T9805]  ? __pfx_hfsplus_readdir+0x10/0x10
    [  667.124994][ T9805]  ? stack_trace_save+0x8e/0xc0
    [  667.125008][ T9805]  ? iterate_dir+0x18b/0xb20
    [  667.125015][ T9805]  ? trace_lock_acquire+0x85/0xd0
    [  667.125022][ T9805]  ? lock_acquire+0x30/0x80
    [  667.125029][ T9805]  ? iterate_dir+0x18b/0xb20
    [  667.125037][ T9805]  ? down_read_killable+0x1ed/0x4c0
    [  667.125044][ T9805]  ? putname+0x154/0x1a0
    [  667.125051][ T9805]  ? __pfx_down_read_killable+0x10/0x10
    [  667.125058][ T9805]  ? apparmor_file_permission+0x239/0x3e0
    [  667.125069][ T9805]  iterate_dir+0x296/0xb20
    [  667.125076][ T9805]  __x64_sys_getdents64+0x13c/0x2c0
    [  667.125084][ T9805]  ? __pfx___x64_sys_getdents64+0x10/0x10
    [  667.125091][ T9805]  ? __x64_sys_openat+0x141/0x200
    [  667.125126][ T9805]  ? __pfx_filldir64+0x10/0x10
    [  667.125134][ T9805]  ? do_user_addr_fault+0x7fe/0x12f0
    [  667.125143][ T9805]  do_syscall_64+0xc9/0x480
    [  667.125151][ T9805]  entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [  667.125158][ T9805] RIP: 0033:0x7fa8753b2fc9
    [  667.125164][ T9805] Code: 00 c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 48
    [  667.125172][ T9805] RSP: 002b:00007ffe96f8e0f8 EFLAGS: 00000217 ORIG_RAX: 00000000000000d9
    [  667.125181][ T9805] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007fa8753b2fc9
    [  667.125185][ T9805] RDX: 0000000000000400 RSI: 00002000000063c0 RDI: 0000000000000004
    [  667.125190][ T9805] RBP: 00007ffe96f8e110 R08: 00007ffe96f8e110 R09: 00007ffe96f8e110
    [  667.125195][ T9805] R10: 0000000000000000 R11: 0000000000000217 R12: 0000556b1e3b4260
    [  667.125199][ T9805] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
    [  667.125207][ T9805]  </TASK>
    [  667.125210][ T9805]
    [  667.145632][ T9805] Allocated by task 9805:
    [  667.145991][ T9805]  kasan_save_stack+0x20/0x40
    [  667.146352][ T9805]  kasan_save_track+0x14/0x30
    [  667.146717][ T9805]  __kasan_kmalloc+0xaa/0xb0
    [  667.147065][ T9805]  __kmalloc_noprof+0x205/0x550
    [  667.147448][ T9805]  hfsplus_find_init+0x95/0x1f0
    [  667.147813][ T9805]  hfsplus_readdir+0x220/0xfc0
    [  667.148174][ T9805]  iterate_dir+0x296/0xb20
    [  667.148549][ T9805]  __x64_sys_getdents64+0x13c/0x2c0
    [  667.148937][ T9805]  do_syscall_64+0xc9/0x480
    [  667.149291][ T9805]  entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [  667.149809][ T9805]
    [  667.150030][ T9805] The buggy address belongs to the object at ffff88802592f000
    [  667.150030][ T9805]  which belongs to the cache kmalloc-2k of size 2048
    [  667.151282][ T9805] The buggy address is located 0 bytes to the right of
    [  667.151282][ T9805]  allocated 1036-byte region [ffff88802592f000, ffff88802592f40c)
    [  667.152580][ T9805]
    [  667.152798][ T9805] The buggy address belongs to the physical page:
    [  667.153373][ T9805] page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x25928
    [  667.154157][ T9805] head: order:3 mapcount:0 entire_mapcount:0 nr_pages_mapped:0 pincount:0
    [  667.154916][ T9805] anon flags: 0xfff00000000040(head|node=0|zone=1|lastcpupid=0x7ff)
    [  667.155631][ T9805] page_type: f5(slab)
    [  667.155997][ T9805] raw: 00fff00000000040 ffff88801b442f00 0000000000000000 dead000000000001
    [  667.156770][ T9805] raw: 0000000000000000 0000000080080008 00000000f5000000 0000000000000000
    [  667.157536][ T9805] head: 00fff00000000040 ffff88801b442f00 0000000000000000 dead000000000001
    [  667.158317][ T9805] head: 0000000000000000 0000000080080008 00000000f5000000 0000000000000000
    [  667.159088][ T9805] head: 00fff00000000003 ffffea0000964a01 00000000ffffffff 00000000ffffffff
    [  667.159865][ T9805] head: ffffffffffffffff 0000000000000000 00000000ffffffff 0000000000000008
    [  667.160643][ T9805] page dumped because: kasan: bad access detected
    [  667.161216][ T9805] page_owner tracks the page as allocated
    [  667.161732][ T9805] page last allocated via order 3, migratetype Unmovable, gfp_mask 0xd20c0(__GFP_IO|__GFP_FS|__GFP_NOWARN9
    [  667.163566][ T9805]  post_alloc_hook+0x1c0/0x230
    [  667.164003][ T9805]  get_page_from_freelist+0xdeb/0x3b30
    [  667.164503][ T9805]  __alloc_frozen_pages_noprof+0x25c/0x2460
    [  667.165040][ T9805]  alloc_pages_mpol+0x1fb/0x550
    [  667.165489][ T9805]  new_slab+0x23b/0x340
    [  667.165872][ T9805]  ___slab_alloc+0xd81/0x1960
    [  667.166313][ T9805]  __slab_alloc.isra.0+0x56/0xb0
    [  667.166767][ T9805]  __kmalloc_cache_noprof+0x255/0x3e0
    [  667.167255][ T9805]  psi_cgroup_alloc+0x52/0x2d0
    [  667.167693][ T9805]  cgroup_mkdir+0x694/0x1210
    [  667.168118][ T9805]  kernfs_iop_mkdir+0x111/0x190
    [  667.168568][ T9805]  vfs_mkdir+0x59b/0x8d0
    [  667.168956][ T9805]  do_mkdirat+0x2ed/0x3d0
    [  667.169353][ T9805]  __x64_sys_mkdir+0xef/0x140
    [  667.169784][ T9805]  do_syscall_64+0xc9/0x480
    [  667.170195][ T9805]  entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [  667.170730][ T9805] page last free pid 1257 tgid 1257 stack trace:
    [  667.171304][ T9805]  __free_frozen_pages+0x80c/0x1250
    [  667.171770][ T9805]  vfree.part.0+0x12b/0xab0
    [  667.172182][ T9805]  delayed_vfree_work+0x93/0xd0
    [  667.172612][ T9805]  process_one_work+0x9b5/0x1b80
    [  667.173067][ T9805]  worker_thread+0x630/0xe60
    [  667.173486][ T9805]  kthread+0x3a8/0x770
    [  667.173857][ T9805]  ret_from_fork+0x517/0x6e0
    [  667.174278][ T9805]  ret_from_fork_asm+0x1a/0x30
    [  667.174703][ T9805]
    [  667.174917][ T9805] Memory state around the buggy address:
    [  667.175411][ T9805]  ffff88802592f300: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    [  667.176114][ T9805]  ffff88802592f380: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    [  667.176830][ T9805] >ffff88802592f400: 00 04 fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [  667.177547][ T9805]                       ^
    [  667.177933][ T9805]  ffff88802592f480: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [  667.178640][ T9805]  ffff88802592f500: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [  667.179350][ T9805] ==================================================================
    
    The hfsplus_uni2asc() method operates by struct hfsplus_unistr:
    
    struct hfsplus_unistr {
            __be16 length;
            hfsplus_unichr unicode[HFSPLUS_MAX_STRLEN];
    } __packed;
    
    where HFSPLUS_MAX_STRLEN is 255 bytes. The issue happens if length
    of the structure instance has value bigger than 255 (for example,
    65283). In such case, pointer on unicode buffer is going beyond of
    the allocated memory.
    
    The patch fixes the issue by checking the length value of
    hfsplus_unistr instance and using 255 value in the case if length
    value is bigger than HFSPLUS_MAX_STRLEN. Potential reason of such
    situation could be a corruption of Catalog File b-tree's node.
    
    Reported-by: Wenzhi Wang <[email protected]>
    Signed-off-by: Liu Shixin <[email protected]>
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    cc: John Paul Adrian Glaubitz <[email protected]>
    cc: Yangtao Li <[email protected]>
    cc: [email protected]
    Reviewed-by: Yangtao Li <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Viacheslav Dubeyko <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
HID: apple: avoid setting up battery timer for devices without battery [+ + +]
Author: Aditya Garg <[email protected]>
Date:   Mon Jun 30 12:37:13 2025 +0000

    HID: apple: avoid setting up battery timer for devices without battery
    
    commit c061046fe9ce3ff31fb9a807144a2630ad349c17 upstream.
    
    Currently, the battery timer is set up for all devices using hid-apple,
    irrespective of whether they actually have a battery or not.
    
    APPLE_RDESC_BATTERY is a quirk that indicates the device has a battery
    and needs the battery timer. This patch checks for this quirk before
    setting up the timer, ensuring that only devices with a battery will
    have the timer set up.
    
    Fixes: 6e143293e17a ("HID: apple: Report Magic Keyboard battery over USB")
    Cc: [email protected]
    Signed-off-by: Aditya Garg <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

HID: magicmouse: avoid setting up battery timer when not needed [+ + +]
Author: Aditya Garg <[email protected]>
Date:   Mon Jun 30 12:37:13 2025 +0000

    HID: magicmouse: avoid setting up battery timer when not needed
    
    commit 9bdc30e35cbc1aa78ccf01040354209f1e11ca22 upstream.
    
    Currently, the battery timer is set up for all devices using
    hid-magicmouse, irrespective of whether they actually need it or not.
    
    The current implementation requires the battery timer for Magic Mouse 2
    and Magic Trackpad 2 when connected via USB only. Add checks to ensure
    that the battery timer is only set up when they are connected via USB.
    
    Fixes: 0b91b4e4dae6 ("HID: magicmouse: Report battery level over USB")
    Cc: [email protected]
    Signed-off-by: Aditya Garg <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
hv_netvsc: Fix panic during namespace deletion with VF [+ + +]
Author: Haiyang Zhang <[email protected]>
Date:   Wed Aug 6 13:21:51 2025 -0700

    hv_netvsc: Fix panic during namespace deletion with VF
    
    commit 33caa208dba6fa639e8a92fd0c8320b652e5550c upstream.
    
    The existing code move the VF NIC to new namespace when NETDEV_REGISTER is
    received on netvsc NIC. During deletion of the namespace,
    default_device_exit_batch() >> default_device_exit_net() is called. When
    netvsc NIC is moved back and registered to the default namespace, it
    automatically brings VF NIC back to the default namespace. This will cause
    the default_device_exit_net() >> for_each_netdev_safe loop unable to detect
    the list end, and hit NULL ptr:
    
    [  231.449420] mana 7870:00:00.0 enP30832s1: Moved VF to namespace with: eth0
    [  231.449656] BUG: kernel NULL pointer dereference, address: 0000000000000010
    [  231.450246] #PF: supervisor read access in kernel mode
    [  231.450579] #PF: error_code(0x0000) - not-present page
    [  231.450916] PGD 17b8a8067 P4D 0
    [  231.451163] Oops: Oops: 0000 [#1] SMP NOPTI
    [  231.451450] CPU: 82 UID: 0 PID: 1394 Comm: kworker/u768:1 Not tainted 6.16.0-rc4+ #3 VOLUNTARY
    [  231.452042] Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS Hyper-V UEFI Release v4.1 11/21/2024
    [  231.452692] Workqueue: netns cleanup_net
    [  231.452947] RIP: 0010:default_device_exit_batch+0x16c/0x3f0
    [  231.453326] Code: c0 0c f5 b3 e8 d5 db fe ff 48 85 c0 74 15 48 c7 c2 f8 fd ca b2 be 10 00 00 00 48 8d 7d c0 e8 7b 77 25 00 49 8b 86 28 01 00 00 <48> 8b 50 10 4c 8b 2a 4c 8d 62 f0 49 83 ed 10 4c 39 e0 0f 84 d6 00
    [  231.454294] RSP: 0018:ff75fc7c9bf9fd00 EFLAGS: 00010246
    [  231.454610] RAX: 0000000000000000 RBX: 0000000000000002 RCX: 61c8864680b583eb
    [  231.455094] RDX: ff1fa9f71462d800 RSI: ff75fc7c9bf9fd38 RDI: 0000000030766564
    [  231.455686] RBP: ff75fc7c9bf9fd78 R08: 0000000000000000 R09: 0000000000000000
    [  231.456126] R10: 0000000000000001 R11: 0000000000000004 R12: ff1fa9f70088e340
    [  231.456621] R13: ff1fa9f70088e340 R14: ffffffffb3f50c20 R15: ff1fa9f7103e6340
    [  231.457161] FS:  0000000000000000(0000) GS:ff1faa6783a08000(0000) knlGS:0000000000000000
    [  231.457707] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  231.458031] CR2: 0000000000000010 CR3: 0000000179ab2006 CR4: 0000000000b73ef0
    [  231.458434] Call Trace:
    [  231.458600]  <TASK>
    [  231.458777]  ops_undo_list+0x100/0x220
    [  231.459015]  cleanup_net+0x1b8/0x300
    [  231.459285]  process_one_work+0x184/0x340
    
    To fix it, move the ns change to a workqueue, and take rtnl_lock to avoid
    changing the netdev list when default_device_exit_net() is using it.
    
    Cc: [email protected]
    Fixes: 4c262801ea60 ("hv_netvsc: Fix VF namespace also in synthetic NIC NETDEV_REGISTER event")
    Signed-off-by: Haiyang Zhang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
hwmon: (emc2305) Set initial PWM minimum value during probe based on thermal state [+ + +]
Author: Florin Leotescu <[email protected]>
Date:   Tue Jun 3 14:31:25 2025 +0300

    hwmon: (emc2305) Set initial PWM minimum value during probe based on thermal state
    
    [ Upstream commit 0429415a084a15466e87d504e8c2a502488184a5 ]
    
    Prevent the PWM value from being set to minimum when thermal zone
    temperature exceeds any trip point during driver probe. Otherwise, the
    PWM fan speed will remains at minimum speed and not respond to
    temperature changes.
    
    Signed-off-by: Florin Leotescu <[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: (gsc-hwmon) fix fan pwm setpoint show functions [+ + +]
Author: Tim Harvey <[email protected]>
Date:   Fri Jul 18 13:02:59 2025 -0700

    hwmon: (gsc-hwmon) fix fan pwm setpoint show functions
    
    commit 9c62e2282900332c8b711d9f9e37af369a8ef71b upstream.
    
    The Linux hwmon sysfs API values for pwmX_auto_pointY_pwm represent an
    integer value between 0 (0%) to 255 (100%) and the pwmX_auto_pointY_temp
    represent millidegrees Celcius.
    
    Commit a6d80df47ee2 ("hwmon: (gsc-hwmon) fix fan pwm temperature
    scaling") properly addressed the incorrect scaling in the
    pwm_auto_point_temp_store implementation but erroneously scaled
    the pwm_auto_point_pwm_show (pwm value) instead of the
    pwm_auto_point_temp_show (temp value) resulting in:
     # cat /sys/class/hwmon/hwmon0/pwm1_auto_point6_pwm
     25500
     # cat /sys/class/hwmon/hwmon0/pwm1_auto_point6_temp
     4500
    
    Fix the scaling of these attributes:
     # cat /sys/class/hwmon/hwmon0/pwm1_auto_point6_pwm
     255
     # cat /sys/class/hwmon/hwmon0/pwm1_auto_point6_temp
     45000
    
    Fixes: a6d80df47ee2 ("hwmon: (gsc-hwmon) fix fan pwm temperature scaling")
    Cc: [email protected]
    Signed-off-by: Tim Harvey <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
i2c: Force DLL0945 touchpad i2c freq to 100khz [+ + +]
Author: fangzhong.zhou <[email protected]>
Date:   Sun Aug 3 07:15:54 2025 +0800

    i2c: Force DLL0945 touchpad i2c freq to 100khz
    
    [ Upstream commit 0b7c9528facdb5a73ad78fea86d2e95a6c48dbc4 ]
    
    This patch fixes an issue where the touchpad cursor movement becomes
    slow on the Dell Precision 5560. Force the touchpad freq to 100khz
    as a workaround.
    
    Tested on Dell Precision 5560 with 6.14 to 6.14.6. Cursor movement
    is now smooth and responsive.
    
    Signed-off-by: fangzhong.zhou <[email protected]>
    [wsa: kept sorting and removed unnecessary parts from commit msg]
    Signed-off-by: Wolfram Sang <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
i3c: add missing include to internal header [+ + +]
Author: Wolfram Sang <[email protected]>
Date:   Thu Jul 17 14:00:47 2025 +0200

    i3c: add missing include to internal header
    
    [ Upstream commit 3b661ca549b9e5bb11d0bc97ada6110aac3282d2 ]
    
    LKP found a random config which failed to build because IO accessors
    were not defined:
    
       In file included from drivers/i3c/master.c:21:
       drivers/i3c/internals.h: In function 'i3c_writel_fifo':
    >> drivers/i3c/internals.h:35:9: error: implicit declaration of function 'writesl' [-Werror=implicit-function-declaration]
    
    Add the proper header to where the IO accessors are used.
    
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Signed-off-by: Wolfram Sang <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

i3c: don't fail if GETHDRCAP is unsupported [+ + +]
Author: Wolfram Sang <[email protected]>
Date:   Fri Jul 4 22:44:32 2025 +0200

    i3c: don't fail if GETHDRCAP is unsupported
    
    [ Upstream commit 447270cdb41b1c8c3621bb14b93a6749f942556e ]
    
    'I3C_BCR_HDR_CAP' is still spec v1.0 and has been renamed to 'advanced
    capabilities' in v1.1 onwards. The ST pressure sensor LPS22DF does not
    have HDR, but has the 'advanced cap' bit set. The core still wants to
    get additional information using the CCC 'GETHDRCAP' (or GETCAPS in v1.1
    onwards). Not all controllers support this CCC and will notify the upper
    layers about it. For instantiating the device, we can ignore this
    unsupported CCC as standard communication will work. Without this patch,
    the device will not be instantiated at all.
    
    Signed-off-by: Wolfram Sang <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

i3c: master: Initialize ret in i3c_i2c_notifier_call() [+ + +]
Author: Jorge Marques <[email protected]>
Date:   Sun Jun 22 12:11:07 2025 +0200

    i3c: master: Initialize ret in i3c_i2c_notifier_call()
    
    [ Upstream commit 290ce8b2d0745e45a3155268184523a8c75996f1 ]
    
    Set ret to -EINVAL if i3c_i2c_notifier_call() receives an invalid
    action, resolving uninitialized warning.
    
    Signed-off-by: Jorge Marques <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Link: https://lore.kernel.org/r/20250622-i3c-master-ret-uninitialized-v1-1-aabb5625c932@analog.com
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
igc: fix disabling L1.2 PCI-E link substate on I226 on init [+ + +]
Author: ValdikSS <[email protected]>
Date:   Tue Aug 19 15:19:59 2025 -0700

    igc: fix disabling L1.2 PCI-E link substate on I226 on init
    
    [ Upstream commit 1468c1f97cf32418e34dbb40b784ed9333b9e123 ]
    
    Device ID comparison in igc_is_device_id_i226 is performed before
    the ID is set, resulting in always failing check on init.
    
    Before the patch:
    * L1.2 is not disabled on init
    * L1.2 is properly disabled after suspend-resume cycle
    
    With the patch:
    * L1.2 is properly disabled both on init and after suspend-resume
    
    How to test:
    Connect to the 1G link with 300+ mbit/s Internet speed, and run
    the download speed test, such as:
    
        curl -o /dev/null http://speedtest.selectel.ru/1GB
    
    Without L1.2 disabled, the speed would be no more than ~200 mbit/s.
    With L1.2 disabled, the speed would reach 1 gbit/s.
    Note: it's required that the latency between your host and the remote
    be around 3-5 ms, the test inside LAN (<1 ms latency) won't trigger the
    issue.
    
    Link: https://lore.kernel.org/intel-wired-lan/[email protected]
    Fixes: 0325143b59c6 ("igc: disable L1.2 PCI-E link substate to avoid performance issue")
    Signed-off-by: ValdikSS <[email protected]>
    Reviewed-by: Vitaly Lifshits <[email protected]>
    Reviewed-by: Paul Menzel <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
iio: adc: ad7768-1: Ensure SYNC_IN pulse minimum timing requirement [+ + +]
Author: Jonathan Santos <[email protected]>
Date:   Wed Jun 4 16:35:21 2025 -0300

    iio: adc: ad7768-1: Ensure SYNC_IN pulse minimum timing requirement
    
    [ Upstream commit 7e54d932873d91a55d1b89b7389876d78aeeab32 ]
    
    The SYNC_IN pulse width must be at least 1.5 x Tmclk, corresponding to
    ~2.5 µs at the lowest supported MCLK frequency. Add a 3 µs delay to
    ensure reliable synchronization timing even for the worst-case scenario.
    
    Signed-off-by: Jonathan Santos <[email protected]>
    Reviewed-by: David Lechner <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Link: https://patch.msgid.link/d3ee92a533cd1207cf5c5cc4d7bdbb5c6c267f68.1749063024.git.Jonathan.Santos@analog.com
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

iio: adc: ad_sigma_delta: change to buffer predisable [+ + +]
Author: David Lechner <[email protected]>
Date:   Thu Jul 3 16:07:44 2025 -0500

    iio: adc: ad_sigma_delta: change to buffer predisable
    
    commit 66d4374d97f85516b5a22418c5e798aed2606dec upstream.
    
    Change the buffer disable callback from postdisable to predisable.
    This balances the existing posteanble callback. Using postdisable
    with posteanble can be problematic, for example, if update_scan_mode
    fails, it would call postdisable without ever having called posteanble,
    so the drivers using this would be in an unexpected state when
    postdisable was called.
    
    Fixes: af3008485ea0 ("iio:adc: Add common code for ADI Sigma Delta devices")
    Signed-off-by: David Lechner <[email protected]>
    Reviewed-by: Nuno Sá <[email protected]>
    Link: https://patch.msgid.link/20250703-iio-adc-ad_sigma_delta-buffer-predisable-v1-1-f2ab85138f1f@baylibre.com
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: adc: ad_sigma_delta: don't overallocate scan buffer [+ + +]
Author: David Lechner <[email protected]>
Date:   Tue Jul 1 16:37:49 2025 -0500

    iio: adc: ad_sigma_delta: don't overallocate scan buffer
    
    [ Upstream commit 5a2f15c5a8e017d0951e6dc62aa7b5b634f56881 ]
    
    Fix overallocating the size of the scan buffer by converting bits to
    bytes. The size is meant to be in bytes, so scanbits needs to be
    divided by 8.
    
    Signed-off-by: David Lechner <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Reviewed-by: Nuno Sá <[email protected]>
    Link: https://patch.msgid.link/20250701-iio-adc-ad7173-add-spi-offload-support-v3-1-42abb83e3dac@baylibre.com
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

iio: imu: bno055: fix OOB access of hw_xlate array [+ + +]
Author: David Lechner <[email protected]>
Date:   Wed Jul 9 21:20:00 2025 -0500

    iio: imu: bno055: fix OOB access of hw_xlate array
    
    commit 399b883ec828e436f1a721bf8551b4da8727e65b upstream.
    
    Fix a potential out-of-bounds array access of the hw_xlate array in
    bno055.c.
    
    In bno055_get_regmask(), hw_xlate was iterated over the length of the
    vals array instead of the length of the hw_xlate array. In the case of
    bno055_gyr_scale, the vals array is larger than the hw_xlate array,
    so this could result in an out-of-bounds access. In practice, this
    shouldn't happen though because a match should always be found which
    breaks out of the for loop before it iterates beyond the end of the
    hw_xlate array.
    
    By adding a new hw_xlate_len field to the bno055_sysfs_attr, we can be
    sure we are iterating over the correct length.
    
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Fixes: 4aefe1c2bd0c ("iio: imu: add Bosch Sensortec BNO055 core driver")
    Signed-off-by: David Lechner <[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]>

iio: imu: inv_icm42600: change invalid data error to -EBUSY [+ + +]
Author: Jean-Baptiste Maneyrol <[email protected]>
Date:   Sun Aug 24 09:53:27 2025 -0400

    iio: imu: inv_icm42600: change invalid data error to -EBUSY
    
    [ Upstream commit dfdc31e7ccf3ac1d5ec01d5120c71e14745e3dd8 ]
    
    Temperature sensor returns the temperature of the mechanical parts
    of the chip. If both accel and gyro are off, the temperature sensor is
    also automatically turned off and returns invalid data.
    
    In this case, returning -EBUSY error code is better then -EINVAL and
    indicates userspace that it needs to retry reading temperature in
    another context.
    
    Fixes: bc3eb0207fb5 ("iio: imu: inv_icm42600: add temperature sensor support")
    Signed-off-by: Jean-Baptiste Maneyrol <[email protected]>
    Cc: [email protected]
    Reviewed-by: Andy Shevchenko <[email protected]>
    Reviewed-by: Sean Nyekjaer <[email protected]>
    Link: https://patch.msgid.link/20250808-inv-icm42600-change-temperature-error-code-v1-1-986fbf63b77d@tdk.com
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: imu: inv_icm42600: Convert to uXX and sXX integer types [+ + +]
Author: Andy Shevchenko <[email protected]>
Date:   Sun Aug 24 09:53:26 2025 -0400

    iio: imu: inv_icm42600: Convert to uXX and sXX integer types
    
    [ Upstream commit a4135386fa49c2a170b89296da12c4a3be2089d9 ]
    
    The driver code is full of intXX_t and uintXX_t types which is
    not the pattern we use in the IIO subsystem. Switch the driver
    to use kernel internal types for that. No functional changes.
    
    Signed-off-by: Andy Shevchenko <[email protected]>
    Acked-by: Jean-Baptiste Maneyrol <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Stable-dep-of: dfdc31e7ccf3 ("iio: imu: inv_icm42600: change invalid data error to -EBUSY")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: imu: inv_icm42600: switch timestamp type from int64_t __aligned(8) to aligned_s64 [+ + +]
Author: Jonathan Cameron <[email protected]>
Date:   Sun Aug 24 09:53:24 2025 -0400

    iio: imu: inv_icm42600: switch timestamp type from int64_t __aligned(8) to aligned_s64
    
    [ Upstream commit 27e6ddf291b1c05bfcc3534e8212ed6c46447c60 ]
    
    The vast majority of IIO drivers use aligned_s64 for the type of the
    timestamp field.  It is not a bug to use int64_t and until this series
    iio_push_to_buffers_with_timestamp() took and int64_t timestamp, it
    is inconsistent.  This change is to remove that inconsistency and
    ensure there is one obvious choice for future drivers.
    
    Acked-by: Jean-Baptiste Maneyrol <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Stable-dep-of: dfdc31e7ccf3 ("iio: imu: inv_icm42600: change invalid data error to -EBUSY")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: imu: inv_icm42600: use = { } instead of memset() [+ + +]
Author: David Lechner <[email protected]>
Date:   Sun Aug 24 09:53:25 2025 -0400

    iio: imu: inv_icm42600: use = { } instead of memset()
    
    [ Upstream commit 352112e2d9aab6a156c2803ae14eb89a9fd93b7d ]
    
    Use { } instead of memset() to zero-initialize stack memory to simplify
    the code.
    
    Signed-off-by: David Lechner <[email protected]>
    Reviewed-by: Nuno Sá <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Link: https://patch.msgid.link/20250611-iio-zero-init-stack-with-instead-of-memset-v1-16-ebb2d0a24302@baylibre.com
    Signed-off-by: Jonathan Cameron <[email protected]>
    Stable-dep-of: dfdc31e7ccf3 ("iio: imu: inv_icm42600: change invalid data error to -EBUSY")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: light: as73211: Ensure buffer holes are zeroed [+ + +]
Author: Jonathan Cameron <[email protected]>
Date:   Sun Aug 24 09:02:38 2025 -0400

    iio: light: as73211: Ensure buffer holes are zeroed
    
    [ Upstream commit 433b99e922943efdfd62b9a8e3ad1604838181f2 ]
    
    Given that the buffer is copied to a kfifo that ultimately user space
    can read, ensure we zero it.
    
    Fixes: 403e5586b52e ("iio: light: as73211: New driver")
    Reviewed-by: Matti Vaittinen <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: pressure: bmp280: Use IS_ERR() in bmp280_common_probe() [+ + +]
Author: Salah Triki <[email protected]>
Date:   Mon Aug 18 10:27:30 2025 +0100

    iio: pressure: bmp280: Use IS_ERR() in bmp280_common_probe()
    
    commit 43c0f6456f801181a80b73d95def0e0fd134e1cc upstream.
    
    `devm_gpiod_get_optional()` may return non-NULL error pointer on failure.
    Check its return value using `IS_ERR()` and propagate the error if
    necessary.
    
    Fixes: df6e71256c84 ("iio: pressure: bmp280: Explicitly mark GPIO optional")
    Signed-off-by: Salah Triki <[email protected]>
    Reviewed-by: David Lechner <[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]>

iio: proximity: isl29501: fix buffered read on big-endian systems [+ + +]
Author: David Lechner <[email protected]>
Date:   Tue Jul 22 15:54:21 2025 -0500

    iio: proximity: isl29501: fix buffered read on big-endian systems
    
    commit de18e978d0cda23e4c102e18092b63a5b0b3a800 upstream.
    
    Fix passing a u32 value as a u16 buffer scan item. This works on little-
    endian systems, but not on big-endian systems.
    
    A new local variable is introduced for getting the register value and
    the array is changed to a struct to make the data layout more explicit
    rather than just changing the type and having to recalculate the proper
    length needed for the timestamp.
    
    Fixes: 1c28799257bc ("iio: light: isl29501: Add support for the ISL29501 ToF sensor.")
    Signed-off-by: David Lechner <[email protected]>
    Link: https://patch.msgid.link/20250722-iio-use-more-iio_declare_buffer_with_ts-7-v2-1-d3ebeb001ed3@baylibre.com
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: temperature: maxim_thermocouple: use DMA-safe buffer for spi_read() [+ + +]
Author: David Lechner <[email protected]>
Date:   Sun Aug 24 09:01:40 2025 -0400

    iio: temperature: maxim_thermocouple: use DMA-safe buffer for spi_read()
    
    [ Upstream commit ae5bc07ec9f73a41734270ef3f800c5c8a7e0ad3 ]
    
    Replace using stack-allocated buffers with a DMA-safe buffer for use
    with spi_read(). This allows the driver to be safely used with
    DMA-enabled SPI controllers.
    
    The buffer array is also converted to a struct with a union to make the
    usage of the memory in the buffer more clear and ensure proper alignment.
    
    Fixes: 1f25ca11d84a ("iio: temperature: add support for Maxim thermocouple chips")
    Signed-off-by: David Lechner <[email protected]>
    Reviewed-by: Nuno Sá <[email protected]>
    Link: https://patch.msgid.link/20250721-iio-use-more-iio_declare_buffer_with_ts-3-v2-1-0c68d41ccf6c@baylibre.com
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    [ iio_push_to_buffers_with_ts() => iio_push_to_buffers_with_timestamp() ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
imx8m-blk-ctrl: set ISI panic write hurry level [+ + +]
Author: Krzysztof Hałasa <[email protected]>
Date:   Fri May 9 11:26:55 2025 +0200

    imx8m-blk-ctrl: set ISI panic write hurry level
    
    [ Upstream commit c01fba0b4869cada5403fffff416cd1675dba078 ]
    
    Apparently, ISI needs cache settings similar to LCDIF.
    Otherwise we get artefacts in the image.
    Tested on i.MX8MP.
    
    Signed-off-by: Krzysztof Hałasa <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
intel_idle: Allow loading ACPI tables for any family [+ + +]
Author: Len Brown <[email protected]>
Date:   Fri Aug 8 15:37:14 2025 -0400

    intel_idle: Allow loading ACPI tables for any family
    
    [ Upstream commit e91a158b694d7f4bd937763dde79ed0afa472d8a ]
    
    There is no reason to limit intel_idle's loading of ACPI tables to
    family 6.  Upcoming Intel processors are not in family 6.
    
    Below "Fixes" really means "applies cleanly until".
    That syntax commit didn't change the previous logic,
    but shows this patch applies back 5-years.
    
    Fixes: 4a9f45a0533f ("intel_idle: Convert to new X86 CPU match macros")
    Signed-off-by: Len Brown <[email protected]>
    Link: https://patch.msgid.link/06101aa4fe784e5b0be1cb2c0bdd9afcf16bd9d4.1754681697.git.len.brown@intel.com
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
io_uring/net: commit partial buffers on retry [+ + +]
Author: Jens Axboe <[email protected]>
Date:   Tue Aug 12 08:30:11 2025 -0600

    io_uring/net: commit partial buffers on retry
    
    Commit 41b70df5b38bc80967d2e0ed55cc3c3896bba781 upstream.
    
    Ring provided buffers are potentially only valid within the single
    execution context in which they were acquired. io_uring deals with this
    and invalidates them on retry. But on the networking side, if
    MSG_WAITALL is set, or if the socket is of the streaming type and too
    little was processed, then it will hang on to the buffer rather than
    recycle or commit it. This is problematic for two reasons:
    
    1) If someone unregisters the provided buffer ring before a later retry,
       then the req->buf_list will no longer be valid.
    
    2) If multiple sockers are using the same buffer group, then multiple
       receives can consume the same memory. This can cause data corruption
       in the application, as either receive could land in the same
       userspace buffer.
    
    Fix this by disallowing partial retries from pinning a provided buffer
    across multiple executions, if ring provided buffers are used.
    
    Cc: [email protected]
    Reported-by: pt x <[email protected]>
    Fixes: c56e022c0a27 ("io_uring: add support for user mapped provided buffer ring")
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
io_uring: don't use int for ABI [+ + +]
Author: Pavel Begunkov <[email protected]>
Date:   Wed Jul 2 21:31:54 2025 +0100

    io_uring: don't use int for ABI
    
    commit cf73d9970ea4f8cace5d8f02d2565a2723003112 upstream.
    
    __kernel_rwf_t is defined as int, the actual size of which is
    implementation defined. It won't go well if some compiler / archs
    ever defines it as i64, so replace it with __u32, hoping that
    there is no one using i16 for it.
    
    Cc: [email protected]
    Fixes: 2b188cc1bb857 ("Add io_uring IO interface")
    Signed-off-by: Pavel Begunkov <[email protected]>
    Link: https://lore.kernel.org/r/47c666c4ee1df2018863af3a2028af18feef11ed.1751412511.git.asml.silence@gmail.com
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
 
iommu/amd: Avoid stack buffer overflow from kernel cmdline [+ + +]
Author: Kees Cook <[email protected]>
Date:   Mon Aug 4 08:40:27 2025 -0700

    iommu/amd: Avoid stack buffer overflow from kernel cmdline
    
    [ Upstream commit 8503d0fcb1086a7cfe26df67ca4bd9bd9e99bdec ]
    
    While the kernel command line is considered trusted in most environments,
    avoid writing 1 byte past the end of "acpiid" if the "str" argument is
    maximum length.
    
    Reported-by: Simcha Kosman <[email protected]>
    Closes: https://lore.kernel.org/all/AS8P193MB2271C4B24BCEDA31830F37AE84A52@AS8P193MB2271.EURP193.PROD.OUTLOOK.COM
    Fixes: b6b26d86c61c ("iommu/amd: Add a length limitation for the ivrs_acpihid command-line parameter")
    Signed-off-by: Kees Cook <[email protected]>
    Reviewed-by: Ankit Soni <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Joerg Roedel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
iommu/arm-smmu-qcom: Add SM6115 MDSS compatible [+ + +]
Author: Alexey Klimov <[email protected]>
Date:   Fri Jun 13 18:32:38 2025 +0100

    iommu/arm-smmu-qcom: Add SM6115 MDSS compatible
    
    commit f7fa8520f30373ce99c436c4d57c76befdacbef3 upstream.
    
    Add the SM6115 MDSS compatible to clients compatible list, as it also
    needs that workaround.
    Without this workaround, for example, QRB4210 RB2 which is based on
    SM4250/SM6115 generates a lot of smmu unhandled context faults during
    boot:
    
    arm_smmu_context_fault: 116854 callbacks suppressed
    arm-smmu c600000.iommu: Unhandled context fault: fsr=0x402,
    iova=0x5c0ec600, fsynr=0x320021, cbfrsynra=0x420, cb=5
    arm-smmu c600000.iommu: FSR    = 00000402 [Format=2 TF], SID=0x420
    arm-smmu c600000.iommu: FSYNR0 = 00320021 [S1CBNDX=50 PNU PLVL=1]
    arm-smmu c600000.iommu: Unhandled context fault: fsr=0x402,
    iova=0x5c0d7800, fsynr=0x320021, cbfrsynra=0x420, cb=5
    arm-smmu c600000.iommu: FSR    = 00000402 [Format=2 TF], SID=0x420
    
    and also failed initialisation of lontium lt9611uxc, gpu and dpu is
    observed:
    (binding MDSS components triggered by lt9611uxc have failed)
    
     ------------[ cut here ]------------
     !aspace
     WARNING: CPU: 6 PID: 324 at drivers/gpu/drm/msm/msm_gem_vma.c:130 msm_gem_vma_init+0x150/0x18c [msm]
     Modules linked in: ... (long list of modules)
     CPU: 6 UID: 0 PID: 324 Comm: (udev-worker) Not tainted 6.15.0-03037-gaacc73ceeb8b #4 PREEMPT
     Hardware name: Qualcomm Technologies, Inc. QRB4210 RB2 (DT)
     pstate: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
     pc : msm_gem_vma_init+0x150/0x18c [msm]
     lr : msm_gem_vma_init+0x150/0x18c [msm]
     sp : ffff80008144b280
                    ...
     Call trace:
      msm_gem_vma_init+0x150/0x18c [msm] (P)
      get_vma_locked+0xc0/0x194 [msm]
      msm_gem_get_and_pin_iova_range+0x4c/0xdc [msm]
      msm_gem_kernel_new+0x48/0x160 [msm]
      msm_gpu_init+0x34c/0x53c [msm]
      adreno_gpu_init+0x1b0/0x2d8 [msm]
      a6xx_gpu_init+0x1e8/0x9e0 [msm]
      adreno_bind+0x2b8/0x348 [msm]
      component_bind_all+0x100/0x230
      msm_drm_bind+0x13c/0x3d0 [msm]
      try_to_bring_up_aggregate_device+0x164/0x1d0
      __component_add+0xa4/0x174
      component_add+0x14/0x20
      dsi_dev_attach+0x20/0x34 [msm]
      dsi_host_attach+0x58/0x98 [msm]
      devm_mipi_dsi_attach+0x34/0x90
      lt9611uxc_attach_dsi.isra.0+0x94/0x124 [lontium_lt9611uxc]
      lt9611uxc_probe+0x540/0x5fc [lontium_lt9611uxc]
      i2c_device_probe+0x148/0x2a8
      really_probe+0xbc/0x2c0
      __driver_probe_device+0x78/0x120
      driver_probe_device+0x3c/0x154
      __driver_attach+0x90/0x1a0
      bus_for_each_dev+0x68/0xb8
      driver_attach+0x24/0x30
      bus_add_driver+0xe4/0x208
      driver_register+0x68/0x124
      i2c_register_driver+0x48/0xcc
      lt9611uxc_driver_init+0x20/0x1000 [lontium_lt9611uxc]
      do_one_initcall+0x60/0x1d4
      do_init_module+0x54/0x1fc
      load_module+0x1748/0x1c8c
      init_module_from_file+0x74/0xa0
      __arm64_sys_finit_module+0x130/0x2f8
      invoke_syscall+0x48/0x104
      el0_svc_common.constprop.0+0xc0/0xe0
      do_el0_svc+0x1c/0x28
      el0_svc+0x2c/0x80
      el0t_64_sync_handler+0x10c/0x138
      el0t_64_sync+0x198/0x19c
     ---[ end trace 0000000000000000 ]---
     msm_dpu 5e01000.display-controller: [drm:msm_gpu_init [msm]] *ERROR* could not allocate memptrs: -22
     msm_dpu 5e01000.display-controller: failed to load adreno gpu
     platform a400000.remoteproc:glink-edge:apr:service@7:dais: Adding to iommu group 19
     msm_dpu 5e01000.display-controller: failed to bind 5900000.gpu (ops a3xx_ops [msm]): -22
     msm_dpu 5e01000.display-controller: adev bind failed: -22
     lt9611uxc 0-002b: failed to attach dsi to host
     lt9611uxc 0-002b: probe with driver lt9611uxc failed with error -22
    
    Suggested-by: Bjorn Andersson <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Fixes: 3581b7062cec ("drm/msm/disp/dpu1: add support for display on SM6115")
    Cc: [email protected]
    Signed-off-by: Alexey Klimov <[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]>

 
iommufd: Prevent ALIGN() overflow [+ + +]
Author: Jason Gunthorpe <[email protected]>
Date:   Thu Jul 17 11:46:55 2025 -0300

    iommufd: Prevent ALIGN() overflow
    
    commit b42497e3c0e74db061eafad41c0cd7243c46436b upstream.
    
    When allocating IOVA the candidate range gets aligned to the target
    alignment. If the range is close to ULONG_MAX then the ALIGN() can
    wrap resulting in a corrupted iova.
    
    Open code the ALIGN() using get_add_overflow() to prevent this.
    This simplifies the checks as we don't need to check for length earlier
    either.
    
    Consolidate the two copies of this code under a single helper.
    
    This bug would allow userspace to create a mapping that overlaps with some
    other mapping or a reserved range.
    
    Cc: [email protected]
    Fixes: 51fe6141f0f6 ("iommufd: Data structure to provide IOVA to PFN mapping")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Yi Liu <[email protected]>
    Reviewed-by: Nicolin Chen <[email protected]>
    Link: https://patch.msgid.link/all/[email protected]/
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iommufd: Report unmapped bytes in the error path of iopt_unmap_iova_range [+ + +]
Author: Nicolin Chen <[email protected]>
Date:   Wed Jul 9 22:58:53 2025 -0700

    iommufd: Report unmapped bytes in the error path of iopt_unmap_iova_range
    
    commit b23e09f9997771b4b739c1c694fa832b5fa2de02 upstream.
    
    There are callers that read the unmapped bytes even when rc != 0. Thus, do
    not forget to report it in the error path too.
    
    Fixes: 8d40205f6093 ("iommufd: Add kAPI toward external drivers for kernel access")
    Link: https://patch.msgid.link/r/e2b61303bbc008ba1a4e2d7c2a2894749b59fdac.1752126748.git.nicolinc@nvidia.com
    Cc: [email protected]
    Reviewed-by: Kevin Tian <[email protected]>
    Reviewed-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Nicolin Chen <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ionic: clean dbpage in de-init [+ + +]
Author: Shannon Nelson <[email protected]>
Date:   Mon Jun 9 14:46:43 2025 -0700

    ionic: clean dbpage in de-init
    
    [ Upstream commit c9080abea1e69b8b1408ec7dec0acdfdc577a3e2 ]
    
    Since the kern_dbpage gets set up in ionic_lif_init() and that
    function's error path will clean it if needed, the kern_dbpage
    on teardown should be cleaned in ionic_lif_deinit(), not in
    ionic_lif_free().  As it is currently we get a double call
    to iounmap() on kern_dbpage if the PCI ionic fails setting up
    the lif.  One example of this is when firmware isn't responding
    to AdminQ requests and ionic's first AdminQ call fails to
    setup the NotifyQ.
    
    Signed-off-by: Shannon Nelson <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Reviewed-by: Joe Damato <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
iosys-map: Fix undefined behavior in iosys_map_clear() [+ + +]
Author: Nitin Gote <[email protected]>
Date:   Fri Jul 18 16:20:51 2025 +0530

    iosys-map: Fix undefined behavior in iosys_map_clear()
    
    [ Upstream commit 5634c8cb298a7146b4e38873473e280b50e27a2c ]
    
    The current iosys_map_clear() implementation reads the potentially
    uninitialized 'is_iomem' boolean field to decide which union member
    to clear. This causes undefined behavior when called on uninitialized
    structures, as 'is_iomem' may contain garbage values like 0xFF.
    
    UBSAN detects this as:
        UBSAN: invalid-load in include/linux/iosys-map.h:267
        load of value 255 is not a valid value for type '_Bool'
    
    Fix by unconditionally clearing the entire structure with memset(),
    eliminating the need to read uninitialized data and ensuring all
    fields are set to known good values.
    
    Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14639
    Fixes: 01fd30da0474 ("dma-buf: Add struct dma-buf-map for storing struct dma_buf.vaddr_ptr")
    Signed-off-by: Nitin Gote <[email protected]>
    Reviewed-by: Andi Shyti <[email protected]>
    Reviewed-by: Thomas Zimmermann <[email protected]>
    Signed-off-by: Thomas Zimmermann <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
ipmi: Fix strcpy source and destination the same [+ + +]
Author: Corey Minyard <[email protected]>
Date:   Fri Jun 13 19:06:26 2025 -0500

    ipmi: Fix strcpy source and destination the same
    
    [ Upstream commit 8ffcb7560b4a15faf821df95e3ab532b2b020f8c ]
    
    The source and destination of some strcpy operations was the same.
    Split out the part of the operations that needed to be done for those
    particular calls so the unnecessary copy wasn't done.
    
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Signed-off-by: Corey Minyard <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ipmi: Use dev_warn_ratelimited() for incorrect message warnings [+ + +]
Author: Breno Leitao <[email protected]>
Date:   Thu Jul 10 05:57:26 2025 -0700

    ipmi: Use dev_warn_ratelimited() for incorrect message warnings
    
    [ Upstream commit ec50ec378e3fd83bde9b3d622ceac3509a60b6b5 ]
    
    During BMC firmware upgrades on live systems, the ipmi_msghandler
    generates excessive "BMC returned incorrect response" warnings
    while the BMC is temporarily offline. This can flood system logs
    in large deployments.
    
    Replace dev_warn() with dev_warn_ratelimited() to throttle these
    warnings and prevent log spam during BMC maintenance operations.
    
    Signed-off-by: Breno Leitao <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Corey Minyard <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ipv6: mcast: Check inet6_dev->dead under idev->mc_lock in __ipv6_dev_mc_inc(). [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Wed Jul 2 16:01:20 2025 -0700

    ipv6: mcast: Check inet6_dev->dead under idev->mc_lock in __ipv6_dev_mc_inc().
    
    [ Upstream commit dbd40f318cf2f59759bd170c401adc20ba360a3e ]
    
    Since commit 63ed8de4be81 ("mld: add mc_lock for protecting
    per-interface mld data"), every multicast resource is protected
    by inet6_dev->mc_lock.
    
    RTNL is unnecessary in terms of protection but still needed for
    synchronisation between addrconf_ifdown() and __ipv6_dev_mc_inc().
    
    Once we removed RTNL, there would be a race below, where we could
    add a multicast address to a dead inet6_dev.
    
      CPU1                            CPU2
      ====                            ====
      addrconf_ifdown()               __ipv6_dev_mc_inc()
                                        if (idev->dead) <-- false
        dead = true                       return -ENODEV;
        ipv6_mc_destroy_dev() / ipv6_mc_down()
          mutex_lock(&idev->mc_lock)
          ...
          mutex_unlock(&idev->mc_lock)
                                        mutex_lock(&idev->mc_lock)
                                        ...
                                        mutex_unlock(&idev->mc_lock)
    
    The race window can be easily closed by checking inet6_dev->dead
    under inet6_dev->mc_lock in __ipv6_dev_mc_inc() as addrconf_ifdown()
    will acquire it after marking inet6_dev dead.
    
    Let's check inet6_dev->dead under mc_lock in __ipv6_dev_mc_inc().
    
    Note that now __ipv6_dev_mc_inc() no longer depends on RTNL and
    we can remove ASSERT_RTNL() there and the RTNL comment above
    addrconf_join_solict().
    
    Signed-off-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]>

ipv6: sr: Fix MAC comparison to be constant-time [+ + +]
Author: Eric Biggers <[email protected]>
Date:   Mon Aug 18 13:27:24 2025 -0700

    ipv6: sr: Fix MAC comparison to be constant-time
    
    commit a458b2902115b26a25d67393b12ddd57d1216aaa upstream.
    
    To prevent timing attacks, MACs need to be compared in constant time.
    Use the appropriate helper function for this.
    
    Fixes: bf355b8d2c30 ("ipv6: sr: add core files for SR HMAC support")
    Cc: [email protected]
    Signed-off-by: Eric Biggers <[email protected]>
    Reviewed-by: Andrea Mayer <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ipv6: sr: validate HMAC algorithm ID in seg6_hmac_info_add [+ + +]
Author: Minhong He <[email protected]>
Date:   Fri Aug 15 14:38:45 2025 +0800

    ipv6: sr: validate HMAC algorithm ID in seg6_hmac_info_add
    
    [ Upstream commit 84967deee9d9870b15bc4c3acb50f1d401807902 ]
    
    The seg6_genl_sethmac() directly uses the algorithm ID provided by the
    userspace without verifying whether it is an HMAC algorithm supported
    by the system.
    If an unsupported HMAC algorithm ID is configured, packets using SRv6 HMAC
    will be dropped during encapsulation or decapsulation.
    
    Fixes: 4f4853dc1c9c ("ipv6: sr: implement API to control SR HMAC structure")
    Signed-off-by: Minhong He <[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]>

 
ixgbe: xsk: resolve the negative overflow of budget in ixgbe_xmit_zc [+ + +]
Author: Jason Xing <[email protected]>
Date:   Tue Aug 19 15:19:57 2025 -0700

    ixgbe: xsk: resolve the negative overflow of budget in ixgbe_xmit_zc
    
    [ Upstream commit 4d4d9ef9dfee877d494e5418f68a1016ef08cad6 ]
    
    Resolve the budget negative overflow which leads to returning true in
    ixgbe_xmit_zc even when the budget of descs are thoroughly consumed.
    
    Before this patch, when the budget is decreased to zero and finishes
    sending the last allowed desc in ixgbe_xmit_zc, it will always turn back
    and enter into the while() statement to see if it should keep processing
    packets, but in the meantime it unexpectedly decreases the value again to
    'unsigned int (0--)', namely, UINT_MAX. Finally, the ixgbe_xmit_zc returns
    true, showing 'we complete cleaning the budget'. That also means
    'clean_complete = true' in ixgbe_poll.
    
    The true theory behind this is if that budget number of descs are consumed,
    it implies that we might have more descs to be done. So we should return
    false in ixgbe_xmit_zc to tell napi poll to find another chance to start
    polling to handle the rest of descs. On the contrary, returning true here
    means job done and we know we finish all the possible descs this time and
    we don't intend to start a new napi poll.
    
    It is apparently against our expectations. Please also see how
    ixgbe_clean_tx_irq() handles the problem: it uses do..while() statement
    to make sure the budget can be decreased to zero at most and the negative
    overflow never happens.
    
    The patch adds 'likely' because we rarely would not hit the loop condition
    since the standard budget is 256.
    
    Fixes: 8221c5eba8c1 ("ixgbe: add AF_XDP zero-copy Tx support")
    Signed-off-by: Jason Xing <[email protected]>
    Reviewed-by: Larysa Zaremba <[email protected]>
    Reviewed-by: Paul Menzel <[email protected]>
    Reviewed-by: Aleksandr Loktionov <[email protected]>
    Tested-by: Priya Singh <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
jbd2: prevent softlockup in jbd2_log_do_checkpoint() [+ + +]
Author: Baokun Li <[email protected]>
Date:   Tue Aug 12 14:37:52 2025 +0800

    jbd2: prevent softlockup in jbd2_log_do_checkpoint()
    
    commit 9d98cf4632258720f18265a058e62fde120c0151 upstream.
    
    Both jbd2_log_do_checkpoint() and jbd2_journal_shrink_checkpoint_list()
    periodically release j_list_lock after processing a batch of buffers to
    avoid long hold times on the j_list_lock. However, since both functions
    contend for j_list_lock, the combined time spent waiting and processing
    can be significant.
    
    jbd2_journal_shrink_checkpoint_list() explicitly calls cond_resched() when
    need_resched() is true to avoid softlockups during prolonged operations.
    But jbd2_log_do_checkpoint() only exits its loop when need_resched() is
    true, relying on potentially sleeping functions like __flush_batch() or
    wait_on_buffer() to trigger rescheduling. If those functions do not sleep,
    the kernel may hit a softlockup.
    
    watchdog: BUG: soft lockup - CPU#3 stuck for 156s! [kworker/u129:2:373]
    CPU: 3 PID: 373 Comm: kworker/u129:2 Kdump: loaded Not tainted 6.6.0+ #10
    Hardware name: Huawei TaiShan 2280 /BC11SPCD, BIOS 1.27 06/13/2017
    Workqueue: writeback wb_workfn (flush-7:2)
    pstate: 20000005 (nzCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    pc : native_queued_spin_lock_slowpath+0x358/0x418
    lr : jbd2_log_do_checkpoint+0x31c/0x438 [jbd2]
    Call trace:
     native_queued_spin_lock_slowpath+0x358/0x418
     jbd2_log_do_checkpoint+0x31c/0x438 [jbd2]
     __jbd2_log_wait_for_space+0xfc/0x2f8 [jbd2]
     add_transaction_credits+0x3bc/0x418 [jbd2]
     start_this_handle+0xf8/0x560 [jbd2]
     jbd2__journal_start+0x118/0x228 [jbd2]
     __ext4_journal_start_sb+0x110/0x188 [ext4]
     ext4_do_writepages+0x3dc/0x740 [ext4]
     ext4_writepages+0xa4/0x190 [ext4]
     do_writepages+0x94/0x228
     __writeback_single_inode+0x48/0x318
     writeback_sb_inodes+0x204/0x590
     __writeback_inodes_wb+0x54/0xf8
     wb_writeback+0x2cc/0x3d8
     wb_do_writeback+0x2e0/0x2f8
     wb_workfn+0x80/0x2a8
     process_one_work+0x178/0x3e8
     worker_thread+0x234/0x3b8
     kthread+0xf0/0x108
     ret_from_fork+0x10/0x20
    
    So explicitly call cond_resched() in jbd2_log_do_checkpoint() to avoid
    softlockup.
    
    Cc: [email protected]
    Signed-off-by: Baokun Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
jfs: Regular file corruption check [+ + +]
Author: Edward Adam Davis <[email protected]>
Date:   Wed Jun 4 14:48:43 2025 +0800

    jfs: Regular file corruption check
    
    [ Upstream commit 2d04df8116426b6c7b9f8b9b371250f666a2a2fb ]
    
    The reproducer builds a corrupted file on disk with a negative i_size value.
    Add a check when opening this file to avoid subsequent operation failures.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=630f6d40b3ccabc8e96e
    Tested-by: [email protected]
    Signed-off-by: Edward Adam Davis <[email protected]>
    Signed-off-by: Dave Kleikamp <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

jfs: truncate good inode pages when hard link is 0 [+ + +]
Author: Lizhi Xu <[email protected]>
Date:   Fri Jun 13 11:05:34 2025 +0800

    jfs: truncate good inode pages when hard link is 0
    
    [ Upstream commit 2d91b3765cd05016335cd5df5e5c6a29708ec058 ]
    
    The fileset value of the inode copy from the disk by the reproducer is
    AGGR_RESERVED_I. When executing evict, its hard link number is 0, so its
    inode pages are not truncated. This causes the bugon to be triggered when
    executing clear_inode() because nrpages is greater than 0.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=6e516bb515d93230bc7b
    Signed-off-by: Lizhi Xu <[email protected]>
    Signed-off-by: Dave Kleikamp <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

jfs: upper bound check of tree index in dbAllocAG [+ + +]
Author: Arnaud Lecomte <[email protected]>
Date:   Thu Apr 24 00:13:51 2025 +0200

    jfs: upper bound check of tree index in dbAllocAG
    
    [ Upstream commit c214006856ff52a8ff17ed8da52d50601d54f9ce ]
    
    When computing the tree index in dbAllocAG, we never check if we are
    out of bounds realative to the size of the stree.
    This could happen in a scenario where the filesystem metadata are
    corrupted.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=cffd18309153948f3c3e
    Tested-by: [email protected]
    Signed-off-by: Arnaud Lecomte <[email protected]>
    Signed-off-by: Dave Kleikamp <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
kbuild: userprogs: use correct linker when mixing clang and GNU ld [+ + +]
Author: Thomas Weißschuh <[email protected]>
Date:   Thu Aug 21 11:29:49 2025 -0700

    kbuild: userprogs: use correct linker when mixing clang and GNU ld
    
    commit 936599ca514973d44a766b7376c6bbdc96b6a8cc upstream.
    
    The userprogs infrastructure does not expect clang being used with GNU ld
    and in that case uses /usr/bin/ld for linking, not the configured $(LD).
    This fallback is problematic as it will break when cross-compiling.
    Mixing clang and GNU ld is used for example when building for SPARC64,
    as ld.lld is not sufficient; see Documentation/kbuild/llvm.rst.
    
    Relax the check around --ld-path so it gets used for all linkers.
    
    Fixes: dfc1b168a8c4 ("kbuild: userprogs: use correct lld when linking through clang")
    Cc: [email protected]
    Signed-off-by: Thomas Weißschuh <[email protected]>
    Reviewed-by: Nathan Chancellor <[email protected]>
    Signed-off-by: Masahiro Yamada <[email protected]>
    [nathan: Work around wrapping '--ld-path' in cc-option in older stable
             branches due to older minimum LLVM version]
    Signed-off-by: Nathan Chancellor <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
kconfig: gconf: avoid hardcoding model2 in on_treeview2_cursor_changed() [+ + +]
Author: Masahiro Yamada <[email protected]>
Date:   Wed Jun 25 00:05:20 2025 +0900

    kconfig: gconf: avoid hardcoding model2 in on_treeview2_cursor_changed()
    
    [ Upstream commit cae9cdbcd9af044810bcceeb43a87accca47c71d ]
    
    The on_treeview2_cursor_changed() handler is connected to both the left
    and right tree views, but it hardcodes model2 (the GtkTreeModel of the
    right tree view). This is incorrect. Get the associated model from the
    view.
    
    Signed-off-by: Masahiro Yamada <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

kconfig: gconf: fix potential memory leak in renderer_edited() [+ + +]
Author: Masahiro Yamada <[email protected]>
Date:   Wed Jun 25 00:04:55 2025 +0900

    kconfig: gconf: fix potential memory leak in renderer_edited()
    
    [ Upstream commit f72ed4c6a375e52a3f4b75615e4a89d29d8acea7 ]
    
    If gtk_tree_model_get_iter() fails, gtk_tree_path_free() is not called.
    
    Signed-off-by: Masahiro Yamada <[email protected]>
    Acked-by: Randy Dunlap <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

kconfig: lxdialog: fix 'space' to (de)select options [+ + +]
Author: Yann E. MORIN <[email protected]>
Date:   Thu Nov 14 00:53:32 2013 +0100

    kconfig: lxdialog: fix 'space' to (de)select options
    
    [ Upstream commit 694174f94ebeeb5ec5cc0e9de9b40c82057e1d95 ]
    
    In case a menu has comment without letters/numbers (eg. characters
    matching the regexp '^[^[:alpha:][:digit:]]+$', for example - or *),
    hitting space will cycle through those comments, rather than
    selecting/deselecting the currently-highlighted option.
    
    This is the behaviour of hitting any letter/digit: jump to the next
    option which prompt starts with that letter. The only letters that
    do not behave as such are 'y' 'm' and 'n'. Prompts that start with
    one of those three letters are instead matched on the first letter
    that is not 'y', 'm' or 'n'.
    
    Fix that by treating 'space' as we treat y/m/n, ie. as an action key,
    not as shortcut to jump to  prompt.
    
    Signed-off-by: Yann E. MORIN <[email protected]>
    Signed-off-by: Peter Korsgaard <[email protected]>
    Signed-off-by: Cherniaev Andrei <[email protected]>
    [masahiro: took from Buildroot, adjusted the commit subject]
    Signed-off-by: Masahiro Yamada <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

kconfig: lxdialog: replace strcpy() with strncpy() in inputbox.c [+ + +]
Author: Suchit Karunakaran <[email protected]>
Date:   Sun Jul 27 22:14:33 2025 +0530

    kconfig: lxdialog: replace strcpy() with strncpy() in inputbox.c
    
    [ Upstream commit 5ac726653a1029a2eccba93bbe59e01fc9725828 ]
    
    strcpy() performs no bounds checking and can lead to buffer overflows if
    the input string exceeds the destination buffer size. This patch replaces
    it with strncpy(), and null terminates the input string.
    
    Signed-off-by: Suchit Karunakaran <[email protected]>
    Reviewed-by: Nicolas Schier <[email protected]>
    Signed-off-by: Masahiro Yamada <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

kconfig: nconf: Ensure null termination where strncpy is used [+ + +]
Author: Shankari Anand <[email protected]>
Date:   Thu Jun 26 00:36:54 2025 +0530

    kconfig: nconf: Ensure null termination where strncpy is used
    
    [ Upstream commit f468992936894c9ce3b1659cf38c230d33b77a16 ]
    
    strncpy() does not guarantee null-termination if the source string is
    longer than the destination buffer.
    
    Ensure the buffer is explicitly null-terminated to prevent potential
    string overflows or undefined behavior.
    
    Signed-off-by: Shankari Anand <[email protected]>
    Signed-off-by: Masahiro Yamada <[email protected]>
    Acked-by: Randy Dunlap <[email protected]>
    Tested-by: Randy Dunlap <[email protected]>
    Tested-by: Nicolas Schier <[email protected]>
    Acked-by: Nicolas Schier <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
kselftest/arm64: Specify SVE data when testing VL set in sve-ptrace [+ + +]
Author: Mark Brown <[email protected]>
Date:   Mon Jun 9 16:25:33 2025 +0100

    kselftest/arm64: Specify SVE data when testing VL set in sve-ptrace
    
    [ Upstream commit 9e8ebfe677f9101bbfe1f75d548a5aec581e8213 ]
    
    Since f916dd32a943 ("arm64/fpsimd: ptrace: Mandate SVE payload for
    streaming-mode state") we reject attempts to write to the streaming mode
    regset even if there is no register data supplied, causing the tests for
    setting vector lengths and setting SVE_VL_INHERIT in sve-ptrace to
    spuriously fail. Set the flag to avoid the issue, we still support not
    supplying register data.
    
    Acked-by: Mark Rutland <[email protected]>
    Signed-off-by: Mark Brown <[email protected]>
    Link: https://lore.kernel.org/r/20250609-kselftest-arm64-ssve-fixups-v2-3-998fcfa6f240@kernel.org
    Signed-off-by: Catalin Marinas <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ksmbd: extend the connection limiting mechanism to support IPv6 [+ + +]
Author: Namjae Jeon <[email protected]>
Date:   Sun Aug 17 09:48:40 2025 +0900

    ksmbd: extend the connection limiting mechanism to support IPv6
    
    commit c0d41112f1a5828c194b59cca953114bc3776ef2 upstream.
    
    Update the connection tracking logic to handle both IPv4 and IPv6
    address families.
    
    Cc: [email protected]
    Fixes: e6bb91939740 ("ksmbd: limit repeated connections from clients with the same IP")
    Signed-off-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ksmbd: fix refcount leak causing resource not released [+ + +]
Author: Ziyan Xu <[email protected]>
Date:   Sat Aug 16 10:20:05 2025 +0900

    ksmbd: fix refcount leak causing resource not released
    
    commit 89bb430f621124af39bb31763c4a8b504c9651e2 upstream.
    
    When ksmbd_conn_releasing(opinfo->conn) returns true,the refcount was not
    decremented properly, causing a refcount leak that prevents the count from
    reaching zero and the memory from being released.
    
    Cc: [email protected]
    Signed-off-by: Ziyan Xu <[email protected]>
    Signed-off-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ktest.pl: Prevent recursion of default variable options [+ + +]
Author: Steven Rostedt <[email protected]>
Date:   Fri Jul 18 16:18:44 2025 -0400

    ktest.pl: Prevent recursion of default variable options
    
    [ Upstream commit 61f7e318e99d3b398670518dd3f4f8510d1800fc ]
    
    If a default variable contains itself, do not recurse on it.
    
    For example:
    
      ADD_CONFIG := ${CONFIG_DIR}/temp_config
      DEFAULTS
      ADD_CONFIG = ${CONFIG_DIR}/default_config ${ADD_CONFIG}
    
    The above works because the temp variable ADD_CONFIG (is a temp because it
    is created with ":=") is already defined, it will be substituted in the
    variable option. But if it gets commented out:
    
      # ADD_CONFIG := ${CONFIG_DIR}/temp_config
      DEFAULTS
      ADD_CONFIG = ${CONFIG_DIR}/default_config ${ADD_CONFIG}
    
    Then the above will go into a recursive loop where ${ADD_CONFIG} will
    get replaced with the current definition of ADD_CONFIG which contains the
    ${ADD_CONFIG} and that will also try to get converted. ktest.pl will error
    after 100 attempts of recursion and fail.
    
    When replacing a variable with the default variable, if the default
    variable contains itself, do not replace it.
    
    Cc: "John Warthog9 Hawley" <[email protected]>
    Cc: Dhaval Giani <[email protected]>
    Cc: Greg KH <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Steven Rostedt <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
KVM: arm64: Fix kernel BUG() due to bad backport of FPSIMD/SVE/SME fix [+ + +]
Author: Will Deacon <[email protected]>
Date:   Fri Aug 22 15:04:02 2025 +0100

    KVM: arm64: Fix kernel BUG() due to bad backport of FPSIMD/SVE/SME fix
    
    Upstream commit fbc7e61195e2 ("KVM: arm64: Unconditionally save+flush
    host FPSIMD/SVE/SME state") relies on interrupts being disabled during
    fpsimd_save_and_flush_cpu_state() so that a softirq cannot be taken
    while the host floating point context is being saved and potentially try
    to use kernel-mode NEON.
    
    Unfortunately, stable kernels without 9b19700e623f ("arm64: fpsimd: Drop
    unneeded 'busy' flag") leave interrupts enabled in
    fpsimd_save_and_flush_cpu_state() and so the BUG_ON(!may_use_simd()) in
    kernel_neon_begin() has been observed to trigger in real-world usage:
    
     |  kernel BUG at arch/arm64/kernel/fpsimd.c:1904!
     |  Internal error: Oops - BUG: 00000000f2000800 [#1] PREEMPT SMP
     |
     |  Call trace:
     |   kernel_neon_begin+0xdc/0x12c
     |   ...
     |   crypto_aead_decrypt+0x5c/0x6c
     |   seqiv_aead_decrypt+0x88/0x9c
     |   crypto_aead_decrypt+0x5c/0x6c
     |   esp_input+0x280/0x364
     |   xfrm_input+0x6ac/0x16f8
     |   ...
     |   net_rx_action+0x13c/0x31c
     |   handle_softirqs+0x124/0x3d0
     |   __do_softirq+0x14/0x20
     |   ____do_softirq+0x10/0x20
     |   call_on_irq_stack+0x3c/0x74
     |   do_softirq_own_stack+0x1c/0x2c
     |   __irq_exit_rcu+0x54/0xb4
     |   irq_exit_rcu+0x10/0x1c
     |   el1_interrupt+0x38/0x58
     |   el1h_64_irq_handler+0x18/0x24
     |   el1h_64_irq+0x68/0x6c
     |   fpsimd_save+0xe4/0x130
     |   kvm_arch_vcpu_load_fp+0x2c/0x58
     |   kvm_arch_vcpu_load+0x88/0x26c
     |   kvm_sched_in+0x2c/0x3c
    
    Given that 9b19700e623f ("arm64: fpsimd: Drop unneeded 'busy' flag") is
    not a fix in its own right, has non-trivial dependencies and is a
    reasonably invasive change to the in-kernel use of fpsimd, opt instead
    for a simple fix to use the softirq-safe {get,put}_cpu_fpsimd_context()
    helpers in fpsimd_save_and_flush_cpu_state().
    
    Cc: Ard Biesheuvel <[email protected]>
    Cc: Lee Jones <[email protected]>
    Cc: Sasha Levin <[email protected]>
    Cc: Mark Rutland <[email protected]>
    Cc: Fuad Tabba <[email protected]>
    Cc: Marc Zyngier <[email protected]>
    Cc: <[email protected]> # 5.15.y, 6.1.y and 6.6.y
    Fixes: 806d5c1e1d2e ("KVM: arm64: Unconditionally save+flush host FPSIMD/SVE/SME state") # 6.6.y
    Fixes: 04c50cc23a49 ("KVM: arm64: Unconditionally save+flush host FPSIMD/SVE/SME state") # 6.1.y
    Fixes: 5289ac43b69c ("KVM: arm64: Unconditionally save+flush host FPSIMD/SVE/SME state") # 5.15.y
    Signed-off-by: Will Deacon <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: nVMX: Check vmcs12->guest_ia32_debugctl on nested VM-Enter [+ + +]
Author: Maxim Levitsky <[email protected]>
Date:   Thu Aug 14 17:25:38 2025 -0700

    KVM: nVMX: Check vmcs12->guest_ia32_debugctl on nested VM-Enter
    
    [ Upstream commit 095686e6fcb4150f0a55b1a25987fad3d8af58d6 ]
    
    Add a consistency check for L2's guest_ia32_debugctl, as KVM only supports
    a subset of hardware functionality, i.e. KVM can't rely on hardware to
    detect illegal/unsupported values.  Failure to check the vmcs12 value
    would allow the guest to load any harware-supported value while running L2.
    
    Take care to exempt BTF and LBR from the validity check in order to match
    KVM's behavior for writes via WRMSR, but without clobbering vmcs12.  Even
    if VM_EXIT_SAVE_DEBUG_CONTROLS is set in vmcs12, L1 can reasonably expect
    that vmcs12->guest_ia32_debugctl will not be modified if writes to the MSR
    are being intercepted.
    
    Arguably, KVM _should_ update vmcs12 if VM_EXIT_SAVE_DEBUG_CONTROLS is set
    *and* writes to MSR_IA32_DEBUGCTLMSR are not being intercepted by L1, but
    that would incur non-trivial complexity and wouldn't change the fact that
    KVM's handling of DEBUGCTL is blatantly broken.  I.e. the extra complexity
    is not worth carrying.
    
    Cc: [email protected]
    Signed-off-by: Maxim Levitsky <[email protected]>
    Co-developed-by: Sean Christopherson <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: 7d0cce6cbe71 ("KVM: VMX: Wrap all accesses to IA32_DEBUGCTL with getter/setter APIs")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

KVM: nVMX: Defer SVI update to vmcs01 on EOI when L2 is active w/o VID [+ + +]
Author: Chao Gao <[email protected]>
Date:   Thu Aug 14 17:25:24 2025 -0700

    KVM: nVMX: Defer SVI update to vmcs01 on EOI when L2 is active w/o VID
    
    [ Upstream commit 04bc93cf49d16d01753b95ddb5d4f230b809a991 ]
    
    If KVM emulates an EOI for L1's virtual APIC while L2 is active, defer
    updating GUEST_INTERUPT_STATUS.SVI, i.e. the VMCS's cache of the highest
    in-service IRQ, until L1 is active, as vmcs01, not vmcs02, needs to track
    vISR.  The missed SVI update for vmcs01 can result in L1 interrupts being
    incorrectly blocked, e.g. if there is a pending interrupt with lower
    priority than the interrupt that was EOI'd.
    
    This bug only affects use cases where L1's vAPIC is effectively passed
    through to L2, e.g. in a pKVM scenario where L2 is L1's depriveleged host,
    as KVM will only emulate an EOI for L1's vAPIC if Virtual Interrupt
    Delivery (VID) is disabled in vmc12, and L1 isn't intercepting L2 accesses
    to its (virtual) APIC page (or if x2APIC is enabled, the EOI MSR).
    
    WARN() if KVM updates L1's ISR while L2 is active with VID enabled, as an
    EOI from L2 is supposed to affect L2's vAPIC, but still defer the update,
    to try to keep L1 alive.  Specifically, KVM forwards all APICv-related
    VM-Exits to L1 via nested_vmx_l1_wants_exit():
    
            case EXIT_REASON_APIC_ACCESS:
            case EXIT_REASON_APIC_WRITE:
            case EXIT_REASON_EOI_INDUCED:
                    /*
                     * The controls for "virtualize APIC accesses," "APIC-
                     * register virtualization," and "virtual-interrupt
                     * delivery" only come from vmcs12.
                     */
                    return true;
    
    Fixes: c7c9c56ca26f ("x86, apicv: add virtual interrupt delivery support")
    Cc: [email protected]
    Link: https://lore.kernel.org/kvm/[email protected]
    Reported-by: Markku Ahvenjärvi <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]
    Cc: Janne Karhunen <[email protected]>
    Signed-off-by: Chao Gao <[email protected]>
    [sean: drop request, handle in VMX, write changelog]
    Tested-by: Chao Gao <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    [sean: resolve minor syntactic conflict in lapic.h, account for lack of
           kvm_x86_call(), drop sanity check due to lack of wants_to_run]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

KVM: SVM: Set RFLAGS.IF=1 in C code, to get VMRUN out of the STI shadow [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Thu Aug 14 17:25:22 2025 -0700

    KVM: SVM: Set RFLAGS.IF=1 in C code, to get VMRUN out of the STI shadow
    
    [ Upstream commit be45bc4eff33d9a7dae84a2150f242a91a617402 ]
    
    Enable/disable local IRQs, i.e. set/clear RFLAGS.IF, in the common
    svm_vcpu_enter_exit() just after/before guest_state_{enter,exit}_irqoff()
    so that VMRUN is not executed in an STI shadow.  AMD CPUs have a quirk
    (some would say "bug"), where the STI shadow bleeds into the guest's
    intr_state field if a #VMEXIT occurs during injection of an event, i.e. if
    the VMRUN doesn't complete before the subsequent #VMEXIT.
    
    The spurious "interrupts masked" state is relatively benign, as it only
    occurs during event injection and is transient.  Because KVM is already
    injecting an event, the guest can't be in HLT, and if KVM is querying IRQ
    blocking for injection, then KVM would need to force an immediate exit
    anyways since injecting multiple events is impossible.
    
    However, because KVM copies int_state verbatim from vmcb02 to vmcb12, the
    spurious STI shadow is visible to L1 when running a nested VM, which can
    trip sanity checks, e.g. in VMware's VMM.
    
    Hoist the STI+CLI all the way to C code, as the aforementioned calls to
    guest_state_{enter,exit}_irqoff() already inform lockdep that IRQs are
    enabled/disabled, and taking a fault on VMRUN with RFLAGS.IF=1 is already
    possible.  I.e. if there's kernel code that is confused by running with
    RFLAGS.IF=1, then it's already a problem.  In practice, since GIF=0 also
    blocks NMIs, the only change in exposure to non-KVM code (relative to
    surrounding VMRUN with STI+CLI) is exception handling code, and except for
    the kvm_rebooting=1 case, all exception in the core VM-Enter/VM-Exit path
    are fatal.
    
    Use the "raw" variants to enable/disable IRQs to avoid tracing in the
    "no instrumentation" code; the guest state helpers also take care of
    tracing IRQ state.
    
    Oppurtunstically document why KVM needs to do STI in the first place.
    
    Reported-by: Doug Covelli <[email protected]>
    Closes: https://lore.kernel.org/all/CADH9ctBs1YPmE4aCfGPNBwA10cA8RuAk2gO7542DjMZgs4uzJQ@mail.gmail.com
    Fixes: f14eec0a3203 ("KVM: SVM: move more vmentry code to assembly")
    Cc: [email protected]
    Reviewed-by: Jim Mattson <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    [sean: resolve minor syntatic conflict in __svm_sev_es_vcpu_run()]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

KVM: VMX: Allow guest to set DEBUGCTL.RTM_DEBUG if RTM is supported [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Thu Aug 14 17:25:36 2025 -0700

    KVM: VMX: Allow guest to set DEBUGCTL.RTM_DEBUG if RTM is supported
    
    [ Upstream commit 17ec2f965344ee3fd6620bef7ef68792f4ac3af0 ]
    
    Let the guest set DEBUGCTL.RTM_DEBUG if RTM is supported according to the
    guest CPUID model, as debug support is supposed to be available if RTM is
    supported, and there are no known downsides to letting the guest debug RTM
    aborts.
    
    Note, there are no known bug reports related to RTM_DEBUG, the primary
    motivation is to reduce the probability of breaking existing guests when a
    future change adds a missing consistency check on vmcs12.GUEST_DEBUGCTL
    (KVM currently lets L2 run with whatever hardware supports; whoops).
    
    Note #2, KVM already emulates DR6.RTM, and doesn't restrict access to
    DR7.RTM.
    
    Fixes: 83c529151ab0 ("KVM: x86: expose Intel cpu new features (HLE, RTM) to guest")
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

KVM: VMX: Extract checking of guest's DEBUGCTL into helper [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Thu Aug 14 17:25:37 2025 -0700

    KVM: VMX: Extract checking of guest's DEBUGCTL into helper
    
    [ Upstream commit 8a4351ac302cd8c19729ba2636acfd0467c22ae8 ]
    
    Move VMX's logic to check DEBUGCTL values into a standalone helper so that
    the code can be used by nested VM-Enter to apply the same logic to the
    value being loaded from vmcs12.
    
    KVM needs to explicitly check vmcs12->guest_ia32_debugctl on nested
    VM-Enter, as hardware may support features that KVM does not, i.e. relying
    on hardware to detect invalid guest state will result in false negatives.
    Unfortunately, that means applying KVM's funky suppression of BTF and LBR
    to vmcs12 so as not to break existing guests.
    
    No functional change intended.
    
    Reviewed-by: Dapeng Mi <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: 7d0cce6cbe71 ("KVM: VMX: Wrap all accesses to IA32_DEBUGCTL with getter/setter APIs")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

KVM: VMX: Handle forced exit due to preemption timer in fastpath [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Thu Aug 14 17:25:30 2025 -0700

    KVM: VMX: Handle forced exit due to preemption timer in fastpath
    
    [ Upstream commit 11776aa0cfa7d007ad1799b1553bdcbd830e5010 ]
    
    Handle VMX preemption timer VM-Exits due to KVM forcing an exit in the
    exit fastpath, i.e. avoid calling back into handle_preemption_timer() for
    the same exit.  There is no work to be done for forced exits, as the name
    suggests the goal is purely to get control back in KVM.
    
    In addition to shaving a few cycles, this will allow cleanly separating
    handle_fastpath_preemption_timer() from handle_preemption_timer(), e.g.
    it's not immediately obvious why _apparently_ calling
    handle_fastpath_preemption_timer() twice on a "slow" exit is necessary:
    the "slow" call is necessary to handle exits from L2, which are excluded
    from the fastpath by vmx_vcpu_run().
    
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

KVM: VMX: Handle KVM-induced preemption timer exits in fastpath for L2 [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Thu Aug 14 17:25:32 2025 -0700

    KVM: VMX: Handle KVM-induced preemption timer exits in fastpath for L2
    
    [ Upstream commit 7b3d1bbf8d68d76fb21210932a5e8ed8ea80dbcc ]
    
    Eat VMX treemption timer exits in the fastpath regardless of whether L1 or
    L2 is active.  The VM-Exit is 100% KVM-induced, i.e. there is nothing
    directly related to the exit that KVM needs to do on behalf of the guest,
    thus there is no reason to wait until the slow path to do nothing.
    
    Opportunistically add comments explaining why preemption timer exits for
    emulating the guest's APIC timer need to go down the slow path.
    
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

KVM: VMX: Preserve host's DEBUGCTLMSR_FREEZE_IN_SMM while running the guest [+ + +]
Author: Maxim Levitsky <[email protected]>
Date:   Thu Aug 14 17:25:40 2025 -0700

    KVM: VMX: Preserve host's DEBUGCTLMSR_FREEZE_IN_SMM while running the guest
    
    [ Upstream commit 6b1dd26544d045f6a79e8c73572c0c0db3ef3c1a ]
    
    Set/clear DEBUGCTLMSR_FREEZE_IN_SMM in GUEST_IA32_DEBUGCTL based on the
    host's pre-VM-Enter value, i.e. preserve the host's FREEZE_IN_SMM setting
    while running the guest.  When running with the "default treatment of SMIs"
    in effect (the only mode KVM supports), SMIs do not generate a VM-Exit that
    is visible to host (non-SMM) software, and instead transitions directly
    from VMX non-root to SMM.  And critically, DEBUGCTL isn't context switched
    by hardware on SMI or RSM, i.e. SMM will run with whatever value was
    resident in hardware at the time of the SMI.
    
    Failure to preserve FREEZE_IN_SMM results in the PMU unexpectedly counting
    events while the CPU is executing in SMM, which can pollute profiling and
    potentially leak information into the guest.
    
    Check for changes in FREEZE_IN_SMM prior to every entry into KVM's inner
    run loop, as the bit can be toggled in IRQ context via IPI callback (SMP
    function call), by way of /sys/devices/cpu/freeze_on_smi.
    
    Add a field in kvm_x86_ops to communicate which DEBUGCTL bits need to be
    preserved, as FREEZE_IN_SMM is only supported and defined for Intel CPUs,
    i.e. explicitly checking FREEZE_IN_SMM in common x86 is at best weird, and
    at worst could lead to undesirable behavior in the future if AMD CPUs ever
    happened to pick up a collision with the bit.
    
    Exempt TDX vCPUs, i.e. protected guests, from the check, as the TDX Module
    owns and controls GUEST_IA32_DEBUGCTL.
    
    WARN in SVM if KVM_RUN_LOAD_DEBUGCTL is set, mostly to document that the
    lack of handling isn't a KVM bug (TDX already WARNs on any run_flag).
    
    Lastly, explicitly reload GUEST_IA32_DEBUGCTL on a VM-Fail that is missed
    by KVM but detected by hardware, i.e. in nested_vmx_restore_host_state().
    Doing so avoids the need to track host_debugctl on a per-VMCS basis, as
    GUEST_IA32_DEBUGCTL is unconditionally written by prepare_vmcs02() and
    load_vmcs12_host_state().  For the VM-Fail case, even though KVM won't
    have actually entered the guest, vcpu_enter_guest() will have run with
    vmcs02 active and thus could result in vmcs01 being run with a stale value.
    
    Cc: [email protected]
    Signed-off-by: Maxim Levitsky <[email protected]>
    Co-developed-by: Sean Christopherson <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    [sean: move vmx/main.c change to vmx/vmx.c]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

KVM: VMX: Re-enter guest in fastpath for "spurious" preemption timer exits [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Thu Aug 14 17:25:29 2025 -0700

    KVM: VMX: Re-enter guest in fastpath for "spurious" preemption timer exits
    
    [ Upstream commit e6b5d16bbd2d4c8259ad76aa33de80d561aba5f9 ]
    
    Re-enter the guest in the fast path if VMX preeemption timer VM-Exit was
    "spurious", i.e. if KVM "soft disabled" the timer by writing -1u and by
    some miracle the timer expired before any other VM-Exit occurred.  This is
    just an intermediate step to cleaning up the preemption timer handling,
    optimizing these types of spurious VM-Exits is not interesting as they are
    extremely rare/infrequent.
    
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

KVM: VMX: Wrap all accesses to IA32_DEBUGCTL with getter/setter APIs [+ + +]
Author: Maxim Levitsky <[email protected]>
Date:   Thu Aug 14 17:25:39 2025 -0700

    KVM: VMX: Wrap all accesses to IA32_DEBUGCTL with getter/setter APIs
    
    [ Upstream commit 7d0cce6cbe71af6e9c1831bff101a2b9c249c4a2 ]
    
    Introduce vmx_guest_debugctl_{read,write}() to handle all accesses to
    vmcs.GUEST_IA32_DEBUGCTL. This will allow stuffing FREEZE_IN_SMM into
    GUEST_IA32_DEBUGCTL based on the host setting without bleeding the state
    into the guest, and without needing to copy+paste the FREEZE_IN_SMM
    logic into every patch that accesses GUEST_IA32_DEBUGCTL.
    
    No functional change intended.
    
    Cc: [email protected]
    Signed-off-by: Maxim Levitsky <[email protected]>
    [sean: massage changelog, make inline, use in all prepare_vmcs02() cases]
    Reviewed-by: Dapeng Mi <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

KVM: x86/hyper-v: Skip non-canonical addresses during PV TLB flush [+ + +]
Author: Manuel Andreas <[email protected]>
Date:   Thu Aug 14 17:25:21 2025 -0700

    KVM: x86/hyper-v: Skip non-canonical addresses during PV TLB flush
    
    [ Upstream commit fa787ac07b3ceb56dd88a62d1866038498e96230 ]
    
    In KVM guests with Hyper-V hypercalls enabled, the hypercalls
    HVCALL_FLUSH_VIRTUAL_ADDRESS_LIST and HVCALL_FLUSH_VIRTUAL_ADDRESS_LIST_EX
    allow a guest to request invalidation of portions of a virtual TLB.
    For this, the hypercall parameter includes a list of GVAs that are supposed
    to be invalidated.
    
    However, when non-canonical GVAs are passed, there is currently no
    filtering in place and they are eventually passed to checked invocations of
    INVVPID on Intel / INVLPGA on AMD.  While AMD's INVLPGA silently ignores
    non-canonical addresses (effectively a no-op), Intel's INVVPID explicitly
    signals VM-Fail and ultimately triggers the WARN_ONCE in invvpid_error():
    
      invvpid failed: ext=0x0 vpid=1 gva=0xaaaaaaaaaaaaa000
      WARNING: CPU: 6 PID: 326 at arch/x86/kvm/vmx/vmx.c:482
      invvpid_error+0x91/0xa0 [kvm_intel]
      Modules linked in: kvm_intel kvm 9pnet_virtio irqbypass fuse
      CPU: 6 UID: 0 PID: 326 Comm: kvm-vm Not tainted 6.15.0 #14 PREEMPT(voluntary)
      RIP: 0010:invvpid_error+0x91/0xa0 [kvm_intel]
      Call Trace:
        vmx_flush_tlb_gva+0x320/0x490 [kvm_intel]
        kvm_hv_vcpu_flush_tlb+0x24f/0x4f0 [kvm]
        kvm_arch_vcpu_ioctl_run+0x3013/0x5810 [kvm]
    
    Hyper-V documents that invalid GVAs (those that are beyond a partition's
    GVA space) are to be ignored.  While not completely clear whether this
    ruling also applies to non-canonical GVAs, it is likely fine to make that
    assumption, and manual testing on Azure confirms "real" Hyper-V interprets
    the specification in the same way.
    
    Skip non-canonical GVAs when processing the list of address to avoid
    tripping the INVVPID failure.  Alternatively, KVM could filter out "bad"
    GVAs before inserting into the FIFO, but practically speaking the only
    downside of pushing validation to the final processing is that doing so
    is suboptimal for the guest, and no well-behaved guest will request TLB
    flushes for non-canonical addresses.
    
    Fixes: 260970862c88 ("KVM: x86: hyper-v: Handle HVCALL_FLUSH_VIRTUAL_ADDRESS_LIST{,EX} calls gently")
    Cc: [email protected]
    Signed-off-by: Manuel Andreas <[email protected]>
    Suggested-by: Vitaly Kuznetsov <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    [sean: use plain is_noncanonical_address()]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

KVM: x86: Convert vcpu_run()'s immediate exit param into a generic bitmap [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Thu Aug 14 17:25:34 2025 -0700

    KVM: x86: Convert vcpu_run()'s immediate exit param into a generic bitmap
    
    [ Upstream commit 2478b1b220c49d25cb1c3f061ec4f9b351d9a131 ]
    
    Convert kvm_x86_ops.vcpu_run()'s "force_immediate_exit" boolean parameter
    into an a generic bitmap so that similar "take action" information can be
    passed to vendor code without creating a pile of boolean parameters.
    
    This will allow dropping kvm_x86_ops.set_dr6() in favor of a new flag, and
    will also allow for adding similar functionality for re-loading debugctl
    in the active VMCS.
    
    Opportunistically massage the TDX WARN and comment to prepare for adding
    more run_flags, all of which are expected to be mutually exclusive with
    TDX, i.e. should be WARNed on.
    
    No functional change intended.
    
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    [sean: drop TDX crud, account for lack of kvm_x86_call()]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

KVM: x86: Drop kvm_x86_ops.set_dr6() in favor of a new KVM_RUN flag [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Thu Aug 14 17:25:35 2025 -0700

    KVM: x86: Drop kvm_x86_ops.set_dr6() in favor of a new KVM_RUN flag
    
    [ Upstream commit 80c64c7afea1da6a93ebe88d3d29d8a60377ef80 ]
    
    Instruct vendor code to load the guest's DR6 into hardware via a new
    KVM_RUN flag, and remove kvm_x86_ops.set_dr6(), whose sole purpose was to
    load vcpu->arch.dr6 into hardware when DR6 can be read/written directly
    by the guest.
    
    Note, TDX already WARNs on any run_flag being set, i.e. will yell if KVM
    thinks DR6 needs to be reloaded.  TDX vCPUs force KVM_DEBUGREG_AUTO_SWITCH
    and never clear the flag, i.e. should never observe KVM_RUN_LOAD_GUEST_DR6.
    
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    [sean: account for lack of vmx/main.c]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

KVM: x86: Fully defer to vendor code to decide how to force immediate exit [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Thu Aug 14 17:25:33 2025 -0700

    KVM: x86: Fully defer to vendor code to decide how to force immediate exit
    
    [ Upstream commit 0ec3d6d1f169baa7fc512ae4b78d17e7c94b7763 ]
    
    Now that vmx->req_immediate_exit is used only in the scope of
    vmx_vcpu_run(), use force_immediate_exit to detect that KVM should usurp
    the VMX preemption to force a VM-Exit and let vendor code fully handle
    forcing a VM-Exit.
    
    Opportunsitically drop __kvm_request_immediate_exit() and just have
    vendor code call smp_send_reschedule() directly.  SVM already does this
    when injecting an event while also trying to single-step an IRET, i.e.
    it's not exactly secret knowledge that KVM uses a reschedule IPI to force
    an exit.
    
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    [sean: resolve absurd conflict due to funky kvm_x86_ops.sched_in prototype]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

KVM: x86: Move handling of is_guest_mode() into fastpath exit handlers [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Thu Aug 14 17:25:31 2025 -0700

    KVM: x86: Move handling of is_guest_mode() into fastpath exit handlers
    
    [ Upstream commit bf1a49436ea37b98dd2f37c57608951d0e28eecc ]
    
    Let the fastpath code decide which exits can/can't be handled in the
    fastpath when L2 is active, e.g. when KVM generates a VMX preemption
    timer exit to forcefully regain control, there is no "work" to be done and
    so such exits can be handled in the fastpath regardless of whether L1 or
    L2 is active.
    
    Moving the is_guest_mode() check into the fastpath code also makes it
    easier to see that L2 isn't allowed to use the fastpath in most cases,
    e.g. it's not immediately obvious why handle_fastpath_preemption_timer()
    is called from the fastpath and the normal path.
    
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

KVM: x86: Plumb "force_immediate_exit" into kvm_entry() tracepoint [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Thu Aug 14 17:25:28 2025 -0700

    KVM: x86: Plumb "force_immediate_exit" into kvm_entry() tracepoint
    
    [ Upstream commit 9c9025ea003a03f967affd690f39b4ef3452c0f5 ]
    
    Annotate the kvm_entry() tracepoint with "immediate exit" when KVM is
    forcing a VM-Exit immediately after VM-Enter, e.g. when KVM wants to
    inject an event but needs to first complete some other operation.
    Knowing that KVM is (or isn't) forcing an exit is useful information when
    debugging issues related to event injection.
    
    Suggested-by: Maxim Levitsky <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

KVM: x86: Plumb in the vCPU to kvm_x86_ops.hwapic_isr_update() [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Thu Aug 14 17:25:23 2025 -0700

    KVM: x86: Plumb in the vCPU to kvm_x86_ops.hwapic_isr_update()
    
    [ Upstream commit 76bce9f10162cd4b36ac0b7889649b22baf70ebd ]
    
    Pass the target vCPU to the hwapic_isr_update() vendor hook so that VMX
    can defer the update until after nested VM-Exit if an EOI for L1's vAPIC
    occurs while L2 is active.
    
    Note, commit d39850f57d21 ("KVM: x86: Drop @vcpu parameter from
    kvm_x86_ops.hwapic_isr_update()") removed the parameter with the
    justification that doing so "allows for a decent amount of (future)
    cleanup in the APIC code", but it's not at all clear what cleanup was
    intended, or if it was ever realized.
    
    No functional change intended.
    
    Cc: [email protected]
    Reviewed-by: Chao Gao <[email protected]>
    Tested-by: Chao Gao <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    [sean: account for lack of kvm_x86_call(), drop vmx/x86_ops.h change]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

KVM: x86: Snapshot the host's DEBUGCTL after disabling IRQs [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Thu Aug 14 17:25:27 2025 -0700

    KVM: x86: Snapshot the host's DEBUGCTL after disabling IRQs
    
    [ Upstream commit 189ecdb3e112da703ac0699f4ec76aa78122f911 ]
    
    Snapshot the host's DEBUGCTL after disabling IRQs, as perf can toggle
    debugctl bits from IRQ context, e.g. when enabling/disabling events via
    smp_call_function_single().  Taking the snapshot (long) before IRQs are
    disabled could result in KVM effectively clobbering DEBUGCTL due to using
    a stale snapshot.
    
    Cc: [email protected]
    Reviewed-and-tested-by: Ravi Bangoria <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

KVM: x86: Snapshot the host's DEBUGCTL in common x86 [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Thu Aug 14 17:25:26 2025 -0700

    KVM: x86: Snapshot the host's DEBUGCTL in common x86
    
    [ Upstream commit fb71c795935652fa20eaf9517ca9547f5af99a76 ]
    
    Move KVM's snapshot of DEBUGCTL to kvm_vcpu_arch and take the snapshot in
    common x86, so that SVM can also use the snapshot.
    
    Opportunistically change the field to a u64.  While bits 63:32 are reserved
    on AMD, not mentioned at all in Intel's SDM, and managed as an "unsigned
    long" by the kernel, DEBUGCTL is an MSR and therefore a 64-bit value.
    
    Reviewed-by: Xiaoyao Li <[email protected]>
    Cc: [email protected]
    Reviewed-and-tested-by: Ravi Bangoria <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    [sean: resolve minor syntatic conflict in vmx_vcpu_load()]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

KVM: x86: Take irqfds.lock when adding/deleting IRQ bypass producer [+ + +]
Author: Sean Christopherson <[email protected]>
Date:   Fri Apr 4 12:38:19 2025 -0700

    KVM: x86: Take irqfds.lock when adding/deleting IRQ bypass producer
    
    commit f1fb088d9cecde5c3066d8ff8846789667519b7d upstream.
    
    Take irqfds.lock when adding/deleting an IRQ bypass producer to ensure
    irqfd->producer isn't modified while kvm_irq_routing_update() is running.
    The only lock held when a producer is added/removed is irqbypass's mutex.
    
    Fixes: 872768800652 ("KVM: x86: select IRQ_BYPASS_MANAGER")
    Cc: [email protected]
    Signed-off-by: Sean Christopherson <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Paolo Bonzini <[email protected]>
    [sean: account for lack of kvm_x86_call()]
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
leds: flash: leds-qcom-flash: Fix registry access after re-bind [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Fri Aug 15 15:31:27 2025 -0400

    leds: flash: leds-qcom-flash: Fix registry access after re-bind
    
    [ Upstream commit fab15f57360b1e6620a1d0d6b0fbee896e6c1f07 ]
    
    Driver in probe() updates each of 'reg_field' with 'reg_base':
    
            for (i = 0; i < REG_MAX_COUNT; i++)
                    regs[i].reg += reg_base;
    
    'reg_field' array (under variable 'regs' above) is statically allocated,
    thus each re-bind would add another 'reg_base' leading to bogus
    register addresses.  Constify the local 'reg_field' array and duplicate
    it in probe to solve this.
    
    Fixes: 96a2e242a5dc ("leds: flash: Add driver to support flash LED module in QCOM PMICs")
    Cc: [email protected]
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Reviewed-by: Fenglin Wu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

leds: flash: leds-qcom-flash: Limit LED current based on thermal condition [+ + +]
Author: Fenglin Wu <[email protected]>
Date:   Fri Aug 15 15:31:26 2025 -0400

    leds: flash: leds-qcom-flash: Limit LED current based on thermal condition
    
    [ Upstream commit a0864cf32044233e56247fa0eed3ac660f15db9e ]
    
    The flash module has status bits to indicate different thermal
    conditions which are called as OTSTx. For each OTSTx status,
    there is a recommended total flash current for all channels to
    prevent the flash module entering into higher thermal level.
    For example, the total flash current should be limited to 1000mA/500mA
    respectively when the HW reaches the OTST1/OTST2 thermal level.
    
    Signed-off-by: Fenglin Wu <[email protected]>
    Link: https://lore.kernel.org/r/20240705-qcom_flash_thermal_derating-v3-1-8e2e2783e3a6@quicinc.com
    Signed-off-by: Lee Jones <[email protected]>
    Stable-dep-of: fab15f57360b ("leds: flash: leds-qcom-flash: Fix registry access after re-bind")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

leds: leds-lp50xx: Handle reg to get correct multi_index [+ + +]
Author: Johan Adolfsson <[email protected]>
Date:   Tue Jun 17 12:23:54 2025 +0200

    leds: leds-lp50xx: Handle reg to get correct multi_index
    
    [ Upstream commit 2e84a5e5374232e6f356ce5c079a5658d7e4af2c ]
    
    mc_subled used for multi_index needs well defined array indexes,
    to guarantee the desired result, use reg for that.
    
    If devicetree child nodes is processed in random or reverse order
    you may end up with multi_index "blue green red" instead of the expected
    "red green blue".
    If user space apps uses multi_index to deduce how to control the leds
    they would most likely be broken without this patch if devicetree
    processing is reversed (which it appears to be).
    
    arch/arm/boot/dts/aspeed/aspeed-bmc-facebook-fuji.dts has reg set
    but I don't see how it can have worked without this change.
    
    If reg is not set, an error is returned,
    If reg is out of range, an error is returned.
    reg within led child nodes starts with 0, to map to the iout in each bank.
    
    Signed-off-by: Johan Adolfsson <[email protected]>
    Reviewed-by: Jacek Anaszewski <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
lib/crypto: mips/chacha: Fix clang build and remove unneeded byteswap [+ + +]
Author: Eric Biggers <[email protected]>
Date:   Thu Jun 19 15:55:35 2025 -0700

    lib/crypto: mips/chacha: Fix clang build and remove unneeded byteswap
    
    commit 22375adaa0d9fbba9646c8e2b099c6e87c97bfae upstream.
    
    The MIPS32r2 ChaCha code has never been buildable with the clang
    assembler.  First, clang doesn't support the 'rotl' pseudo-instruction:
    
        error: unknown instruction, did you mean: rol, rotr?
    
    Second, clang requires that both operands of the 'wsbh' instruction be
    explicitly given:
    
        error: too few operands for instruction
    
    To fix this, align the code with the real instruction set by (1) using
    the real instruction 'rotr' instead of the nonstandard pseudo-
    instruction 'rotl', and (2) explicitly giving both operands to 'wsbh'.
    
    To make removing the use of 'rotl' a bit easier, also remove the
    unnecessary special-casing for big endian CPUs at
    .Lchacha_mips_xor_bytes.  The tail handling is actually
    endian-independent since it processes one byte at a time.  On big endian
    CPUs the old code byte-swapped SAVED_X, then iterated through it in
    reverse order.  But the byteswap and reverse iteration canceled out.
    
    Tested with chacha20poly1305-selftest in QEMU using "-M malta" with both
    little endian and big endian mips32r2 kernels.
    
    Fixes: 49aa7c00eddf ("crypto: mips/chacha - import 32r2 ChaCha code from Zinc")
    Cc: [email protected]
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Eric Biggers <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Linux: Linux 6.6.103 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Thu Aug 28 16:28:50 2025 +0200

    Linux 6.6.103
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Miguel Ojeda <[email protected]>
    Tested-by: Ron Economos <[email protected]>
    Tested-by: Linux Kernel Functional Testing <[email protected]>
    Tested-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
LoongArch: BPF: Fix jump offset calculation in tailcall [+ + +]
Author: Haoran Jiang <[email protected]>
Date:   Tue Aug 5 19:00:22 2025 +0800

    LoongArch: BPF: Fix jump offset calculation in tailcall
    
    commit cd39d9e6b7e4c58fa77783e7aedf7ada51d02ea3 upstream.
    
    The extra pass of bpf_int_jit_compile() skips JIT context initialization
    which essentially skips offset calculation leaving out_offset = -1, so
    the jmp_offset in emit_bpf_tail_call is calculated by
    
    "#define jmp_offset (out_offset - (cur_offset))"
    
    is a negative number, which is wrong. The final generated assembly are
    as follow.
    
    54:     bgeu            $a2, $t1, -8        # 0x0000004c
    58:     addi.d          $a6, $s5, -1
    5c:     bltz            $a6, -16            # 0x0000004c
    60:     alsl.d          $t2, $a2, $a1, 0x3
    64:     ld.d            $t2, $t2, 264
    68:     beq             $t2, $zero, -28     # 0x0000004c
    
    Before apply this patch, the follow test case will reveal soft lock issues.
    
    cd tools/testing/selftests/bpf/
    ./test_progs --allow=tailcalls/tailcall_bpf2bpf_1
    
    dmesg:
    watchdog: BUG: soft lockup - CPU#2 stuck for 26s! [test_progs:25056]
    
    Cc: [email protected]
    Fixes: 5dc615520c4d ("LoongArch: Add BPF JIT support")
    Reviewed-by: Hengqi Chen <[email protected]>
    Signed-off-by: Haoran Jiang <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

LoongArch: Optimize module load time by optimizing PLT/GOT counting [+ + +]
Author: Kanglong Wang <[email protected]>
Date:   Wed Aug 20 22:23:44 2025 +0800

    LoongArch: Optimize module load time by optimizing PLT/GOT counting
    
    [ Upstream commit 63dbd8fb2af3a89466538599a9acb2d11ef65c06 ]
    
    When enabling CONFIG_KASAN, CONFIG_PREEMPT_VOLUNTARY_BUILD and
    CONFIG_PREEMPT_VOLUNTARY at the same time, there will be soft deadlock,
    the relevant logs are as follows:
    
    rcu: INFO: rcu_sched self-detected stall on CPU
    ...
    Call Trace:
    [<900000000024f9e4>] show_stack+0x5c/0x180
    [<90000000002482f4>] dump_stack_lvl+0x94/0xbc
    [<9000000000224544>] rcu_dump_cpu_stacks+0x1fc/0x280
    [<900000000037ac80>] rcu_sched_clock_irq+0x720/0xf88
    [<9000000000396c34>] update_process_times+0xb4/0x150
    [<90000000003b2474>] tick_nohz_handler+0xf4/0x250
    [<9000000000397e28>] __hrtimer_run_queues+0x1d0/0x428
    [<9000000000399b2c>] hrtimer_interrupt+0x214/0x538
    [<9000000000253634>] constant_timer_interrupt+0x64/0x80
    [<9000000000349938>] __handle_irq_event_percpu+0x78/0x1a0
    [<9000000000349a78>] handle_irq_event_percpu+0x18/0x88
    [<9000000000354c00>] handle_percpu_irq+0x90/0xf0
    [<9000000000348c74>] handle_irq_desc+0x94/0xb8
    [<9000000001012b28>] handle_cpu_irq+0x68/0xa0
    [<9000000001def8c0>] handle_loongarch_irq+0x30/0x48
    [<9000000001def958>] do_vint+0x80/0xd0
    [<9000000000268a0c>] kasan_mem_to_shadow.part.0+0x2c/0x2a0
    [<90000000006344f4>] __asan_load8+0x4c/0x120
    [<900000000025c0d0>] module_frob_arch_sections+0x5c8/0x6b8
    [<90000000003895f0>] load_module+0x9e0/0x2958
    [<900000000038b770>] __do_sys_init_module+0x208/0x2d0
    [<9000000001df0c34>] do_syscall+0x94/0x190
    [<900000000024d6fc>] handle_syscall+0xbc/0x158
    
    After analysis, this is because the slow speed of loading the amdgpu
    module leads to the long time occupation of the cpu and then the soft
    deadlock.
    
    When loading a module, module_frob_arch_sections() tries to figure out
    the number of PLTs/GOTs that will be needed to handle all the RELAs. It
    will call the count_max_entries() to find in an out-of-order date which
    counting algorithm has O(n^2) complexity.
    
    To make it faster, we sort the relocation list by info and addend. That
    way, to check for a duplicate relocation, it just needs to compare with
    the previous entry. This reduces the complexity of the algorithm to O(n
     log n), as done in commit d4e0340919fb ("arm64/module: Optimize module
    load time by optimizing PLT counting"). This gives sinificant reduction
    in module load time for modules with large number of relocations.
    
    After applying this patch, the soft deadlock problem has been solved,
    and the kernel starts normally without "Call Trace".
    
    Using the default configuration to test some modules, the results are as
    follows:
    
    Module              Size
    ip_tables           36K
    fat                 143K
    radeon              2.5MB
    amdgpu              16MB
    
    Without this patch:
    Module              Module load time (ms)       Count(PLTs/GOTs)
    ip_tables           18                          59/6
    fat                 0                           162/14
    radeon              54                          1221/84
    amdgpu              1411                        4525/1098
    
    With this patch:
    Module              Module load time (ms)       Count(PLTs/GOTs)
    ip_tables           18                          59/6
    fat                 0                           162/14
    radeon              22                          1221/84
    amdgpu              45                          4525/1098
    
    Fixes: fcdfe9d22bed ("LoongArch: Add ELF and module support")
    Signed-off-by: Kanglong Wang <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
loop: Avoid updating block size under exclusive owner [+ + +]
Author: Jan Kara <[email protected]>
Date:   Fri Jul 11 18:32:03 2025 +0200

    loop: Avoid updating block size under exclusive owner
    
    [ Upstream commit 7e49538288e523427beedd26993d446afef1a6fb ]
    
    Syzbot came up with a reproducer where a loop device block size is
    changed underneath a mounted filesystem. This causes a mismatch between
    the block device block size and the block size stored in the superblock
    causing confusion in various places such as fs/buffer.c. The particular
    issue triggered by syzbot was a warning in __getblk_slow() due to
    requested buffer size not matching block device block size.
    
    Fix the problem by getting exclusive hold of the loop device to change
    its block size. This fails if somebody (such as filesystem) has already
    an exclusive ownership of the block device and thus prevents modifying
    the loop device under some exclusive owner which doesn't expect it.
    
    Reported-by: [email protected]
    Signed-off-by: Jan Kara <[email protected]>
    Tested-by: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
m68k: Fix lost column on framebuffer debug console [+ + +]
Author: Finn Thain <[email protected]>
Date:   Fri Mar 28 09:39:55 2025 +1100

    m68k: Fix lost column on framebuffer debug console
    
    commit 210a1ce8ed4391b64a888b3fb4b5611a13f5ccc7 upstream.
    
    Move the cursor position rightward after rendering the character,
    not before. This avoids complications that arise when the recursive
    console_putc call has to wrap the line and/or scroll the display.
    This also fixes the linewrap bug that crops off the rightmost column.
    
    When the cursor is at the bottom of the display, a linefeed will not
    move the cursor position further downward. Instead, the display scrolls
    upward. Avoid the repeated add/subtract sequence by way of a single
    subtraction at the initialization of console_struct_num_rows.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Signed-off-by: Finn Thain <[email protected]>
    Tested-by: Stan Johnson <[email protected]>
    Reviewed-by: Geert Uytterhoeven <[email protected]>
    Link: https://lore.kernel.org/9d4e8c68a456d5f2bc254ac6f87a472d066ebd5e.1743115195.git.fthain@linux-m68k.org
    Signed-off-by: Geert Uytterhoeven <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
md: dm-zoned-target: Initialize return variable r to avoid uninitialized use [+ + +]
Author: Purva Yeshi <[email protected]>
Date:   Thu Jul 10 13:11:57 2025 +0530

    md: dm-zoned-target: Initialize return variable r to avoid uninitialized use
    
    [ Upstream commit 487767bff572d46f7c37ad846c4078f6d6c9cc55 ]
    
    Fix Smatch-detected error:
    drivers/md/dm-zoned-target.c:1073 dmz_iterate_devices()
    error: uninitialized symbol 'r'.
    
    Smatch detects a possible use of the uninitialized variable 'r' in
    dmz_iterate_devices() because if dmz->nr_ddevs is zero, the loop is
    skipped and 'r' is returned without being set, leading to undefined
    behavior.
    
    Initialize 'r' to 0 before the loop. This ensures that if there are no
    devices to iterate over, the function still returns a defined value.
    
    Signed-off-by: Purva Yeshi <[email protected]>
    Signed-off-by: Mikulas Patocka <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
media: dvb-frontends: dib7090p: fix null-ptr-deref in dib7090p_rw_on_apb() [+ + +]
Author: Alex Guo <[email protected]>
Date:   Sun Jun 15 21:32:31 2025 -0400

    media: dvb-frontends: dib7090p: fix null-ptr-deref in dib7090p_rw_on_apb()
    
    [ Upstream commit ce5cac69b2edac3e3246fee03e8f4c2a1075238b ]
    
    In dib7090p_rw_on_apb, msg is controlled by user. When msg[0].buf is null and
    msg[0].len is zero, former checks on msg[0].buf would be passed. If accessing
    msg[0].buf[2] without sanity check, null pointer deref would happen. We add
    check on msg[0].len to prevent crash. Similar issue occurs when access
    msg[1].buf[0] and msg[1].buf[1].
    
    Similar commit: commit 0ed554fd769a ("media: dvb-usb: az6027: fix null-ptr-deref in az6027_i2c_xfer()")
    
    Signed-off-by: Alex Guo <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: dvb-frontends: w7090p: fix null-ptr-deref in w7090p_tuner_write_serpar and w7090p_tuner_read_serpar [+ + +]
Author: Alex Guo <[email protected]>
Date:   Sun Jun 15 21:33:53 2025 -0400

    media: dvb-frontends: w7090p: fix null-ptr-deref in w7090p_tuner_write_serpar and w7090p_tuner_read_serpar
    
    [ Upstream commit ed0234c8458b3149f15e496b48a1c9874dd24a1b ]
    
    In w7090p_tuner_write_serpar, msg is controlled by user. When msg[0].buf is null and msg[0].len is zero, former checks on msg[0].buf would be passed. If accessing msg[0].buf[2] without sanity check, null pointer deref would happen. We add
    check on msg[0].len to prevent crash.
    
    Similar commit: commit 0ed554fd769a ("media: dvb-usb: az6027: fix null-ptr-deref in az6027_i2c_xfer()")
    
    Signed-off-by: Alex Guo <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: gspca: Add bounds checking to firmware parser [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Wed May 28 23:22:14 2025 +0300

    media: gspca: Add bounds checking to firmware parser
    
    commit aef89c0b2417da79cb2062a95476288f9f203ab0 upstream.
    
    This sd_init() function reads the firmware.  The firmware data holds a
    series of records and the function reads each record and sends the data
    to the device.  The request_ihex_firmware() function
    calls ihex_validate_fw() which ensures that the total length of all the
    records won't read out of bounds of the fw->data[].
    
    However, a potential issue is if there is a single very large
    record (larger than PAGE_SIZE) and that would result in memory
    corruption.  Generally we trust the firmware, but it's always better to
    double check.
    
    Fixes: 49b61ec9b5af ("[media] gspca: Add new vicam subdriver")
    Cc: [email protected]
    Signed-off-by: Dan Carpenter <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: hi556: correct the test pattern configuration [+ + +]
Author: Bingbu Cao <[email protected]>
Date:   Mon Jun 30 17:04:20 2025 +0800

    media: hi556: correct the test pattern configuration
    
    commit 020f602b068c9ce18d5056d02c8302199377d98d upstream.
    
    Hynix hi556 support 8 test pattern modes:
    hi556_test_pattern_menu[] = {
    {
            "Disabled",
            "Solid Colour",
            "100% Colour Bars",
            "Fade To Grey Colour Bars",
            "PN9",
            "Gradient Horizontal",
            "Gradient Vertical",
            "Check Board",
            "Slant Pattern",
    }
    
    The test pattern is set by a 8-bit register according to the
    specification.
    +--------+-------------------------------+
    | BIT[0] |  Solid color                  |
    +--------+-------------------------------+
    | BIT[1] |  Color bar                    |
    +--------+-------------------------------+
    | BIT[2] |  Fade to grey color bar       |
    +--------+-------------------------------+
    | BIT[3] |  PN9                          |
    +--------+-------------------------------+
    | BIT[4] |  Gradient horizontal          |
    +--------+-------------------------------+
    | BIT[5] |  Gradient vertical            |
    +--------+-------------------------------+
    | BIT[6] |  Check board                  |
    +--------+-------------------------------+
    | BIT[7] |  Slant pattern                |
    +--------+-------------------------------+
    Based on function above, current test pattern programming is wrong.
    This patch fixes it by 'BIT(pattern - 1)'. If pattern is 0, driver
    will disable the test pattern generation and set the pattern to 0.
    
    Fixes: e62138403a84 ("media: hi556: Add support for Hi-556 sensor")
    Cc: [email protected]
    Signed-off-by: Bingbu Cao <[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: fix a potential memory leak in imx_media_csc_scaler_device_init() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Thu Feb 27 15:44:51 2025 +0800

    media: imx: fix a potential memory leak in imx_media_csc_scaler_device_init()
    
    commit fc5f8aec77704373ee804b5dba0e0e5029c0f180 upstream.
    
    Add video_device_release() in label 'err_m2m' to release the memory
    allocated by video_device_alloc() and prevent potential memory leaks.
    Remove the reduntant code in label 'err_m2m'.
    
    Fixes: a8ef0488cc59 ("media: imx: add csc/scaler mem2mem device")
    Cc: [email protected]
    Signed-off-by: Haoxiang Li <[email protected]>
    Reviewed-by: Dan Carpenter <[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: ivsc: Fix crash at shutdown due to missing mei_cldev_disable() calls [+ + +]
Author: Hans de Goede <[email protected]>
Date:   Sat Jun 21 16:00:52 2025 +0200

    media: ivsc: Fix crash at shutdown due to missing mei_cldev_disable() calls
    
    commit 0c92c49fc688cfadacc47ae99b06a31237702e9e upstream.
    
    Both the ACE and CSI driver are missing a mei_cldev_disable() call in
    their remove() function.
    
    This causes the mei_cl client to stay part of the mei_device->file_list
    list even though its memory is freed by mei_cl_bus_dev_release() calling
    kfree(cldev->cl).
    
    This leads to a use-after-free when mei_vsc_remove() runs mei_stop()
    which first removes all mei bus devices calling mei_ace_remove() and
    mei_csi_remove() followed by mei_cl_bus_dev_release() and then calls
    mei_cl_all_disconnect() which walks over mei_device->file_list dereferecing
    the just freed cldev->cl.
    
    And mei_vsc_remove() it self is run at shutdown because of the
    platform_device_unregister(tp->pdev) in vsc_tp_shutdown()
    
    When building a kernel with KASAN this leads to the following KASAN report:
    
    [ 106.634504] ==================================================================
    [ 106.634623] BUG: KASAN: slab-use-after-free in mei_cl_set_disconnected (drivers/misc/mei/client.c:783) mei
    [ 106.634683] Read of size 4 at addr ffff88819cb62018 by task systemd-shutdow/1
    [ 106.634729]
    [ 106.634767] Tainted: [E]=UNSIGNED_MODULE
    [ 106.634770] Hardware name: Dell Inc. XPS 16 9640/09CK4V, BIOS 1.12.0 02/10/2025
    [ 106.634773] Call Trace:
    [ 106.634777]  <TASK>
    ...
    [ 106.634871] kasan_report (mm/kasan/report.c:221 mm/kasan/report.c:636)
    [ 106.634901] mei_cl_set_disconnected (drivers/misc/mei/client.c:783) mei
    [ 106.634921] mei_cl_all_disconnect (drivers/misc/mei/client.c:2165 (discriminator 4)) mei
    [ 106.634941] mei_reset (drivers/misc/mei/init.c:163) mei
    ...
    [ 106.635042] mei_stop (drivers/misc/mei/init.c:348) mei
    [ 106.635062] mei_vsc_remove (drivers/misc/mei/mei_dev.h:784 drivers/misc/mei/platform-vsc.c:393) mei_vsc
    [ 106.635066] platform_remove (drivers/base/platform.c:1424)
    
    Add the missing mei_cldev_disable() calls so that the mei_cl gets removed
    from mei_device->file_list before it is freed to fix this.
    
    Fixes: 78876f71b3e9 ("media: pci: intel: ivsc: Add ACE submodule")
    Fixes: 29006e196a56 ("media: pci: intel: ivsc: Add CSI submodule")
    Cc: [email protected]
    Signed-off-by: Hans de Goede <[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: ov2659: Fix memory leaks in ov2659_probe() [+ + +]
Author: Zhang Shurong <[email protected]>
Date:   Sun Jul 6 00:31:09 2025 +0800

    media: ov2659: Fix memory leaks in ov2659_probe()
    
    commit 76142b137b968d47b35cdd8d1dc924677d319c8b upstream.
    
    ov2659_probe() doesn't properly free control handler resources in failure
    paths, causing memory leaks. Add v4l2_ctrl_handler_free() to prevent these
    memory leaks and reorder the ctrl_handler assignment for better code flow.
    
    Fixes: c4c0283ab3cd ("[media] media: i2c: add support for omnivision's ov2659 sensor")
    Cc: [email protected]
    Signed-off-by: Zhang Shurong <[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: qcom: camss: cleanup media device allocated resource on error path [+ + +]
Author: Vladimir Zapolskiy <[email protected]>
Date:   Tue May 13 17:23:45 2025 +0300

    media: qcom: camss: cleanup media device allocated resource on error path
    
    commit 69080ec3d0daba8a894025476c98ab16b5a505a4 upstream.
    
    A call to media_device_init() requires media_device_cleanup() counterpart
    to complete cleanup and release any allocated resources.
    
    This has been done in the driver .remove() right from the beginning, but
    error paths on .probe() shall also be fixed.
    
    Fixes: a1d7c116fcf7 ("media: camms: Add core files")
    Cc: [email protected]
    Signed-off-by: Vladimir Zapolskiy <[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: rainshadow-cec: fix TOCTOU race condition in rain_interrupt() [+ + +]
Author: Gui-Dong Han <[email protected]>
Date:   Fri Jun 6 03:04:59 2025 +0000

    media: rainshadow-cec: fix TOCTOU race condition in rain_interrupt()
    
    commit 7af160aea26c7dc9e6734d19306128cce156ec40 upstream.
    
    In the interrupt handler rain_interrupt(), the buffer full check on
    rain->buf_len is performed before acquiring rain->buf_lock. This
    creates a Time-of-Check to Time-of-Use (TOCTOU) race condition, as
    rain->buf_len is concurrently accessed and modified in the work
    handler rain_irq_work_handler() under the same lock.
    
    Multiple interrupt invocations can race, with each reading buf_len
    before it becomes full and then proceeding. This can lead to both
    interrupts attempting to write to the buffer, incrementing buf_len
    beyond its capacity (DATA_SIZE) and causing a buffer overflow.
    
    Fix this bug by moving the spin_lock() to before the buffer full
    check. This ensures that the check and the subsequent buffer modification
    are performed atomically, preventing the race condition. An corresponding
    spin_unlock() is added to the overflow path to correctly release the
    lock.
    
    This possible bug was found by an experimental static analysis tool
    developed by our team.
    
    Fixes: 0f314f6c2e77 ("[media] rainshadow-cec: new RainShadow Tech HDMI CEC driver")
    Cc: [email protected]
    Signed-off-by: Gui-Dong Han <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: tc358743: Check I2C succeeded during probe [+ + +]
Author: Dave Stevenson <[email protected]>
Date:   Wed Jun 11 19:37:15 2025 +0100

    media: tc358743: Check I2C succeeded during probe
    
    [ Upstream commit 303d81635e1d9c949b370215cc94526ed81f2e3d ]
    
    The probe for the TC358743 reads the CHIPID register from
    the device and compares it to the expected value of 0.
    If the I2C request fails then that also returns 0, so
    the driver loads thinking that the device is there.
    
    Generally I2C communications are reliable so there is
    limited need to check the return value on every transfer,
    therefore only amend the one read during probe to check
    for I2C errors.
    
    Signed-off-by: Dave Stevenson <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: tc358743: Increase FIFO trigger level to 374 [+ + +]
Author: Dave Stevenson <[email protected]>
Date:   Wed Jun 11 19:37:14 2025 +0100

    media: tc358743: Increase FIFO trigger level to 374
    
    [ Upstream commit 86addd25314a1e77dbdcfddfeed0bab2f27da0e2 ]
    
    The existing fixed value of 16 worked for UYVY 720P60 over
    2 lanes at 594MHz, or UYVY 1080P60 over 4 lanes. (RGB888
    1080P60 needs 6 lanes at 594MHz).
    It doesn't allow for lower resolutions to work as the FIFO
    underflows.
    
    374 is required for 1080P24 or 1080P30 UYVY over 2 lanes @
    972Mbit/s, but >374 means that the FIFO underflows on 1080P50
    UYVY over 2 lanes @ 972Mbit/s.
    
    Whilst it would be nice to compute it, the required information
    isn't published by Toshiba.
    
    Signed-off-by: Dave Stevenson <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: tc358743: Return an appropriate colorspace from tc358743_set_fmt [+ + +]
Author: Dave Stevenson <[email protected]>
Date:   Wed Jun 11 19:37:16 2025 +0100

    media: tc358743: Return an appropriate colorspace from tc358743_set_fmt
    
    [ Upstream commit 377cc006a364dfdab2f3f221cfad63a9265200b8 ]
    
    When calling tc358743_set_fmt, the code was calling tc358743_get_fmt
    to choose a valid format. However that sets the colorspace
    based on information read back from the chip, not the colour
    format requested.
    
    The result was that if you called try or set format for UYVY
    when the current format was RGB3 then you would get told SRGB,
    and try RGB3 when current was UYVY and you would get told
    SMPTE170M.
    
    The value programmed in the VI_REP register for the colorspace
    is always set by this driver, therefore there is no need to read
    back the value, and never set to REC709.
    Return the colorspace based on the format set/tried instead.
    
    Signed-off-by: Dave Stevenson <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: usb: hdpvr: disable zero-length read messages [+ + +]
Author: Wolfram Sang <[email protected]>
Date:   Thu May 22 10:09:54 2025 +0200

    media: usb: hdpvr: disable zero-length read messages
    
    [ Upstream commit b5ae5a79825ba8037b0be3ef677a24de8c063abf ]
    
    This driver passes the length of an i2c_msg directly to
    usb_control_msg(). If the message is now a read and of length 0, it
    violates the USB protocol and a warning will be printed. Enable the
    I2C_AQ_NO_ZERO_LEN_READ quirk for this adapter thus forbidding 0-length
    read messages altogether.
    
    Signed-off-by: Wolfram Sang <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: usbtv: Lock resolution while streaming [+ + +]
Author: Ludwig Disterhof <[email protected]>
Date:   Mon Apr 28 20:16:50 2025 +0200

    media: usbtv: Lock resolution while streaming
    
    commit 7e40e0bb778907b2441bff68d73c3eb6b6cd319f upstream.
    
    When an program is streaming (ffplay) and another program (qv4l2)
    changes the TV standard from NTSC to PAL, the kernel crashes due to trying
    to copy to unmapped memory.
    
    Changing from NTSC to PAL increases the resolution in the usbtv struct,
    but the video plane buffer isn't adjusted, so it overflows.
    
    Fixes: 0e0fe3958fdd13d ("[media] usbtv: Add support for PAL video source")
    Cc: [email protected]
    Signed-off-by: Ludwig Disterhof <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    [hverkuil: call vb2_is_busy instead of vb2_is_streaming]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: uvcvideo: Do not mark valid metadata as invalid [+ + +]
Author: Ricardo Ribalda <[email protected]>
Date:   Mon Jul 7 18:34:01 2025 +0000

    media: uvcvideo: Do not mark valid metadata as invalid
    
    commit bda2859bff0b9596a19648f3740c697ce4c71496 upstream.
    
    Currently, the driver performs a length check of the metadata buffer
    before the actual metadata size is known and before the metadata is
    decided to be copied. This results in valid metadata buffers being
    incorrectly marked as invalid.
    
    Move the length check to occur after the metadata size is determined and
    is decided to be copied.
    
    Cc: [email protected]
    Fixes: 088ead255245 ("media: uvcvideo: Add a metadata device node")
    Reviewed-by: Laurent Pinchart <[email protected]>
    Reviewed-by: Hans de Goede <[email protected]>
    Signed-off-by: Ricardo Ribalda <[email protected]>
    Link: https://lore.kernel.org/r/[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: Fix 1-byte out-of-bounds read in uvc_parse_format() [+ + +]
Author: Youngjun Lee <[email protected]>
Date:   Tue Jun 10 21:41:07 2025 +0900

    media: uvcvideo: Fix 1-byte out-of-bounds read in uvc_parse_format()
    
    commit 782b6a718651eda3478b1824b37a8b3185d2740c upstream.
    
    The buffer length check before calling uvc_parse_format() only ensured
    that the buffer has at least 3 bytes (buflen > 2), buf the function
    accesses buffer[3], requiring at least 4 bytes.
    
    This can lead to an out-of-bounds read if the buffer has exactly 3 bytes.
    
    Fix it by checking that the buffer has at least 4 bytes in
    uvc_parse_format().
    
    Signed-off-by: Youngjun Lee <[email protected]>
    Reviewed-by: Laurent Pinchart <[email protected]>
    Fixes: c0efd232929c ("V4L/DVB (8145a): USB Video Class driver")
    Cc: [email protected]
    Reviewed-by: Ricardo Ribalda <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Laurent Pinchart <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: uvcvideo: Fix bandwidth issue for Alcor camera [+ + +]
Author: chenchangcheng <[email protected]>
Date:   Sat May 10 14:18:03 2025 +0800

    media: uvcvideo: Fix bandwidth issue for Alcor camera
    
    [ Upstream commit 9764401bf6f8a20eb11c2e78470f20fee91a9ea7 ]
    
    Some broken device return wrong dwMaxPayloadTransferSize fields as
    follows:
    
    [  218.632537] uvcvideo: Device requested 2752512 B/frame bandwidth.
    [  218.632598] uvcvideo: No fast enough alt setting for requested bandwidth.
    
    When dwMaxPayloadTransferSize is greater than maxpsize, it will prevent
    the camera from starting. So use the bandwidth of maxpsize.
    
    Signed-off-by: chenchangcheng <[email protected]>
    Reviewed-by: Ricardo Ribalda <[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: Hans Verkuil <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: v4l2-common: Reduce warnings about missing V4L2_CID_LINK_FREQ control [+ + +]
Author: Niklas Söderlund <[email protected]>
Date:   Thu May 8 10:37:45 2025 +0200

    media: v4l2-common: Reduce warnings about missing V4L2_CID_LINK_FREQ control
    
    [ Upstream commit 5a0abb8909b9dcf347fce1d201ac6686ac33fd64 ]
    
    When operating a pipeline with a missing V4L2_CID_LINK_FREQ control this
    two line warning is printed each time the pipeline is started. Reduce
    this excessive logging by only warning once for the missing control.
    
    Signed-off-by: Niklas Söderlund <[email protected]>
    Signed-off-by: Sakari Ailus <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: v4l2-ctrls: Don't reset handler's error in v4l2_ctrl_handler_free() [+ + +]
Author: Sakari Ailus <[email protected]>
Date:   Thu May 8 18:55:38 2025 +0300

    media: v4l2-ctrls: Don't reset handler's error in v4l2_ctrl_handler_free()
    
    commit 5a0400aca5fa7c6b8ba456c311a460e733571c88 upstream.
    
    It's a common pattern in drivers to free the control handler's resources
    and then return the handler's error code on drivers' error handling paths.
    Alas, the v4l2_ctrl_handler_free() function also zeroes the error field,
    effectively indicating successful return to the caller.
    
    There's no apparent need to touch the error field while releasing the
    control handler's resources and cleaning up stale pointers. Not touching
    the handler's error field is a more certain way to address this problem
    than changing all the users, in which case the pattern would be likely to
    re-emerge in new drivers.
    
    Do just that, don't touch the control handler's error field in
    v4l2_ctrl_handler_free().
    
    Fixes: 0996517cf8ea ("V4L/DVB: v4l2: Add new control handling framework")
    Cc: [email protected]
    Signed-off-by: Sakari Ailus <[email protected]>
    Reviewed-by: Hans Verkuil <[email protected]>
    Reviewed-by: Laurent Pinchart <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: venus: Add a check for packet size after reading from shared memory [+ + +]
Author: Vedang Nagar <[email protected]>
Date:   Mon May 19 12:42:21 2025 +0530

    media: venus: Add a check for packet size after reading from shared memory
    
    commit 49befc830daa743e051a65468c05c2ff9e8580e6 upstream.
    
    Add a check to ensure that the packet size does not exceed the number of
    available words after reading the packet header from shared memory. This
    ensures that the size provided by the firmware is safe to process and
    prevent potential out-of-bounds memory access.
    
    Fixes: d96d3f30c0f2 ("[media] media: venus: hfi: add Venus HFI files")
    Cc: [email protected]
    Signed-off-by: Vedang Nagar <[email protected]>
    Co-developed-by: Dikshita Agarwal <[email protected]>
    Signed-off-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: venus: Fix OOB read due to missing payload bound check [+ + +]
Author: Vedang Nagar <[email protected]>
Date:   Mon May 19 12:42:22 2025 +0530

    media: venus: Fix OOB read due to missing payload bound check
    
    commit 06d6770ff0d8cc8dfd392329a8cc03e2a83e7289 upstream.
    
    Currently, The event_seq_changed() handler processes a variable number
    of properties sent by the firmware. The number of properties is indicated
    by the firmware and used to iterate over the payload. However, the
    payload size is not being validated against the actual message length.
    
    This can lead to out-of-bounds memory access if the firmware provides a
    property count that exceeds the data available in the payload. Such a
    condition can result in kernel crashes or potential information leaks if
    memory beyond the buffer is accessed.
    
    Fix this by properly validating the remaining size of the payload before
    each property access and updating bounds accordingly as properties are
    parsed.
    
    This ensures that property parsing is safely bounded within the received
    message buffer and protects against malformed or malicious firmware
    behavior.
    
    Fixes: 09c2845e8fe4 ("[media] media: venus: hfi: add Host Firmware Interface (HFI)")
    Cc: [email protected]
    Signed-off-by: Vedang Nagar <[email protected]>
    Reviewed-by: Vikash Garodia <[email protected]>
    Reviewed-by: Bryan O'Donoghue <[email protected]>
    Co-developed-by: Dikshita Agarwal <[email protected]>
    Signed-off-by: Dikshita Agarwal <[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: venus: hfi: explicitly release IRQ during teardown [+ + +]
Author: Jorge Ramirez-Ortiz <[email protected]>
Date:   Thu Jun 19 09:48:30 2025 +0200

    media: venus: hfi: explicitly release IRQ during teardown
    
    commit 640803003cd903cea73dc6a86bf6963e238e2b3f upstream.
    
    Ensure the IRQ is disabled - and all pending handlers completed - before
    dismantling the interrupt routing and clearing related pointers.
    
    This prevents any possibility of the interrupt triggering after the
    handler context has been invalidated.
    
    Fixes: d96d3f30c0f2 ("[media] media: venus: hfi: add Venus HFI files")
    Cc: [email protected]
    Signed-off-by: Jorge Ramirez-Ortiz <[email protected]>
    Reviewed-by: Dikshita Agarwal <[email protected]>
    Tested-by: Dikshita Agarwal <[email protected]> # RB5
    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: venus: protect against spurious interrupts during probe [+ + +]
Author: Jorge Ramirez-Ortiz <[email protected]>
Date:   Fri Jun 6 17:25:22 2025 +0200

    media: venus: protect against spurious interrupts during probe
    
    commit 3200144a2fa4209dc084a19941b9b203b43580f0 upstream.
    
    Make sure the interrupt handler is initialized before the interrupt is
    registered.
    
    If the IRQ is registered before hfi_create(), it's possible that an
    interrupt fires before the handler setup is complete, leading to a NULL
    dereference.
    
    This error condition has been observed during system boot on Rb3Gen2.
    
    Fixes: af2c3834c8ca ("[media] media: venus: adding core part and helper functions")
    Cc: [email protected]
    Signed-off-by: Jorge Ramirez-Ortiz <[email protected]>
    Reviewed-by: Bryan O'Donoghue <[email protected]>
    Reviewed-by: Vikash Garodia <[email protected]>
    Reviewed-by: Dikshita Agarwal <[email protected]>
    Tested-by: Dikshita Agarwal <[email protected]> # RB5
    Signed-off-by: Bryan O'Donoghue <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: venus: vdec: Clamp param smaller than 1fps and bigger than 240. [+ + +]
Author: Ricardo Ribalda <[email protected]>
Date:   Mon Jun 16 15:29:14 2025 +0000

    media: venus: vdec: Clamp param smaller than 1fps and bigger than 240.
    
    commit 377dc500d253f0b26732b2cb062e89668aef890a upstream.
    
    The driver uses "whole" fps in all its calculations (e.g. in
    load_per_instance()). Those calculation expect an fps bigger than 1, and
    not big enough to overflow.
    
    Clamp the value if the user provides a param that will result in an invalid
    fps.
    
    Reported-by: Hans Verkuil <[email protected]>
    Closes: https://lore.kernel.org/linux-media/[email protected]/T/#m91cd962ac942834654f94c92206e2f85ff7d97f0
    Fixes: 7472c1c69138 ("[media] media: venus: vdec: add video decoder files")
    Cc: [email protected]
    Tested-by: Bryan O'Donoghue <[email protected]> # qrb5615-rb5
    Reviewed-by: Bryan O'Donoghue <[email protected]>
    Signed-off-by: Ricardo Ribalda <[email protected]>
    [bod: Change "parm" to "param"]
    Signed-off-by: Bryan O'Donoghue <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: venus: venc: Clamp param smaller than 1fps and bigger than 240 [+ + +]
Author: Ricardo Ribalda <[email protected]>
Date:   Mon Jun 16 15:29:15 2025 +0000

    media: venus: venc: Clamp param smaller than 1fps and bigger than 240
    
    commit 417c01b92ec278a1118a05c6ad8a796eaa0c9c52 upstream.
    
    The driver uses "whole" fps in all its calculations (e.g. in
    load_per_instance()). Those calculation expect an fps bigger than 1, and
    not big enough to overflow.
    
    Clamp the param if the user provides a value that will result in an invalid
    fps.
    
    Reported-by: Hans Verkuil <[email protected]>
    Closes: https://lore.kernel.org/linux-media/[email protected]/T/#m91cd962ac942834654f94c92206e2f85ff7d97f0
    Fixes: aaaa93eda64b ("[media] media: venus: venc: add video encoder files")
    Cc: [email protected]
    Signed-off-by: Ricardo Ribalda <[email protected]>
    [bod: Change "parm" to "param"]
    Signed-off-by: Bryan O'Donoghue <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

media: verisilicon: Fix AV1 decoder clock frequency [+ + +]
Author: Nicolas Dufresne <[email protected]>
Date:   Mon Feb 17 16:46:54 2025 -0500

    media: verisilicon: Fix AV1 decoder clock frequency
    
    commit 01350185fe02ae3ea2c12d578e06af0d5186f33e upstream.
    
    The desired clock frequency was correctly set to 400MHz in the device tree
    but was lowered by the driver to 300MHz breaking 4K 60Hz content playback.
    Fix the issue by removing the driver call to clk_set_rate(), which reduce
    the amount of board specific code.
    
    Fixes: 003afda97c65 ("media: verisilicon: Enable AV1 decoder on rk3588")
    Cc: [email protected]
    Reviewed-by: Benjamin Gaignard <[email protected]>
    Reviewed-by: Philipp Zabel <[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: vivid: fix wrong pixel_array control size [+ + +]
Author: Hans Verkuil <[email protected]>
Date:   Sun Jul 6 12:55:40 2025 +0200

    media: vivid: fix wrong pixel_array control size
    
    commit 3e43442d4994c9e1e202c98129a87e330f7faaed upstream.
    
    The pixel_array control size was calculated incorrectly:
    the dimensions were swapped (dims[0] should be the height), and the
    values should be the width or height divided by PIXEL_ARRAY_DIV
    and rounded up. So don't use roundup, but use DIV_ROUND_UP instead.
    
    This bug is harmless in the sense that nothing will break, except that
    it consumes way too much memory for this control.
    
    Fixes: 6bc7643d1b9c ("media: vivid: add pixel_array test control")
    Cc: <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mei: bus: Check for still connected devices in mei_cl_bus_dev_release() [+ + +]
Author: Hans de Goede <[email protected]>
Date:   Mon Jun 23 10:50:52 2025 +0200

    mei: bus: Check for still connected devices in mei_cl_bus_dev_release()
    
    [ Upstream commit 35e8a426b16adbecae7a4e0e3c00fc8d0273db53 ]
    
    mei_cl_bus_dev_release() also frees the mei-client (struct mei_cl)
    belonging to the device being released.
    
    If there are bugs like the just fixed bug in the ACE/CSI2 mei drivers,
    the mei-client being freed might still be part of the mei_device's
    file_list and iterating over this list after the freeing will then trigger
    a use-afer-free bug.
    
    Add a check to mei_cl_bus_dev_release() to make sure that the to-be-freed
    mei-client is not on the mei_device's file_list.
    
    Signed-off-by: Hans de Goede <[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]>

 
memstick: Fix deadlock by moving removing flag earlier [+ + +]
Author: Jiayi Li <[email protected]>
Date:   Mon Aug 4 09:36:04 2025 +0800

    memstick: Fix deadlock by moving removing flag earlier
    
    commit 99d7ab8db9d8230b243f5ed20ba0229e54cc0dfa upstream.
    
    The existing memstick core patch: commit 62c59a8786e6 ("memstick: Skip
    allocating card when removing host") sets host->removing in
    memstick_remove_host(),but still exists a critical time window where
    memstick_check can run after host->eject is set but before removing is set.
    
    In the rtsx_usb_ms driver, the problematic sequence is:
    
    rtsx_usb_ms_drv_remove:          memstick_check:
      host->eject = true
      cancel_work_sync(handle_req)     if(!host->removing)
      ...                              memstick_alloc_card()
                                         memstick_set_rw_addr()
                                           memstick_new_req()
                                             rtsx_usb_ms_request()
                                               if(!host->eject)
                                               skip schedule_work
                                           wait_for_completion()
      memstick_remove_host:                [blocks indefinitely]
        host->removing = true
        flush_workqueue()
        [block]
    
    1. rtsx_usb_ms_drv_remove sets host->eject = true
    2. cancel_work_sync(&host->handle_req) runs
    3. memstick_check work may be executed here <-- danger window
    4. memstick_remove_host sets removing = 1
    
    During this window (step 3), memstick_check calls memstick_alloc_card,
    which may indefinitely waiting for mrq_complete completion that will
    never occur because rtsx_usb_ms_request sees eject=true and skips
    scheduling work, memstick_set_rw_addr waits forever for completion.
    
    This causes a deadlock when memstick_remove_host tries to flush_workqueue,
    waiting for memstick_check to complete, while memstick_check is blocked
    waiting for mrq_complete completion.
    
    Fix this by setting removing=true at the start of rtsx_usb_ms_drv_remove,
    before any work cancellation. This ensures memstick_check will see the
    removing flag immediately and exit early, avoiding the deadlock.
    
    Fixes: 62c59a8786e6 ("memstick: Skip allocating card when removing host")
    Signed-off-by: Jiayi Li <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mfd: axp20x: Set explicit ID for AXP313 regulator [+ + +]
Author: Chen-Yu Tsai <[email protected]>
Date:   Fri Jun 20 01:32:07 2025 +0800

    mfd: axp20x: Set explicit ID for AXP313 regulator
    
    [ Upstream commit 88828c7e940dd45d139ad4a39d702b23840a37c5 ]
    
    On newer boards featuring the A523 SoC, the AXP323 (related to the
    AXP313) is paired with the AXP717 and serves as a secondary PMIC
    providing additional regulator outputs. However the MFD cells are all
    registered with PLATFORM_DEVID_NONE, which causes the regulator cells
    to conflict with each other.
    
    Commit e37ec3218870 ("mfd: axp20x: Allow multiple regulators") attempted
    to fix this by switching to PLATFORM_DEVID_AUTO so that the device names
    would all be different, however that broke IIO channel mapping, which is
    also tied to the device names. As a result the change was later reverted.
    
    Instead, here we attempt to make sure the AXP313/AXP323 regulator cell
    does not conflict by explicitly giving it an ID number. This was
    previously done for the AXP809+AXP806 pair used with the A80 SoC.
    
    Signed-off-by: Chen-Yu Tsai <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
MIPS: Don't crash in stack_top() for tasks without ABI or vDSO [+ + +]
Author: Thomas Weißschuh <[email protected]>
Date:   Wed Jun 11 13:28:26 2025 +0200

    MIPS: Don't crash in stack_top() for tasks without ABI or vDSO
    
    [ Upstream commit e9f4a6b3421e936c3ee9d74710243897d74dbaa2 ]
    
    Not all tasks have an ABI associated or vDSO mapped,
    for example kthreads never do.
    If such a task ever ends up calling stack_top(), it will derefence the
    NULL ABI pointer and crash.
    
    This can for example happen when using kunit:
    
        mips_stack_top+0x28/0xc0
        arch_pick_mmap_layout+0x190/0x220
        kunit_vm_mmap_init+0xf8/0x138
        __kunit_add_resource+0x40/0xa8
        kunit_vm_mmap+0x88/0xd8
        usercopy_test_init+0xb8/0x240
        kunit_try_run_case+0x5c/0x1a8
        kunit_generic_run_threadfn_adapter+0x28/0x50
        kthread+0x118/0x240
        ret_from_kernel_thread+0x14/0x1c
    
    Only dereference the ABI point if it is set.
    
    The GIC page is also included as it is specific to the vDSO.
    Also move the randomization adjustment into the same conditional.
    
    Signed-off-by: Thomas Weißschuh <[email protected]>
    Reviewed-by: David Gow <[email protected]>
    Reviewed-by: Huacai Chen <[email protected]>
    Signed-off-by: Thomas Bogendoerfer <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

MIPS: lantiq: falcon: sysctrl: fix request memory check logic [+ + +]
Author: Shiji Yang <[email protected]>
Date:   Wed Jun 18 22:53:23 2025 +0800

    MIPS: lantiq: falcon: sysctrl: fix request memory check logic
    
    [ Upstream commit 9c9a7ff9882fc6ba7d2f4050697e8bb80383e8dc ]
    
    request_mem_region() will return NULL instead of error code
    when the memory request fails. Therefore, we should check if
    the return value is non-zero instead of less than zero. In
    this way, this patch also fixes the build warnings:
    
    arch/mips/lantiq/falcon/sysctrl.c:214:50: error: ordered comparison of pointer with integer zero [-Werror=extra]
      214 |                                 res_status.name) < 0) ||
          |                                                  ^
    arch/mips/lantiq/falcon/sysctrl.c:216:47: error: ordered comparison of pointer with integer zero [-Werror=extra]
      216 |                                 res_ebu.name) < 0) ||
          |                                               ^
    arch/mips/lantiq/falcon/sysctrl.c:219:50: error: ordered comparison of pointer with integer zero [-Werror=extra]
      219 |                                 res_sys[0].name) < 0) ||
          |                                                  ^
    arch/mips/lantiq/falcon/sysctrl.c:222:50: error: ordered comparison of pointer with integer zero [-Werror=extra]
      222 |                                 res_sys[1].name) < 0) ||
          |                                                  ^
    arch/mips/lantiq/falcon/sysctrl.c:225:50: error: ordered comparison of pointer with integer zero [-Werror=extra]
      225 |                                 res_sys[2].name) < 0))
          |
    
    Signed-off-by: Shiji Yang <[email protected]>
    Signed-off-by: Thomas Bogendoerfer <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

MIPS: vpe-mt: add missing prototypes for vpe_{alloc,start,stop,free} [+ + +]
Author: Shiji Yang <[email protected]>
Date:   Thu Jul 3 21:06:32 2025 +0800

    MIPS: vpe-mt: add missing prototypes for vpe_{alloc,start,stop,free}
    
    [ Upstream commit 844615dd0f2d95c018ec66b943e08af22b62aff3 ]
    
    These functions are exported but their prototypes are not defined.
    This patch adds the missing function prototypes to fix the following
    compilation warnings:
    
    arch/mips/kernel/vpe-mt.c:180:7: error: no previous prototype for 'vpe_alloc' [-Werror=missing-prototypes]
      180 | void *vpe_alloc(void)
          |       ^~~~~~~~~
    arch/mips/kernel/vpe-mt.c:198:5: error: no previous prototype for 'vpe_start' [-Werror=missing-prototypes]
      198 | int vpe_start(void *vpe, unsigned long start)
          |     ^~~~~~~~~
    arch/mips/kernel/vpe-mt.c:208:5: error: no previous prototype for 'vpe_stop' [-Werror=missing-prototypes]
      208 | int vpe_stop(void *vpe)
          |     ^~~~~~~~
    arch/mips/kernel/vpe-mt.c:229:5: error: no previous prototype for 'vpe_free' [-Werror=missing-prototypes]
      229 | int vpe_free(void *vpe)
          |     ^~~~~~~~
    
    Signed-off-by: Shiji Yang <[email protected]>
    Signed-off-by: Thomas Bogendoerfer <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
misc: rtsx: usb: Ensure mmc child device is active when card is present [+ + +]
Author: Ricky Wu <[email protected]>
Date:   Fri Jul 11 22:01:43 2025 +0800

    misc: rtsx: usb: Ensure mmc child device is active when card is present
    
    commit 966c5cd72be8989c8a559ddef8e8ff07a37c5eb0 upstream.
    
    When a card is present in the reader, the driver currently defers
    autosuspend by returning -EAGAIN during the suspend callback to
    trigger USB remote wakeup signaling. However, this does not guarantee
    that the mmc child device has been resumed, which may cause issues if
    it remains suspended while the card is accessible.
    This patch ensures that all child devices, including the mmc host
    controller, are explicitly resumed before returning -EAGAIN. This
    fixes a corner case introduced by earlier remote wakeup handling,
    improving reliability of runtime PM when a card is inserted.
    
    Fixes: 883a87ddf2f1 ("misc: rtsx_usb: Use USB remote wakeup signaling for card insertion detection")
    Cc: [email protected]
    Signed-off-by: Ricky Wu <[email protected]>
    Reviewed-by: Ulf Hansson <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mlxsw: spectrum: Forward packets with an IPv4 link-local source IP [+ + +]
Author: Ido Schimmel <[email protected]>
Date:   Thu Aug 14 15:06:40 2025 +0200

    mlxsw: spectrum: Forward packets with an IPv4 link-local source IP
    
    [ Upstream commit f604d3aaf64ff0d90cc875295474d3abf4155629 ]
    
    By default, the device does not forward IPv4 packets with a link-local
    source IP (i.e., 169.254.0.0/16). This behavior does not align with the
    kernel which does forward them.
    
    Fix by instructing the device to forward such packets instead of
    dropping them.
    
    Fixes: ca360db4b825 ("mlxsw: spectrum: Disable DIP_LINK_LOCAL check in hardware pipeline")
    Reported-by: Zoey Mertes <[email protected]>
    Signed-off-by: Ido Schimmel <[email protected]>
    Reviewed-by: Petr Machata <[email protected]>
    Signed-off-by: Petr Machata <[email protected]>
    Link: https://patch.msgid.link/6721e6b2c96feb80269e72ce8d0b426e2f32d99c.1755174341.git.petrm@nvidia.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mm/debug_vm_pgtable: clear page table entries at destroy_args() [+ + +]
Author: Herton R. Krzesinski <[email protected]>
Date:   Thu Jul 31 18:40:51 2025 -0300

    mm/debug_vm_pgtable: clear page table entries at destroy_args()
    
    commit dde30854bddfb5d69f30022b53c5955a41088b33 upstream.
    
    The mm/debug_vm_pagetable test allocates manually page table entries for
    the tests it runs, using also its manually allocated mm_struct.  That in
    itself is ok, but when it exits, at destroy_args() it fails to clear those
    entries with the *_clear functions.
    
    The problem is that leaves stale entries.  If another process allocates an
    mm_struct with a pgd at the same address, it may end up running into the
    stale entry.  This is happening in practice on a debug kernel with
    CONFIG_DEBUG_VM_PGTABLE=y, for example this is the output with some extra
    debugging I added (it prints a warning trace if pgtables_bytes goes
    negative, in addition to the warning at check_mm() function):
    
    [    2.539353] debug_vm_pgtable: [get_random_vaddr         ]: random_vaddr is 0x7ea247140000
    [    2.539366] kmem_cache info
    [    2.539374] kmem_cachep 0x000000002ce82385 - freelist 0x0000000000000000 - offset 0x508
    [    2.539447] debug_vm_pgtable: [init_args                ]: args->mm is 0x000000002267cc9e
    (...)
    [    2.552800] WARNING: CPU: 5 PID: 116 at include/linux/mm.h:2841 free_pud_range+0x8bc/0x8d0
    [    2.552816] Modules linked in:
    [    2.552843] CPU: 5 UID: 0 PID: 116 Comm: modprobe Not tainted 6.12.0-105.debug_vm2.el10.ppc64le+debug #1 VOLUNTARY
    [    2.552859] Hardware name: IBM,9009-41A POWER9 (architected) 0x4e0202 0xf000005 of:IBM,FW910.00 (VL910_062) hv:phyp pSeries
    [    2.552872] NIP:  c0000000007eef3c LR: c0000000007eef30 CTR: c0000000003d8c90
    [    2.552885] REGS: c0000000622e73b0 TRAP: 0700   Not tainted  (6.12.0-105.debug_vm2.el10.ppc64le+debug)
    [    2.552899] MSR:  800000000282b033 <SF,VEC,VSX,EE,FP,ME,IR,DR,RI,LE>  CR: 24002822  XER: 0000000a
    [    2.552954] CFAR: c0000000008f03f0 IRQMASK: 0
    [    2.552954] GPR00: c0000000007eef30 c0000000622e7650 c000000002b1ac00 0000000000000001
    [    2.552954] GPR04: 0000000000000008 0000000000000000 c0000000007eef30 ffffffffffffffff
    [    2.552954] GPR08: 00000000ffff00f5 0000000000000001 0000000000000048 0000000000004000
    [    2.552954] GPR12: 00000003fa440000 c000000017ffa300 c0000000051d9f80 ffffffffffffffdb
    [    2.552954] GPR16: 0000000000000000 0000000000000008 000000000000000a 60000000000000e0
    [    2.552954] GPR20: 4080000000000000 c0000000113af038 00007fffcf130000 0000700000000000
    [    2.552954] GPR24: c000000062a6a000 0000000000000001 8000000062a68000 0000000000000001
    [    2.552954] GPR28: 000000000000000a c000000062ebc600 0000000000002000 c000000062ebc760
    [    2.553170] NIP [c0000000007eef3c] free_pud_range+0x8bc/0x8d0
    [    2.553185] LR [c0000000007eef30] free_pud_range+0x8b0/0x8d0
    [    2.553199] Call Trace:
    [    2.553207] [c0000000622e7650] [c0000000007eef30] free_pud_range+0x8b0/0x8d0 (unreliable)
    [    2.553229] [c0000000622e7750] [c0000000007f40b4] free_pgd_range+0x284/0x3b0
    [    2.553248] [c0000000622e7800] [c0000000007f4630] free_pgtables+0x450/0x570
    [    2.553274] [c0000000622e78e0] [c0000000008161c0] exit_mmap+0x250/0x650
    [    2.553292] [c0000000622e7a30] [c0000000001b95b8] __mmput+0x98/0x290
    [    2.558344] [c0000000622e7a80] [c0000000001d1018] exit_mm+0x118/0x1b0
    [    2.558361] [c0000000622e7ac0] [c0000000001d141c] do_exit+0x2ec/0x870
    [    2.558376] [c0000000622e7b60] [c0000000001d1ca8] do_group_exit+0x88/0x150
    [    2.558391] [c0000000622e7bb0] [c0000000001d1db8] sys_exit_group+0x48/0x50
    [    2.558407] [c0000000622e7be0] [c00000000003d810] system_call_exception+0x1e0/0x4c0
    [    2.558423] [c0000000622e7e50] [c00000000000d05c] system_call_vectored_common+0x15c/0x2ec
    (...)
    [    2.558892] ---[ end trace 0000000000000000 ]---
    [    2.559022] BUG: Bad rss-counter state mm:000000002267cc9e type:MM_ANONPAGES val:1
    [    2.559037] BUG: non-zero pgtables_bytes on freeing mm: -6144
    
    Here the modprobe process ended up with an allocated mm_struct from the
    mm_struct slab that was used before by the debug_vm_pgtable test.  That is
    not a problem, since the mm_struct is initialized again etc., however, if
    it ends up using the same pgd table, it bumps into the old stale entry
    when clearing/freeing the page table entries, so it tries to free an entry
    already gone (that one which was allocated by the debug_vm_pgtable test),
    which also explains the negative pgtables_bytes since it's accounting for
    not allocated entries in the current process.
    
    As far as I looked pgd_{alloc,free} etc.  does not clear entries, and
    clearing of the entries is explicitly done in the free_pgtables->
    free_pgd_range->free_p4d_range->free_pud_range->free_pmd_range->
    free_pte_range path.  However, the debug_vm_pgtable test does not call
    free_pgtables, since it allocates mm_struct and entries manually for its
    test and eg.  not goes through page faults.  So it also should clear
    manually the entries before exit at destroy_args().
    
    This problem was noticed on a reboot X number of times test being done on
    a powerpc host, with a debug kernel with CONFIG_DEBUG_VM_PGTABLE enabled.
    Depends on the system, but on a 100 times reboot loop the problem could
    manifest once or twice, if a process ends up getting the right mm->pgd
    entry with the stale entries used by mm/debug_vm_pagetable.  After using
    this patch, I couldn't reproduce/experience the problems anymore.  I was
    able to reproduce the problem as well on latest upstream kernel (6.16).
    
    I also modified destroy_args() to use mmput() instead of mmdrop(), there
    is no reason to hold mm_users reference and not release the mm_struct
    entirely, and in the output above with my debugging prints I already had
    patched it to use mmput, it did not fix the problem, but helped in the
    debugging as well.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 3c9b84f044a9 ("mm/debug_vm_pgtable: introduce struct pgtable_debug_args")
    Signed-off-by: Herton R. Krzesinski <[email protected]>
    Cc: Anshuman Khandual <[email protected]>
    Cc: Christophe Leroy <[email protected]>
    Cc: Gavin Shan <[email protected]>
    Cc: Gerald Schaefer <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/kmemleak: avoid deadlock by moving pr_warn() outside kmemleak_lock [+ + +]
Author: Breno Leitao <[email protected]>
Date:   Thu Jul 31 02:57:18 2025 -0700

    mm/kmemleak: avoid deadlock by moving pr_warn() outside kmemleak_lock
    
    commit 47b0f6d8f0d2be4d311a49e13d2fd5f152f492b2 upstream.
    
    When netpoll is enabled, calling pr_warn_once() while holding
    kmemleak_lock in mem_pool_alloc() can cause a deadlock due to lock
    inversion with the netconsole subsystem.  This occurs because
    pr_warn_once() may trigger netpoll, which eventually leads to
    __alloc_skb() and back into kmemleak code, attempting to reacquire
    kmemleak_lock.
    
    This is the path for the deadlock.
    
    mem_pool_alloc()
      -> raw_spin_lock_irqsave(&kmemleak_lock, flags);
          -> pr_warn_once()
              -> netconsole subsystem
                 -> netpoll
                     -> __alloc_skb
                       -> __create_object
                         -> raw_spin_lock_irqsave(&kmemleak_lock, flags);
    
    Fix this by setting a flag and issuing the pr_warn_once() after
    kmemleak_lock is released.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: c5665868183f ("mm: kmemleak: use the memory pool for early allocations")
    Signed-off-by: Breno Leitao <[email protected]>
    Reported-by: Jakub Kicinski <[email protected]>
    Acked-by: Catalin Marinas <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm/kmemleak: avoid soft lockup in __kmemleak_do_cleanup() [+ + +]
Author: Waiman Long <[email protected]>
Date:   Mon Jul 28 15:02:48 2025 -0400

    mm/kmemleak: avoid soft lockup in __kmemleak_do_cleanup()
    
    commit d1534ae23c2b6be350c8ab060803fbf6e9682adc upstream.
    
    A soft lockup warning was observed on a relative small system x86-64
    system with 16 GB of memory when running a debug kernel with kmemleak
    enabled.
    
      watchdog: BUG: soft lockup - CPU#8 stuck for 33s! [kworker/8:1:134]
    
    The test system was running a workload with hot unplug happening in
    parallel.  Then kemleak decided to disable itself due to its inability to
    allocate more kmemleak objects.  The debug kernel has its
    CONFIG_DEBUG_KMEMLEAK_MEM_POOL_SIZE set to 40,000.
    
    The soft lockup happened in kmemleak_do_cleanup() when the existing
    kmemleak objects were being removed and deleted one-by-one in a loop via a
    workqueue.  In this particular case, there are at least 40,000 objects
    that need to be processed and given the slowness of a debug kernel and the
    fact that a raw_spinlock has to be acquired and released in
    __delete_object(), it could take a while to properly handle all these
    objects.
    
    As kmemleak has been disabled in this case, the object removal and
    deletion process can be further optimized as locking isn't really needed.
    However, it is probably not worth the effort to optimize for such an edge
    case that should rarely happen.  So the simple solution is to call
    cond_resched() at periodic interval in the iteration loop to avoid soft
    lockup.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Waiman Long <[email protected]>
    Acked-by: Catalin Marinas <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/memory-failure: fix infinite UCE for VM_PFNMAP pfn [+ + +]
Author: Jinjiang Tu <[email protected]>
Date:   Fri Aug 15 15:32:09 2025 +0800

    mm/memory-failure: fix infinite UCE for VM_PFNMAP pfn
    
    commit 2e6053fea379806269c4f7f5e36b523c9c0fb35c upstream.
    
    When memory_failure() is called for a already hwpoisoned pfn,
    kill_accessing_process() will be called to kill current task.  However, if
    the vma of the accessing vaddr is VM_PFNMAP, walk_page_range() will skip
    the vma in walk_page_test() and return 0.
    
    Before commit aaf99ac2ceb7 ("mm/hwpoison: do not send SIGBUS to processes
    with recovered clean pages"), kill_accessing_process() will return EFAULT.
    For x86, the current task will be killed in kill_me_maybe().
    
    However, after this commit, kill_accessing_process() simplies return 0,
    that means UCE is handled properly, but it doesn't actually.  In such
    case, the user task will trigger UCE infinitely.
    
    To fix it, add .test_walk callback for hwpoison_walk_ops to scan all vmas.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: aaf99ac2ceb7 ("mm/hwpoison: do not send SIGBUS to processes with recovered clean pages")
    Signed-off-by: Jinjiang Tu <[email protected]>
    Acked-by: David Hildenbrand <[email protected]>
    Acked-by: Miaohe Lin <[email protected]>
    Reviewed-by: Jane Chu <[email protected]>
    Cc: Kefeng Wang <[email protected]>
    Cc: Naoya Horiguchi <[email protected]>
    Cc: Oscar Salvador <[email protected]>
    Cc: Shuai Xue <[email protected]>
    Cc: Zi Yan <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/ptdump: take the memory hotplug lock inside ptdump_walk_pgd() [+ + +]
Author: Anshuman Khandual <[email protected]>
Date:   Fri Jun 20 10:54:27 2025 +0530

    mm/ptdump: take the memory hotplug lock inside ptdump_walk_pgd()
    
    commit 59305202c67fea50378dcad0cc199dbc13a0e99a upstream.
    
    Memory hot remove unmaps and tears down various kernel page table regions
    as required.  The ptdump code can race with concurrent modifications of
    the kernel page tables.  When leaf entries are modified concurrently, the
    dump code may log stale or inconsistent information for a VA range, but
    this is otherwise not harmful.
    
    But when intermediate levels of kernel page table are freed, the dump code
    will continue to use memory that has been freed and potentially
    reallocated for another purpose.  In such cases, the ptdump code may
    dereference bogus addresses, leading to a number of potential problems.
    
    To avoid the above mentioned race condition, platforms such as arm64,
    riscv and s390 take memory hotplug lock, while dumping kernel page table
    via the sysfs interface /sys/kernel/debug/kernel_page_tables.
    
    Similar race condition exists while checking for pages that might have
    been marked W+X via /sys/kernel/debug/kernel_page_tables/check_wx_pages
    which in turn calls ptdump_check_wx().  Instead of solving this race
    condition again, let's just move the memory hotplug lock inside generic
    ptdump_check_wx() which will benefit both the scenarios.
    
    Drop get_online_mems() and put_online_mems() combination from all existing
    platform ptdump code paths.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: bbd6ec605c0f ("arm64/mm: Enable memory hot remove")
    Signed-off-by: Anshuman Khandual <[email protected]>
    Acked-by: David Hildenbrand <[email protected]>
    Reviewed-by: Dev Jain <[email protected]>
    Acked-by: Alexander Gordeev <[email protected]>    [s390]
    Cc: Catalin Marinas <[email protected]>
    Cc: Will Deacon <[email protected]>
    Cc: Ryan Roberts <[email protected]>
    Cc: Paul Walmsley <[email protected]>
    Cc: Palmer Dabbelt <[email protected]>
    Cc: Alexander Gordeev <[email protected]>
    Cc: Gerald Schaefer <[email protected]>
    Cc: Heiko Carstens <[email protected]>
    Cc: Vasily Gorbik <[email protected]>
    Cc: Christian Borntraeger <[email protected]>
    Cc: Sven Schnelle <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm: drop the assumption that VM_SHARED always implies writable [+ + +]
Author: Isaac J. Manjarres <[email protected]>
Date:   Tue Jul 29 18:51:45 2025 -0700

    mm: drop the assumption that VM_SHARED always implies writable
    
    From: Lorenzo Stoakes <[email protected]>
    
    [ Upstream commit e8e17ee90eaf650c855adb0a3e5e965fd6692ff1 ]
    
    Patch series "permit write-sealed memfd read-only shared mappings", v4.
    
    The man page for fcntl() describing memfd file seals states the following
    about F_SEAL_WRITE:-
    
        Furthermore, trying to create new shared, writable memory-mappings via
        mmap(2) will also fail with EPERM.
    
    With emphasis on 'writable'.  In turns out in fact that currently the
    kernel simply disallows all new shared memory mappings for a memfd with
    F_SEAL_WRITE applied, rendering this documentation inaccurate.
    
    This matters because users are therefore unable to obtain a shared mapping
    to a memfd after write sealing altogether, which limits their usefulness.
    This was reported in the discussion thread [1] originating from a bug
    report [2].
    
    This is a product of both using the struct address_space->i_mmap_writable
    atomic counter to determine whether writing may be permitted, and the
    kernel adjusting this counter when any VM_SHARED mapping is performed and
    more generally implicitly assuming VM_SHARED implies writable.
    
    It seems sensible that we should only update this mapping if VM_MAYWRITE
    is specified, i.e.  whether it is possible that this mapping could at any
    point be written to.
    
    If we do so then all we need to do to permit write seals to function as
    documented is to clear VM_MAYWRITE when mapping read-only.  It turns out
    this functionality already exists for F_SEAL_FUTURE_WRITE - we can
    therefore simply adapt this logic to do the same for F_SEAL_WRITE.
    
    We then hit a chicken and egg situation in mmap_region() where the check
    for VM_MAYWRITE occurs before we are able to clear this flag.  To work
    around this, perform this check after we invoke call_mmap(), with careful
    consideration of error paths.
    
    Thanks to Andy Lutomirski for the suggestion!
    
    [1]:https://lore.kernel.org/all/[email protected]/
    [2]:https://bugzilla.kernel.org/show_bug.cgi?id=217238
    
    This patch (of 3):
    
    There is a general assumption that VMAs with the VM_SHARED flag set are
    writable.  If the VM_MAYWRITE flag is not set, then this is simply not the
    case.
    
    Update those checks which affect the struct address_space->i_mmap_writable
    field to explicitly test for this by introducing
    [vma_]is_shared_maywrite() helper functions.
    
    This remains entirely conservative, as the lack of VM_MAYWRITE guarantees
    that the VMA cannot be written to.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lkml.kernel.org/r/d978aefefa83ec42d18dfa964ad180dbcde34795.1697116581.git.lstoakes@gmail.com
    Signed-off-by: Lorenzo Stoakes <[email protected]>
    Suggested-by: Andy Lutomirski <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Cc: Alexander Viro <[email protected]>
    Cc: Christian Brauner <[email protected]>
    Cc: Hugh Dickins <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Mike Kravetz <[email protected]>
    Cc: Muchun Song <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Cc: [email protected]
    [isaacmanjarres: resolved merge conflicts due to
    due to refactoring that happened in upstream commit
    5de195060b2e ("mm: resolve faulty mmap_region() error path behaviour")]
    Signed-off-by: Isaac J. Manjarres <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm: reinstate ability to map write-sealed memfd mappings read-only [+ + +]
Author: Isaac J. Manjarres <[email protected]>
Date:   Tue Jul 29 18:51:47 2025 -0700

    mm: reinstate ability to map write-sealed memfd mappings read-only
    
    From: Lorenzo Stoakes <[email protected]>
    
    [ Upstream commit 8ec396d05d1b737c87311fb7311f753b02c2a6b1 ]
    
    Patch series "mm: reinstate ability to map write-sealed memfd mappings
    read-only".
    
    In commit 158978945f31 ("mm: perform the mapping_map_writable() check
    after call_mmap()") (and preceding changes in the same series) it became
    possible to mmap() F_SEAL_WRITE sealed memfd mappings read-only.
    
    Commit 5de195060b2e ("mm: resolve faulty mmap_region() error path
    behaviour") unintentionally undid this logic by moving the
    mapping_map_writable() check before the shmem_mmap() hook is invoked,
    thereby regressing this change.
    
    This series reworks how we both permit write-sealed mappings being mapped
    read-only and disallow mprotect() from undoing the write-seal, fixing this
    regression.
    
    We also add a regression test to ensure that we do not accidentally
    regress this in future.
    
    Thanks to Julian Orth for reporting this regression.
    
    This patch (of 2):
    
    In commit 158978945f31 ("mm: perform the mapping_map_writable() check
    after call_mmap()") (and preceding changes in the same series) it became
    possible to mmap() F_SEAL_WRITE sealed memfd mappings read-only.
    
    This was previously unnecessarily disallowed, despite the man page
    documentation indicating that it would be, thereby limiting the usefulness
    of F_SEAL_WRITE logic.
    
    We fixed this by adapting logic that existed for the F_SEAL_FUTURE_WRITE
    seal (one which disallows future writes to the memfd) to also be used for
    F_SEAL_WRITE.
    
    For background - the F_SEAL_FUTURE_WRITE seal clears VM_MAYWRITE for a
    read-only mapping to disallow mprotect() from overriding the seal - an
    operation performed by seal_check_write(), invoked from shmem_mmap(), the
    f_op->mmap() hook used by shmem mappings.
    
    By extending this to F_SEAL_WRITE and critically - checking
    mapping_map_writable() to determine if we may map the memfd AFTER we
    invoke shmem_mmap() - the desired logic becomes possible.  This is because
    mapping_map_writable() explicitly checks for VM_MAYWRITE, which we will
    have cleared.
    
    Commit 5de195060b2e ("mm: resolve faulty mmap_region() error path
    behaviour") unintentionally undid this logic by moving the
    mapping_map_writable() check before the shmem_mmap() hook is invoked,
    thereby regressing this change.
    
    We reinstate this functionality by moving the check out of shmem_mmap()
    and instead performing it in do_mmap() at the point at which VMA flags are
    being determined, which seems in any case to be a more appropriate place
    in which to make this determination.
    
    In order to achieve this we rework memfd seal logic to allow us access to
    this information using existing logic and eliminate the clearing of
    VM_MAYWRITE from seal_check_write() which we are performing in do_mmap()
    instead.
    
    Link: https://lkml.kernel.org/r/99fc35d2c62bd2e05571cf60d9f8b843c56069e0.1732804776.git.lorenzo.stoakes@oracle.com
    Fixes: 5de195060b2e ("mm: resolve faulty mmap_region() error path behaviour")
    Signed-off-by: Lorenzo Stoakes <[email protected]>
    Reported-by: Julian Orth <[email protected]>
    Closes: https://lore.kernel.org/all/CAHijbEUMhvJTN9Xw1GmbM266FXXv=U7s4L_Jem5x3AaPZxrYpQ@mail.gmail.com/
    Cc: Jann Horn <[email protected]>
    Cc: Liam R. Howlett <[email protected]>
    Cc: Linus Torvalds <[email protected]>
    Cc: Shuah Khan <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Isaac J. Manjarres <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm: update memfd seal write check to include F_SEAL_WRITE [+ + +]
Author: Isaac J. Manjarres <[email protected]>
Date:   Tue Jul 29 18:51:46 2025 -0700

    mm: update memfd seal write check to include F_SEAL_WRITE
    
    From: Lorenzo Stoakes <[email protected]>
    
    [ Upstream commit 28464bbb2ddc199433383994bcb9600c8034afa1 ]
    
    The seal_check_future_write() function is called by shmem_mmap() or
    hugetlbfs_file_mmap() to disallow any future writable mappings of an memfd
    sealed this way.
    
    The F_SEAL_WRITE flag is not checked here, as that is handled via the
    mapping->i_mmap_writable mechanism and so any attempt at a mapping would
    fail before this could be run.
    
    However we intend to change this, meaning this check can be performed for
    F_SEAL_WRITE mappings also.
    
    The logic here is equally applicable to both flags, so update this
    function to accommodate both and rename it accordingly.
    
    Link: https://lkml.kernel.org/r/913628168ce6cce77df7d13a63970bae06a526e0.1697116581.git.lstoakes@gmail.com
    Signed-off-by: Lorenzo Stoakes <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Cc: Alexander Viro <[email protected]>
    Cc: Andy Lutomirski <[email protected]>
    Cc: Christian Brauner <[email protected]>
    Cc: Hugh Dickins <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Mike Kravetz <[email protected]>
    Cc: Muchun Song <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Cc: [email protected]
    Signed-off-by: Isaac J. Manjarres <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mmc: rtsx_usb_sdmmc: Fix error-path in sd_set_power_mode() [+ + +]
Author: Ulf Hansson <[email protected]>
Date:   Tue Jun 10 13:16:23 2025 +0200

    mmc: rtsx_usb_sdmmc: Fix error-path in sd_set_power_mode()
    
    [ Upstream commit 47a255f7d2eabee06cfbf5b1c2379749442fd01d ]
    
    In the error path of sd_set_power_mode() we don't update host->power_mode,
    which could lead to an imbalance of the runtime PM usage count. Fix this by
    always updating host->power_mode.
    
    Reviewed-by: Avri Altman <[email protected]>
    Signed-off-by: Ulf Hansson <[email protected]>
    Acked-by: Ricky Wu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

mmc: sdhci-msm: Ensure SD card power isn't ON when card removed [+ + +]
Author: Sarthak Garg <[email protected]>
Date:   Tue Jul 1 15:36:59 2025 +0530

    mmc: sdhci-msm: Ensure SD card power isn't ON when card removed
    
    [ Upstream commit db58532188ebf51d52b1d7693d9e94c76b926e9f ]
    
    Many mobile phones feature multi-card tray designs, where the same
    tray is used for both SD and SIM cards. If the SD card is placed
    at the outermost location in the tray, the SIM card may come in
    contact with SD card power-supply while removing the tray, possibly
    resulting in SIM damage.
    
    To prevent that, make sure the SD card is really inserted by reading
    the Card Detect pin state. If it's not, turn off the power in
    sdhci_msm_check_power_status() and also set the BUS_FAIL power state
    on the controller as part of pwr_irq handling for BUS_ON request.
    
    Signed-off-by: Sarthak Garg <[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]>

mmc: sdhci-pci-gli: Add a new function to simplify the code [+ + +]
Author: Victor Shih <[email protected]>
Date:   Sat Aug 23 10:32:44 2025 -0400

    mmc: sdhci-pci-gli: Add a new function to simplify the code
    
    [ Upstream commit dec8b38be4b35cae5f7fa086daf2631e2cfa09c1 ]
    
    In preparation to fix replay timer timeout, add
    sdhci_gli_mask_replay_timer_timeout() function
    to simplify some of the code, allowing it to be re-used.
    
    Signed-off-by: Victor Shih <[email protected]>
    Fixes: 1ae1d2d6e555 ("mmc: sdhci-pci-gli: Add Genesys Logic GL9763E support")
    Cc: [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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mmc: sdhci-pci-gli: GL9763e: Mask the replay timer timeout of AER [+ + +]
Author: Victor Shih <[email protected]>
Date:   Sat Aug 23 11:45:22 2025 -0400

    mmc: sdhci-pci-gli: GL9763e: Mask the replay timer timeout of AER
    
    [ Upstream commit 340be332e420ed37d15d4169a1b4174e912ad6cb ]
    
    Due to a flaw in the hardware design, the GL9763e replay timer frequently
    times out when ASPM is enabled. As a result, the warning messages will
    often appear in the system log when the system accesses the GL9763e
    PCI config. Therefore, the replay timer timeout must be masked.
    
    Signed-off-by: Victor Shih <[email protected]>
    Fixes: 1ae1d2d6e555 ("mmc: sdhci-pci-gli: Add Genesys Logic GL9763E support")
    Cc: [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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mmc: sdhci-pci-gli: GL9763e: Rename the gli_set_gl9763e() for consistency [+ + +]
Author: Victor Shih <[email protected]>
Date:   Thu Jul 31 14:57:51 2025 +0800

    mmc: sdhci-pci-gli: GL9763e: Rename the gli_set_gl9763e() for consistency
    
    commit 293ed0f5f34e1e9df888456af4b0a021f57b5f54 upstream.
    
    In preparation to fix replay timer timeout, rename the
    gli_set_gl9763e() to gl9763e_hw_setting() for consistency.
    
    Signed-off-by: Victor Shih <[email protected]>
    Fixes: 1ae1d2d6e555 ("mmc: sdhci-pci-gli: Add Genesys Logic GL9763E support")
    Cc: [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: Greg Kroah-Hartman <[email protected]>

mmc: sdhci-pci-gli: Use PCI AER definitions, not hard-coded values [+ + +]
Author: Bjorn Helgaas <[email protected]>
Date:   Sat Aug 23 10:32:43 2025 -0400

    mmc: sdhci-pci-gli: Use PCI AER definitions, not hard-coded values
    
    [ Upstream commit 951b7ccc54591ba48755b5e0c7fc8b9623a64640 ]
    
    015c9cbcf0ad ("mmc: sdhci-pci-gli: GL9750: Mask the replay timer timeout of
    AER") added PCI_GLI_9750_CORRERR_MASK, the offset of the AER Capability in
    config space, and PCI_GLI_9750_CORRERR_MASK_REPLAY_TIMER_TIMEOUT, the
    Replay Timer Timeout bit in the AER Correctable Error Status register.
    
    Use pci_find_ext_capability() to locate the AER Capability and use the
    existing PCI_ERR_COR_REP_TIMER definition to mask the bit.
    
    This removes a little bit of unnecessarily device-specific code and makes
    AER-related things more greppable.
    
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Stable-dep-of: dec8b38be4b3 ("mmc: sdhci-pci-gli: Add a new function to simplify the code")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
module: Prevent silent truncation of module name in delete_module(2) [+ + +]
Author: Petr Pavlu <[email protected]>
Date:   Mon Jun 30 16:32:32 2025 +0200

    module: Prevent silent truncation of module name in delete_module(2)
    
    [ Upstream commit a6323bd4e611567913e23df5b58f2d4e4da06789 ]
    
    Passing a module name longer than MODULE_NAME_LEN to the delete_module
    syscall results in its silent truncation. This really isn't much of
    a problem in practice, but it could theoretically lead to the removal of an
    incorrect module. It is more sensible to return ENAMETOOLONG or ENOENT in
    such a case.
    
    Update the syscall to return ENOENT, as documented in the delete_module(2)
    man page to mean "No module by that name exists." This is appropriate
    because a module with a name longer than MODULE_NAME_LEN cannot be loaded
    in the first place.
    
    Signed-off-by: Petr Pavlu <[email protected]>
    Reviewed-by: Daniel Gomez <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Daniel Gomez <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
most: core: Drop device reference after usage in get_channel() [+ + +]
Author: Miaoqian Lin <[email protected]>
Date:   Mon Aug 4 12:29:55 2025 +0400

    most: core: Drop device reference after usage in get_channel()
    
    commit b47b493d6387ae437098112936f32be27f73516c upstream.
    
    In get_channel(), the reference obtained by bus_find_device_by_name()
    was dropped via put_device() before accessing the device's driver data
    Move put_device() after usage to avoid potential issues.
    
    Fixes: 2485055394be ("staging: most: core: drop device reference")
    Cc: stable <[email protected]>
    Signed-off-by: Miaoqian Lin <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mptcp: disable add_addr retransmission when timeout is 0 [+ + +]
Author: Geliang Tang <[email protected]>
Date:   Fri Aug 22 16:11:02 2025 +0200

    mptcp: disable add_addr retransmission when timeout is 0
    
    commit f5ce0714623cffd00bf2a83e890d09c609b7f50a upstream.
    
    When add_addr_timeout was set to 0, this caused the ADD_ADDR to be
    retransmitted immediately, which looks like a buggy behaviour. Instead,
    interpret 0 as "no retransmissions needed".
    
    The documentation is updated to explicitly state that setting the timeout
    to 0 disables retransmission.
    
    Fixes: 93f323b9cccc ("mptcp: add a new sysctl add_addr_timeout")
    Cc: [email protected]
    Suggested-by: Matthieu Baerts <[email protected]>
    Signed-off-by: Geliang Tang <[email protected]>
    Reviewed-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/20250815-net-mptcp-misc-fixes-6-17-rc2-v1-5-521fe9957892@kernel.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ Before commit e4c28e3d5c09 ("mptcp: pm: move generic PM helpers to
      pm.c"), mptcp_pm_alloc_anno_list() was in pm_netlink.c. The same patch
      can be applied there without conflicts. ]
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: drop skb if MPTCP skb extension allocation fails [+ + +]
Author: Christoph Paasch <[email protected]>
Date:   Fri Aug 15 19:28:19 2025 +0200

    mptcp: drop skb if MPTCP skb extension allocation fails
    
    commit ccab044697980c6c01ab51f43f48f13b8a3e5c33 upstream.
    
    When skb_ext_add(skb, SKB_EXT_MPTCP) fails in mptcp_incoming_options(),
    we used to return true, letting the segment proceed through the TCP
    receive path without a DSS mapping. Such segments can leave inconsistent
    mapping state and trigger a mid-stream fallback to TCP, which in testing
    collapsed (by artificially forcing failures in skb_ext_add) throughput
    to zero.
    
    Return false instead so the TCP input path drops the skb (see
    tcp_data_queue() and step-7 processing). This is the safer choice
    under memory pressure: it preserves MPTCP correctness and provides
    backpressure to the sender.
    
    Control packets remain unaffected: ACK updates and DATA_FIN handling
    happen before attempting the extension allocation, and tcp_reset()
    continues to ignore the return value.
    
    With this change, MPTCP continues to work at high throughput if we
    artificially inject failures into skb_ext_add.
    
    Fixes: 6787b7e350d3 ("mptcp: avoid processing packet if a subflow reset")
    Cc: [email protected]
    Signed-off-by: Christoph Paasch <[email protected]>
    Reviewed-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/20250815-net-mptcp-misc-fixes-6-17-rc2-v1-1-521fe9957892@kernel.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: pm: kernel: flush: do not reset ADD_ADDR limit [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Fri Aug 15 19:28:20 2025 +0200

    mptcp: pm: kernel: flush: do not reset ADD_ADDR limit
    
    commit 68fc0f4b0d25692940cdc85c68e366cae63e1757 upstream.
    
    A flush of the MPTCP endpoints should not affect the MPTCP limits. In
    other words, 'ip mptcp endpoint flush' should not change 'ip mptcp
    limits'.
    
    But it was the case: the MPTCP_PM_ATTR_RCV_ADD_ADDRS (add_addr_accepted)
    limit was reset by accident. Removing the reset of this counter during a
    flush fixes this issue.
    
    Fixes: 01cacb00b35c ("mptcp: add netlink-based PM")
    Cc: [email protected]
    Reported-by: Thomas Dreibholz <[email protected]>
    Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/579
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/20250815-net-mptcp-misc-fixes-6-17-rc2-v1-2-521fe9957892@kernel.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: remove duplicate sk_reset_timer call [+ + +]
Author: Geliang Tang <[email protected]>
Date:   Fri Aug 22 16:11:01 2025 +0200

    mptcp: remove duplicate sk_reset_timer call
    
    commit 5d13349472ac8abcbcb94407969aa0fdc2e1f1be upstream.
    
    sk_reset_timer() was called twice in mptcp_pm_alloc_anno_list.
    
    Simplify the code by using a 'goto' statement to eliminate the
    duplication.
    
    Note that this is not a fix, but it will help backporting the following
    patch. The same "Fixes" tag has been added for this reason.
    
    Fixes: 93f323b9cccc ("mptcp: add a new sysctl add_addr_timeout")
    Cc: [email protected]
    Signed-off-by: Geliang Tang <[email protected]>
    Reviewed-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/20250815-net-mptcp-misc-fixes-6-17-rc2-v1-4-521fe9957892@kernel.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ Before commit e4c28e3d5c09 ("mptcp: pm: move generic PM helpers to
      pm.c"), mptcp_pm_alloc_anno_list() was in pm_netlink.c. The same patch
      can be applied there without conflicts. ]
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mtd: rawnand: fsmc: Add missing check after DMA map [+ + +]
Author: Thomas Fourier <[email protected]>
Date:   Mon Jul 7 09:39:37 2025 +0200

    mtd: rawnand: fsmc: Add missing check after DMA map
    
    commit 6c4dab38431fee3d39a841d66ba6f2890b31b005 upstream.
    
    The DMA map functions can fail and should be tested for errors.
    
    Fixes: 4774fb0a48aa ("mtd: nand/fsmc: Add DMA support")
    Cc: [email protected]
    Signed-off-by: Thomas Fourier <[email protected]>
    Rule: add
    Link: https://lore.kernel.org/stable/20250702065806.20983-2-fourier.thomas%40gmail.com
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mtd: rawnand: renesas: Add missing check after DMA map [+ + +]
Author: Thomas Fourier <[email protected]>
Date:   Wed Jul 2 10:01:06 2025 +0200

    mtd: rawnand: renesas: Add missing check after DMA map
    
    commit 79e441ee47949376e3bc20f085cf017b70523d0f upstream.
    
    The DMA map functions can fail and should be tested for errors.
    
    Fixes: d8701fe890ec ("mtd: rawnand: renesas: Add new NAND controller driver")
    Cc: [email protected]
    Signed-off-by: Thomas Fourier <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mtd: spi-nor: Fix spi_nor_try_unlock_all() [+ + +]
Author: Michael Walle <[email protected]>
Date:   Tue Jul 1 16:04:26 2025 +0200

    mtd: spi-nor: Fix spi_nor_try_unlock_all()
    
    commit 2e3a7476ec3989e77270b9481e76e137824b17c0 upstream.
    
    Commit ff67592cbdfc ("mtd: spi-nor: Introduce spi_nor_set_mtd_info()")
    moved all initialization of the mtd fields at the end of spi_nor_scan().
    Normally, the mtd info is only needed for the mtd ops on the device,
    with one exception: spi_nor_try_unlock_all(), which will also make use
    of the mtd->size parameter. With that commit, the size will always be
    zero because it is not initialized. Fix that by not using the size of
    the mtd_info struct, but use the size from struct spi_nor_flash_parameter.
    
    Fixes: ff67592cbdfc ("mtd: spi-nor: Introduce spi_nor_set_mtd_info()")
    Cc: [email protected]
    Reported-by: Jean-Marc Ranger <[email protected]>
    Closes: https://lore.kernel.org/all/DM6PR06MB561177323DC5207E34AF2A06C547A@DM6PR06MB5611.namprd06.prod.outlook.com/
    Tested-by: Jean-Marc Ranger <[email protected]>
    Signed-off-by: Michael Walle <[email protected]>
    Reviewed-by: Pratyush Yadav <[email protected]>
    Signed-off-by: Pratyush Yadav <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mtd: spinand: propagate spinand_wait() errors from spinand_write_page() [+ + +]
Author: Gabor Juhos <[email protected]>
Date:   Tue Jul 8 15:11:00 2025 +0200

    mtd: spinand: propagate spinand_wait() errors from spinand_write_page()
    
    commit 091d9e35b85b0f8f7e1c73535299f91364a5c73a upstream.
    
    Since commit 3d1f08b032dc ("mtd: spinand: Use the external ECC engine
    logic") the spinand_write_page() function ignores the errors returned
    by spinand_wait(). Change the code to propagate those up to the stack
    as it was done before the offending change.
    
    Cc: [email protected]
    Fixes: 3d1f08b032dc ("mtd: spinand: Use the external ECC engine logic")
    Signed-off-by: Gabor Juhos <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
neighbour: add support for NUD_PERMANENT proxy entries [+ + +]
Author: Nicolas Escande <[email protected]>
Date:   Tue Jun 17 16:13:34 2025 +0200

    neighbour: add support for NUD_PERMANENT proxy entries
    
    [ Upstream commit c7d78566bbd30544a0618a6ffbc97bc0ddac7035 ]
    
    As discussesd before in [0] proxy entries (which are more configuration
    than runtime data) should stay when the link (carrier) goes does down.
    This is what happens for regular neighbour entries.
    
    So lets fix this by:
      - storing in proxy entries the fact that it was added as NUD_PERMANENT
      - not removing NUD_PERMANENT proxy entries when the carrier goes down
        (same as how it's done in neigh_flush_dev() for regular neigh entries)
    
    [0]: https://lore.kernel.org/netdev/[email protected]/
    
    Signed-off-by: Nicolas Escande <[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]>

 
net, hsr: reject HSR frame if skb can't hold tag [+ + +]
Author: Jakub Acs <[email protected]>
Date:   Tue Aug 19 08:28:42 2025 +0000

    net, hsr: reject HSR frame if skb can't hold tag
    
    commit 7af76e9d18a9fd6f8611b3313c86c190f9b6a5a7 upstream.
    
    Receiving HSR frame with insufficient space to hold HSR tag in the skb
    can result in a crash (kernel BUG):
    
    [   45.390915] skbuff: skb_under_panic: text:ffffffff86f32cac len:26 put:14 head:ffff888042418000 data:ffff888042417ff4 tail:0xe end:0x180 dev:bridge_slave_1
    [   45.392559] ------------[ cut here ]------------
    [   45.392912] kernel BUG at net/core/skbuff.c:211!
    [   45.393276] Oops: invalid opcode: 0000 [#1] SMP DEBUG_PAGEALLOC KASAN NOPTI
    [   45.393809] CPU: 1 UID: 0 PID: 2496 Comm: reproducer Not tainted 6.15.0 #12 PREEMPT(undef)
    [   45.394433] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014
    [   45.395273] RIP: 0010:skb_panic+0x15b/0x1d0
    
    <snip registers, remove unreliable trace>
    
    [   45.402911] Call Trace:
    [   45.403105]  <IRQ>
    [   45.404470]  skb_push+0xcd/0xf0
    [   45.404726]  br_dev_queue_push_xmit+0x7c/0x6c0
    [   45.406513]  br_forward_finish+0x128/0x260
    [   45.408483]  __br_forward+0x42d/0x590
    [   45.409464]  maybe_deliver+0x2eb/0x420
    [   45.409763]  br_flood+0x174/0x4a0
    [   45.410030]  br_handle_frame_finish+0xc7c/0x1bc0
    [   45.411618]  br_handle_frame+0xac3/0x1230
    [   45.413674]  __netif_receive_skb_core.constprop.0+0x808/0x3df0
    [   45.422966]  __netif_receive_skb_one_core+0xb4/0x1f0
    [   45.424478]  __netif_receive_skb+0x22/0x170
    [   45.424806]  process_backlog+0x242/0x6d0
    [   45.425116]  __napi_poll+0xbb/0x630
    [   45.425394]  net_rx_action+0x4d1/0xcc0
    [   45.427613]  handle_softirqs+0x1a4/0x580
    [   45.427926]  do_softirq+0x74/0x90
    [   45.428196]  </IRQ>
    
    This issue was found by syzkaller.
    
    The panic happens in br_dev_queue_push_xmit() once it receives a
    corrupted skb with ETH header already pushed in linear data. When it
    attempts the skb_push() call, there's not enough headroom and
    skb_push() panics.
    
    The corrupted skb is put on the queue by HSR layer, which makes a
    sequence of unintended transformations when it receives a specific
    corrupted HSR frame (with incomplete TAG).
    
    Fix it by dropping and consuming frames that are not long enough to
    contain both ethernet and hsr headers.
    
    Alternative fix would be to check for enough headroom before skb_push()
    in br_dev_queue_push_xmit().
    
    In the reproducer, this is injected via AF_PACKET, but I don't easily
    see why it couldn't be sent over the wire from adjacent network.
    
    Further Details:
    
    In the reproducer, the following network interface chain is set up:
    
    ┌────────────────┐   ┌────────────────┐
    │ veth0_to_hsr   ├───┤  hsr_slave0    ┼───┐
    └────────────────┘   └────────────────┘   │
                                              │ ┌──────┐
                                              ├─┤ hsr0 ├───┐
                                              │ └──────┘   │
    ┌────────────────┐   ┌────────────────┐   │            │┌────────┐
    │ veth1_to_hsr   ┼───┤  hsr_slave1    ├───┘            └┤        │
    └────────────────┘   └────────────────┘                ┌┼ bridge │
                                                           ││        │
                                                           │└────────┘
                                                           │
                                            ┌───────┐      │
                                            │  ...  ├──────┘
                                            └───────┘
    
    To trigger the events leading up to crash, reproducer sends a corrupted
    HSR frame with incomplete TAG, via AF_PACKET socket on 'veth0_to_hsr'.
    
    The first HSR-layer function to process this frame is
    hsr_handle_frame(). It and then checks if the
    protocol is ETH_P_PRP or ETH_P_HSR. If it is, it calls
    skb_set_network_header(skb, ETH_HLEN + HSR_HLEN), without checking that
    the skb is long enough. For the crashing frame it is not, and hence the
    skb->network_header and skb->mac_len fields are set incorrectly,
    pointing after the end of the linear buffer.
    
    I will call this a BUG#1 and it is what is addressed by this patch. In
    the crashing scenario before the fix, the skb continues to go down the
    hsr path as follows.
    
    hsr_handle_frame() then calls this sequence
    hsr_forward_skb()
      fill_frame_info()
        hsr->proto_ops->fill_frame_info()
          hsr_fill_frame_info()
    
    hsr_fill_frame_info() contains a check that intends to check whether the
    skb actually contains the HSR header. But the check relies on the
    skb->mac_len field which was erroneously setup due to BUG#1, so the
    check passes and the execution continues  back in the hsr_forward_skb():
    
    hsr_forward_skb()
      hsr_forward_do()
        hsr->proto_ops->get_untagged_frame()
          hsr_get_untagged_frame()
            create_stripped_skb_hsr()
    
    In create_stripped_skb_hsr(), a copy of the skb is created and is
    further corrupted by operation that attempts to strip the HSR tag in a
    call to __pskb_copy().
    
    The skb enters create_stripped_skb_hsr() with ethernet header pushed in
    linear buffer. The skb_pull(skb_in, HSR_HLEN) thus pulls 6 bytes of
    ethernet header into the headroom, creating skb_in with a headroom of
    size 8. The subsequent __pskb_copy() then creates an skb with headroom
    of just 2 and skb->len of just 12, this is how it looks after the copy:
    
    gdb) p skb->len
    $10 = 12
    (gdb) p skb->data
    $11 = (unsigned char *) 0xffff888041e45382 "\252\252\252\252\252!\210\373",
    (gdb) p skb->head
    $12 = (unsigned char *) 0xffff888041e45380 ""
    
    It seems create_stripped_skb_hsr() assumes that ETH header is pulled
    in the headroom when it's entered, because it just pulls HSR header on
    top. But that is not the case in our code-path and we end up with the
    corrupted skb instead. I will call this BUG#2
    
    *I got confused here because it seems that under no conditions can
    create_stripped_skb_hsr() work well, the assumption it makes is not true
    during the processing of hsr frames - since the skb_push() in
    hsr_handle_frame to skb_pull in hsr_deliver_master(). I wonder whether I
    missed something here.*
    
    Next, the execution arrives in hsr_deliver_master(). It calls
    skb_pull(ETH_HLEN), which just returns NULL - the SKB does not have
    enough space for the pull (as it only has 12 bytes in total at this
    point).
    
    *The skb_pull() here further suggests that ethernet header is meant
    to be pushed through the whole hsr processing and
    create_stripped_skb_hsr() should pull it before doing the HSR header
    pull.*
    
    hsr_deliver_master() then puts the corrupted skb on the queue, it is
    then picked up from there by bridge frame handling layer and finally
    lands in br_dev_queue_push_xmit where it panics.
    
    Cc: [email protected]
    Fixes: 48b491a5cc74 ("net: hsr: fix mac_len checks")
    Reported-by: [email protected]
    Signed-off-by: Jakub Acs <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net/mlx5: Base ECVF devlink port attrs from 0 [+ + +]
Author: Daniel Jurgens <[email protected]>
Date:   Wed Aug 20 16:32:02 2025 +0300

    net/mlx5: Base ECVF devlink port attrs from 0
    
    [ Upstream commit bc17455bc843b2f4b206e0bb8139013eb3d3c08b ]
    
    Adjust the vport number by the base ECVF vport number so the port
    attributes start at 0. Previously the port attributes would start 1
    after the maximum number of host VFs.
    
    Fixes: dc13180824b7 ("net/mlx5: Enable devlink port for embedded cpu VF vports")
    Signed-off-by: Daniel Jurgens <[email protected]>
    Reviewed-by: Parav Pandit <[email protected]>
    Reviewed-by: Saeed Mahameed <[email protected]>
    Signed-off-by: Tariq Toukan <[email protected]>
    Signed-off-by: Mark Bloch <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/mlx5e: Preserve shared buffer capacity during headroom updates [+ + +]
Author: Armen Ratner <[email protected]>
Date:   Wed Aug 20 16:32:09 2025 +0300

    net/mlx5e: Preserve shared buffer capacity during headroom updates
    
    [ Upstream commit 8b0587a885fdb34fd6090a3f8625cb7ac1444826 ]
    
    When port buffer headroom changes, port_update_shared_buffer()
    recalculates the shared buffer size and splits it in a 3:1 ratio
    (lossy:lossless) - Currently, the calculation is:
    lossless = shared / 4;
    lossy = (shared / 4) * 3;
    
    Meaning, the calculation dropped the remainder of shared % 4 due to
    integer division, unintentionally reducing the total shared buffer
    by up to three cells on each update. Over time, this could shrink
    the buffer below usable size.
    
    Fix it by changing the calculation to:
    lossless = shared / 4;
    lossy = shared - lossless;
    
    This retains all buffer cells while still approximating the
    intended 3:1 split, preventing capacity loss over time.
    
    While at it, perform headroom calculations in units of cells rather than
    in bytes for more accurate calculations avoiding extra divisions.
    
    Fixes: a440030d8946 ("net/mlx5e: Update shared buffer along with device buffer changes")
    Signed-off-by: Armen Ratner <[email protected]>
    Signed-off-by: Maher Sanalla <[email protected]>
    Reviewed-by: Tariq Toukan <[email protected]>
    Signed-off-by: Alexei Lazar <[email protected]>
    Signed-off-by: Mark Bloch <[email protected]>
    Reviewed-by: Przemek Kitszel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/mlx5e: Properly access RCU protected qdisc_sleeping variable [+ + +]
Author: Leon Romanovsky <[email protected]>
Date:   Wed Jul 16 17:17:49 2025 +0300

    net/mlx5e: Properly access RCU protected qdisc_sleeping variable
    
    [ Upstream commit 2a601b2d35623065d31ebaf697b07502d54878c9 ]
    
    qdisc_sleeping variable is declared as "struct Qdisc __rcu" and
    as such needs proper annotation while accessing it.
    
    Without rtnl_dereference(), the following error is generated by sparse:
    
    drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:377:40: warning:
      incorrect type in initializer (different address spaces)
    drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:377:40:    expected
      struct Qdisc *qdisc
    drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:377:40:    got struct
      Qdisc [noderef] __rcu *qdisc_sleeping
    
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Tariq Toukan <[email protected]>
    Reviewed-by: Michal Swiatkowski <[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: ets: use old 'nbands' while purging unused classes [+ + +]
Author: Davide Caratti <[email protected]>
Date:   Mon Aug 18 23:31:53 2025 -0400

    net/sched: ets: use old 'nbands' while purging unused classes
    
    [ Upstream commit 87c6efc5ce9c126ae4a781bc04504b83780e3650 ]
    
    Shuang reported sch_ets test-case [1] crashing in ets_class_qlen_notify()
    after recent changes from Lion [2]. The problem is: in ets_qdisc_change()
    we purge unused DWRR queues; the value of 'q->nbands' is the new one, and
    the cleanup should be done with the old one. The problem is here since my
    first attempts to fix ets_qdisc_change(), but it surfaced again after the
    recent qdisc len accounting fixes. Fix it purging idle DWRR queues before
    assigning a new value of 'q->nbands', so that all purge operations find a
    consistent configuration:
    
     - old 'q->nbands' because it's needed by ets_class_find()
     - old 'q->nstrict' because it's needed by ets_class_is_strict()
    
     BUG: kernel NULL pointer dereference, address: 0000000000000000
     #PF: supervisor read access in kernel mode
     #PF: error_code(0x0000) - not-present page
     PGD 0 P4D 0
     Oops: Oops: 0000 [#1] SMP NOPTI
     CPU: 62 UID: 0 PID: 39457 Comm: tc Kdump: loaded Not tainted 6.12.0-116.el10.x86_64 #1 PREEMPT(voluntary)
     Hardware name: Dell Inc. PowerEdge R640/06DKY5, BIOS 2.12.2 07/09/2021
     RIP: 0010:__list_del_entry_valid_or_report+0x4/0x80
     Code: ff 4c 39 c7 0f 84 39 19 8e ff b8 01 00 00 00 c3 cc cc cc cc 66 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 f3 0f 1e fa <48> 8b 17 48 8b 4f 08 48 85 d2 0f 84 56 19 8e ff 48 85 c9 0f 84 ab
     RSP: 0018:ffffba186009f400 EFLAGS: 00010202
     RAX: 00000000000000d6 RBX: 0000000000000000 RCX: 0000000000000004
     RDX: ffff9f0fa29b69c0 RSI: 0000000000000000 RDI: 0000000000000000
     RBP: ffffffffc12c2400 R08: 0000000000000008 R09: 0000000000000004
     R10: ffffffffffffffff R11: 0000000000000004 R12: 0000000000000000
     R13: ffff9f0f8cfe0000 R14: 0000000000100005 R15: 0000000000000000
     FS:  00007f2154f37480(0000) GS:ffff9f269c1c0000(0000) knlGS:0000000000000000
     CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: 0000000000000000 CR3: 00000001530be001 CR4: 00000000007726f0
     DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
     DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
     PKRU: 55555554
     Call Trace:
      <TASK>
      ets_class_qlen_notify+0x65/0x90 [sch_ets]
      qdisc_tree_reduce_backlog+0x74/0x110
      ets_qdisc_change+0x630/0xa40 [sch_ets]
      __tc_modify_qdisc.constprop.0+0x216/0x7f0
      tc_modify_qdisc+0x7c/0x120
      rtnetlink_rcv_msg+0x145/0x3f0
      netlink_rcv_skb+0x53/0x100
      netlink_unicast+0x245/0x390
      netlink_sendmsg+0x21b/0x470
      ____sys_sendmsg+0x39d/0x3d0
      ___sys_sendmsg+0x9a/0xe0
      __sys_sendmsg+0x7a/0xd0
      do_syscall_64+0x7d/0x160
      entry_SYSCALL_64_after_hwframe+0x76/0x7e
     RIP: 0033:0x7f2155114084
     Code: 89 02 b8 ff ff ff ff eb bb 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 00 f3 0f 1e fa 80 3d 25 f0 0c 00 00 74 13 b8 2e 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 54 c3 0f 1f 00 48 83 ec 28 89 54 24 1c 48 89
     RSP: 002b:00007fff1fd7a988 EFLAGS: 00000202 ORIG_RAX: 000000000000002e
     RAX: ffffffffffffffda RBX: 0000560ec063e5e0 RCX: 00007f2155114084
     RDX: 0000000000000000 RSI: 00007fff1fd7a9f0 RDI: 0000000000000003
     RBP: 00007fff1fd7aa60 R08: 0000000000000010 R09: 000000000000003f
     R10: 0000560ee9b3a010 R11: 0000000000000202 R12: 00007fff1fd7aae0
     R13: 000000006891ccde R14: 0000560ec063e5e0 R15: 00007fff1fd7aad0
      </TASK>
    
     [1] https://lore.kernel.org/netdev/e08c7f4a6882f260011909a868311c6e9b54f3e4.1639153474.git.dcaratti@redhat.com/
     [2] https://lore.kernel.org/netdev/[email protected]/
    
    Cc: [email protected]
    Fixes: 103406b38c60 ("net/sched: Always pass notifications when child class becomes empty")
    Fixes: c062f2a0b04d ("net/sched: sch_ets: don't remove idle classes from the round-robin list")
    Fixes: dcc68b4d8084 ("net: sch_ets: Add a new Qdisc")
    Reported-by: Li Shuang <[email protected]>
    Closes: https://issues.redhat.com/browse/RHEL-108026
    Reviewed-by: Petr Machata <[email protected]>
    Co-developed-by: Ivan Vecera <[email protected]>
    Signed-off-by: Ivan Vecera <[email protected]>
    Signed-off-by: Davide Caratti <[email protected]>
    Link: https://patch.msgid.link/7928ff6d17db47a2ae7cc205c44777b1f1950545.1755016081.git.dcaratti@redhat.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net/sched: Make cake_enqueue return NET_XMIT_CN when past buffer_limit [+ + +]
Author: William Liu <[email protected]>
Date:   Tue Aug 19 03:36:28 2025 +0000

    net/sched: Make cake_enqueue return NET_XMIT_CN when past buffer_limit
    
    [ Upstream commit 15de71d06a400f7fdc15bf377a2552b0ec437cf5 ]
    
    The following setup can trigger a WARNING in htb_activate due to
    the condition: !cl->leaf.q->q.qlen
    
    tc qdisc del dev lo root
    tc qdisc add dev lo root handle 1: htb default 1
    tc class add dev lo parent 1: classid 1:1 \
           htb rate 64bit
    tc qdisc add dev lo parent 1:1 handle f: \
           cake memlimit 1b
    ping -I lo -f -c1 -s64 -W0.001 127.0.0.1
    
    This is because the low memlimit leads to a low buffer_limit, which
    causes packet dropping. However, cake_enqueue still returns
    NET_XMIT_SUCCESS, causing htb_enqueue to call htb_activate with an
    empty child qdisc. We should return NET_XMIT_CN when packets are
    dropped from the same tin and flow.
    
    I do not believe return value of NET_XMIT_CN is necessary for packet
    drops in the case of ack filtering, as that is meant to optimize
    performance, not to signal congestion.
    
    Fixes: 046f6fd5daef ("sched: Add Common Applications Kept Enhanced (cake) qdisc")
    Signed-off-by: William Liu <[email protected]>
    Reviewed-by: Savino Dicanosa <[email protected]>
    Acked-by: Toke Høiland-Jørgensen <[email protected]>
    Reviewed-by: Jamal Hadi Salim <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: Remove unnecessary WARNING condition for empty child qdisc in htb_activate [+ + +]
Author: William Liu <[email protected]>
Date:   Tue Aug 19 03:36:59 2025 +0000

    net/sched: Remove unnecessary WARNING condition for empty child qdisc in htb_activate
    
    [ Upstream commit 2c2192e5f9c7c2892fe2363244d1387f62710d83 ]
    
    The WARN_ON trigger based on !cl->leaf.q->q.qlen is unnecessary in
    htb_activate. htb_dequeue_tree already accounts for that scenario.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: William Liu <[email protected]>
    Reviewed-by: Savino Dicanosa <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/smc: fix UAF on smcsk after smc_listen_out() [+ + +]
Author: D. Wythe <[email protected]>
Date:   Mon Aug 18 13:46:18 2025 +0800

    net/smc: fix UAF on smcsk after smc_listen_out()
    
    [ Upstream commit d9cef55ed49117bd63695446fb84b4b91815c0b4 ]
    
    BPF CI testing report a UAF issue:
    
      [   16.446633] BUG: kernel NULL pointer dereference, address: 000000000000003  0
      [   16.447134] #PF: supervisor read access in kernel mod  e
      [   16.447516] #PF: error_code(0x0000) - not-present pag  e
      [   16.447878] PGD 0 P4D   0
      [   16.448063] Oops: Oops: 0000 [#1] PREEMPT SMP NOPT  I
      [   16.448409] CPU: 0 UID: 0 PID: 9 Comm: kworker/0:1 Tainted: G           OE      6.13.0-rc3-g89e8a75fda73-dirty #4  2
      [   16.449124] Tainted: [O]=OOT_MODULE, [E]=UNSIGNED_MODUL  E
      [   16.449502] Hardware name: QEMU Ubuntu 24.04 PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/201  4
      [   16.450201] Workqueue: smc_hs_wq smc_listen_wor  k
      [   16.450531] RIP: 0010:smc_listen_work+0xc02/0x159  0
      [   16.452158] RSP: 0018:ffffb5ab40053d98 EFLAGS: 0001024  6
      [   16.452526] RAX: 0000000000000001 RBX: 0000000000000002 RCX: 000000000000030  0
      [   16.452994] RDX: 0000000000000280 RSI: 00003513840053f0 RDI: 000000000000000  0
      [   16.453492] RBP: ffffa097808e3800 R08: ffffa09782dba1e0 R09: 000000000000000  5
      [   16.453987] R10: 0000000000000000 R11: 0000000000000000 R12: ffffa0978274640  0
      [   16.454497] R13: 0000000000000000 R14: 0000000000000000 R15: ffffa09782d4092  0
      [   16.454996] FS:  0000000000000000(0000) GS:ffffa097bbc00000(0000) knlGS:000000000000000  0
      [   16.455557] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003  3
      [   16.455961] CR2: 0000000000000030 CR3: 0000000102788004 CR4: 0000000000770ef  0
      [   16.456459] PKRU: 5555555  4
      [   16.456654] Call Trace  :
      [   16.456832]  <TASK  >
      [   16.456989]  ? __die+0x23/0x7  0
      [   16.457215]  ? page_fault_oops+0x180/0x4c  0
      [   16.457508]  ? __lock_acquire+0x3e6/0x249  0
      [   16.457801]  ? exc_page_fault+0x68/0x20  0
      [   16.458080]  ? asm_exc_page_fault+0x26/0x3  0
      [   16.458389]  ? smc_listen_work+0xc02/0x159  0
      [   16.458689]  ? smc_listen_work+0xc02/0x159  0
      [   16.458987]  ? lock_is_held_type+0x8f/0x10  0
      [   16.459284]  process_one_work+0x1ea/0x6d  0
      [   16.459570]  worker_thread+0x1c3/0x38  0
      [   16.459839]  ? __pfx_worker_thread+0x10/0x1  0
      [   16.460144]  kthread+0xe0/0x11  0
      [   16.460372]  ? __pfx_kthread+0x10/0x1  0
      [   16.460640]  ret_from_fork+0x31/0x5  0
      [   16.460896]  ? __pfx_kthread+0x10/0x1  0
      [   16.461166]  ret_from_fork_asm+0x1a/0x3  0
      [   16.461453]  </TASK  >
      [   16.461616] Modules linked in: bpf_testmod(OE) [last unloaded: bpf_testmod(OE)  ]
      [   16.462134] CR2: 000000000000003  0
      [   16.462380] ---[ end trace 0000000000000000 ]---
      [   16.462710] RIP: 0010:smc_listen_work+0xc02/0x1590
    
    The direct cause of this issue is that after smc_listen_out_connected(),
    newclcsock->sk may be NULL since it will releases the smcsk. Therefore,
    if the application closes the socket immediately after accept,
    newclcsock->sk can be NULL. A possible execution order could be as
    follows:
    
    smc_listen_work                                 | userspace
    -----------------------------------------------------------------
    lock_sock(sk)                                   |
    smc_listen_out_connected()                      |
    | \- smc_listen_out                             |
    |    | \- release_sock                          |
         | |- sk->sk_data_ready()                   |
                                                    | fd = accept();
                                                    | close(fd);
                                                    |  \- socket->sk = NULL;
    /* newclcsock->sk is NULL now */
    SMC_STAT_SERV_SUCC_INC(sock_net(newclcsock->sk))
    
    Since smc_listen_out_connected() will not fail, simply swapping the order
    of the code can easily fix this issue.
    
    Fixes: 3b2dec2603d5 ("net/smc: restructure client and server code in af_smc")
    Signed-off-by: D. Wythe <[email protected]>
    Reviewed-by: Guangguan Wang <[email protected]>
    Reviewed-by: Alexandra Winter <[email protected]>
    Reviewed-by: Dust Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net: Add net_passive_inc() and net_passive_dec(). [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Tue Aug 12 14:40:15 2025 -0400

    net: Add net_passive_inc() and net_passive_dec().
    
    [ Upstream commit e57a6320215c3967f51ab0edeff87db2095440e4 ]
    
    net_drop_ns() is NULL when CONFIG_NET_NS is disabled.
    
    The next patch introduces a function that increments
    and decrements net->passive.
    
    As a prep, let's rename and export net_free() to
    net_passive_dec() and add net_passive_inc().
    
    Suggested-by: Eric Dumazet <[email protected]>
    Link: https://lore.kernel.org/netdev/CANn89i+oUCt2VGvrbrweniTendZFEh+nwS=uonc004-aPkWy-Q@mail.gmail.com/
    Signed-off-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]>
    Stable-dep-of: 59b33fab4ca4 ("smb: client: fix netns refcount leak after net_passive changes")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: ag71xx: Add missing check after DMA map [+ + +]
Author: Thomas Fourier <[email protected]>
Date:   Wed Jul 16 11:57:25 2025 +0200

    net: ag71xx: Add missing check after DMA map
    
    [ Upstream commit 96a1e15e60216b52da0e6da5336b6d7f5b0188b0 ]
    
    The DMA map functions can fail and should be tested for errors.
    
    Signed-off-by: Thomas Fourier <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: atlantic: add set_power to fw_ops for atl2 to fix wol [+ + +]
Author: Eric Work <[email protected]>
Date:   Sat Jun 28 22:15:28 2025 -0700

    net: atlantic: add set_power to fw_ops for atl2 to fix wol
    
    [ Upstream commit fad9cf216597a71936ac87143d1618fbbcf97cbe ]
    
    Aquantia AQC113(C) using ATL2FW doesn't properly prepare the NIC for
    enabling wake-on-lan. The FW operation `set_power` was only implemented
    for `hw_atl` and not `hw_atl2`. Implement the `set_power` functionality
    for `hw_atl2`.
    
    Tested with both AQC113 and AQC113C devices. Confirmed you can shutdown
    the system and wake from S5 using magic packets. NIC was previously
    powered off when entering S5. If the NIC was configured for WOL by the
    Windows driver, loading the atlantic driver would disable WOL.
    
    Partially cherry-picks changes from commit,
    https://github.com/Aquantia/AQtion/commit/37bd5cc
    
    Attributing original authors from Marvell for the referenced commit.
    
    Closes: https://github.com/Aquantia/AQtion/issues/70
    Co-developed-by: Igor Russkikh <[email protected]>
    Co-developed-by: Mark Starovoitov <[email protected]>
    Co-developed-by: Dmitry Bogdanov <[email protected]>
    Co-developed-by: Pavel Belous <[email protected]>
    Co-developed-by: Nikita Danilov <[email protected]>
    Signed-off-by: Eric Work <[email protected]>
    Reviewed-by: Igor Russkikh <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: better track kernel sockets lifetime [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Tue Aug 12 14:40:16 2025 -0400

    net: better track kernel sockets lifetime
    
    [ Upstream commit 5c70eb5c593d64d93b178905da215a9fd288a4b5 ]
    
    While kernel sockets are dismantled during pernet_operations->exit(),
    their freeing can be delayed by any tx packets still held in qdisc
    or device queues, due to skb_set_owner_w() prior calls.
    
    This then trigger the following warning from ref_tracker_dir_exit() [1]
    
    To fix this, make sure that kernel sockets own a reference on net->passive.
    
    Add sk_net_refcnt_upgrade() helper, used whenever a kernel socket
    is converted to a refcounted one.
    
    [1]
    
    [  136.263918][   T35] ref_tracker: net notrefcnt@ffff8880638f01e0 has 1/2 users at
    [  136.263918][   T35]      sk_alloc+0x2b3/0x370
    [  136.263918][   T35]      inet6_create+0x6ce/0x10f0
    [  136.263918][   T35]      __sock_create+0x4c0/0xa30
    [  136.263918][   T35]      inet_ctl_sock_create+0xc2/0x250
    [  136.263918][   T35]      igmp6_net_init+0x39/0x390
    [  136.263918][   T35]      ops_init+0x31e/0x590
    [  136.263918][   T35]      setup_net+0x287/0x9e0
    [  136.263918][   T35]      copy_net_ns+0x33f/0x570
    [  136.263918][   T35]      create_new_namespaces+0x425/0x7b0
    [  136.263918][   T35]      unshare_nsproxy_namespaces+0x124/0x180
    [  136.263918][   T35]      ksys_unshare+0x57d/0xa70
    [  136.263918][   T35]      __x64_sys_unshare+0x38/0x40
    [  136.263918][   T35]      do_syscall_64+0xf3/0x230
    [  136.263918][   T35]      entry_SYSCALL_64_after_hwframe+0x77/0x7f
    [  136.263918][   T35]
    [  136.343488][   T35] ref_tracker: net notrefcnt@ffff8880638f01e0 has 1/2 users at
    [  136.343488][   T35]      sk_alloc+0x2b3/0x370
    [  136.343488][   T35]      inet6_create+0x6ce/0x10f0
    [  136.343488][   T35]      __sock_create+0x4c0/0xa30
    [  136.343488][   T35]      inet_ctl_sock_create+0xc2/0x250
    [  136.343488][   T35]      ndisc_net_init+0xa7/0x2b0
    [  136.343488][   T35]      ops_init+0x31e/0x590
    [  136.343488][   T35]      setup_net+0x287/0x9e0
    [  136.343488][   T35]      copy_net_ns+0x33f/0x570
    [  136.343488][   T35]      create_new_namespaces+0x425/0x7b0
    [  136.343488][   T35]      unshare_nsproxy_namespaces+0x124/0x180
    [  136.343488][   T35]      ksys_unshare+0x57d/0xa70
    [  136.343488][   T35]      __x64_sys_unshare+0x38/0x40
    [  136.343488][   T35]      do_syscall_64+0xf3/0x230
    [  136.343488][   T35]      entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Fixes: 0cafd77dcd03 ("net: add a refcount tracker for kernel sockets")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: bridge: fix soft lockup in br_multicast_query_expired() [+ + +]
Author: Wang Liang <[email protected]>
Date:   Wed Aug 13 10:10:54 2025 +0800

    net: bridge: fix soft lockup in br_multicast_query_expired()
    
    [ Upstream commit d1547bf460baec718b3398365f8de33d25c5f36f ]
    
    When set multicast_query_interval to a large value, the local variable
    'time' in br_multicast_send_query() may overflow. If the time is smaller
    than jiffies, the timer will expire immediately, and then call mod_timer()
    again, which creates a loop and may trigger the following soft lockup
    issue.
    
      watchdog: BUG: soft lockup - CPU#1 stuck for 221s! [rb_consumer:66]
      CPU: 1 UID: 0 PID: 66 Comm: rb_consumer Not tainted 6.16.0+ #259 PREEMPT(none)
      Call Trace:
       <IRQ>
       __netdev_alloc_skb+0x2e/0x3a0
       br_ip6_multicast_alloc_query+0x212/0x1b70
       __br_multicast_send_query+0x376/0xac0
       br_multicast_send_query+0x299/0x510
       br_multicast_query_expired.constprop.0+0x16d/0x1b0
       call_timer_fn+0x3b/0x2a0
       __run_timers+0x619/0x950
       run_timer_softirq+0x11c/0x220
       handle_softirqs+0x18e/0x560
       __irq_exit_rcu+0x158/0x1a0
       sysvec_apic_timer_interrupt+0x76/0x90
       </IRQ>
    
    This issue can be reproduced with:
      ip link add br0 type bridge
      echo 1 > /sys/class/net/br0/bridge/multicast_querier
      echo 0xffffffffffffffff >
            /sys/class/net/br0/bridge/multicast_query_interval
      ip link set dev br0 up
    
    The multicast_startup_query_interval can also cause this issue. Similar to
    the commit 99b40610956a ("net: bridge: mcast: add and enforce query
    interval minimum"), add check for the query interval maximum to fix this
    issue.
    
    Link: https://lore.kernel.org/netdev/[email protected]/
    Link: https://lore.kernel.org/netdev/[email protected]/
    Fixes: d902eee43f19 ("bridge: Add multicast count/interval sysfs entries")
    Suggested-by: Nikolay Aleksandrov <[email protected]>
    Signed-off-by: Wang Liang <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Acked-by: Nikolay Aleksandrov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dpaa: fix device leak when querying time stamp info [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Jul 25 19:12:09 2025 +0200

    net: dpaa: fix device leak when querying time stamp info
    
    commit 3fa840230f534385b34a4f39c8dd313fbe723f05 upstream.
    
    Make sure to drop the reference to the ptp device taken by
    of_find_device_by_node() when querying the time stamping capabilities.
    
    Note that holding a reference to the ptp device does not prevent its
    driver data from going away.
    
    Fixes: 17ae0b0ee9db ("dpaa_eth: add the get_ts_info interface for ethtool")
    Cc: [email protected]      # 4.19
    Cc: Yangbo Lu <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: dsa: b53: fix b53_imp_vlan_setup for BCM5325 [+ + +]
Author: Álvaro Fernández Rojas <[email protected]>
Date:   Sat Jun 14 09:59:59 2025 +0200

    net: dsa: b53: fix b53_imp_vlan_setup for BCM5325
    
    [ Upstream commit c00df1018791185ea398f78af415a2a0aaa0c79c ]
    
    CPU port should be B53_CPU_PORT instead of B53_CPU_PORT_25 for
    B53_PVLAN_PORT_MASK register.
    
    Reviewed-by: Florian Fainelli <[email protected]>
    Signed-off-by: Álvaro Fernández Rojas <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: b53: fix IP_MULTICAST_CTRL on BCM5325 [+ + +]
Author: Álvaro Fernández Rojas <[email protected]>
Date:   Sat Jun 14 09:59:54 2025 +0200

    net: dsa: b53: fix IP_MULTICAST_CTRL on BCM5325
    
    [ Upstream commit 044d5ce2788b165798bfd173548e61bf7b6baf4d ]
    
    BCM5325 doesn't implement B53_UC_FWD_EN, B53_MC_FWD_EN or B53_IPMC_FWD_EN.
    
    Reviewed-by: Florian Fainelli <[email protected]>
    Signed-off-by: Álvaro Fernández Rojas <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: b53: prevent DIS_LEARNING access on BCM5325 [+ + +]
Author: Álvaro Fernández Rojas <[email protected]>
Date:   Sat Jun 14 09:59:55 2025 +0200

    net: dsa: b53: prevent DIS_LEARNING access on BCM5325
    
    [ Upstream commit 800728abd9f83bda4de62a30ce62a8b41c242020 ]
    
    BCM5325 doesn't implement DIS_LEARNING register so we should avoid reading
    or writing it.
    
    Reviewed-by: Florian Fainelli <[email protected]>
    Signed-off-by: Álvaro Fernández Rojas <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: b53: prevent GMII_PORT_OVERRIDE_CTRL access on BCM5325 [+ + +]
Author: Álvaro Fernández Rojas <[email protected]>
Date:   Sat Jun 14 09:59:57 2025 +0200

    net: dsa: b53: prevent GMII_PORT_OVERRIDE_CTRL access on BCM5325
    
    [ Upstream commit 37883bbc45a8555d6eca88d3a9730504d2dac86c ]
    
    BCM5325 doesn't implement GMII_PORT_OVERRIDE_CTRL register so we should
    avoid reading or writing it.
    PORT_OVERRIDE_RX_FLOW and PORT_OVERRIDE_TX_FLOW aren't defined on BCM5325
    and we should use PORT_OVERRIDE_LP_FLOW_25 instead.
    
    Reviewed-by: Florian Fainelli <[email protected]>
    Signed-off-by: Álvaro Fernández Rojas <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: b53: prevent SWITCH_CTRL access on BCM5325 [+ + +]
Author: Álvaro Fernández Rojas <[email protected]>
Date:   Sat Jun 14 09:59:53 2025 +0200

    net: dsa: b53: prevent SWITCH_CTRL access on BCM5325
    
    [ Upstream commit 22ccaaca43440e90a3b68d2183045b42247dc4be ]
    
    BCM5325 doesn't implement SWITCH_CTRL register so we should avoid reading
    or writing it.
    
    Reviewed-by: Florian Fainelli <[email protected]>
    Signed-off-by: Álvaro Fernández Rojas <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: enetc: fix device and OF node leak at probe [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Jul 25 19:12:10 2025 +0200

    net: enetc: fix device and OF node leak at probe
    
    commit 70458f8a6b44daf3ad39f0d9b6d1097c8a7780ed upstream.
    
    Make sure to drop the references to the IERB OF node and platform device
    taken by of_parse_phandle() and of_find_device_by_node() during probe.
    
    Fixes: e7d48e5fbf30 ("net: enetc: add a mini driver for the Integrated Endpoint Register Block")
    Cc: [email protected]      # 5.13
    Cc: Vladimir Oltean <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: ethernet: mtk_ppe: add RCU lock around dev_fill_forward_path [+ + +]
Author: Qingfang Deng <[email protected]>
Date:   Thu Aug 14 09:25:57 2025 +0800

    net: ethernet: mtk_ppe: add RCU lock around dev_fill_forward_path
    
    [ Upstream commit 62c30c544359aa18b8fb2734166467a07d435c2d ]
    
    Ensure ndo_fill_forward_path() is called with RCU lock held.
    
    Fixes: 2830e314778d ("net: ethernet: mtk-ppe: fix traffic offload with bridged wlan")
    Signed-off-by: Qingfang Deng <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: fec: allow disable coalescing [+ + +]
Author: Jonas Rebmann <[email protected]>
Date:   Thu Jun 26 15:44:02 2025 +0200

    net: fec: allow disable coalescing
    
    [ Upstream commit b7ad21258f9e9a7f58b19595d5ceed2cde3bed68 ]
    
    In the current implementation, IP coalescing is always enabled and
    cannot be disabled.
    
    As setting maximum frames to 0 or 1, or setting delay to zero implies
    immediate delivery of single packets/IRQs, disable coalescing in
    hardware in these cases.
    
    This also guarantees that coalescing is never enabled with ICFT or ICTT
    set to zero, a configuration that could lead to unpredictable behaviour
    according to i.MX8MP reference manual.
    
    Signed-off-by: Jonas Rebmann <[email protected]>
    Reviewed-by: Wei Fang <[email protected]>
    Link: https://patch.msgid.link/20250626-fec_deactivate_coalescing-v2-1-0b217f2e80da@pengutronix.de
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: gianfar: fix device leak when querying time stamp info [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Jul 25 19:12:11 2025 +0200

    net: gianfar: fix device leak when querying time stamp info
    
    commit da717540acd34e5056e3fa35791d50f6b3303f55 upstream.
    
    Make sure to drop the reference to the ptp device taken by
    of_find_device_by_node() when querying the time stamping capabilities.
    
    Note that holding a reference to the ptp device does not prevent its
    driver data from going away.
    
    Fixes: 7349a74ea75c ("net: ethernet: gianfar_ethtool: get phc index through drvdata")
    Cc: [email protected]      # 4.18
    Cc: Yangbo Lu <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: gso: Forbid IPv6 TSO with extensions on devices with only IPV6_CSUM [+ + +]
Author: Jakub Ramaseuski <[email protected]>
Date:   Thu Aug 14 12:51:19 2025 +0200

    net: gso: Forbid IPv6 TSO with extensions on devices with only IPV6_CSUM
    
    [ Upstream commit 864e3396976ef41de6cc7bc366276bf4e084fff2 ]
    
    When performing Generic Segmentation Offload (GSO) on an IPv6 packet that
    contains extension headers, the kernel incorrectly requests checksum offload
    if the egress device only advertises NETIF_F_IPV6_CSUM feature, which has
    a strict contract: it supports checksum offload only for plain TCP or UDP
    over IPv6 and explicitly does not support packets with extension headers.
    The current GSO logic violates this contract by failing to disable the feature
    for packets with extension headers, such as those used in GREoIPv6 tunnels.
    
    This violation results in the device being asked to perform an operation
    it cannot support, leading to a `skb_warn_bad_offload` warning and a collapse
    of network throughput. While device TSO/USO is correctly bypassed in favor
    of software GSO for these packets, the GSO stack must be explicitly told not
    to request checksum offload.
    
    Mask NETIF_F_IPV6_CSUM, NETIF_F_TSO6 and NETIF_F_GSO_UDP_L4
    in gso_features_check if the IPv6 header contains extension headers to compute
    checksum in software.
    
    The exception is a BIG TCP extension, which, as stated in commit
    68e068cabd2c6c53 ("net: reenable NETIF_F_IPV6_CSUM offload for BIG TCP packets"):
    "The feature is only enabled on devices that support BIG TCP TSO.
    The header is only present for PF_PACKET taps like tcpdump,
    and not transmitted by physical devices."
    
    kernel log output (truncated):
    WARNING: CPU: 1 PID: 5273 at net/core/dev.c:3535 skb_warn_bad_offload+0x81/0x140
    ...
    Call Trace:
     <TASK>
     skb_checksum_help+0x12a/0x1f0
     validate_xmit_skb+0x1a3/0x2d0
     validate_xmit_skb_list+0x4f/0x80
     sch_direct_xmit+0x1a2/0x380
     __dev_xmit_skb+0x242/0x670
     __dev_queue_xmit+0x3fc/0x7f0
     ip6_finish_output2+0x25e/0x5d0
     ip6_finish_output+0x1fc/0x3f0
     ip6_tnl_xmit+0x608/0xc00 [ip6_tunnel]
     ip6gre_tunnel_xmit+0x1c0/0x390 [ip6_gre]
     dev_hard_start_xmit+0x63/0x1c0
     __dev_queue_xmit+0x6d0/0x7f0
     ip6_finish_output2+0x214/0x5d0
     ip6_finish_output+0x1fc/0x3f0
     ip6_xmit+0x2ca/0x6f0
     ip6_finish_output+0x1fc/0x3f0
     ip6_xmit+0x2ca/0x6f0
     inet6_csk_xmit+0xeb/0x150
     __tcp_transmit_skb+0x555/0xa80
     tcp_write_xmit+0x32a/0xe90
     tcp_sendmsg_locked+0x437/0x1110
     tcp_sendmsg+0x2f/0x50
    ...
    skb linear:   00000000: e4 3d 1a 7d ec 30 e4 3d 1a 7e 5d 90 86 dd 60 0e
    skb linear:   00000010: 00 0a 1b 34 3c 40 20 11 00 00 00 00 00 00 00 00
    skb linear:   00000020: 00 00 00 00 00 12 20 11 00 00 00 00 00 00 00 00
    skb linear:   00000030: 00 00 00 00 00 11 2f 00 04 01 04 01 01 00 00 00
    skb linear:   00000040: 86 dd 60 0e 00 0a 1b 00 06 40 20 23 00 00 00 00
    skb linear:   00000050: 00 00 00 00 00 00 00 00 00 12 20 23 00 00 00 00
    skb linear:   00000060: 00 00 00 00 00 00 00 00 00 11 bf 96 14 51 13 f9
    skb linear:   00000070: ae 27 a0 a8 2b e3 80 18 00 40 5b 6f 00 00 01 01
    skb linear:   00000080: 08 0a 42 d4 50 d5 4b 70 f8 1a
    
    Fixes: 04c20a9356f283da ("net: skip offload for NETIF_F_IPV6_CSUM if ipv6 header contains extension")
    Reported-by: Tianhao Zhao <[email protected]>
    Suggested-by: Michal Schmidt <[email protected]>
    Suggested-by: Willem de Bruijn <[email protected]>
    Signed-off-by: Jakub Ramaseuski <[email protected]>
    Reviewed-by: Willem de Bruijn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: ipv4: fix incorrect MTU in broadcast routes [+ + +]
Author: Oscar Maes <[email protected]>
Date:   Thu Jul 10 16:27:13 2025 +0200

    net: ipv4: fix incorrect MTU in broadcast routes
    
    [ Upstream commit 9e30ecf23b1b8f091f7d08b27968dea83aae7908 ]
    
    Currently, __mkroute_output overrules the MTU value configured for
    broadcast routes.
    
    This buggy behaviour can be reproduced with:
    
    ip link set dev eth1 mtu 9000
    ip route del broadcast 192.168.0.255 dev eth1 proto kernel scope link src 192.168.0.2
    ip route add broadcast 192.168.0.255 dev eth1 proto kernel scope link src 192.168.0.2 mtu 1500
    
    The maximum packet size should be 1500, but it is actually 8000:
    
    ping -b 192.168.0.255 -s 8000
    
    Fix __mkroute_output to allow MTU values to be configured for
    for broadcast routes (to support a mixed-MTU local-area-network).
    
    Signed-off-by: Oscar Maes <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: mctp: Prevent duplicate binds [+ + +]
Author: Matt Johnston <[email protected]>
Date:   Thu Jul 10 16:55:55 2025 +0800

    net: mctp: Prevent duplicate binds
    
    [ Upstream commit 3954502377ec05a1b37e2dc9bef0bacd4bbd71b2 ]
    
    Disallow bind() calls that have the same arguments as existing bound
    sockets.  Previously multiple sockets could bind() to the same
    type/local address, with an arbitrary socket receiving matched messages.
    
    This is only a partial fix, a future commit will define precedence order
    for MCTP_ADDR_ANY versus specific EID bind(), which are allowed to exist
    together.
    
    Signed-off-by: Matt Johnston <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: mtk_eth_soc: fix device leak at probe [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Jul 25 19:12:12 2025 +0200

    net: mtk_eth_soc: fix device leak at probe
    
    commit 3e13274ca8750823e8b68181bdf185d238febe0d upstream.
    
    The reference count to the WED devices has already been incremented when
    looking them up using of_find_device_by_node() so drop the bogus
    additional reference taken during probe.
    
    Fixes: 804775dfc288 ("net: ethernet: mtk_eth_soc: add support for Wireless Ethernet Dispatch (WED)")
    Cc: [email protected]      # 5.19
    Cc: Felix Fietkau <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: ncsi: Fix buffer overflow in fetching version id [+ + +]
Author: Hari Kalavakunta <[email protected]>
Date:   Tue Jun 10 12:33:38 2025 -0700

    net: ncsi: Fix buffer overflow in fetching version id
    
    [ Upstream commit 8e16170ae972c7fed132bc928914a2ffb94690fc ]
    
    In NC-SI spec v1.2 section 8.4.44.2, the firmware name doesn't
    need to be null terminated while its size occupies the full size
    of the field. Fix the buffer overflow issue by adding one
    additional byte for null terminator.
    
    Signed-off-by: Hari Kalavakunta <[email protected]>
    Reviewed-by: Paul Fertser <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: phy: micrel: Add ksz9131_resume() [+ + +]
Author: Biju Das <[email protected]>
Date:   Fri Jul 11 06:40:21 2025 +0100

    net: phy: micrel: Add ksz9131_resume()
    
    [ Upstream commit f25a7eaa897f21396e99f90809af82ca553c9d14 ]
    
    The Renesas RZ/G3E SMARC EVK uses KSZ9131RNXC phy. On deep power state,
    PHY loses the power and on wakeup the rgmii delays are not reconfigured
    causing it to fail.
    
    Replace the callback kszphy_resume()->ksz9131_resume() for reconfiguring
    the rgmii_delay when it exits from PM suspend state.
    
    Signed-off-by: Biju Das <[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: phy: micrel: fix KSZ8081/KSZ8091 cable test [+ + +]
Author: Florian Larysch <[email protected]>
Date:   Thu Jul 24 00:20:42 2025 +0200

    net: phy: micrel: fix KSZ8081/KSZ8091 cable test
    
    commit 49db61c27c4bbd24364086dc0892bd3e14c1502e upstream.
    
    Commit 21b688dabecb ("net: phy: micrel: Cable Diag feature for lan8814
    phy") introduced cable_test support for the LAN8814 that reuses parts of
    the KSZ886x logic and introduced the cable_diag_reg and pair_mask
    parameters to account for differences between those chips.
    
    However, it did not update the ksz8081_type struct, so those members are
    now 0, causing no pairs to be tested in ksz886x_cable_test_get_status
    and ksz886x_cable_test_wait_for_completion to poll the wrong register
    for the affected PHYs (Basic Control/Reset, which is 0 in normal
    operation) and exit immediately.
    
    Fix this by setting both struct members accordingly.
    
    Fixes: 21b688dabecb ("net: phy: micrel: Cable Diag feature for lan8814 phy")
    Cc: [email protected]
    Signed-off-by: Florian Larysch <[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: phy: smsc: add proper reset flags for LAN8710A [+ + +]
Author: Buday Csaba <[email protected]>
Date:   Mon Jul 28 17:29:16 2025 +0200

    net: phy: smsc: add proper reset flags for LAN8710A
    
    [ Upstream commit 57ec5a8735dc5dccd1ee68afdb1114956a3fce0d ]
    
    According to the LAN8710A datasheet (Rev. B, section 3.8.5.1), a hardware
    reset is required after power-on, and the reference clock (REF_CLK) must be
    established before asserting reset.
    
    Signed-off-by: Buday Csaba <[email protected]>
    Cc: Csókás Bence <[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: thunderbolt: Enable end-to-end flow control also in transmit [+ + +]
Author: zhangjianrong <[email protected]>
Date:   Sat Jun 28 17:38:13 2025 +0800

    net: thunderbolt: Enable end-to-end flow control also in transmit
    
    [ Upstream commit a8065af3346ebd7c76ebc113451fb3ba94cf7769 ]
    
    According to USB4 specification, if E2E flow control is disabled for
    the Transmit Descriptor Ring, the Host Interface Adapter Layer shall
    not require any credits to be available before transmitting a Tunneled
    Packet from this Transmit Descriptor Ring, so e2e flow control should
    be enabled in both directions.
    
    Acked-by: Mika Westerberg <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: zhangjianrong <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: thunderbolt: Fix the parameter passing of tb_xdomain_enable_paths()/tb_xdomain_disable_paths() [+ + +]
Author: zhangjianrong <[email protected]>
Date:   Sat Jun 28 17:49:20 2025 +0800

    net: thunderbolt: Fix the parameter passing of tb_xdomain_enable_paths()/tb_xdomain_disable_paths()
    
    [ Upstream commit 8ec31cb17cd355cea25cdb8496d9b3fbf1321647 ]
    
    According to the description of tb_xdomain_enable_paths(), the third
    parameter represents the transmit ring and the fifth parameter represents
    the receive ring. tb_xdomain_disable_paths() is the same case.
    
    [Jakub] Mika says: it works now because both rings ->hop is the same
    
    Acked-by: Mika Westerberg <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: zhangjianrong <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: thunderx: Fix format-truncation warning in bgx_acpi_match_id() [+ + +]
Author: Alok Tiwari <[email protected]>
Date:   Fri Jul 11 07:05:30 2025 -0700

    net: thunderx: Fix format-truncation warning in bgx_acpi_match_id()
    
    [ Upstream commit 53d20606c40678d425cc03f0978c614dca51f25e ]
    
    The buffer bgx_sel used in snprintf() was too small to safely hold
    the formatted string "BGX%d" for all valid bgx_id values. This caused
    a -Wformat-truncation warning with `Werror` enabled during build.
    
    Increase the buffer size from 5 to 7 and use `sizeof(bgx_sel)` in
    snprintf() to ensure safety and suppress the warning.
    
    Build warning:
      CC      drivers/net/ethernet/cavium/thunder/thunder_bgx.o
      drivers/net/ethernet/cavium/thunder/thunder_bgx.c: In function
    ‘bgx_acpi_match_id’:
      drivers/net/ethernet/cavium/thunder/thunder_bgx.c:1434:27: error: ‘%d’
    directive output may be truncated writing between 1 and 3 bytes into a
    region of size 2 [-Werror=format-truncation=]
        snprintf(bgx_sel, 5, "BGX%d", bgx->bgx_id);
                                 ^~
      drivers/net/ethernet/cavium/thunder/thunder_bgx.c:1434:23: note:
    directive argument in the range [0, 255]
        snprintf(bgx_sel, 5, "BGX%d", bgx->bgx_id);
                             ^~~~~~~
      drivers/net/ethernet/cavium/thunder/thunder_bgx.c:1434:2: note:
    ‘snprintf’ output between 5 and 7 bytes into a destination of size 5
        snprintf(bgx_sel, 5, "BGX%d", bgx->bgx_id);
    
    compiler warning due to insufficient snprintf buffer size.
    
    Signed-off-by: Alok Tiwari <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: ti: icss-iep: fix device and OF node leaks at probe [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Fri Jul 25 19:12:13 2025 +0200

    net: ti: icss-iep: fix device and OF node leaks at probe
    
    commit e05c54974a05ab19658433545d6ced88d9075cf0 upstream.
    
    Make sure to drop the references to the IEP OF node and device taken by
    of_parse_phandle() and of_find_device_by_node() when looking up IEP
    devices during probe.
    
    Drop the bogus additional reference taken on successful lookup so that
    the device is released correctly by icss_iep_put().
    
    Fixes: c1e0230eeaab ("net: ti: icss-iep: Add IEP driver")
    Cc: [email protected]      # 6.6
    Cc: Roger Quadros <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: ti: icss-iep: Fix incorrect type for return value in extts_enable() [+ + +]
Author: Alok Tiwari <[email protected]>
Date:   Tue Aug 5 07:23:18 2025 -0700

    net: ti: icss-iep: Fix incorrect type for return value in extts_enable()
    
    [ Upstream commit 5f1d1d14db7dabce9c815e7d7cd351f8d58b8585 ]
    
    The variable ret in icss_iep_extts_enable() was incorrectly declared
    as u32, while the function returns int and may return negative error
    codes. This will cause sign extension issues and incorrect error
    propagation. Update ret to be int to fix error handling.
    
    This change corrects the declaration to avoid potential type mismatch.
    
    Fixes: c1e0230eeaab ("net: ti: icss-iep: Add IEP driver")
    Signed-off-by: Alok Tiwari <[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: usb: asix_devices: add phy_mask for ax88772 mdio bus [+ + +]
Author: Xu Yang <[email protected]>
Date:   Mon Aug 11 17:29:31 2025 +0800

    net: usb: asix_devices: add phy_mask for ax88772 mdio bus
    
    commit 4faff70959d51078f9ee8372f8cff0d7045e4114 upstream.
    
    Without setting phy_mask for ax88772 mdio bus, current driver may create
    at most 32 mdio phy devices with phy address range from 0x00 ~ 0x1f.
    DLink DUB-E100 H/W Ver B1 is such a device. However, only one main phy
    device will bind to net phy driver. This is creating issue during system
    suspend/resume since phy_polling_mode() in phy_state_machine() will
    directly deference member of phydev->drv for non-main phy devices. Then
    NULL pointer dereference issue will occur. Due to only external phy or
    internal phy is necessary, add phy_mask for ax88772 mdio bus to workarnoud
    the issue.
    
    Closes: https://lore.kernel.org/netdev/[email protected]
    Fixes: e532a096be0e ("net: usb: asix: ax88772: add phylib support")
    Cc: [email protected]
    Signed-off-by: Xu Yang <[email protected]>
    Tested-by: Oleksij Rempel <[email protected]>
    Reviewed-by: Oleksij Rempel <[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: usb: asix_devices: Fix PHY address mask in MDIO bus initialization [+ + +]
Author: Yuichiro Tsuji <[email protected]>
Date:   Mon Aug 18 17:45:07 2025 +0900

    net: usb: asix_devices: Fix PHY address mask in MDIO bus initialization
    
    [ Upstream commit 24ef2f53c07f273bad99173e27ee88d44d135b1c ]
    
    Syzbot reported shift-out-of-bounds exception on MDIO bus initialization.
    
    The PHY address should be masked to 5 bits (0-31). Without this
    mask, invalid PHY addresses could be used, potentially causing issues
    with MDIO bus operations.
    
    Fix this by masking the PHY address with 0x1f (31 decimal) to ensure
    it stays within the valid range.
    
    Fixes: 4faff70959d5 ("net: usb: asix_devices: add phy_mask for ax88772 mdio bus")
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=20537064367a0f98d597
    Tested-by: [email protected]
    Signed-off-by: Yuichiro Tsuji <[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: usb: cdc-ncm: check for filtering capability [+ + +]
Author: Oliver Neukum <[email protected]>
Date:   Thu Jul 17 14:06:17 2025 +0200

    net: usb: cdc-ncm: check for filtering capability
    
    [ Upstream commit 61c3e8940f2d8b5bfeaeec4bedc2f3e7d873abb3 ]
    
    If the decice does not support filtering, filtering
    must not be used and all packets delivered for the
    upper layers to sort.
    
    Signed-off-by: Oliver Neukum <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: vlan: Make is_vlan_dev() a stub when VLAN is not configured [+ + +]
Author: Gal Pressman <[email protected]>
Date:   Mon Jun 16 16:26:24 2025 +0300

    net: vlan: Make is_vlan_dev() a stub when VLAN is not configured
    
    [ Upstream commit 2de1ba0887e5d3bf02d7c212f380039b34e10aa3 ]
    
    Add a stub implementation of is_vlan_dev() that returns false when
    VLAN support is not compiled in (CONFIG_VLAN_8021Q=n).
    
    This allows us to compile-out VLAN-dependent dead code when it is not
    needed.
    
    This also resolves the following compilation error when:
    * CONFIG_VLAN_8021Q=n
    * CONFIG_OBJTOOL=y
    * CONFIG_OBJTOOL_WERROR=y
    
    drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.o: error: objtool: parse_mirred.isra.0+0x370: mlx5e_tc_act_vlan_add_push_action() missing __noreturn in .c/.h or NORETURN() in noreturns.h
    
    The error occurs because objtool cannot determine that unreachable BUG()
    (which doesn't return) calls in VLAN code paths are actually dead code
    when VLAN support is disabled.
    
    Signed-off-by: Gal Pressman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: vlan: Replace BUG() with WARN_ON_ONCE() in vlan_dev_* stubs [+ + +]
Author: Gal Pressman <[email protected]>
Date:   Mon Jun 16 16:26:25 2025 +0300

    net: vlan: Replace BUG() with WARN_ON_ONCE() in vlan_dev_* stubs
    
    [ Upstream commit 60a8b1a5d0824afda869f18dc0ecfe72f8dfda42 ]
    
    When CONFIG_VLAN_8021Q=n, a set of stub helpers are used, three of these
    helpers use BUG() unconditionally.
    
    This code should not be reached, as callers of these functions should
    always check for is_vlan_dev() first, but the usage of BUG() is not
    recommended, replace it with WARN_ON() instead.
    
    Reviewed-by: Alex Lazar <[email protected]>
    Reviewed-by: Dragos Tatulea <[email protected]>
    Signed-off-by: Gal Pressman <[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_ets: implement lockless ets_dump() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Mon Aug 18 23:31:52 2025 -0400

    net_sched: sch_ets: implement lockless ets_dump()
    
    [ Upstream commit c5f1dde7f731e7bf2e7c169ca42cb4989fc2f8b9 ]
    
    Instead of relying on RTNL, ets_dump() can use READ_ONCE()
    annotations, paired with WRITE_ONCE() ones in ets_change().
    
    Signed-off-by: Eric Dumazet <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 87c6efc5ce9c ("net/sched: ets: use old 'nbands' while purging unused classes")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
netfilter: ctnetlink: fix refcount leak on table dump [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Fri Aug 1 17:25:08 2025 +0200

    netfilter: ctnetlink: fix refcount leak on table dump
    
    [ Upstream commit de788b2e6227462b6dcd0e07474e72c089008f74 ]
    
    There is a reference count leak in ctnetlink_dump_table():
          if (res < 0) {
                    nf_conntrack_get(&ct->ct_general); // HERE
                    cb->args[1] = (unsigned long)ct;
                    ...
    
    While its very unlikely, its possible that ct == last.
    If this happens, then the refcount of ct was already incremented.
    This 2nd increment is never undone.
    
    This prevents the conntrack object from being released, which in turn
    keeps prevents cnet->count from dropping back to 0.
    
    This will then block the netns dismantle (or conntrack rmmod) as
    nf_conntrack_cleanup_net_list() will wait forever.
    
    This can be reproduced by running conntrack_resize.sh selftest in a loop.
    It takes ~20 minutes for me on a preemptible kernel on average before
    I see a runaway kworker spinning in nf_conntrack_cleanup_net_list.
    
    One fix would to change this to:
            if (res < 0) {
                    if (ct != last)
                            nf_conntrack_get(&ct->ct_general);
    
    But this reference counting isn't needed in the first place.
    We can just store a cookie value instead.
    
    A followup patch will do the same for ctnetlink_exp_dump_table,
    it looks to me as if this has the same problem and like
    ctnetlink_dump_table, we only need a 'skip hint', not the actual
    object so we can apply the same cookie strategy there as well.
    
    Fixes: d205dc40798d ("[NETFILTER]: ctnetlink: fix deadlock in table dumping")
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nf_reject: don't leak dst refcount for loopback packets [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Wed Aug 20 14:37:07 2025 +0200

    netfilter: nf_reject: don't leak dst refcount for loopback packets
    
    [ Upstream commit 91a79b792204313153e1bdbbe5acbfc28903b3a5 ]
    
    recent patches to add a WARN() when replacing skb dst entry found an
    old bug:
    
    WARNING: include/linux/skbuff.h:1165 skb_dst_check_unset include/linux/skbuff.h:1164 [inline]
    WARNING: include/linux/skbuff.h:1165 skb_dst_set include/linux/skbuff.h:1210 [inline]
    WARNING: include/linux/skbuff.h:1165 nf_reject_fill_skb_dst+0x2a4/0x330 net/ipv4/netfilter/nf_reject_ipv4.c:234
    [..]
    Call Trace:
     nf_send_unreach+0x17b/0x6e0 net/ipv4/netfilter/nf_reject_ipv4.c:325
     nft_reject_inet_eval+0x4bc/0x690 net/netfilter/nft_reject_inet.c:27
     expr_call_ops_eval net/netfilter/nf_tables_core.c:237 [inline]
     ..
    
    This is because blamed commit forgot about loopback packets.
    Such packets already have a dst_entry attached, even at PRE_ROUTING stage.
    
    Instead of checking hook just check if the skb already has a route
    attached to it.
    
    Fixes: f53b9b0bdc59 ("netfilter: introduce support for reject at prerouting stage")
    Signed-off-by: Florian Westphal <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
netlink: avoid infinite retry looping in netlink_unicast() [+ + +]
Author: Fedor Pchelkin <[email protected]>
Date:   Mon Jul 28 11:06:47 2025 +0300

    netlink: avoid infinite retry looping in netlink_unicast()
    
    commit 759dfc7d04bab1b0b86113f1164dc1fec192b859 upstream.
    
    netlink_attachskb() checks for the socket's read memory allocation
    constraints. Firstly, it has:
    
      rmem < READ_ONCE(sk->sk_rcvbuf)
    
    to check if the just increased rmem value fits into the socket's receive
    buffer. If not, it proceeds and tries to wait for the memory under:
    
      rmem + skb->truesize > READ_ONCE(sk->sk_rcvbuf)
    
    The checks don't cover the case when skb->truesize + sk->sk_rmem_alloc is
    equal to sk->sk_rcvbuf. Thus the function neither successfully accepts
    these conditions, nor manages to reschedule the task - and is called in
    retry loop for indefinite time which is caught as:
    
      rcu: INFO: rcu_sched self-detected stall on CPU
      rcu:     0-....: (25999 ticks this GP) idle=ef2/1/0x4000000000000000 softirq=262269/262269 fqs=6212
      (t=26000 jiffies g=230833 q=259957)
      NMI backtrace for cpu 0
      CPU: 0 PID: 22 Comm: kauditd Not tainted 5.10.240 #68
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.17.0-4.fc42 04/01/2014
      Call Trace:
      <IRQ>
      dump_stack lib/dump_stack.c:120
      nmi_cpu_backtrace.cold lib/nmi_backtrace.c:105
      nmi_trigger_cpumask_backtrace lib/nmi_backtrace.c:62
      rcu_dump_cpu_stacks kernel/rcu/tree_stall.h:335
      rcu_sched_clock_irq.cold kernel/rcu/tree.c:2590
      update_process_times kernel/time/timer.c:1953
      tick_sched_handle kernel/time/tick-sched.c:227
      tick_sched_timer kernel/time/tick-sched.c:1399
      __hrtimer_run_queues kernel/time/hrtimer.c:1652
      hrtimer_interrupt kernel/time/hrtimer.c:1717
      __sysvec_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1113
      asm_call_irq_on_stack arch/x86/entry/entry_64.S:808
      </IRQ>
    
      netlink_attachskb net/netlink/af_netlink.c:1234
      netlink_unicast net/netlink/af_netlink.c:1349
      kauditd_send_queue kernel/audit.c:776
      kauditd_thread kernel/audit.c:897
      kthread kernel/kthread.c:328
      ret_from_fork arch/x86/entry/entry_64.S:304
    
    Restore the original behavior of the check which commit in Fixes
    accidentally missed when restructuring the code.
    
    Found by Linux Verification Center (linuxtesting.org).
    
    Fixes: ae8f160e7eb2 ("netlink: Fix wraparounds of sk->sk_rmem_alloc.")
    Cc: [email protected]
    Signed-off-by: Fedor Pchelkin <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
netmem: fix skb_frag_address_safe with unreadable skbs [+ + +]
Author: Mina Almasry <[email protected]>
Date:   Thu Jun 19 17:52:38 2025 +0000

    netmem: fix skb_frag_address_safe with unreadable skbs
    
    [ Upstream commit 4672aec56d2e8edabcb74c3e2320301d106a377e ]
    
    skb_frag_address_safe() needs a check that the
    skb_frag_page exists check similar to skb_frag_address().
    
    Cc: [email protected]
    
    Signed-off-by: Mina Almasry <[email protected]>
    Acked-by: Stanislav Fomichev <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
NFS: Fix the setting of capabilities when automounting a new filesystem [+ + +]
Author: Trond Myklebust <[email protected]>
Date:   Sun Aug 3 14:31:59 2025 -0700

    NFS: Fix the setting of capabilities when automounting a new filesystem
    
    commit b01f21cacde9f2878492cf318fee61bf4ccad323 upstream.
    
    Capabilities cannot be inherited when we cross into a new filesystem.
    They need to be reset to the minimal defaults, and then probed for
    again.
    
    Fixes: 54ceac451598 ("NFS: Share NFS superblocks per-protocol per-server per-FSID")
    Cc: [email protected]
    Reviewed-by: Benjamin Coddington <[email protected]>
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
NFSD: detect mismatch of file handle and delegation stateid in OPEN op [+ + +]
Author: Dai Ngo <[email protected]>
Date:   Tue Jun 10 08:35:28 2025 -0700

    NFSD: detect mismatch of file handle and delegation stateid in OPEN op
    
    commit 9c65001c57164033ad08b654c8b5ae35512ddf4a upstream.
    
    When the client sends an OPEN with claim type CLAIM_DELEG_CUR_FH or
    CLAIM_DELEGATION_CUR, the delegation stateid and the file handle
    must belong to the same file, otherwise return NFS4ERR_INVAL.
    
    Note that RFC8881, section 8.2.4, mandates the server to return
    NFS4ERR_BAD_STATEID if the selected table entry does not match the
    current filehandle. However returning NFS4ERR_BAD_STATEID in the
    OPEN causes the client to retry the operation and therefor get the
    client into a loop. To avoid this situation we return NFS4ERR_INVAL
    instead.
    
    Reported-by: Petro Pavlov <[email protected]>
    Fixes: c44c5eeb2c02 ("[PATCH] nfsd4: add open state code for CLAIM_DELEGATE_CUR")
    Cc: [email protected]
    Signed-off-by: Dai Ngo <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nfsd: handle get_client_locked() failure in nfsd4_setclientid_confirm() [+ + +]
Author: Jeff Layton <[email protected]>
Date:   Wed Jun 4 12:01:10 2025 -0400

    nfsd: handle get_client_locked() failure in nfsd4_setclientid_confirm()
    
    commit 908e4ead7f757504d8b345452730636e298cbf68 upstream.
    
    Lei Lu recently reported that nfsd4_setclientid_confirm() did not check
    the return value from get_client_locked(). a SETCLIENTID_CONFIRM could
    race with a confirmed client expiring and fail to get a reference. That
    could later lead to a UAF.
    
    Fix this by getting a reference early in the case where there is an
    extant confirmed client. If that fails then treat it as if there were no
    confirmed client found at all.
    
    In the case where the unconfirmed client is expiring, just fail and
    return the result from get_client_locked().
    
    Reported-by: lei lu <[email protected]>
    Closes: https://lore.kernel.org/linux-nfs/CAEBF3_b=UvqzNKdnfD_52L05Mqrqui9vZ2eFamgAbV0WG+FNWQ@mail.gmail.com/
    Fixes: d20c11d86d8f ("nfsd: Protect session creation and client confirm using client_lock")
    Cc: [email protected]
    Signed-off-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nvme-pci: try function level reset on init failure [+ + +]
Author: Keith Busch <[email protected]>
Date:   Tue Jul 15 12:16:27 2025 -0700

    nvme-pci: try function level reset on init failure
    
    [ Upstream commit 5b2c214a95942f7997d1916a4c44017becbc3cac ]
    
    NVMe devices from multiple vendors appear to get stuck in a reset state
    that we can't get out of with an NVMe level Controller Reset. The kernel
    would report these with messages that look like:
    
      Device not ready; aborting reset, CSTS=0x1
    
    These have historically required a power cycle to make them usable
    again, but in many cases, a PCIe FLR is sufficient to restart operation
    without a power cycle. Try it if the initial controller reset fails
    during any nvme reset attempt.
    
    Signed-off-by: Keith Busch <[email protected]>
    Reviewed-by: Chaitanya Kulkarni <[email protected]>
    Reviewed-by: Nitesh Shetty <[email protected]>
    Signed-off-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Octeontx2-af: Skip overlap check for SPI field [+ + +]
Author: Hariprasad Kelam <[email protected]>
Date:   Wed Aug 20 12:09:18 2025 +0530

    Octeontx2-af: Skip overlap check for SPI field
    
    [ Upstream commit 8c5d95988c34f0aeba1f34cd5e4ba69494c90c5f ]
    
    Octeontx2/CN10K silicon supports generating a 256-bit key per packet.
    The specific fields to be extracted from a packet for key generation
    are configurable via a Key Extraction (MKEX) Profile.
    
    The AF driver scans the configured extraction profile to ensure that
    fields from upper layers do not overwrite fields from lower layers in
    the key.
    
    Example Packet Field Layout:
    LA: DMAC + SMAC
    LB: VLAN
    LC: IPv4/IPv6
    LD: TCP/UDP
    
    Valid MKEX Profile Configuration:
    
    LA   -> DMAC   -> key_offset[0-5]
    LC   -> SIP    -> key_offset[20-23]
    LD   -> SPORT  -> key_offset[30-31]
    
    Invalid MKEX profile configuration:
    
    LA   -> DMAC   -> key_offset[0-5]
    LC   -> SIP    -> key_offset[20-23]
    LD   -> SPORT  -> key_offset[2-3]  // Overlaps with DMAC field
    
    In another scenario, if the MKEX profile is configured to extract
    the SPI field from both AH and ESP headers at the same key offset,
    the driver rejecting this configuration. In a regular traffic,
    ipsec packet will be having either AH(LD) or ESP (LE). This patch
    relaxes the check for the same.
    
    Fixes: 12aa0a3b93f3 ("octeontx2-af: Harden rule validation.")
    Signed-off-by: Hariprasad Kelam <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
parisc: Check region is readable by user in raw_copy_from_user() [+ + +]
Author: John David Anglin <[email protected]>
Date:   Mon Jul 21 15:39:26 2025 -0400

    parisc: Check region is readable by user in raw_copy_from_user()
    
    commit 91428ca9320edbab1211851d82429d33b9cd73ef upstream.
    
    Because of the way the _PAGE_READ is handled in the parisc PTE, an
    access interruption is not generated when the kernel reads from a
    region where the _PAGE_READ is zero. The current code was written
    assuming read access faults would also occur in the kernel.
    
    This change adds user access checks to raw_copy_from_user().  The
    prober_user() define checks whether user code has read access to
    a virtual address. Note that page faults are not handled in the
    exception support for the probe instruction. For this reason, we
    precede the probe by a ldb access check.
    
    Signed-off-by: John David Anglin <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Cc: [email protected] # v5.12+
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

parisc: Define and use set_pte_at() [+ + +]
Author: John David Anglin <[email protected]>
Date:   Mon Jul 21 16:06:21 2025 -0400

    parisc: Define and use set_pte_at()
    
    commit 802e55488bc2cc1ab6423b720255a785ccac42ce upstream.
    
    When a PTE is changed, we need to flush the PTE. set_pte_at()
    was lost in the folio update. PA-RISC version is the same as
    the generic version.
    
    Signed-off-by: John David Anglin <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Cc: [email protected] # v5.12+
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

parisc: Drop WARN_ON_ONCE() from flush_cache_vmap [+ + +]
Author: John David Anglin <[email protected]>
Date:   Mon Jul 21 16:18:41 2025 -0400

    parisc: Drop WARN_ON_ONCE() from flush_cache_vmap
    
    commit 4eab1c27ce1f0e89ab67b01bf1e4e4c75215708a upstream.
    
    I have observed warning to occassionally trigger.
    
    Signed-off-by: John David Anglin <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Cc: [email protected] # v5.12+
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

parisc: Makefile: explain that 64BIT requires both 32-bit and 64-bit compilers [+ + +]
Author: Randy Dunlap <[email protected]>
Date:   Wed Jun 25 00:30:54 2025 -0700

    parisc: Makefile: explain that 64BIT requires both 32-bit and 64-bit compilers
    
    commit 305ab0a748c52eeaeb01d8cff6408842d19e5cb5 upstream.
    
    For building a 64-bit kernel, both 32-bit and 64-bit VDSO binaries
    are built, so both 32-bit and 64-bit compilers (and tools) should be
    in the PATH environment variable.
    
    Signed-off-by: Randy Dunlap <[email protected]>
    Cc: "James E.J. Bottomley" <[email protected]>
    Cc: Helge Deller <[email protected]>
    Cc: [email protected]
    Signed-off-by: Helge Deller <[email protected]>
    Cc: [email protected] # v5.3+
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

parisc: Makefile: fix a typo in palo.conf [+ + +]
Author: Randy Dunlap <[email protected]>
Date:   Wed Jun 25 00:39:33 2025 -0700

    parisc: Makefile: fix a typo in palo.conf
    
    commit 963f1b20a8d2a098954606b9725cd54336a2a86c upstream.
    
    Correct "objree" to "objtree". "objree" is not defined.
    
    Fixes: 75dd47472b92 ("kbuild: remove src and obj from the top Makefile")
    Signed-off-by: Randy Dunlap <[email protected]>
    Cc: Masahiro Yamada <[email protected]>
    Cc: "James E.J. Bottomley" <[email protected]>
    Cc: Helge Deller <[email protected]>
    Cc: [email protected]
    Signed-off-by: Helge Deller <[email protected]>
    Cc: [email protected] # v5.3+
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

parisc: Rename pte_needs_flush() to pte_needs_cache_flush() in cache.c [+ + +]
Author: John David Anglin <[email protected]>
Date:   Mon Jul 21 15:56:04 2025 -0400

    parisc: Rename pte_needs_flush() to pte_needs_cache_flush() in cache.c
    
    commit 52ce9406a9625c4498c4eaa51e7a7ed9dcb9db16 upstream.
    
    The local name used in cache.c conflicts the declaration in
    include/asm-generic/tlb.h.
    
    Signed-off-by: John David Anglin <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Cc: [email protected] # v5.12+
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

parisc: Revise __get_user() to probe user read access [+ + +]
Author: John David Anglin <[email protected]>
Date:   Fri Jul 25 13:51:32 2025 -0400

    parisc: Revise __get_user() to probe user read access
    
    commit 89f686a0fb6e473a876a9a60a13aec67a62b9a7e upstream.
    
    Because of the way read access support is implemented, read access
    interruptions are only triggered at privilege levels 2 and 3. The
    kernel executes at privilege level 0, so __get_user() never triggers
    a read access interruption (code 26). Thus, it is currently possible
    for user code to access a read protected address via a system call.
    
    Fix this by probing read access rights at privilege level 3 (PRIV_USER)
    and setting __gu_err to -EFAULT (-14) if access isn't allowed.
    
    Note the cmpiclr instruction does a 32-bit compare because COND macro
    doesn't work inside asm.
    
    Signed-off-by: John David Anglin <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Cc: [email protected] # v5.12+
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

parisc: Revise gateway LWS calls to probe user read access [+ + +]
Author: John David Anglin <[email protected]>
Date:   Fri Jul 25 12:12:14 2025 -0400

    parisc: Revise gateway LWS calls to probe user read access
    
    commit f6334f4ae9a4e962ba74b026e1d965dfdf8cbef8 upstream.
    
    We use load and stbys,e instructions to trigger memory reference
    interruptions without writing to memory. Because of the way read
    access support is implemented, read access interruptions are only
    triggered at privilege levels 2 and 3. The kernel and gateway
    page execute at privilege level 0, so this code never triggers
    a read access interruption. Thus, it is currently possible for
    user code to execute a LWS compare and swap operation at an
    address that is read protected at privilege level 3 (PRIV_USER).
    
    Fix this by probing read access rights at privilege level 3 and
    branching to lws_fault if access isn't allowed.
    
    Signed-off-by: John David Anglin <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Cc: [email protected] # v5.12+
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

parisc: Try to fixup kernel exception in bad_area_nosemaphore path of do_page_fault() [+ + +]
Author: John David Anglin <[email protected]>
Date:   Mon Jul 21 16:13:13 2025 -0400

    parisc: Try to fixup kernel exception in bad_area_nosemaphore path of do_page_fault()
    
    commit f92a5e36b0c45cd12ac0d1bc44680c0dfae34543 upstream.
    
    Signed-off-by: John David Anglin <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Cc: [email protected] # v5.12+
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

parisc: Update comments in make_insert_tlb [+ + +]
Author: John David Anglin <[email protected]>
Date:   Mon Jul 21 15:13:42 2025 -0400

    parisc: Update comments in make_insert_tlb
    
    commit cb22f247f371bd206a88cf0e0c05d80b8b62fb26 upstream.
    
    The following testcase exposed a problem with our read access checks
    in get_user() and raw_copy_from_user():
    
    #include <stdint.h>
    #include <stddef.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <errno.h>
    #include <sys/mman.h>
    #include <sys/types.h>
    
    int main(int argc, char **argv)
    {
      unsigned long page_size = sysconf(_SC_PAGESIZE);
      char *p = malloc(3 * page_size);
      char *p_aligned;
    
      /* initialize memory region. If not initialized, write syscall below will correctly return EFAULT. */
      if (1)
            memset(p, 'X', 3 * page_size);
    
      p_aligned = (char *) ((((uintptr_t) p) + (2*page_size - 1)) & ~(page_size - 1));
      /* Drop PROT_READ protection. Kernel and userspace should fault when accessing that memory region */
      mprotect(p_aligned, page_size, PROT_NONE);
    
      /* the following write() should return EFAULT, since PROT_READ was dropped by previous mprotect() */
      int ret = write(2, p_aligned, 1);
      if (!ret || errno != EFAULT)
            printf("\n FAILURE: write() did not returned expected EFAULT value\n");
    
      return 0;
    }
    
    Because of the way _PAGE_READ is handled, kernel code never generates
    a read access fault when it access a page as the kernel privilege level
    is always less than PL1 in the PTE.
    
    This patch reworks the comments in the make_insert_tlb macro to try
    to make this clearer.
    
    Signed-off-by: John David Anglin <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Cc: [email protected] # v5.12+
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
PCI/ACPI: Fix runtime PM ref imbalance on Hot-Plug Capable ports [+ + +]
Author: Lukas Wunner <[email protected]>
Date:   Fri Aug 15 23:50:20 2025 -0400

    PCI/ACPI: Fix runtime PM ref imbalance on Hot-Plug Capable ports
    
    [ Upstream commit 6cff20ce3b92ffbf2fc5eb9e5a030b3672aa414a ]
    
    pci_bridge_d3_possible() is called from both pcie_portdrv_probe() and
    pcie_portdrv_remove() to determine whether runtime power management shall
    be enabled (on probe) or disabled (on remove) on a PCIe port.
    
    The underlying assumption is that pci_bridge_d3_possible() always returns
    the same value, else a runtime PM reference imbalance would occur.  That
    assumption is not given if the PCIe port is inaccessible on remove due to
    hot-unplug:  pci_bridge_d3_possible() calls pciehp_is_native(), which
    accesses Config Space to determine whether the port is Hot-Plug Capable.
    An inaccessible port returns "all ones", which is converted to "all
    zeroes" by pcie_capability_read_dword().  Hence the port no longer seems
    Hot-Plug Capable on remove even though it was on probe.
    
    The resulting runtime PM ref imbalance causes warning messages such as:
    
      pcieport 0000:02:04.0: Runtime PM usage count underflow!
    
    Avoid the Config Space access (and thus the runtime PM ref imbalance) by
    caching the Hot-Plug Capable bit in struct pci_dev.
    
    The struct already contains an "is_hotplug_bridge" flag, which however is
    not only set on Hot-Plug Capable PCIe ports, but also Conventional PCI
    Hot-Plug bridges and ACPI slots.  The flag identifies bridges which are
    allocated additional MMIO and bus number resources to allow for hierarchy
    expansion.
    
    The kernel is somewhat sloppily using "is_hotplug_bridge" in a number of
    places to identify Hot-Plug Capable PCIe ports, even though the flag
    encompasses other devices.  Subsequent commits replace these occurrences
    with the new flag to clearly delineate Hot-Plug Capable PCIe ports from
    other kinds of hotplug bridges.
    
    Document the existing "is_hotplug_bridge" and the new "is_pciehp" flag
    and document the (non-obvious) requirement that pci_bridge_d3_possible()
    always returns the same value across the entire lifetime of a bridge,
    including its hot-removal.
    
    Fixes: 5352a44a561d ("PCI: pciehp: Make pciehp_is_native() stricter")
    Reported-by: Laurent Bigonville <[email protected]>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=220216
    Reported-by: Mario Limonciello <[email protected]>
    Closes: https://lore.kernel.org/r/[email protected]/
    Link: https://lore.kernel.org/all/[email protected]/T/#u
    Signed-off-by: Lukas Wunner <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Acked-by: Rafael J. Wysocki <[email protected]>
    Cc: [email protected] # v4.18+
    Link: https://patch.msgid.link/fe5dcc3b2e62ee1df7905d746bde161eb1b3291c.1752390101.git.lukas@wunner.de
    [ changed "recent enough PCIe ports" comment to "some PCIe ports" ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
PCI: endpoint: Fix configfs group list head handling [+ + +]
Author: Damien Le Moal <[email protected]>
Date:   Tue Jun 24 20:45:43 2025 +0900

    PCI: endpoint: Fix configfs group list head handling
    
    commit d79123d79a8154b4318529b7b2ff7e15806f480b upstream.
    
    Doing a list_del() on the epf_group field of struct pci_epf_driver in
    pci_epf_remove_cfs() is not correct as this field is a list head, not
    a list entry. This list_del() call triggers a KASAN warning when an
    endpoint function driver which has a configfs attribute group is torn
    down:
    
    ==================================================================
    BUG: KASAN: slab-use-after-free in pci_epf_remove_cfs+0x17c/0x198
    Write of size 8 at addr ffff00010f4a0d80 by task rmmod/319
    
    CPU: 3 UID: 0 PID: 319 Comm: rmmod Not tainted 6.16.0-rc2 #1 NONE
    Hardware name: Radxa ROCK 5B (DT)
    Call trace:
    show_stack+0x2c/0x84 (C)
    dump_stack_lvl+0x70/0x98
    print_report+0x17c/0x538
    kasan_report+0xb8/0x190
    __asan_report_store8_noabort+0x20/0x2c
    pci_epf_remove_cfs+0x17c/0x198
    pci_epf_unregister_driver+0x18/0x30
    nvmet_pci_epf_cleanup_module+0x24/0x30 [nvmet_pci_epf]
    __arm64_sys_delete_module+0x264/0x424
    invoke_syscall+0x70/0x260
    el0_svc_common.constprop.0+0xac/0x230
    do_el0_svc+0x40/0x58
    el0_svc+0x48/0xdc
    el0t_64_sync_handler+0x10c/0x138
    el0t_64_sync+0x198/0x19c
    ...
    
    Remove this incorrect list_del() call from pci_epf_remove_cfs().
    
    Fixes: ef1433f717a2 ("PCI: endpoint: Create configfs entry for each pci_epf_device_id table entry")
    Signed-off-by: Damien Le Moal <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Reviewed-by: Niklas Cassel <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: endpoint: Fix configfs group removal on driver teardown [+ + +]
Author: Damien Le Moal <[email protected]>
Date:   Tue Jun 24 20:45:44 2025 +0900

    PCI: endpoint: Fix configfs group removal on driver teardown
    
    commit 910bdb8197f9322790c738bb32feaa11dba26909 upstream.
    
    An endpoint driver configfs attributes group is added to the
    epf_group list of struct pci_epf_driver by pci_epf_add_cfs() but an
    added group is not removed from this list when the attribute group is
    unregistered with pci_ep_cfs_remove_epf_group().
    
    Add the missing list_del() call in pci_ep_cfs_remove_epf_group()
    to correctly remove the attribute group from the driver list.
    
    With this change, once the loop over all attribute groups in
    pci_epf_remove_cfs() completes, the driver epf_group list should be
    empty. Add a WARN_ON() to make sure of that.
    
    Fixes: ef1433f717a2 ("PCI: endpoint: Create configfs entry for each pci_epf_device_id table entry")
    Signed-off-by: Damien Le Moal <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Reviewed-by: Niklas Cassel <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: Extend isolated function probing to LoongArch [+ + +]
Author: Huacai Chen <[email protected]>
Date:   Tue Jun 24 14:29:27 2025 +0800

    PCI: Extend isolated function probing to LoongArch
    
    commit a02fd05661d73a8507dd70dd820e9b984490c545 upstream.
    
    Like s390 and the jailhouse hypervisor, LoongArch's PCI architecture allows
    passing isolated PCI functions to a guest OS instance. So it is possible
    that there is a multi-function device without function 0 for the host or
    guest.
    
    Allow probing such functions by adding a IS_ENABLED(CONFIG_LOONGARCH) case
    in the hypervisor_isolated_pci_functions() helper.
    
    This is similar to commit 189c6c33ff42 ("PCI: Extend isolated function
    probing to s390").
    
    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: imx6: Add IMX8MM_EP and IMX8MP_EP fixed 256-byte BAR 4 in epc_features [+ + +]
Author: Richard Zhu <[email protected]>
Date:   Fri Aug 22 16:27:13 2025 -0400

    PCI: imx6: Add IMX8MM_EP and IMX8MP_EP fixed 256-byte BAR 4 in epc_features
    
    [ Upstream commit 399444a87acdea5d21c218bc8e9b621fea1cd218 ]
    
    For IMX8MM_EP and IMX8MP_EP, add fixed 256-byte BAR 4 and reserved BAR 5
    in imx8m_pcie_epc_features.
    
    Fixes: 75c2f26da03f ("PCI: imx6: Add i.MX PCIe EP mode support")
    Signed-off-by: Richard Zhu <[email protected]>
    [bhelgaas: add details in subject]
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    [ Adapted BAR configuration to use reserved_bar bitmap and bar_fixed_size ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: imx6: Delay link start until configfs 'start' written [+ + +]
Author: Richard Zhu <[email protected]>
Date:   Fri Aug 22 16:40:52 2025 -0400

    PCI: imx6: Delay link start until configfs 'start' written
    
    [ Upstream commit 2e6ea70690ddd1ffa422423fd0d4523e4dfe4b62 ]
    
    According to Documentation/PCI/endpoint/pci-endpoint-cfs.rst, the Endpoint
    controller (EPC) should only start the link when userspace writes '1' to
    the '/sys/kernel/config/pci_ep/controllers/<EPC>/start' attribute, which
    ultimately results in calling imx_pcie_start_link() via
    pci_epc_start_store().
    
    To align with the documented behavior, do not start the link automatically
    when adding the EP controller.
    
    Fixes: 75c2f26da03f ("PCI: imx6: Add i.MX PCIe EP mode support")
    Signed-off-by: Richard Zhu <[email protected]>
    [mani: reworded commit subject and description]
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    [bhelgaas: commit log]
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    [ imx_pcie_ltssm_enable() => imx6_pcie_ltssm_enable() ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: rockchip: Set Target Link Speed to 5.0 GT/s before retraining [+ + +]
Author: Geraldo Nascimento <[email protected]>
Date:   Fri Aug 22 16:40:59 2025 -0400

    PCI: rockchip: Set Target Link Speed to 5.0 GT/s before retraining
    
    [ Upstream commit 114b06ee108cabc82b995fbac6672230a9776936 ]
    
    Rockchip controllers can support up to 5.0 GT/s link speed. But the driver
    doesn't set the Target Link Speed currently. This may cause failure in
    retraining the link to 5.0 GT/s if supported by the endpoint. So set the
    Target Link Speed to 5.0 GT/s in the Link Control and Status Register 2.
    
    Fixes: e77f847df54c ("PCI: rockchip: Add Rockchip PCIe controller support")
    Signed-off-by: Geraldo Nascimento <[email protected]>
    [mani: fixed whitespace warning, commit message rewording, added fixes tag]
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Tested-by: Robin Murphy <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/0afa6bc47b7f50e2e81b0b47d51c66feb0fb565f.1751322015.git.geraldogabriel@gmail.com
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PCI: rockchip: Use standard PCIe definitions [+ + +]
Author: Geraldo Nascimento <[email protected]>
Date:   Fri Aug 22 16:40:58 2025 -0400

    PCI: rockchip: Use standard PCIe definitions
    
    [ Upstream commit cbbfe9f683f0f9b6a1da2eaa53b995a4b5961086 ]
    
    Current code uses custom-defined register offsets and bitfields for the
    standard PCIe registers. This creates duplication as the PCI header already
    defines them. So, switch to using the standard PCIe definitions and drop
    the custom ones.
    
    Suggested-by: Bjorn Helgaas <[email protected]>
    Signed-off-by: Geraldo Nascimento <[email protected]>
    [mani: commit message rewording]
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    [bhelgaas: include bitfield.h]
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Link: https://patch.msgid.link/e81700ef4b49f584bc8834bfb07b6d8995fc1f42.1751322015.git.geraldogabriel@gmail.com
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
perf/cxlpmu: Remove unintended newline from IRQ name format string [+ + +]
Author: Alok Tiwari <[email protected]>
Date:   Tue Jun 24 12:43:39 2025 -0700

    perf/cxlpmu: Remove unintended newline from IRQ name format string
    
    [ Upstream commit 3e870815ccf5bc75274158f0b5e234fce6f93229 ]
    
    The IRQ name format string used in devm_kasprintf() mistakenly included
    a newline character "\n".
    This could lead to confusing log output or misformatted names in sysfs
    or debug messages.
    
    This fix removes the newline to ensure proper IRQ naming.
    
    Signed-off-by: Alok Tiwari <[email protected]>
    Reviewed-by: Jonathan Cameron <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Will Deacon <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
phy: mscc: Fix timestamping for vsc8584 [+ + +]
Author: Horatiu Vultur <[email protected]>
Date:   Mon Aug 18 10:10:29 2025 +0200

    phy: mscc: Fix timestamping for vsc8584
    
    [ Upstream commit bc1a59cff9f797bfbf8f3104507584d89e9ecf2e ]
    
    There was a problem when we received frames and the frames were
    timestamped. The driver is configured to store the nanosecond part of
    the timestmap in the ptp reserved bits and it would take the second part
    by reading the LTC. The problem is that when reading the LTC we are in
    atomic context and to read the second part will go over mdio bus which
    might sleep, so we get an error.
    The fix consists in actually put all the frames in a queue and start the
    aux work and in that work to read the LTC and then calculate the full
    received time.
    
    Fixes: 7d272e63e0979d ("net: phy: mscc: timestamping and PHC support")
    Signed-off-by: Horatiu Vultur <[email protected]>
    Reviewed-by: Vadim Fedorenko <[email protected]>
    Reviewed-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]>

phy: qcom: phy-qcom-m31: Update IPQ5332 M31 USB phy initialization sequence [+ + +]
Author: Kathiravan Thirumoorthy <[email protected]>
Date:   Mon Jun 30 13:48:13 2025 +0530

    phy: qcom: phy-qcom-m31: Update IPQ5332 M31 USB phy initialization sequence
    
    commit 4a3556b81b99f0c8c0358f7cc6801a62b4538fe2 upstream.
    
    The current configuration used for the IPQ5332 M31 USB PHY fails the
    Near End High Speed Signal Quality compliance test. To resolve this,
    update the initialization sequence as specified in the Hardware Design
    Document.
    
    Fixes: 08e49af50701 ("phy: qcom: Introduce M31 USB PHY driver")
    Cc: [email protected]
    Signed-off-by: Kathiravan Thirumoorthy <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Link: https://lore.kernel.org/r/20250630-ipq5332_hsphy_complaince-v2-1-63621439ebdb@oss.qualcomm.com
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

phy: rockchip-pcie: Properly disable TEST_WRITE strobe signal [+ + +]
Author: Geraldo Nascimento <[email protected]>
Date:   Mon Jun 30 19:25:28 2025 -0300

    phy: rockchip-pcie: Properly disable TEST_WRITE strobe signal
    
    [ Upstream commit 25facbabc3fc33c794ad09d73f73268c0f8cbc7d ]
    
    pcie_conf is used to touch TEST_WRITE strobe signal. This signal should
    be enabled, a little time waited, and then disabled. Current code clearly
    was copy-pasted and never disables the strobe signal. Adjust the define.
    While at it, remove PHY_CFG_RD_MASK which has been unused since
    64cdc0360811 ("phy: rockchip-pcie: remove unused phy_rd_cfg function").
    
    Reviewed-by: Neil Armstrong <[email protected]>
    Signed-off-by: Geraldo Nascimento <[email protected]>
    Link: https://lore.kernel.org/r/d514d5d5627680caafa8b7548cbdfee4307f5440.1751322015.git.geraldogabriel@gmail.com
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
pinctrl: stm32: Manage irq affinity settings [+ + +]
Author: Cheick Traore <[email protected]>
Date:   Tue Jun 10 16:30:39 2025 +0200

    pinctrl: stm32: Manage irq affinity settings
    
    [ Upstream commit 4c5cc2f65386e22166ce006efe515c667aa075e4 ]
    
    Trying to set the affinity of the interrupts associated to stm32
    pinctrl results in a write error.
    
    Fill struct irq_chip::irq_set_affinity to use the default helper
    function.
    
    Signed-off-by: Cheick Traore <[email protected]>
    Signed-off-by: Antonio Borneo <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
platform/chrome: cros_ec: Unregister notifier in cros_ec_unregister() [+ + +]
Author: Tzung-Bi Shih <[email protected]>
Date:   Tue Jul 22 12:05:13 2025 +0000

    platform/chrome: cros_ec: Unregister notifier in cros_ec_unregister()
    
    commit e2374953461947eee49f69b3e3204ff080ef31b1 upstream.
    
    The blocking notifier is registered in cros_ec_register(); however, it
    isn't unregistered in cros_ec_unregister().
    
    Fix it.
    
    Fixes: 42cd0ab476e2 ("platform/chrome: cros_ec: Query EC protocol version if EC transitions between RO/RW")
    Cc: [email protected]
    Reviewed-by: Benson Leung <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Tzung-Bi Shih <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

platform/chrome: cros_ec_typec: Defer probe on missing EC parent [+ + +]
Author: Tomasz Michalec <[email protected]>
Date:   Tue Jun 10 17:37:47 2025 +0200

    platform/chrome: cros_ec_typec: Defer probe on missing EC parent
    
    [ Upstream commit 8866f4e557eba43e991f99711515217a95f62d2e ]
    
    If cros_typec_probe is called before EC device is registered,
    cros_typec_probe will fail. It may happen when cros-ec-typec.ko is
    loaded before EC bus layer module (e.g. cros_ec_lpcs.ko,
    cros_ec_spi.ko).
    
    Return -EPROBE_DEFER when cros_typec_probe doesn't get EC device, so
    the probe function can be called again after EC device is registered.
    
    Signed-off-by: Tomasz Michalec <[email protected]>
    Reviewed-by: Abhishek Pandit-Subedi <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Tzung-Bi Shih <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
platform/x86/amd: pmc: Add Lenovo Yoga 6 13ALC6 to pmc quirk list [+ + +]
Author: Mario Limonciello <[email protected]>
Date:   Fri Jul 18 12:23:05 2025 -0500

    platform/x86/amd: pmc: Add Lenovo Yoga 6 13ALC6 to pmc quirk list
    
    [ Upstream commit 4ff3aeb664f7dfe824ba91ffb0b203397a8d431e ]
    
    The Lenovo Yoga 6 13ACL6 82ND has a similar BIOS problem as other Lenovo
    laptops from that vintage that causes a rather long resume from suspend.
    
    Add it to the quirk list that manipulates the scratch register to avoid
    the issue.
    
    Reported-by: Adam Berglund <[email protected]>
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4434
    Tested-by: Adam Berglund <[email protected]>
    Signed-off-by: Mario Limonciello <[email protected]>
    Reviewed-by: Hans de Goede <[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: thinkpad_acpi: Handle KCOV __init vs inline mismatches [+ + +]
Author: Kees Cook <[email protected]>
Date:   Thu May 29 11:18:37 2025 -0700

    platform/x86: thinkpad_acpi: Handle KCOV __init vs inline mismatches
    
    [ Upstream commit 6418a8504187dc7f5b6f9d0649c03e362cb0664b ]
    
    When KCOV is enabled all functions get instrumented, unless the
    __no_sanitize_coverage attribute is used. To prepare for
    __no_sanitize_coverage being applied to __init functions[1], we have
    to handle differences in how GCC's inline optimizations get resolved.
    For thinkpad_acpi routines, this means forcing two functions to be
    inline with __always_inline.
    
    Link: https://lore.kernel.org/lkml/[email protected]/ [1]
    Signed-off-by: Kees Cook <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
PM / devfreq: governor: Replace sscanf() with kstrtoul() in set_freq_store() [+ + +]
Author: Lifeng Zheng <[email protected]>
Date:   Mon Apr 21 11:00:17 2025 +0800

    PM / devfreq: governor: Replace sscanf() with kstrtoul() in set_freq_store()
    
    [ Upstream commit 914cc799b28f17d369d5b4db3b941957d18157e8 ]
    
    Replace sscanf() with kstrtoul() in set_freq_store() and check the result
    to avoid invalid input.
    
    Signed-off-by: Lifeng Zheng <[email protected]>
    Link: https://lore.kernel.org/lkml/[email protected]/
    Signed-off-by: Chanwoo Choi <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
pm: cpupower: Fix the snapshot-order of tsc,mperf, clock in mperf_stop() [+ + +]
Author: Gautham R. Shenoy <[email protected]>
Date:   Thu Jun 12 17:53:54 2025 +0530

    pm: cpupower: Fix the snapshot-order of tsc,mperf, clock in mperf_stop()
    
    [ Upstream commit cda7ac8ce7de84cf32a3871ba5f318aa3b79381e ]
    
    In the function mperf_start(), mperf_monitor snapshots the time, tsc
    and finally the aperf,mperf MSRs. However, this order of snapshotting
    in is reversed in mperf_stop(). As a result, the C0 residency (which
    is computed as delta_mperf * 100 / delta_tsc) is under-reported on
    CPUs that is 100% busy.
    
    Fix this by snapshotting time, tsc and then aperf,mperf in
    mperf_stop() in the same order as in mperf_start().
    
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Gautham R. Shenoy <[email protected]>
    Signed-off-by: Shuah Khan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
PM: runtime: Clear power.needs_force_resume in pm_runtime_reinit() [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Fri Jun 27 21:16:05 2025 +0200

    PM: runtime: Clear power.needs_force_resume in pm_runtime_reinit()
    
    [ Upstream commit 89d9cec3b1e9c49bae9375a2db6dc49bc7468af0 ]
    
    Clear power.needs_force_resume in pm_runtime_reinit() in case it has
    been set by pm_runtime_force_suspend() invoked from a driver remove
    callback.
    
    Suggested-by: Ulf Hansson <[email protected]>
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Reviewed-by: Ulf Hansson <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

PM: runtime: Simplify pm_runtime_get_if_active() usage [+ + +]
Author: Sakari Ailus <[email protected]>
Date:   Thu Aug 21 12:28:32 2025 -0400

    PM: runtime: Simplify pm_runtime_get_if_active() usage
    
    [ Upstream commit c0ef3df8dbaef51ee4cfd58a471adf2eaee6f6b3 ]
    
    There are two ways to opportunistically increment a device's runtime PM
    usage count, calling either pm_runtime_get_if_active() or
    pm_runtime_get_if_in_use(). The former has an argument to tell whether to
    ignore the usage count or not, and the latter simply calls the former with
    ign_usage_count set to false. The other users that want to ignore the
    usage_count will have to explicitly set that argument to true which is a
    bit cumbersome.
    
    To make this function more practical to use, remove the ign_usage_count
    argument from the function. The main implementation is in a static
    function called pm_runtime_get_conditional() and implementations of
    pm_runtime_get_if_active() and pm_runtime_get_if_in_use() are moved to
    runtime.c.
    
    Signed-off-by: Sakari Ailus <[email protected]>
    Reviewed-by: Alex Elder <[email protected]>
    Reviewed-by: Laurent Pinchart <[email protected]>
    Acked-by: Takashi Iwai <[email protected]> # sound/
    Reviewed-by: Jacek Lawrynowicz <[email protected]> # drivers/accel/ivpu/
    Acked-by: Rodrigo Vivi <[email protected]> # drivers/gpu/drm/i915/
    Reviewed-by: Rodrigo Vivi <[email protected]>
    Acked-by: Bjorn Helgaas <[email protected]> # drivers/pci/
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    [ Removed changes to code that didn't exist in older trees ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PM: runtime: Take active children into account in pm_runtime_get_if_in_use() [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Thu Aug 21 12:28:33 2025 -0400

    PM: runtime: Take active children into account in pm_runtime_get_if_in_use()
    
    [ Upstream commit 51888393cc64dd0462d0b96c13ab94873abbc030 ]
    
    For all practical purposes, there is no difference between the situation
    in which a given device is not ignoring children and its active child
    count is nonzero and the situation in which its runtime PM usage counter
    is nonzero.  However, pm_runtime_get_if_in_use() will only increment the
    device's usage counter and return 1 in the latter case.
    
    For consistency, make it do so in the former case either by adjusting
    pm_runtime_get_conditional() and update the related kerneldoc comments
    accordingly.
    
    Fixes: c111566bea7c ("PM: runtime: Add pm_runtime_get_if_active()")
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Reviewed-by: Ulf Hansson <[email protected]>
    Reviewed-by: Sakari Ailus <[email protected]>
    Cc: 5.10+ <[email protected]> # 5.10+: c0ef3df8dbae: PM: runtime: Simplify pm_runtime_get_if_active() usage
    Cc: 5.10+ <[email protected]> # 5.10+
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

PM: sleep: console: Fix the black screen issue [+ + +]
Author: tuhaowen <[email protected]>
Date:   Wed Jun 11 11:23:45 2025 +0800

    PM: sleep: console: Fix the black screen issue
    
    [ Upstream commit 4266e8fa56d3d982bf451d382a410b9db432015c ]
    
    When the computer enters sleep status without a monitor
    connected, the system switches the console to the virtual
    terminal tty63(SUSPEND_CONSOLE).
    
    If a monitor is subsequently connected before waking up,
    the system skips the required VT restoration process
    during wake-up, leaving the console on tty63 instead of
    switching back to tty1.
    
    To fix this issue, a global flag vt_switch_done is introduced
    to record whether the system has successfully switched to
    the suspend console via vt_move_to_console() during suspend.
    
    If the switch was completed, vt_switch_done is set to 1.
    Later during resume, this flag is checked to ensure that
    the original console is restored properly by calling
    vt_move_to_console(orig_fgconsole, 0).
    
    This prevents scenarios where the resume logic skips console
    restoration due to incorrect detection of the console state,
    especially when a monitor is reconnected before waking up.
    
    Signed-off-by: tuhaowen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
pNFS: Fix disk addr range check in block/scsi layout [+ + +]
Author: Sergey Bashirov <[email protected]>
Date:   Wed Jul 2 16:32:21 2025 +0300

    pNFS: Fix disk addr range check in block/scsi layout
    
    [ Upstream commit 7db6e66663681abda54f81d5916db3a3b8b1a13d ]
    
    At the end of the isect translation, disc_addr represents the physical
    disk offset. Thus, end calculated from disk_addr is also a physical disk
    offset. Therefore, range checking should be done using map->disk_offset,
    not map->start.
    
    Signed-off-by: Sergey Bashirov <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

pNFS: Fix stripe mapping in block/scsi layout [+ + +]
Author: Sergey Bashirov <[email protected]>
Date:   Tue Jul 1 15:21:48 2025 +0300

    pNFS: Fix stripe mapping in block/scsi layout
    
    [ Upstream commit 81438498a285759f31e843ac4800f82a5ce6521f ]
    
    Because of integer division, we need to carefully calculate the
    disk offset. Consider the example below for a stripe of 6 volumes,
    a chunk size of 4096, and an offset of 70000.
    
    chunk = div_u64(offset, dev->chunk_size) = 70000 / 4096 = 17
    offset = chunk * dev->chunk_size = 17 * 4096 = 69632
    disk_offset_wrong = div_u64(offset, dev->nr_children) = 69632 / 6 = 11605
    disk_chunk = div_u64(chunk, dev->nr_children) = 17 / 6 = 2
    disk_offset = disk_chunk * dev->chunk_size = 2 * 4096 = 8192
    
    Signed-off-by: Sergey Bashirov <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

pNFS: Fix uninited ptr deref in block/scsi layout [+ + +]
Author: Sergey Bashirov <[email protected]>
Date:   Mon Jun 30 21:35:26 2025 +0300

    pNFS: Fix uninited ptr deref in block/scsi layout
    
    [ Upstream commit 9768797c219326699778fba9cd3b607b2f1e7950 ]
    
    The error occurs on the third attempt to encode extents. When function
    ext_tree_prepare_commit() reallocates a larger buffer to retry encoding
    extents, the "layoutupdate_pages" page array is initialized only after the
    retry loop. But ext_tree_free_commitdata() is called on every iteration
    and tries to put pages in the array, thus dereferencing uninitialized
    pointers.
    
    An additional problem is that there is no limit on the maximum possible
    buffer_size. When there are too many extents, the client may create a
    layoutcommit that is larger than the maximum possible RPC size accepted
    by the server.
    
    During testing, we observed two typical scenarios. First, one memory page
    for extents is enough when we work with small files, append data to the
    end of the file, or preallocate extents before writing. But when we fill
    a new large file without preallocating, the number of extents can be huge,
    and counting the number of written extents in ext_tree_encode_commit()
    does not help much. Since this number increases even more between
    unlocking and locking of ext_tree, the reallocated buffer may not be
    large enough again and again.
    
    Co-developed-by: Konstantin Evtushenko <[email protected]>
    Signed-off-by: Konstantin Evtushenko <[email protected]>
    Signed-off-by: Sergey Bashirov <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

pNFS: Handle RPC size limit for layoutcommits [+ + +]
Author: Sergey Bashirov <[email protected]>
Date:   Mon Jun 30 21:35:29 2025 +0300

    pNFS: Handle RPC size limit for layoutcommits
    
    [ Upstream commit d897d81671bc4615c80f4f3bd5e6b218f59df50c ]
    
    When there are too many block extents for a layoutcommit, they may not
    all fit into the maximum-sized RPC. This patch allows the generic pnfs
    code to properly handle -ENOSPC returned by the block/scsi layout driver
    and trigger additional layoutcommits if necessary.
    
    Co-developed-by: Konstantin Evtushenko <[email protected]>
    Signed-off-by: Konstantin Evtushenko <[email protected]>
    Signed-off-by: Sergey Bashirov <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
power: supply: qcom_battmgr: Add lithium-polymer entry [+ + +]
Author: Abel Vesa <[email protected]>
Date:   Fri May 23 13:14:22 2025 +0300

    power: supply: qcom_battmgr: Add lithium-polymer entry
    
    [ Upstream commit 202ac22b8e2e015e6c196fd8113f3d2a62dd1afc ]
    
    On some Dell XPS 13 (9345) variants, the battery used is lithium-polymer
    based. Currently, this is reported as unknown technology due to the entry
    missing.
    
    [ 4083.135325] Unknown battery technology 'LIP'
    
    Add another check for lithium-polymer in the technology parsing callback
    and return that instead of unknown.
    
    Signed-off-by: Abel Vesa <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Link: https://lore.kernel.org/r/20250523-psy-qcom-battmgr-add-lipo-entry-v1-1-938c20a43a25@linaro.org
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
powerpc/boot: Fix build with gcc 15 [+ + +]
Author: Michal Suchanek <[email protected]>
Date:   Mon Mar 31 12:57:19 2025 +0200

    powerpc/boot: Fix build with gcc 15
    
    commit 5a821e2d69e26b51b7f3740b6b0c3462b8cacaff upstream.
    
    Similar to x86 the ppc boot code does not build with GCC 15.
    
    Copy the fix from
    commit ee2ab467bddf ("x86/boot: Use '-std=gnu11' to fix build with GCC 15")
    
    Signed-off-by: Michal Suchanek <[email protected]>
    Tested-by: Amit Machhiwal <[email protected]>
    Tested-by: Venkat Rao Bagalkote <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: Christophe Leroy <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
powerpc/thp: tracing: Hide hugepage events under CONFIG_PPC_BOOK3S_64 [+ + +]
Author: Steven Rostedt <[email protected]>
Date:   Thu Jun 12 10:12:59 2025 -0400

    powerpc/thp: tracing: Hide hugepage events under CONFIG_PPC_BOOK3S_64
    
    [ Upstream commit 43cf0e05089afe23dac74fa6e1e109d49f2903c4 ]
    
    The events hugepage_set_pmd, hugepage_set_pud, hugepage_update_pmd and
    hugepage_update_pud are only called when CONFIG_PPC_BOOK3S_64 is defined.
    As each event can take up to 5K regardless if they are used or not, it's
    best not to define them when they are not used. Add #ifdef around these
    events when they are not used.
    
    Cc: Masami Hiramatsu <[email protected]>
    Cc: Mathieu Desnoyers <[email protected]>
    Cc: Andrew Morton <[email protected]>
    Cc: Michael Ellerman <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Acked-by: David Hildenbrand <[email protected]>
    Acked-by: Madhavan Srinivasan <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
powerpc: floppy: Add missing checks after DMA map [+ + +]
Author: Thomas Fourier <[email protected]>
Date:   Fri Jun 20 09:55:55 2025 +0200

    powerpc: floppy: Add missing checks after DMA map
    
    [ Upstream commit cf183c1730f2634245da35e9b5d53381b787d112 ]
    
    The DMA map functions can fail and should be tested for errors.
    
    Signed-off-by: Thomas Fourier <[email protected]>
    Reviewed-by: Christophe Leroy <[email protected]>
    Signed-off-by: Madhavan Srinivasan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
ppp: fix race conditions in ppp_fill_forward_path [+ + +]
Author: Qingfang Deng <[email protected]>
Date:   Thu Aug 14 09:25:58 2025 +0800

    ppp: fix race conditions in ppp_fill_forward_path
    
    [ Upstream commit 0417adf367a0af11adf7ace849af4638cfb573f7 ]
    
    ppp_fill_forward_path() has two race conditions:
    
    1. The ppp->channels list can change between list_empty() and
       list_first_entry(), as ppp_lock() is not held. If the only channel
       is deleted in ppp_disconnect_channel(), list_first_entry() may
       access an empty head or a freed entry, and trigger a panic.
    
    2. pch->chan can be NULL. When ppp_unregister_channel() is called,
       pch->chan is set to NULL before pch is removed from ppp->channels.
    
    Fix these by using a lockless RCU approach:
    - Use list_first_or_null_rcu() to safely test and access the first list
      entry.
    - Convert list modifications on ppp->channels to their RCU variants and
      add synchronize_net() after removal.
    - Check for a NULL pch->chan before dereferencing it.
    
    Fixes: f6efc675c9dd ("net: ppp: resolve forwarding path for bridge pppoe devices")
    Signed-off-by: Qingfang Deng <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
pps: clients: gpio: fix interrupt handling order in remove path [+ + +]
Author: Eliav Farber <[email protected]>
Date:   Tue May 27 05:33:55 2025 +0000

    pps: clients: gpio: fix interrupt handling order in remove path
    
    [ Upstream commit 6bca1e955830808dc90e0506b2951b4256b81bbb ]
    
    The interrupt handler in pps_gpio_probe() is registered after calling
    pps_register_source() using devm_request_irq(). However, in the
    corresponding remove function, pps_unregister_source() is called before
    the IRQ is freed, since devm-managed resources are released after the
    remove function completes.
    
    This creates a potential race condition where an interrupt may occur
    after the PPS source is unregistered but before the handler is removed,
    possibly leading to a kernel panic.
    
    To prevent this, switch from devm-managed IRQ registration to manual
    management by using request_irq() and calling free_irq() explicitly in
    the remove path before unregistering the PPS source. This ensures the
    interrupt handler is safely removed before deactivating the PPS source.
    
    Signed-off-by: Eliav Farber <[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]>

 
ptp: prevent possible ABBA deadlock in ptp_clock_freerun() [+ + +]
Author: Jeongjun Park <[email protected]>
Date:   Mon Jul 28 15:26:49 2025 +0900

    ptp: prevent possible ABBA deadlock in ptp_clock_freerun()
    
    [ Upstream commit 2efe41234dbd0a83fdb7cd38226c2f70039a2cd3 ]
    
    syzbot reported the following ABBA deadlock:
    
           CPU0                           CPU1
           ----                           ----
      n_vclocks_store()
        lock(&ptp->n_vclocks_mux) [1]
            (physical clock)
                                         pc_clock_adjtime()
                                           lock(&clk->rwsem) [2]
                                            (physical clock)
                                           ...
                                           ptp_clock_freerun()
                                             ptp_vclock_in_use()
                                               lock(&ptp->n_vclocks_mux) [3]
                                                  (physical clock)
        ptp_clock_unregister()
          posix_clock_unregister()
            lock(&clk->rwsem) [4]
              (virtual clock)
    
    Since ptp virtual clock is registered only under ptp physical clock, both
    ptp_clock and posix_clock must be physical clocks for ptp_vclock_in_use()
    to lock &ptp->n_vclocks_mux and check ptp->n_vclocks.
    
    However, when unregistering vclocks in n_vclocks_store(), the locking
    ptp->n_vclocks_mux is a physical clock lock, but clk->rwsem of
    ptp_clock_unregister() called through device_for_each_child_reverse()
    is a virtual clock lock.
    
    Therefore, clk->rwsem used in CPU0 and clk->rwsem used in CPU1 are
    different locks, but in lockdep, a false positive occurs because the
    possibility of deadlock is determined through lock-class.
    
    To solve this, lock subclass annotation must be added to the posix_clock
    rwsem of the vclock.
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=7cfb66a237c4a5fb22ad
    Fixes: 73f37068d540 ("ptp: support ptp physical/virtual clocks conversion")
    Signed-off-by: Jeongjun Park <[email protected]>
    Acked-by: Richard Cochran <[email protected]>
    Reviewed-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: Use ratelimite for freerun error message [+ + +]
Author: Breno Leitao <[email protected]>
Date:   Fri Jun 13 10:15:46 2025 -0700

    ptp: Use ratelimite for freerun error message
    
    [ Upstream commit e9a7795e75b78b56997fb0070c18d6e1057b6462 ]
    
    Replace pr_err() with pr_err_ratelimited() in ptp_clock_settime() to
    prevent log flooding when the physical clock is free running, which
    happens on some of my hosts. This ensures error messages are
    rate-limited and improves kernel log readability.
    
    Signed-off-by: Breno Leitao <[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]>

 
pwm: imx-tpm: Reset counter if CMOD is 0 [+ + +]
Author: Laurentiu Mihalcea <[email protected]>
Date:   Mon Jul 28 15:41:44 2025 -0400

    pwm: imx-tpm: Reset counter if CMOD is 0
    
    commit 65c6f742ab14ab1a2679fba72b82dcc0289d96f1 upstream.
    
    As per the i.MX93 TRM, section 67.3.2.1 "MOD register update", the value
    of the TPM counter does NOT get updated when writing MOD.MOD unless
    SC.CMOD != 0. Therefore, with the current code, assuming the following
    sequence:
    
            1) pwm_disable()
            2) pwm_apply_might_sleep() /* period is changed here */
            3) pwm_enable()
    
    and assuming only one channel is active, if CNT.COUNT is higher than the
    MOD.MOD value written during the pwm_apply_might_sleep() call then, when
    re-enabling the PWM during pwm_enable(), the counter will end up resetting
    after UINT32_MAX - CNT.COUNT + MOD.MOD cycles instead of MOD.MOD cycles as
    normally expected.
    
    Fix this problem by forcing a reset of the TPM counter before MOD.MOD is
    written.
    
    Fixes: 738a1cfec2ed ("pwm: Add i.MX TPM PWM driver support")
    Cc: [email protected]
    Signed-off-by: Laurentiu Mihalcea <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

pwm: mediatek: Fix duty and period setting [+ + +]
Author: Uwe Kleine-König <[email protected]>
Date:   Mon Jul 28 18:00:18 2025 +0200

    pwm: mediatek: Fix duty and period setting
    
    commit f21d136caf8171f94159d975ea4620c164431bd9 upstream.
    
    The period generated by the hardware is
    
            (PWMDWIDTH + 1) << CLKDIV) / freq
    
    according to my tests with a signal analyser and also the documentation.
    
    The current algorithm doesn't consider the `+ 1` part and so configures
    slightly too high periods. The same issue exists for the duty cycle
    setting. So subtract 1 from both the register values for period and
    duty cycle. If period is 0, bail out, if duty_cycle is 0, just disable
    the PWM which results in a constant low output.
    
    Fixes: caf065f8fd58 ("pwm: Add MediaTek PWM support")
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
    Link: https://lore.kernel.org/r/6d1fa87a76f8020bfe3171529b8e19baffceab10.1753717973.git.u.kleine-koenig@baylibre.com
    Cc: [email protected]
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

pwm: mediatek: Handle hardware enable and clock enable separately [+ + +]
Author: Uwe Kleine-König <[email protected]>
Date:   Mon Jul 28 18:00:17 2025 +0200

    pwm: mediatek: Handle hardware enable and clock enable separately
    
    commit 704d918341c378c5f9505dfdf32d315e256d3846 upstream.
    
    Stop handling the clocks in pwm_mediatek_enable() and
    pwm_mediatek_disable(). This is a preparing change for the next commit
    that requires that clocks and the enable bit are handled separately.
    
    Also move these two functions a bit further up in the source file to
    make them usable in pwm_mediatek_config(), which is needed in the next
    commit, too.
    
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
    Link: https://lore.kernel.org/r/55c94fe2917ece152ee1e998f4675642a7716f13.1753717973.git.u.kleine-koenig@baylibre.com
    Cc: [email protected]
    Signed-off-by: Uwe Kleine-König <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
rcu: Fix racy re-initialization of irq_work causing hangs [+ + +]
Author: Frederic Weisbecker <[email protected]>
Date:   Fri Aug 8 19:03:22 2025 +0200

    rcu: Fix racy re-initialization of irq_work causing hangs
    
    commit 61399e0c5410567ef60cb1cda34cca42903842e3 upstream.
    
    RCU re-initializes the deferred QS irq work everytime before attempting
    to queue it. However there are situations where the irq work is
    attempted to be queued even though it is already queued. In that case
    re-initializing messes-up with the irq work queue that is about to be
    handled.
    
    The chances for that to happen are higher when the architecture doesn't
    support self-IPIs and irq work are then all lazy, such as with the
    following sequence:
    
    1) rcu_read_unlock() is called when IRQs are disabled and there is a
       grace period involving blocked tasks on the node. The irq work
       is then initialized and queued.
    
    2) The related tasks are unblocked and the CPU quiescent state
       is reported. rdp->defer_qs_iw_pending is reset to DEFER_QS_IDLE,
       allowing the irq work to be requeued in the future (note the previous
       one hasn't fired yet).
    
    3) A new grace period starts and the node has blocked tasks.
    
    4) rcu_read_unlock() is called when IRQs are disabled again. The irq work
       is re-initialized (but it's queued! and its node is cleared) and
       requeued. Which means it's requeued to itself.
    
    5) The irq work finally fires with the tick. But since it was requeued
       to itself, it loops and hangs.
    
    Fix this with initializing the irq work only once before the CPU boots.
    
    Fixes: b41642c87716 ("rcu: Fix rcu_read_unlock() deadloop due to IRQ work")
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-lkp/[email protected]
    Signed-off-by: Frederic Weisbecker <[email protected]>
    Reviewed-by: Joel Fernandes <[email protected]>
    Signed-off-by: Neeraj Upadhyay (AMD) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

rcu: Fix rcu_read_unlock() deadloop due to IRQ work [+ + +]
Author: Joel Fernandes <[email protected]>
Date:   Tue Jul 8 10:22:19 2025 -0400

    rcu: Fix rcu_read_unlock() deadloop due to IRQ work
    
    [ Upstream commit b41642c87716bbd09797b1e4ea7d904f06c39b7b ]
    
    During rcu_read_unlock_special(), if this happens during irq_exit(), we
    can lockup if an IPI is issued. This is because the IPI itself triggers
    the irq_exit() path causing a recursive lock up.
    
    This is precisely what Xiongfeng found when invoking a BPF program on
    the trace_tick_stop() tracepoint As shown in the trace below. Fix by
    managing the irq_work state correctly.
    
    irq_exit()
      __irq_exit_rcu()
        /* in_hardirq() returns false after this */
        preempt_count_sub(HARDIRQ_OFFSET)
        tick_irq_exit()
          tick_nohz_irq_exit()
                tick_nohz_stop_sched_tick()
                  trace_tick_stop()  /* a bpf prog is hooked on this trace point */
                       __bpf_trace_tick_stop()
                          bpf_trace_run2()
                                rcu_read_unlock_special()
                                  /* will send a IPI to itself */
                                  irq_work_queue_on(&rdp->defer_qs_iw, rdp->cpu);
    
    A simple reproducer can also be obtained by doing the following in
    tick_irq_exit(). It will hang on boot without the patch:
    
      static inline void tick_irq_exit(void)
      {
     +      rcu_read_lock();
     +      WRITE_ONCE(current->rcu_read_unlock_special.b.need_qs, true);
     +      rcu_read_unlock();
     +
    
    Reported-by: Xiongfeng Wang <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Tested-by: Qi Xi <[email protected]>
    Signed-off-by: Joel Fernandes <[email protected]>
    Reviewed-by: "Paul E. McKenney" <[email protected]>
    Reported-by: Linux Kernel Functional Testing <[email protected]>
    [neeraj: Apply Frederic's suggested fix for PREEMPT_RT]
    Signed-off-by: Neeraj Upadhyay (AMD) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

rcu: Protect ->defer_qs_iw_pending from data race [+ + +]
Author: Paul E. McKenney <[email protected]>
Date:   Thu Apr 24 16:49:53 2025 -0700

    rcu: Protect ->defer_qs_iw_pending from data race
    
    [ Upstream commit 90c09d57caeca94e6f3f87c49e96a91edd40cbfd ]
    
    On kernels built with CONFIG_IRQ_WORK=y, when rcu_read_unlock() is
    invoked within an interrupts-disabled region of code [1], it will invoke
    rcu_read_unlock_special(), which uses an irq-work handler to force the
    system to notice when the RCU read-side critical section actually ends.
    That end won't happen until interrupts are enabled at the soonest.
    
    In some kernels, such as those booted with rcutree.use_softirq=y, the
    irq-work handler is used unconditionally.
    
    The per-CPU rcu_data structure's ->defer_qs_iw_pending field is
    updated by the irq-work handler and is both read and updated by
    rcu_read_unlock_special().  This resulted in the following KCSAN splat:
    
    ------------------------------------------------------------------------
    
    BUG: KCSAN: data-race in rcu_preempt_deferred_qs_handler / rcu_read_unlock_special
    
    read to 0xffff96b95f42d8d8 of 1 bytes by task 90 on cpu 8:
     rcu_read_unlock_special+0x175/0x260
     __rcu_read_unlock+0x92/0xa0
     rt_spin_unlock+0x9b/0xc0
     __local_bh_enable+0x10d/0x170
     __local_bh_enable_ip+0xfb/0x150
     rcu_do_batch+0x595/0xc40
     rcu_cpu_kthread+0x4e9/0x830
     smpboot_thread_fn+0x24d/0x3b0
     kthread+0x3bd/0x410
     ret_from_fork+0x35/0x40
     ret_from_fork_asm+0x1a/0x30
    
    write to 0xffff96b95f42d8d8 of 1 bytes by task 88 on cpu 8:
     rcu_preempt_deferred_qs_handler+0x1e/0x30
     irq_work_single+0xaf/0x160
     run_irq_workd+0x91/0xc0
     smpboot_thread_fn+0x24d/0x3b0
     kthread+0x3bd/0x410
     ret_from_fork+0x35/0x40
     ret_from_fork_asm+0x1a/0x30
    
    no locks held by irq_work/8/88.
    irq event stamp: 200272
    hardirqs last  enabled at (200272): [<ffffffffb0f56121>] finish_task_switch+0x131/0x320
    hardirqs last disabled at (200271): [<ffffffffb25c7859>] __schedule+0x129/0xd70
    softirqs last  enabled at (0): [<ffffffffb0ee093f>] copy_process+0x4df/0x1cc0
    softirqs last disabled at (0): [<0000000000000000>] 0x0
    
    ------------------------------------------------------------------------
    
    The problem is that irq-work handlers run with interrupts enabled, which
    means that rcu_preempt_deferred_qs_handler() could be interrupted,
    and that interrupt handler might contain an RCU read-side critical
    section, which might invoke rcu_read_unlock_special().  In the strict
    KCSAN mode of operation used by RCU, this constitutes a data race on
    the ->defer_qs_iw_pending field.
    
    This commit therefore disables interrupts across the portion of the
    rcu_preempt_deferred_qs_handler() that updates the ->defer_qs_iw_pending
    field.  This suffices because this handler is not a fast path.
    
    Signed-off-by: Paul E. McKenney <[email protected]>
    Reviewed-by: Frederic Weisbecker <[email protected]>
    Signed-off-by: Neeraj Upadhyay (AMD) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/bnxt_re: Fix to do SRQ armena by default [+ + +]
Author: Kashyap Desai <[email protected]>
Date:   Tue Aug 5 15:39:57 2025 +0530

    RDMA/bnxt_re: Fix to do SRQ armena by default
    
    [ Upstream commit 6296f9a5293ada28558f2867ac54c487e1e2b9f2 ]
    
    Whenever SRQ is created, make sure SRQ arm enable is always
    set. Driver is always ready to receive SRQ ASYNC event.
    
    Additional note -
    There is no need to do srq arm enable conditionally.
    See bnxt_qplib_armen_db in bnxt_qplib_create_cq().
    
    Fixes: 37cb11acf1f7 ("RDMA/bnxt_re: Add SRQ support for Broadcom adapters")
    Signed-off-by: Kashyap Desai <[email protected]>
    Signed-off-by: Saravanan Vajravel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Kalesh AP <[email protected]>
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

RDMA/bnxt_re: Fix to initialize the PBL array [+ + +]
Author: Anantha Prabhu <[email protected]>
Date:   Tue Aug 5 15:40:00 2025 +0530

    RDMA/bnxt_re: Fix to initialize the PBL array
    
    [ Upstream commit 806b9f494f62791ee6d68f515a8056c615a0e7b2 ]
    
    memset the PBL page pointer and page map arrays before
    populating the SGL addresses of the HWQ.
    
    Fixes: 0c4dcd602817 ("RDMA/bnxt_re: Refactor hardware queue memory allocation")
    Signed-off-by: Anantha Prabhu <[email protected]>
    Reviewed-by: Saravanan Vajravel <[email protected]>
    Reviewed-by: Selvin Xavier <[email protected]>
    Signed-off-by: Kalesh AP <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

RDMA/bnxt_re: Fix to remove workload check in SRQ limit path [+ + +]
Author: Kashyap Desai <[email protected]>
Date:   Tue Aug 5 15:39:58 2025 +0530

    RDMA/bnxt_re: Fix to remove workload check in SRQ limit path
    
    [ Upstream commit 666bce0bd7e771127cb0cda125cc9d32d9f9f15d ]
    
    There should not be any checks of current workload to set
    srq_limit value to SRQ hw context.
    
    Remove all such workload checks and make a direct call to
    set srq_limit via doorbell SRQ_ARM.
    
    Fixes: 37cb11acf1f7 ("RDMA/bnxt_re: Add SRQ support for Broadcom adapters")
    Signed-off-by: Kashyap Desai <[email protected]>
    Signed-off-by: Saravanan Vajravel <[email protected]>
    Signed-off-by: Kalesh AP <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/core: reduce stack using in nldev_stat_get_doit() [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Fri Jun 20 13:33:26 2025 +0200

    RDMA/core: reduce stack using in nldev_stat_get_doit()
    
    [ Upstream commit 43163f4c30f94d2103c948a247cdf2cda5068ca7 ]
    
    In the s390 defconfig, gcc-10 and earlier end up inlining three functions
    into nldev_stat_get_doit(), and each of them uses some 600 bytes of stack.
    
    The result is a function with an overly large stack frame and a warning:
    
    drivers/infiniband/core/nldev.c:2466:1: error: the frame size of 1720 bytes is larger than 1280 bytes [-Werror=frame-larger-than=]
    
    Mark the three functions noinline_for_stack to prevent this, ensuring
    that only one copy of the nlattr array is on the stack of each function.
    
    Signed-off-by: Arnd Bergmann <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/erdma: Fix ignored return value of init_kernel_qp [+ + +]
Author: Boshi Yu <[email protected]>
Date:   Fri Jul 25 13:53:55 2025 +0800

    RDMA/erdma: Fix ignored return value of init_kernel_qp
    
    [ Upstream commit d5c74713f0117d07f91eb48b10bc2ad44e23c9b9 ]
    
    The init_kernel_qp interface may fail. Check its return value and free
    related resources properly when it does.
    
    Fixes: 155055771704 ("RDMA/erdma: Add verbs implementation")
    Reviewed-by: Cheng Xu <[email protected]>
    Signed-off-by: Boshi Yu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/siw: Fix the sendmsg byte count in siw_tcp_sendpages [+ + +]
Author: Pedro Falcato <[email protected]>
Date:   Tue Jul 29 13:03:48 2025 +0100

    RDMA/siw: Fix the sendmsg byte count in siw_tcp_sendpages
    
    commit c18646248fed07683d4cee8a8af933fc4fe83c0d upstream.
    
    Ever since commit c2ff29e99a76 ("siw: Inline do_tcp_sendpages()"),
    we have been doing this:
    
    static int siw_tcp_sendpages(struct socket *s, struct page **page, int offset,
                                 size_t size)
    [...]
            /* Calculate the number of bytes we need to push, for this page
             * specifically */
            size_t bytes = min_t(size_t, PAGE_SIZE - offset, size);
            /* If we can't splice it, then copy it in, as normal */
            if (!sendpage_ok(page[i]))
                    msg.msg_flags &= ~MSG_SPLICE_PAGES;
            /* Set the bvec pointing to the page, with len $bytes */
            bvec_set_page(&bvec, page[i], bytes, offset);
            /* Set the iter to $size, aka the size of the whole sendpages (!!!) */
            iov_iter_bvec(&msg.msg_iter, ITER_SOURCE, &bvec, 1, size);
    try_page_again:
            lock_sock(sk);
            /* Sendmsg with $size size (!!!) */
            rv = tcp_sendmsg_locked(sk, &msg, size);
    
    This means we've been sending oversized iov_iters and tcp_sendmsg calls
    for a while. This has a been a benign bug because sendpage_ok() always
    returned true. With the recent slab allocator changes being slowly
    introduced into next (that disallow sendpage on large kmalloc
    allocations), we have recently hit out-of-bounds crashes, due to slight
    differences in iov_iter behavior between the MSG_SPLICE_PAGES and
    "regular" copy paths:
    
    (MSG_SPLICE_PAGES)
    skb_splice_from_iter
      iov_iter_extract_pages
        iov_iter_extract_bvec_pages
          uses i->nr_segs to correctly stop in its tracks before OoB'ing everywhere
      skb_splice_from_iter gets a "short" read
    
    (!MSG_SPLICE_PAGES)
    skb_copy_to_page_nocache copy=iov_iter_count
     [...]
       copy_from_iter
            /* this doesn't help */
            if (unlikely(iter->count < len))
                    len = iter->count;
              iterate_bvec
                ... and we run off the bvecs
    
    Fix this by properly setting the iov_iter's byte count, plus sending the
    correct byte count to tcp_sendmsg_locked.
    
    Link: https://patch.msgid.link/r/[email protected]
    Cc: [email protected]
    Fixes: c2ff29e99a76 ("siw: Inline do_tcp_sendpages()")
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-lkp/[email protected]
    Reviewed-by: David Howells <[email protected]>
    Signed-off-by: Pedro Falcato <[email protected]>
    Acked-by: Bernard Metzler <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
RDMA: hfi1: fix possible divide-by-zero in find_hw_thread_mask() [+ + +]
Author: Yury Norov [NVIDIA] <[email protected]>
Date:   Wed Jun 4 15:39:38 2025 -0400

    RDMA: hfi1: fix possible divide-by-zero in find_hw_thread_mask()
    
    [ Upstream commit 59f7d2138591ef8f0e4e4ab5f1ab674e8181ad3a ]
    
    The function divides number of online CPUs by num_core_siblings, and
    later checks the divider by zero. This implies a possibility to get
    and divide-by-zero runtime error. Fix it by moving the check prior to
    division. This also helps to save one indentation level.
    
    Signed-off-by: Yury Norov [NVIDIA] <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
remoteproc: imx_rproc: skip clock enable when M-core is managed by the SCU [+ + +]
Author: Hiago De Franco <[email protected]>
Date:   Sun Jun 29 14:25:11 2025 -0300

    remoteproc: imx_rproc: skip clock enable when M-core is managed by the SCU
    
    [ Upstream commit 496deecb020d14ba89ba7084fbc3024f91687023 ]
    
    For the i.MX8X and i.MX8 family SoCs, when the Cortex-M core is powered
    up and started by the Cortex-A core using the bootloader (e.g., via the
    U-Boot bootaux command), both M-core and Linux run within the same SCFW
    (System Controller Firmware) partition. With that, Linux has permission
    to control the M-core.
    
    But once the M-core is started by the bootloader, the SCFW automatically
    enables its clock and sets the clock rate. If Linux later attempts to
    enable the same clock via clk_prepare_enable(), the SCFW returns a
    'LOCKED' error, as the clock is already configured by the SCFW. This
    causes the probe function in imx_rproc.c to fail, leading to the M-core
    power domain being shut down while the core is still running. This
    results in a fault from the SCU (System Controller Unit) and triggers a
    system reset.
    
    To address this issue, ignore handling the clk for i.MX8X and i.MX8
    M-core, as SCFW already takes care of enabling and configuring the
    clock.
    
    Suggested-by: Peng Fan <[email protected]>
    Reviewed-by: Ulf Hansson <[email protected]>
    Reviewed-by: Peng Fan <[email protected]>
    Signed-off-by: Hiago De Franco <[email protected]>
    Acked-by: Mathieu Poirier <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
reset: brcmstb: Enable reset drivers for ARCH_BCM2835 [+ + +]
Author: Peter Robinson <[email protected]>
Date:   Mon Jun 30 18:52:58 2025 +0100

    reset: brcmstb: Enable reset drivers for ARCH_BCM2835
    
    [ Upstream commit 1d99f92f71b6b4b2eee776562c991428490f71ef ]
    
    The BRCMSTB and BRCMSTB_RESCAL reset drivers are also
    used in the BCM2712, AKA the RPi5. The RPi platforms
    have typically used the ARCH_BCM2835, and the PCIe
    support for this SoC can use this config which depends
    on these drivers so enable building them when just that
    arch option is enabled to ensure the platform works as
    expected.
    
    Signed-off-by: Peter Robinson <[email protected]>
    Acked-by: Florian Fainelli <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Philipp Zabel <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Revert "gpio: mlxbf3: only get IRQ for device instance 0" [+ + +]
Author: David Thompson <[email protected]>
Date:   Mon Aug 11 13:50:44 2025 -0400

    Revert "gpio: mlxbf3: only get IRQ for device instance 0"
    
    commit 56bdf7270ff4f870e2d4bfacdc00161e766dba2d upstream.
    
    This reverts commit 10af0273a35ab4513ca1546644b8c853044da134.
    
    While this change was merged, it is not the preferred solution.
    During review of a similar change to the gpio-mlxbf2 driver, the
    use of "platform_get_irq_optional" was identified as the preferred
    solution, so let's use it for gpio-mlxbf3 driver as well.
    
    Cc: [email protected]
    Fixes: 10af0273a35a ("gpio: mlxbf3: only get IRQ for device instance 0")
    Signed-off-by: David Thompson <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Link: https://lore.kernel.org/r/8d2b630c71b3742f2c74242cf7d602706a6108e6.1754928650.git.davthompson@nvidia.com
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "leds: trigger: netdev: Configure LED blink interval for HW offload" [+ + +]
Author: Daniel Golle <[email protected]>
Date:   Sat Jul 12 16:39:21 2025 +0100

    Revert "leds: trigger: netdev: Configure LED blink interval for HW offload"
    
    commit 26f732791f2bcab18f59c61915bbe35225f30136 upstream.
    
    This reverts commit c629c972b310af41e9e072febb6dae9a299edde6.
    
    While .led_blink_set() would previously put an LED into an unconditional
    permanently blinking state, the offending commit now uses same operation
    to (also?) set the blink timing of the netdev trigger when offloading.
    
    This breaks many if not all of the existing PHY drivers which offer
    offloading LED operations, as those drivers would just put the LED into
    blinking state after .led_blink_set() has been called.
    
    Unfortunately the change even made it into stable kernels for unknown
    reasons, so it should be reverted there as well.
    
    Fixes: c629c972b310a ("leds: trigger: netdev: Configure LED blink interval for HW offload")
    Link: https://lore.kernel.org/linux-leds/[email protected]/T/#m9d6fe81bbcb273e59f12bbedbd633edd32118387
    Suggested-by: Andrew Lunn <[email protected]>
    Cc: [email protected]
    Signed-off-by: Daniel Golle <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Link: https://lore.kernel.org/r/6dcc77ee1c9676891d6250d8994850f521426a0f.1752334655.git.daniel@makrotopia.org
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "vgacon: Add check for vc_origin address range in vgacon_scroll()" [+ + +]
Author: Helge Deller <[email protected]>
Date:   Sat Aug 2 21:34:37 2025 +0200

    Revert "vgacon: Add check for vc_origin address range in vgacon_scroll()"
    
    commit e4fc307d8e24f122402907ebf585248cad52841d upstream.
    
    This reverts commit 864f9963ec6b4b76d104d595ba28110b87158003.
    
    The patch is wrong as it checks vc_origin against vc_screenbuf,
    while in text mode it should compare against vga_vram_base.
    
    As such it broke VGA text scrolling, which can be reproduced like this:
    (1) boot a kernel that is configured to use text mode VGA-console
    (2) type commands:  ls -l /usr/bin | less -S
    (3) scroll up/down with cursor-down/up keys
    
    Reported-by: Jari Ruusu <[email protected]>
    Cc: [email protected]
    Cc: Yi Yang <[email protected]>
    Cc: GONG Ruiqi <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
rtc: ds1307: handle oscillator stop flag (OSF) for ds1341 [+ + +]
Author: Meagan Lloyd <[email protected]>
Date:   Wed Jun 11 11:14:16 2025 -0700

    rtc: ds1307: handle oscillator stop flag (OSF) for ds1341
    
    [ Upstream commit 523923cfd5d622b8f4ba893fdaf29fa6adeb8c3e ]
    
    In using CONFIG_RTC_HCTOSYS, rtc_hctosys() will sync the RTC time to the
    kernel time as long as rtc_read_time() succeeds. In some power loss
    situations, our supercapacitor-backed DS1342 RTC comes up with either an
    unpredictable future time or the default 01/01/00 from the datasheet.
    The oscillator stop flag (OSF) is set in these scenarios due to the
    power loss and can be used to determine the validity of the RTC data.
    
    This change expands the oscillator stop flag (OSF) handling that has
    already been implemented for some chips to the ds1341 chip (DS1341 and
    DS1342 share a datasheet). This handling manages the validity of the RTC
    data in .read_time and .set_time based on the OSF.
    
    Signed-off-by: Meagan Lloyd <[email protected]>
    Reviewed-by: Tyler Hicks <[email protected]>
    Acked-by: Rodolfo Giometti <[email protected]>
    Link: https://lore.kernel.org/r/1749665656-30108-3-git-send-email-meaganlloyd@linux.microsoft.com
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

rtc: ds1307: remove clear of oscillator stop flag (OSF) in probe [+ + +]
Author: Meagan Lloyd <[email protected]>
Date:   Wed Jun 11 11:14:15 2025 -0700

    rtc: ds1307: remove clear of oscillator stop flag (OSF) in probe
    
    [ Upstream commit 48458654659c9c2e149c211d86637f1592470da5 ]
    
    In using CONFIG_RTC_HCTOSYS, rtc_hctosys() will sync the RTC time to the
    kernel time as long as rtc_read_time() succeeds. In some power loss
    situations, our supercapacitor-backed DS1342 RTC comes up with either an
    unpredictable future time or the default 01/01/00 from the datasheet.
    The oscillator stop flag (OSF) is set in these scenarios due to the
    power loss and can be used to determine the validity of the RTC data.
    
    Some chip types in the ds1307 driver already have OSF handling to
    determine whether .read_time provides valid RTC data or returns -EINVAL.
    
    This change removes the clear of the OSF in .probe as the OSF needs to
    be preserved to expand the OSF handling to the ds1341 chip type (note
    that DS1341 and DS1342 share a datasheet).
    
    Signed-off-by: Meagan Lloyd <[email protected]>
    Reviewed-by: Tyler Hicks <[email protected]>
    Acked-by: Rodolfo Giometti <[email protected]>
    Link: https://lore.kernel.org/r/1749665656-30108-2-git-send-email-meaganlloyd@linux.microsoft.com
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
s390/hypfs: Avoid unnecessary ioctl registration in debugfs [+ + +]
Author: Peter Oberparleiter <[email protected]>
Date:   Thu Aug 21 14:35:40 2025 +0200

    s390/hypfs: Avoid unnecessary ioctl registration in debugfs
    
    [ Upstream commit fec7bdfe7f8694a0c39e6c3ec026ff61ca1058b9 ]
    
    Currently, hypfs registers ioctl callbacks for all debugfs files,
    despite only one file requiring them. This leads to unintended exposure
    of unused interfaces to user space and can trigger side effects such as
    restricted access when kernel lockdown is enabled.
    
    Restrict ioctl registration to only those files that implement ioctl
    functionality to avoid interface clutter and unnecessary access
    restrictions.
    
    Tested-by: Mete Durlu <[email protected]>
    Reviewed-by: Vasily Gorbik <[email protected]>
    Fixes: 5496197f9b08 ("debugfs: Restrict debugfs when the kernel is locked down")
    Signed-off-by: Peter Oberparleiter <[email protected]>
    Signed-off-by: Alexander Gordeev <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

s390/hypfs: Enable limited access during lockdown [+ + +]
Author: Peter Oberparleiter <[email protected]>
Date:   Thu Aug 21 15:12:37 2025 +0200

    s390/hypfs: Enable limited access during lockdown
    
    [ Upstream commit 3868f910440c47cd5d158776be4ba4e2186beda7 ]
    
    When kernel lockdown is active, debugfs_locked_down() blocks access to
    hypfs files that register ioctl callbacks, even if the ioctl interface
    is not required for a function. This unnecessarily breaks userspace
    tools that only rely on read operations.
    
    Resolve this by registering a minimal set of file operations during
    lockdown, avoiding ioctl registration and preserving access for affected
    tooling.
    
    Note that this change restores hypfs functionality when lockdown is
    active from early boot (e.g. via lockdown=integrity kernel parameter),
    but does not apply to scenarios where lockdown is enabled dynamically
    while Linux is running.
    
    Tested-by: Mete Durlu <[email protected]>
    Reviewed-by: Vasily Gorbik <[email protected]>
    Fixes: 5496197f9b08 ("debugfs: Restrict debugfs when the kernel is locked down")
    Signed-off-by: Peter Oberparleiter <[email protected]>
    Signed-off-by: Alexander Gordeev <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
s390/mm: Remove possible false-positive warning in pte_free_defer() [+ + +]
Author: Gerald Schaefer <[email protected]>
Date:   Wed Jul 9 20:34:30 2025 +0200

    s390/mm: Remove possible false-positive warning in pte_free_defer()
    
    commit 5647f61ad9171e8f025558ed6dc5702c56a33ba3 upstream.
    
    Commit 8211dad627981 ("s390: add pte_free_defer() for pgtables sharing
    page") added a warning to pte_free_defer(), on our request. It was meant
    to warn if this would ever be reached for KVM guest mappings, because
    the page table would be freed w/o a gmap_unlink(). THP mappings are not
    allowed for KVM guests on s390, so this should never happen.
    
    However, it is possible that the warning is triggered in a valid case as
    false-positive.
    
    s390_enable_sie() takes the mmap_lock, marks all VMAs as VM_NOHUGEPAGE and
    splits possibly existing THP guest mappings. mm->context.has_pgste is set
    to 1 before that, to prevent races with the mm_has_pgste() check in
    MADV_HUGEPAGE.
    
    khugepaged drops the mmap_lock for file mappings and might run in parallel,
    before a vma is marked VM_NOHUGEPAGE, but after mm->context.has_pgste was
    set to 1. If it finds file mappings to collapse, it will eventually call
    pte_free_defer(). This will trigger the warning, but it is a valid case
    because gmap is not yet set up, and the THP mappings will be split again.
    
    Therefore, remove the warning and the comment.
    
    Fixes: 8211dad627981 ("s390: add pte_free_defer() for pgtables sharing page")
    Cc: <[email protected]> # 6.6+
    Reviewed-by: Alexander Gordeev <[email protected]>
    Reviewed-by: Claudio Imbrenda <[email protected]>
    Signed-off-by: Gerald Schaefer <[email protected]>
    Signed-off-by: Alexander Gordeev <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
s390/sclp: Fix SCCB present check [+ + +]
Author: Peter Oberparleiter <[email protected]>
Date:   Mon Aug 18 12:21:52 2025 +0200

    s390/sclp: Fix SCCB present check
    
    commit 430fa71027b6ac9bb0ce5532b8d0676777d4219a upstream.
    
    Tracing code called by the SCLP interrupt handler contains early exits
    if the SCCB address associated with an interrupt is NULL. This check is
    performed after physical to virtual address translation.
    
    If the kernel identity mapping does not start at address zero, the
    resulting virtual address is never zero, so that the NULL checks won't
    work. Subsequently this may result in incorrect accesses to the first
    page of the identity mapping.
    
    Fix this by introducing a function that handles the NULL case before
    address translation.
    
    Fixes: ada1da31ce34 ("s390/sclp: sort out physical vs virtual pointers usage")
    Cc: [email protected]
    Reviewed-by: Alexander Gordeev <[email protected]>
    Signed-off-by: Peter Oberparleiter <[email protected]>
    Signed-off-by: Alexander Gordeev <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
s390/stp: Remove udelay from stp_sync_clock() [+ + +]
Author: Sven Schnelle <[email protected]>
Date:   Thu Jul 3 13:50:27 2025 +0200

    s390/stp: Remove udelay from stp_sync_clock()
    
    [ Upstream commit b367017cdac21781a74eff4e208d3d38e1f38d3f ]
    
    When an stp sync check is handled on a system with multiple
    cpus each cpu gets a machine check but only the first one
    actually handles the sync operation. All other CPUs spin
    waiting for the first one to finish with a short udelay().
    But udelay can't be used here as the first CPU modifies tod_clock_base
    before performing the sync op. During this timeframe
    get_tod_clock_monotonic() might return a non-monotonic time.
    
    The time spent waiting should be very short and udelay is a busy loop
    anyways, therefore simply remove the udelay.
    
    Reviewed-by: Heiko Carstens <[email protected]>
    Signed-off-by: Sven Schnelle <[email protected]>
    Signed-off-by: Alexander Gordeev <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
s390/time: Use monotonic clock in get_cycles() [+ + +]
Author: Sven Schnelle <[email protected]>
Date:   Thu Jul 10 09:42:29 2025 +0200

    s390/time: Use monotonic clock in get_cycles()
    
    [ Upstream commit 09e7e29d2b49ba84bcefb3dc1657726d2de5bb24 ]
    
    Otherwise the code might not work correctly when the clock
    is changed.
    
    Signed-off-by: Sven Schnelle <[email protected]>
    Reviewed-by: Heiko Carstens <[email protected]>
    Signed-off-by: Alexander Gordeev <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
sched/fair: Bump sd->max_newidle_lb_cost when newidle balance fails [+ + +]
Author: Chris Mason <[email protected]>
Date:   Thu Jun 26 07:39:10 2025 -0700

    sched/fair: Bump sd->max_newidle_lb_cost when newidle balance fails
    
    [ Upstream commit 155213a2aed42c85361bf4f5c817f5cb68951c3b ]
    
    schbench (https://github.com/masoncl/schbench.git) is showing a
    regression from previous production kernels that bisected down to:
    
    sched/fair: Remove sysctl_sched_migration_cost condition (c5b0a7eefc)
    
    The schbench command line was:
    
    schbench -L -m 4 -M auto -t 256 -n 0 -r 0 -s 0
    
    This creates 4 message threads pinned to CPUs 0-3, and 256x4 worker
    threads spread across the rest of the CPUs.  Neither the worker threads
    or the message threads do any work, they just wake each other up and go
    back to sleep as soon as possible.
    
    The end result is the first 4 CPUs are pegged waking up those 1024
    workers, and the rest of the CPUs are constantly banging in and out of
    idle.  If I take a v6.9 Linus kernel and revert that one commit,
    performance goes from 3.4M RPS to 5.4M RPS.
    
    schedstat shows there are ~100x  more new idle balance operations, and
    profiling shows the worker threads are spending ~20% of their CPU time
    on new idle balance.  schedstats also shows that almost all of these new
    idle balance attemps are failing to find busy groups.
    
    The fix used here is to crank up the cost of the newidle balance whenever it
    fails.  Since we don't want sd->max_newidle_lb_cost to grow out of
    control, this also changes update_newidle_cost() to use
    sysctl_sched_migration_cost as the upper limit on max_newidle_lb_cost.
    
    Signed-off-by: Chris Mason <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Acked-by: Vincent Guittot <[email protected]>
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

sched/fair: Fix frequency selection for non-invariant case [+ + +]
Author: Vincent Guittot <[email protected]>
Date:   Sun Jan 14 19:36:00 2024 +0100

    sched/fair: Fix frequency selection for non-invariant case
    
    commit e37617c8e53a1f7fcba6d5e1041f4fd8a2425c27 upstream.
    
    Linus reported a ~50% performance regression on single-threaded
    workloads on his AMD Ryzen system, and bisected it to:
    
      9c0b4bb7f630 ("sched/cpufreq: Rework schedutil governor performance estimation")
    
    When frequency invariance is not enabled, get_capacity_ref_freq(policy)
    is supposed to return the current frequency and the performance margin
    applied by map_util_perf(), enabling the utilization to go above the
    maximum compute capacity and to select a higher frequency than the current one.
    
    After the changes in 9c0b4bb7f630, the performance margin was applied
    earlier in the path to take into account utilization clampings and
    we couldn't get a utilization higher than the maximum compute capacity,
    and the CPU remained 'stuck' at lower frequencies.
    
    To fix this, we must use a frequency above the current frequency to
    get a chance to select a higher OPP when the current one becomes fully used.
    Apply the same margin and return a frequency 25% higher than the current
    one in order to switch to the next OPP before we fully use the CPU
    at the current one.
    
    [ mingo: Clarified the changelog. ]
    
    Fixes: 9c0b4bb7f630 ("sched/cpufreq: Rework schedutil governor performance estimation")
    Reported-by: Linus Torvalds <[email protected]>
    Bisected-by: Linus Torvalds <[email protected]>
    Reported-by: Wyes Karny <[email protected]>
    Signed-off-by: Vincent Guittot <[email protected]>
    Signed-off-by: Ingo Molnar <[email protected]>
    Tested-by: Wyes Karny <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Wentao Guan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sched/topology: Add a new arch_scale_freq_ref() method [+ + +]
Author: Vincent Guittot <[email protected]>
Date:   Mon Dec 11 11:48:49 2023 +0100

    sched/topology: Add a new arch_scale_freq_ref() method
    
    commit 9942cb22ea458c34fa17b73d143ea32d4df1caca upstream.
    
    Create a new method to get a unique and fixed max frequency. Currently
    cpuinfo.max_freq or the highest (or last) state of performance domain are
    used as the max frequency when computing the frequency for a level of
    utilization, but:
    
      - cpuinfo_max_freq can change at runtime. boost is one example of
        such change.
    
      - cpuinfo.max_freq and last item of the PD can be different leading to
        different results between cpufreq and energy model.
    
    We need to save the reference frequency that has been used when computing
    the CPUs capacity and use this fixed and coherent value to convert between
    frequency and CPU's capacity.
    
    In fact, we already save the frequency that has been used when computing
    the capacity of each CPU. We extend the precision to save kHz instead of
    MHz currently and we modify the type to be aligned with other variables
    used when converting frequency to capacity and the other way.
    
    [ mingo: Minor edits. ]
    
    Signed-off-by: Vincent Guittot <[email protected]>
    Signed-off-by: Ingo Molnar <[email protected]>
    Tested-by: Lukasz Luba <[email protected]>
    Reviewed-by: Lukasz Luba <[email protected]>
    Acked-by: Sudeep Holla <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: e37617c8e53a ("sched/fair: Fix frequency selection for non-invariant case")
    Signed-off-by: Wentao Guan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
scsi: aacraid: Stop using PCI_IRQ_AFFINITY [+ + +]
Author: John Garry <[email protected]>
Date:   Tue Jul 15 11:15:35 2025 +0000

    scsi: aacraid: Stop using PCI_IRQ_AFFINITY
    
    [ Upstream commit dafeaf2c03e71255438ffe5a341d94d180e6c88e ]
    
    When PCI_IRQ_AFFINITY is set for calling pci_alloc_irq_vectors(), it
    means interrupts are spread around the available CPUs. It also means that
    the interrupts become managed, which means that an interrupt is shutdown
    when all the CPUs in the interrupt affinity mask go offline.
    
    Using managed interrupts in this way means that we should ensure that
    completions should not occur on HW queues where the associated interrupt
    is shutdown. This is typically achieved by ensuring only CPUs which are
    online can generate IO completion traffic to the HW queue which they are
    mapped to (so that they can also serve completion interrupts for that HW
    queue).
    
    The problem in the driver is that a CPU can generate completions to a HW
    queue whose interrupt may be shutdown, as the CPUs in the HW queue
    interrupt affinity mask may be offline. This can cause IOs to never
    complete and hang the system. The driver maintains its own CPU <-> HW
    queue mapping for submissions, see aac_fib_vector_assign(), but this does
    not reflect the CPU <-> HW queue interrupt affinity mapping.
    
    Commit 9dc704dcc09e ("scsi: aacraid: Reply queue mapping to CPUs based on
    IRQ affinity") tried to remedy this issue may mapping CPUs properly to HW
    queue interrupts. However this was later reverted in commit c5becf57dd56
    ("Revert "scsi: aacraid: Reply queue mapping to CPUs based on IRQ
    affinity") - it seems that there were other reports of hangs. I guess
    that this was due to some implementation issue in the original commit or
    maybe a HW issue.
    
    Fix the very original hang by just not using managed interrupts by not
    setting PCI_IRQ_AFFINITY.  In this way, all CPUs will be in each HW queue
    affinity mask, so should not create completion problems if any CPUs go
    offline.
    
    Signed-off-by: John Garry <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Closes: https://lore.kernel.org/linux-scsi/[email protected]/
    Reviewed-by: John Meneghini <[email protected]>
    Tested-by: John Meneghini <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: bfa: Double-free fix [+ + +]
Author: jackysliu <[email protected]>
Date:   Tue Jun 24 19:58:24 2025 +0800

    scsi: bfa: Double-free fix
    
    [ Upstream commit add4c4850363d7c1b72e8fce9ccb21fdd2cf5dc9 ]
    
    When the bfad_im_probe() function fails during initialization, the memory
    pointed to by bfad->im is freed without setting bfad->im to NULL.
    
    Subsequently, during driver uninstallation, when the state machine enters
    the bfad_sm_stopping state and calls the bfad_im_probe_undo() function,
    it attempts to free the memory pointed to by bfad->im again, thereby
    triggering a double-free vulnerability.
    
    Set bfad->im to NULL if probing fails.
    
    Signed-off-by: jackysliu <[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: Fix sas_user_scan() to handle wildcard and multi-channel scans [+ + +]
Author: Ranjan Kumar <[email protected]>
Date:   Tue Jun 24 11:46:49 2025 +0530

    scsi: Fix sas_user_scan() to handle wildcard and multi-channel scans
    
    [ Upstream commit 37c4e72b0651e7697eb338cd1fb09feef472cc1a ]
    
    sas_user_scan() did not fully process wildcard channel scans
    (SCAN_WILD_CARD) when a transport-specific user_scan() callback was
    present. Only channel 0 would be scanned via user_scan(), while the
    remaining channels were skipped, potentially missing devices.
    
    user_scan() invokes updated sas_user_scan() for channel 0, and if
    successful, iteratively scans remaining channels (1 to
    shost->max_channel) via scsi_scan_host_selected().  This ensures complete
    wildcard scanning without affecting transport-specific scanning behavior.
    
    Signed-off-by: Ranjan Kumar <[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: libiscsi: Initialize iscsi_conn->dd_data only if memory is allocated [+ + +]
Author: Showrya M N <[email protected]>
Date:   Fri Jun 27 16:53:29 2025 +0530

    scsi: libiscsi: Initialize iscsi_conn->dd_data only if memory is allocated
    
    [ Upstream commit 3ea3a256ed81f95ab0f3281a0e234b01a9cae605 ]
    
    In case of an ib_fast_reg_mr allocation failure during iSER setup, the
    machine hits a panic because iscsi_conn->dd_data is initialized
    unconditionally, even when no memory is allocated (dd_size == 0).  This
    leads invalid pointer dereference during connection teardown.
    
    Fix by setting iscsi_conn->dd_data only if memory is actually allocated.
    
    Panic trace:
    ------------
     iser: iser_create_fastreg_desc: Failed to allocate ib_fast_reg_mr err=-12
     iser: iser_alloc_rx_descriptors: failed allocating rx descriptors / data buffers
     BUG: unable to handle page fault for address: fffffffffffffff8
     RIP: 0010:swake_up_locked.part.5+0xa/0x40
     Call Trace:
      complete+0x31/0x40
      iscsi_iser_conn_stop+0x88/0xb0 [ib_iser]
      iscsi_stop_conn+0x66/0xc0 [scsi_transport_iscsi]
      iscsi_if_stop_conn+0x14a/0x150 [scsi_transport_iscsi]
      iscsi_if_rx+0x1135/0x1834 [scsi_transport_iscsi]
      ? netlink_lookup+0x12f/0x1b0
      ? netlink_deliver_tap+0x2c/0x200
      netlink_unicast+0x1ab/0x280
      netlink_sendmsg+0x257/0x4f0
      ? _copy_from_user+0x29/0x60
      sock_sendmsg+0x5f/0x70
    
    Signed-off-by: Showrya M N <[email protected]>
    Signed-off-by: Potnuri Bharat Teja <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Chris Leech <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: lpfc: Check for hdwq null ptr when cleaning up lpfc_vport structure [+ + +]
Author: Justin Tee <[email protected]>
Date:   Wed Jun 18 12:21:28 2025 -0700

    scsi: lpfc: Check for hdwq null ptr when cleaning up lpfc_vport structure
    
    [ Upstream commit 6698796282e828733cde3329c887b4ae9e5545e9 ]
    
    If a call to lpfc_sli4_read_rev() from lpfc_sli4_hba_setup() fails, the
    resultant cleanup routine lpfc_sli4_vport_delete_fcp_xri_aborted() may
    occur before sli4_hba.hdwqs are allocated.  This may result in a null
    pointer dereference when attempting to take the abts_io_buf_list_lock for
    the first hardware queue.  Fix by adding a null ptr check on
    phba->sli4_hba.hdwq and early return because this situation means there
    must have been an error during port initialization.
    
    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: Remove redundant assignment to avoid memory leak [+ + +]
Author: Jiasheng Jiang <[email protected]>
Date:   Fri Aug 1 18:52:02 2025 +0000

    scsi: lpfc: Remove redundant assignment to avoid memory leak
    
    [ Upstream commit eea6cafb5890db488fce1c69d05464214616d800 ]
    
    Remove the redundant assignment if kzalloc() succeeds to avoid memory
    leak.
    
    Fixes: bd2cdd5e400f ("scsi: lpfc: NVME Initiator: Add debugfs support")
    Signed-off-by: Jiasheng Jiang <[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: mpi3mr: Correctly handle ATA device errors [+ + +]
Author: Damien Le Moal <[email protected]>
Date:   Fri Jun 6 14:27:46 2025 +0900

    scsi: mpi3mr: Correctly handle ATA device errors
    
    [ Upstream commit 04caad5a7ba86e830d04750417a15bad8ac2613c ]
    
    With the ATA error model, an NCQ command failure always triggers an abort
    (termination) of all NCQ commands queued on the device. In such case, the
    SAT or the host must handle the failed command according to the command
    sense data and immediately retry all other NCQ commands that were aborted
    due to the failed NCQ command.
    
    For SAS HBAs controlled by the mpi3mr driver, NCQ command aborts are not
    handled by the HBA SAT and sent back to the host, with an ioc log
    information equal to 0x31080000 (IOC_LOGINFO_PREFIX_PL with the PL code
    PL_LOGINFO_CODE_SATA_NCQ_FAIL_ALL_CMDS_AFTR_ERR). The function
    mpi3mr_process_op_reply_desc() always forces a retry of commands
    terminated with the status MPI3_IOCSTATUS_SCSI_IOC_TERMINATED using the
    SCSI result DID_SOFT_ERROR, regardless of the ioc_loginfo for the
    command. This correctly forces the retry of collateral NCQ abort
    commands, but with the retry counter for the command being incremented.
    If a command to an ATA device is subject to too many retries due to other
    NCQ commands failing (e.g. read commands trying to access unreadable
    sectors), the collateral NCQ abort commands may be terminated with an
    error as they run out of retries. This violates the SAT specification and
    causes hard-to-debug command errors.
    
    Solve this issue by modifying the handling of the
    MPI3_IOCSTATUS_SCSI_IOC_TERMINATED status to check if a command is for an
    ATA device and if the command ioc_loginfo indicates an NCQ collateral
    abort. If that is the case, force the command retry using the SCSI result
    DID_IMM_RETRY to avoid incrementing the command retry count.
    
    Signed-off-by: Damien Le Moal <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Yafang Shao <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: mpi3mr: Drop unnecessary volatile from __iomem pointers [+ + +]
Author: Ranjan Kumar <[email protected]>
Date:   Fri Aug 22 10:59:41 2025 -0400

    scsi: mpi3mr: Drop unnecessary volatile from __iomem pointers
    
    [ Upstream commit 6853885b21cb1d7157cc14c9d30cc17141565bae ]
    
    The volatile qualifier is redundant for __iomem pointers.
    
    Cleaned up usage in mpi3mr_writeq() and sysif_regs pointer as per
    Upstream compliance.
    
    Signed-off-by: Ranjan Kumar <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Stable-dep-of: c91e140c82eb ("scsi: mpi3mr: Serialize admin queue BAR writes on 32-bit systems")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: mpi3mr: Fix race between config read submit and interrupt completion [+ + +]
Author: Ranjan Kumar <[email protected]>
Date:   Sat Jun 28 01:15:36 2025 +0530

    scsi: mpi3mr: Fix race between config read submit and interrupt completion
    
    commit e6327c4acf925bb6d6d387d76fc3bd94471e10d8 upstream.
    
    The "is_waiting" flag was updated after calling complete(), which could
    lead to a race where the waiting thread wakes up before the flag is
    cleared. This may cause a missed wakeup or stale state check.
    
    Reorder the operations to update "is_waiting" before signaling completion
    to ensure consistent state.
    
    Fixes: 824a156633df ("scsi: mpi3mr: Base driver code")
    Cc: [email protected]
    Co-developed-by: Chandrakanth Patil <[email protected]>
    Signed-off-by: Chandrakanth Patil <[email protected]>
    Signed-off-by: Ranjan Kumar <[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: mpi3mr: Serialize admin queue BAR writes on 32-bit systems [+ + +]
Author: Ranjan Kumar <[email protected]>
Date:   Fri Aug 22 10:59:42 2025 -0400

    scsi: mpi3mr: Serialize admin queue BAR writes on 32-bit systems
    
    [ Upstream commit c91e140c82eb58724c435f623702e51cc7896646 ]
    
    On 32-bit systems, 64-bit BAR writes to admin queue registers are
    performed as two 32-bit writes. Without locking, this can cause partial
    writes when accessed concurrently.
    
    Updated per-queue spinlocks is used to serialize these writes and prevent
    race conditions.
    
    Fixes: 824a156633df ("scsi: mpi3mr: Base driver code")
    Cc: [email protected]
    Signed-off-by: Ranjan Kumar <[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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: mpt3sas: Correctly handle ATA device errors [+ + +]
Author: Damien Le Moal <[email protected]>
Date:   Fri Jun 6 14:27:47 2025 +0900

    scsi: mpt3sas: Correctly handle ATA device errors
    
    [ Upstream commit 15592a11d5a5c8411ac8494ec49736b658f6fbff ]
    
    With the ATA error model, an NCQ command failure always triggers an abort
    (termination) of all NCQ commands queued on the device. In such case, the
    SAT or the host must handle the failed command according to the command
    sense data and immediately retry all other NCQ commands that were aborted
    due to the failed NCQ command.
    
    For SAS HBAs controlled by the mpt3sas driver, NCQ command aborts are not
    handled by the HBA SAT and sent back to the host, with an ioc log
    information equal to 0x31080000 (IOC_LOGINFO_PREFIX_PL with the PL code
    PL_LOGINFO_CODE_SATA_NCQ_FAIL_ALL_CMDS_AFTR_ERR). The function
    _scsih_io_done() always forces a retry of commands terminated with the
    status MPI2_IOCSTATUS_SCSI_IOC_TERMINATED using the SCSI result
    DID_SOFT_ERROR, regardless of the log_info for the command.  This
    correctly forces the retry of collateral NCQ abort commands, but with the
    retry counter for the command being incremented. If a command to an ATA
    device is subject to too many retries due to other NCQ commands failing
    (e.g. read commands trying to access unreadable sectors), the collateral
    NCQ abort commands may be terminated with an error as they run out of
    retries. This violates the SAT specification and causes hard-to-debug
    command errors.
    
    Solve this issue by modifying the handling of the
    MPI2_IOCSTATUS_SCSI_IOC_TERMINATED status to check if a command is for an
    ATA device and if the command loginfo indicates an NCQ collateral
    abort. If that is the case, force the command retry using the SCSI result
    DID_IMM_RETRY to avoid incrementing the command retry count.
    
    Signed-off-by: Damien Le Moal <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Yafang Shao <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: qla4xxx: Prevent a potential error pointer dereference [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Wed Aug 13 08:49:08 2025 +0300

    scsi: qla4xxx: Prevent a potential error pointer dereference
    
    [ Upstream commit 9dcf111dd3e7ed5fce82bb108e3a3fc001c07225 ]
    
    The qla4xxx_get_ep_fwdb() function is supposed to return NULL on error,
    but qla4xxx_ep_connect() returns error pointers.  Propagating the error
    pointers will lead to an Oops in the caller, so change the error pointers
    to NULL.
    
    Fixes: 13483730a13b ("[SCSI] qla4xxx: fix flash/ddb support")
    Signed-off-by: Dan Carpenter <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Chris Leech <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: target: core: Generate correct identifiers for PR OUT transport IDs [+ + +]
Author: Maurizio Lombardi <[email protected]>
Date:   Mon Jul 14 15:37:38 2025 +0200

    scsi: target: core: Generate correct identifiers for PR OUT transport IDs
    
    [ Upstream commit 6e0f6aa44b68335df404a2df955055f416b5f2aa ]
    
    Fix target_parse_pr_out_transport_id() to return a string representing
    the transport ID in a human-readable format (e.g., naa.xxxxxxxx...)  for
    various SCSI protocol types (SAS, FCP, SRP, SBP).
    
    Previously, the function returned a pointer to the raw binary buffer,
    which was incorrectly compared against human-readable strings, causing
    comparisons to fail.  Now, the function writes a properly formatted
    string into a buffer provided by the caller.  The output format depends
    on the transport protocol:
    
    * SAS: 64-bit identifier, "naa." prefix.
    * FCP: 64-bit identifier, colon separated values.
    * SBP: 64-bit identifier, no prefix.
    * SRP: 128-bit identifier, "0x" prefix.
    * iSCSI: IQN string.
    
    Signed-off-by: Maurizio Lombardi <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Dmitry Bogdanov <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: ufs: exynos: Fix programming of HCI_UTRL_NEXUS_TYPE [+ + +]
Author: André Draszik <[email protected]>
Date:   Fri Aug 22 13:00:28 2025 -0400

    scsi: ufs: exynos: Fix programming of HCI_UTRL_NEXUS_TYPE
    
    [ Upstream commit 01aad16c2257ab8ff33b152b972c9f2e1af47912 ]
    
    On Google gs101, the number of UTP transfer request slots (nutrs) is 32,
    and in this case the driver ends up programming the UTRL_NEXUS_TYPE
    incorrectly as 0.
    
    This is because the left hand side of the shift is 1, which is of type
    int, i.e. 31 bits wide. Shifting by more than that width results in
    undefined behaviour.
    
    Fix this by switching to the BIT() macro, which applies correct type
    casting as required. This ensures the correct value is written to
    UTRL_NEXUS_TYPE (0xffffffff on gs101), and it also fixes a UBSAN shift
    warning:
    
        UBSAN: shift-out-of-bounds in drivers/ufs/host/ufs-exynos.c:1113:21
        shift exponent 32 is too large for 32-bit type 'int'
    
    For consistency, apply the same change to the nutmrs / UTMRL_NEXUS_TYPE
    write.
    
    Fixes: 55f4b1f73631 ("scsi: ufs: ufs-exynos: Add UFS host support for Exynos SoCs")
    Cc: [email protected]
    Signed-off-by: André Draszik <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Bart Van Assche <[email protected]>
    Reviewed-by: Peter Griffin <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    [ Adapted context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: ufs: ufs-pci: Fix default runtime and system PM levels [+ + +]
Author: Adrian Hunter <[email protected]>
Date:   Wed Jul 23 19:58:50 2025 +0300

    scsi: ufs: ufs-pci: Fix default runtime and system PM levels
    
    commit 6de7435e6b81fe52c0ab4c7e181f6b5decd18eb1 upstream.
    
    Intel MTL-like host controllers support auto-hibernate.  Using
    auto-hibernate with manual (driver initiated) hibernate produces more
    complex operation.  For example, the host controller will have to exit
    auto-hibernate simply to allow the driver to enter hibernate state
    manually.  That is not recommended.
    
    The default rpm_lvl and spm_lvl is 3, which includes manual hibernate.
    
    Change the default values to 2, which does not.
    
    Note, to be simpler to backport to stable kernels, utilize the UFS PCI
    driver's ->late_init() call back.  Recent commits have made it possible
    to set up a controller-specific default in the regular ->init() call
    back, but not all stable kernels have those changes.
    
    Fixes: 4049f7acef3e ("scsi: ufs: ufs-pci: Add support for Intel MTL")
    Cc: [email protected]
    Signed-off-by: Adrian Hunter <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Bart Van Assche <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: ufs: ufs-pci: Fix hibernate state transition for Intel MTL-like host controllers [+ + +]
Author: Archana Patni <[email protected]>
Date:   Wed Jul 23 19:58:49 2025 +0300

    scsi: ufs: ufs-pci: Fix hibernate state transition for Intel MTL-like host controllers
    
    commit 4428ddea832cfdb63e476eb2e5c8feb5d36057fe upstream.
    
    UFSHCD core disables the UIC completion interrupt when issuing UIC
    hibernation commands, and re-enables it afterwards if it was enabled to
    start with, refer ufshcd_uic_pwr_ctrl(). For Intel MTL-like host
    controllers, accessing the register to re-enable the interrupt disrupts
    the state transition.
    
    Use hibern8_notify variant operation to disable the interrupt during the
    entire hibernation, thereby preventing the disruption.
    
    Fixes: 4049f7acef3e ("scsi: ufs: ufs-pci: Add support for Intel MTL")
    Cc: [email protected]
    Signed-off-by: Archana Patni <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Bart Van Assche <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sctp: linearize cloned gso packets in sctp_rcv [+ + +]
Author: Xin Long <[email protected]>
Date:   Thu Aug 7 15:40:11 2025 -0400

    sctp: linearize cloned gso packets in sctp_rcv
    
    [ Upstream commit fd60d8a086191fe33c2d719732d2482052fa6805 ]
    
    A cloned head skb still shares these frag skbs in fraglist with the
    original head skb. It's not safe to access these frag skbs.
    
    syzbot reported two use-of-uninitialized-memory bugs caused by this:
    
      BUG: KMSAN: uninit-value in sctp_inq_pop+0x15b7/0x1920 net/sctp/inqueue.c:211
       sctp_inq_pop+0x15b7/0x1920 net/sctp/inqueue.c:211
       sctp_assoc_bh_rcv+0x1a7/0xc50 net/sctp/associola.c:998
       sctp_inq_push+0x2ef/0x380 net/sctp/inqueue.c:88
       sctp_backlog_rcv+0x397/0xdb0 net/sctp/input.c:331
       sk_backlog_rcv+0x13b/0x420 include/net/sock.h:1122
       __release_sock+0x1da/0x330 net/core/sock.c:3106
       release_sock+0x6b/0x250 net/core/sock.c:3660
       sctp_wait_for_connect+0x487/0x820 net/sctp/socket.c:9360
       sctp_sendmsg_to_asoc+0x1ec1/0x1f00 net/sctp/socket.c:1885
       sctp_sendmsg+0x32b9/0x4a80 net/sctp/socket.c:2031
       inet_sendmsg+0x25a/0x280 net/ipv4/af_inet.c:851
       sock_sendmsg_nosec net/socket.c:718 [inline]
    
    and
    
      BUG: KMSAN: uninit-value in sctp_assoc_bh_rcv+0x34e/0xbc0 net/sctp/associola.c:987
       sctp_assoc_bh_rcv+0x34e/0xbc0 net/sctp/associola.c:987
       sctp_inq_push+0x2a3/0x350 net/sctp/inqueue.c:88
       sctp_backlog_rcv+0x3c7/0xda0 net/sctp/input.c:331
       sk_backlog_rcv+0x142/0x420 include/net/sock.h:1148
       __release_sock+0x1d3/0x330 net/core/sock.c:3213
       release_sock+0x6b/0x270 net/core/sock.c:3767
       sctp_wait_for_connect+0x458/0x820 net/sctp/socket.c:9367
       sctp_sendmsg_to_asoc+0x223a/0x2260 net/sctp/socket.c:1886
       sctp_sendmsg+0x3910/0x49f0 net/sctp/socket.c:2032
       inet_sendmsg+0x269/0x2a0 net/ipv4/af_inet.c:851
       sock_sendmsg_nosec net/socket.c:712 [inline]
    
    This patch fixes it by linearizing cloned gso packets in sctp_rcv().
    
    Fixes: 90017accff61 ("sctp: Add GSO support")
    Reported-by: [email protected]
    Reported-by: [email protected]
    Signed-off-by: Xin Long <[email protected]>
    Reviewed-by: Marcelo Ricardo Leitner <[email protected]>
    Link: https://patch.msgid.link/dd7dc337b99876d4132d0961f776913719f7d225.1754595611.git.lucien.xin@gmail.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
securityfs: don't pin dentries twice, once is enough... [+ + +]
Author: Al Viro <[email protected]>
Date:   Thu May 8 23:38:01 2025 -0400

    securityfs: don't pin dentries twice, once is enough...
    
    [ Upstream commit 27cd1bf1240d482e4f02ca4f9812e748f3106e4f ]
    
    incidentally, securityfs_recursive_remove() is broken without that -
    it leaks dentries, since simple_recursive_removal() does not expect
    anything of that sort.  It could be worked around by dput() in
    remove_one() callback, but it's easier to just drop that double-get
    stuff.
    
    Signed-off-by: Al Viro <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
selftests/bpf: Fix a user_ringbuf failure with arm64 64KB page size [+ + +]
Author: Yonghong Song <[email protected]>
Date:   Fri Jun 6 18:36:26 2025 -0700

    selftests/bpf: Fix a user_ringbuf failure with arm64 64KB page size
    
    [ Upstream commit bbc7bd658ddc662083639b9e9a280b90225ecd9a ]
    
    The ringbuf max_entries must be PAGE_ALIGNED. See kernel function
    ringbuf_map_alloc(). So for arm64 64KB page size, adjust max_entries
    properly.
    
    Signed-off-by: Yonghong Song <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
selftests/futex: Define SYS_futex on 32-bit architectures with 64-bit time_t [+ + +]
Author: Cynthia Huang <[email protected]>
Date:   Thu Jul 10 18:36:30 2025 +0800

    selftests/futex: Define SYS_futex on 32-bit architectures with 64-bit time_t
    
    [ Upstream commit 04850819c65c8242072818655d4341e70ae998b5 ]
    
    The kernel does not provide sys_futex() on 32-bit architectures that do not
    support 32-bit time representations, such as riscv32.
    
    As a result, glibc cannot define SYS_futex, causing compilation failures in
    tests that rely on this syscall. Define SYS_futex as SYS_futex_time64 in
    such cases to ensure successful compilation and compatibility.
    
    Signed-off-by: Cynthia Huang <[email protected]>
    Signed-off-by: Ben Zong-You Xie <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Reviewed-by: Muhammad Usama Anjum <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
selftests/memfd: add test for mapping write-sealed memfd read-only [+ + +]
Author: Isaac J. Manjarres <[email protected]>
Date:   Tue Jul 29 18:51:48 2025 -0700

    selftests/memfd: add test for mapping write-sealed memfd read-only
    
    From: Lorenzo Stoakes <[email protected]>
    
    [ Upstream commit ea0916e01d0b0f2cce1369ac1494239a79827270 ]
    
    Now we have reinstated the ability to map F_SEAL_WRITE mappings read-only,
    assert that we are able to do this in a test to ensure that we do not
    regress this again.
    
    Link: https://lkml.kernel.org/r/a6377ec470b14c0539b4600cf8fa24bf2e4858ae.1732804776.git.lorenzo.stoakes@oracle.com
    Signed-off-by: Lorenzo Stoakes <[email protected]>
    Cc: Jann Horn <[email protected]>
    Cc: Julian Orth <[email protected]>
    Cc: Liam R. Howlett <[email protected]>
    Cc: Linus Torvalds <[email protected]>
    Cc: Shuah Khan <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Cc: [email protected]
    Signed-off-by: Isaac J. Manjarres <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
selftests: mptcp: pm: check flush doesn't reset limits [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Fri Aug 22 16:11:03 2025 +0200

    selftests: mptcp: pm: check flush doesn't reset limits
    
    commit 452690be7de2f91cc0de68cb9e95252875b33503 upstream.
    
    This modification is linked to the parent commit where the received
    ADD_ADDR limit was accidentally reset when the endpoints were flushed.
    
    To validate that, the test is now flushing endpoints after having set
    new limits, and before checking them.
    
    The 'Fixes' tag here below is the same as the one from the previous
    commit: this patch here is not fixing anything wrong in the selftests,
    but it validates the previous fix for an issue introduced by this commit
    ID.
    
    Fixes: 01cacb00b35c ("mptcp: add netlink-based PM")
    Cc: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/20250815-net-mptcp-misc-fixes-6-17-rc2-v1-3-521fe9957892@kernel.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ Conflicts in pm_netlink.sh, because some refactoring have been done
      later on: commit 3188309c8ceb ("selftests: mptcp: netlink:
      add 'limits' helpers") and commit c99d57d0007a ("selftests: mptcp: use
      pm_nl endpoint ops") are not in this version. The same operation can
      still be done at the same place, without using the new helper. ]
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

selftests: tracing: Use mutex_unlock for testing glob filter [+ + +]
Author: Masami Hiramatsu (Google) <[email protected]>
Date:   Thu Jul 3 13:26:43 2025 +0900

    selftests: tracing: Use mutex_unlock for testing glob filter
    
    [ Upstream commit a089bb2822a49b0c5777a8936f82c1f8629231fb ]
    
    Since commit c5b6ababd21a ("locking/mutex: implement
    mutex_trylock_nested") makes mutex_trylock() as an inlined
    function if CONFIG_DEBUG_LOCK_ALLOC=y, we can not use
    mutex_trylock() for testing the glob filter of ftrace.
    
    Use mutex_unlock instead.
    
    Link: https://lore.kernel.org/r/175151680309.2149615.9795104805153538717.stgit@mhiramat.tok.corp.google.com
    Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
    Acked-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Shuah Khan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
serial: 8250: fix panic due to PSLVERR [+ + +]
Author: Yunhui Cui <[email protected]>
Date:   Wed Jul 23 10:33:22 2025 +0800

    serial: 8250: fix panic due to PSLVERR
    
    commit 7f8fdd4dbffc05982b96caf586f77a014b2a9353 upstream.
    
    When the PSLVERR_RESP_EN parameter is set to 1, the device generates
    an error response if an attempt is made to read an empty RBR (Receive
    Buffer Register) while the FIFO is enabled.
    
    In serial8250_do_startup(), calling serial_port_out(port, UART_LCR,
    UART_LCR_WLEN8) triggers dw8250_check_lcr(), which invokes
    dw8250_force_idle() and serial8250_clear_and_reinit_fifos(). The latter
    function enables the FIFO via serial_out(p, UART_FCR, p->fcr).
    Execution proceeds to the serial_port_in(port, UART_RX).
    This satisfies the PSLVERR trigger condition.
    
    When another CPU (e.g., using printk()) is accessing the UART (UART
    is busy), the current CPU fails the check (value & ~UART_LCR_SPAR) ==
    (lcr & ~UART_LCR_SPAR) in dw8250_check_lcr(), causing it to enter
    dw8250_force_idle().
    
    Put serial_port_out(port, UART_LCR, UART_LCR_WLEN8) under the port->lock
    to fix this issue.
    
    Panic backtrace:
    [    0.442336] Oops - unknown exception [#1]
    [    0.442343] epc : dw8250_serial_in32+0x1e/0x4a
    [    0.442351]  ra : serial8250_do_startup+0x2c8/0x88e
    ...
    [    0.442416] console_on_rootfs+0x26/0x70
    
    Fixes: c49436b657d0 ("serial: 8250_dw: Improve unwritable LCR workaround")
    Link: https://lore.kernel.org/all/[email protected]/T/
    Signed-off-by: Yunhui Cui <[email protected]>
    Reviewed-by: John Ogness <[email protected]>
    Cc: stable <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    [ Applied fix to serial8250_do_startup() instead of serial8250_initialize() ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
smb/server: avoid deadlock when linking with ReplaceIfExists [+ + +]
Author: NeilBrown <[email protected]>
Date:   Mon Jun 9 09:35:09 2025 +1000

    smb/server: avoid deadlock when linking with ReplaceIfExists
    
    [ Upstream commit d5fc1400a34b4ea5e8f2ce296ea12bf8c8421694 ]
    
    If smb2_create_link() is called with ReplaceIfExists set and the name
    does exist then a deadlock will happen.
    
    ksmbd_vfs_kern_path_locked() will return with success and the parent
    directory will be locked.  ksmbd_vfs_remove_file() will then remove the
    file.  ksmbd_vfs_link() will then be called while the parent is still
    locked.  It will try to lock the same parent and will deadlock.
    
    This patch moves the ksmbd_vfs_kern_path_unlock() call to *before*
    ksmbd_vfs_link() and then simplifies the code, removing the file_present
    flag variable.
    
    Signed-off-by: NeilBrown <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
smb3: fix for slab out of bounds on mount to ksmbd [+ + +]
Author: Steve French <[email protected]>
Date:   Mon Aug 11 23:14:55 2025 -0500

    smb3: fix for slab out of bounds on mount to ksmbd
    
    commit 7d34ec36abb84fdfb6632a0f2cbda90379ae21fc upstream.
    
    With KASAN enabled, it is possible to get a slab out of bounds
    during mount to ksmbd due to missing check in parse_server_interfaces()
    (see below):
    
     BUG: KASAN: slab-out-of-bounds in
     parse_server_interfaces+0x14ee/0x1880 [cifs]
     Read of size 4 at addr ffff8881433dba98 by task mount/9827
    
     CPU: 5 UID: 0 PID: 9827 Comm: mount Tainted: G
     OE       6.16.0-rc2-kasan #2 PREEMPT(voluntary)
     Tainted: [O]=OOT_MODULE, [E]=UNSIGNED_MODULE
     Hardware name: Dell Inc. Precision Tower 3620/0MWYPT,
     BIOS 2.13.1 06/14/2019
     Call Trace:
      <TASK>
     dump_stack_lvl+0x9f/0xf0
     print_report+0xd1/0x670
     __virt_addr_valid+0x22c/0x430
     ? parse_server_interfaces+0x14ee/0x1880 [cifs]
     ? kasan_complete_mode_report_info+0x2a/0x1f0
     ? parse_server_interfaces+0x14ee/0x1880 [cifs]
       kasan_report+0xd6/0x110
       parse_server_interfaces+0x14ee/0x1880 [cifs]
       __asan_report_load_n_noabort+0x13/0x20
       parse_server_interfaces+0x14ee/0x1880 [cifs]
     ? __pfx_parse_server_interfaces+0x10/0x10 [cifs]
     ? trace_hardirqs_on+0x51/0x60
     SMB3_request_interfaces+0x1ad/0x3f0 [cifs]
     ? __pfx_SMB3_request_interfaces+0x10/0x10 [cifs]
     ? SMB2_tcon+0x23c/0x15d0 [cifs]
     smb3_qfs_tcon+0x173/0x2b0 [cifs]
     ? __pfx_smb3_qfs_tcon+0x10/0x10 [cifs]
     ? cifs_get_tcon+0x105d/0x2120 [cifs]
     ? do_raw_spin_unlock+0x5d/0x200
     ? cifs_get_tcon+0x105d/0x2120 [cifs]
     ? __pfx_smb3_qfs_tcon+0x10/0x10 [cifs]
     cifs_mount_get_tcon+0x369/0xb90 [cifs]
     ? dfs_cache_find+0xe7/0x150 [cifs]
     dfs_mount_share+0x985/0x2970 [cifs]
     ? check_path.constprop.0+0x28/0x50
     ? save_trace+0x54/0x370
     ? __pfx_dfs_mount_share+0x10/0x10 [cifs]
     ? __lock_acquire+0xb82/0x2ba0
     ? __kasan_check_write+0x18/0x20
     cifs_mount+0xbc/0x9e0 [cifs]
     ? __pfx_cifs_mount+0x10/0x10 [cifs]
     ? do_raw_spin_unlock+0x5d/0x200
     ? cifs_setup_cifs_sb+0x29d/0x810 [cifs]
     cifs_smb3_do_mount+0x263/0x1990 [cifs]
    
    Reported-by: Namjae Jeon <[email protected]>
    Tested-by: Namjae Jeon <[email protected]>
    Cc: [email protected]
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
smb: client: don't wait for info->send_pending == 0 on error [+ + +]
Author: Stefan Metzmacher <[email protected]>
Date:   Tue Aug 12 18:45:06 2025 +0200

    smb: client: don't wait for info->send_pending == 0 on error
    
    commit 8c48e1c7520321cc87ff651e96093e2f412785fb upstream.
    
    We already called ib_drain_qp() before and that makes sure
    send_done() was called with IB_WC_WR_FLUSH_ERR, but
    didn't called atomic_dec_and_test(&sc->send_io.pending.count)
    
    So we may never reach the info->send_pending == 0 condition.
    
    Cc: Steve French <[email protected]>
    Cc: Tom Talpey <[email protected]>
    Cc: Long Li <[email protected]>
    Cc: [email protected]
    Cc: [email protected]
    Fixes: 5349ae5e05fa ("smb: client: let send_done() cleanup before calling smbd_disconnect_rdma_connection()")
    Signed-off-by: Stefan Metzmacher <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

smb: client: fix netns refcount leak after net_passive changes [+ + +]
Author: Wang Zhaolong <[email protected]>
Date:   Tue Aug 12 14:40:17 2025 -0400

    smb: client: fix netns refcount leak after net_passive changes
    
    [ Upstream commit 59b33fab4ca4d7dacc03367082777627e05d0323 ]
    
    After commit 5c70eb5c593d ("net: better track kernel sockets lifetime"),
    kernel sockets now use net_passive reference counting. However, commit
    95d2b9f693ff ("Revert "smb: client: fix TCP timers deadlock after rmmod"")
    restored the manual socket refcount manipulation without adapting to this
    new mechanism, causing a memory leak.
    
    The issue can be reproduced by[1]:
    1. Creating a network namespace
    2. Mounting and Unmounting CIFS within the namespace
    3. Deleting the namespace
    
    Some memory leaks may appear after a period of time following step 3.
    
    unreferenced object 0xffff9951419f6b00 (size 256):
      comm "ip", pid 447, jiffies 4294692389 (age 14.730s)
      hex dump (first 32 bytes):
        1b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        00 00 00 00 00 00 00 00 80 77 c2 44 51 99 ff ff  .........w.DQ...
      backtrace:
        __kmem_cache_alloc_node+0x30e/0x3d0
        __kmalloc+0x52/0x120
        net_alloc_generic+0x1d/0x30
        copy_net_ns+0x86/0x200
        create_new_namespaces+0x117/0x300
        unshare_nsproxy_namespaces+0x60/0xa0
        ksys_unshare+0x148/0x360
        __x64_sys_unshare+0x12/0x20
        do_syscall_64+0x59/0x110
        entry_SYSCALL_64_after_hwframe+0x78/0xe2
    ...
    unreferenced object 0xffff9951442e7500 (size 32):
      comm "mount.cifs", pid 475, jiffies 4294693782 (age 13.343s)
      hex dump (first 32 bytes):
        40 c5 38 46 51 99 ff ff 18 01 96 42 51 99 ff ff  @.8FQ......BQ...
        01 00 00 00 6f 00 c5 07 6f 00 d8 07 00 00 00 00  ....o...o.......
      backtrace:
        __kmem_cache_alloc_node+0x30e/0x3d0
        kmalloc_trace+0x2a/0x90
        ref_tracker_alloc+0x8e/0x1d0
        sk_alloc+0x18c/0x1c0
        inet_create+0xf1/0x370
        __sock_create+0xd7/0x1e0
        generic_ip_connect+0x1d4/0x5a0 [cifs]
        cifs_get_tcp_session+0x5d0/0x8a0 [cifs]
        cifs_mount_get_session+0x47/0x1b0 [cifs]
        dfs_mount_share+0xfa/0xa10 [cifs]
        cifs_mount+0x68/0x2b0 [cifs]
        cifs_smb3_do_mount+0x10b/0x760 [cifs]
        smb3_get_tree+0x112/0x2e0 [cifs]
        vfs_get_tree+0x29/0xf0
        path_mount+0x2d4/0xa00
        __se_sys_mount+0x165/0x1d0
    
    Root cause:
    When creating kernel sockets, sk_alloc() calls net_passive_inc() for
    sockets with sk_net_refcnt=0. The CIFS code manually converts kernel
    sockets to user sockets by setting sk_net_refcnt=1, but doesn't call
    the corresponding net_passive_dec(). This creates an imbalance in the
    net_passive counter, which prevents the network namespace from being
    destroyed when its last user reference is dropped. As a result, the
    entire namespace and all its associated resources remain allocated.
    
    Timeline of patches leading to this issue:
    - commit ef7134c7fc48 ("smb: client: Fix use-after-free of network
      namespace.") in v6.12 fixed the original netns UAF by manually
      managing socket refcounts
    - commit e9f2517a3e18 ("smb: client: fix TCP timers deadlock after
      rmmod") in v6.13 attempted to use kernel sockets but introduced
      TCP timer issues
    - commit 5c70eb5c593d ("net: better track kernel sockets lifetime")
      in v6.14-rc5 introduced the net_passive mechanism with
      sk_net_refcnt_upgrade() for proper socket conversion
    - commit 95d2b9f693ff ("Revert "smb: client: fix TCP timers deadlock
      after rmmod"") in v6.15-rc3 reverted to manual refcount management
      without adapting to the new net_passive changes
    
    Fix this by using sk_net_refcnt_upgrade() which properly handles the
    net_passive counter when converting kernel sockets to user sockets.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=220343 [1]
    Fixes: 95d2b9f693ff ("Revert "smb: client: fix TCP timers deadlock after rmmod"")
    Cc: [email protected]
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Enzo Matsumiya <[email protected]>
    Signed-off-by: Wang Zhaolong <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

smb: client: let send_done() cleanup before calling smbd_disconnect_rdma_connection() [+ + +]
Author: Stefan Metzmacher <[email protected]>
Date:   Mon Aug 4 14:10:12 2025 +0200

    smb: client: let send_done() cleanup before calling smbd_disconnect_rdma_connection()
    
    commit 5349ae5e05fa37409fd48a1eb483b199c32c889b upstream.
    
    We should call ib_dma_unmap_single() and mempool_free() before calling
    smbd_disconnect_rdma_connection().
    
    And smbd_disconnect_rdma_connection() needs to be the last function to
    call as all other state might already be gone after it returns.
    
    Cc: Steve French <[email protected]>
    Cc: Tom Talpey <[email protected]>
    Cc: Long Li <[email protected]>
    Cc: [email protected]
    Cc: [email protected]
    Fixes: f198186aa9bb ("CIFS: SMBD: Establish SMB Direct connection")
    Signed-off-by: Stefan Metzmacher <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

smb: client: remove redundant lstrp update in negotiate protocol [+ + +]
Author: Wang Zhaolong <[email protected]>
Date:   Fri Aug 1 17:07:24 2025 +0800

    smb: client: remove redundant lstrp update in negotiate protocol
    
    commit e19d8dd694d261ac26adb2a26121a37c107c81ad upstream.
    
    Commit 34331d7beed7 ("smb: client: fix first command failure during
    re-negotiation") addressed a race condition by updating lstrp before
    entering negotiate state. However, this approach may have some unintended
    side effects.
    
    The lstrp field is documented as "when we got last response from this
    server", and updating it before actually receiving a server response
    could potentially affect other mechanisms that rely on this timestamp.
    For example, the SMB echo detection logic also uses lstrp as a reference
    point. In scenarios with frequent user operations during reconnect states,
    the repeated calls to cifs_negotiate_protocol() might continuously
    update lstrp, which could interfere with the echo detection timing.
    
    Additionally, commit 266b5d02e14f ("smb: client: fix race condition in
    negotiate timeout by using more precise timing") introduced a dedicated
    neg_start field specifically for tracking negotiate start time. This
    provides a more precise solution for the original race condition while
    preserving the intended semantics of lstrp.
    
    Since the race condition is now properly handled by the neg_start
    mechanism, the lstrp update in cifs_negotiate_protocol() is no longer
    necessary and can be safely removed.
    
    Fixes: 266b5d02e14f ("smb: client: fix race condition in negotiate timeout by using more precise timing")
    Cc: [email protected]
    Acked-by: Paulo Alcantara (Red Hat) <[email protected]>
    Signed-off-by: Wang Zhaolong <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

smb: server: split ksmbd_rdma_stop_listening() out of ksmbd_rdma_destroy() [+ + +]
Author: Stefan Metzmacher <[email protected]>
Date:   Tue Aug 12 18:45:46 2025 +0200

    smb: server: split ksmbd_rdma_stop_listening() out of ksmbd_rdma_destroy()
    
    [ Upstream commit bac7b996d42e458a94578f4227795a0d4deef6fa ]
    
    We can't call destroy_workqueue(smb_direct_wq); before stop_sessions()!
    
    Otherwise already existing connections try to use smb_direct_wq as
    a NULL pointer.
    
    Cc: Namjae Jeon <[email protected]>
    Cc: Steve French <[email protected]>
    Cc: Tom Talpey <[email protected]>
    Cc: [email protected]
    Cc: [email protected]
    Fixes: 0626e6641f6b ("cifsd: add server handler for central processing and tranport layers")
    Signed-off-by: Stefan Metzmacher <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
soc/tegra: pmc: Ensure power-domains are in a known state [+ + +]
Author: Jon Hunter <[email protected]>
Date:   Thu Jul 31 13:18:32 2025 +0100

    soc/tegra: pmc: Ensure power-domains are in a known state
    
    commit b6bcbce3359619d05bf387d4f5cc3af63668dbaa upstream.
    
    After commit 13a4b7fb6260 ("pmdomain: core: Leave powered-on genpds on
    until late_initcall_sync") was applied, the Tegra210 Jetson TX1 board
    failed to boot. Looking into this issue, before this commit was applied,
    if any of the Tegra power-domains were in 'on' state when the kernel
    booted, they were being turned off by the genpd core before any driver
    had chance to request them. This was purely by luck and a consequence of
    the power-domains being turned off earlier during boot. After this
    commit was applied, any power-domains in the 'on' state are kept on for
    longer during boot and therefore, may never transitioned to the off
    state before they are requested/used. The hang on the Tegra210 Jetson
    TX1 is caused because devices in some power-domains are accessed without
    the power-domain being turned off and on, indicating that the
    power-domain is not in a completely on state.
    
    >From reviewing the Tegra PMC driver code, if a power-domain is in the
    'on' state there is no guarantee that all the necessary clocks
    associated with the power-domain are on and even if they are they would
    not have been requested via the clock framework and so could be turned
    off later. Some power-domains also have a 'clamping' register that needs
    to be configured as well. In short, if a power-domain is already 'on' it
    is difficult to know if it has been configured correctly. Given that the
    power-domains happened to be switched off during boot previously, to
    ensure that they are in a good known state on boot, fix this by
    switching off any power-domains that are on initially when registering
    the power-domains with the genpd framework.
    
    Note that commit 05cfb988a4d0 ("soc/tegra: pmc: Initialise resets
    associated with a power partition") updated the
    tegra_powergate_of_get_resets() function to pass the 'off' to ensure
    that the resets for the power-domain are in the correct state on boot.
    However, now that we may power off a domain on boot, if it is on, it is
    better to move this logic into the tegra_powergate_add() function so
    that there is a single place where we are handling the initial state of
    the power-domain.
    
    Fixes: a38045121bf4 ("soc/tegra: pmc: Add generic PM domain support")
    Signed-off-by: Jon Hunter <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
soc: qcom: mdt_loader: Actually use the e_phoff [+ + +]
Author: Bjorn Andersson <[email protected]>
Date:   Tue Jun 10 21:58:30 2025 -0500

    soc: qcom: mdt_loader: Actually use the e_phoff
    
    [ Upstream commit 47e339cac89143709e84a3b71ba8bd9b2fdd2368 ]
    
    Rather than relying/assuming that the tools generating the firmware
    places the program headers immediately following the ELF header, use
    e_phoff as intended to find the program headers.
    
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Signed-off-by: Bjorn Andersson <[email protected]>
    Link: https://lore.kernel.org/r/20250610-mdt-loader-validation-and-fixes-v2-3-f7073e9ab899@oss.qualcomm.com
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

soc: qcom: mdt_loader: Ensure we don't read past the ELF header [+ + +]
Author: Bjorn Andersson <[email protected]>
Date:   Tue Jun 10 21:58:28 2025 -0500

    soc: qcom: mdt_loader: Ensure we don't read past the ELF header
    
    commit 9f9967fed9d066ed3dae9372b45ffa4f6fccfeef upstream.
    
    When the MDT loader is used in remoteproc, the ELF header is sanitized
    beforehand, but that's not necessary the case for other clients.
    
    Validate the size of the firmware buffer to ensure that we don't read
    past the end as we iterate over the header. e_phentsize and e_shentsize
    are validated as well, to ensure that the assumptions about step size in
    the traversal are valid.
    
    Fixes: 2aad40d911ee ("remoteproc: Move qcom_mdt_loader into drivers/soc/qcom")
    Cc: [email protected]
    Reported-by: Doug Anderson <[email protected]>
    Signed-off-by: Bjorn Andersson <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Link: https://lore.kernel.org/r/20250610-mdt-loader-validation-and-fixes-v2-1-f7073e9ab899@oss.qualcomm.com
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

soc: qcom: mdt_loader: Fix error return values in mdt_header_valid() [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Wed Jun 25 10:22:41 2025 -0500

    soc: qcom: mdt_loader: Fix error return values in mdt_header_valid()
    
    commit 9f35ab0e53ccbea57bb9cbad8065e0406d516195 upstream.
    
    This function is supposed to return true for valid headers and false for
    invalid.  In a couple places it returns -EINVAL instead which means the
    invalid headers are counted as true.  Change it to return false.
    
    Fixes: 9f9967fed9d0 ("soc: qcom: mdt_loader: Ensure we don't read past the ELF header")
    Signed-off-by: Dan Carpenter <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

soc: qcom: rpmh-rsc: Add RSC version 4 support [+ + +]
Author: Maulik Shah <[email protected]>
Date:   Mon Jun 23 11:19:43 2025 +0530

    soc: qcom: rpmh-rsc: Add RSC version 4 support
    
    [ Upstream commit 84684c57c9cd47b86c883a7170dd68222d97ef13 ]
    
    Register offsets for v3 and v4 versions are backward compatible. Assign v3
    offsets for v4 and all higher versions to avoid end up using v2 offsets.
    
    Signed-off-by: Maulik Shah <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Reviewed-by: Neil Armstrong <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
soundwire: amd: serialize amd manager resume sequence during pm_prepare [+ + +]
Author: Vijendar Mukunda <[email protected]>
Date:   Fri May 30 11:13:40 2025 +0530

    soundwire: amd: serialize amd manager resume sequence during pm_prepare
    
    [ Upstream commit 03837341790039d6f1cbf7a1ae7dfa2cb77ef0a4 ]
    
    During pm_prepare callback, pm_request_resume() delays SoundWire manager D0
    entry sequence. Synchronize runtime resume sequence for amd_manager
    instance prior to invoking child devices resume sequence for both the amd
    power modes(ClockStop Mode and Power off mode).
    Change the power_mode_mask check and use pm_runtime_resume() in
    amd_pm_prepare() callback.
    
    Signed-off-by: Vijendar Mukunda <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

soundwire: Move handle_nested_irq outside of sdw_dev_lock [+ + +]
Author: Charles Keepax <[email protected]>
Date:   Mon Jun 9 15:30:40 2025 +0100

    soundwire: Move handle_nested_irq outside of sdw_dev_lock
    
    [ Upstream commit ccb7bb13c00bcc3178d270da052635c56148bc16 ]
    
    The sdw_dev_lock protects the SoundWire driver callbacks against
    the probed flag, which is used to skip the callbacks if the
    driver gets removed. For more information see commit bd29c00edd0a
    ("soundwire: revisit driver bind/unbind and callbacks").
    
    However, this lock is a frequent source of mutex inversions.
    Many audio operations eventually hit the hardware resulting in a
    SoundWire callback, this means that typically the driver has the
    locking order ALSA/ASoC locks -> sdw_dev_lock. Conversely, the IRQ
    comes in directly from the SoundWire hardware, but then will often
    want to access ALSA/ASoC, such as updating something in DAPM or
    an ALSA control. This gives the other lock order sdw_dev_lock ->
    ALSA/ASoC locks.
    
    When the IRQ handling was initially added to SoundWire this was
    through a callback mechanism. As such it required being covered by
    the lock because the callbacks are part of the sdw_driver structure
    and are thus present regardless of if the driver is currently
    probed.
    
    Since then a newer mechanism using the IRQ framework has been
    added, which is currently covered by the same lock but this isn't
    actually required. Handlers for the IRQ framework are registered in
    probe and should by released during remove, thus the IRQ framework
    will have already unbound the IRQ before the slave driver is
    removed. Avoid the aforementioned mutex inversion by moving the
    handle_nested_irq call outside of the sdw_dev_lock.
    
    Signed-off-by: Charles Keepax <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
spi: spi-fsl-lpspi: Clamp too high speed_hz [+ + +]
Author: Stefan Wahren <[email protected]>
Date:   Thu Aug 7 12:07:42 2025 +0200

    spi: spi-fsl-lpspi: Clamp too high speed_hz
    
    [ Upstream commit af357a6a3b7d685e7aa621c6fb1d4ed6c349ec9e ]
    
    Currently the driver is not able to handle the case that a SPI device
    specifies a higher spi-max-frequency than half of per-clk:
    
        per-clk should be at least two times of transfer speed
    
    Fix this by clamping to the max possible value and use the minimum SCK
    period of 2 cycles.
    
    Fixes: 77736a98b859 ("spi: lpspi: add the error info of transfer speed setting")
    Signed-off-by: Stefan Wahren <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
squashfs: fix memory leak in squashfs_fill_super [+ + +]
Author: Phillip Lougher <[email protected]>
Date:   Mon Aug 11 23:37:40 2025 +0100

    squashfs: fix memory leak in squashfs_fill_super
    
    commit b64700d41bdc4e9f82f1346c15a3678ebb91a89c upstream.
    
    If sb_min_blocksize returns 0, squashfs_fill_super exits without freeing
    allocated memory (sb->s_fs_info).
    
    Fix this by moving the call to sb_min_blocksize to before memory is
    allocated.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 734aa85390ea ("Squashfs: check return result of sb_min_blocksize")
    Signed-off-by: Phillip Lougher <[email protected]>
    Reported-by: Scott GUO <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sunvdc: Balance device refcount in vdc_port_mpgroup_check [+ + +]
Author: Ma Ke <[email protected]>
Date:   Sat Jul 19 15:58:56 2025 +0800

    sunvdc: Balance device refcount in vdc_port_mpgroup_check
    
    commit 63ce53724637e2e7ba51fe3a4f78351715049905 upstream.
    
    Using device_find_child() to locate a probed virtual-device-port node
    causes a device refcount imbalance, as device_find_child() internally
    calls get_device() to increment the device’s reference count before
    returning its pointer. vdc_port_mpgroup_check() directly returns true
    upon finding a matching device without releasing the reference via
    put_device(). We should call put_device() to decrement refcount.
    
    As comment of device_find_child() says, 'NOTE: you will need to drop
    the reference with put_device() after use'.
    
    Found by code review.
    
    Cc: [email protected]
    Fixes: 3ee70591d6c4 ("sunvdc: prevent sunvdc panic when mpgroup disk added to guest domain")
    Signed-off-by: Ma Ke <[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]>

 
thermal/drivers/qcom-spmi-temp-alarm: Enable stage 2 shutdown when required [+ + +]
Author: David Collins <[email protected]>
Date:   Thu Jul 10 15:45:51 2025 -0700

    thermal/drivers/qcom-spmi-temp-alarm: Enable stage 2 shutdown when required
    
    [ Upstream commit f8e157ff2df46ddabd930815d196895976227831 ]
    
    Certain TEMP_ALARM GEN2 PMIC peripherals need over-temperature stage 2
    automatic PMIC partial shutdown. This will ensure that in the event of
    reaching the hotter stage 3 over-temperature threshold, repeated faults
    will be avoided during the automatic PMIC hardware full shutdown.
    Modify the stage 2 shutdown control logic to ensure that stage 2
    shutdown is enabled on all affected PMICs. Read the digital major
    and minor revision registers to identify these PMICs.
    
    Signed-off-by: David Collins <[email protected]>
    Signed-off-by: Anjelique Melendez <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Daniel Lezcano <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
thermal: sysfs: Return ENODATA instead of EAGAIN for reads [+ + +]
Author: Hsin-Te Yuan <[email protected]>
Date:   Fri Jun 20 10:41:43 2025 +0000

    thermal: sysfs: Return ENODATA instead of EAGAIN for reads
    
    [ Upstream commit 1a4aabc27e95674837f2e25f4ef340c0469e6203 ]
    
    According to POSIX spec, EAGAIN returned by read with O_NONBLOCK set
    means the read would block. Hence, the common implementation in
    nonblocking model will poll the file when the nonblocking read returns
    EAGAIN. However, when the target file is thermal zone, this mechanism
    will totally malfunction because thermal zone doesn't implement sysfs
    notification and thus the poll will never return.
    
    For example, the read in Golang implemnts such method and sometimes
    hangs at reading some thermal zones via sysfs.
    
    Change to return -ENODATA instead of -EAGAIN to userspace.
    
    Signed-off-by: Hsin-Te Yuan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
thunderbolt: Fix copy+paste error in match_service_id() [+ + +]
Author: Eric Biggers <[email protected]>
Date:   Sun Jul 20 22:01:36 2025 -0700

    thunderbolt: Fix copy+paste error in match_service_id()
    
    commit 5cc1f66cb23cccc704e3def27ad31ed479e934a5 upstream.
    
    The second instance of TBSVC_MATCH_PROTOCOL_VERSION seems to have been
    intended to be TBSVC_MATCH_PROTOCOL_REVISION.
    
    Fixes: d1ff70241a27 ("thunderbolt: Add support for XDomain discovery protocol")
    Cc: stable <[email protected]>
    Signed-off-by: Eric Biggers <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tls: fix handling of zero-length records on the rx_list [+ + +]
Author: Jakub Kicinski <[email protected]>
Date:   Tue Aug 19 19:19:51 2025 -0700

    tls: fix handling of zero-length records on the rx_list
    
    commit 62708b9452f8eb77513115b17c4f8d1a22ebf843 upstream.
    
    Each recvmsg() call must process either
     - only contiguous DATA records (any number of them)
     - one non-DATA record
    
    If the next record has different type than what has already been
    processed we break out of the main processing loop. If the record
    has already been decrypted (which may be the case for TLS 1.3 where
    we don't know type until decryption) we queue the pending record
    to the rx_list. Next recvmsg() will pick it up from there.
    
    Queuing the skb to rx_list after zero-copy decrypt is not possible,
    since in that case we decrypted directly to the user space buffer,
    and we don't have an skb to queue (darg.skb points to the ciphertext
    skb for access to metadata like length).
    
    Only data records are allowed zero-copy, and we break the processing
    loop after each non-data record. So we should never zero-copy and
    then find out that the record type has changed. The corner case
    we missed is when the initial record comes from rx_list, and it's
    zero length.
    
    Reported-by: Muhammad Alifa Ramdhan <[email protected]>
    Reported-by: Billy Jheng Bing-Jhong <[email protected]>
    Fixes: 84c61fe1a75b ("tls: rx: do not use the standard strparser")
    Reviewed-by: Sabrina Dubroca <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

tls: handle data disappearing from under the TLS ULP [+ + +]
Author: Jakub Kicinski <[email protected]>
Date:   Thu Aug 7 16:29:06 2025 -0700

    tls: handle data disappearing from under the TLS ULP
    
    [ Upstream commit 6db015fc4b5d5f63a64a193f65d98da3a7fc811d ]
    
    TLS expects that it owns the receive queue of the TCP socket.
    This cannot be guaranteed in case the reader of the TCP socket
    entered before the TLS ULP was installed, or uses some non-standard
    read API (eg. zerocopy ones). Replace the WARN_ON() and a buggy
    early exit (which leaves anchor pointing to a freed skb) with real
    error handling. Wipe the parsing state and tell the reader to retry.
    
    We already reload the anchor every time we (re)acquire the socket lock,
    so the only condition we need to avoid is an out of bounds read
    (not having enough bytes in the socket for previously parsed record len).
    
    If some data was read from under TLS but there's enough in the queue
    we'll reload and decrypt what is most likely not a valid TLS record.
    Leading to some undefined behavior from TLS perspective (corrupting
    a stream? missing an alert? missing an attack?) but no kernel crash
    should take place.
    
    Reported-by: William Liu <[email protected]>
    Reported-by: Savino Dicanosa <[email protected]>
    Link: https://lore.kernel.org/tFjq_kf7sWIG3A7CrCg_egb8CVsT_gsmHAK0_wxDPJXfIzxFAMxqmLwp3MlU5EHiet0AwwJldaaFdgyHpeIUCS-3m3llsmRzp9xIOBR4lAI=@syst3mfailure.io
    Fixes: 84c61fe1a75b ("tls: rx: do not use the standard strparser")
    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]>

 
tools/build: Fix s390(x) cross-compilation with clang [+ + +]
Author: Thomas Weißschuh <[email protected]>
Date:   Fri Jun 20 13:00:27 2025 +0200

    tools/build: Fix s390(x) cross-compilation with clang
    
    [ Upstream commit a40f0cdce78be8a559ee8a85c908049c65a410b2 ]
    
    The heuristic to derive a clang target triple from a GCC one does not work
    for s390. GCC uses "s390-linux" while clang expects "s390x-linux" or
    "powerz-linux".
    
    Add an explicit override.
    
    Signed-off-by: Thomas Weißschuh <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Thomas Weißschuh <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tools/nolibc: define time_t in terms of __kernel_old_time_t [+ + +]
Author: Thomas Weißschuh <[email protected]>
Date:   Sat Jul 12 11:00:55 2025 +0200

    tools/nolibc: define time_t in terms of __kernel_old_time_t
    
    [ Upstream commit d5094bcb5bfdfea2cf0de8aaf77cc65db56cbdb5 ]
    
    Nolibc assumes that the kernel ABI is using a time values that are as
    large as a long integer. For most ABIs this holds true.
    But for x32 this is not correct, as it uses 32bit longs but 64bit times.
    
    Also the 'struct stat' implementation of nolibc relies on timespec::tv_sec
    and time_t being the same type. While timespec::tv_sec comes from the
    kernel and is of type __kernel_old_time_t, time_t is defined within nolibc.
    
    Switch to the __kernel_old_time_t to always get the correct type.
    
    Signed-off-by: Thomas Weißschuh <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Acked-by: Willy Tarreau <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

tools/nolibc: fix spelling of FD_SETBITMASK in FD_* macros [+ + +]
Author: Willy Tarreau <[email protected]>
Date:   Thu Jun 19 11:30:51 2025 +0200

    tools/nolibc: fix spelling of FD_SETBITMASK in FD_* macros
    
    commit a477629baa2a0e9991f640af418e8c973a1c08e3 upstream.
    
    While nolibc-test does test syscalls, it doesn't test as much the rest
    of the macros, and a wrong spelling of FD_SETBITMASK in commit
    feaf75658783a broke programs using either FD_SET() or FD_CLR() without
    being noticed. Let's fix these macros.
    
    Fixes: feaf75658783a ("nolibc: fix fd_set type")
    Cc: [email protected] # v6.2+
    Acked-by: Thomas Weißschuh <[email protected]>
    Signed-off-by: Willy Tarreau <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
topology: Set capacity_freq_ref in all cases [+ + +]
Author: Vincent Guittot <[email protected]>
Date:   Wed Jan 17 20:05:45 2024 +0100

    topology: Set capacity_freq_ref in all cases
    
    commit 98323e9d70172f1b46d1cadb20d6c54abf62870d upstream.
    
    If "capacity-dmips-mhz" is not set, raw_capacity is null and we skip the
    normalization step which includes setting per_cpu capacity_freq_ref.
    Always register the notifier but skip the capacity normalization if
    raw_capacity is null.
    
    Fixes: 9942cb22ea45 ("sched/topology: Add a new arch_scale_freq_ref() method")
    Signed-off-by: Vincent Guittot <[email protected]>
    Acked-by: Sudeep Holla <[email protected]>
    Tested-by: Pierre Gondois <[email protected]>
    Tested-by: Mark Brown <[email protected]>
    Tested-by: Paul Barker <[email protected]>
    Reviewed-by: Dietmar Eggemann <[email protected]>
    Tested-by: Dietmar Eggemann <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: e37617c8e53a ("sched/fair: Fix frequency selection for non-invariant case")
    Signed-off-by: Wentao Guan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tracefs: Add d_delete to remove negative dentries [+ + +]
Author: Steven Rostedt <[email protected]>
Date:   Wed Jun 11 12:18:15 2025 -0400

    tracefs: Add d_delete to remove negative dentries
    
    [ Upstream commit d9b13cdad80dc11d74408cf201939a946e9303a6 ]
    
    If a lookup in tracefs is done on a file that does not exist, it leaves a
    dentry hanging around until memory pressure removes it. But eventfs
    dentries should hang around as when their ref count goes to zero, it
    requires more work to recreate it. For the rest of the tracefs dentries,
    they hang around as their dentry is used as a descriptor for the tracing
    system. But if a file lookup happens for a file in tracefs that does not
    exist, it should be deleted.
    
    Add a .d_delete callback that checks if dentry->fsdata is set or not. Only
    eventfs dentries set fsdata so if it has content it should not be deleted
    and should hang around in the cache.
    
    Reported-by: Al Viro <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Al Viro <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tracing: fprobe-event: Sanitize wildcard for fprobe event name [+ + +]
Author: Masami Hiramatsu (Google) <[email protected]>
Date:   Sat Aug 16 23:10:51 2025 +0900

    tracing: fprobe-event: Sanitize wildcard for fprobe event name
    
    commit ec879e1a0be8007aa232ffedcf6a6445dfc1a3d7 upstream.
    
    Fprobe event accepts wildcards for the target functions, but unless user
    specifies its event name, it makes an event with the wildcards.
    
      /sys/kernel/tracing # echo 'f mutex*' >> dynamic_events
      /sys/kernel/tracing # cat dynamic_events
      f:fprobes/mutex*__entry mutex*
      /sys/kernel/tracing # ls events/fprobes/
      enable         filter         mutex*__entry
    
    To fix this, replace the wildcard ('*') with an underscore.
    
    Link: https://lore.kernel.org/all/175535345114.282990.12294108192847938710.stgit@devnote2/
    
    Fixes: 334e5519c375 ("tracing/probes: Add fprobe events for tracing function entry and exit.")
    Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

tracing: Limit access to parser->buffer when trace_get_user failed [+ + +]
Author: Pu Lehui <[email protected]>
Date:   Sun Aug 24 09:39:13 2025 -0400

    tracing: Limit access to parser->buffer when trace_get_user failed
    
    [ Upstream commit 6a909ea83f226803ea0e718f6e88613df9234d58 ]
    
    When the length of the string written to set_ftrace_filter exceeds
    FTRACE_BUFF_MAX, the following KASAN alarm will be triggered:
    
    BUG: KASAN: slab-out-of-bounds in strsep+0x18c/0x1b0
    Read of size 1 at addr ffff0000d00bd5ba by task ash/165
    
    CPU: 1 UID: 0 PID: 165 Comm: ash Not tainted 6.16.0-g6bcdbd62bd56-dirty
    Hardware name: linux,dummy-virt (DT)
    Call trace:
     show_stack+0x34/0x50 (C)
     dump_stack_lvl+0xa0/0x158
     print_address_description.constprop.0+0x88/0x398
     print_report+0xb0/0x280
     kasan_report+0xa4/0xf0
     __asan_report_load1_noabort+0x20/0x30
     strsep+0x18c/0x1b0
     ftrace_process_regex.isra.0+0x100/0x2d8
     ftrace_regex_release+0x484/0x618
     __fput+0x364/0xa58
     ____fput+0x28/0x40
     task_work_run+0x154/0x278
     do_notify_resume+0x1f0/0x220
     el0_svc+0xec/0xf0
     el0t_64_sync_handler+0xa0/0xe8
     el0t_64_sync+0x1ac/0x1b0
    
    The reason is that trace_get_user will fail when processing a string
    longer than FTRACE_BUFF_MAX, but not set the end of parser->buffer to 0.
    Then an OOB access will be triggered in ftrace_regex_release->
    ftrace_process_regex->strsep->strpbrk. We can solve this problem by
    limiting access to parser->buffer when trace_get_user failed.
    
    Cc: [email protected]
    Link: https://lore.kernel.org/[email protected]
    Fixes: 8c9af478c06b ("ftrace: Handle commands when closing set_ftrace_filter file")
    Signed-off-by: Pu Lehui <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

tracing: Remove unneeded goto out logic [+ + +]
Author: Steven Rostedt <[email protected]>
Date:   Sun Aug 24 09:39:12 2025 -0400

    tracing: Remove unneeded goto out logic
    
    [ Upstream commit c89504a703fb779052213add0e8ed642f4a4f1c8 ]
    
    Several places in the trace.c file there's a goto out where the out is
    simply a return. There's no reason to jump to the out label if it's not
    doing any more logic but simply returning from the function.
    
    Replace the goto outs with a return and remove the out labels.
    
    Cc: Masami Hiramatsu <[email protected]>
    Cc: Mark Rutland <[email protected]>
    Cc: Mathieu Desnoyers <[email protected]>
    Cc: Andrew Morton <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
uapi: in6: restore visibility of most IPv6 socket options [+ + +]
Author: Jakub Kicinski <[email protected]>
Date:   Mon Jun 9 07:39:33 2025 -0700

    uapi: in6: restore visibility of most IPv6 socket options
    
    [ Upstream commit 31557b3487b349464daf42bc4366153743c1e727 ]
    
    A decade ago commit 6d08acd2d32e ("in6: fix conflict with glibc")
    hid the definitions of IPV6 options, because GCC was complaining
    about duplicates. The commit did not list the warnings seen, but
    trying to recreate them now I think they are (building iproute2):
    
    In file included from ./include/uapi/rdma/rdma_user_cm.h:39,
                     from rdma.h:16,
                     from res.h:9,
                     from res-ctx.c:7:
    ../include/uapi/linux/in6.h:171:9: warning: ‘IPV6_ADD_MEMBERSHIP’ redefined
      171 | #define IPV6_ADD_MEMBERSHIP     20
          |         ^~~~~~~~~~~~~~~~~~~
    In file included from /usr/include/netinet/in.h:37,
                     from rdma.h:13:
    /usr/include/bits/in.h:233:10: note: this is the location of the previous definition
      233 | # define IPV6_ADD_MEMBERSHIP    IPV6_JOIN_GROUP
          |          ^~~~~~~~~~~~~~~~~~~
    ../include/uapi/linux/in6.h:172:9: warning: ‘IPV6_DROP_MEMBERSHIP’ redefined
      172 | #define IPV6_DROP_MEMBERSHIP    21
          |         ^~~~~~~~~~~~~~~~~~~~
    /usr/include/bits/in.h:234:10: note: this is the location of the previous definition
      234 | # define IPV6_DROP_MEMBERSHIP   IPV6_LEAVE_GROUP
          |          ^~~~~~~~~~~~~~~~~~~~
    
    Compilers don't complain about redefinition if the defines
    are identical, but here we have the kernel using the literal
    value, and glibc using an indirection (defining to a name
    of another define, with the same numerical value).
    
    Problem is, the commit in question hid all the IPV6 socket
    options, and glibc has a pretty sparse list. For instance
    it lacks Flow Label related options. Willem called this out
    in commit 3fb321fde22d ("selftests/net: ipv6 flowlabel"):
    
      /* uapi/glibc weirdness may leave this undefined */
      #ifndef IPV6_FLOWINFO
      #define IPV6_FLOWINFO 11
      #endif
    
    More interestingly some applications (socat) use
    a #ifdef IPV6_FLOWINFO to gate compilation of thier
    rudimentary flow label support. (For added confusion
    socat misspells it as IPV4_FLOWINFO in some places.)
    
    Hide only the two defines we know glibc has a problem
    with. If we discover more warnings we can hide more
    but we should avoid covering the entire block of
    defines for "IPV6 socket options".
    
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
udf: Verify partition map count [+ + +]
Author: Jan Kara <[email protected]>
Date:   Fri Jul 11 19:01:20 2025 +0200

    udf: Verify partition map count
    
    [ Upstream commit 1a11201668e8635602577dcf06f2e96c591d8819 ]
    
    Verify that number of partition maps isn't insanely high which can lead
    to large allocation in udf_sb_alloc_partition_maps(). All partition maps
    have to fit in the LVD which is in a single block.
    
    Reported-by: [email protected]
    Signed-off-by: Jan Kara <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
udp: also consider secpath when evaluating ipsec use for checksumming [+ + +]
Author: Sabrina Dubroca <[email protected]>
Date:   Mon Aug 4 11:26:27 2025 +0200

    udp: also consider secpath when evaluating ipsec use for checksumming
    
    [ Upstream commit 1118aaa3b35157777890fffab91d8c1da841b20b ]
    
    Commit b40c5f4fde22 ("udp: disable inner UDP checksum offloads in
    IPsec case") tried to fix checksumming in UFO when the packets are
    going through IPsec, so that we can't rely on offloads because the UDP
    header and payload will be encrypted.
    
    But when doing a TCP test over VXLAN going through IPsec transport
    mode with GSO enabled (esp4_offload module loaded), I'm seeing broken
    UDP checksums on the encap after successful decryption.
    
    The skbs get to udp4_ufo_fragment/__skb_udp_tunnel_segment via
    __dev_queue_xmit -> validate_xmit_skb -> skb_gso_segment and at this
    point we've already dropped the dst (unless the device sets
    IFF_XMIT_DST_RELEASE, which is not common), so need_ipsec is false and
    we proceed with checksum offload.
    
    Make need_ipsec also check the secpath, which is not dropped on this
    callpath.
    
    Fixes: b40c5f4fde22 ("udp: disable inner UDP checksum offloads in IPsec case")
    Signed-off-by: Sabrina Dubroca <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
um: Re-evaluate thread flags repeatedly [+ + +]
Author: Thomas Weißschuh <[email protected]>
Date:   Fri Jul 4 14:34:47 2025 +0200

    um: Re-evaluate thread flags repeatedly
    
    [ Upstream commit b9e2f2246eb2b5617d53af7b5e4e1b8c916f26a8 ]
    
    The thread flags may change during their processing.
    For example a task_work can queue a new signal to be sent.
    This signal should be delivered before returning to usespace again.
    
    Evaluate the flags repeatedly similar to other architectures.
    
    Signed-off-by: Thomas Weißschuh <[email protected]>
    Reviewed-by: Nam Cao <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
usb: atm: cxacru: Merge cxacru_upload_firmware() into cxacru_heavy_init() [+ + +]
Author: Nathan Chancellor <[email protected]>
Date:   Tue Jul 22 12:11:18 2025 -0700

    usb: atm: cxacru: Merge cxacru_upload_firmware() into cxacru_heavy_init()
    
    commit 8d1b02e5d7e3a6d2acffb1f4c094678fda9e3456 upstream.
    
    After a recent change in clang to expose uninitialized warnings from
    const variables [1], there is a warning in cxacru_heavy_init():
    
      drivers/usb/atm/cxacru.c:1104:6: error: variable 'bp' is used uninitialized whenever 'if' condition is false [-Werror,-Wsometimes-uninitialized]
       1104 |         if (instance->modem_type->boot_rom_patch) {
            |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      drivers/usb/atm/cxacru.c:1113:39: note: uninitialized use occurs here
       1113 |         cxacru_upload_firmware(instance, fw, bp);
            |                                              ^~
      drivers/usb/atm/cxacru.c:1104:2: note: remove the 'if' if its condition is always true
       1104 |         if (instance->modem_type->boot_rom_patch) {
            |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      drivers/usb/atm/cxacru.c:1095:32: note: initialize the variable 'bp' to silence this warning
       1095 |         const struct firmware *fw, *bp;
            |                                       ^
            |                                        = NULL
    
    While the warning is technically correct that bp is conditionally passed
    uninitialized to cxacru_upload_firmware(), it is ultimately a false
    positive warning on the uninitialized use of bp because the same
    condition that initializes bp, instance->modem_type->boot_rom_patch, is
    the same one that gates the use of bp within cxacru_upload_firmware().
    As this warning occurs in clang's frontend before inlining occurs, it
    cannot know that these conditions are indentical to avoid the warning.
    
    Manually inline cxacru_upload_firmware() into cxacru_heavy_init(), as
    that is its only callsite, so that clang can see that bp is initialized
    and used under the same condition, clearing up the warning without any
    functional changes to the code (LLVM was already doing this inlining
    later).
    
    Cc: [email protected]
    Fixes: 1b0e61465234 ("[PATCH] USB ATM: driver for the Conexant AccessRunner chipset cxacru")
    Closes: https://github.com/ClangBuiltLinux/linux/issues/2102
    Link: https://github.com/llvm/llvm-project/commit/2464313eef01c5b1edf0eccf57a32cdee01472c7 [1]
    Signed-off-by: Nathan Chancellor <[email protected]>
    Link: https://lore.kernel.org/r/20250722-usb-cxacru-fix-clang-21-uninit-warning-v2-1-6708a18decd2@kernel.org
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: core: config: Prevent OOB read in SS endpoint companion parsing [+ + +]
Author: Xinyu Liu <[email protected]>
Date:   Mon Jun 30 10:02:56 2025 +0800

    usb: core: config: Prevent OOB read in SS endpoint companion parsing
    
    commit cf16f408364efd8a68f39011a3b073c83a03612d upstream.
    
    usb_parse_ss_endpoint_companion() checks descriptor type before length,
    enabling a potentially odd read outside of the buffer size.
    
    Fix this up by checking the size first before looking at any of the
    fields in the descriptor.
    
    Signed-off-by: Xinyu Liu <[email protected]>
    Cc: stable <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: core: hcd: fix accessing unmapped memory in SINGLE_STEP_SET_FEATURE test [+ + +]
Author: Xu Yang <[email protected]>
Date:   Wed Aug 6 16:39:55 2025 +0800

    usb: core: hcd: fix accessing unmapped memory in SINGLE_STEP_SET_FEATURE test
    
    commit 8fe06185e11ae753414aa6117f0e798aa77567ff upstream.
    
    The USB core will unmap urb->transfer_dma after SETUP stage completes.
    Then the USB controller will access unmapped memory when it received
    device descriptor. If iommu is equipped, the entire test can't be
    completed due to the memory accessing is blocked.
    
    Fix it by calling map_urb_for_dma() again for IN stage. To reduce
    redundant map for urb->transfer_buffer, this will also set
    URB_NO_TRANSFER_DMA_MAP flag before first map_urb_for_dma() to skip
    dma map for urb->transfer_buffer and clear URB_NO_TRANSFER_DMA_MAP
    flag before second map_urb_for_dma().
    
    Fixes: 216e0e563d81 ("usb: core: hcd: use map_urb_for_dma for single step set feature urb")
    Cc: stable <[email protected]>
    Reviewed-by: Jun Li <[email protected]>
    Signed-off-by: Xu Yang <[email protected]>
    Acked-by: Alan Stern <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: core: usb_submit_urb: downgrade type check [+ + +]
Author: Oliver Neukum <[email protected]>
Date:   Thu Jun 12 14:20:25 2025 +0200

    usb: core: usb_submit_urb: downgrade type check
    
    [ Upstream commit 503bbde34cc3dd2acd231f277ba70c3f9ed22e59 ]
    
    Checking for the endpoint type is no reason for a WARN, as that can
    cause a reboot. A driver not checking the endpoint type must not cause a
    reboot, as there is just no point in this.  We cannot prevent a device
    from doing something incorrect as a reaction to a transfer. Hence
    warning for a mere assumption being wrong is not sensible.
    
    Signed-off-by: Oliver Neukum <[email protected]>
    Acked-by: Alan Stern <[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]>

usb: dwc3: Ignore late xferNotReady event to prevent halt timeout [+ + +]
Author: Kuen-Han Tsai <[email protected]>
Date:   Thu Aug 7 17:06:55 2025 +0800

    usb: dwc3: Ignore late xferNotReady event to prevent halt timeout
    
    commit 58577118cc7cec9eb7c1836bf88f865ff2c5e3a3 upstream.
    
    During a device-initiated disconnect, the End Transfer command resets
    the event filter, allowing a new xferNotReady event to be generated
    before the controller is fully halted. Processing this late event
    incorrectly triggers a Start Transfer, which prevents the controller
    from halting and results in a DSTS.DEVCTLHLT bit polling timeout.
    
    Ignore the late xferNotReady event if the controller is already in a
    disconnected state.
    
    Fixes: 72246da40f37 ("usb: Introduce DesignWare USB3 DRD Driver")
    Cc: stable <[email protected]>
    Signed-off-by: Kuen-Han Tsai <[email protected]>
    Acked-by: Thinh Nguyen <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: dwc3: imx8mp: fix device leak at unbind [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Thu Aug 21 12:28:22 2025 -0400

    usb: dwc3: imx8mp: fix device leak at unbind
    
    [ Upstream commit 086a0e516f7b3844e6328a5c69e2708b66b0ce18 ]
    
    Make sure to drop the reference to the dwc3 device taken by
    of_find_device_by_node() on probe errors and on driver unbind.
    
    Fixes: 6dd2565989b4 ("usb: dwc3: add imx8mp dwc3 glue layer driver")
    Cc: [email protected]      # 5.12
    Cc: Li Jun <[email protected]>
    Signed-off-by: Johan Hovold <[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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: dwc3: meson-g12a: fix device leaks at unbind [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Thu Jul 24 11:19:07 2025 +0200

    usb: dwc3: meson-g12a: fix device leaks at unbind
    
    commit 93b400f4951404d040197943a25d6fef9f8ccabb upstream.
    
    Make sure to drop the references taken to the child devices by
    of_find_device_by_node() during probe on driver unbind.
    
    Fixes: c99993376f72 ("usb: dwc3: Add Amlogic G12A DWC3 glue")
    Cc: [email protected]      # 5.2
    Cc: Neil Armstrong <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Martin Blumenstingl <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: dwc3: pci: add support for the Intel Wildcat Lake [+ + +]
Author: Heikki Krogerus <[email protected]>
Date:   Tue Aug 12 16:11:00 2025 +0300

    usb: dwc3: pci: add support for the Intel Wildcat Lake
    
    commit 86f390ba59cd8d5755bafe2b163c3e6b89d6bbd9 upstream.
    
    This patch adds the necessary PCI ID for Intel Wildcat Lake
    devices.
    
    Signed-off-by: Heikki Krogerus <[email protected]>
    Cc: stable <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: dwc3: Remove WARN_ON for device endpoint command timeouts [+ + +]
Author: Selvarasu Ganesan <[email protected]>
Date:   Fri Aug 8 18:23:05 2025 +0530

    usb: dwc3: Remove WARN_ON for device endpoint command timeouts
    
    commit 45eae113dccaf8e502090ecf5b3d9e9b805add6f upstream.
    
    This commit addresses a rarely observed endpoint command timeout
    which causes kernel panic due to warn when 'panic_on_warn' is enabled
    and unnecessary call trace prints when 'panic_on_warn' is disabled.
    It is seen during fast software-controlled connect/disconnect testcases.
    The following is one such endpoint command timeout that we observed:
    
    1. Connect
       =======
    ->dwc3_thread_interrupt
     ->dwc3_ep0_interrupt
      ->configfs_composite_setup
       ->composite_setup
        ->usb_ep_queue
         ->dwc3_gadget_ep0_queue
          ->__dwc3_gadget_ep0_queue
           ->__dwc3_ep0_do_control_data
            ->dwc3_send_gadget_ep_cmd
    
    2. Disconnect
       ==========
    ->dwc3_thread_interrupt
     ->dwc3_gadget_disconnect_interrupt
      ->dwc3_ep0_reset_state
       ->dwc3_ep0_end_control_data
        ->dwc3_send_gadget_ep_cmd
    
    In the issue scenario, in Exynos platforms, we observed that control
    transfers for the previous connect have not yet been completed and end
    transfer command sent as a part of the disconnect sequence and
    processing of USB_ENDPOINT_HALT feature request from the host timeout.
    This maybe an expected scenario since the controller is processing EP
    commands sent as a part of the previous connect. It maybe better to
    remove WARN_ON in all places where device endpoint commands are sent to
    avoid unnecessary kernel panic due to warn.
    
    Cc: stable <[email protected]>
    Co-developed-by: Akash M <[email protected]>
    Signed-off-by: Akash M <[email protected]>
    Signed-off-by: Selvarasu Ganesan <[email protected]>
    Acked-by: Thinh Nguyen <[email protected]>
    Reviewed-by: Sebastian Andrzej Siewior <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: udc: renesas_usb3: fix device leak at unbind [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Thu Jul 24 11:19:08 2025 +0200

    usb: gadget: udc: renesas_usb3: fix device leak at unbind
    
    commit 868837b0a94c6b1b1fdbc04d3ba218ca83432393 upstream.
    
    Make sure to drop the reference to the companion device taken during
    probe when the driver is unbound.
    
    Fixes: 39facfa01c9f ("usb: gadget: udc: renesas_usb3: Add register of usb role switch")
    Cc: [email protected]      # 4.19
    Cc: Yoshihiro Shimoda <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: musb: omap2430: fix device leak at unbind [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Thu Jul 24 11:19:09 2025 +0200

    usb: musb: omap2430: fix device leak at unbind
    
    commit 1473e9e7679bd4f5a62d1abccae894fb86de280f upstream.
    
    Make sure to drop the reference to the control device taken by
    of_find_device_by_node() during probe when the driver is unbound.
    
    Fixes: 8934d3e4d0e7 ("usb: musb: omap2430: Don't use omap_get_control_dev()")
    Cc: [email protected]      # 3.13
    Cc: Roger Quadros <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: quirks: Add DELAY_INIT quick for another SanDisk 3.2Gen1 Flash Drive [+ + +]
Author: Miao Li <[email protected]>
Date:   Fri Aug 1 16:27:28 2025 +0800

    usb: quirks: Add DELAY_INIT quick for another SanDisk 3.2Gen1 Flash Drive
    
    commit e664036cf36480414936cd91f4cfa2179a3d8367 upstream.
    
    Another SanDisk 3.2Gen1 Flash Drive also need DELAY_INIT quick,
    or it will randomly work incorrectly on Huawei hisi platforms
    when doing reboot test.
    
    Signed-off-by: Miao Li <[email protected]>
    Cc: stable <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: renesas-xhci: Fix External ROM access timeouts [+ + +]
Author: Marek Vasut <[email protected]>
Date:   Sun Aug 3 00:55:20 2025 +0200

    usb: renesas-xhci: Fix External ROM access timeouts
    
    commit f9420f4757752f056144896024d5ea89e5a611f1 upstream.
    
    Increase the External ROM access timeouts to prevent failures during
    programming of External SPI EEPROM chips. The current timeouts are
    too short for some SPI EEPROMs used with uPD720201 controllers.
    
    The current timeout for Chip Erase in renesas_rom_erase() is 100 ms ,
    the current timeout for Sector Erase issued by the controller before
    Page Program in renesas_fw_download_image() is also 100 ms. Neither
    timeout is sufficient for e.g. the Macronix MX25L5121E or MX25V5126F.
    
    MX25L5121E reference manual [1] page 35 section "ERASE AND PROGRAMMING
    PERFORMANCE" and page 23 section "Table 8. AC CHARACTERISTICS (Temperature
    = 0°C to 70°C for Commercial grade, VCC = 2.7V ~ 3.6V)" row "tCE" indicate
    that the maximum time required for Chip Erase opcode to complete is 2 s,
    and for Sector Erase it is 300 ms .
    
    MX25V5126F reference manual [2] page 47 section "13. ERASE AND PROGRAMMING
    PERFORMANCE (2.3V - 3.6V)" and page 42 section "Table 8. AC CHARACTERISTICS
    (Temperature = -40°C to 85°C for Industrial grade, VCC = 2.3V - 3.6V)" row
    "tCE" indicate that the maximum time required for Chip Erase opcode to
    complete is 3.2 s, and for Sector Erase it is 400 ms .
    
    Update the timeouts such, that Chip Erase timeout is set to 5 seconds,
    and Sector Erase timeout is set to 500 ms. Such lengthy timeouts ought
    to be sufficient for majority of SPI EEPROM chips.
    
    [1] https://www.macronix.com/Lists/Datasheet/Attachments/8634/MX25L5121E,%203V,%20512Kb,%20v1.3.pdf
    [2] https://www.macronix.com/Lists/Datasheet/Attachments/8750/MX25V5126F,%202.5V,%20512Kb,%20v1.1.pdf
    
    Fixes: 2478be82de44 ("usb: renesas-xhci: Add ROM loader for uPD720201")
    Cc: stable <[email protected]>
    Signed-off-by: Marek Vasut <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
USB: storage: Add unusual-devs entry for Novatek NTK96550-based camera [+ + +]
Author: Mael GUERIN <[email protected]>
Date:   Wed Aug 6 18:44:03 2025 +0200

    USB: storage: Add unusual-devs entry for Novatek NTK96550-based camera
    
    commit 6ca8af3c8fb584f3424a827f554ff74f898c27cd upstream.
    
    Add the US_FL_BULK_IGNORE_TAG quirk for Novatek NTK96550-based camera
    to fix USB resets after sending SCSI vendor commands due to CBW and
    CSW tags difference, leading to undesired slowness while communicating
    with the device.
    
    Please find below the copy of /sys/kernel/debug/usb/devices with my
    device plugged in (listed as TechSys USB mass storage here, the
    underlying chipset being the Novatek NTK96550-based camera):
    
    T:  Bus=03 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  3 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=0603 ProdID=8611 Rev= 0.01
    S:  Manufacturer=TechSys
    S:  Product=USB Mass Storage
    S:  SerialNumber=966110000000100
    C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=100mA
    I:* If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Signed-off-by: Mael GUERIN <[email protected]>
    Cc: stable <[email protected]>
    Acked-by: Alan Stern <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: storage: Ignore driver CD mode for Realtek multi-mode Wi-Fi dongles [+ + +]
Author: Zenm Chen <[email protected]>
Date:   Thu Aug 14 00:24:15 2025 +0800

    USB: storage: Ignore driver CD mode for Realtek multi-mode Wi-Fi dongles
    
    commit a3dc32c635bae0ae569f489e00de0e8f015bfc25 upstream.
    
    Many Realtek USB Wi-Fi dongles released in recent years have two modes:
    one is driver CD mode which has Windows driver onboard, another one is
    Wi-Fi mode. Add the US_FL_IGNORE_DEVICE quirk for these multi-mode devices.
    Otherwise, usb_modeswitch may fail to switch them to Wi-Fi mode.
    
    Currently there are only two USB IDs known to be used by these multi-mode
    Wi-Fi dongles: 0bda:1a2b and 0bda:a192.
    
    Information about Mercury MW310UH in /sys/kernel/debug/usb/devices.
    T:  Bus=02 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 12 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=0bda ProdID=a192 Rev= 2.00
    S:  Manufacturer=Realtek
    S:  Product=DISK
    C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA
    I:* If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=(none)
    E:  Ad=8a(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=0b(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Information about D-Link AX9U rev. A1 in /sys/kernel/debug/usb/devices.
    T:  Bus=03 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#= 55 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=0bda ProdID=1a2b Rev= 0.00
    S:  Manufacturer=Realtek
    S:  Product=DISK
    C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:* If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=(none)
    E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Cc: stable <[email protected]>
    Signed-off-by: Zenm Chen <[email protected]>
    Acked-by: Alan Stern <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usb: storage: realtek_cr: Use correct byte order for bcs->Residue [+ + +]
Author: Thorsten Blum <[email protected]>
Date:   Wed Aug 13 16:52:49 2025 +0200

    usb: storage: realtek_cr: Use correct byte order for bcs->Residue
    
    commit 98da66a70ad2396e5a508c4245367797ebc052ce upstream.
    
    Since 'bcs->Residue' has the data type '__le32', convert it to the
    correct byte order of the CPU using this driver when assigning it to
    the local variable 'residue'.
    
    Cc: stable <[email protected]>
    Fixes: 50a6cb932d5c ("USB: usb_storage: add ums-realtek driver")
    Suggested-by: Alan Stern <[email protected]>
    Acked-by: Alan Stern <[email protected]>
    Signed-off-by: Thorsten Blum <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: typec: fusb302: cache PD RX state [+ + +]
Author: Sebastian Reichel <[email protected]>
Date:   Mon Aug 18 16:22:08 2025 -0400

    usb: typec: fusb302: cache PD RX state
    
    [ Upstream commit 1e61f6ab08786d66a11cfc51e13d6f08a6b06c56 ]
    
    This patch fixes a race condition communication error, which ends up in
    PD hard resets when losing the race. Some systems, like the Radxa ROCK
    5B are powered through USB-C without any backup power source and use a
    FUSB302 chip to do the PD negotiation. This means it is quite important
    to avoid hard resets, since that effectively kills the system's
    power-supply.
    
    I've found the following race condition while debugging unplanned power
    loss during booting the board every now and then:
    
    1. lots of TCPM/FUSB302/PD initialization stuff
    2. TCPM ends up in SNK_WAIT_CAPABILITIES (tcpm_set_pd_rx is enabled here)
    3. the remote PD source does not send anything, so TCPM does a SOFT RESET
    4. TCPM ends up in SNK_WAIT_CAPABILITIES for the second time
       (tcpm_set_pd_rx is enabled again, even though it is still on)
    
    At this point I've seen broken CRC good messages being send by the
    FUSB302 with a logic analyzer sniffing the CC lines. Also it looks like
    messages are being lost and things generally going haywire with one of
    the two sides doing a hard reset once a broken CRC good message was send
    to the bus.
    
    I think the system is running into a race condition, that the FIFOs are
    being cleared and/or the automatic good CRC message generation flag is
    being updated while a message is already arriving.
    
    Let's avoid this by caching the PD RX enabled state, as we have already
    processed anything in the FIFOs and are in a good state. As a side
    effect that this also optimizes I2C bus usage :)
    
    As far as I can tell the problem theoretically also exists when TCPM
    enters SNK_WAIT_CAPABILITIES the first time, but I believe this is less
    critical for the following reason:
    
    On devices like the ROCK 5B, which are powered through a TCPM backed
    USB-C port, the bootloader must have done some prior PD communication
    (initial communication must happen within 5 seconds after plugging the
    USB-C plug). This means the first time the kernel TCPM state machine
    reaches SNK_WAIT_CAPABILITIES, the remote side is not sending messages
    actively. On other devices a hard reset simply adds some extra delay and
    things should be good afterwards.
    
    Fixes: c034a43e72dda ("staging: typec: Fairchild FUSB302 Type-c chip driver")
    Cc: stable <[email protected]>
    Signed-off-by: Sebastian Reichel <[email protected]>
    Reviewed-by: Heikki Krogerus <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: typec: intel_pmc_mux: Defer probe if SCU IPC isn't present [+ + +]
Author: Tomasz Michalec <[email protected]>
Date:   Tue Jun 10 17:40:58 2025 +0200

    usb: typec: intel_pmc_mux: Defer probe if SCU IPC isn't present
    
    [ Upstream commit df9a825f330e76c72d1985bc9bdc4b8981e3d15f ]
    
    If pmc_usb_probe is called before SCU IPC is registered, pmc_usb_probe
    will fail.
    
    Return -EPROBE_DEFER when pmc_usb_probe doesn't get SCU IPC device, so
    the probe function can be called again after SCU IPC is initialized.
    
    Signed-off-by: Tomasz Michalec <[email protected]>
    Reviewed-by: Heikki Krogerus <[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]>

usb: typec: maxim_contaminant: disable low power mode when reading comparator values [+ + +]
Author: Amit Sunil Dhamne <[email protected]>
Date:   Sun Aug 24 14:33:12 2025 -0400

    usb: typec: maxim_contaminant: disable low power mode when reading comparator values
    
    [ Upstream commit cabb6c5f4d9e7f49bdf8c0a13c74bd93ee35f45a ]
    
    Low power mode is enabled when reading CC resistance as part of
    `max_contaminant_read_resistance_kohm()` and left in that state.
    However, it's supposed to work with 1uA current source. To read CC
    comparator values current source is changed to 80uA. This causes a storm
    of CC interrupts as it (falsely) detects a potential contaminant. To
    prevent this, disable low power mode current sourcing before reading
    comparator values.
    
    Fixes: 02b332a06397 ("usb: typec: maxim_contaminant: Implement check_contaminant callback")
    Cc: stable <[email protected]>
    Signed-off-by: Amit Sunil Dhamne <[email protected]>
    Reviewed-by: Badhri Jagan Sridharan <[email protected]>
    Rule: add
    Link: https://lore.kernel.org/stable/20250814-fix-upstream-contaminant-v1-1-801ce8089031%40google.com
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    [ adapted macro names from CCLPMODESEL to CCLPMODESEL_MASK ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: typec: maxim_contaminant: re-enable cc toggle if cc is open and port is clean [+ + +]
Author: Amit Sunil Dhamne <[email protected]>
Date:   Sun Aug 24 12:49:53 2025 -0400

    usb: typec: maxim_contaminant: re-enable cc toggle if cc is open and port is clean
    
    [ Upstream commit a381c6d6f646226924809d0ad01a9465786da463 ]
    
    Presently in `max_contaminant_is_contaminant()` if there's no
    contaminant detected previously, CC is open & stopped toggling and no
    contaminant is currently present, TCPC.RC would be programmed to do DRP
    toggling. However, it didn't actively look for a connection. This would
    lead to Type-C not detect *any* new connections. Hence, in the above
    situation, re-enable toggling & program TCPC to look for a new
    connection.
    
    Also, return early if TCPC was looking for connection as this indicates
    TCPC has neither detected a potential connection nor a change in
    contaminant state.
    
    In addition, once dry detection is complete (port is dry), restart
    toggling.
    
    Fixes: 02b332a06397e ("usb: typec: maxim_contaminant: Implement check_contaminant callback")
    Cc: stable <[email protected]>
    Signed-off-by: Amit Sunil Dhamne <[email protected]>
    Reviewed-by: Badhri Jagan Sridharan <[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]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: typec: ucsi: psy: Set current max to 100mA for BC 1.2 and Default [+ + +]
Author: Benson Leung <[email protected]>
Date:   Thu Jul 17 20:08:05 2025 +0000

    usb: typec: ucsi: psy: Set current max to 100mA for BC 1.2 and Default
    
    [ Upstream commit af833e7f7db3cf4c82f063668e1b52297a30ec18 ]
    
    ucsi_psy_get_current_max would return 0mA as the maximum current if
    UCSI detected a BC or a Default USB Power sporce.
    
    The comment in this function is true that we can't tell the difference
    between DCP/CDP or SDP chargers, but we can guarantee that at least 1-unit
    of USB 1.1/2.0 power is available, which is 100mA, which is a better
    fallback value than 0, which causes some userspaces, including the ChromeOS
    power manager, to regard this as a power source that is not providing
    any power.
    
    In reality, 100mA is guaranteed from all sources in these classes.
    
    Signed-off-by: Benson Leung <[email protected]>
    Reviewed-by: Jameson Thies <[email protected]>
    Reviewed-by: Heikki Krogerus <[email protected]>
    Reviewed-by: Sebastian Reichel <[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]>

usb: typec: ucsi: Update power_supply on power role change [+ + +]
Author: Myrrh Periwinkle <[email protected]>
Date:   Mon Jul 21 13:32:51 2025 +0700

    usb: typec: ucsi: Update power_supply on power role change
    
    commit 7616f006db07017ef5d4ae410fca99279aaca7aa upstream.
    
    The current power direction of an USB-C port also influences the
    power_supply's online status, so a power role change should also update
    the power_supply.
    
    Fixes an issue on some systems where plugging in a normal USB device in
    for the first time after a reboot will cause upower to erroneously
    consider the system to be connected to AC power.
    
    Cc: stable <[email protected]>
    Fixes: 0e6371fbfba3 ("usb: typec: ucsi: Report power supply changes")
    Signed-off-by: Myrrh Periwinkle <[email protected]>
    Reviewed-by: Heikki Krogerus <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: xhci: Avoid showing errors during surprise removal [+ + +]
Author: Mario Limonciello <[email protected]>
Date:   Thu Jul 17 10:31:05 2025 +0300

    usb: xhci: Avoid showing errors during surprise removal
    
    [ Upstream commit 4b9c60e440525b729ac5f071e00bcee12e0a7e84 ]
    
    When a USB4 dock is unplugged from a system it won't respond to ring
    events. The PCI core handles the surprise removal event and notifies
    all PCI drivers. The XHCI PCI driver sets a flag that the device is
    being removed as well.
    
    When that flag is set don't show messages in the cleanup path for
    marking the controller dead.
    
    Signed-off-by: Mario Limonciello <[email protected]>
    Signed-off-by: Mathias Nyman <[email protected]>
    Acked-by: Mathias Nyman <[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]>

usb: xhci: Avoid showing warnings for dying controller [+ + +]
Author: Mario Limonciello <[email protected]>
Date:   Thu Jul 17 10:31:06 2025 +0300

    usb: xhci: Avoid showing warnings for dying controller
    
    [ Upstream commit 65fc0fc137b5da3ee1f4ca4f61050fcb203d7582 ]
    
    When a USB4 dock is unplugged from a system it won't respond to ring
    events. The PCI core handles the surprise removal event and notifies
    all PCI drivers. The XHCI PCI driver sets a flag that the device is
    being removed, and when the device stops responding a flag is also
    added to indicate it's dying.
    
    When that flag is set don't bother to show warnings about a missing
    controller.
    
    Signed-off-by: Mario Limonciello <[email protected]>
    Signed-off-by: Mathias Nyman <[email protected]>
    Acked-by: Mathias Nyman <[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]>

usb: xhci: Fix slot_id resource race conflict [+ + +]
Author: Weitao Wang <[email protected]>
Date:   Sun Aug 24 11:29:04 2025 -0400

    usb: xhci: Fix slot_id resource race conflict
    
    [ Upstream commit 2eb03376151bb8585caa23ed2673583107bb5193 ]
    
    xHC controller may immediately reuse a slot_id after it's disabled,
    giving it to a new enumerating device before the xhci driver freed
    all resources related to the disabled device.
    
    In such a scenario, device-A with slot_id equal to 1 is disconnecting
    while device-B is enumerating, device-B will fail to enumerate in the
    follow sequence.
    
    1.[device-A] send disable slot command
    2.[device-B] send enable slot command
    3.[device-A] disable slot command completed and wakeup waiting thread
    4.[device-B] enable slot command completed with slot_id equal to 1 and
                 wakeup waiting thread
    5.[device-B] driver checks that slot_id is still in use (by device-A) in
                 xhci_alloc_virt_device, and fail to enumerate due to this
                 conflict
    6.[device-A] xhci->devs[slot_id] set to NULL in xhci_free_virt_device
    
    To fix driver's slot_id resources conflict, clear xhci->devs[slot_id] and
    xhci->dcbba->dev_context_ptrs[slot_id] pointers in the interrupt context
    when disable slot command completes successfully. Simultaneously, adjust
    function xhci_free_virt_device to accurately handle device release.
    
    [minor smatch warning and commit message fix -Mathias]
    
    Cc: [email protected]
    Fixes: 7faac1953ed1 ("xhci: avoid race between disable slot command and host runtime suspend")
    Signed-off-by: Weitao Wang <[email protected]>
    Signed-off-by: Mathias Nyman <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: xhci: print xhci->xhc_state when queue_command failed [+ + +]
Author: Su Hui <[email protected]>
Date:   Fri Jul 25 14:01:18 2025 +0800

    usb: xhci: print xhci->xhc_state when queue_command failed
    
    [ Upstream commit 7919407eca2ef562fa6c98c41cfdf6f6cdd69d92 ]
    
    When encounters some errors like these:
    xhci_hcd 0000:4a:00.2: xHCI dying or halted, can't queue_command
    xhci_hcd 0000:4a:00.2: FIXME: allocate a command ring segment
    usb usb5-port6: couldn't allocate usb_device
    
    It's hard to know whether xhc_state is dying or halted. So it's better
    to print xhc_state's value which can help locate the resaon of the bug.
    
    Signed-off-by: Su Hui <[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]>

usb: xhci: Set avg_trb_len = 8 for EP0 during Address Device Command [+ + +]
Author: Jay Chen <[email protected]>
Date:   Thu Jul 17 10:31:07 2025 +0300

    usb: xhci: Set avg_trb_len = 8 for EP0 during Address Device Command
    
    [ Upstream commit f72b9aa821a2bfe4b6dfec4be19f264d0673b008 ]
    
    There is a subtle contradiction between sections of the xHCI 1.2 spec
    regarding the initialization of Input Endpoint Context fields. Section
    4.8.2 ("Endpoint Context Initialization") states that all fields should
    be initialized to 0. However, Section 6.2.3 ("Endpoint Context", p.453)
    specifies that the Average TRB Length (avg_trb_len) field shall be
    greater than 0, and explicitly notes (p.454): "Software shall set
    Average TRB Length to '8' for control endpoints."
    
    Strictly setting all fields to 0 during initialization conflicts with
    the specific recommendation for control endpoints. In practice, setting
    avg_trb_len = 0 is not meaningful for the hardware/firmware, as the
    value is used for bandwidth calculation.
    
    Motivation: Our company is developing a custom Virtual xHC hardware
    platform that strictly follows the xHCI spec and its recommendations.
    During validation, we observed that enumeration fails and a parameter
    error (TRB Completion Code = 5) is reported if avg_trb_len for EP0 is
    not set to 8 as recommended by Section 6.2.3. This demonstrates the
    importance of assigning a meaningful, non-zero value to avg_trb_len,
    even in virtualized or emulated environments.
    
    This patch explicitly sets avg_trb_len to 8 for EP0 in
    xhci_setup_addressable_virt_dev(), as recommended in Section 6.2.3, to
    prevent potential issues with xHCI host controllers that enforce the
    spec strictly.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=220033
    Signed-off-by: Jay Chen <[email protected]>
    Signed-off-by: Mathias Nyman <[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]>

 
Linux: use uniform permission checks for all mount propagation changes [+ + +]
Author: Al Viro <[email protected]>
Date:   Thu Aug 14 01:44:31 2025 -0400

    use uniform permission checks for all mount propagation changes
    
    [ Upstream commit cffd0441872e7f6b1fce5e78fb1c99187a291330 ]
    
    do_change_type() and do_set_group() are operating on different
    aspects of the same thing - propagation graph.  The latter
    asks for mounts involved to be mounted in namespace(s) the caller
    has CAP_SYS_ADMIN for.  The former is a mess - originally it
    didn't even check that mount *is* mounted.  That got fixed,
    but the resulting check turns out to be too strict for userland -
    in effect, we check that mount is in our namespace, having already
    checked that we have CAP_SYS_ADMIN there.
    
    What we really need (in both cases) is
            * only touch mounts that are mounted.  That's a must-have
    constraint - data corruption happens if it get violated.
            * don't allow to mess with a namespace unless you already
    have enough permissions to do so (i.e. CAP_SYS_ADMIN in its userns).
    
    That's an equivalent of what do_set_group() does; let's extract that
    into a helper (may_change_propagation()) and use it in both
    do_set_group() and do_change_type().
    
    Fixes: 12f147ddd6de "do_change_type(): refuse to operate on unmounted/not ours mounts"
    Acked-by: Andrei Vagin <[email protected]>
    Reviewed-by: Pavel Tikhomirov <[email protected]>
    Tested-by: Pavel Tikhomirov <[email protected]>
    Reviewed-by: Christian Brauner <[email protected]>
    Signed-off-by: Al Viro <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
vfio/mlx5: fix possible overflow in tracking max message size [+ + +]
Author: Artem Sadovnikov <[email protected]>
Date:   Tue Jul 1 14:40:17 2025 +0000

    vfio/mlx5: fix possible overflow in tracking max message size
    
    [ Upstream commit b3060198483bac43ec113c62ae3837076f61f5de ]
    
    MLX cap pg_track_log_max_msg_size consists of 5 bits, value of which is
    used as power of 2 for max_msg_size. This can lead to multiplication
    overflow between max_msg_size (u32) and integer constant, and afterwards
    incorrect value is being written to rq_size.
    
    Fix this issue by extending integer constant to u64 type.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Suggested-by: Alex Williamson <[email protected]>
    Signed-off-by: Artem Sadovnikov <[email protected]>
    Reviewed-by: Yishai Hadas <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alex Williamson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
vfio/type1: conditional rescheduling while pinning [+ + +]
Author: Keith Busch <[email protected]>
Date:   Tue Jul 15 11:46:22 2025 -0700

    vfio/type1: conditional rescheduling while pinning
    
    [ Upstream commit b1779e4f209c7ff7e32f3c79d69bca4e3a3a68b6 ]
    
    A large DMA mapping request can loop through dma address pinning for
    many pages. In cases where THP can not be used, the repeated vmf_insert_pfn can
    be costly, so let the task reschedule as need to prevent CPU stalls. Failure to
    do so has potential harmful side effects, like increased memory pressure
    as unrelated rcu tasks are unable to make their reclaim callbacks and
    result in OOM conditions.
    
     rcu: INFO: rcu_sched self-detected stall on CPU
     rcu:   36-....: (20999 ticks this GP) idle=b01c/1/0x4000000000000000 softirq=35839/35839 fqs=3538
     rcu:            hardirqs   softirqs   csw/system
     rcu:    number:        0        107            0
     rcu:   cputime:       50          0        10446   ==> 10556(ms)
     rcu:   (t=21075 jiffies g=377761 q=204059 ncpus=384)
    ...
      <TASK>
      ? asm_sysvec_apic_timer_interrupt+0x16/0x20
      ? walk_system_ram_range+0x63/0x120
      ? walk_system_ram_range+0x46/0x120
      ? pgprot_writethrough+0x20/0x20
      lookup_memtype+0x67/0xf0
      track_pfn_insert+0x20/0x40
      vmf_insert_pfn_prot+0x88/0x140
      vfio_pci_mmap_huge_fault+0xf9/0x1b0 [vfio_pci_core]
      __do_fault+0x28/0x1b0
      handle_mm_fault+0xef1/0x2560
      fixup_user_fault+0xf5/0x270
      vaddr_get_pfns+0x169/0x2f0 [vfio_iommu_type1]
      vfio_pin_pages_remote+0x162/0x8e0 [vfio_iommu_type1]
      vfio_iommu_type1_ioctl+0x1121/0x1810 [vfio_iommu_type1]
      ? futex_wake+0x1c1/0x260
      x64_sys_call+0x234/0x17a0
      do_syscall_64+0x63/0x130
      ? exc_page_fault+0x63/0x130
      entry_SYSCALL_64_after_hwframe+0x4b/0x53
    
    Signed-off-by: Keith Busch <[email protected]>
    Reviewed-by: Paul E. McKenney <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alex Williamson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
vhost/vsock: Avoid allocating arbitrarily-sized SKBs [+ + +]
Author: Will Deacon <[email protected]>
Date:   Thu Jul 17 10:01:08 2025 +0100

    vhost/vsock: Avoid allocating arbitrarily-sized SKBs
    
    commit 10a886aaed293c4db3417951f396827216299e3d upstream.
    
    vhost_vsock_alloc_skb() returns NULL for packets advertising a length
    larger than VIRTIO_VSOCK_MAX_PKT_BUF_SIZE in the packet header. However,
    this is only checked once the SKB has been allocated and, if the length
    in the packet header is zero, the SKB may not be freed immediately.
    
    Hoist the size check before the SKB allocation so that an iovec larger
    than VIRTIO_VSOCK_MAX_PKT_BUF_SIZE + the header size is rejected
    outright. The subsequent check on the length field in the header can
    then simply check that the allocated SKB is indeed large enough to hold
    the packet.
    
    Cc: <[email protected]>
    Fixes: 71dc9ec9ac7d ("virtio/vsock: replace virtio_vsock_pkt with sk_buff")
    Reviewed-by: Stefano Garzarella <[email protected]>
    Signed-off-by: Will Deacon <[email protected]>
    Message-Id: <[email protected]>
    Signed-off-by: Michael S. Tsirkin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
vhost: fail early when __vhost_add_used() fails [+ + +]
Author: Jason Wang <[email protected]>
Date:   Mon Jul 14 16:47:53 2025 +0800

    vhost: fail early when __vhost_add_used() fails
    
    [ Upstream commit b4ba1207d45adaafa2982c035898b36af2d3e518 ]
    
    This patch fails vhost_add_used_n() early when __vhost_add_used()
    fails to make sure used idx is not updated with stale used ring
    information.
    
    Reported-by: Eugenio Pérez <[email protected]>
    Signed-off-by: Jason Wang <[email protected]>
    Message-Id: <[email protected]>
    Signed-off-by: Michael S. Tsirkin <[email protected]>
    Tested-by: Lei Yang <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
vsock/virtio: Resize receive buffers so that each SKB fits in a 4K page [+ + +]
Author: Will Deacon <[email protected]>
Date:   Thu Jul 17 10:01:11 2025 +0100

    vsock/virtio: Resize receive buffers so that each SKB fits in a 4K page
    
    [ Upstream commit 03a92f036a04fed2b00d69f5f46f1a486e70dc5c ]
    
    When allocating receive buffers for the vsock virtio RX virtqueue, an
    SKB is allocated with a 4140 data payload (the 44-byte packet header +
    VIRTIO_VSOCK_DEFAULT_RX_BUF_SIZE). Even when factoring in the SKB
    overhead, the resulting 8KiB allocation thanks to the rounding in
    kmalloc_reserve() is wasteful (~3700 unusable bytes) and results in a
    higher-order page allocation on systems with 4KiB pages just for the
    sake of a few hundred bytes of packet data.
    
    Limit the vsock virtio RX buffers to 4KiB per SKB, resulting in much
    better memory utilisation and removing the need to allocate higher-order
    pages entirely.
    
    Reviewed-by: Stefano Garzarella <[email protected]>
    Signed-off-by: Will Deacon <[email protected]>
    Message-Id: <[email protected]>
    Signed-off-by: Michael S. Tsirkin <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

vsock/virtio: Validate length in packet header before skb_put() [+ + +]
Author: Will Deacon <[email protected]>
Date:   Thu Jul 17 10:01:09 2025 +0100

    vsock/virtio: Validate length in packet header before skb_put()
    
    commit 0dab92484474587b82e8e0455839eaf5ac7bf894 upstream.
    
    When receiving a vsock packet in the guest, only the virtqueue buffer
    size is validated prior to virtio_vsock_skb_rx_put(). Unfortunately,
    virtio_vsock_skb_rx_put() uses the length from the packet header as the
    length argument to skb_put(), potentially resulting in SKB overflow if
    the host has gone wonky.
    
    Validate the length as advertised by the packet header before calling
    virtio_vsock_skb_rx_put().
    
    Cc: <[email protected]>
    Fixes: 71dc9ec9ac7d ("virtio/vsock: replace virtio_vsock_pkt with sk_buff")
    Signed-off-by: Will Deacon <[email protected]>
    Message-Id: <[email protected]>
    Signed-off-by: Michael S. Tsirkin <[email protected]>
    Reviewed-by: Stefano Garzarella <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
vt: defkeymap: Map keycodes above 127 to K_HOLE [+ + +]
Author: Myrrh Periwinkle <[email protected]>
Date:   Wed Jul 2 21:17:58 2025 +0700

    vt: defkeymap: Map keycodes above 127 to K_HOLE
    
    commit b43cb4ff85da5cf29c4cd351ef1d7dd8210780f7 upstream.
    
    The maximum number of keycodes got bumped to 256 a very long time ago,
    but the default keymaps were never adjusted to match. This is causing
    the kernel to interpret keycodes above 127 as U+0000 if the shipped
    generated keymap is used.
    
    Fix this by mapping all keycodes above 127 to K_HOLE so the kernel
    ignores them.
    
    The contents of this patche were generated by rerunning `loadkeys
    --mktable --unicode` and only including the changes to map keycodes
    above 127 to K_HOLE.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Myrrh Periwinkle <[email protected]>
    Cc: stable <[email protected]>
    Reviewed-by: Jiri Slaby <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

vt: keyboard: Don't process Unicode characters in K_OFF mode [+ + +]
Author: Myrrh Periwinkle <[email protected]>
Date:   Wed Jul 2 21:17:57 2025 +0700

    vt: keyboard: Don't process Unicode characters in K_OFF mode
    
    commit b1cc2092ea7a52e2c435aee6d2b1bcb773202663 upstream.
    
    We don't process Unicode characters if the virtual terminal is in raw
    mode, so there's no reason why we shouldn't do the same for K_OFF
    (especially since people would expect K_OFF to actually turn off all VT
    key processing).
    
    Fixes: 9fc3de9c8356 ("vt: Add virtual console keyboard mode OFF")
    Signed-off-by: Myrrh Periwinkle <[email protected]>
    Cc: stable <[email protected]>
    Reviewed-by: Jiri Slaby <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
watchdog: dw_wdt: Fix default timeout [+ + +]
Author: Sebastian Reichel <[email protected]>
Date:   Thu Jul 17 18:55:02 2025 +0200

    watchdog: dw_wdt: Fix default timeout
    
    [ Upstream commit ac3dbb91e0167d017f44701dd51c1efe30d0c256 ]
    
    The Synopsys Watchdog driver sets the default timeout to 30 seconds,
    but on some devices this is not a valid timeout. E.g. on RK3588 the
    actual timeout being used is 44 seconds instead.
    
    Once the watchdog is started the value is updated accordingly, but
    it would be better to expose a sensible timeout to userspace without
    the need to first start the watchdog.
    
    Signed-off-by: Sebastian Reichel <[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: iTCO_wdt: Report error if timeout configuration fails [+ + +]
Author: Ziyan Fu <[email protected]>
Date:   Fri Jul 4 15:35:18 2025 +0800

    watchdog: iTCO_wdt: Report error if timeout configuration fails
    
    [ Upstream commit 40efc43eb7ffb5a4e2f998c13b8cfb555e671b92 ]
    
    The driver probes with the invalid timeout value when
    'iTCO_wdt_set_timeout()' fails, as its return value is not checked. In
    this case, when executing "wdctl", we may get:
    
    Device:        /dev/watchdog0
    Timeout:       30 seconds
    Timeleft:      613 seconds
    
    The timeout value is the value of "heartbeat" or "WATCHDOG_TIMEOUT", and
    the timeleft value is calculated from the register value we actually read
    (0xffff) by masking with 0x3ff and converting ticks to seconds (* 6 / 10).
    
    Add error handling to return the failure code if 'iTCO_wdt_set_timeout()'
    fails, ensuring the driver probe fails and prevents invalid operation.
    
    Signed-off-by: Ziyan Fu <[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: sbsa: Adjust keepalive timeout to avoid MediaTek WS0 race condition [+ + +]
Author: Aaron Plattner <[email protected]>
Date:   Mon Jul 21 16:06:39 2025 -0700

    watchdog: sbsa: Adjust keepalive timeout to avoid MediaTek WS0 race condition
    
    [ Upstream commit 48defdf6b083f74a44e1f742db284960d3444aec ]
    
    The MediaTek implementation of the sbsa_gwdt watchdog has a race
    condition where a write to SBSA_GWDT_WRR is ignored if it occurs while
    the hardware is processing a timeout refresh that asserts WS0.
    
    Detect this based on the hardware implementer and adjust
    wdd->min_hw_heartbeat_ms to avoid the race by forcing the keepalive ping
    to be one second later.
    
    Signed-off-by: Aaron Plattner <[email protected]>
    Acked-by: Timur Tabi <[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]>

 
wifi: ath11k: fix dest ring-buffer corruption [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Wed Jun 4 16:34:53 2025 +0200

    wifi: ath11k: fix dest ring-buffer corruption
    
    commit 8c1ba5091fa9a2d1478da63173b16a701bdf86bb upstream.
    
    Add the missing memory barrier to make sure that destination ring
    descriptors are read after the head pointers to avoid using stale data
    on weakly ordered architectures like aarch64.
    
    The barrier is added to the ath11k_hal_srng_access_begin() helper for
    symmetry with follow-on fixes for source ring buffer corruption which
    will add barriers to ath11k_hal_srng_access_end().
    
    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
    Signed-off-by: Johan Hovold <[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: Greg Kroah-Hartman <[email protected]>

wifi: ath11k: fix dest ring-buffer corruption when ring is full [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Wed Jun 4 16:34:57 2025 +0200

    wifi: ath11k: fix dest ring-buffer corruption when ring is full
    
    commit aa6956150f820e6a6deba44be325ddfcb5b10f88 upstream.
    
    Add the missing memory barriers to make sure that destination ring
    descriptors are read before updating the tail pointer (and passing
    ownership to the device) to avoid memory corruption on weakly ordered
    architectures like aarch64 when the ring is full.
    
    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
    Signed-off-by: Johan Hovold <[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: Greg Kroah-Hartman <[email protected]>

wifi: ath11k: fix source ring-buffer corruption [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Wed Jun 4 16:34:56 2025 +0200

    wifi: ath11k: fix source ring-buffer corruption
    
    commit 6efa0df54022c6c9fd4d294b87622c7fcdc418c8 upstream.
    
    Add the missing memory barrier to make sure that LMAC source ring
    descriptors are written before updating the head pointer to avoid
    passing stale data to the firmware on weakly ordered architectures like
    aarch64.
    
    Note that non-LMAC rings use MMIO write accessors which have the
    required write memory barrier.
    
    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
    Signed-off-by: Johan Hovold <[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: Greg Kroah-Hartman <[email protected]>

wifi: ath12k: Add memset and update default rate value in wmi tx completion [+ + +]
Author: Sarika Sharma <[email protected]>
Date:   Tue Jun 3 12:05:12 2025 +0530

    wifi: ath12k: Add memset and update default rate value in wmi tx completion
    
    [ Upstream commit 9903c0986f782dfc511d7638b6f15fb6e8600cd3 ]
    
    When both AP/STA and monitor interfaces are enabled, ieee80211_tx_status()
    is invoked from two paths: the TX completion handler for data frames
    and the WMI TX completion handler for management frames.
    In the data path, the skb->cb is properly zeroed using memset, but in
    the WMI path, this step is missing.
    
    As a result, mac80211 encountered uninitialized (junk) values in
    skb->cb when generating the radiotap header for monitor mode, leading
    to invalid radiotap lengths.
    
    Hence, explicitly zero the status field in the skb->cb using memset
    in WMI TX completion path to ensure consistent and correct behavior
    during WMI tx completion path.
    
    Additionally, set info->status.rates[0].idx = -1 to indicate that
    no valid rate information is available, avoiding misinterpretation of
    garbage values.
    
    Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1
    
    Signed-off-by: Sarika Sharma <[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: Correct tid cleanup when tid setup fails [+ + +]
Author: Sarika Sharma <[email protected]>
Date:   Mon Jul 21 11:47:49 2025 +0530

    wifi: ath12k: Correct tid cleanup when tid setup fails
    
    [ Upstream commit 4a2bf707270f897ab8077baee8ed5842a5321686 ]
    
    Currently, if any error occurs during ath12k_dp_rx_peer_tid_setup(),
    the tid value is already incremented, even though the corresponding
    TID is not actually allocated. Proceed to
    ath12k_dp_rx_peer_tid_delete() starting from unallocated tid,
    which might leads to freeing unallocated TID and cause potential
    crash or out-of-bounds access.
    
    Hence, fix by correctly decrementing tid before cleanup to match only
    the successfully allocated TIDs.
    
    Also, remove tid-- from failure case of ath12k_dp_rx_peer_frag_setup(),
    as decrementing the tid before cleanup in loop will take care of this.
    
    Compile tested only.
    
    Signed-off-by: Sarika Sharma <[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: Decrement TID on RX peer frag setup error handling [+ + +]
Author: Karthikeyan Kathirvel <[email protected]>
Date:   Mon May 26 09:17:13 2025 +0530

    wifi: ath12k: Decrement TID on RX peer frag setup error handling
    
    [ Upstream commit 7c0884fcd2ddde0544d2e77f297ae461e1f53f58 ]
    
    Currently, TID is not decremented before peer cleanup, during error
    handling path of ath12k_dp_rx_peer_frag_setup(). This could lead to
    out-of-bounds access in peer->rx_tid[].
    
    Hence, add a decrement operation for TID, before peer cleanup to
    ensures proper cleanup and prevents out-of-bounds access issues when
    the RX peer frag setup fails.
    
    Found during code review. Compile tested only.
    
    Signed-off-by: Karthikeyan Kathirvel <[email protected]>
    Signed-off-by: Sarika Sharma <[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: Enable REO queue lookup table feature on QCN9274 hw2.0 [+ + +]
Author: Raj Kumar Bhagat <[email protected]>
Date:   Mon Jun 9 08:48:50 2025 +0530

    wifi: ath12k: Enable REO queue lookup table feature on QCN9274 hw2.0
    
    [ Upstream commit b79742b84e16e41c4a09f3126436f39f36e75c06 ]
    
    The commit 89ac53e96217 ("wifi: ath12k: Enable REO queue lookup table
    feature on QCN9274") originally intended to enable the reoq_lut_support
    hardware parameter flag for both QCN9274 hw1.0 and hw2.0. However,
    it enabled it only for QCN9274 hw1.0.
    
    Hence, enable REO queue lookup table feature on QCN9274 hw2.0.
    
    Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.4.1-00199-QCAHKSWPL_SILICONZ-1
    
    Signed-off-by: Raj Kumar Bhagat <[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 dest ring-buffer corruption [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Tue Jun 17 10:43:59 2025 +0200

    wifi: ath12k: fix dest ring-buffer corruption
    
    commit 8157ce533a60521f21d466eb4de45d9735b19484 upstream.
    
    Add the missing memory barrier to make sure that destination ring
    descriptors are read after the head pointers to avoid using stale data
    on weakly ordered architectures like aarch64.
    
    The barrier is added to the ath12k_hal_srng_access_begin() helper for
    symmetry with follow-on fixes for source ring buffer corruption which
    will add barriers to ath12k_hal_srng_access_end().
    
    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
    Signed-off-by: Johan Hovold <[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: Greg Kroah-Hartman <[email protected]>

wifi: ath12k: fix dest ring-buffer corruption when ring is full [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Tue Jun 17 10:44:02 2025 +0200

    wifi: ath12k: fix dest ring-buffer corruption when ring is full
    
    commit ed32169be1ccb9b1a295275ba7746dc6bf103e80 upstream.
    
    Add the missing memory barriers to make sure that destination ring
    descriptors are read before updating the tail pointer (and passing
    ownership to the device) to avoid memory corruption on weakly ordered
    architectures like aarch64 when the ring is full.
    
    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
    Signed-off-by: Johan Hovold <[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: Greg Kroah-Hartman <[email protected]>

wifi: ath12k: fix source ring-buffer corruption [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Tue Jun 17 10:44:01 2025 +0200

    wifi: ath12k: fix source ring-buffer corruption
    
    commit e834da4cbd6fe1d24f89368bf0c80adcad212726 upstream.
    
    Add the missing memory barrier to make sure that LMAC source ring
    descriptors are written before updating the head pointer to avoid
    passing stale data to the firmware on weakly ordered architectures like
    aarch64.
    
    Note that non-LMAC rings use MMIO write accessors which have the
    required write memory barrier.
    
    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
    Signed-off-by: Johan Hovold <[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: Greg Kroah-Hartman <[email protected]>

wifi: brcmsmac: Remove const from tbl_ptr parameter in wlc_lcnphy_common_read_table() [+ + +]
Author: Nathan Chancellor <[email protected]>
Date:   Tue Jul 15 19:45:23 2025 -0700

    wifi: brcmsmac: Remove const from tbl_ptr parameter in wlc_lcnphy_common_read_table()
    
    commit 81284e86bf8849f8e98e8ead3ff5811926b2107f upstream.
    
    A new warning in clang [1] complains that diq_start in
    wlc_lcnphy_tx_iqlo_cal() is passed uninitialized as a const pointer to
    wlc_lcnphy_common_read_table():
    
      drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_lcn.c:2728:13: error: variable 'diq_start' is uninitialized when passed as a const pointer argument here [-Werror,-Wuninitialized-const-pointer]
       2728 |                                                      &diq_start, 1, 16, 69);
            |                                                       ^~~~~~~~~
    
    The table pointer passed to wlc_lcnphy_common_read_table() should not be
    considered constant, as wlc_phy_read_table() is ultimately going to
    update it. Remove the const qualifier from the tbl_ptr to clear up the
    warning.
    
    Cc: [email protected]
    Closes: https://github.com/ClangBuiltLinux/linux/issues/2108
    Fixes: 5b435de0d786 ("net: wireless: add brcm80211 drivers")
    Link: https://github.com/llvm/llvm-project/commit/00dacf8c22f065cb52efb14cd091d441f19b319e [1]
    Signed-off-by: Nathan Chancellor <[email protected]>
    Acked-by: Arend van Spriel <[email protected]>>
    Link: https://patch.msgid.link/20250715-brcmsmac-fix-uninit-const-pointer-v1-1-16e6a51a8ef4@kernel.org
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

wifi: cfg80211: Fix interface type validation [+ + +]
Author: Ilan Peer <[email protected]>
Date:   Wed Jul 9 23:37:55 2025 +0300

    wifi: cfg80211: Fix interface type validation
    
    [ Upstream commit 14450be2332a49445106403492a367412b8c23f4 ]
    
    Fix a condition that verified valid values of interface types.
    
    Signed-off-by: Ilan Peer <[email protected]>
    Signed-off-by: Miri Korenblit <[email protected]>
    Link: https://patch.msgid.link/20250709233537.7ad199ca5939.I0ac1ff74798bf59a87a57f2e18f2153c308b119b@changeid
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: cfg80211: reject HTC bit for management frames [+ + +]
Author: Johannes Berg <[email protected]>
Date:   Fri Jul 18 20:23:06 2025 +0200

    wifi: cfg80211: reject HTC bit for management frames
    
    [ Upstream commit be06a8c7313943109fa870715356503c4c709cbc ]
    
    Management frames sent by userspace should never have the
    order/HTC bit set, reject that. It could also cause some
    confusion with the length of the buffer and the header so
    the validation might end up wrong.
    
    Link: https://patch.msgid.link/20250718202307.97a0455f0f35.I1805355c7e331352df16611839bc8198c855a33f@changeid
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: iwlegacy: Check rate_idx range after addition [+ + +]
Author: Stanislaw Gruszka <[email protected]>
Date:   Sun May 25 16:45:24 2025 +0200

    wifi: iwlegacy: Check rate_idx range after addition
    
    [ Upstream commit 0de19d5ae0b2c5b18b88c5c7f0442f707a207409 ]
    
    Limit rate_idx to IL_LAST_OFDM_RATE for 5GHz band for thinkable case
    the index is incorrect.
    
    Reported-by: Fedor Pchelkin <[email protected]>
    Reported-by: Alexei Safin <[email protected]>
    Signed-off-by: Stanislaw Gruszka <[email protected]>
    Reviewed-by: Fedor Pchelkin <[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: dvm: fix potential overflow in rs_fill_link_cmd() [+ + +]
Author: Rand Deeb <[email protected]>
Date:   Wed Mar 13 13:17:55 2024 +0300

    wifi: iwlwifi: dvm: fix potential overflow in rs_fill_link_cmd()
    
    [ Upstream commit e3ad987e9dc7d1e12e3f2f1e623f0e174cd0ca78 ]
    
    The 'index' variable in the rs_fill_link_cmd() function can reach
    LINK_QUAL_MAX_RETRY_NUM during the execution of the inner loop. This
    variable is used as an index for the lq_cmd->rs_table array, which has a
    size of LINK_QUAL_MAX_RETRY_NUM, without proper validation.
    
    Modify the condition of the inner loop to ensure that the 'index' variable
    does not exceed LINK_QUAL_MAX_RETRY_NUM - 1, thereby preventing any
    potential overflow issues.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Signed-off-by: Rand Deeb <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Miri Korenblit <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: iwlwifi: fw: Fix possible memory leak in iwl_fw_dbg_collect [+ + +]
Author: Pagadala Yesu Anjaneyulu <[email protected]>
Date:   Wed Jun 11 22:26:23 2025 +0300

    wifi: iwlwifi: fw: Fix possible memory leak in iwl_fw_dbg_collect
    
    [ Upstream commit cc8d9cbf269dab363c768bfa9312265bc807fca5 ]
    
    Ensure descriptor is freed on error to avoid memory leak.
    
    Signed-off-by: Pagadala Yesu Anjaneyulu <[email protected]>
    Signed-off-by: Miri Korenblit <[email protected]>
    Link: https://patch.msgid.link/20250611222325.8158d15ec866.Ifa3e422c302397111f20a16da7509e6574bc19e3@changeid
    Signed-off-by: Sasha Levin <[email protected]>

wifi: iwlwifi: mvm: fix scan request validation [+ + +]
Author: Avraham Stern <[email protected]>
Date:   Wed Jul 9 23:05:43 2025 +0300

    wifi: iwlwifi: mvm: fix scan request validation
    
    [ Upstream commit 7c2f3ec7707188d8d5269ae2dce97d7be3e9f261 ]
    
    The scan request validation function uses bitwise and instead
    of logical and. Fix it.
    
    Signed-off-by: Avraham Stern <[email protected]>
    Reviewed-by: Ilan Peer <[email protected]>
    Signed-off-by: Miri Korenblit <[email protected]>
    Link: https://patch.msgid.link/20250709230308.3fbc1f27871b.I7a8ee91f463c1a2d9d8561c8232e196885d02c43@changeid
    Signed-off-by: Sasha Levin <[email protected]>

wifi: iwlwifi: mvm: set gtk id also in older FWs [+ + +]
Author: Miri Korenblit <[email protected]>
Date:   Thu Jul 10 21:28:27 2025 +0300

    wifi: iwlwifi: mvm: set gtk id also in older FWs
    
    [ Upstream commit 61be9803f322ab46f31ba944c6ef7de195891f64 ]
    
    We use gtk[i].id, but it is not even set in older FW APIs
    (iwl_wowlan_status_v6 and iwl_wowlan_status_v7).
    Set it also in older FWs.
    
    Reviewed-by: Johannes Berg <[email protected]>
    Signed-off-by: Miri Korenblit <[email protected]>
    Link: https://patch.msgid.link/20250710212632.e91e49590414.I27d2fdbed1c54aee59929fa11ec169f07e159406@changeid
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mac80211: check basic rates validity in sta_link_apply_parameters [+ + +]
Author: Mikhail Lobanov <[email protected]>
Date:   Mon Mar 17 13:31:37 2025 +0300

    wifi: mac80211: check basic rates validity in sta_link_apply_parameters
    
    commit 16ee3ea8faef8ff042acc15867a6c458c573de61 upstream.
    
    When userspace sets supported rates for a new station via
    NL80211_CMD_NEW_STATION, it might send a list that's empty
    or contains only invalid values. Currently, we process these
    values in sta_link_apply_parameters() without checking the result of
    ieee80211_parse_bitrates(), which can lead to an empty rates bitmap.
    
    A similar issue was addressed for NL80211_CMD_SET_BSS in commit
    ce04abc3fcc6 ("wifi: mac80211: check basic rates validity").
    This patch applies the same approach in sta_link_apply_parameters()
    for NL80211_CMD_NEW_STATION, ensuring there is at least one valid
    rate by inspecting the result of ieee80211_parse_bitrates().
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Fixes: b95eb7f0eee4 ("wifi: cfg80211/mac80211: separate link params from station params")
    Signed-off-by: Mikhail Lobanov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: "Hanne-Lotta Mäenpää" <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

wifi: mac80211: don't complete management TX on SAE commit [+ + +]
Author: Johannes Berg <[email protected]>
Date:   Mon Jun 9 21:35:27 2025 +0300

    wifi: mac80211: don't complete management TX on SAE commit
    
    [ Upstream commit 6b04716cdcac37bdbacde34def08bc6fdb5fc4e2 ]
    
    When SAE commit is sent and received in response, there's no
    ordering for the SAE confirm messages. As such, don't call
    drivers to stop listening on the channel when the confirm
    message is still expected.
    
    This fixes an issue if the local confirm is transmitted later
    than the AP's confirm, for iwlwifi (and possibly mt76) the
    AP's confirm would then get lost since the device isn't on
    the channel at the time the AP transmit the confirm.
    
    For iwlwifi at least, this also improves the overall timing
    of the authentication handshake (by about 15ms according to
    the report), likely since the session protection won't be
    aborted and rescheduled.
    
    Note that even before this, mgd_complete_tx() wasn't always
    called for each call to mgd_prepare_tx() (e.g. in the case
    of WEP key shared authentication), and the current drivers
    that have the complete callback don't seem to mind. Document
    this as well though.
    
    Reported-by: Jan Hendrik Farr <[email protected]>
    Closes: https://lore.kernel.org/all/aB30Ea2kRG24LINR@archlinux/
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Miri Korenblit <[email protected]>
    Link: https://patch.msgid.link/20250609213232.12691580e140.I3f1d3127acabcd58348a110ab11044213cf147d3@changeid
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mac80211: fix rx link assignment for non-MLO stations [+ + +]
Author: Hari Chandrakanthan <[email protected]>
Date:   Mon Jun 30 14:11:19 2025 +0530

    wifi: mac80211: fix rx link assignment for non-MLO stations
    
    [ Upstream commit cc2b722132893164bcb3cee4f08ed056e126eb6c ]
    
    Currently, ieee80211_rx_data_set_sta() does not correctly handle the
    case where the interface supports multiple links (MLO), but the station
    does not (non-MLO). This can lead to incorrect link assignment or
    unexpected warnings when accessing link information.
    
    Hence, add a fix to check if the station lacks valid link support and
    use its default link ID for rx->link assignment. If the station
    unexpectedly has valid links, fall back to the default link.
    
    This ensures correct link association and prevents potential issues
    in mixed MLO/non-MLO environments.
    
    Signed-off-by: Hari Chandrakanthan <[email protected]>
    Signed-off-by: Sarika Sharma <[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: update radar_required in channel context after channel switch [+ + +]
Author: Ramya Gnanasekar <[email protected]>
Date:   Sun Jun 8 19:33:24 2025 +0530

    wifi: mac80211: update radar_required in channel context after channel switch
    
    [ Upstream commit 140c6a61d83cbd85adba769b5ef8d61acfa5b392 ]
    
    Currently, when a non-DFS channel is brought up and the bandwidth is
    expanded from 80 MHz to 160 MHz, where the primary 80 MHz is non-DFS
    and the secondary 80 MHz consists of DFS channels, radar detection
    fails if radar occurs in the secondary 80 MHz.
    
    When the channel is switched from 80 MHz to 160 MHz, with the primary
    80 MHz being non-DFS and the secondary 80 MHz consisting of DFS
    channels, the radar required flag in the channel switch parameters
    is set to true. However, when using a reserved channel context,
    it is not updated in sdata, which disables radar detection in the
    secondary 80 MHz DFS channels.
    
    Update the radar required flag in sdata to fix this issue when using
    a reserved channel context.
    
    Signed-off-by: Ramya Gnanasekar <[email protected]>
    Signed-off-by: Ramasamy Kaliappan <[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: mt7915: mcu: re-init MCU before loading FW patch [+ + +]
Author: David Bauer <[email protected]>
Date:   Wed Apr 2 02:45:27 2025 +0200

    wifi: mt76: mt7915: mcu: re-init MCU before loading FW patch
    
    [ Upstream commit ac9c50c79eaef5fca0f165e45d0c5880606db53e ]
    
    Restart the MCU and release the patch semaphore before loading the MCU
    patch firmware from the host.
    
    This fixes failures upon error recovery in case the semaphore was
    previously taken and never released by the host.
    
    This happens from time to time upon triggering a full-chip error
    recovery. Under this circumstance, the hardware restart fails and the
    radio is rendered inoperational.
    
    Signed-off-by: David Bauer <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Felix Fietkau <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: rtlwifi: fix possible skb memory leak in _rtl_pci_init_one_rxdesc() [+ + +]
Author: Thomas Fourier <[email protected]>
Date:   Fri Jun 13 09:38:36 2025 +0200

    wifi: rtlwifi: fix possible skb memory leak in _rtl_pci_init_one_rxdesc()
    
    [ Upstream commit 76b3e5078d76f0eeadb7aacf9845399f8473da0d ]
    
    When `dma_mapping_error()` is true, if a new `skb` has been allocated,
    then it must be de-allocated.
    
    Compile tested only
    
    Signed-off-by: Thomas Fourier <[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: rtlwifi: fix possible skb memory leak in `_rtl_pci_rx_interrupt()`. [+ + +]
Author: Thomas Fourier <[email protected]>
Date:   Mon Jun 16 12:56:30 2025 +0200

    wifi: rtlwifi: fix possible skb memory leak in `_rtl_pci_rx_interrupt()`.
    
    [ Upstream commit 44c0e191004f0e3aa1bdee3be248be14dbe5b020 ]
    
    The function `_rtl_pci_init_one_rxdesc()` can fail even when the new
    `skb` is passed because of a DMA mapping error.  If it fails, the `skb`
    is not saved in the rx ringbuffer and thus lost.
    
    Compile tested only
    
    Signed-off-by: Thomas Fourier <[email protected]>
    Acked-by: Ping-Ke Shih <[email protected]>
    Signed-off-by: Ping-Ke Shih <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

wifi: rtw89: Disable deep power saving for USB/SDIO [+ + +]
Author: Bitterblue Smith <[email protected]>
Date:   Mon Jun 30 23:43:25 2025 +0300

    wifi: rtw89: Disable deep power saving for USB/SDIO
    
    [ Upstream commit a3b871a0f7c083c2a632a31da8bc3de554ae8550 ]
    
    Disable deep power saving for USB and SDIO because rtw89_mac_send_rpwm()
    is called in atomic context and accessing hardware registers results in
    "scheduling while atomic" errors.
    
    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: Sasha Levin <[email protected]>

wifi: rtw89: Fix rtw89_mac_power_switch() for USB [+ + +]
Author: Bitterblue Smith <[email protected]>
Date:   Mon Jun 30 23:45:55 2025 +0300

    wifi: rtw89: Fix rtw89_mac_power_switch() for USB
    
    [ Upstream commit e2b71603333a9dd73ee88347d8894fffc3456ac1 ]
    
    Clear some bits in some registers in order to allow RTL8851BU to power
    on. This is done both when powering on and when powering off because
    that's what the vendor driver does.
    
    Also tested with RTL8832BU and RTL8832CU.
    
    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: Sasha Levin <[email protected]>

wifi: rtw89: Lower the timeout in rtw89_fw_read_c2h_reg() for USB [+ + +]
Author: Bitterblue Smith <[email protected]>
Date:   Tue Jul 15 22:44:47 2025 +0300

    wifi: rtw89: Lower the timeout in rtw89_fw_read_c2h_reg() for USB
    
    [ Upstream commit 671be46afd1f03de9dc6e4679c88e1a7a81cdff6 ]
    
    This read_poll_timeout_atomic() with a delay of 1 µs and a timeout of
    1000000 µs can take ~250 seconds in the worst case because sending a
    USB control message takes ~250 µs.
    
    Lower the timeout to 4000 for USB in order to reduce the maximum polling
    time to ~1 second.
    
    This problem was observed with RTL8851BU while suspending to RAM with
    WOWLAN enabled. The computer sat for 4 minutes with a black screen
    before suspending.
    
    Signed-off-by: Bitterblue Smith <[email protected]>
    Signed-off-by: Ping-Ke Shih <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
x86/bugs: Avoid warning when overriding return thunk [+ + +]
Author: Pawan Gupta <[email protected]>
Date:   Wed Jun 11 10:29:31 2025 -0700

    x86/bugs: Avoid warning when overriding return thunk
    
    [ Upstream commit 9f85fdb9fc5a1bd308a10a0a7d7e34f2712ba58b ]
    
    The purpose of the warning is to prevent an unexpected change to the return
    thunk mitigation. However, there are legitimate cases where the return
    thunk is intentionally set more than once. For example, ITS and SRSO both
    can set the return thunk after retbleed has set it. In both the cases
    retbleed is still mitigated.
    
    Replace the warning with an info about the active return thunk.
    
    Suggested-by: Borislav Petkov <[email protected]>
    Signed-off-by: Pawan Gupta <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
x86/cpu/hygon: Add missing resctrl_cpu_detect() in bsp_init helper [+ + +]
Author: Tianxiang Peng <[email protected]>
Date:   Mon Jun 23 17:31:53 2025 +0800

    x86/cpu/hygon: Add missing resctrl_cpu_detect() in bsp_init helper
    
    commit d8df126349dad855cdfedd6bbf315bad2e901c2f upstream.
    
    Since
    
      923f3a2b48bd ("x86/resctrl: Query LLC monitoring properties once during boot")
    
    resctrl_cpu_detect() has been moved from common CPU initialization code to
    the vendor-specific BSP init helper, while Hygon didn't put that call in their
    code.
    
    This triggers a division by zero fault during early booting stage on our
    machines with X86_FEATURE_CQM* supported, where get_rdt_mon_resources() tries
    to calculate mon_l3_config with uninitialized boot_cpu_data.x86_cache_occ_scale.
    
    Add the missing resctrl_cpu_detect() in the Hygon BSP init helper.
    
      [ bp: Massage commit message. ]
    
    Fixes: 923f3a2b48bd ("x86/resctrl: Query LLC monitoring properties once during boot")
    Signed-off-by: Tianxiang Peng <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Reviewed-by: Hui Li <[email protected]>
    Cc: <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Tianxiang Peng <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
xen/netfront: Fix TX response spurious interrupts [+ + +]
Author: Anthoine Bourgeois <[email protected]>
Date:   Mon Jul 21 09:34:54 2025 +0000

    xen/netfront: Fix TX response spurious interrupts
    
    [ Upstream commit 114a2de6fa86d99ed9546cc9113a3cad58beef79 ]
    
    We found at Vates that there are lot of spurious interrupts when
    benchmarking the xen-net PV driver frontend. This issue appeared with a
    patch that addresses security issue XSA-391 (b27d47950e48 "xen/netfront:
    harden netfront against event channel storms"). On an iperf benchmark,
    spurious interrupts can represent up to 50% of the interrupts.
    
    Spurious interrupts are interrupts that are rised for nothing, there is
    no work to do. This appends because the function that handles the
    interrupts ("xennet_tx_buf_gc") is also called at the end of the request
    path to garbage collect the responses received during the transmission
    load.
    
    The request path is doing the work that the interrupt handler should
    have done otherwise. This is particurary true when there is more than
    one vcpu and get worse linearly with the number of vcpu/queue.
    
    Moreover, this problem is amplifyed by the penalty imposed by a spurious
    interrupt. When an interrupt is found spurious the interrupt chip will
    delay the EOI to slowdown the backend. This delay will allow more
    responses to be handled by the request path and then there will be more
    chance the next interrupt will not find any work to do, creating a new
    spurious interrupt.
    
    This causes performance issue. The solution here is to remove the calls
    from the request path and let the interrupt handler do the processing of
    the responses. This approch removes most of the spurious interrupts
    (<0.05%) and also has the benefit of freeing up cycles in the request
    path, allowing it to process more work, which improves performance
    compared to masking the spurious interrupt one way or another.
    
    This optimization changes a part of the code that is present since the
    net frontend driver was upstreamed. There is no similar pattern in the
    other xen PV drivers. Since the first commit of xen-netfront is a blob
    that doesn't explain all the design choices I can only guess why this
    specific mecanism was here. This could have been introduce to compensate
    a slow backend at the time (maybe the backend was fixed or optimize
    later) or a small queue. In 18 years, both frontend and backend gain lot
    of features and optimizations that could have obsolete the feature of
    reaping completions from the TX path.
    
    Some vif throughput performance figures from a 8 vCPUs, 4GB of RAM HVM
    guest(s):
    
    Without this patch on the :
    vm -> dom0: 4.5Gb/s
    vm -> vm:   7.0Gb/s
    
    Without XSA-391 patch (revert of b27d47950e48):
    vm -> dom0: 8.3Gb/s
    vm -> vm:   8.7Gb/s
    
    With XSA-391 and this patch:
    vm -> dom0: 11.5Gb/s
    vm -> vm:   12.6Gb/s
    
    v2:
    - add revewed and tested by tags
    - resend with the maintainers in the recipients list
    
    v3:
    - remove Fixes tag but keep the commit ref in the explanation
    - add a paragraph on why this code was here
    
    Signed-off-by: Anthoine Bourgeois <[email protected]>
    Reviewed-by: Juergen Gross <[email protected]>
    Tested-by: Elliott Mitchell <[email protected]>
    Signed-off-by: Juergen Gross <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
xfrm: Duplicate SPI Handling [+ + +]
Author: Aakash Kumar S <[email protected]>
Date:   Mon Jun 30 18:08:56 2025 +0530

    xfrm: Duplicate SPI Handling
    
    [ Upstream commit 94f39804d891cffe4ce17737d295f3b195bc7299 ]
    
    The issue originates when Strongswan initiates an XFRM_MSG_ALLOCSPI
    Netlink message, which triggers the kernel function xfrm_alloc_spi().
    This function is expected to ensure uniqueness of the Security Parameter
    Index (SPI) for inbound Security Associations (SAs). However, it can
    return success even when the requested SPI is already in use, leading
    to duplicate SPIs assigned to multiple inbound SAs, differentiated
    only by their destination addresses.
    
    This behavior causes inconsistencies during SPI lookups for inbound packets.
    Since the lookup may return an arbitrary SA among those with the same SPI,
    packet processing can fail, resulting in packet drops.
    
    According to RFC 4301 section 4.4.2 , for inbound processing a unicast SA
    is uniquely identified by the SPI and optionally protocol.
    
    Reproducing the Issue Reliably:
    To consistently reproduce the problem, restrict the available SPI range in
    charon.conf : spi_min = 0x10000000 spi_max = 0x10000002
    This limits the system to only 2 usable SPI values.
    Next, create more than 2 Child SA. each using unique pair of src/dst address.
    As soon as the 3rd Child SA is initiated, it will be assigned a duplicate
    SPI, since the SPI pool is already exhausted.
    With a narrow SPI range, the issue is consistently reproducible.
    With a broader/default range, it becomes rare and unpredictable.
    
    Current implementation:
    xfrm_spi_hash() lookup function computes hash using daddr, proto, and family.
    So if two SAs have the same SPI but different destination addresses, then
    they will:
    a. Hash into different buckets
    b. Be stored in different linked lists (byspi + h)
    c. Not be seen in the same hlist_for_each_entry_rcu() iteration.
    As a result, the lookup will result in NULL and kernel allows that Duplicate SPI
    
    Proposed Change:
    xfrm_state_lookup_spi_proto() does a truly global search - across all states,
    regardless of hash bucket and matches SPI and proto.
    
    Signed-off-by: Aakash Kumar S <[email protected]>
    Acked-by: Herbert Xu <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
xfs: fully decouple XFS_IBULK* flags from XFS_IWALK* flags [+ + +]
Author: Christoph Hellwig <[email protected]>
Date:   Mon Aug 18 22:56:55 2025 -0400

    xfs: fully decouple XFS_IBULK* flags from XFS_IWALK* flags
    
    [ Upstream commit d2845519b0723c5d5a0266cbf410495f9b8fd65c ]
    
    Fix up xfs_inumbers to now pass in the XFS_IBULK* flags into the flags
    argument to xfs_inobt_walk, which expects the XFS_IWALK* flags.
    
    Currently passing the wrong flags works for non-debug builds because
    the only XFS_IWALK* flag has the same encoding as the corresponding
    XFS_IBULK* flag, but in debug builds it can trigger an assert that no
    incorrect flag is passed.  Instead just extra the relevant flag.
    
    Fixes: 5b35d922c52798 ("xfs: Decouple XFS_IBULK flags from XFS_IWALK flags")
    Cc: <[email protected]> # v5.19
    Reported-by: cen zhang <[email protected]>
    Signed-off-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Darrick J. Wong <[email protected]>
    Signed-off-by: Carlos Maiolino <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
zynq_fpga: use sgtable-based scatterlist wrappers [+ + +]
Author: Marek Szyprowski <[email protected]>
Date:   Mon Jun 16 14:09:32 2025 +0200

    zynq_fpga: use sgtable-based scatterlist wrappers
    
    commit 37e00703228ab44d0aacc32a97809a4f6f58df1b upstream.
    
    Use common wrappers operating directly on the struct sg_table objects to
    fix incorrect use of statterlists related calls. dma_unmap_sg() function
    has to be called with the number of elements originally passed to the
    dma_map_sg() function, not the one returned in sgtable's nents.
    
    CC: [email protected]
    Fixes: 425902f5c8e3 ("fpga zynq: Use the scatterlist interface")
    Signed-off-by: Marek Szyprowski <[email protected]>
    Reviewed-by: Jason Gunthorpe <[email protected]>
    Reviewed-by: Xu Yilun <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Xu Yilun <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>