Changelog in Linux kernel 6.1.105

 
ACPI: battery: create alarm sysfs attribute atomically [+ + +]
Author: Thomas Weißschuh <[email protected]>
Date:   Sun Jun 9 09:27:16 2024 +0200

    ACPI: battery: create alarm sysfs attribute atomically
    
    [ Upstream commit a231eed10ed5a290129fda36ad7bcc263c53ff7d ]
    
    Let the power supply core register the attribute.
    This ensures that the attribute is created before the device is
    announced to userspace, avoid a race condition.
    
    Signed-off-by: Thomas Weißschuh <[email protected]>
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ACPI: SBS: manage alarm sysfs attribute through psy core [+ + +]
Author: Thomas Weißschuh <[email protected]>
Date:   Sun Jun 9 13:13:28 2024 +0200

    ACPI: SBS: manage alarm sysfs attribute through psy core
    
    [ Upstream commit 6bad28cfc30988a845fb3f59a99f4b8a4ce8fe95 ]
    
    Let the power supply core register the attribute.
    
    This ensures that the attribute is created before the device is
    announced to userspace, avoiding a race condition.
    
    Signed-off-by: Thomas Weißschuh <[email protected]>
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
af_unix: Don't retry after unix_state_lock_nested() in unix_stream_connect(). [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Thu Jun 20 13:56:15 2024 -0700

    af_unix: Don't retry after unix_state_lock_nested() in unix_stream_connect().
    
    [ Upstream commit 1ca27e0c8c13ac50a4acf9cdf77069e2d94a547d ]
    
    When a SOCK_(STREAM|SEQPACKET) socket connect()s to another one, we need
    to lock the two sockets to check their states in unix_stream_connect().
    
    We use unix_state_lock() for the server and unix_state_lock_nested() for
    client with tricky sk->sk_state check to avoid deadlock.
    
    The possible deadlock scenario are the following:
    
      1) Self connect()
      2) Simultaneous connect()
    
    The former is simple, attempt to grab the same lock, and the latter is
    AB-BA deadlock.
    
    After the server's unix_state_lock(), we check the server socket's state,
    and if it's not TCP_LISTEN, connect() fails with -EINVAL.
    
    Then, we avoid the former deadlock by checking the client's state before
    unix_state_lock_nested().  If its state is not TCP_LISTEN, we can make
    sure that the client and the server are not identical based on the state.
    
    Also, the latter deadlock can be avoided in the same way.  Due to the
    server sk->sk_state requirement, AB-BA deadlock could happen only with
    TCP_LISTEN sockets.  So, if the client's state is TCP_LISTEN, we can
    give up the second lock to avoid the deadlock.
    
      CPU 1                 CPU 2                  CPU 3
      connect(A -> B)       connect(B -> A)        listen(A)
      ---                   ---                    ---
      unix_state_lock(B)
      B->sk_state == TCP_LISTEN
      READ_ONCE(A->sk_state) == TCP_CLOSE
                                ^^^^^^^^^
                                ok, will lock A    unix_state_lock(A)
                 .--------------'                  WRITE_ONCE(A->sk_state, TCP_LISTEN)
                 |                                 unix_state_unlock(A)
                 |
                 |          unix_state_lock(A)
                 |          A->sk_sk_state == TCP_LISTEN
                 |          READ_ONCE(B->sk_state) == TCP_LISTEN
                 v                                    ^^^^^^^^^^
      unix_state_lock_nested(A)                       Don't lock B !!
    
    Currently, while checking the client's state, we also check if it's
    TCP_ESTABLISHED, but this is unlikely and can be checked after we know
    the state is not TCP_CLOSE.
    
    Moreover, if it happens after the second lock, we now jump to the restart
    label, but it's unlikely that the server is not found during the retry,
    so the jump is mostly to revist the client state check.
    
    Let's remove the retry logic and check the state against TCP_CLOSE first.
    
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ALSA: hda/hdmi: Yet more pin fix for HP EliteDesk 800 G4 [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Tue Aug 6 08:49:16 2024 +0200

    ALSA: hda/hdmi: Yet more pin fix for HP EliteDesk 800 G4
    
    commit 176fd1511dd9086ab4fa9323cb232177c6235288 upstream.
    
    HP EliteDesk 800 G4 (PCI SSID 103c:83e2) is another Kabylake machine
    where BIOS misses the HDMI pin initializations.  Add the quirk entry.
    
    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 Framework Laptop 13 (Intel Core Ultra) to quirks [+ + +]
Author: Dustin L. Howett <[email protected]>
Date:   Tue Aug 6 21:33:51 2024 -0500

    ALSA: hda/realtek: Add Framework Laptop 13 (Intel Core Ultra) to quirks
    
    commit eb91c456f3714c336f0812dccab422ec0e72bde4 upstream.
    
    The Framework Laptop 13 (Intel Core Ultra) has an ALC285 that ships in a
    similar configuration to the ALC295 in previous models. It requires the
    same quirk for headset detection.
    
    Signed-off-by: Dustin L. Howett <[email protected]>
    Cc: <[email protected]>
    Link: https://patch.msgid.link/20240806-alsa-hda-realtek-add-framework-laptop-13-intel-core-ultra-to-quirks-v1-1-42d6ce2dbf14@howett.net
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: hda: Add HP MP9 G4 Retail System AMS to force connect list [+ + +]
Author: Steven 'Steve' Kendall <[email protected]>
Date:   Tue Aug 6 00:08:24 2024 +0000

    ALSA: hda: Add HP MP9 G4 Retail System AMS to force connect list
    
    commit 7e1e206b99f4b3345aeb49d94584a420b7887f1d upstream.
    
    In recent HP UEFI firmware (likely v2.15 and above, tested on 2.27),
    these pins are incorrectly set for HDMI/DP audio. Tested on
    HP MP9 G4 Retail System AMS. Tested audio with two monitors connected
    via DisplayPort.
    
    Link: https://forum.manjaro.org/t/intel-cannon-lake-pch-cavs-conexant-cx20632-no-sound-at-hdmi-or-displayport/133494
    Link: https://bbs.archlinux.org/viewtopic.php?id=270523
    Signed-off-by: Steven 'Steve' Kendall <[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: line6: Fix racy access to midibuf [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Mon Aug 5 15:01:28 2024 +0200

    ALSA: line6: Fix racy access to midibuf
    
    commit 15b7a03205b31bc5623378c190d22b7ff60026f1 upstream.
    
    There can be concurrent accesses to line6 midibuf from both the URB
    completion callback and the rawmidi API access.  This could be a cause
    of KMSAN warning triggered by syzkaller below (so put as reported-by
    here).
    
    This patch protects the midibuf call of the former code path with a
    spinlock for avoiding the possible races.
    
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/[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: Re-add ScratchAmp quirk entries [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Thu Aug 8 10:18:01 2024 +0200

    ALSA: usb-audio: Re-add ScratchAmp quirk entries
    
    [ Upstream commit 03898691d42e0170e7d00f07cbe21ce0e9f3a8fa ]
    
    At the code refactoring of USB-audio quirk handling, I assumed that
    the quirk entries of Stanton ScratchAmp devices were only about the
    device name, and moved them completely into the rename table.
    But it seems that the device requires the quirk entry so that it's
    probed by the driver itself.
    
    This re-adds back the quirk entries of ScratchAmp, but in a
    minimalistic manner.
    
    Fixes: 5436f59bc5bc ("ALSA: usb-audio: Move device rename and profile quirks to an internal table")
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
arm64: Add Neoverse-V2 part [+ + +]
Author: Besar Wicaksono <[email protected]>
Date:   Fri Aug 9 11:02:11 2024 +0100

    arm64: Add Neoverse-V2 part
    
    [ Upstream commit f4d9d9dcc70b96b5e5d7801bd5fbf8491b07b13d ]
    
    Add the part number and MIDR for Neoverse-V2
    
    Signed-off-by: Besar Wicaksono <[email protected]>
    Reviewed-by: James Clark <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Will Deacon <[email protected]>
    [ Mark: trivial backport ]
    Signed-off-by: Mark Rutland <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: barrier: Restore spec_bar() macro [+ + +]
Author: Mark Rutland <[email protected]>
Date:   Fri Aug 9 11:02:12 2024 +0100

    arm64: barrier: Restore spec_bar() macro
    
    [ Upstream commit ebfc726eae3f31bdb5fae1bbd74ef235d71046ca ]
    
    Upcoming errata workarounds will need to use SB from C code. Restore the
    spec_bar() macro so that we can use SB.
    
    This is effectively a revert of commit:
    
      4f30ba1cce36d413 ("arm64: barrier: Remove spec_bar() macro")
    
    Signed-off-by: Mark Rutland <[email protected]>
    Cc: Catalin Marinas <[email protected]>
    Cc: James Morse <[email protected]>
    Cc: Will Deacon <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Will Deacon <[email protected]>
    [ Mark: trivial backport ]
    Signed-off-by: Mark Rutland <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: cputype: Add Cortex-A720 definitions [+ + +]
Author: Mark Rutland <[email protected]>
Date:   Fri Aug 9 11:02:17 2024 +0100

    arm64: cputype: Add Cortex-A720 definitions
    
    [ Upstream commit add332c40328cf06fe35e4b3cde8ec315c4629e5 ]
    
    Add cputype definitions for Cortex-A720. These will be used for errata
    detection in subsequent patches.
    
    These values can be found in Table A-186 ("MIDR_EL1 bit descriptions")
    in issue 0002-05 of the Cortex-A720 TRM, which can be found at:
    
      https://developer.arm.com/documentation/102530/0002/?lang=en
    
    Signed-off-by: Mark Rutland <[email protected]>
    Cc: James Morse <[email protected]>
    Cc: Will Deacon <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Catalin Marinas <[email protected]>
    [ Mark: trivial backport ]
    Signed-off-by: Mark Rutland <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: cputype: Add Cortex-A725 definitions [+ + +]
Author: Mark Rutland <[email protected]>
Date:   Fri Aug 9 11:02:22 2024 +0100

    arm64: cputype: Add Cortex-A725 definitions
    
    [ Upstream commit 9ef54a384526911095db465e77acc1cb5266b32c ]
    
    Add cputype definitions for Cortex-A725. These will be used for errata
    detection in subsequent patches.
    
    These values can be found in the Cortex-A725 TRM:
    
      https://developer.arm.com/documentation/107652/0001/
    
    ... in table A-247 ("MIDR_EL1 bit descriptions").
    
    Signed-off-by: Mark Rutland <[email protected]>
    Cc: James Morse <[email protected]>
    Cc: Will Deacon <[email protected]>
    Reviewed-by: Anshuman Khandual <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Catalin Marinas <[email protected]>
    [ Mark: trivial backport ]
    Signed-off-by: Mark Rutland <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: cputype: Add Cortex-X1C definitions [+ + +]
Author: Mark Rutland <[email protected]>
Date:   Fri Aug 9 11:02:21 2024 +0100

    arm64: cputype: Add Cortex-X1C definitions
    
    [ Upstream commit 58d245e03c324d083a0ec3b9ab8ebd46ec9848d7 ]
    
    Add cputype definitions for Cortex-X1C. These will be used for errata
    detection in subsequent patches.
    
    These values can be found in the Cortex-X1C TRM:
    
      https://developer.arm.com/documentation/101968/0002/
    
    ... in section B2.107 ("MIDR_EL1, Main ID Register, EL1").
    
    Signed-off-by: Mark Rutland <[email protected]>
    Cc: James Morse <[email protected]>
    Cc: Will Deacon <[email protected]>
    Reviewed-by: Anshuman Khandual <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Catalin Marinas <[email protected]>
    [ Mark: trivial backport ]
    Signed-off-by: Mark Rutland <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: cputype: Add Cortex-X3 definitions [+ + +]
Author: Mark Rutland <[email protected]>
Date:   Fri Aug 9 11:02:16 2024 +0100

    arm64: cputype: Add Cortex-X3 definitions
    
    [ Upstream commit be5a6f238700f38b534456608588723fba96c5ab ]
    
    Add cputype definitions for Cortex-X3. These will be used for errata
    detection in subsequent patches.
    
    These values can be found in Table A-263 ("MIDR_EL1 bit descriptions")
    in issue 07 of the Cortex-X3 TRM, which can be found at:
    
      https://developer.arm.com/documentation/101593/0102/?lang=en
    
    Signed-off-by: Mark Rutland <[email protected]>
    Cc: James Morse <[email protected]>
    Cc: Will Deacon <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Catalin Marinas <[email protected]>
    [ Mark: trivial backport ]
    Signed-off-by: Mark Rutland <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: cputype: Add Cortex-X4 definitions [+ + +]
Author: Mark Rutland <[email protected]>
Date:   Fri Aug 9 11:02:13 2024 +0100

    arm64: cputype: Add Cortex-X4 definitions
    
    [ Upstream commit 02a0a04676fa7796d9cbc9eb5ca120aaa194d2dd ]
    
    Add cputype definitions for Cortex-X4. These will be used for errata
    detection in subsequent patches.
    
    These values can be found in Table B-249 ("MIDR_EL1 bit descriptions")
    in issue 0002-05 of the Cortex-X4 TRM, which can be found at:
    
      https://developer.arm.com/documentation/102484/0002/?lang=en
    
    Signed-off-by: Mark Rutland <[email protected]>
    Cc: Catalin Marinas <[email protected]>
    Cc: James Morse <[email protected]>
    Cc: Will Deacon <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Will Deacon <[email protected]>
    [ Mark: fix conflict (dealt with upstream via a later merge) ]
    Signed-off-by: Mark Rutland <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: cputype: Add Cortex-X925 definitions [+ + +]
Author: Mark Rutland <[email protected]>
Date:   Fri Aug 9 11:02:18 2024 +0100

    arm64: cputype: Add Cortex-X925 definitions
    
    [ Upstream commit fd2ff5f0b320f418288e7a1f919f648fbc8a0dfc ]
    
    Add cputype definitions for Cortex-X925. These will be used for errata
    detection in subsequent patches.
    
    These values can be found in Table A-285 ("MIDR_EL1 bit descriptions")
    in issue 0001-05 of the Cortex-X925 TRM, which can be found at:
    
      https://developer.arm.com/documentation/102807/0001/?lang=en
    
    Signed-off-by: Mark Rutland <[email protected]>
    Cc: James Morse <[email protected]>
    Cc: Will Deacon <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Catalin Marinas <[email protected]>
    [ Mark: trivial backport ]
    Signed-off-by: Mark Rutland <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: cputype: Add Neoverse-V3 definitions [+ + +]
Author: Mark Rutland <[email protected]>
Date:   Fri Aug 9 11:02:14 2024 +0100

    arm64: cputype: Add Neoverse-V3 definitions
    
    [ Upstream commit 0ce85db6c2141b7ffb95709d76fc55a27ff3cdc1 ]
    
    Add cputype definitions for Neoverse-V3. These will be used for errata
    detection in subsequent patches.
    
    These values can be found in Table B-249 ("MIDR_EL1 bit descriptions")
    in issue 0001-04 of the Neoverse-V3 TRM, which can be found at:
    
      https://developer.arm.com/documentation/107734/0001/?lang=en
    
    Signed-off-by: Mark Rutland <[email protected]>
    Cc: Catalin Marinas <[email protected]>
    Cc: James Morse <[email protected]>
    Cc: Will Deacon <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Will Deacon <[email protected]>
    [ Mark: trivial backport ]
    Signed-off-by: Mark Rutland <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: errata: Add workaround for Arm errata 3194386 and 3312417 [+ + +]
Author: Mark Rutland <[email protected]>
Date:   Fri Aug 9 11:02:15 2024 +0100

    arm64: errata: Add workaround for Arm errata 3194386 and 3312417
    
    [ Upstream commit 7187bb7d0b5c7dfa18ca82e9e5c75e13861b1d88 ]
    
    Cortex-X4 and Neoverse-V3 suffer from errata whereby an MSR to the SSBS
    special-purpose register does not affect subsequent speculative
    instructions, permitting speculative store bypassing for a window of
    time. This is described in their Software Developer Errata Notice (SDEN)
    documents:
    
    * Cortex-X4 SDEN v8.0, erratum 3194386:
      https://developer.arm.com/documentation/SDEN-2432808/0800/
    
    * Neoverse-V3 SDEN v6.0, erratum 3312417:
      https://developer.arm.com/documentation/SDEN-2891958/0600/
    
    To workaround these errata, it is necessary to place a speculation
    barrier (SB) after MSR to the SSBS special-purpose register. This patch
    adds the requisite SB after writes to SSBS within the kernel, and hides
    the presence of SSBS from EL0 such that userspace software which cares
    about SSBS will manipulate this via prctl(PR_GET_SPECULATION_CTRL, ...).
    
    Signed-off-by: Mark Rutland <[email protected]>
    Cc: Catalin Marinas <[email protected]>
    Cc: James Morse <[email protected]>
    Cc: Will Deacon <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Will Deacon <[email protected]>
    [ Mark: fix conflicts & renames, drop unneeded cpucaps.h, fold in user_feature_fixup() ]
    Signed-off-by: Mark Rutland <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: errata: Expand speculative SSBS workaround [+ + +]
Author: Mark Rutland <[email protected]>
Date:   Fri Aug 9 11:02:20 2024 +0100

    arm64: errata: Expand speculative SSBS workaround
    
    [ Upstream commit 75b3c43eab594bfbd8184ec8ee1a6b820950819a ]
    
    A number of Arm Ltd CPUs suffer from errata whereby an MSR to the SSBS
    special-purpose register does not affect subsequent speculative
    instructions, permitting speculative store bypassing for a window of
    time.
    
    We worked around this for Cortex-X4 and Neoverse-V3, in commit:
    
      7187bb7d0b5c7dfa ("arm64: errata: Add workaround for Arm errata 3194386 and 3312417")
    
    ... as per their Software Developer Errata Notice (SDEN) documents:
    
    * Cortex-X4 SDEN v8.0, erratum 3194386:
      https://developer.arm.com/documentation/SDEN-2432808/0800/
    
    * Neoverse-V3 SDEN v6.0, erratum 3312417:
      https://developer.arm.com/documentation/SDEN-2891958/0600/
    
    Since then, similar errata have been published for a number of other Arm Ltd
    CPUs, for which the mitigation is the same. This is described in their
    respective SDEN documents:
    
    * Cortex-A710 SDEN v19.0, errataum 3324338
      https://developer.arm.com/documentation/SDEN-1775101/1900/?lang=en
    
    * Cortex-A720 SDEN v11.0, erratum 3456091
      https://developer.arm.com/documentation/SDEN-2439421/1100/?lang=en
    
    * Cortex-X2 SDEN v19.0, erratum 3324338
      https://developer.arm.com/documentation/SDEN-1775100/1900/?lang=en
    
    * Cortex-X3 SDEN v14.0, erratum 3324335
      https://developer.arm.com/documentation/SDEN-2055130/1400/?lang=en
    
    * Cortex-X925 SDEN v8.0, erratum 3324334
      https://developer.arm.com/documentation/109108/800/?lang=en
    
    * Neoverse-N2 SDEN v17.0, erratum 3324339
      https://developer.arm.com/documentation/SDEN-1982442/1700/?lang=en
    
    * Neoverse-V2 SDEN v9.0, erratum 3324336
      https://developer.arm.com/documentation/SDEN-2332927/900/?lang=en
    
    Note that due to shared design lineage, some CPUs share the same erratum
    number.
    
    Add these to the existing mitigation under CONFIG_ARM64_ERRATUM_3194386.
    As listing all of the erratum IDs in the runtime description would be
    unwieldy, this is reduced to:
    
            "SSBS not fully self-synchronizing"
    
    ... matching the description of the errata in all of the SDENs.
    
    Signed-off-by: Mark Rutland <[email protected]>
    Cc: James Morse <[email protected]>
    Cc: Will Deacon <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Catalin Marinas <[email protected]>
    [ Mark: fix conflicts and renames ]
    Signed-off-by: Mark Rutland <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: errata: Expand speculative SSBS workaround (again) [+ + +]
Author: Mark Rutland <[email protected]>
Date:   Fri Aug 9 11:02:23 2024 +0100

    arm64: errata: Expand speculative SSBS workaround (again)
    
    [ Upstream commit adeec61a4723fd3e39da68db4cc4d924e6d7f641 ]
    
    A number of Arm Ltd CPUs suffer from errata whereby an MSR to the SSBS
    special-purpose register does not affect subsequent speculative
    instructions, permitting speculative store bypassing for a window of
    time.
    
    We worked around this for a number of CPUs in commits:
    
    * 7187bb7d0b5c7dfa ("arm64: errata: Add workaround for Arm errata 3194386 and 3312417")
    * 75b3c43eab594bfb ("arm64: errata: Expand speculative SSBS workaround")
    
    Since then, similar errata have been published for a number of other Arm
    Ltd CPUs, for which the same mitigation is sufficient. This is described
    in their respective Software Developer Errata Notice (SDEN) documents:
    
    * Cortex-A76 (MP052) SDEN v31.0, erratum 3324349
      https://developer.arm.com/documentation/SDEN-885749/3100/
    
    * Cortex-A77 (MP074) SDEN v19.0, erratum 3324348
      https://developer.arm.com/documentation/SDEN-1152370/1900/
    
    * Cortex-A78 (MP102) SDEN v21.0, erratum 3324344
      https://developer.arm.com/documentation/SDEN-1401784/2100/
    
    * Cortex-A78C (MP138) SDEN v16.0, erratum 3324346
      https://developer.arm.com/documentation/SDEN-1707916/1600/
    
    * Cortex-A78C (MP154) SDEN v10.0, erratum 3324347
      https://developer.arm.com/documentation/SDEN-2004089/1000/
    
    * Cortex-A725 (MP190) SDEN v5.0, erratum 3456106
      https://developer.arm.com/documentation/SDEN-2832921/0500/
    
    * Cortex-X1 (MP077) SDEN v21.0, erratum 3324344
      https://developer.arm.com/documentation/SDEN-1401782/2100/
    
    * Cortex-X1C (MP136) SDEN v16.0, erratum 3324346
      https://developer.arm.com/documentation/SDEN-1707914/1600/
    
    * Neoverse-N1 (MP050) SDEN v32.0, erratum 3324349
      https://developer.arm.com/documentation/SDEN-885747/3200/
    
    * Neoverse-V1 (MP076) SDEN v19.0, erratum 3324341
      https://developer.arm.com/documentation/SDEN-1401781/1900/
    
    Note that due to the manner in which Arm develops IP and tracks errata,
    some CPUs share a common erratum number and some CPUs have multiple
    erratum numbers for the same HW issue.
    
    On parts without SB, it is necessary to use ISB for the workaround. The
    spec_bar() macro used in the mitigation will expand to a "DSB SY; ISB"
    sequence in this case, which is sufficient on all affected parts.
    
    Enable the existing mitigation by adding the relevant MIDRs to
    erratum_spec_ssbs_list. The list is sorted alphanumerically (involving
    moving Neoverse-V3 after Neoverse-V2) so that this is easy to audit and
    potentially extend again in future. The Kconfig text is also updated to
    clarify the set of affected parts and the mitigation.
    
    Signed-off-by: Mark Rutland <[email protected]>
    Cc: James Morse <[email protected]>
    Cc: Will Deacon <[email protected]>
    Reviewed-by: Anshuman Khandual <[email protected]>
    Acked-by: Will Deacon <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Catalin Marinas <[email protected]>
    [ Mark: fix conflicts in silicon-errata.rst ]
    Signed-off-by: Mark Rutland <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

arm64: errata: Unify speculative SSBS errata logic [+ + +]
Author: Mark Rutland <[email protected]>
Date:   Fri Aug 9 11:02:19 2024 +0100

    arm64: errata: Unify speculative SSBS errata logic
    
    [ Upstream commit ec768766608092087dfb5c1fc45a16a6f524dee2 ]
    
    Cortex-X4 erratum 3194386 and Neoverse-V3 erratum 3312417 are identical,
    with duplicate Kconfig text and some unsightly ifdeffery. While we try
    to share code behind CONFIG_ARM64_WORKAROUND_SPECULATIVE_SSBS, having
    separate options results in a fair amount of boilerplate code, and this
    will only get worse as we expand the set of affected CPUs.
    
    To reduce this boilerplate, unify the two behind a common Kconfig
    option. This removes the duplicate text and Kconfig logic, and removes
    the need for the intermediate ARM64_WORKAROUND_SPECULATIVE_SSBS option.
    The set of affected CPUs is described as a list so that this can easily
    be extended.
    
    I've used ARM64_ERRATUM_3194386 (matching the Neoverse-V3 erratum ID) as
    the common option, matching the way we use ARM64_ERRATUM_1319367 to
    cover Cortex-A57 erratum 1319537 and Cortex-A72 erratum 1319367.
    
    Signed-off-by: Mark Rutland <[email protected]>
    Cc: James Morse <[email protected]>
    Cc: Will Deacon <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Catalin Marinas <[email protected]>
    [ Mark: fix conflicts & renames, drop unneeded cpucaps.h ]
    Signed-off-by: Mark Rutland <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ASoC: amd: yc: Add quirk entry for OMEN by HP Gaming Laptop 16-n0xxx [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Wed Aug 7 19:02:27 2024 +0200

    ASoC: amd: yc: Add quirk entry for OMEN by HP Gaming Laptop 16-n0xxx
    
    commit 6675e76a5c441b52b1b983ebb714122087020ebe upstream.
    
    Fix the missing mic on OMEN by HP Gaming Laptop 16-n0xxx by adding the
    quirk entry with the board ID 8A44.
    
    Cc: [email protected]
    Link: https://bugzilla.suse.com/show_bug.cgi?id=1227182
    Signed-off-by: Takashi Iwai <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: codecs: wcd938x-sdw: Correct Soundwire ports mask [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Fri Jul 26 16:10:42 2024 +0200

    ASoC: codecs: wcd938x-sdw: Correct Soundwire ports mask
    
    [ Upstream commit 3f6fb03dae9c7dfba7670858d29e03c8faaa89fe ]
    
    Device has up to WCD938X_MAX_SWR_PORTS number of ports and the array
    assigned to prop.src_dpn_prop and prop.sink_dpn_prop has
    0..WCD938X_MAX_SWR_PORTS-1 elements.  On the other hand, GENMASK(high,
    low) creates an inclusive mask between <high, low>, so we need the mask
    from 0 up to WCD938X_MAX_SWR_PORTS-1.
    
    Theoretically, too wide mask could cause an out of bounds read in
    sdw_get_slave_dpn_prop() in stream.c, however only in the case of buggy
    driver, e.g. adding incorrect number of ports via
    sdw_stream_add_slave().
    
    Fixes: 16572522aece ("ASoC: codecs: wcd938x-sdw: add SoundWire driver")
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Link: https://patch.msgid.link/20240726-asoc-wcd-wsa-swr-ports-genmask-v1-2-d4d7a8b56f05@linaro.org
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: codecs: wsa881x: Correct Soundwire ports mask [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Fri Jul 26 16:10:44 2024 +0200

    ASoC: codecs: wsa881x: Correct Soundwire ports mask
    
    [ Upstream commit eb11c3bb64ad0a05aeacdb01039863aa2aa3614b ]
    
    Device has up to WSA881X_MAX_SWR_PORTS number of ports and the array
    assigned to prop.sink_dpn_prop has 0..WSA881X_MAX_SWR_PORTS-1 elements.
    On the other hand, GENMASK(high, low) creates an inclusive mask between
    <high, low>, so we need the mask from 0 up to WSA881X_MAX_SWR_PORTS-1.
    
    Theoretically, too wide mask could cause an out of bounds read in
    sdw_get_slave_dpn_prop() in stream.c, however only in the case of buggy
    driver, e.g. adding incorrect number of ports via
    sdw_stream_add_slave().
    
    Fixes: a0aab9e1404a ("ASoC: codecs: add wsa881x amplifier support")
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Link: https://patch.msgid.link/20240726-asoc-wcd-wsa-swr-ports-genmask-v1-4-d4d7a8b56f05@linaro.org
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: codecs: wsa883x: Correct Soundwire ports mask [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Fri Jul 26 16:10:45 2024 +0200

    ASoC: codecs: wsa883x: Correct Soundwire ports mask
    
    [ Upstream commit 6801ac36f25690e14955f7f9eace1eaa29edbdd0 ]
    
    Device has up to WSA883X_MAX_SWR_PORTS number of ports and the array
    assigned to prop.sink_dpn_prop has 0..WSA883X_MAX_SWR_PORTS-1 elements.
    On the other hand, GENMASK(high, low) creates an inclusive mask between
    <high, low>, so we need the mask from 0 up to WSA883X_MAX_SWR_PORTS-1.
    
    Theoretically, too wide mask could cause an out of bounds read in
    sdw_get_slave_dpn_prop() in stream.c, however only in the case of buggy
    driver, e.g. adding incorrect number of ports via
    sdw_stream_add_slave().
    
    Fixes: 43b8c7dc85a1 ("ASoC: codecs: add wsa883x amplifier support")
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Link: https://patch.msgid.link/20240726-asoc-wcd-wsa-swr-ports-genmask-v1-5-d4d7a8b56f05@linaro.org
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: codecs: wsa883x: parse port-mapping information [+ + +]
Author: Srinivas Kandagatla <[email protected]>
Date:   Thu Jun 27 15:44:39 2024 +0100

    ASoC: codecs: wsa883x: parse port-mapping information
    
    [ Upstream commit 1cf3295bd108abbd7f128071ae9775fd18394ca9 ]
    
    Add support to parse static master port map information from device tree.
    
    Reviewed-by: Krzysztof Kozlowski <[email protected]>
    Tested-by: Krzysztof Kozlowski <[email protected]>
    Tested-by: Neil Armstrong <[email protected]> # on SM8650-HDK
    Signed-off-by: Srinivas Kandagatla <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Stable-dep-of: 6801ac36f256 ("ASoC: codecs: wsa883x: Correct Soundwire ports mask")
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: meson: axg-fifo: fix irq scheduling issue with PREEMPT_RT [+ + +]
Author: Jerome Brunet <[email protected]>
Date:   Wed Aug 7 18:27:03 2024 +0200

    ASoC: meson: axg-fifo: fix irq scheduling issue with PREEMPT_RT
    
    [ Upstream commit 5003d0ce5c7da3a02c0aff771f516f99731e7390 ]
    
    With PREEMPT_RT enabled a spinlock_t becomes a sleeping lock.
    
    This is usually not a problem with spinlocks used in IRQ context since
    IRQ handlers get threaded. However, if IRQF_ONESHOT is set, the primary
    handler won't be force-threaded and runs always in hardirq context. This is
    a problem because spinlock_t requires a preemptible context on PREEMPT_RT.
    
    In this particular instance, regmap mmio uses spinlock_t to protect the
    register access and IRQF_ONESHOT is set on the IRQ. In this case, it is
    actually better to do everything in threaded handler and it solves the
    problem with PREEMPT_RT.
    
    Reported-by: Arseniy Krasnov <[email protected]>
    Closes: https://lore.kernel.org/linux-amlogic/[email protected]
    Suggested-by: Sebastian Andrzej Siewior <[email protected]>
    Fixes: b11d26660dff ("ASoC: meson: axg-fifo: use threaded irq to check periods")
    Signed-off-by: Jerome Brunet <[email protected]>
    Reviewed-by: Sebastian Andrzej Siewior <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: SOF: Remove libraries from topology lookups [+ + +]
Author: Curtis Malainey <[email protected]>
Date:   Wed Jul 31 14:21:44 2024 -0700

    ASoC: SOF: Remove libraries from topology lookups
    
    [ Upstream commit 7354eb7f1558466e92e926802d36e69e42938ea9 ]
    
    Default firmware shipped in open source are not licensed for 3P
    libraries, therefore topologies should not reference them.
    
    If a OS wants to use 3P (that they have licensed) then they should use
    the appropriate topology override mechanisms.
    
    Fixes: 8a7d5d85ed2161 ("ASoC: SOF: mediatek: mt8195: Add devicetree support to select topologies")
    Signed-off-by: Curtis Malainey <[email protected]>
    Cc: Wojciech Macek <[email protected]>
    Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
block/mq-deadline: Fix the tag reservation code [+ + +]
Author: Bart Van Assche <[email protected]>
Date:   Thu May 9 10:01:49 2024 -0700

    block/mq-deadline: Fix the tag reservation code
    
    commit 39823b47bbd40502632ffba90ebb34fff7c8b5e8 upstream.
    
    The current tag reservation code is based on a misunderstanding of the
    meaning of data->shallow_depth. Fix the tag reservation code as follows:
    * By default, do not reserve any tags for synchronous requests because
      for certain use cases reserving tags reduces performance. See also
      Harshit Mogalapalli, [bug-report] Performance regression with fio
      sequential-write on a multipath setup, 2024-03-07
      (https://lore.kernel.org/linux-block/[email protected]/)
    * Reduce min_shallow_depth to one because min_shallow_depth must be less
      than or equal any shallow_depth value.
    * Scale dd->async_depth from the range [1, nr_requests] to [1,
      bits_per_sbitmap_word].
    
    Cc: Christoph Hellwig <[email protected]>
    Cc: Damien Le Moal <[email protected]>
    Cc: Zhiguo Niu <[email protected]>
    Fixes: 07757588e507 ("block/mq-deadline: Reserve 25% of scheduler tags for synchronous requests")
    Signed-off-by: Bart Van Assche <[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: Greg Kroah-Hartman <[email protected]>

 
block: Call .limit_depth() after .hctx has been set [+ + +]
Author: Bart Van Assche <[email protected]>
Date:   Thu May 9 10:01:48 2024 -0700

    block: Call .limit_depth() after .hctx has been set
    
    commit 6259151c04d4e0085e00d2dcb471ebdd1778e72e upstream.
    
    Call .limit_depth() after data->hctx has been set such that data->hctx can
    be used in .limit_depth() implementations.
    
    Cc: Christoph Hellwig <[email protected]>
    Cc: Damien Le Moal <[email protected]>
    Cc: Zhiguo Niu <[email protected]>
    Fixes: 07757588e507 ("block/mq-deadline: Reserve 25% of scheduler tags for synchronous requests")
    Signed-off-by: Bart Van Assche <[email protected]>
    Tested-by: Zhiguo Niu <[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: Greg Kroah-Hartman <[email protected]>

block: change rq_integrity_vec to respect the iterator [+ + +]
Author: Mikulas Patocka <[email protected]>
Date:   Mon May 27 17:40:10 2024 +0200

    block: change rq_integrity_vec to respect the iterator
    
    [ Upstream commit cf546dd289e0f6d2594c25e2fb4e19ee67c6d988 ]
    
    If we allocate a bio that is larger than NVMe maximum request size,
    attach integrity metadata to it and send it to the NVMe subsystem, the
    integrity metadata will be corrupted.
    
    Splitting the bio works correctly. The function bio_split will clone the
    bio, trim the iterator of the first bio and advance the iterator of the
    second bio.
    
    However, the function rq_integrity_vec has a bug - it returns the first
    vector of the bio's metadata and completely disregards the metadata
    iterator that was advanced when the bio was split. Thus, the second bio
    uses the same metadata as the first bio and this leads to metadata
    corruption.
    
    This commit changes rq_integrity_vec, so that it calls mp_bvec_iter_bvec
    instead of returning the first vector. mp_bvec_iter_bvec reads the
    iterator and uses it to build a bvec for the current position in the
    iterator.
    
    The "queue_max_integrity_segments(rq->q) > 1" check was removed, because
    the updated rq_integrity_vec function works correctly with multiple
    segments.
    
    Signed-off-by: Mikulas Patocka <[email protected]>
    Reviewed-by: Anuj Gupta <[email protected]>
    Reviewed-by: Kanchan Joshi <[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]>

block: use the right type for stub rq_integrity_vec() [+ + +]
Author: Jens Axboe <[email protected]>
Date:   Wed Jun 26 19:01:58 2024 -0600

    block: use the right type for stub rq_integrity_vec()
    
    commit 69b6517687a4b1fb250bd8c9c193a0a304c8ba17 upstream.
    
    For !CONFIG_BLK_DEV_INTEGRITY, rq_integrity_vec() wasn't updated
    properly. Fix it up.
    
    Fixes: cf546dd289e0 ("block: change rq_integrity_vec to respect the iterator")
    Signed-off-by: Jens Axboe <[email protected]>
    Cc: Matthieu Baerts <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Bluetooth: hci_sync: avoid dup filtering when passive scanning with adv monitor [+ + +]
Author: Anton Khirnov <[email protected]>
Date:   Mon Jul 29 21:58:10 2024 +0200

    Bluetooth: hci_sync: avoid dup filtering when passive scanning with adv monitor
    
    [ Upstream commit b5431dc2803ac159d6d4645ae237d15c3cb252db ]
    
    This restores behaviour (including the comment) from now-removed
    hci_request.c, and also matches existing code for active scanning.
    
    Without this, the duplicates filter is always active when passive
    scanning, which makes it impossible to work with devices that send
    nontrivial dynamic data in their advertisement reports.
    
    Fixes: abfeea476c68 ("Bluetooth: hci_sync: Convert MGMT_OP_START_DISCOVERY")
    Signed-off-by: Anton Khirnov <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: l2cap: always unlock channel in l2cap_conless_channel() [+ + +]
Author: Dmitry Antipov <[email protected]>
Date:   Wed Jul 31 12:19:36 2024 +0300

    Bluetooth: l2cap: always unlock channel in l2cap_conless_channel()
    
    [ Upstream commit c531e63871c0b50c8c4e62c048535a08886fba3e ]
    
    Add missing call to 'l2cap_chan_unlock()' on receive error handling
    path in 'l2cap_conless_channel()'.
    
    Fixes: a24cce144b98 ("Bluetooth: Fix reference counting of global L2CAP channels")
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=45ac74737e866894acb0
    Signed-off-by: Dmitry Antipov <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf: kprobe: remove unused declaring of bpf_kprobe_override [+ + +]
Author: Menglong Dong <[email protected]>
Date:   Mon Aug 5 14:01:21 2024 +0900

    bpf: kprobe: remove unused declaring of bpf_kprobe_override
    
    [ Upstream commit 0e8b53979ac86eddb3fd76264025a70071a25574 ]
    
    After the commit 66665ad2f102 ("tracing/kprobe: bpf: Compare instruction
    pointer with original one"), "bpf_kprobe_override" is not used anywhere
    anymore, and we can remove it now.
    
    Link: https://lore.kernel.org/all/[email protected]/
    
    Fixes: 66665ad2f102 ("tracing/kprobe: bpf: Compare instruction pointer with original one")
    Signed-off-by: Menglong Dong <[email protected]>
    Acked-by: Jiri Olsa <[email protected]>
    Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
btrfs: avoid using fixed char array size for tree names [+ + +]
Author: Qu Wenruo <[email protected]>
Date:   Fri Jul 19 18:56:46 2024 +0930

    btrfs: avoid using fixed char array size for tree names
    
    commit 12653ec36112ab55fa06c01db7c4432653d30a8d upstream.
    
    [BUG]
    There is a bug report that using the latest trunk GCC 15, btrfs would cause
    unterminated-string-initialization warning:
    
      linux-6.6/fs/btrfs/print-tree.c:29:49: error: initializer-string for array of ‘char’ is too long [-Werror=unterminated-string-initialization]
       29 |         { BTRFS_BLOCK_GROUP_TREE_OBJECTID,      "BLOCK_GROUP_TREE"      },
          |
          ^~~~~~~~~~~~~~~~~~
    
    [CAUSE]
    To print tree names we have an array of root_name_map structure, which
    uses "char name[16];" to store the name string of a tree.
    
    But the following trees have names exactly at 16 chars length:
    - "BLOCK_GROUP_TREE"
    - "RAID_STRIPE_TREE"
    
    This means we will have no space for the terminating '\0', and can lead
    to unexpected access when printing the name.
    
    [FIX]
    Instead of "char name[16];" use "const char *" instead.
    
    Since the name strings are all read-only data, and are all NULL
    terminated by default, there is not much need to bother the length at
    all.
    
    Reported-by: Sam James <[email protected]>
    Reported-by: Alejandro Colomar <[email protected]>
    Fixes: edde81f1abf29 ("btrfs: add raid stripe tree pretty printer")
    Fixes: 9c54e80ddc6bd ("btrfs: add code to support the block group root")
    CC: [email protected] # 6.1+
    Suggested-by: Alejandro Colomar <[email protected]>
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Reviewed-by: Alejandro Colomar <[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: Greg Kroah-Hartman <[email protected]>

btrfs: fix bitmap leak when loading free space cache on duplicate entry [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Wed Jul 3 15:40:59 2024 +0100

    btrfs: fix bitmap leak when loading free space cache on duplicate entry
    
    [ Upstream commit 320d8dc612660da84c3b70a28658bb38069e5a9a ]
    
    If we failed to link a free space entry because there's already a
    conflicting entry for the same offset, we free the free space entry but
    we don't free the associated bitmap that we had just allocated before.
    Fix that by freeing the bitmap before freeing the entry.
    
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

btrfs: fix corruption after buffer fault in during direct IO append write [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Fri Jul 26 11:12:52 2024 +0100

    btrfs: fix corruption after buffer fault in during direct IO append write
    
    commit 939b656bc8ab203fdbde26ccac22bcb7f0985be5 upstream.
    
    During an append (O_APPEND write flag) direct IO write if the input buffer
    was not previously faulted in, we can corrupt the file in a way that the
    final size is unexpected and it includes an unexpected hole.
    
    The problem happens like this:
    
    1) We have an empty file, with size 0, for example;
    
    2) We do an O_APPEND direct IO with a length of 4096 bytes and the input
       buffer is not currently faulted in;
    
    3) We enter btrfs_direct_write(), lock the inode and call
       generic_write_checks(), which calls generic_write_checks_count(), and
       that function sets the iocb position to 0 with the following code:
    
            if (iocb->ki_flags & IOCB_APPEND)
                    iocb->ki_pos = i_size_read(inode);
    
    4) We call btrfs_dio_write() and enter into iomap, which will end up
       calling btrfs_dio_iomap_begin() and that calls
       btrfs_get_blocks_direct_write(), where we update the i_size of the
       inode to 4096 bytes;
    
    5) After btrfs_dio_iomap_begin() returns, iomap will attempt to access
       the page of the write input buffer (at iomap_dio_bio_iter(), with a
       call to bio_iov_iter_get_pages()) and fail with -EFAULT, which gets
       returned to btrfs at btrfs_direct_write() via btrfs_dio_write();
    
    6) At btrfs_direct_write() we get the -EFAULT error, unlock the inode,
       fault in the write buffer and then goto to the label 'relock';
    
    7) We lock again the inode, do all the necessary checks again and call
       again generic_write_checks(), which calls generic_write_checks_count()
       again, and there we set the iocb's position to 4K, which is the current
       i_size of the inode, with the following code pointed above:
    
            if (iocb->ki_flags & IOCB_APPEND)
                    iocb->ki_pos = i_size_read(inode);
    
    8) Then we go again to btrfs_dio_write() and enter iomap and the write
       succeeds, but it wrote to the file range [4K, 8K), leaving a hole in
       the [0, 4K) range and an i_size of 8K, which goes against the
       expectations of having the data written to the range [0, 4K) and get an
       i_size of 4K.
    
    Fix this by not unlocking the inode before faulting in the input buffer,
    in case we get -EFAULT or an incomplete write, and not jumping to the
    'relock' label after faulting in the buffer - instead jump to a location
    immediately before calling iomap, skipping all the write checks and
    relocking. This solves this problem and it's fine even in case the input
    buffer is memory mapped to the same file range, since only holding the
    range locked in the inode's io tree can cause a deadlock, it's safe to
    keep the inode lock (VFS lock), as was fixed and described in commit
    51bd9563b678 ("btrfs: fix deadlock due to page faults during direct IO
    reads and writes").
    
    A sample reproducer provided by a reporter is the following:
    
       $ cat test.c
       #ifndef _GNU_SOURCE
       #define _GNU_SOURCE
       #endif
    
       #include <fcntl.h>
       #include <stdio.h>
       #include <sys/mman.h>
       #include <sys/stat.h>
       #include <unistd.h>
    
       int main(int argc, char *argv[])
       {
           if (argc < 2) {
               fprintf(stderr, "Usage: %s <test file>\n", argv[0]);
               return 1;
           }
    
           int fd = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC | O_DIRECT |
                         O_APPEND, 0644);
           if (fd < 0) {
               perror("creating test file");
               return 1;
           }
    
           char *buf = mmap(NULL, 4096, PROT_READ,
                            MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
           ssize_t ret = write(fd, buf, 4096);
           if (ret < 0) {
               perror("pwritev2");
               return 1;
           }
    
           struct stat stbuf;
           ret = fstat(fd, &stbuf);
           if (ret < 0) {
               perror("stat");
               return 1;
           }
    
           printf("size: %llu\n", (unsigned long long)stbuf.st_size);
           return stbuf.st_size == 4096 ? 0 : 1;
       }
    
    A test case for fstests will be sent soon.
    
    Reported-by: Hanna Czenczek <[email protected]>
    Link: https://lore.kernel.org/linux-btrfs/[email protected]/
    Fixes: 8184620ae212 ("btrfs: fix lost file sync on direct IO write with nowait and dsync iocb")
    CC: [email protected] # 6.1+
    Tested-by: Hanna Czenczek <[email protected]>
    Reviewed-by: Josef Bacik <[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 double inode unlock for direct IO sync writes [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Fri Aug 2 09:38:51 2024 +0100

    btrfs: fix double inode unlock for direct IO sync writes
    
    commit e0391e92f9ab4fb3dbdeb139c967dcfa7ac4b115 upstream.
    
    If we do a direct IO sync write, at btrfs_sync_file(), and we need to skip
    inode logging or we get an error starting a transaction or an error when
    flushing delalloc, we end up unlocking the inode when we shouldn't under
    the 'out_release_extents' label, and then unlock it again at
    btrfs_direct_write().
    
    Fix that by checking if we have to skip inode unlocking under that label.
    
    Reported-by: [email protected]
    Link: https://lore.kernel.org/linux-btrfs/[email protected]/
    Fixes: 939b656bc8ab ("btrfs: fix corruption after buffer fault in during direct IO append write")
    Reviewed-by: Josef Bacik <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
bus: mhi: host: pci_generic: add support for Telit FE990 modem [+ + +]
Author: Daniele Palmas <[email protected]>
Date:   Fri Aug 4 11:40:39 2023 +0200

    bus: mhi: host: pci_generic: add support for Telit FE990 modem
    
    commit 0724869ede9c169429bb622e2d28f97995a95656 upstream.
    
    Add support for Telit FE990 that has the same configuration as FN990:
    
    $ lspci -vv
    04:00.0 Unassigned class [ff00]: Qualcomm Device 0308
        Subsystem: Device 1c5d:2015
    
    Signed-off-by: Daniele Palmas <[email protected]>
    Reviewed-by: Manivannan Sadhasivam <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    [mani: minor update to commit subject and adjusted comment]
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Cc: Fabio Porcedda <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
can: mcp251xfd: tef: prepare to workaround broken TEF FIFO tail index erratum [+ + +]
Author: Marc Kleine-Budde <[email protected]>
Date:   Sun Jan 22 21:30:41 2023 +0100

    can: mcp251xfd: tef: prepare to workaround broken TEF FIFO tail index erratum
    
    [ Upstream commit b8e0ddd36ce9536ad7478dd27df06c9ae92370ba ]
    
    This is a preparatory patch to work around a problem similar to
    erratum DS80000789E 6 of the mcp2518fd, the other variants of the chip
    family (mcp2517fd and mcp251863) are probably also affected.
    
    Erratum DS80000789E 6 says "reading of the FIFOCI bits in the FIFOSTA
    register for an RX FIFO may be corrupted". However observation shows
    that this problem is not limited to RX FIFOs but also effects the TEF
    FIFO.
    
    When handling the TEF interrupt, the driver reads the FIFO header
    index from the TEF FIFO STA register of the chip.
    
    In the bad case, the driver reads a too large head index. In the
    original code, the driver always trusted the read value, which caused
    old CAN transmit complete events that were already processed to be
    re-processed.
    
    Instead of reading and trusting the head index, read the head index
    and calculate the number of CAN frames that were supposedly received -
    replace mcp251xfd_tef_ring_update() with mcp251xfd_get_tef_len().
    
    The mcp251xfd_handle_tefif() function reads the CAN transmit complete
    events from the chip, iterates over them and pushes them into the
    network stack. The original driver already contains code to detect old
    CAN transmit complete events, that will be updated in the next patch.
    
    Cc: Stefan Althöfer <[email protected]>
    Cc: Thomas Kopp <[email protected]>
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

can: mcp251xfd: tef: update workaround for erratum DS80000789E 6 of mcp2518fd [+ + +]
Author: Marc Kleine-Budde <[email protected]>
Date:   Sun Jan 22 22:35:03 2023 +0100

    can: mcp251xfd: tef: update workaround for erratum DS80000789E 6 of mcp2518fd
    
    [ Upstream commit 3a0a88fcbaf9e027ecca3fe8775be9700b4d6460 ]
    
    This patch updates the workaround for a problem similar to erratum
    DS80000789E 6 of the mcp2518fd, the other variants of the chip
    family (mcp2517fd and mcp251863) are probably also affected.
    
    Erratum DS80000789E 6 says "reading of the FIFOCI bits in the FIFOSTA
    register for an RX FIFO may be corrupted". However observation shows
    that this problem is not limited to RX FIFOs but also effects the TEF
    FIFO.
    
    In the bad case, the driver reads a too large head index. As the FIFO
    is implemented as a ring buffer, this results in re-handling old CAN
    transmit complete events.
    
    Every transmit complete event contains with a sequence number that
    equals to the sequence number of the corresponding TX request. This
    way old TX complete events can be detected.
    
    If the original driver detects a non matching sequence number, it
    prints an info message and tries again later. As wrong sequence
    numbers can be explained by the erratum DS80000789E 6, demote the info
    message to debug level, streamline the code and update the comments.
    
    Keep the behavior: If an old CAN TX complete event is detected, abort
    the iteration and mark the number of valid CAN TX complete events as
    processed in the chip by incrementing the FIFO's tail index.
    
    Cc: Stefan Althöfer <[email protected]>
    Cc: Thomas Kopp <[email protected]>
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
clocksource/drivers/sh_cmt: Address race condition for clock events [+ + +]
Author: Niklas Söderlund <[email protected]>
Date:   Tue Jul 2 21:02:30 2024 +0200

    clocksource/drivers/sh_cmt: Address race condition for clock events
    
    [ Upstream commit db19d3aa77612983a02bd223b3f273f896b243cf ]
    
    There is a race condition in the CMT interrupt handler. In the interrupt
    handler the driver sets a driver private flag, FLAG_IRQCONTEXT. This
    flag is used to indicate any call to set_next_event() should not be
    directly propagated to the device, but instead cached. This is done as
    the interrupt handler itself reprograms the device when needed before it
    completes and this avoids this operation to take place twice.
    
    It is unclear why this design was chosen, my suspicion is to allow the
    struct clock_event_device.event_handler callback, which is called while
    the FLAG_IRQCONTEXT is set, can update the next event without having to
    write to the device twice.
    
    Unfortunately there is a race between when the FLAG_IRQCONTEXT flag is
    set and later cleared where the interrupt handler have already started to
    write the next event to the device. If set_next_event() is called in
    this window the value is only cached in the driver but not written. This
    leads to the board to misbehave, or worse lockup and produce a splat.
    
       rcu: INFO: rcu_preempt detected stalls on CPUs/tasks:
       rcu:     0-...!: (0 ticks this GP) idle=f5e0/0/0x0 softirq=519/519 fqs=0 (false positive?)
       rcu:     (detected by 1, t=6502 jiffies, g=-595, q=77 ncpus=2)
       Sending NMI from CPU 1 to CPUs 0:
       NMI backtrace for cpu 0
       CPU: 0 PID: 0 Comm: swapper/0 Not tainted 6.10.0-rc5-arm64-renesas-00019-g74a6f86eaf1c-dirty #20
       Hardware name: Renesas Salvator-X 2nd version board based on r8a77965 (DT)
       pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
       pc : tick_check_broadcast_expired+0xc/0x40
       lr : cpu_idle_poll.isra.0+0x8c/0x168
       sp : ffff800081c63d70
       x29: ffff800081c63d70 x28: 00000000580000c8 x27: 00000000bfee5610
       x26: 0000000000000027 x25: 0000000000000000 x24: 0000000000000000
       x23: ffff00007fbb9100 x22: ffff8000818f1008 x21: ffff8000800ef07c
       x20: ffff800081c79ec0 x19: ffff800081c70c28 x18: 0000000000000000
       x17: 0000000000000000 x16: 0000000000000000 x15: 0000ffffc2c717d8
       x14: 0000000000000000 x13: ffff000009c18080 x12: ffff8000825f7fc0
       x11: 0000000000000000 x10: ffff8000818f3cd4 x9 : 0000000000000028
       x8 : ffff800081c79ec0 x7 : ffff800081c73000 x6 : 0000000000000000
       x5 : 0000000000000000 x4 : ffff7ffffe286000 x3 : 0000000000000000
       x2 : ffff7ffffe286000 x1 : ffff800082972900 x0 : ffff8000818f1008
       Call trace:
        tick_check_broadcast_expired+0xc/0x40
        do_idle+0x9c/0x280
        cpu_startup_entry+0x34/0x40
        kernel_init+0x0/0x11c
        do_one_initcall+0x0/0x260
        __primary_switched+0x80/0x88
       rcu: rcu_preempt kthread timer wakeup didn't happen for 6501 jiffies! g-595 f0x0 RCU_GP_WAIT_FQS(5) ->state=0x402
       rcu:     Possible timer handling issue on cpu=0 timer-softirq=262
       rcu: rcu_preempt kthread starved for 6502 jiffies! g-595 f0x0 RCU_GP_WAIT_FQS(5) ->state=0x402 ->cpu=0
       rcu:     Unless rcu_preempt kthread gets sufficient CPU time, OOM is now expected behavior.
       rcu: RCU grace-period kthread stack dump:
       task:rcu_preempt     state:I stack:0     pid:15    tgid:15    ppid:2      flags:0x00000008
       Call trace:
        __switch_to+0xbc/0x100
        __schedule+0x358/0xbe0
        schedule+0x48/0x148
        schedule_timeout+0xc4/0x138
        rcu_gp_fqs_loop+0x12c/0x764
        rcu_gp_kthread+0x208/0x298
        kthread+0x10c/0x110
        ret_from_fork+0x10/0x20
    
    The design have been part of the driver since it was first merged in
    early 2009. It becomes increasingly harder to trigger the issue the
    older kernel version one tries. It only takes a few boots on v6.10-rc5,
    while hundreds of boots are needed to trigger it on v5.10.
    
    Close the race condition by using the CMT channel lock for the two
    competing sections. The channel lock was added to the driver after its
    initial design.
    
    Signed-off-by: Niklas Söderlund <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Daniel Lezcano <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
clocksource: Fix brown-bag boolean thinko in cs_watchdog_read() [+ + +]
Author: Paul E. McKenney <[email protected]>
Date:   Fri Aug 2 08:46:15 2024 -0700

    clocksource: Fix brown-bag boolean thinko in cs_watchdog_read()
    
    [ Upstream commit f2655ac2c06a15558e51ed6529de280e1553c86e ]
    
    The current "nretries > 1 || nretries >= max_retries" check in
    cs_watchdog_read() will always evaluate to true, and thus pr_warn(), if
    nretries is greater than 1.  The intent is instead to never warn on the
    first try, but otherwise warn if the successful retry was the last retry.
    
    Therefore, change that "||" to "&&".
    
    Fixes: db3a34e17433 ("clocksource: Retry clock read if long delays detected")
    Reported-by: Borislav Petkov <[email protected]>
    Signed-off-by: Paul E. McKenney <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/all/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

clocksource: Scale the watchdog read retries automatically [+ + +]
Author: Feng Tang <[email protected]>
Date:   Wed Feb 21 14:08:59 2024 +0800

    clocksource: Scale the watchdog read retries automatically
    
    [ Upstream commit 2ed08e4bc53298db3f87b528cd804cb0cce066a9 ]
    
    On a 8-socket server the TSC is wrongly marked as 'unstable' and disabled
    during boot time on about one out of 120 boot attempts:
    
        clocksource: timekeeping watchdog on CPU227: wd-tsc-wd excessive read-back delay of 153560ns vs. limit of 125000ns,
        wd-wd read-back delay only 11440ns, attempt 3, marking tsc unstable
        tsc: Marking TSC unstable due to clocksource watchdog
        TSC found unstable after boot, most likely due to broken BIOS. Use 'tsc=unstable'.
        sched_clock: Marking unstable (119294969739, 159204297)<-(125446229205, -5992055152)
        clocksource: Checking clocksource tsc synchronization from CPU 319 to CPUs 0,99,136,180,210,542,601,896.
        clocksource: Switched to clocksource hpet
    
    The reason is that for platform with a large number of CPUs, there are
    sporadic big or huge read latencies while reading the watchog/clocksource
    during boot or when system is under stress work load, and the frequency and
    maximum value of the latency goes up with the number of online CPUs.
    
    The cCurrent code already has logic to detect and filter such high latency
    case by reading the watchdog twice and checking the two deltas. Due to the
    randomness of the latency, there is a low probabilty that the first delta
    (latency) is big, but the second delta is small and looks valid. The
    watchdog code retries the readouts by default twice, which is not
    necessarily sufficient for systems with a large number of CPUs.
    
    There is a command line parameter 'max_cswd_read_retries' which allows to
    increase the number of retries, but that's not user friendly as it needs to
    be tweaked per system. As the number of required retries is proportional to
    the number of online CPUs, this parameter can be calculated at runtime.
    
    Scale and enlarge the number of retries according to the number of online
    CPUs and remove the command line parameter completely.
    
    [ tglx: Massaged change log and comments ]
    
    Signed-off-by: Feng Tang <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Tested-by: Jin Wang <[email protected]>
    Tested-by: Paul E. McKenney <[email protected]>
    Reviewed-by: Waiman Long <[email protected]>
    Reviewed-by: Paul E. McKenney <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: f2655ac2c06a ("clocksource: Fix brown-bag boolean thinko in cs_watchdog_read()")
    Signed-off-by: Sasha Levin <[email protected]>

 
driver core: Fix uevent_show() vs driver detach race [+ + +]
Author: Dan Williams <[email protected]>
Date:   Fri Jul 12 12:42:09 2024 -0700

    driver core: Fix uevent_show() vs driver detach race
    
    commit 15fffc6a5624b13b428bb1c6e9088e32a55eb82c upstream.
    
    uevent_show() wants to de-reference dev->driver->name. There is no clean
    way for a device attribute to de-reference dev->driver unless that
    attribute is defined via (struct device_driver).dev_groups. Instead, the
    anti-pattern of taking the device_lock() in the attribute handler risks
    deadlocks with code paths that remove device attributes while holding
    the lock.
    
    This deadlock is typically invisible to lockdep given the device_lock()
    is marked lockdep_set_novalidate_class(), but some subsystems allocate a
    local lockdep key for @dev->mutex to reveal reports of the form:
    
     ======================================================
     WARNING: possible circular locking dependency detected
     6.10.0-rc7+ #275 Tainted: G           OE    N
     ------------------------------------------------------
     modprobe/2374 is trying to acquire lock:
     ffff8c2270070de0 (kn->active#6){++++}-{0:0}, at: __kernfs_remove+0xde/0x220
    
     but task is already holding lock:
     ffff8c22016e88f8 (&cxl_root_key){+.+.}-{3:3}, at: device_release_driver_internal+0x39/0x210
    
     which lock already depends on the new lock.
    
     the existing dependency chain (in reverse order) is:
    
     -> #1 (&cxl_root_key){+.+.}-{3:3}:
            __mutex_lock+0x99/0xc30
            uevent_show+0xac/0x130
            dev_attr_show+0x18/0x40
            sysfs_kf_seq_show+0xac/0xf0
            seq_read_iter+0x110/0x450
            vfs_read+0x25b/0x340
            ksys_read+0x67/0xf0
            do_syscall_64+0x75/0x190
            entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
     -> #0 (kn->active#6){++++}-{0:0}:
            __lock_acquire+0x121a/0x1fa0
            lock_acquire+0xd6/0x2e0
            kernfs_drain+0x1e9/0x200
            __kernfs_remove+0xde/0x220
            kernfs_remove_by_name_ns+0x5e/0xa0
            device_del+0x168/0x410
            device_unregister+0x13/0x60
            devres_release_all+0xb8/0x110
            device_unbind_cleanup+0xe/0x70
            device_release_driver_internal+0x1c7/0x210
            driver_detach+0x47/0x90
            bus_remove_driver+0x6c/0xf0
            cxl_acpi_exit+0xc/0x11 [cxl_acpi]
            __do_sys_delete_module.isra.0+0x181/0x260
            do_syscall_64+0x75/0x190
            entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    The observation though is that driver objects are typically much longer
    lived than device objects. It is reasonable to perform lockless
    de-reference of a @driver pointer even if it is racing detach from a
    device. Given the infrequency of driver unregistration, use
    synchronize_rcu() in module_remove_driver() to close any potential
    races.  It is potentially overkill to suffer synchronize_rcu() just to
    handle the rare module removal racing uevent_show() event.
    
    Thanks to Tetsuo Handa for the debug analysis of the syzbot report [1].
    
    Fixes: c0a40097f0bc ("drivers: core: synchronize really_probe() and dev_uevent()")
    Reported-by: [email protected]
    Reported-by: Tetsuo Handa <[email protected]>
    Closes: http://lore.kernel.org/[email protected] [1]
    Link: http://lore.kernel.org/[email protected]
    Cc: [email protected]
    Cc: Ashish Sangwan <[email protected]>
    Cc: Namjae Jeon <[email protected]>
    Cc: Dirk Behme <[email protected]>
    Cc: Greg Kroah-Hartman <[email protected]>
    Cc: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Dan Williams <[email protected]>
    Link: https://lore.kernel.org/r/172081332794.577428.9738802016494057132.stgit@dwillia2-xfh.jf.intel.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amd/display: Add NULL check for 'afb' before dereferencing in amdgpu_dm_plane_handle_cursor_update [+ + +]
Author: Srinivasan Shanmugam <[email protected]>
Date:   Wed Jun 5 21:13:40 2024 +0530

    drm/amd/display: Add NULL check for 'afb' before dereferencing in amdgpu_dm_plane_handle_cursor_update
    
    [ Upstream commit 38e6f715b02b572f74677eb2f29d3b4bc6f1ddff ]
    
    This commit adds a null check for the 'afb' variable in the
    amdgpu_dm_plane_handle_cursor_update function. Previously, 'afb' was
    assumed to be null, but was used later in the code without a null check.
    This could potentially lead to a null pointer dereference.
    
    Fixes the below:
    drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_plane.c:1298 amdgpu_dm_plane_handle_cursor_update() error: we previously assumed 'afb' could be null (see line 1252)
    
    Cc: Tom Chung <[email protected]>
    Cc: Rodrigo Siqueira <[email protected]>
    Cc: Roman Li <[email protected]>
    Cc: Hersen Wu <[email protected]>
    Cc: Alex Hung <[email protected]>
    Cc: Aurabindo Pillai <[email protected]>
    Cc: Harry Wentland <[email protected]>
    Signed-off-by: Srinivasan Shanmugam <[email protected]>
    Reviewed-by: Harry Wentland <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/amd/display: Add null checker before passing variables [+ + +]
Author: Alex Hung <[email protected]>
Date:   Tue Jun 4 16:33:18 2024 -0600

    drm/amd/display: Add null checker before passing variables
    
    [ Upstream commit 8092aa3ab8f7b737a34b71f91492c676a843043a ]
    
    Checks null pointer before passing variables to functions.
    
    This fixes 3 NULL_RETURNS issues reported by Coverity.
    
    Reviewed-by: Harry Wentland <[email protected]>
    Acked-by: Hamza Mahfooz <[email protected]>
    Signed-off-by: Alex Hung <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/amd/display: Skip Recompute DSC Params if no Stream on Link [+ + +]
Author: Fangzhi Zuo <[email protected]>
Date:   Fri Jul 12 16:30:03 2024 -0400

    drm/amd/display: Skip Recompute DSC Params if no Stream on Link
    
    commit 50e376f1fe3bf571d0645ddf48ad37eb58323919 upstream.
    
    [why]
    Encounter NULL pointer dereference uner mst + dsc setup.
    
    BUG: kernel NULL pointer dereference, address: 0000000000000008
        PGD 0 P4D 0
        Oops: 0000 [#1] PREEMPT SMP NOPTI
        CPU: 4 PID: 917 Comm: sway Not tainted 6.3.9-arch1-1 #1 124dc55df4f5272ccb409f39ef4872fc2b3376a2
        Hardware name: LENOVO 20NKS01Y00/20NKS01Y00, BIOS R12ET61W(1.31 ) 07/28/2022
        RIP: 0010:drm_dp_atomic_find_time_slots+0x5e/0x260 [drm_display_helper]
        Code: 01 00 00 48 8b 85 60 05 00 00 48 63 80 88 00 00 00 3b 43 28 0f 8d 2e 01 00 00 48 8b 53 30 48 8d 04 80 48 8d 04 c2 48 8b 40 18 <48> 8>
        RSP: 0018:ffff960cc2df77d8 EFLAGS: 00010293
        RAX: 0000000000000000 RBX: ffff8afb87e81280 RCX: 0000000000000224
        RDX: ffff8afb9ee37c00 RSI: ffff8afb8da1a578 RDI: ffff8afb87e81280
        RBP: ffff8afb83d67000 R08: 0000000000000001 R09: ffff8afb9652f850
        R10: ffff960cc2df7908 R11: 0000000000000002 R12: 0000000000000000
        R13: ffff8afb8d7688a0 R14: ffff8afb8da1a578 R15: 0000000000000224
        FS:  00007f4dac35ce00(0000) GS:ffff8afe30b00000(0000) knlGS:0000000000000000
        CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
        CR2: 0000000000000008 CR3: 000000010ddc6000 CR4: 00000000003506e0
        Call Trace:
    <TASK>
         ? __die+0x23/0x70
         ? page_fault_oops+0x171/0x4e0
         ? plist_add+0xbe/0x100
         ? exc_page_fault+0x7c/0x180
         ? asm_exc_page_fault+0x26/0x30
         ? drm_dp_atomic_find_time_slots+0x5e/0x260 [drm_display_helper 0e67723696438d8e02b741593dd50d80b44c2026]
         ? drm_dp_atomic_find_time_slots+0x28/0x260 [drm_display_helper 0e67723696438d8e02b741593dd50d80b44c2026]
         compute_mst_dsc_configs_for_link+0x2ff/0xa40 [amdgpu 62e600d2a75e9158e1cd0a243bdc8e6da040c054]
         ? fill_plane_buffer_attributes+0x419/0x510 [amdgpu 62e600d2a75e9158e1cd0a243bdc8e6da040c054]
         compute_mst_dsc_configs_for_state+0x1e1/0x250 [amdgpu 62e600d2a75e9158e1cd0a243bdc8e6da040c054]
         amdgpu_dm_atomic_check+0xecd/0x1190 [amdgpu 62e600d2a75e9158e1cd0a243bdc8e6da040c054]
         drm_atomic_check_only+0x5c5/0xa40
         drm_mode_atomic_ioctl+0x76e/0xbc0
    
    [how]
    dsc recompute should be skipped if no mode change detected on the new
    request. If detected, keep checking whether the stream is already on
    current state or not.
    
    Cc: Mario Limonciello <[email protected]>
    Cc: Alex Deucher <[email protected]>
    Cc: [email protected]
    Reviewed-by: Rodrigo Siqueira <[email protected]>
    Signed-off-by: Fangzhi Zuo <[email protected]>
    Signed-off-by: Wayne Lin <[email protected]>
    Tested-by: Daniel Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 8151a6c13111b465dbabe07c19f572f7cbd16fef)
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amd/pm: Fix the null pointer dereference for vega10_hwmgr [+ + +]
Author: Bob Zhou <[email protected]>
Date:   Fri May 31 15:01:22 2024 +0800

    drm/amd/pm: Fix the null pointer dereference for vega10_hwmgr
    
    [ Upstream commit 50151b7f1c79a09117837eb95b76c2de76841dab ]
    
    Check return value and conduct null pointer handling to avoid null pointer dereference.
    
    Signed-off-by: Bob Zhou <[email protected]>
    Reviewed-by: Tim Huang <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amdgpu/pm: Fix the null pointer dereference for smu7 [+ + +]
Author: Ma Jun <[email protected]>
Date:   Fri May 10 15:01:59 2024 +0800

    drm/amdgpu/pm: Fix the null pointer dereference for smu7
    
    [ Upstream commit c02c1960c93eede587576625a1221205a68a904f ]
    
    optimize the code to avoid pass a null pointer (hwmgr->backend)
    to function smu7_update_edc_leakage_table.
    
    Signed-off-by: Ma Jun <[email protected]>
    Reviewed-by: Yang Wang <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/amdgpu/pm: Fix the null pointer dereference in apply_state_adjust_rules [+ + +]
Author: Ma Jun <[email protected]>
Date:   Thu May 9 15:51:35 2024 +0800

    drm/amdgpu/pm: Fix the null pointer dereference in apply_state_adjust_rules
    
    [ Upstream commit d19fb10085a49b77578314f69fff21562f7cd054 ]
    
    Check the pointer value to fix potential null pointer
    dereference
    
    Acked-by: Yang Wang<[email protected]>
    Signed-off-by: Ma Jun <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/amdgpu/pm: Fix the param type of set_power_profile_mode [+ + +]
Author: Ma Jun <[email protected]>
Date:   Sun Apr 28 15:58:10 2024 +0800

    drm/amdgpu/pm: Fix the param type of set_power_profile_mode
    
    [ Upstream commit f683f24093dd94a831085fe0ea8e9dc4c6c1a2d1 ]
    
    Function .set_power_profile_mode need an array as input
    parameter. So define variable workload as an array to fix
    the below coverity warning.
    
    "Passing &workload to function hwmgr->hwmgr_func->set_power_profile_mode
    which uses it as an array. This might corrupt or misinterpret adjacent
    memory locations"
    
    Signed-off-by: Ma Jun <[email protected]>
    Acked-by: Alex Deucher <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amdgpu: Add lock around VF RLCG interface [+ + +]
Author: Victor Skvortsov <[email protected]>
Date:   Mon May 27 16:10:43 2024 -0400

    drm/amdgpu: Add lock around VF RLCG interface
    
    [ Upstream commit e864180ee49b4d30e640fd1e1d852b86411420c9 ]
    
    flush_gpu_tlb may be called from another thread while
    device_gpu_recover is running.
    
    Both of these threads access registers through the VF
    RLCG interface during VF Full Access. Add a lock around this interface
    to prevent race conditions between these threads.
    
    Signed-off-by: Victor Skvortsov <[email protected]>
    Reviewed-by: Zhigang Luo <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/amdgpu: Fix the null pointer dereference to ras_manager [+ + +]
Author: Ma Jun <[email protected]>
Date:   Sat May 11 15:48:02 2024 +0800

    drm/amdgpu: Fix the null pointer dereference to ras_manager
    
    [ Upstream commit 4c11d30c95576937c6c35e6f29884761f2dddb43 ]
    
    Check ras_manager before using it
    
    Signed-off-by: Ma Jun <[email protected]>
    Reviewed-by: Lijo Lazar <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/bridge: analogix_dp: properly handle zero sized AUX transactions [+ + +]
Author: Lucas Stach <[email protected]>
Date:   Mon Mar 18 21:39:23 2024 +0100

    drm/bridge: analogix_dp: properly handle zero sized AUX transactions
    
    commit e82290a2e0e8ec5e836ecad1ca025021b3855c2d upstream.
    
    Address only transactions without any data are valid and should not
    be flagged as short transactions. Simply return the message size when
    no transaction errors occured.
    
    CC: [email protected]
    Signed-off-by: Lucas Stach <[email protected]>
    Reviewed-by: Robert Foss <[email protected]>
    Signed-off-by: Robert Foss <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/client: fix null pointer dereference in drm_client_modeset_probe [+ + +]
Author: Ma Ke <[email protected]>
Date:   Fri Aug 2 12:47:36 2024 +0800

    drm/client: fix null pointer dereference in drm_client_modeset_probe
    
    commit 113fd6372a5bb3689aba8ef5b8a265ed1529a78f upstream.
    
    In drm_client_modeset_probe(), the return value of drm_mode_duplicate() is
    assigned to modeset->mode, which will lead to a possible NULL pointer
    dereference on failure of drm_mode_duplicate(). Add a check to avoid npd.
    
    Cc: [email protected]
    Fixes: cf13909aee05 ("drm/fb-helper: Move out modeset config code")
    Signed-off-by: Ma Ke <[email protected]>
    Reviewed-by: Thomas Zimmermann <[email protected]>
    Signed-off-by: Thomas Zimmermann <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/dp_mst: Skip CSN if topology probing is not done yet [+ + +]
Author: Wayne Lin <[email protected]>
Date:   Wed Jun 26 16:48:24 2024 +0800

    drm/dp_mst: Skip CSN if topology probing is not done yet
    
    commit ddf983488c3e8d30d5c2e2b315ae7d9cd87096ed upstream.
    
    [Why]
    During resume, observe that we receive CSN event before we start topology
    probing. Handling CSN at this moment based on uncertain topology is
    unnecessary.
    
    [How]
    Add checking condition in drm_dp_mst_handle_up_req() to skip handling CSN
    if the topology is yet to be probed.
    
    Cc: Lyude Paul <[email protected]>
    Cc: Harry Wentland <[email protected]>
    Cc: Jani Nikula <[email protected]>
    Cc: Imre Deak <[email protected]>
    Cc: Daniel Vetter <[email protected]>
    Cc: [email protected]
    Signed-off-by: Wayne Lin <[email protected]>
    Reviewed-by: Lyude Paul <[email protected]>
    Signed-off-by: Lyude Paul <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/lima: Mark simple_ondemand governor as softdep [+ + +]
Author: Dragan Simic <[email protected]>
Date:   Mon Jun 17 22:22:02 2024 +0200

    drm/lima: Mark simple_ondemand governor as softdep
    
    commit 0c94f58cef319ad054fd909b3bf4b7d09c03e11c upstream.
    
    Lima DRM driver uses devfreq to perform DVFS, while using simple_ondemand
    devfreq governor by default.  This causes driver initialization to fail on
    boot when simple_ondemand governor isn't built into the kernel statically,
    as a result of the missing module dependency and, consequently, the
    required governor module not being included in the initial ramdisk.  Thus,
    let's mark simple_ondemand governor as a softdep for Lima, to have its
    kernel module included in the initial ramdisk.
    
    This is a rather longstanding issue that has forced distributions to build
    devfreq governors statically into their kernels, [1][2] or may have forced
    some users to introduce unnecessary workarounds.
    
    Having simple_ondemand marked as a softdep for Lima may not resolve this
    issue for all Linux distributions.  In particular, it will remain
    unresolved for the distributions whose utilities for the initial ramdisk
    generation do not handle the available softdep information [3] properly
    yet.  However, some Linux distributions already handle softdeps properly
    while generating their initial ramdisks, [4] and this is a prerequisite
    step in the right direction for the distributions that don't handle them
    properly yet.
    
    [1] https://gitlab.manjaro.org/manjaro-arm/packages/core/linux-pinephone/-/blob/6.7-megi/config?ref_type=heads#L5749
    [2] https://gitlab.com/postmarketOS/pmaports/-/blob/7f64e287e7732c9eaa029653e73ca3d4ba1c8598/main/linux-postmarketos-allwinner/config-postmarketos-allwinner.aarch64#L4654
    [3] https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git/commit/?id=49d8e0b59052999de577ab732b719cfbeb89504d
    [4] https://github.com/archlinux/mkinitcpio/commit/97ac4d37aae084a050be512f6d8f4489054668ad
    
    Cc: Philip Muller <[email protected]>
    Cc: Oliver Smith <[email protected]>
    Cc: Daniel Smith <[email protected]>
    Cc: [email protected]
    Fixes: 1996970773a3 ("drm/lima: Add optional devfreq and cooling device support")
    Signed-off-by: Dragan Simic <[email protected]>
    Signed-off-by: Qiang Yu <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/fdaf2e41bb6a0c5118ff9cc21f4f62583208d885.1718655070.git.dsimic@manjaro.org
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/mgag200: Bind I2C lifetime to DRM device [+ + +]
Author: Thomas Zimmermann <[email protected]>
Date:   Mon May 13 14:51:07 2024 +0200

    drm/mgag200: Bind I2C lifetime to DRM device
    
    commit eb1ae34e48a09b7a1179c579aed042b032e408f4 upstream.
    
    Managed cleanup with devm_add_action_or_reset() will release the I2C
    adapter when the underlying Linux device goes away. But the connector
    still refers to it, so this cleanup leaves behind a stale pointer
    in struct drm_connector.ddc.
    
    Bind the lifetime of the I2C adapter to the connector's lifetime by
    using DRM's managed release. When the DRM device goes away (after
    the Linux device) DRM will first clean up the connector and then
    clean up the I2C adapter.
    
    Signed-off-by: Thomas Zimmermann <[email protected]>
    Reviewed-by: Jocelyn Falempe <[email protected]>
    Fixes: b279df242972 ("drm/mgag200: Switch I2C code to managed cleanup")
    Cc: Thomas Zimmermann <[email protected]>
    Cc: Jocelyn Falempe <[email protected]>
    Cc: Dave Airlie <[email protected]>
    Cc: [email protected]
    Cc: <[email protected]> # v6.0+
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/mgag200: Set DDC timeout in milliseconds [+ + +]
Author: Thomas Zimmermann <[email protected]>
Date:   Mon May 13 14:51:06 2024 +0200

    drm/mgag200: Set DDC timeout in milliseconds
    
    commit ecde5db1598aecab54cc392282c15114f526f05f upstream.
    
    Compute the i2c timeout in jiffies from a value in milliseconds. The
    original values of 2 jiffies equals 2 milliseconds if HZ has been
    configured to a value of 1000. This corresponds to 2.2 milliseconds
    used by most other DRM drivers. Update mgag200 accordingly.
    
    Signed-off-by: Thomas Zimmermann <[email protected]>
    Reviewed-by: Jocelyn Falempe <[email protected]>
    Fixes: 414c45310625 ("mgag200: initial g200se driver (v2)")
    Cc: Dave Airlie <[email protected]>
    Cc: Maarten Lankhorst <[email protected]>
    Cc: Maxime Ripard <[email protected]>
    Cc: Thomas Zimmermann <[email protected]>
    Cc: Jocelyn Falempe <[email protected]>
    Cc: [email protected]
    Cc: <[email protected]> # v3.5+
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ext4: fix uninitialized variable in ext4_inlinedir_to_tree [+ + +]
Author: Xiaxi Shen <[email protected]>
Date:   Tue Apr 30 20:30:17 2024 -0700

    ext4: fix uninitialized variable in ext4_inlinedir_to_tree
    
    [ Upstream commit 8dc9c3da79c84b13fdb135e2fb0a149a8175bffe ]
    
    Syzbot has found an uninit-value bug in ext4_inlinedir_to_tree
    
    This error happens because ext4_inlinedir_to_tree does not
    handle the case when ext4fs_dirhash returns an error
    
    This can be avoided by checking the return value of ext4fs_dirhash
    and propagating the error,
    similar to how it's done with ext4_htree_store_dirent
    
    Signed-off-by: Xiaxi Shen <[email protected]>
    Reported-and-tested-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=eaba5abe296837a640c0
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ext4: fix wrong unit use in ext4_mb_find_by_goal [+ + +]
Author: Kemeng Shi <[email protected]>
Date:   Sat Jun 3 23:03:11 2023 +0800

    ext4: fix wrong unit use in ext4_mb_find_by_goal
    
    [ Upstream commit 99c515e3a860576ba90c11acbc1d6488dfca6463 ]
    
    We need start in block unit while fe_start is in cluster unit. Use
    ext4_grp_offs_to_block helper to convert fe_start to get start in
    block unit.
    
    Signed-off-by: Kemeng Shi <[email protected]>
    Reviewed-by: Ojaswin Mujoo <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
genirq/irqdesc: Honor caller provided affinity in alloc_desc() [+ + +]
Author: Shay Drory <[email protected]>
Date:   Tue Aug 6 10:20:44 2024 +0300

    genirq/irqdesc: Honor caller provided affinity in alloc_desc()
    
    commit edbbaae42a56f9a2b39c52ef2504dfb3fb0a7858 upstream.
    
    Currently, whenever a caller is providing an affinity hint for an
    interrupt, the allocation code uses it to calculate the node and copies the
    cpumask into irq_desc::affinity.
    
    If the affinity for the interrupt is not marked 'managed' then the startup
    of the interrupt ignores irq_desc::affinity and uses the system default
    affinity mask.
    
    Prevent this by setting the IRQD_AFFINITY_SET flag for the interrupt in the
    allocator, which causes irq_setup_affinity() to use irq_desc::affinity on
    interrupt startup if the mask contains an online CPU.
    
    [ tglx: Massaged changelog ]
    
    Fixes: 45ddcecbfa94 ("genirq: Use affinity hint in irqdesc allocation")
    Signed-off-by: Shay Drory <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Cc: <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
i2c: qcom-geni: add desc struct to prepare support for I2C Master Hub variant [+ + +]
Author: Neil Armstrong <[email protected]>
Date:   Tue Nov 29 15:47:05 2022 +0100

    i2c: qcom-geni: add desc struct to prepare support for I2C Master Hub variant
    
    [ Upstream commit 14d02fbadb5dc1cdf66078ef8430dd1cd22bfd53 ]
    
    The I2C Master Hub is a stripped down version of the GENI Serial Engine
    QUP Wrapper Controller but only supporting I2C serial engines without
    DMA support.
    
    Those I2C serial engines variants have some requirements:
    - a separate "core" clock
    - doesn't support DMA, thus no memory interconnect path
    - fixed FIFO size not discoverable in the HW_PARAM_0 register
    
    Add a desc struct specifying all those requirements which will be used in
    a next change when adding the I2C Master Hub serial engine compatible.
    
    Signed-off-by: Neil Armstrong <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Signed-off-by: Wolfram Sang <[email protected]>
    Stable-dep-of: 9ba48db9f77c ("i2c: qcom-geni: Add missing geni_icc_disable in geni_i2c_runtime_resume")
    Signed-off-by: Sasha Levin <[email protected]>

i2c: qcom-geni: Add missing clk_disable_unprepare in geni_i2c_runtime_resume [+ + +]
Author: Gaosheng Cui <[email protected]>
Date:   Sat Aug 3 14:10:41 2024 +0800

    i2c: qcom-geni: Add missing clk_disable_unprepare in geni_i2c_runtime_resume
    
    [ Upstream commit b93d16bee557302d4e588375ececd833cc048acc ]
    
    Add the missing clk_disable_unprepare() before return in
    geni_i2c_runtime_resume().
    
    Fixes: 14d02fbadb5d ("i2c: qcom-geni: add desc struct to prepare support for I2C Master Hub variant")
    Signed-off-by: Gaosheng Cui <[email protected]>
    Reviewed-by: Vladimir Zapolskiy <[email protected]>
    Signed-off-by: Andi Shyti <[email protected]>
    Stable-dep-of: 9ba48db9f77c ("i2c: qcom-geni: Add missing geni_icc_disable in geni_i2c_runtime_resume")
    Signed-off-by: Sasha Levin <[email protected]>

i2c: qcom-geni: Add missing geni_icc_disable in geni_i2c_runtime_resume [+ + +]
Author: Gaosheng Cui <[email protected]>
Date:   Tue Aug 6 20:53:31 2024 +0800

    i2c: qcom-geni: Add missing geni_icc_disable in geni_i2c_runtime_resume
    
    [ Upstream commit 9ba48db9f77ce0001dbb882476fa46e092feb695 ]
    
    Add the missing geni_icc_disable() before return in
    geni_i2c_runtime_resume().
    
    Fixes: bf225ed357c6 ("i2c: i2c-qcom-geni: Add interconnect support")
    Signed-off-by: Gaosheng Cui <[email protected]>
    Reviewed-by: Vladimir Zapolskiy <[email protected]>
    Signed-off-by: Andi Shyti <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

i2c: qcom-geni: fix missing clk_disable_unprepare() and geni_se_resources_off() [+ + +]
Author: Yang Yingliang <[email protected]>
Date:   Thu Nov 30 09:43:24 2023 +0800

    i2c: qcom-geni: fix missing clk_disable_unprepare() and geni_se_resources_off()
    
    commit 043465b66506e8c647cdd38a2db1f2ee0f369a1b upstream.
    
    Add missing clk_disable_unprepare() and geni_se_resources_off() in the error
    path in geni_i2c_probe().
    
    Fixes: 14d02fbadb5d ("i2c: qcom-geni: add desc struct to prepare support for I2C Master Hub variant")
    Signed-off-by: Yang Yingliang <[email protected]>
    Reviewed-by: Andi Shyti <[email protected]>
    Signed-off-by: Wolfram Sang <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

i2c: smbus: Improve handling of stuck alerts [+ + +]
Author: Guenter Roeck <[email protected]>
Date:   Mon Jan 10 09:28:56 2022 -0800

    i2c: smbus: Improve handling of stuck alerts
    
    [ Upstream commit 37c526f00bc1c4f847fc800085f8f009d2e11be6 ]
    
    The following messages were observed while testing alert functionality
    on systems with multiple I2C devices on a single bus if alert was active
    on more than one chip.
    
    smbus_alert 3-000c: SMBALERT# from dev 0x0c, flag 0
    smbus_alert 3-000c: no driver alert()!
    
    and:
    
    smbus_alert 3-000c: SMBALERT# from dev 0x28, flag 0
    
    Once it starts, this message repeats forever at high rate. There is no
    device at any of the reported addresses.
    
    Analysis shows that this is seen if multiple devices have the alert pin
    active. Apparently some devices do not support SMBus arbitration correctly.
    They keep sending address bits after detecting an address collision and
    handle the collision not at all or too late.
    Specifically, address 0x0c is seen with ADT7461A at address 0x4c and
    ADM1021 at address 0x18 if alert is active on both chips. Address 0x28 is
    seen with ADT7483 at address 0x2a and ADT7461 at address 0x4c if alert is
    active on both chips.
    
    Once the system is in bad state (alert is set by more than one chip),
    it often only recovers by power cycling.
    
    To reduce the impact of this problem, abort the endless loop in
    smbus_alert() if the same address is read more than once and not
    handled by a driver.
    
    Fixes: b5527a7766f0 ("i2c: Add SMBus alert support")
    Signed-off-by: Guenter Roeck <[email protected]>
    [wsa: it also fixed an interrupt storm in one of my experiments]
    Tested-by: Wolfram Sang <[email protected]>
    [wsa: rebased, moved a comment as well, improved the 'invalid' value]
    Signed-off-by: Wolfram Sang <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

i2c: smbus: Send alert notifications to all devices if source not found [+ + +]
Author: Guenter Roeck <[email protected]>
Date:   Tue Jul 30 07:19:41 2024 -0700

    i2c: smbus: Send alert notifications to all devices if source not found
    
    [ Upstream commit f6c29f710c1ff2590109f83be3e212b86c01e0f3 ]
    
    If a SMBus alert is received and the originating device is not found,
    the reason may be that the address reported on the SMBus alert address
    is corrupted, for example because multiple devices asserted alert and
    do not correctly implement SMBus arbitration.
    
    If this happens, call alert handlers on all devices connected to the
    given I2C bus, in the hope that this cleans up the situation.
    
    This change reliably fixed the problem on a system with multiple devices
    on a single bus. Example log where the device on address 0x18 (ADM1021)
    and on address 0x4c (ADT7461A) both had the alert line asserted:
    
    smbus_alert 3-000c: SMBALERT# from dev 0x0c, flag 0
    smbus_alert 3-000c: no driver alert()!
    smbus_alert 3-000c: SMBALERT# from dev 0x0c, flag 0
    smbus_alert 3-000c: no driver alert()!
    lm90 3-0018: temp1 out of range, please check!
    lm90 3-0018: Disabling ALERT#
    lm90 3-0029: Everything OK
    lm90 3-002a: Everything OK
    lm90 3-004c: temp1 out of range, please check!
    lm90 3-004c: temp2 out of range, please check!
    lm90 3-004c: Disabling ALERT#
    
    Fixes: b5527a7766f0 ("i2c: Add SMBus alert support")
    Signed-off-by: Guenter Roeck <[email protected]>
    [wsa: fixed a typo in the commit message]
    Signed-off-by: Wolfram Sang <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ipv6: fix source address selection with route leak [+ + +]
Author: Nicolas Dichtel <[email protected]>
Date:   Wed Jul 10 10:14:28 2024 +0200

    ipv6: fix source address selection with route leak
    
    commit 252442f2ae317d109ef0b4b39ce0608c09563042 upstream.
    
    By default, an address assigned to the output interface is selected when
    the source address is not specified. This is problematic when a route,
    configured in a vrf, uses an interface from another vrf (aka route leak).
    The original vrf does not own the selected source address.
    
    Let's add a check against the output interface and call the appropriate
    function to select the source address.
    
    CC: [email protected]
    Fixes: 0d240e7811c4 ("net: vrf: Implement get_saddr for IPv6")
    Signed-off-by: Nicolas Dichtel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
irqchip/loongarch-cpu: Fix return value of lpic_gsi_to_irq() [+ + +]
Author: Huacai Chen <[email protected]>
Date:   Tue Jul 23 14:45:08 2024 +0800

    irqchip/loongarch-cpu: Fix return value of lpic_gsi_to_irq()
    
    commit 81a91abab1307d7725fa4620952c0767beae7753 upstream.
    
    lpic_gsi_to_irq() should return a valid Linux interrupt number if
    acpi_register_gsi() succeeds, and return 0 otherwise. But lpic_gsi_to_irq()
    converts a negative return value of acpi_register_gsi() to a positive value
    silently.
    
    Convert the return value explicitly.
    
    Fixes: e8bba72b396c ("irqchip / ACPI: Introduce ACPI_IRQ_MODEL_LPIC for LoongArch")
    Reported-by: Miao Wang <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Reviewed-by: Jiaxun Yang <[email protected]>
    Cc: <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
irqchip/mbigen: Fix mbigen node address layout [+ + +]
Author: Yipeng Zou <[email protected]>
Date:   Tue Jul 30 09:44:00 2024 +0800

    irqchip/mbigen: Fix mbigen node address layout
    
    [ Upstream commit 6be6cba9c4371d27f78d900ccfe34bb880d9ee20 ]
    
    The mbigen interrupt chip has its per node registers located in a
    contiguous region of page sized chunks. The code maps them into virtual
    address space as a contiguous region and determines the address of a node
    by using the node ID as index.
    
                        mbigen chip
           |-----------------|------------|--------------|
       mgn_node_0         mgn_node_1     ...         mgn_node_i
    |--------------|   |--------------|       |----------------------|
    [0x0000, 0x0x0FFF] [0x1000, 0x1FFF]    [i*0x1000, (i+1)*0x1000 - 1]
    
    This works correctly up to 10 nodes, but then fails because the 11th's
    array slot is used for the MGN_CLEAR registers.
    
                             mbigen chip
        |-----------|--------|--------|---------------|--------|
    mgn_node_0  mgn_node_1  ...  mgn_clear_register  ...   mgn_node_i
                                |-----------------|
                                 [0xA000, 0xAFFF]
    
    Skip the MGN_CLEAR register space when calculating the offset for node IDs
    greater than or equal to ten.
    
    Fixes: a6c2f87b8820 ("irqchip/mbigen: Implement the mbigen irq chip operation functions")
    Signed-off-by: Yipeng Zou <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>
 
irqchip/meson-gpio: Convert meson_gpio_irq_controller::lock to 'raw_spinlock_t' [+ + +]
Author: Arseniy Krasnov <[email protected]>
Date:   Mon Jul 29 16:18:50 2024 +0300

    irqchip/meson-gpio: Convert meson_gpio_irq_controller::lock to 'raw_spinlock_t'
    
    commit f872d4af79fe8c71ae291ce8875b477e1669a6c7 upstream.
    
    This lock is acquired under irq_desc::lock with interrupts disabled.
    
    When PREEMPT_RT is enabled, 'spinlock_t' becomes preemptible, which results
    in invalid lock acquire context;
    
      [ BUG: Invalid wait context ]
      swapper/0/1 is trying to lock:
      ffff0000008fed30 (&ctl->lock){....}-{3:3}, at: meson_gpio_irq_update_bits0
      other info that might help us debug this:
      context-{5:5}
      3 locks held by swapper/0/1:
       #0: ffff0000003cd0f8 (&dev->mutex){....}-{4:4}, at: __driver_attach+0x90c
       #1: ffff000004714650 (&desc->request_mutex){+.+.}-{4:4}, at: __setup_irq0
       #2: ffff0000047144c8 (&irq_desc_lock_class){-.-.}-{2:2}, at: __setup_irq0
      stack backtrace:
      CPU: 1 PID: 1 Comm: swapper/0 Not tainted 6.9.9-sdkernel #1
      Call trace:
       _raw_spin_lock_irqsave+0x60/0x88
       meson_gpio_irq_update_bits+0x34/0x70
       meson8_gpio_irq_set_type+0x78/0xc4
       meson_gpio_irq_set_type+0x30/0x60
       __irq_set_trigger+0x60/0x180
       __setup_irq+0x30c/0x6e0
       request_threaded_irq+0xec/0x1a4
    
    Fixes: 215f4cc0fb20 ("irqchip/meson: Add support for gpio interrupt controller")
    Signed-off-by: Arseniy Krasnov <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/all/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
irqchip/xilinx: Fix shift out of bounds [+ + +]
Author: Radhey Shyam Pandey <[email protected]>
Date:   Fri Aug 9 12:32:24 2024 +0530

    irqchip/xilinx: Fix shift out of bounds
    
    commit d73f0f49daa84176c3beee1606e73c7ffb6af8b2 upstream.
    
    The device tree property 'xlnx,kind-of-intr' is sanity checked that the
    bitmask contains only set bits which are in the range of the number of
    interrupts supported by the controller.
    
    The check is done by shifting the mask right by the number of supported
    interrupts and checking the result for zero.
    
    The data type of the mask is u32 and the number of supported interrupts is
    up to 32. In case of 32 interrupts the shift is out of bounds, resulting in
    a mismatch warning. The out of bounds condition is also reported by UBSAN:
    
      UBSAN: shift-out-of-bounds in irq-xilinx-intc.c:332:22
      shift exponent 32 is too large for 32-bit type 'unsigned int'
    
    Fix it by promoting the mask to u64 for the test.
    
    Fixes: d50466c90724 ("microblaze: intc: Refactor DT sanity check")
    Signed-off-by: Radhey Shyam Pandey <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/all/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
jbd2: avoid memleak in jbd2_journal_write_metadata_buffer [+ + +]
Author: Kemeng Shi <[email protected]>
Date:   Tue May 14 19:24:30 2024 +0800

    jbd2: avoid memleak in jbd2_journal_write_metadata_buffer
    
    [ Upstream commit cc102aa24638b90e04364d64e4f58a1fa91a1976 ]
    
    The new_bh is from alloc_buffer_head, we should call free_buffer_head to
    free it in error case.
    
    Signed-off-by: Kemeng Shi <[email protected]>
    Reviewed-by: Zhang Yi <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
jump_label: Fix the fix, brown paper bags galore [+ + +]
Author: Peter Zijlstra <[email protected]>
Date:   Wed Jul 31 12:43:21 2024 +0200

    jump_label: Fix the fix, brown paper bags galore
    
    [ Upstream commit 224fa3552029a3d14bec7acf72ded8171d551b88 ]
    
    Per the example of:
    
      !atomic_cmpxchg(&key->enabled, 0, 1)
    
    the inverse was written as:
    
      atomic_cmpxchg(&key->enabled, 1, 0)
    
    except of course, that while !old is only true for old == 0, old is
    true for everything except old == 0.
    
    Fix it to read:
    
      atomic_cmpxchg(&key->enabled, 1, 0) == 1
    
    such that only the 1->0 transition returns true and goes on to disable
    the keys.
    
    Fixes: 83ab38ef0a0b ("jump_label: Fix concurrency issues in static_key_slow_dec()")
    Reported-by: Darrick J. Wong <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Tested-by: Darrick J. Wong <[email protected]>
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
kcov: properly check for softirq context [+ + +]
Author: Andrey Konovalov <[email protected]>
Date:   Mon Jul 29 04:21:58 2024 +0200

    kcov: properly check for softirq context
    
    commit 7d4df2dad312f270d62fecb0e5c8b086c6d7dcfc upstream.
    
    When collecting coverage from softirqs, KCOV uses in_serving_softirq() to
    check whether the code is running in the softirq context.  Unfortunately,
    in_serving_softirq() is > 0 even when the code is running in the hardirq
    or NMI context for hardirqs and NMIs that happened during a softirq.
    
    As a result, if a softirq handler contains a remote coverage collection
    section and a hardirq with another remote coverage collection section
    happens during handling the softirq, KCOV incorrectly detects a nested
    softirq coverate collection section and prints a WARNING, as reported by
    syzbot.
    
    This issue was exposed by commit a7f3813e589f ("usb: gadget: dummy_hcd:
    Switch to hrtimer transfer scheduler"), which switched dummy_hcd to using
    hrtimer and made the timer's callback be executed in the hardirq context.
    
    Change the related checks in KCOV to account for this behavior of
    in_serving_softirq() and make KCOV ignore remote coverage collection
    sections in the hardirq and NMI contexts.
    
    This prevents the WARNING printed by syzbot but does not fix the inability
    of KCOV to collect coverage from the __usb_hcd_giveback_urb when dummy_hcd
    is in use (caused by a7f3813e589f); a separate patch is required for that.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 5ff3b30ab57d ("kcov: collect coverage from interrupts")
    Signed-off-by: Andrey Konovalov <[email protected]>
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=2388cdaeb6b10f0c13ac
    Acked-by: Marco Elver <[email protected]>
    Cc: Alan Stern <[email protected]>
    Cc: Aleksandr Nogikh <[email protected]>
    Cc: Alexander Potapenko <[email protected]>
    Cc: Dmitry Vyukov <[email protected]>
    Cc: Greg Kroah-Hartman <[email protected]>
    Cc: Marcello Sylvester Bauer <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
kprobes: Fix to check symbol prefixes correctly [+ + +]
Author: Masami Hiramatsu (Google) <[email protected]>
Date:   Fri Aug 2 22:53:15 2024 +0900

    kprobes: Fix to check symbol prefixes correctly
    
    [ Upstream commit 8c8acb8f26cbde665b233dd1b9bbcbb9b86822dc ]
    
    Since str_has_prefix() takes the prefix as the 2nd argument and the string
    as the first, is_cfi_preamble_symbol() always fails to check the prefix.
    Fix the function parameter order so that it correctly check the prefix.
    
    Link: https://lore.kernel.org/all/172260679559.362040.7360872132937227206.stgit@devnote2/
    
    Fixes: de02f2ac5d8c ("kprobes: Prohibit probing on CFI preamble symbol")
    Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
l2tp: fix lockdep splat [+ + +]
Author: James Chapman <[email protected]>
Date:   Tue Aug 6 17:06:26 2024 +0100

    l2tp: fix lockdep splat
    
    [ Upstream commit 86a41ea9fd79ddb6145cb8ebf5aeafceabca6f7d ]
    
    When l2tp tunnels use a socket provided by userspace, we can hit
    lockdep splats like the below when data is transmitted through another
    (unrelated) userspace socket which then gets routed over l2tp.
    
    This issue was previously discussed here:
    https://lore.kernel.org/netdev/[email protected]/
    
    The solution is to have lockdep treat socket locks of l2tp tunnel
    sockets separately than those of standard INET sockets. To do so, use
    a different lockdep subclass where lock nesting is possible.
    
      ============================================
      WARNING: possible recursive locking detected
      6.10.0+ #34 Not tainted
      --------------------------------------------
      iperf3/771 is trying to acquire lock:
      ffff8881027601d8 (slock-AF_INET/1){+.-.}-{2:2}, at: l2tp_xmit_skb+0x243/0x9d0
    
      but task is already holding lock:
      ffff888102650d98 (slock-AF_INET/1){+.-.}-{2:2}, at: tcp_v4_rcv+0x1848/0x1e10
    
      other info that might help us debug this:
       Possible unsafe locking scenario:
    
             CPU0
             ----
        lock(slock-AF_INET/1);
        lock(slock-AF_INET/1);
    
       *** DEADLOCK ***
    
       May be due to missing lock nesting notation
    
      10 locks held by iperf3/771:
       #0: ffff888102650258 (sk_lock-AF_INET){+.+.}-{0:0}, at: tcp_sendmsg+0x1a/0x40
       #1: ffffffff822ac220 (rcu_read_lock){....}-{1:2}, at: __ip_queue_xmit+0x4b/0xbc0
       #2: ffffffff822ac220 (rcu_read_lock){....}-{1:2}, at: ip_finish_output2+0x17a/0x1130
       #3: ffffffff822ac220 (rcu_read_lock){....}-{1:2}, at: process_backlog+0x28b/0x9f0
       #4: ffffffff822ac220 (rcu_read_lock){....}-{1:2}, at: ip_local_deliver_finish+0xf9/0x260
       #5: ffff888102650d98 (slock-AF_INET/1){+.-.}-{2:2}, at: tcp_v4_rcv+0x1848/0x1e10
       #6: ffffffff822ac220 (rcu_read_lock){....}-{1:2}, at: __ip_queue_xmit+0x4b/0xbc0
       #7: ffffffff822ac220 (rcu_read_lock){....}-{1:2}, at: ip_finish_output2+0x17a/0x1130
       #8: ffffffff822ac1e0 (rcu_read_lock_bh){....}-{1:2}, at: __dev_queue_xmit+0xcc/0x1450
       #9: ffff888101f33258 (dev->qdisc_tx_busylock ?: &qdisc_tx_busylock#2){+...}-{2:2}, at: __dev_queue_xmit+0x513/0x1450
    
      stack backtrace:
      CPU: 2 UID: 0 PID: 771 Comm: iperf3 Not tainted 6.10.0+ #34
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
      Call Trace:
       <IRQ>
       dump_stack_lvl+0x69/0xa0
       dump_stack+0xc/0x20
       __lock_acquire+0x135d/0x2600
       ? srso_alias_return_thunk+0x5/0xfbef5
       lock_acquire+0xc4/0x2a0
       ? l2tp_xmit_skb+0x243/0x9d0
       ? __skb_checksum+0xa3/0x540
       _raw_spin_lock_nested+0x35/0x50
       ? l2tp_xmit_skb+0x243/0x9d0
       l2tp_xmit_skb+0x243/0x9d0
       l2tp_eth_dev_xmit+0x3c/0xc0
       dev_hard_start_xmit+0x11e/0x420
       sch_direct_xmit+0xc3/0x640
       __dev_queue_xmit+0x61c/0x1450
       ? ip_finish_output2+0xf4c/0x1130
       ip_finish_output2+0x6b6/0x1130
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? __ip_finish_output+0x217/0x380
       ? srso_alias_return_thunk+0x5/0xfbef5
       __ip_finish_output+0x217/0x380
       ip_output+0x99/0x120
       __ip_queue_xmit+0xae4/0xbc0
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? tcp_options_write.constprop.0+0xcb/0x3e0
       ip_queue_xmit+0x34/0x40
       __tcp_transmit_skb+0x1625/0x1890
       __tcp_send_ack+0x1b8/0x340
       tcp_send_ack+0x23/0x30
       __tcp_ack_snd_check+0xa8/0x530
       ? srso_alias_return_thunk+0x5/0xfbef5
       tcp_rcv_established+0x412/0xd70
       tcp_v4_do_rcv+0x299/0x420
       tcp_v4_rcv+0x1991/0x1e10
       ip_protocol_deliver_rcu+0x50/0x220
       ip_local_deliver_finish+0x158/0x260
       ip_local_deliver+0xc8/0xe0
       ip_rcv+0xe5/0x1d0
       ? __pfx_ip_rcv+0x10/0x10
       __netif_receive_skb_one_core+0xce/0xe0
       ? process_backlog+0x28b/0x9f0
       __netif_receive_skb+0x34/0xd0
       ? process_backlog+0x28b/0x9f0
       process_backlog+0x2cb/0x9f0
       __napi_poll.constprop.0+0x61/0x280
       net_rx_action+0x332/0x670
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? find_held_lock+0x2b/0x80
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? srso_alias_return_thunk+0x5/0xfbef5
       handle_softirqs+0xda/0x480
       ? __dev_queue_xmit+0xa2c/0x1450
       do_softirq+0xa1/0xd0
       </IRQ>
       <TASK>
       __local_bh_enable_ip+0xc8/0xe0
       ? __dev_queue_xmit+0xa2c/0x1450
       __dev_queue_xmit+0xa48/0x1450
       ? ip_finish_output2+0xf4c/0x1130
       ip_finish_output2+0x6b6/0x1130
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? __ip_finish_output+0x217/0x380
       ? srso_alias_return_thunk+0x5/0xfbef5
       __ip_finish_output+0x217/0x380
       ip_output+0x99/0x120
       __ip_queue_xmit+0xae4/0xbc0
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? tcp_options_write.constprop.0+0xcb/0x3e0
       ip_queue_xmit+0x34/0x40
       __tcp_transmit_skb+0x1625/0x1890
       tcp_write_xmit+0x766/0x2fb0
       ? __entry_text_end+0x102ba9/0x102bad
       ? srso_alias_return_thunk+0x5/0xfbef5
       ? __might_fault+0x74/0xc0
       ? srso_alias_return_thunk+0x5/0xfbef5
       __tcp_push_pending_frames+0x56/0x190
       tcp_push+0x117/0x310
       tcp_sendmsg_locked+0x14c1/0x1740
       tcp_sendmsg+0x28/0x40
       inet_sendmsg+0x5d/0x90
       sock_write_iter+0x242/0x2b0
       vfs_write+0x68d/0x800
       ? __pfx_sock_write_iter+0x10/0x10
       ksys_write+0xc8/0xf0
       __x64_sys_write+0x3d/0x50
       x64_sys_call+0xfaf/0x1f50
       do_syscall_64+0x6d/0x140
       entry_SYSCALL_64_after_hwframe+0x76/0x7e
      RIP: 0033:0x7f4d143af992
      Code: c3 8b 07 85 c0 75 24 49 89 fb 48 89 f0 48 89 d7 48 89 ce 4c 89 c2 4d 89 ca 4c 8b 44 24 08 4c 8b 4c 24 10 4c 89 5c 24 08 0f 05 <c3> e9 01 cc ff ff 41 54 b8 02 00 00 0
      RSP: 002b:00007ffd65032058 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
      RAX: ffffffffffffffda RBX: 0000000000000001 RCX: 00007f4d143af992
      RDX: 0000000000000025 RSI: 00007f4d143f3bcc RDI: 0000000000000005
      RBP: 00007f4d143f2b28 R08: 0000000000000000 R09: 0000000000000000
      R10: 0000000000000000 R11: 0000000000000246 R12: 00007f4d143f3bcc
      R13: 0000000000000005 R14: 0000000000000000 R15: 00007ffd650323f0
       </TASK>
    
    Fixes: 0b2c59720e65 ("l2tp: close all race conditions in l2tp_tunnel_register()")
    Suggested-by: Eric Dumazet <[email protected]>
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=6acef9e0a4d1f46c83d4
    CC: [email protected]
    CC: [email protected]
    Signed-off-by: James Chapman <[email protected]>
    Signed-off-by: Tom Parkin <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Linux: Linux 6.1.105 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Wed Aug 14 13:53:03 2024 +0200

    Linux 6.1.105
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: ChromeOS CQ Test <[email protected]>
    Tested-by: Salvatore Bonaccorso <[email protected]>
    Tested-by: Pavel Machek (CIP) <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Peter Schneider <[email protected]>
    Tested-by: Mark Brown <[email protected]>
    Tested-by: ChromeOS CQ Test <[email protected]>
    Tested-by: Pavel Machek (CIP) <[email protected]>
    Tested-by: Linux Kernel Functional Testing <[email protected]>
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Tested-by: Ron Economos <[email protected]>
    Tested-by: Yann Sionneau <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
md/raid5: avoid BUG_ON() while continue reshape after reassembling [+ + +]
Author: Yu Kuai <[email protected]>
Date:   Tue Jun 11 21:22:51 2024 +0800

    md/raid5: avoid BUG_ON() while continue reshape after reassembling
    
    [ Upstream commit 305a5170dc5cf3d395bb4c4e9239bca6d0b54b49 ]
    
    Currently, mdadm support --revert-reshape to abort the reshape while
    reassembling, as the test 07revert-grow. However, following BUG_ON()
    can be triggerred by the test:
    
    kernel BUG at drivers/md/raid5.c:6278!
    invalid opcode: 0000 [#1] PREEMPT SMP PTI
    irq event stamp: 158985
    CPU: 6 PID: 891 Comm: md0_reshape Not tainted 6.9.0-03335-g7592a0b0049a #94
    RIP: 0010:reshape_request+0x3f1/0xe60
    Call Trace:
     <TASK>
     raid5_sync_request+0x43d/0x550
     md_do_sync+0xb7a/0x2110
     md_thread+0x294/0x2b0
     kthread+0x147/0x1c0
     ret_from_fork+0x59/0x70
     ret_from_fork_asm+0x1a/0x30
     </TASK>
    
    Root cause is that --revert-reshape update the raid_disks from 5 to 4,
    while reshape position is still set, and after reassembling the array,
    reshape position will be read from super block, then during reshape the
    checking of 'writepos' that is caculated by old reshape position will
    fail.
    
    Fix this panic the easy way first, by converting the BUG_ON() to
    WARN_ON(), and stop the reshape if checkings fail.
    
    Noted that mdadm must fix --revert-shape as well, and probably md/raid
    should enhance metadata validation as well, however this means
    reassemble will fail and there must be user tools to fix the wrong
    metadata.
    
    Signed-off-by: Yu Kuai <[email protected]>
    Signed-off-by: Song Liu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
md: do not delete safemode_timer in mddev_suspend [+ + +]
Author: Li Nan <[email protected]>
Date:   Wed May 8 17:20:53 2024 +0800

    md: do not delete safemode_timer in mddev_suspend
    
    [ Upstream commit a8768a134518e406d41799a3594aeb74e0889cf7 ]
    
    The deletion of safemode_timer in mddev_suspend() is redundant and
    potentially harmful now. If timer is about to be woken up but gets
    deleted, 'in_sync' will remain 0 until the next write, causing array
    to stay in the 'active' state instead of transitioning to 'clean'.
    
    Commit 0d9f4f135eb6 ("MD: Add del_timer_sync to mddev_suspend (fix
    nasty panic))" introduced this deletion for dm, because if timer fired
    after dm is destroyed, the resource which the timer depends on might
    have been freed.
    
    However, commit 0dd84b319352 ("md: call __md_stop_writes in md_stop")
    added __md_stop_writes() to md_stop(), which is called before freeing
    resource. Timer is deleted in __md_stop_writes(), and the origin issue
    is resolved. Therefore, delete safemode_timer can be removed safely now.
    
    Signed-off-by: Li Nan <[email protected]>
    Reviewed-by: Yu Kuai <[email protected]>
    Signed-off-by: Song Liu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
media: amphion: Remove lock in s_ctrl callback [+ + +]
Author: Ming Qian <[email protected]>
Date:   Mon May 6 17:49:17 2024 +0900

    media: amphion: Remove lock in s_ctrl callback
    
    [ Upstream commit 065927b51eb1f042c3e026cebfd55e72ccc26093 ]
    
    There is no need to add a lock in s_ctrl callback, it has been
    synchronized by the ctrl_handler's lock, otherwise it may led to
    a deadlock if the driver calls v4l2_ctrl_s_ctrl().
    
    Signed-off-by: Ming Qian <[email protected]>
    Signed-off-by: Sebastian Fricke <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: uvcvideo: Fix the bandwdith quirk on USB 3.x [+ + +]
Author: Michal Pecio <[email protected]>
Date:   Sun Apr 14 19:00:40 2024 +0200

    media: uvcvideo: Fix the bandwdith quirk on USB 3.x
    
    [ Upstream commit 9e3d55fbd160b3ca376599a68b4cddfdc67d4153 ]
    
    The bandwidth fixup quirk doesn't know that SuperSpeed exists and has
    the same 8 service intervals per millisecond as High Speed, hence its
    calculations are wrong.
    
    Assume that all speeds from HS up use 8 intervals per millisecond.
    
    No further changes are needed, updated code has been confirmed to work
    with all speeds from FS to SS.
    
    Signed-off-by: Michal Pecio <[email protected]>
    Reviewed-by: Ricardo Ribalda <[email protected]>
    Reviewed-by: Laurent Pinchart <[email protected]>
    Link: https://lore.kernel.org/r/20240414190040.2255a0bc@foxbook
    Signed-off-by: Laurent Pinchart <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: uvcvideo: Ignore empty TS packets [+ + +]
Author: Ricardo Ribalda <[email protected]>
Date:   Sat Mar 23 10:48:03 2024 +0000

    media: uvcvideo: Ignore empty TS packets
    
    [ Upstream commit 5cd7c25f6f0576073b3d03bc4cfb1e8ca63a1195 ]
    
    Some SunplusIT cameras took a borderline interpretation of the UVC 1.5
    standard, and fill the PTS and SCR fields with invalid data if the
    package does not contain data.
    
    "STC must be captured when the first video data of a video frame is put
    on the USB bus."
    
    Some SunplusIT devices send, e.g.,
    
    buffer: 0xa7755c00 len 000012 header:0x8c stc 00000000 sof 0000 pts 00000000
    buffer: 0xa7755c00 len 000012 header:0x8c stc 00000000 sof 0000 pts 00000000
    buffer: 0xa7755c00 len 000668 header:0x8c stc 73779dba sof 070c pts 7376d37a
    
    While the UVC specification meant that the first two packets shouldn't
    have had the SCR bit set in the header.
    
    This borderline/buggy interpretation has been implemented in a variety
    of devices, from directly SunplusIT and from other OEMs that rebrand
    SunplusIT products. So quirking based on VID:PID will be problematic.
    
    All the affected modules have the following extension unit:
    VideoControl Interface Descriptor:
      guidExtensionCode         {82066163-7050-ab49-b8cc-b3855e8d221d}
    
    But the vendor plans to use that GUID in the future and fix the bug,
    this means that we should use heuristic to figure out the broken
    packets.
    
    This patch takes care of this.
    
    lsusb of one of the affected cameras:
    
    Bus 001 Device 003: ID 1bcf:2a01 Sunplus Innovation Technology Inc.
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               2.01
      bDeviceClass          239 Miscellaneous Device
      bDeviceSubClass         2 ?
      bDeviceProtocol         1 Interface Association
      bMaxPacketSize0        64
      idVendor           0x1bcf Sunplus Innovation Technology Inc.
      idProduct          0x2a01
      bcdDevice            0.02
      iManufacturer           1 SunplusIT Inc
      iProduct                2 HanChen Wise Camera
      iSerial                 3 01.00.00
      bNumConfigurations      1
    
    Tested-by: HungNien Chen <[email protected]>
    Reviewed-by: Sergey Senozhatsky <[email protected]>
    Reviewed-by: Laurent Pinchart <[email protected]>
    Signed-off-by: Ricardo Ribalda <[email protected]>
    Reviewed-by: Tomasz Figa <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Laurent Pinchart <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: xc2028: avoid use-after-free in load_firmware_cb() [+ + +]
Author: Chi Zhiling <[email protected]>
Date:   Fri Jun 14 08:22:25 2024 -0700

    media: xc2028: avoid use-after-free in load_firmware_cb()
    
    [ Upstream commit 68594cec291ff9523b9feb3f43fd853dcddd1f60 ]
    
    syzkaller reported use-after-free in load_firmware_cb() [1].
    The reason is because the module allocated a struct tuner in tuner_probe(),
    and then the module initialization failed, the struct tuner was released.
    A worker which created during module initialization accesses this struct
    tuner later, it caused use-after-free.
    
    The process is as follows:
    
    task-6504           worker_thread
    tuner_probe                             <= alloc dvb_frontend [2]
    ...
    request_firmware_nowait                 <= create a worker
    ...
    tuner_remove                            <= free dvb_frontend
    ...
                        request_firmware_work_func  <= the firmware is ready
                        load_firmware_cb    <= but now the dvb_frontend has been freed
    
    To fix the issue, check the dvd_frontend in load_firmware_cb(), if it is
    null, report a warning and just return.
    
    [1]:
        ==================================================================
         BUG: KASAN: use-after-free in load_firmware_cb+0x1310/0x17a0
         Read of size 8 at addr ffff8000d7ca2308 by task kworker/2:3/6504
    
         Call trace:
          load_firmware_cb+0x1310/0x17a0
          request_firmware_work_func+0x128/0x220
          process_one_work+0x770/0x1824
          worker_thread+0x488/0xea0
          kthread+0x300/0x430
          ret_from_fork+0x10/0x20
    
         Allocated by task 6504:
          kzalloc
          tuner_probe+0xb0/0x1430
          i2c_device_probe+0x92c/0xaf0
          really_probe+0x678/0xcd0
          driver_probe_device+0x280/0x370
          __device_attach_driver+0x220/0x330
          bus_for_each_drv+0x134/0x1c0
          __device_attach+0x1f4/0x410
          device_initial_probe+0x20/0x30
          bus_probe_device+0x184/0x200
          device_add+0x924/0x12c0
          device_register+0x24/0x30
          i2c_new_device+0x4e0/0xc44
          v4l2_i2c_new_subdev_board+0xbc/0x290
          v4l2_i2c_new_subdev+0xc8/0x104
          em28xx_v4l2_init+0x1dd0/0x3770
    
         Freed by task 6504:
          kfree+0x238/0x4e4
          tuner_remove+0x144/0x1c0
          i2c_device_remove+0xc8/0x290
          __device_release_driver+0x314/0x5fc
          device_release_driver+0x30/0x44
          bus_remove_device+0x244/0x490
          device_del+0x350/0x900
          device_unregister+0x28/0xd0
          i2c_unregister_device+0x174/0x1d0
          v4l2_device_unregister+0x224/0x380
          em28xx_v4l2_init+0x1d90/0x3770
    
         The buggy address belongs to the object at ffff8000d7ca2000
          which belongs to the cache kmalloc-2k of size 2048
         The buggy address is located 776 bytes inside of
          2048-byte region [ffff8000d7ca2000, ffff8000d7ca2800)
         The buggy address belongs to the page:
         page:ffff7fe00035f280 count:1 mapcount:0 mapping:ffff8000c001f000 index:0x0
         flags: 0x7ff800000000100(slab)
         raw: 07ff800000000100 ffff7fe00049d880 0000000300000003 ffff8000c001f000
         raw: 0000000000000000 0000000080100010 00000001ffffffff 0000000000000000
         page dumped because: kasan: bad access detected
    
         Memory state around the buggy address:
          ffff8000d7ca2200: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
          ffff8000d7ca2280: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
         >ffff8000d7ca2300: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                               ^
          ffff8000d7ca2380: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
          ffff8000d7ca2400: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
         ==================================================================
    
    [2]
        Actually, it is allocated for struct tuner, and dvb_frontend is inside.
    
    Signed-off-by: Chi Zhiling <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mm/hugetlb: fix potential race in __update_and_free_hugetlb_folio() [+ + +]
Author: Miaohe Lin <[email protected]>
Date:   Mon Jul 8 10:51:27 2024 +0800

    mm/hugetlb: fix potential race in __update_and_free_hugetlb_folio()
    
    commit 5596d9e8b553dacb0ac34bcf873cbbfb16c3ba3e upstream.
    
    There is a potential race between __update_and_free_hugetlb_folio() and
    try_memory_failure_hugetlb():
    
     CPU1                                   CPU2
     __update_and_free_hugetlb_folio        try_memory_failure_hugetlb
                                             folio_test_hugetlb
                                              -- It's still hugetlb folio.
      folio_clear_hugetlb_hwpoison
                                              spin_lock_irq(&hugetlb_lock);
                                               __get_huge_page_for_hwpoison
                                                folio_set_hugetlb_hwpoison
                                              spin_unlock_irq(&hugetlb_lock);
      spin_lock_irq(&hugetlb_lock);
      __folio_clear_hugetlb(folio);
       -- Hugetlb flag is cleared but too late.
      spin_unlock_irq(&hugetlb_lock);
    
    When the above race occurs, raw error page info will be leaked.  Even
    worse, raw error pages won't have hwpoisoned flag set and hit
    pcplists/buddy.  Fix this issue by deferring
    folio_clear_hugetlb_hwpoison() until __folio_clear_hugetlb() is done.  So
    all raw error pages will have hwpoisoned flag set.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 32c877191e02 ("hugetlb: do not clear hugetlb dtor until allocating vmemmap")
    Signed-off-by: Miaohe Lin <[email protected]>
    Acked-by: Muchun Song <[email protected]>
    Reviewed-by: Oscar Salvador <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Miaohe Lin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm: huge_memory: use !CONFIG_64BIT to relax huge page alignment on 32 bit machines [+ + +]
Author: Yang Shi <[email protected]>
Date:   Fri Jul 12 08:58:55 2024 -0700

    mm: huge_memory: use !CONFIG_64BIT to relax huge page alignment on 32 bit machines
    
    commit d9592025000b3cf26c742f3505da7b83aedc26d5 upstream.
    
    Yves-Alexis Perez reported commit 4ef9ad19e176 ("mm: huge_memory: don't
    force huge page alignment on 32 bit") didn't work for x86_32 [1].  It is
    because x86_32 uses CONFIG_X86_32 instead of CONFIG_32BIT.
    
    !CONFIG_64BIT should cover all 32 bit machines.
    
    [1] https://lore.kernel.org/linux-mm/CAHbLzkr1LwH3pcTgM+aGQ31ip2bKqiqEQ8=FQB+t2c3dhNKNHA@mail.gmail.com/
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 4ef9ad19e176 ("mm: huge_memory: don't force huge page alignment on 32 bit")
    Signed-off-by: Yang Shi <[email protected]>
    Reported-by: Yves-Alexis Perez <[email protected]>
    Tested-by: Yves-Alexis Perez <[email protected]>
    Acked-by: David Hildenbrand <[email protected]>
    Cc: Ben Hutchings <[email protected]>
    Cc: Christoph Lameter <[email protected]>
    Cc: Jiri Slaby <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Rik van Riel <[email protected]>
    Cc: Salvatore Bonaccorso <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: <[email protected]>    [6.8+]
    Signed-off-by: Andrew Morton <[email protected]>
    Cc: Ben Hutchings <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mptcp: export local_address [+ + +]
Author: Geliang Tang <[email protected]>
Date:   Thu Aug 8 17:35:47 2024 +0200

    mptcp: export local_address
    
    commit dc886bce753cc2cf3c88ec5c7a6880a4e17d65ba upstream.
    
    Rename local_address() with "mptcp_" prefix and export it in protocol.h.
    
    This function will be re-used in the common PM code (pm.c) in the
    following commit.
    
    Signed-off-by: Geliang Tang <[email protected]>
    Reviewed-by: Matthieu Baerts <[email protected]>
    Signed-off-by: Matthieu Baerts <[email protected]>
    Reviewed-by: Larysa Zaremba <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 6834097fc38c ("mptcp: pm: fix backup support in signal endpoints")
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: mib: count MPJ with backup flag [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Thu Aug 8 17:30:05 2024 +0200

    mptcp: mib: count MPJ with backup flag
    
    commit 4dde0d72ccec500c60c798e036b852e013d6e124 upstream.
    
    Without such counters, it is difficult to easily debug issues with MPJ
    not having the backup flags on production servers.
    
    This is not strictly a fix, but it eases to validate the following
    patches without requiring to take packet traces, to query ongoing
    connections with Netlink with admin permissions, or to guess by looking
    at the behaviour of the packet scheduler. Also, the modification is self
    contained, isolated, well controlled, and the increments are done just
    after others, there from the beginning. It looks then safe, and helpful
    to backport this.
    
    Fixes: 4596a2c1b7f5 ("mptcp: allow creating non-backup subflows")
    Cc: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    [ Conflicts in subflow.c because the context has changed in
      commit b3ea6b272d79 ("mptcp: consolidate initial ack seq generation")
      which is not in this version. This commit is unrelated to this
      modification. ]
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: pm: deny endp with signal + subflow + port [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Wed Jul 31 13:05:54 2024 +0200

    mptcp: pm: deny endp with signal + subflow + port
    
    commit 8af1f11865f259c882cce71d32f85ee9004e2660 upstream.
    
    As mentioned in the 'Fixes' commit, the port flag is only supported by
    the 'signal' flag, and not by the 'subflow' one. Then if both the
    'signal' and 'subflow' flags are set, the problem is the same: the
    feature cannot work with the 'subflow' flag.
    
    Technically, if both the 'signal' and 'subflow' flags are set, it will
    be possible to create the listening socket, but not to establish a
    subflow using this source port. So better to explicitly deny it, not to
    create some confusions because the expected behaviour is not possible.
    
    Fixes: 09f12c3ab7a5 ("mptcp: allow to use port and non-signal in set_flags")
    Cc: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/20240731-upstream-net-20240731-mptcp-endp-subflow-signal-v1-2-c8a9b036493b@kernel.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: pm: fix backup support in signal endpoints [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Thu Aug 8 17:35:48 2024 +0200

    mptcp: pm: fix backup support in signal endpoints
    
    commit 6834097fc38c5416701c793da94558cea49c0a1f upstream.
    
    There was a support for signal endpoints, but only when the endpoint's
    flag was changed during a connection. If an endpoint with the signal and
    backup was already present, the MP_JOIN reply was not containing the
    backup flag as expected.
    
    That's confusing to have this inconsistent behaviour. On the other hand,
    the infrastructure to set the backup flag in the SYN + ACK + MP_JOIN was
    already there, it was just never set before. Now when requesting the
    local ID from the path-manager, the backup status is also requested.
    
    Note that when the userspace PM is used, the backup flag can be set if
    the local address was already used before with a backup flag, e.g. if
    the address was announced with the 'backup' flag, or a subflow was
    created with the 'backup' flag.
    
    Fixes: 4596a2c1b7f5 ("mptcp: allow creating non-backup subflows")
    Cc: [email protected]
    Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/507
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    [ Conflicts in pm_userspace.c because the context has changed in commit
      1e07938e29c5 ("net: mptcp: rename netlink handlers to
      mptcp_pm_nl_<blah>_{doit,dumpit}") which is not in this version. This
      commit is unrelated to this modification.
      Conflicts in protocol.h because the context has changed in commit
      9ae7846c4b6b ("mptcp: dump addrs in userspace pm list") which is not
      in this version. This commit is unrelated to this modification.
      Conflicts in pm.c because the context has changed in commit
      f40be0db0b76 ("mptcp: unify pm get_flags_and_ifindex_by_id") which is
      not in this version. This commit is unrelated to this modification. ]
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net/mlx5e: SHAMPO, Fix invalid WQ linked list unlink [+ + +]
Author: Dragos Tatulea <[email protected]>
Date:   Tue Jun 4 00:22:08 2024 +0300

    net/mlx5e: SHAMPO, Fix invalid WQ linked list unlink
    
    [ Upstream commit fba8334721e266f92079632598e46e5f89082f30 ]
    
    When all the strides in a WQE have been consumed, the WQE is unlinked
    from the WQ linked list (mlx5_wq_ll_pop()). For SHAMPO, it is possible
    to receive CQEs with 0 consumed strides for the same WQE even after the
    WQE is fully consumed and unlinked. This triggers an additional unlink
    for the same wqe which corrupts the linked list.
    
    Fix this scenario by accepting 0 sized consumed strides without
    unlinking the WQE again.
    
    Signed-off-by: Dragos Tatulea <[email protected]>
    Signed-off-by: Tariq Toukan <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net: bridge: mcast: wait for previous gc cycles when removing port [+ + +]
Author: Nikolay Aleksandrov <[email protected]>
Date:   Fri Aug 2 11:07:30 2024 +0300

    net: bridge: mcast: wait for previous gc cycles when removing port
    
    [ Upstream commit 92c4ee25208d0f35dafc3213cdf355fbe449e078 ]
    
    syzbot hit a use-after-free[1] which is caused because the bridge doesn't
    make sure that all previous garbage has been collected when removing a
    port. What happens is:
          CPU 1                   CPU 2
     start gc cycle           remove port
                             acquire gc lock first
     wait for lock
                             call br_multicasg_gc() directly
     acquire lock now but    free port
     the port can be freed
     while grp timers still
     running
    
    Make sure all previous gc cycles have finished by using flush_work before
    freeing the port.
    
    [1]
      BUG: KASAN: slab-use-after-free in br_multicast_port_group_expired+0x4c0/0x550 net/bridge/br_multicast.c:861
      Read of size 8 at addr ffff888071d6d000 by task syz.5.1232/9699
    
      CPU: 1 PID: 9699 Comm: syz.5.1232 Not tainted 6.10.0-rc5-syzkaller-00021-g24ca36a562d6 #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 06/07/2024
      Call Trace:
       <IRQ>
       __dump_stack lib/dump_stack.c:88 [inline]
       dump_stack_lvl+0x116/0x1f0 lib/dump_stack.c:114
       print_address_description mm/kasan/report.c:377 [inline]
       print_report+0xc3/0x620 mm/kasan/report.c:488
       kasan_report+0xd9/0x110 mm/kasan/report.c:601
       br_multicast_port_group_expired+0x4c0/0x550 net/bridge/br_multicast.c:861
       call_timer_fn+0x1a3/0x610 kernel/time/timer.c:1792
       expire_timers kernel/time/timer.c:1843 [inline]
       __run_timers+0x74b/0xaf0 kernel/time/timer.c:2417
       __run_timer_base kernel/time/timer.c:2428 [inline]
       __run_timer_base kernel/time/timer.c:2421 [inline]
       run_timer_base+0x111/0x190 kernel/time/timer.c:2437
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=263426984509be19c9a0
    Fixes: e12cec65b554 ("net: bridge: mcast: destroy all entries via gc")
    Signed-off-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: dsa: bcm_sf2: Fix a possible memory leak in bcm_sf2_mdio_register() [+ + +]
Author: Joe Hattori <[email protected]>
Date:   Tue Aug 6 10:13:27 2024 +0900

    net: dsa: bcm_sf2: Fix a possible memory leak in bcm_sf2_mdio_register()
    
    [ Upstream commit e3862093ee93fcfbdadcb7957f5f8974fffa806a ]
    
    bcm_sf2_mdio_register() calls of_phy_find_device() and then
    phy_device_remove() in a loop to remove existing PHY devices.
    of_phy_find_device() eventually calls bus_find_device(), which calls
    get_device() on the returned struct device * to increment the refcount.
    The current implementation does not decrement the refcount, which causes
    memory leak.
    
    This commit adds the missing phy_device_free() call to decrement the
    refcount via put_device() to balance the refcount.
    
    Fixes: 771089c2a485 ("net: dsa: bcm_sf2: Ensure that MDIO diversion is used")
    Signed-off-by: Joe Hattori <[email protected]>
    Tested-by: Florian Fainelli <[email protected]>
    Reviewed-by: Florian Fainelli <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: fec: Stop PPS on driver remove [+ + +]
Author: Csókás, Bence <[email protected]>
Date:   Wed Aug 7 10:09:56 2024 +0200

    net: fec: Stop PPS on driver remove
    
    [ Upstream commit 8fee6d5ad5fa18c270eedb2a2cdf58dbadefb94b ]
    
    PPS was not stopped in `fec_ptp_stop()`, called when
    the adapter was removed. Consequentially, you couldn't
    safely reload the driver with the PPS signal on.
    
    Fixes: 32cba57ba74b ("net: fec: introduce fec_ptp_stop and use in probe fail path")
    Reviewed-by: Fabio Estevam <[email protected]>
    Link: https://lore.kernel.org/netdev/CAOMZO5BzcZR8PwKKwBssQq_wAGzVgf1ffwe_nhpQJjviTdxy-w@mail.gmail.com/T/#m01dcb810bfc451a492140f6797ca77443d0cb79f
    Signed-off-by: Csókás, Bence <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Reviewed-by: Frank 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: linkwatch: use system_unbound_wq [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Mon Aug 5 08:58:21 2024 +0000

    net: linkwatch: use system_unbound_wq
    
    [ Upstream commit 3e7917c0cdad835a5121520fc5686d954b7a61ab ]
    
    linkwatch_event() grabs possibly very contended RTNL mutex.
    
    system_wq is not suitable for such work.
    
    Inspired by many noisy syzbot reports.
    
    3 locks held by kworker/0:7/5266:
     #0: ffff888015480948 ((wq_completion)events){+.+.}-{0:0}, at: process_one_work kernel/workqueue.c:3206 [inline]
     #0: ffff888015480948 ((wq_completion)events){+.+.}-{0:0}, at: process_scheduled_works+0x90a/0x1830 kernel/workqueue.c:3312
     #1: ffffc90003f6fd00 ((linkwatch_work).work){+.+.}-{0:0}, at: process_one_work kernel/workqueue.c:3207 [inline]
     , at: process_scheduled_works+0x945/0x1830 kernel/workqueue.c:3312
     #2: ffffffff8fa6f208 (rtnl_mutex){+.+.}-{3:3}, at: linkwatch_event+0xe/0x60 net/core/link_watch.c:276
    
    Reported-by: syzbot <[email protected]>
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    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]>

net: usb: qmi_wwan: fix memory leak for not ip packets [+ + +]
Author: Daniele Palmas <[email protected]>
Date:   Thu Aug 1 15:55:12 2024 +0200

    net: usb: qmi_wwan: fix memory leak for not ip packets
    
    [ Upstream commit 7ab107544b777c3bd7feb9fe447367d8edd5b202 ]
    
    Free the unused skb when not ip packets arrive.
    
    Fixes: c6adf77953bc ("net: usb: qmi_wwan: add qmap mux protocol support")
    Signed-off-by: Daniele Palmas <[email protected]>
    Acked-by: Bjørn Mork <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
netfilter: nf_tables: allow clone callbacks to sleep [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Mon Aug 12 12:23:19 2024 +0200

    netfilter: nf_tables: allow clone callbacks to sleep
    
    commit fa23e0d4b756d25829e124d6b670a4c6bbd4bf7e upstream.
    
    Sven Auhagen reports transaction failures with following error:
      ./main.nft:13:1-26: Error: Could not process rule: Cannot allocate memory
      percpu: allocation failed, size=16 align=8 atomic=1, atomic alloc failed, no space left
    
    This points to failing pcpu allocation with GFP_ATOMIC flag.
    However, transactions happen from user context and are allowed to sleep.
    
    One case where we can call into percpu allocator with GFP_ATOMIC is
    nft_counter expression.
    
    Normally this happens from control plane, so this could use GFP_KERNEL
    instead.  But one use case, element insertion from packet path,
    needs to use GFP_ATOMIC allocations (nft_dynset expression).
    
    At this time, .clone callbacks always use GFP_ATOMIC for this reason.
    
    Add gfp_t argument to the .clone function and pass GFP_KERNEL or
    GFP_ATOMIC flag depending on context, this allows all clone memory
    allocations to sleep for the normal (transaction) case.
    
    Cc: Sven Auhagen <[email protected]>
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: nf_tables: bail out if stateful expression provides no .clone [+ + +]
Author: Pablo Neira Ayuso <[email protected]>
Date:   Mon Aug 12 12:23:18 2024 +0200

    netfilter: nf_tables: bail out if stateful expression provides no .clone
    
    commit 3c13725f43dcf43ad8a9bcd6a9f12add19a8f93e upstream.
    
    All existing NFT_EXPR_STATEFUL provide a .clone interface, remove
    fallback to copy content of stateful expression since this is never
    exercised and bail out if .clone interface is not defined.
    
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: nf_tables: prefer nft_chain_validate [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Mon Aug 12 12:23:20 2024 +0200

    netfilter: nf_tables: prefer nft_chain_validate
    
    commit cff3bd012a9512ac5ed858d38e6ed65f6391008c upstream.
    
    nft_chain_validate already performs loop detection because a cycle will
    result in a call stack overflow (ctx->level >= NFT_JUMP_STACK_SIZE).
    
    It also follows maps via ->validate callback in nft_lookup, so there
    appears no reason to iterate the maps again.
    
    nf_tables_check_loops() and all its helper functions can be removed.
    This improves ruleset load time significantly, from 23s down to 12s.
    
    This also fixes a crash bug. Old loop detection code can result in
    unbounded recursion:
    
    BUG: TASK stack guard page was hit at ....
    Oops: stack guard page: 0000 [#1] PREEMPT SMP KASAN
    CPU: 4 PID: 1539 Comm: nft Not tainted 6.10.0-rc5+ #1
    [..]
    
    with a suitable ruleset during validation of register stores.
    
    I can't see any actual reason to attempt to check for this from
    nft_validate_register_store(), at this point the transaction is still in
    progress, so we don't have a full picture of the rule graph.
    
    For nf-next it might make sense to either remove it or make this depend
    on table->validate_state in case we could catch an error earlier
    (for improved error reporting to userspace).
    
    Fixes: 20a69341f2d0 ("netfilter: nf_tables: add netlink set API")
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ntp: Clamp maxerror and esterror to operating range [+ + +]
Author: Justin Stitt <[email protected]>
Date:   Fri May 17 20:22:44 2024 +0000

    ntp: Clamp maxerror and esterror to operating range
    
    [ Upstream commit 87d571d6fb77ec342a985afa8744bb9bb75b3622 ]
    
    Using syzkaller alongside the newly reintroduced signed integer overflow
    sanitizer spits out this report:
    
    UBSAN: signed-integer-overflow in ../kernel/time/ntp.c:461:16
    9223372036854775807 + 500 cannot be represented in type 'long'
    Call Trace:
     handle_overflow+0x171/0x1b0
     second_overflow+0x2d6/0x500
     accumulate_nsecs_to_secs+0x60/0x160
     timekeeping_advance+0x1fe/0x890
     update_wall_time+0x10/0x30
    
    time_maxerror is unconditionally incremented and the result is checked
    against NTP_PHASE_LIMIT, but the increment itself can overflow, resulting
    in wrap-around to negative space.
    
    Before commit eea83d896e31 ("ntp: NTP4 user space bits update") the user
    supplied value was sanity checked to be in the operating range. That change
    removed the sanity check and relied on clamping in handle_overflow() which
    does not work correctly when the user supplied value is in the overflow
    zone of the '+ 500' operation.
    
    The operation requires CAP_SYS_TIME and the side effect of the overflow is
    NTP getting out of sync.
    
    Miroslav confirmed that the input value should be clamped to the operating
    range and the same applies to time_esterror. The latter is not used by the
    kernel, but the value still should be in the operating range as it was
    before the sanity check got removed.
    
    Clamp them to the operating range.
    
    [ tglx: Changed it to clamping and included time_esterror ]
    
    Fixes: eea83d896e31 ("ntp: NTP4 user space bits update")
    Signed-off-by: Justin Stitt <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Cc: Miroslav Lichvar <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]
    Closes: https://github.com/KSPP/linux/issues/354
    Signed-off-by: Sasha Levin <[email protected]>

ntp: Safeguard against time_constant overflow [+ + +]
Author: Justin Stitt <[email protected]>
Date:   Fri May 17 00:47:10 2024 +0000

    ntp: Safeguard against time_constant overflow
    
    commit 06c03c8edce333b9ad9c6b207d93d3a5ae7c10c0 upstream.
    
    Using syzkaller with the recently reintroduced signed integer overflow
    sanitizer produces this UBSAN report:
    
    UBSAN: signed-integer-overflow in ../kernel/time/ntp.c:738:18
    9223372036854775806 + 4 cannot be represented in type 'long'
    Call Trace:
     handle_overflow+0x171/0x1b0
     __do_adjtimex+0x1236/0x1440
     do_adjtimex+0x2be/0x740
    
    The user supplied time_constant value is incremented by four and then
    clamped to the operating range.
    
    Before commit eea83d896e31 ("ntp: NTP4 user space bits update") the user
    supplied value was sanity checked to be in the operating range. That change
    removed the sanity check and relied on clamping after incrementing which
    does not work correctly when the user supplied value is in the overflow
    zone of the '+ 4' operation.
    
    The operation requires CAP_SYS_TIME and the side effect of the overflow is
    NTP getting out of sync.
    
    Similar to the fixups for time_maxerror and time_esterror, clamp the user
    space supplied value to the operating range.
    
    [ tglx: Switch to clamping ]
    
    Fixes: eea83d896e31 ("ntp: NTP4 user space bits update")
    Signed-off-by: Justin Stitt <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Cc: Miroslav Lichvar <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/all/[email protected]
    Closes: https://github.com/KSPP/linux/issues/352
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
padata: Fix possible divide-by-0 panic in padata_mt_helper() [+ + +]
Author: Waiman Long <[email protected]>
Date:   Tue Aug 6 13:46:47 2024 -0400

    padata: Fix possible divide-by-0 panic in padata_mt_helper()
    
    commit 6d45e1c948a8b7ed6ceddb14319af69424db730c upstream.
    
    We are hit with a not easily reproducible divide-by-0 panic in padata.c at
    bootup time.
    
      [   10.017908] Oops: divide error: 0000 1 PREEMPT SMP NOPTI
      [   10.017908] CPU: 26 PID: 2627 Comm: kworker/u1666:1 Not tainted 6.10.0-15.el10.x86_64 #1
      [   10.017908] Hardware name: Lenovo ThinkSystem SR950 [7X12CTO1WW]/[7X12CTO1WW], BIOS [PSE140J-2.30] 07/20/2021
      [   10.017908] Workqueue: events_unbound padata_mt_helper
      [   10.017908] RIP: 0010:padata_mt_helper+0x39/0xb0
        :
      [   10.017963] Call Trace:
      [   10.017968]  <TASK>
      [   10.018004]  ? padata_mt_helper+0x39/0xb0
      [   10.018084]  process_one_work+0x174/0x330
      [   10.018093]  worker_thread+0x266/0x3a0
      [   10.018111]  kthread+0xcf/0x100
      [   10.018124]  ret_from_fork+0x31/0x50
      [   10.018138]  ret_from_fork_asm+0x1a/0x30
      [   10.018147]  </TASK>
    
    Looking at the padata_mt_helper() function, the only way a divide-by-0
    panic can happen is when ps->chunk_size is 0.  The way that chunk_size is
    initialized in padata_do_multithreaded(), chunk_size can be 0 when the
    min_chunk in the passed-in padata_mt_job structure is 0.
    
    Fix this divide-by-0 panic by making sure that chunk_size will be at least
    1 no matter what the input parameters are.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 004ed42638f4 ("padata: add basic support for multithreaded jobs")
    Signed-off-by: Waiman Long <[email protected]>
    Cc: Daniel Jordan <[email protected]>
    Cc: Steffen Klassert <[email protected]>
    Cc: Waiman Long <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
PCI: Add Edimax Vendor ID to pci_ids.h [+ + +]
Author: FUJITA Tomonori <[email protected]>
Date:   Mon Jun 24 08:55:01 2024 +0900

    PCI: Add Edimax Vendor ID to pci_ids.h
    
    [ Upstream commit eee5528890d54b22b46f833002355a5ee94c3bb4 ]
    
    Add the Edimax Vendor ID (0x1432) for an ethernet driver for Tehuti
    Networks TN40xx chips. This ID can be used for Realtek 8180 and Ralink
    rt28xx wireless drivers.
    
    Signed-off-by: FUJITA Tomonori <[email protected]>
    Acked-by: Bjorn Helgaas <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
platform/x86/intel/ifs: Gen2 Scan test support [+ + +]
Author: Jithu Joseph <[email protected]>
Date:   Thu Oct 5 12:51:32 2023 -0700

    platform/x86/intel/ifs: Gen2 Scan test support
    
    [ Upstream commit 72b96ee29ed6f7670bbb180ba694816e33d361d1 ]
    
    Width of chunk related bitfields is ACTIVATE_SCAN and SCAN_STATUS MSRs
    are different in newer IFS generation compared to gen0.
    
    Make changes to scan test flow such that MSRs are populated
    appropriately based on the generation supported by hardware.
    
    Account for the 8/16 bit MSR bitfield width differences between gen0 and
    newer generations for the scan test trace event too.
    
    Signed-off-by: Jithu Joseph <[email protected]>
    Reviewed-by: Tony Luck <[email protected]>
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Tested-by: Pengfei Xu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Stable-dep-of: 3114f77e9453 ("platform/x86/intel/ifs: Initialize union ifs_status to zero")
    Signed-off-by: Sasha Levin <[email protected]>

platform/x86/intel/ifs: Initialize union ifs_status to zero [+ + +]
Author: Kuppuswamy Sathyanarayanan <[email protected]>
Date:   Tue Jul 30 15:59:30 2024 +0000

    platform/x86/intel/ifs: Initialize union ifs_status to zero
    
    [ Upstream commit 3114f77e9453daa292ec0906f313a715c69b5943 ]
    
    If the IFS scan test exits prematurely due to a timeout before
    completing a single run, the union ifs_status remains uninitialized,
    leading to incorrect test status reporting. To prevent this, always
    initialize the union ifs_status to zero.
    
    Fixes: 2b40e654b73a ("platform/x86/intel/ifs: Add scan test support")
    Suggested-by: Ilpo Järvinen <[email protected]>
    Reviewed-by: Jithu Joseph <[email protected]>
    Reviewed-by: Ashok Raj <[email protected]>
    Signed-off-by: Kuppuswamy Sathyanarayanan <[email protected]>
    Link: https://lore.kernel.org/r/20240730155930.1754744-1-sathyanarayanan.kuppuswamy@linux.intel.com
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
power: supply: axp288_charger: Fix constant_charge_voltage writes [+ + +]
Author: Hans de Goede <[email protected]>
Date:   Wed Jul 17 22:03:32 2024 +0200

    power: supply: axp288_charger: Fix constant_charge_voltage writes
    
    commit b34ce4a59cfe9cd0d6f870e6408e8ec88a964585 upstream.
    
    info->max_cv is in millivolts, divide the microvolt value being written
    to constant_charge_voltage by 1000 *before* clamping it to info->max_cv.
    
    Before this fix the code always tried to set constant_charge_voltage
    to max_cv / 1000 = 4 millivolt, which ends up in setting it to 4.1V
    which is the lowest supported value.
    
    Fixes: 843735b788a4 ("power: axp288_charger: axp288 charger driver")
    Cc: [email protected]
    Signed-off-by: Hans de Goede <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

power: supply: axp288_charger: Round constant_charge_voltage writes down [+ + +]
Author: Hans de Goede <[email protected]>
Date:   Wed Jul 17 22:03:33 2024 +0200

    power: supply: axp288_charger: Round constant_charge_voltage writes down
    
    commit 81af7f2342d162e24ac820c10e68684d9f927663 upstream.
    
    Round constant_charge_voltage writes down to the first supported lower
    value, rather then rounding them up to the first supported higher value.
    
    This fixes e.g. writing 4250000 resulting in a value of 4350000 which
    might be dangerous, instead writing 4250000 will now result in a safe
    4200000 value.
    
    Fixes: 843735b788a4 ("power: axp288_charger: axp288 charger driver")
    Cc: [email protected]
    Signed-off-by: Hans de Goede <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
profiling: remove profile=sleep support [+ + +]
Author: Tetsuo Handa <[email protected]>
Date:   Sun Aug 4 18:48:10 2024 +0900

    profiling: remove profile=sleep support
    
    commit b88f55389ad27f05ed84af9e1026aa64dbfabc9a upstream.
    
    The kernel sleep profile is no longer working due to a recursive locking
    bug introduced by commit 42a20f86dc19 ("sched: Add wrapper for get_wchan()
    to keep task blocked")
    
    Booting with the 'profile=sleep' kernel command line option added or
    executing
    
      # echo -n sleep > /sys/kernel/profiling
    
    after boot causes the system to lock up.
    
    Lockdep reports
    
      kthreadd/3 is trying to acquire lock:
      ffff93ac82e08d58 (&p->pi_lock){....}-{2:2}, at: get_wchan+0x32/0x70
    
      but task is already holding lock:
      ffff93ac82e08d58 (&p->pi_lock){....}-{2:2}, at: try_to_wake_up+0x53/0x370
    
    with the call trace being
    
       lock_acquire+0xc8/0x2f0
       get_wchan+0x32/0x70
       __update_stats_enqueue_sleeper+0x151/0x430
       enqueue_entity+0x4b0/0x520
       enqueue_task_fair+0x92/0x6b0
       ttwu_do_activate+0x73/0x140
       try_to_wake_up+0x213/0x370
       swake_up_locked+0x20/0x50
       complete+0x2f/0x40
       kthread+0xfb/0x180
    
    However, since nobody noticed this regression for more than two years,
    let's remove 'profile=sleep' support based on the assumption that nobody
    needs this functionality.
    
    Fixes: 42a20f86dc19 ("sched: Add wrapper for get_wchan() to keep task blocked")
    Cc: [email protected] # v5.16+
    Signed-off-by: Tetsuo Handa <[email protected]>
    Signed-off-by: Linus Torvalds <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
rcu: Fix rcu_barrier() VS post CPUHP_TEARDOWN_CPU invocation [+ + +]
Author: Frederic Weisbecker <[email protected]>
Date:   Fri May 24 16:05:24 2024 +0200

    rcu: Fix rcu_barrier() VS post CPUHP_TEARDOWN_CPU invocation
    
    [ Upstream commit 55d4669ef1b76823083caecfab12a8bd2ccdcf64 ]
    
    When rcu_barrier() calls rcu_rdp_cpu_online() and observes a CPU off
    rnp->qsmaskinitnext, it means that all accesses from the offline CPU
    preceding the CPUHP_TEARDOWN_CPU are visible to RCU barrier, including
    callbacks expiration and counter updates.
    
    However interrupts can still fire after stop_machine() re-enables
    interrupts and before rcutree_report_cpu_dead(). The related accesses
    happening between CPUHP_TEARDOWN_CPU and rnp->qsmaskinitnext clearing
    are _NOT_ guaranteed to be seen by rcu_barrier() without proper
    ordering, especially when callbacks are invoked there to the end, making
    rcutree_migrate_callback() bypass barrier_lock.
    
    The following theoretical race example can make rcu_barrier() hang:
    
    CPU 0                                               CPU 1
    -----                                               -----
    //cpu_down()
    smpboot_park_threads()
    //ksoftirqd is parked now
    <IRQ>
    rcu_sched_clock_irq()
       invoke_rcu_core()
    do_softirq()
       rcu_core()
          rcu_do_batch()
             // callback storm
             // rcu_do_batch() returns
             // before completing all
             // of them
       // do_softirq also returns early because of
       // timeout. It defers to ksoftirqd but
       // it's parked
    </IRQ>
    stop_machine()
       take_cpu_down()
                                                        rcu_barrier()
                                                            spin_lock(barrier_lock)
                                                            // observes rcu_segcblist_n_cbs(&rdp->cblist) != 0
    <IRQ>
    do_softirq()
       rcu_core()
          rcu_do_batch()
             //completes all pending callbacks
             //smp_mb() implied _after_ callback number dec
    </IRQ>
    
    rcutree_report_cpu_dead()
       rnp->qsmaskinitnext &= ~rdp->grpmask;
    
    rcutree_migrate_callback()
       // no callback, early return without locking
       // barrier_lock
                                                            //observes !rcu_rdp_cpu_online(rdp)
                                                            rcu_barrier_entrain()
                                                               rcu_segcblist_entrain()
                                                                  // Observe rcu_segcblist_n_cbs(rsclp) == 0
                                                                  // because no barrier between reading
                                                                  // rnp->qsmaskinitnext and rsclp->len
                                                                  rcu_segcblist_add_len()
                                                                     smp_mb__before_atomic()
                                                                     // will now observe the 0 count and empty
                                                                     // list, but too late, we enqueue regardless
                                                                     WRITE_ONCE(rsclp->len, rsclp->len + v);
                                                            // ignored barrier callback
                                                            // rcu barrier stall...
    
    This could be solved with a read memory barrier, enforcing the message
    passing between rnp->qsmaskinitnext and rsclp->len, matching the full
    memory barrier after rsclp->len addition in rcu_segcblist_add_len()
    performed at the end of rcu_do_batch().
    
    However the rcu_barrier() is complicated enough and probably doesn't
    need too many more subtleties. CPU down is a slowpath and the
    barrier_lock seldom contended. Solve the issue with unconditionally
    locking the barrier_lock on rcutree_migrate_callbacks(). This makes sure
    that either rcu_barrier() sees the empty queue or its entrained
    callback will be migrated.
    
    Signed-off-by: Frederic Weisbecker <[email protected]>
    Signed-off-by: Paul E. McKenney <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
rcutorture: Fix rcu_torture_fwd_cb_cr() data race [+ + +]
Author: Paul E. McKenney <[email protected]>
Date:   Fri Apr 5 12:02:11 2024 -0700

    rcutorture: Fix rcu_torture_fwd_cb_cr() data race
    
    [ Upstream commit 6040072f4774a575fa67b912efe7722874be337b ]
    
    On powerpc systems, spinlock acquisition does not order prior stores
    against later loads.  This means that this statement:
    
            rfcp->rfc_next = NULL;
    
    Can be reordered to follow this statement:
    
            WRITE_ONCE(*rfcpp, rfcp);
    
    Which is then a data race with rcu_torture_fwd_prog_cr(), specifically,
    this statement:
    
            rfcpn = READ_ONCE(rfcp->rfc_next)
    
    KCSAN located this data race, which represents a real failure on powerpc.
    
    Signed-off-by: Paul E. McKenney <[email protected]>
    Acked-by: Marco Elver <[email protected]>
    Cc: Andrey Konovalov <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Revert "bpftool: Mount bpffs when pinmaps path not under the bpffs" [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Sun Aug 11 17:43:22 2024 +0200

    Revert "bpftool: Mount bpffs when pinmaps path not under the bpffs"
    
    This reverts commit 65dd9cbafec2f6f7908cebcab0386f750fc352af which is
    commit da5f8fd1f0d393d5eaaba9ad8c22d1c26bb2bf9b upstream.
    
    It breaks the build, so should be dropped.
    
    Reported-by: Salvatore Bonaccorso <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Cc: Tao Chen <[email protected]>
    Cc: Daniel Borkmann <[email protected]>
    Cc: Quentin Monnet <[email protected]>
    Cc: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "drm/amd/display: Add NULL check for 'afb' before dereferencing in amdgpu_dm_plane_handle_cursor_update" [+ + +]
Author: Ivan Lipski <[email protected]>
Date:   Fri Jun 7 12:33:59 2024 -0400

    Revert "drm/amd/display: Add NULL check for 'afb' before dereferencing in amdgpu_dm_plane_handle_cursor_update"
    
    commit 778e3979c5dc9cbdb5d1b92afed427de6bc483b4 upstream.
    
    [WHY]
    This patch is a dupplicate implementation of 14bcf29b, which we
    are reverting due to a regression with kms_plane_cursor IGT tests.
    
    This reverts commit 38e6f715b02b572f74677eb2f29d3b4bc6f1ddff.
    
    Reviewed-by: Srinivasan Shanmugam <[email protected]>
    Tested-by: George Zhang <[email protected]>
    Signed-off-by: Ivan Lipski <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
s390/sclp: Prevent release of buffer in I/O [+ + +]
Author: Peter Oberparleiter <[email protected]>
Date:   Thu Jun 20 14:20:27 2024 +0200

    s390/sclp: Prevent release of buffer in I/O
    
    [ Upstream commit bf365071ea92b9579d5a272679b74052a5643e35 ]
    
    When a task waiting for completion of a Store Data operation is
    interrupted, an attempt is made to halt this operation. If this attempt
    fails due to a hardware or firmware problem, there is a chance that the
    SCLP facility might store data into buffers referenced by the original
    operation at a later time.
    
    Handle this situation by not releasing the referenced data buffers if
    the halt attempt fails. For current use cases, this might result in a
    leak of few pages of memory in case of a rare hardware/firmware
    malfunction.
    
    Reviewed-by: Heiko Carstens <[email protected]>
    Signed-off-by: Peter Oberparleiter <[email protected]>
    Signed-off-by: Alexander Gordeev <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
sched/cputime: Fix mul_u64_u64_div_u64() precision for cputime [+ + +]
Author: Zheng Zucheng <[email protected]>
Date:   Fri Jul 26 02:32:35 2024 +0000

    sched/cputime: Fix mul_u64_u64_div_u64() precision for cputime
    
    commit 77baa5bafcbe1b2a15ef9c37232c21279c95481c upstream.
    
    In extreme test scenarios:
    the 14th field utime in /proc/xx/stat is greater than sum_exec_runtime,
    utime = 18446744073709518790 ns, rtime = 135989749728000 ns
    
    In cputime_adjust() process, stime is greater than rtime due to
    mul_u64_u64_div_u64() precision problem.
    before call mul_u64_u64_div_u64(),
    stime = 175136586720000, rtime = 135989749728000, utime = 1416780000.
    after call mul_u64_u64_div_u64(),
    stime = 135989949653530
    
    unsigned reversion occurs because rtime is less than stime.
    utime = rtime - stime = 135989749728000 - 135989949653530
                          = -199925530
                          = (u64)18446744073709518790
    
    Trigger condition:
      1). User task run in kernel mode most of time
      2). ARM64 architecture
      3). TICK_CPU_ACCOUNTING=y
          CONFIG_VIRT_CPU_ACCOUNTING_NATIVE is not set
    
    Fix mul_u64_u64_div_u64() conversion precision by reset stime to rtime
    
    Fixes: 3dc167ba5729 ("sched/cputime: Improve cputime_adjust()")
    Signed-off-by: Zheng Zucheng <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Cc: <[email protected]>
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sched/smt: Fix unbalance sched_smt_present dec/inc [+ + +]
Author: Yang Yingliang <[email protected]>
Date:   Wed Jul 3 11:16:08 2024 +0800

    sched/smt: Fix unbalance sched_smt_present dec/inc
    
    commit e22f910a26cc2a3ac9c66b8e935ef2a7dd881117 upstream.
    
    I got the following warn report while doing stress test:
    
    jump label: negative count!
    WARNING: CPU: 3 PID: 38 at kernel/jump_label.c:263 static_key_slow_try_dec+0x9d/0xb0
    Call Trace:
     <TASK>
     __static_key_slow_dec_cpuslocked+0x16/0x70
     sched_cpu_deactivate+0x26e/0x2a0
     cpuhp_invoke_callback+0x3ad/0x10d0
     cpuhp_thread_fun+0x3f5/0x680
     smpboot_thread_fn+0x56d/0x8d0
     kthread+0x309/0x400
     ret_from_fork+0x41/0x70
     ret_from_fork_asm+0x1b/0x30
     </TASK>
    
    Because when cpuset_cpu_inactive() fails in sched_cpu_deactivate(),
    the cpu offline failed, but sched_smt_present is decremented before
    calling sched_cpu_deactivate(), it leads to unbalanced dec/inc, so
    fix it by incrementing sched_smt_present in the error path.
    
    Fixes: c5511d03ec09 ("sched/smt: Make sched_smt_present track topology")
    Cc: [email protected]
    Signed-off-by: Yang Yingliang <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Reviewed-by: Chen Yu <[email protected]>
    Reviewed-by: Tim Chen <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

sched/smt: Introduce sched_smt_present_inc/dec() helper [+ + +]
Author: Yang Yingliang <[email protected]>
Date:   Wed Jul 3 11:16:07 2024 +0800

    sched/smt: Introduce sched_smt_present_inc/dec() helper
    
    commit 31b164e2e4af84d08d2498083676e7eeaa102493 upstream.
    
    Introduce sched_smt_present_inc/dec() helper, so it can be called
    in normal or error path simply. No functional changed.
    
    Cc: [email protected]
    Signed-off-by: Yang Yingliang <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
scsi: mpi3mr: Avoid IOMMU page faults on REPORT ZONES [+ + +]
Author: Damien Le Moal <[email protected]>
Date:   Fri Jul 19 16:39:11 2024 +0900

    scsi: mpi3mr: Avoid IOMMU page faults on REPORT ZONES
    
    commit 1abc900ddda8ad2ef739fedf498d415655b6c3b8 upstream.
    
    Some firmware versions of the 9600 series SAS HBA byte-swap the REPORT
    ZONES command reply buffer from ATA-ZAC devices by directly accessing the
    buffer in the host memory. This does not respect the default command DMA
    direction and causes IOMMU page faults on architectures with an IOMMU
    enforcing write-only mappings for DMA_FROM_DEVICE DMA direction (e.g. AMD
    hosts), leading to the device capacity to be dropped to 0:
    
    scsi 18:0:58:0: Direct-Access-ZBC ATA      WDC  WSH722626AL W930 PQ: 0 ANSI: 7
    scsi 18:0:58:0: Power-on or device reset occurred
    sd 18:0:58:0: Attached scsi generic sg9 type 20
    sd 18:0:58:0: [sdj] Host-managed zoned block device
    mpi3mr 0000:c1:00.0: AMD-Vi: Event logged [IO_PAGE_FAULT domain=0x0001 address=0xfec0c400 flags=0x0050]
    mpi3mr 0000:c1:00.0: AMD-Vi: Event logged [IO_PAGE_FAULT domain=0x0001 address=0xfec0c500 flags=0x0050]
    sd 18:0:58:0: [sdj] REPORT ZONES start lba 0 failed
    sd 18:0:58:0: [sdj] REPORT ZONES: Result: hostbyte=DID_SOFT_ERROR driverbyte=DRIVER_OK
    sd 18:0:58:0: [sdj] 0 4096-byte logical blocks: (0 B/0 B)
    sd 18:0:58:0: [sdj] Write Protect is off
    sd 18:0:58:0: [sdj] Mode Sense: 6b 00 10 08
    sd 18:0:58:0: [sdj] Write cache: enabled, read cache: enabled, supports DPO and FUA
    sd 18:0:58:0: [sdj] Attached SCSI disk
    
    Avoid this issue by always mapping the buffer of REPORT ZONES commands
    using DMA_BIDIRECTIONAL, that is, using a read-write IOMMU mapping.
    
    Suggested-by: Christoph Hellwig <[email protected]>
    Fixes: 023ab2a9b4ed ("scsi: mpi3mr: Add support for queue command processing")
    Cc: [email protected]
    Signed-off-by: Damien Le Moal <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: mpt3sas: Avoid IOMMU page faults on REPORT ZONES [+ + +]
Author: Damien Le Moal <[email protected]>
Date:   Fri Jul 19 16:39:12 2024 +0900

    scsi: mpt3sas: Avoid IOMMU page faults on REPORT ZONES
    
    commit 82dbb57ac8d06dfe8227ba9ab11a49de2b475ae5 upstream.
    
    Some firmware versions of the 9600 series SAS HBA byte-swap the REPORT
    ZONES command reply buffer from ATA-ZAC devices by directly accessing the
    buffer in the host memory. This does not respect the default command DMA
    direction and causes IOMMU page faults on architectures with an IOMMU
    enforcing write-only mappings for DMA_FROM_DEVICE DMA driection (e.g. AMD
    hosts).
    
    scsi 18:0:0:0: Direct-Access-ZBC ATA      WDC  WSH722020AL W870 PQ: 0 ANSI: 6
    scsi 18:0:0:0: SATA: handle(0x0027), sas_addr(0x300062b2083e7c40), phy(0), device_name(0x5000cca29dc35e11)
    scsi 18:0:0:0: enclosure logical id (0x300062b208097c40), slot(0)
    scsi 18:0:0:0: enclosure level(0x0000), connector name( C0.0)
    scsi 18:0:0:0: atapi(n), ncq(y), asyn_notify(n), smart(y), fua(y), sw_preserve(y)
    scsi 18:0:0:0: qdepth(32), tagged(1), scsi_level(7), cmd_que(1)
    sd 18:0:0:0: Attached scsi generic sg2 type 20
    sd 18:0:0:0: [sdc] Host-managed zoned block device
    mpt3sas 0000:41:00.0: AMD-Vi: Event logged [IO_PAGE_FAULT domain=0x0021 address=0xfff9b200 flags=0x0050]
    mpt3sas 0000:41:00.0: AMD-Vi: Event logged [IO_PAGE_FAULT domain=0x0021 address=0xfff9b300 flags=0x0050]
    mpt3sas_cm0: mpt3sas_ctl_pre_reset_handler: Releasing the trace buffer due to adapter reset.
    mpt3sas_cm0 fault info from func: mpt3sas_base_make_ioc_ready
    mpt3sas_cm0: fault_state(0x2666)!
    mpt3sas_cm0: sending diag reset !!
    mpt3sas_cm0: diag reset: SUCCESS
    sd 18:0:0:0: [sdc] REPORT ZONES start lba 0 failed
    sd 18:0:0:0: [sdc] REPORT ZONES: Result: hostbyte=DID_RESET driverbyte=DRIVER_OK
    sd 18:0:0:0: [sdc] 0 4096-byte logical blocks: (0 B/0 B)
    
    Avoid such issue by always mapping the buffer of REPORT ZONES commands
    using DMA_BIDIRECTIONAL (read+write IOMMU mapping). This is done by
    introducing the helper function _base_scsi_dma_map() and using this helper
    in _base_build_sg_scmd() and _base_build_sg_scmd_ieee() instead of calling
    directly scsi_dma_map().
    
    Fixes: 471ef9d4e498 ("mpt3sas: Build MPI SGL LIST on GEN2 HBAs and IEEE SGL LIST on GEN3 HBAs")
    Cc: [email protected]
    Signed-off-by: Damien Le Moal <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: ufs: core: Fix hba->last_dme_cmd_tstamp timestamp updating logic [+ + +]
Author: Vamshi Gajjela <[email protected]>
Date:   Wed Jul 24 19:21:26 2024 +0530

    scsi: ufs: core: Fix hba->last_dme_cmd_tstamp timestamp updating logic
    
    commit ab9fd06cb8f0db0854291833fc40c789e43a361f upstream.
    
    The ufshcd_add_delay_before_dme_cmd() always introduces a delay of
    MIN_DELAY_BEFORE_DME_CMDS_US between DME commands even when it's not
    required. The delay is added when the UFS host controller supplies the
    quirk UFSHCD_QUIRK_DELAY_BEFORE_DME_CMDS.
    
    Fix the logic to update hba->last_dme_cmd_tstamp to ensure subsequent DME
    commands have the correct delay in the range of 0 to
    MIN_DELAY_BEFORE_DME_CMDS_US.
    
    Update the timestamp at the end of the function to ensure it captures the
    latest time after any necessary delay has been applied.
    
    Signed-off-by: Vamshi Gajjela <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Fixes: cad2e03d8607 ("ufs: add support to allow non standard behaviours (quirks)")
    Cc: [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: Fix null-ptr-deref in reuseport_add_sock(). [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Wed Jul 31 16:46:24 2024 -0700

    sctp: Fix null-ptr-deref in reuseport_add_sock().
    
    [ Upstream commit 9ab0faa7f9ffe31296dbb9bbe6f76c72c14eea18 ]
    
    syzbot reported a null-ptr-deref while accessing sk2->sk_reuseport_cb in
    reuseport_add_sock(). [0]
    
    The repro first creates a listener with SO_REUSEPORT.  Then, it creates
    another listener on the same port and concurrently closes the first
    listener.
    
    The second listen() calls reuseport_add_sock() with the first listener as
    sk2, where sk2->sk_reuseport_cb is not expected to be cleared concurrently,
    but the close() does clear it by reuseport_detach_sock().
    
    The problem is SCTP does not properly synchronise reuseport_alloc(),
    reuseport_add_sock(), and reuseport_detach_sock().
    
    The caller of reuseport_alloc() and reuseport_{add,detach}_sock() must
    provide synchronisation for sockets that are classified into the same
    reuseport group.
    
    Otherwise, such sockets form multiple identical reuseport groups, and
    all groups except one would be silently dead.
    
      1. Two sockets call listen() concurrently
      2. No socket in the same group found in sctp_ep_hashtable[]
      3. Two sockets call reuseport_alloc() and form two reuseport groups
      4. Only one group hit first in __sctp_rcv_lookup_endpoint() receives
          incoming packets
    
    Also, the reported null-ptr-deref could occur.
    
    TCP/UDP guarantees that would not happen by holding the hash bucket lock.
    
    Let's apply the locking strategy to __sctp_hash_endpoint() and
    __sctp_unhash_endpoint().
    
    [0]:
    Oops: general protection fault, probably for non-canonical address 0xdffffc0000000002: 0000 [#1] PREEMPT SMP KASAN PTI
    KASAN: null-ptr-deref in range [0x0000000000000010-0x0000000000000017]
    CPU: 1 UID: 0 PID: 10230 Comm: syz-executor119 Not tainted 6.10.0-syzkaller-12585-g301927d2d2eb #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 06/27/2024
    RIP: 0010:reuseport_add_sock+0x27e/0x5e0 net/core/sock_reuseport.c:350
    Code: 00 0f b7 5d 00 bf 01 00 00 00 89 de e8 1b a4 ff f7 83 fb 01 0f 85 a3 01 00 00 e8 6d a0 ff f7 49 8d 7e 12 48 89 f8 48 c1 e8 03 <42> 0f b6 04 28 84 c0 0f 85 4b 02 00 00 41 0f b7 5e 12 49 8d 7e 14
    RSP: 0018:ffffc9000b947c98 EFLAGS: 00010202
    RAX: 0000000000000002 RBX: ffff8880252ddf98 RCX: ffff888079478000
    RDX: 0000000000000000 RSI: 0000000000000001 RDI: 0000000000000012
    RBP: 0000000000000001 R08: ffffffff8993e18d R09: 1ffffffff1fef385
    R10: dffffc0000000000 R11: fffffbfff1fef386 R12: ffff8880252ddac0
    R13: dffffc0000000000 R14: 0000000000000000 R15: 0000000000000000
    FS:  00007f24e45b96c0(0000) GS:ffff8880b9300000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007ffcced5f7b8 CR3: 00000000241be000 CR4: 00000000003506f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
     DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     __sctp_hash_endpoint net/sctp/input.c:762 [inline]
     sctp_hash_endpoint+0x52a/0x600 net/sctp/input.c:790
     sctp_listen_start net/sctp/socket.c:8570 [inline]
     sctp_inet_listen+0x767/0xa20 net/sctp/socket.c:8625
     __sys_listen_socket net/socket.c:1883 [inline]
     __sys_listen+0x1b7/0x230 net/socket.c:1894
     __do_sys_listen net/socket.c:1902 [inline]
     __se_sys_listen net/socket.c:1900 [inline]
     __x64_sys_listen+0x5a/0x70 net/socket.c:1900
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7f24e46039b9
    Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 91 1a 00 00 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b0 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007f24e45b9228 EFLAGS: 00000246 ORIG_RAX: 0000000000000032
    RAX: ffffffffffffffda RBX: 00007f24e468e428 RCX: 00007f24e46039b9
    RDX: 00007f24e46039b9 RSI: 0000000000000003 RDI: 0000000000000004
    RBP: 00007f24e468e420 R08: 00007f24e45b96c0 R09: 00007f24e45b96c0
    R10: 00007f24e45b96c0 R11: 0000000000000246 R12: 00007f24e468e42c
    R13: 00007f24e465a5dc R14: 0020000000000001 R15: 00007ffcced5f7d8
     </TASK>
    Modules linked in:
    
    Fixes: 6ba845740267 ("sctp: process sk_reuseport in sctp_get_port_local")
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=e6979a5d2f10ecb700e4
    Tested-by: [email protected]
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Acked-by: Xin Long <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
selftests/bpf: Fix send_signal test with nested CONFIG_PARAVIRT [+ + +]
Author: Yonghong Song <[email protected]>
Date:   Wed Jun 5 13:12:03 2024 -0700

    selftests/bpf: Fix send_signal test with nested CONFIG_PARAVIRT
    
    [ Upstream commit 7015843afcaf68c132784c89528dfddc0005e483 ]
    
    Alexei reported that send_signal test may fail with nested CONFIG_PARAVIRT
    configs. In this particular case, the base VM is AMD with 166 cpus, and I
    run selftests with regular qemu on top of that and indeed send_signal test
    failed. I also tried with an Intel box with 80 cpus and there is no issue.
    
    The main qemu command line includes:
    
      -enable-kvm -smp 16 -cpu host
    
    The failure log looks like:
    
      $ ./test_progs -t send_signal
      [   48.501588] watchdog: BUG: soft lockup - CPU#9 stuck for 26s! [test_progs:2225]
      [   48.503622] Modules linked in: bpf_testmod(O)
      [   48.503622] CPU: 9 PID: 2225 Comm: test_progs Tainted: G           O       6.9.0-08561-g2c1713a8f1c9-dirty #69
      [   48.507629] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.15.0-0-g2dd4b9b3f840-prebuilt.qemu.org 04/01/2014
      [   48.511635] RIP: 0010:handle_softirqs+0x71/0x290
      [   48.511635] Code: [...] 10 0a 00 00 00 31 c0 65 66 89 05 d5 f4 fa 7e fb bb ff ff ff ff <49> c7 c2 cb
      [   48.518527] RSP: 0018:ffffc90000310fa0 EFLAGS: 00000246
      [   48.519579] RAX: 0000000000000000 RBX: 00000000ffffffff RCX: 00000000000006e0
      [   48.522526] RDX: 0000000000000006 RSI: ffff88810791ae80 RDI: 0000000000000000
      [   48.523587] RBP: ffffc90000fabc88 R08: 00000005a0af4f7f R09: 0000000000000000
      [   48.525525] R10: 0000000561d2f29c R11: 0000000000006534 R12: 0000000000000280
      [   48.528525] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
      [   48.528525] FS:  00007f2f2885cd00(0000) GS:ffff888237c40000(0000) knlGS:0000000000000000
      [   48.531600] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [   48.535520] CR2: 00007f2f287059f0 CR3: 0000000106a28002 CR4: 00000000003706f0
      [   48.537538] Call Trace:
      [   48.537538]  <IRQ>
      [   48.537538]  ? watchdog_timer_fn+0x1cd/0x250
      [   48.539590]  ? lockup_detector_update_enable+0x50/0x50
      [   48.539590]  ? __hrtimer_run_queues+0xff/0x280
      [   48.542520]  ? hrtimer_interrupt+0x103/0x230
      [   48.544524]  ? __sysvec_apic_timer_interrupt+0x4f/0x140
      [   48.545522]  ? sysvec_apic_timer_interrupt+0x3a/0x90
      [   48.547612]  ? asm_sysvec_apic_timer_interrupt+0x1a/0x20
      [   48.547612]  ? handle_softirqs+0x71/0x290
      [   48.547612]  irq_exit_rcu+0x63/0x80
      [   48.551585]  sysvec_apic_timer_interrupt+0x75/0x90
      [   48.552521]  </IRQ>
      [   48.553529]  <TASK>
      [   48.553529]  asm_sysvec_apic_timer_interrupt+0x1a/0x20
      [   48.555609] RIP: 0010:finish_task_switch.isra.0+0x90/0x260
      [   48.556526] Code: [...] 9f 58 0a 00 00 48 85 db 0f 85 89 01 00 00 4c 89 ff e8 53 d9 bd 00 fb 66 90 <4d> 85 ed 74
      [   48.562524] RSP: 0018:ffffc90000fabd38 EFLAGS: 00000282
      [   48.563589] RAX: 0000000000000000 RBX: 0000000000000000 RCX: ffffffff83385620
      [   48.563589] RDX: ffff888237c73ae4 RSI: 0000000000000000 RDI: ffff888237c6fd00
      [   48.568521] RBP: ffffc90000fabd68 R08: 0000000000000000 R09: 0000000000000000
      [   48.569528] R10: 0000000000000001 R11: 0000000000000000 R12: ffff8881009d0000
      [   48.573525] R13: ffff8881024e5400 R14: ffff88810791ae80 R15: ffff888237c6fd00
      [   48.575614]  ? finish_task_switch.isra.0+0x8d/0x260
      [   48.576523]  __schedule+0x364/0xac0
      [   48.577535]  schedule+0x2e/0x110
      [   48.578555]  pipe_read+0x301/0x400
      [   48.579589]  ? destroy_sched_domains_rcu+0x30/0x30
      [   48.579589]  vfs_read+0x2b3/0x2f0
      [   48.579589]  ksys_read+0x8b/0xc0
      [   48.583590]  do_syscall_64+0x3d/0xc0
      [   48.583590]  entry_SYSCALL_64_after_hwframe+0x4b/0x53
      [   48.586525] RIP: 0033:0x7f2f28703fa1
      [   48.587592] Code: [...] 00 00 00 0f 1f 44 00 00 f3 0f 1e fa 80 3d c5 23 14 00 00 74 13 31 c0 0f 05 <48> 3d 00 f0
      [   48.593534] RSP: 002b:00007ffd90f8cf88 EFLAGS: 00000246 ORIG_RAX: 0000000000000000
      [   48.595589] RAX: ffffffffffffffda RBX: 00007ffd90f8d5e8 RCX: 00007f2f28703fa1
      [   48.595589] RDX: 0000000000000001 RSI: 00007ffd90f8cfb0 RDI: 0000000000000006
      [   48.599592] RBP: 00007ffd90f8d2f0 R08: 0000000000000064 R09: 0000000000000000
      [   48.602527] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
      [   48.603589] R13: 00007ffd90f8d608 R14: 00007f2f288d8000 R15: 0000000000f6bdb0
      [   48.605527]  </TASK>
    
    In the test, two processes are communicating through pipe. Further debugging
    with strace found that the above splat is triggered as read() syscall could
    not receive the data even if the corresponding write() syscall in another
    process successfully wrote data into the pipe.
    
    The failed subtest is "send_signal_perf". The corresponding perf event has
    sample_period 1 and config PERF_COUNT_SW_CPU_CLOCK. sample_period 1 means every
    overflow event will trigger a call to the BPF program. So I suspect this may
    overwhelm the system. So I increased the sample_period to 100,000 and the test
    passed. The sample_period 10,000 still has the test failed.
    
    In other parts of selftest, e.g., [1], sample_freq is used instead. So I
    decided to use sample_freq = 1,000 since the test can pass as well.
    
      [1] https://lore.kernel.org/bpf/[email protected]/
    
    Reported-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Yonghong Song <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
selftests: mptcp: join: check backup support in signal endp [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Thu Aug 8 17:38:30 2024 +0200

    selftests: mptcp: join: check backup support in signal endp
    
    commit f833470c27832136d4416d8fc55d658082af0989 upstream.
    
    Before the previous commit, 'signal' endpoints with the 'backup' flag
    were ignored when sending the MP_JOIN.
    
    The MPTCP Join selftest has then been modified to validate this case:
    the "single address, backup" test, is now validating the MP_JOIN with a
    backup flag as it is what we expect it to do with such name. The
    previous version has been kept, but renamed to "single address, switch
    to backup" to avoid confusions.
    
    The "single address with port, backup" test is also now validating the
    MPJ with a backup flag, which makes more sense than checking the switch
    to backup with an MP_PRIO.
    
    The "mpc backup both sides" test is now validating that the backup flag
    is also set in MP_JOIN from and to the addresses used in the initial
    subflow, using the special ID 0.
    
    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: 4596a2c1b7f5 ("mptcp: allow creating non-backup subflows")
    Cc: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    [ Conflicts in mptcp_join.sh because 'run_tests' helper has been
      modified in multiple commits that are not in this version, e.g. commit
      e571fb09c893 ("selftests: mptcp: add speed env var"). Adaptations
      have been made to use the old way, similar to what is done around. ]
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

selftests: mptcp: join: validate backup in MPJ [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Thu Aug 8 17:36:58 2024 +0200

    selftests: mptcp: join: validate backup in MPJ
    
    commit 935ff5bb8a1cfcdf8e60c8f5c794d0bbbc234437 upstream.
    
    A peer can notify the other one that a subflow has to be treated as
    "backup" by two different ways: either by sending a dedicated MP_PRIO
    notification, or by setting the backup flag in the MP_JOIN handshake.
    
    The selftests were previously monitoring the former, but not the latter.
    This is what is now done here by looking at these new MIB counters when
    validating the 'backup' cases:
    
      MPTcpExtMPJoinSynBackupRx
      MPTcpExtMPJoinSynAckBackupRx
    
    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 will help to validate a new fix for an issue introduced by this
    commit ID.
    
    Fixes: 4596a2c1b7f5 ("mptcp: allow creating non-backup subflows")
    Cc: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    [ Conflicts in mptcp_join.sh because the check are done has changed,
      e.g. in commit 03668c65d153 ("selftests: mptcp: join: rework detailed
      report"), or commit 985de45923e2 ("selftests: mptcp: centralize stats
      dumping"), etc. Adaptations have been made to use the old way, similar
      to what is done just above. ]
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
serial: core: check uartclk for zero to avoid divide by zero [+ + +]
Author: George Kennedy <[email protected]>
Date:   Wed Jul 17 07:24:38 2024 -0500

    serial: core: check uartclk for zero to avoid divide by zero
    
    commit 6eabce6608d6f3440f4c03aa3d3ef50a47a3d193 upstream.
    
    Calling ioctl TIOCSSERIAL with an invalid baud_base can
    result in uartclk being zero, which will result in a
    divide by zero error in uart_get_divisor(). The check for
    uartclk being zero in uart_set_info() needs to be done
    before other settings are made as subsequent calls to
    ioctl TIOCSSERIAL for the same port would be impacted if
    the uartclk check was done where uartclk gets set.
    
    Oops: divide error: 0000  PREEMPT SMP KASAN PTI
    RIP: 0010:uart_get_divisor (drivers/tty/serial/serial_core.c:580)
    Call Trace:
     <TASK>
    serial8250_get_divisor (drivers/tty/serial/8250/8250_port.c:2576
        drivers/tty/serial/8250/8250_port.c:2589)
    serial8250_do_set_termios (drivers/tty/serial/8250/8250_port.c:502
        drivers/tty/serial/8250/8250_port.c:2741)
    serial8250_set_termios (drivers/tty/serial/8250/8250_port.c:2862)
    uart_change_line_settings (./include/linux/spinlock.h:376
        ./include/linux/serial_core.h:608 drivers/tty/serial/serial_core.c:222)
    uart_port_startup (drivers/tty/serial/serial_core.c:342)
    uart_startup (drivers/tty/serial/serial_core.c:368)
    uart_set_info (drivers/tty/serial/serial_core.c:1034)
    uart_set_info_user (drivers/tty/serial/serial_core.c:1059)
    tty_set_serial (drivers/tty/tty_io.c:2637)
    tty_ioctl (drivers/tty/tty_io.c:2647 drivers/tty/tty_io.c:2791)
    __x64_sys_ioctl (fs/ioctl.c:52 fs/ioctl.c:907
        fs/ioctl.c:893 fs/ioctl.c:893)
    do_syscall_64 (arch/x86/entry/common.c:52
        (discriminator 1) arch/x86/entry/common.c:83 (discriminator 1))
    entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
    
    Reported-by: syzkaller <[email protected]>
    Cc: [email protected]
    Signed-off-by: George Kennedy <[email protected]>
    Rule: add
    Link: https://lore.kernel.org/stable/1721148848-9784-1-git-send-email-george.kennedy%40oracle.com
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
smb3: fix setting SecurityFlags when encryption is required [+ + +]
Author: Steve French <[email protected]>
Date:   Wed Jul 31 21:38:50 2024 -0500

    smb3: fix setting SecurityFlags when encryption is required
    
    commit 1b5487aefb1ce7a6b1f15a33297d1231306b4122 upstream.
    
    Setting encryption as required in security flags was broken.
    For example (to require all mounts to be encrypted by setting):
    
      "echo 0x400c5 > /proc/fs/cifs/SecurityFlags"
    
    Would return "Invalid argument" and log "Unsupported security flags"
    This patch fixes that (e.g. allowing overriding the default for
    SecurityFlags  0x00c5, including 0x40000 to require seal, ie
    SMB3.1.1 encryption) so now that works and forces encryption
    on subsequent mounts.
    
    Acked-by: Bharath SM <[email protected]>
    Cc: [email protected]
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
spi: spi-fsl-lpspi: Fix scldiv calculation [+ + +]
Author: Stefan Wahren <[email protected]>
Date:   Sun Aug 4 13:36:11 2024 +0200

    spi: spi-fsl-lpspi: Fix scldiv calculation
    
    [ Upstream commit 730bbfaf7d4890bd99e637db7767dc68cfeb24e7 ]
    
    The effective SPI clock frequency should never exceed speed_hz
    otherwise this might result in undefined behavior of the SPI device.
    
    Currently the scldiv calculation could violate this constraint.
    For the example parameters perclk_rate = 24 MHz and speed_hz = 7 MHz,
    the function fsl_lpspi_set_bitrate will determine perscale = 0 and
    scldiv = 1, which is a effective SPI clock of 8 MHz.
    
    So fix this by rounding up the quotient of perclk_rate and speed_hz.
    While this never change within the loop, we can pull this out.
    
    Fixes: 5314987de5e5 ("spi: imx: add lpspi bus driver")
    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]>

spi: spidev: Add missing spi_device_id for bh2228fv [+ + +]
Author: Geert Uytterhoeven <[email protected]>
Date:   Tue Jul 30 15:35:47 2024 +0200

    spi: spidev: Add missing spi_device_id for bh2228fv
    
    [ Upstream commit e4c4638b6a10427d30e29d22351c375886025f47 ]
    
    When the of_device_id entry for "rohm,bh2228fv" was added, the
    corresponding spi_device_id was forgotten, causing a warning message
    during boot-up:
    
        SPI driver spidev has no spi_device_id for rohm,bh2228fv
    
    Fix module autoloading and shut up the warning by adding the missing
    entry.
    
    Fixes: fc28d1c1fe3b3e2f ("spi: spidev: add correct compatible for Rohm BH2228FV")
    Signed-off-by: Geert Uytterhoeven <[email protected]>
    Link: https://patch.msgid.link/cb571d4128f41175f31319cd9febc829417ea167.1722346539.git.geert+renesas@glider.be
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
SUNRPC: Fix a race to wake a sync task [+ + +]
Author: Benjamin Coddington <[email protected]>
Date:   Wed Jul 17 10:49:33 2024 -0400

    SUNRPC: Fix a race to wake a sync task
    
    [ Upstream commit ed0172af5d6fc07d1b40ca82f5ca3979300369f7 ]
    
    We've observed NFS clients with sync tasks sleeping in __rpc_execute
    waiting on RPC_TASK_QUEUED that have not responded to a wake-up from
    rpc_make_runnable().  I suspect this problem usually goes unnoticed,
    because on a busy client the task will eventually be re-awoken by another
    task completion or xprt event.  However, if the state manager is draining
    the slot table, a sync task missing a wake-up can result in a hung client.
    
    We've been able to prove that the waker in rpc_make_runnable() successfully
    calls wake_up_bit() (ie- there's no race to tk_runstate), but the
    wake_up_bit() call fails to wake the waiter.  I suspect the waker is
    missing the load of the bit's wait_queue_head, so waitqueue_active() is
    false.  There are some very helpful comments about this problem above
    wake_up_bit(), prepare_to_wait(), and waitqueue_active().
    
    Fix this by inserting smp_mb__after_atomic() before the wake_up_bit(),
    which pairs with prepare_to_wait() calling set_current_state().
    
    Signed-off-by: Benjamin Coddington <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Anna Schumaker <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tick/broadcast: Move per CPU pointer access into the atomic section [+ + +]
Author: Thomas Gleixner <[email protected]>
Date:   Wed Jul 31 12:23:51 2024 +0200

    tick/broadcast: Move per CPU pointer access into the atomic section
    
    commit 6881e75237a84093d0986f56223db3724619f26e upstream.
    
    The recent fix for making the take over of the broadcast timer more
    reliable retrieves a per CPU pointer in preemptible context.
    
    This went unnoticed as compilers hoist the access into the non-preemptible
    region where the pointer is actually used. But of course it's valid that
    the compiler keeps it at the place where the code puts it which rightfully
    triggers:
    
      BUG: using smp_processor_id() in preemptible [00000000] code:
           caller is hotplug_cpu__broadcast_tick_pull+0x1c/0xc0
    
    Move it to the actual usage site which is in a non-preemptible region.
    
    Fixes: f7d43dd206e7 ("tick/broadcast: Make takeover of broadcast hrtimer reliable")
    Reported-by: David Wang <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Tested-by: Yu Liao <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/all/87ttg56ers.ffs@tglx
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
timekeeping: Fix bogus clock_was_set() invocation in do_adjtimex() [+ + +]
Author: Thomas Gleixner <[email protected]>
Date:   Sat Aug 3 17:07:51 2024 +0200

    timekeeping: Fix bogus clock_was_set() invocation in do_adjtimex()
    
    commit 5916be8a53de6401871bdd953f6c60237b47d6d3 upstream.
    
    The addition of the bases argument to clock_was_set() fixed up all call
    sites correctly except for do_adjtimex(). This uses CLOCK_REALTIME
    instead of CLOCK_SET_WALL as argument. CLOCK_REALTIME is 0.
    
    As a result the effect of that clock_was_set() notification is incomplete
    and might result in timers expiring late because the hrtimer code does
    not re-evaluate the affected clock bases.
    
    Use CLOCK_SET_WALL instead of CLOCK_REALTIME to tell the hrtimers code
    which clock bases need to be re-evaluated.
    
    Fixes: 17a1b8826b45 ("hrtimer: Add bases argument to clock_was_set()")
    Signed-off-by: Thomas Gleixner <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/all/877ccx7igo.ffs@tglx
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tools headers arm64: Sync arm64's cputype.h with the kernel sources [+ + +]
Author: Arnaldo Carvalho de Melo <[email protected]>
Date:   Mon Jun 3 15:25:23 2024 -0300

    tools headers arm64: Sync arm64's cputype.h with the kernel sources
    
    commit dc6abbbde4b099e936cd5428e196d86a5e119aae upstream.
    
    To get the changes in:
    
      0ce85db6c2141b7f ("arm64: cputype: Add Neoverse-V3 definitions")
      02a0a04676fa7796 ("arm64: cputype: Add Cortex-X4 definitions")
      f4d9d9dcc70b96b5 ("arm64: Add Neoverse-V2 part")
    
    That makes this perf source code to be rebuilt:
    
      CC      /tmp/build/perf-tools/util/arm-spe.o
    
    The changes in the above patch add MIDR_NEOVERSE_V[23] and
    MIDR_NEOVERSE_V1 is used in arm-spe.c, so probably we need to add those
    and perhaps MIDR_CORTEX_X4 to that array? Or maybe we need to leave this
    for later when this is all tested on those machines?
    
      static const struct midr_range neoverse_spe[] = {
              MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N1),
              MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N2),
              MIDR_ALL_VERSIONS(MIDR_NEOVERSE_V1),
              {},
      };
    
    Mark Rutland recommended about arm-spe.c:
    
    "I would not touch this for now -- someone would have to go audit the
    TRMs to check that those other cores have the same encoding, and I think
    it'd be better to do that as a follow-up."
    
    That addresses this perf build warning:
    
      Warning: Kernel ABI header differences:
        diff -u tools/arch/arm64/include/asm/cputype.h arch/arm64/include/asm/cputype.h
    
    Acked-by: Mark Rutland <[email protected]>
    Cc: Adrian Hunter <[email protected]>
    Cc: Besar Wicaksono <[email protected]>
    Cc: Ian Rogers <[email protected]>
    Cc: Jiri Olsa <[email protected]>
    Cc: Kan Liang <[email protected]>
    Cc: Namhyung Kim <[email protected]>
    Cc: Will Deacon <[email protected]>
    Link: https://lore.kernel.org/lkml/Zl8cYk0Tai2fs7aM@x1
    Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
torture: Enable clocksource watchdog with "tsc=watchdog" [+ + +]
Author: Paul E. McKenney <[email protected]>
Date:   Thu Feb 2 17:04:09 2023 -0800

    torture: Enable clocksource watchdog with "tsc=watchdog"
    
    [ Upstream commit 877a0e83c57fa5e2a7fd628ec2e1733ed70c8792 ]
    
    This commit tests the "tsc=watchdog" kernel boot parameter when running
    the clocksourcewd torture tests.
    
    Signed-off-by: Paul E. McKenney <[email protected]>
    Signed-off-by: Boqun Feng <[email protected]>
    Stable-dep-of: f2655ac2c06a ("clocksource: Fix brown-bag boolean thinko in cs_watchdog_read()")
    Signed-off-by: Sasha Levin <[email protected]>

 
tracing: Fix overflow in get_free_elt() [+ + +]
Author: Tze-nan Wu <[email protected]>
Date:   Mon Aug 5 13:59:22 2024 +0800

    tracing: Fix overflow in get_free_elt()
    
    commit bcf86c01ca4676316557dd482c8416ece8c2e143 upstream.
    
    "tracing_map->next_elt" in get_free_elt() is at risk of overflowing.
    
    Once it overflows, new elements can still be inserted into the tracing_map
    even though the maximum number of elements (`max_elts`) has been reached.
    Continuing to insert elements after the overflow could result in the
    tracing_map containing "tracing_map->max_size" elements, leaving no empty
    entries.
    If any attempt is made to insert an element into a full tracing_map using
    `__tracing_map_insert()`, it will cause an infinite loop with preemption
    disabled, leading to a CPU hang problem.
    
    Fix this by preventing any further increments to "tracing_map->next_elt"
    once it reaches "tracing_map->max_elt".
    
    Cc: [email protected]
    Cc: Masami Hiramatsu <[email protected]>
    Fixes: 08d43a5fa063e ("tracing: Add lock-free tracing_map")
    Co-developed-by: Cheng-Jui Wang <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Cheng-Jui Wang <[email protected]>
    Signed-off-by: Tze-nan Wu <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
udf: prevent integer overflow in udf_bitmap_free_blocks() [+ + +]
Author: Roman Smirnov <[email protected]>
Date:   Thu Jun 20 10:24:13 2024 +0300

    udf: prevent integer overflow in udf_bitmap_free_blocks()
    
    [ Upstream commit 56e69e59751d20993f243fb7dd6991c4e522424c ]
    
    An overflow may occur if the function is called with the last
    block and an offset greater than zero. It is necessary to add
    a check to avoid this.
    
    Found by Linux Verification Center (linuxtesting.org) with Svace.
    
    [JK: Make test cover also unalloc table freeing]
    
    Link: https://patch.msgid.link/[email protected]
    Suggested-by: Jan Kara <[email protected]>
    Signed-off-by: Roman Smirnov <[email protected]>
    Signed-off-by: Jan Kara <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
usb: gadget: core: Check for unset descriptor [+ + +]
Author: Chris Wulff <[email protected]>
Date:   Wed Jul 24 21:04:20 2024 -0400

    usb: gadget: core: Check for unset descriptor
    
    commit 973a57891608a98e894db2887f278777f564de18 upstream.
    
    Make sure the descriptor has been set before looking at maxpacket.
    This fixes a null pointer panic in this case.
    
    This may happen if the gadget doesn't properly set up the endpoint
    for the current speed, or the gadget descriptors are malformed and
    the descriptor for the speed/endpoint are not found.
    
    No current gadget driver is known to have this problem, but this
    may cause a hard-to-find bug during development of new gadgets.
    
    Fixes: 54f83b8c8ea9 ("USB: gadget: Reject endpoints with 0 maxpacket value")
    Cc: [email protected]
    Signed-off-by: Chris Wulff <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: u_audio: Check return codes from usb_ep_enable and config_ep_by_speed. [+ + +]
Author: Chris Wulff <[email protected]>
Date:   Sun Jul 21 15:23:15 2024 -0400

    usb: gadget: u_audio: Check return codes from usb_ep_enable and config_ep_by_speed.
    
    commit 76a7bfc445b8e9893c091e24ccfd4f51dfdc0a70 upstream.
    
    These functions can fail if descriptors are malformed, or missing,
    for the selected USB speed.
    
    Fixes: eb9fecb9e69b ("usb: gadget: f_uac2: split out audio core")
    Fixes: 24f779dac8f3 ("usb: gadget: f_uac2/u_audio: add feedback endpoint support")
    Cc: [email protected]
    Signed-off-by: Chris Wulff <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: gadget: u_serial: Set start_delayed during suspend [+ + +]
Author: Prashanth K <[email protected]>
Date:   Tue Jul 30 18:27:54 2024 +0530

    usb: gadget: u_serial: Set start_delayed during suspend
    
    commit 5a444bea37e2759549ef72bfe83d1c8712e76b3d upstream.
    
    Upstream commit aba3a8d01d62 ("usb: gadget: u_serial: add suspend
    resume callbacks") added started_delayed flag, so that new ports
    which are opened after USB suspend can start IO while resuming.
    But if the port was already opened, and gadget suspend kicks in
    afterwards, start_delayed will never be set. This causes resume
    to bail out before calling gs_start_io(). Fix this by setting
    start_delayed during suspend.
    
    Fixes: aba3a8d01d62 ("usb: gadget: u_serial: add suspend resume callbacks")
    Cc: [email protected]
    Signed-off-by: Prashanth K <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
USB: serial: debug: do not echo input by default [+ + +]
Author: Marek Marczykowski-Górecki <[email protected]>
Date:   Mon Jul 15 12:44:53 2024 +0200

    USB: serial: debug: do not echo input by default
    
    commit 00af4f3dda1461ec90d892edc10bec6d3c50c554 upstream.
    
    This driver is intended as a "client" end of the console connection.
    When connected to a host it's supposed to receive debug logs, and
    possibly allow to interact with whatever debug console is available
    there. Feeding messages back, depending on a configuration may cause log
    messages be executed as shell commands (which can be really bad if one
    is unlucky, imagine a log message like "prevented running `rm -rf
    /home`"). In case of Xen, it exposes sysrq-like debug interface, and
    feeding it its own logs will pretty quickly hit 'R' for "instant
    reboot".
    
    Contrary to a classic serial console, the USB one cannot be configured
    ahead of time, as the device shows up only when target OS is up. And at
    the time device is opened to execute relevant ioctl, it's already too
    late, especially when logs start flowing shortly after device is
    initialized.
    Avoid the issue by changing default to no echo for this type of devices.
    
    Signed-off-by: Marek Marczykowski-Górecki <[email protected]>
    [ johan: amend summary; disable also ECHONL ]
    Cc: [email protected]
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usb: vhci-hcd: Do not drop references before new references are gained [+ + +]
Author: Oliver Neukum <[email protected]>
Date:   Tue Jul 9 13:38:41 2024 +0200

    usb: vhci-hcd: Do not drop references before new references are gained
    
    commit afdcfd3d6fcdeca2735ca8d994c5f2d24a368f0a upstream.
    
    At a few places the driver carries stale pointers
    to references that can still be used. Make sure that does not happen.
    This strictly speaking closes ZDI-CAN-22273, though there may be
    similar races in the driver.
    
    Signed-off-by: Oliver Neukum <[email protected]>
    Cc: stable <[email protected]>
    Acked-by: Shuah Khan <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
vhost-vdpa: switch to use vmf_insert_pfn() in the fault handler [+ + +]
Author: Jason Wang <[email protected]>
Date:   Mon Jul 1 11:31:59 2024 +0800

    vhost-vdpa: switch to use vmf_insert_pfn() in the fault handler
    
    commit 0823dc64586ba5ea13a7d200a5d33e4c5fa45950 upstream.
    
    remap_pfn_page() should not be called in the fault handler as it may
    change the vma->flags which may trigger lockdep warning since the vma
    write lock is not held. Actually there's no need to modify the
    vma->flags as it has been set in the mmap(). So this patch switches to
    use vmf_insert_pfn() instead.
    
    Reported-by: Dragos Tatulea <[email protected]>
    Tested-by: Dragos Tatulea <[email protected]>
    Fixes: ddd89d0a059d ("vhost_vdpa: support doorbell mapping via mmap")
    Cc: [email protected]
    Signed-off-by: Jason Wang <[email protected]>
    Message-Id: <[email protected]>
    Signed-off-by: Michael S. Tsirkin <[email protected]>
    Reviewed-by: Michal Kubiak <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
wifi: nl80211: disallow setting special AP channel widths [+ + +]
Author: Johannes Berg <[email protected]>
Date:   Wed May 15 14:16:00 2024 +0200

    wifi: nl80211: disallow setting special AP channel widths
    
    [ Upstream commit 23daf1b4c91db9b26f8425cc7039cf96d22ccbfe ]
    
    Setting the AP channel width is meant for use with the normal
    20/40/... MHz channel width progression, and switching around
    in S1G or narrow channels isn't supported. Disallow that.
    
    Reported-by: [email protected]
    Link: https://msgid.link/20240515141600.d4a9590bfe32.I19a32d60097e81b527eafe6b0924f6c5fbb2dc45@changeid
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: nl80211: don't give key data to userspace [+ + +]
Author: Johannes Berg <[email protected]>
Date:   Thu Jun 27 10:44:11 2024 +0200

    wifi: nl80211: don't give key data to userspace
    
    [ Upstream commit a7e5793035792cc46a1a4b0a783655ffa897dfe9 ]
    
    When a key is requested by userspace, there's really no need
    to include the key data, the sequence counter is really what
    userspace needs in this case. The fact that it's included is
    just a historic quirk.
    
    Remove the key data.
    
    Reviewed-by: Miriam Rachel Korenblit <[email protected]>
    Link: https://patch.msgid.link/20240627104411.b6a4f097e4ea.I7e6cc976cb9e8a80ef25a3351330f313373b4578@changeid
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
x86/mm: Fix pti_clone_entry_text() for i386 [+ + +]
Author: Peter Zijlstra <[email protected]>
Date:   Thu Aug 1 12:42:25 2024 +0200

    x86/mm: Fix pti_clone_entry_text() for i386
    
    [ Upstream commit 3db03fb4995ef85fc41e86262ead7b4852f4bcf0 ]
    
    While x86_64 has PMD aligned text sections, i386 does not have this
    luxery. Notably ALIGN_ENTRY_TEXT_END is empty and _etext has PAGE
    alignment.
    
    This means that text on i386 can be page granular at the tail end,
    which in turn means that the PTI text clones should consistently
    account for this.
    
    Make pti_clone_entry_text() consistent with pti_clone_kernel_text().
    
    Fixes: 16a3fe634f6a ("x86/mm/pti: Clone kernel-image on PTE level for 32 bit")
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

x86/mm: Fix pti_clone_pgtable() alignment assumption [+ + +]
Author: Peter Zijlstra <[email protected]>
Date:   Wed Jul 31 18:31:05 2024 +0200

    x86/mm: Fix pti_clone_pgtable() alignment assumption
    
    [ Upstream commit 41e71dbb0e0a0fe214545fe64af031303a08524c ]
    
    Guenter reported dodgy crashes on an i386-nosmp build using GCC-11
    that had the form of endless traps until entry stack exhaust and then
    #DF from the stack guard.
    
    It turned out that pti_clone_pgtable() had alignment assumptions on
    the start address, notably it hard assumes start is PMD aligned. This
    is true on x86_64, but very much not true on i386.
    
    These assumptions can cause the end condition to malfunction, leading
    to a 'short' clone. Guess what happens when the user mapping has a
    short copy of the entry text?
    
    Use the correct increment form for addr to avoid alignment
    assumptions.
    
    Fixes: 16a3fe634f6a ("x86/mm/pti: Clone kernel-image on PTE level for 32 bit")
    Reported-by: Guenter Roeck <[email protected]>
    Tested-by: Guenter Roeck <[email protected]>
    Suggested-by: Thomas Gleixner <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
x86/mtrr: Check if fixed MTRRs exist before saving them [+ + +]
Author: Andi Kleen <[email protected]>
Date:   Wed Aug 7 17:02:44 2024 -0700

    x86/mtrr: Check if fixed MTRRs exist before saving them
    
    commit 919f18f961c03d6694aa726c514184f2311a4614 upstream.
    
    MTRRs have an obsolete fixed variant for fine grained caching control
    of the 640K-1MB region that uses separate MSRs. This fixed variant has
    a separate capability bit in the MTRR capability MSR.
    
    So far all x86 CPUs which support MTRR have this separate bit set, so it
    went unnoticed that mtrr_save_state() does not check the capability bit
    before accessing the fixed MTRR MSRs.
    
    Though on a CPU that does not support the fixed MTRR capability this
    results in a #GP.  The #GP itself is harmless because the RDMSR fault is
    handled gracefully, but results in a WARN_ON().
    
    Add the missing capability check to prevent this.
    
    Fixes: 2b1f6278d77c ("[PATCH] x86: Save the MTRRs of the BSP before booting an AP")
    Signed-off-by: Andi Kleen <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/all/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
xfs: fix log recovery buffer allocation for the legacy h_size fixup [+ + +]
Author: Christoph Hellwig <[email protected]>
Date:   Tue Apr 30 06:07:55 2024 +0200

    xfs: fix log recovery buffer allocation for the legacy h_size fixup
    
    commit 45cf976008ddef4a9c9a30310c9b4fb2a9a6602a upstream.
    
    Commit a70f9fe52daa ("xfs: detect and handle invalid iclog size set by
    mkfs") added a fixup for incorrect h_size values used for the initial
    umount record in old xfsprogs versions.  Later commit 0c771b99d6c9
    ("xfs: clean up calculation of LR header blocks") cleaned up the log
    reover buffer calculation, but stoped using the fixed up h_size value
    to size the log recovery buffer, which can lead to an out of bounds
    access when the incorrect h_size does not come from the old mkfs
    tool, but a fuzzer.
    
    Fix this by open coding xlog_logrec_hblks and taking the fixed h_size
    into account for this calculation.
    
    Fixes: 0c771b99d6c9 ("xfs: clean up calculation of LR header blocks")
    Reported-by: Sam Sun <[email protected]>
    Signed-off-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Brian Foster <[email protected]>
    Reviewed-by: "Darrick J. Wong" <[email protected]>
    Signed-off-by: Chandan Babu R <[email protected]>
    Signed-off-by: Kevin Berry <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>