óÐÉÓÏË ÉÚÍÅÎÅÎÉÊ × Linux 6.8.8

 
af_unix: Call manage_oob() for every skb in unix_stream_read_generic(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Wed Apr 10 10:10:15 2024 -0700

    af_unix: Call manage_oob() for every skb in unix_stream_read_generic().
    
    [ Upstream commit 283454c8a123072e5c386a5a2b5fc576aa455b6f ]
    
    When we call recv() for AF_UNIX socket, we first peek one skb and
    calls manage_oob() to check if the skb is sent with MSG_OOB.
    
    However, when we fetch the next (and the following) skb, manage_oob()
    is not called now, leading a wrong behaviour.
    
    Let's say a socket send()s "hello" with MSG_OOB and the peer tries
    to recv() 5 bytes with MSG_PEEK.  Here, we should get only "hell"
    without 'o', but actually not:
    
      >>> from socket import *
      >>> c1, c2 = socketpair(AF_UNIX, SOCK_STREAM)
      >>> c1.send(b'hello', MSG_OOB)
      5
      >>> c2.recv(5, MSG_PEEK)
      b'hello'
    
    The first skb fills 4 bytes, and the next skb is peeked but not
    properly checked by manage_oob().
    
    Let's move up the again label to call manage_oob() for evry skb.
    
    With this patch:
    
      >>> from socket import *
      >>> c1, c2 = socketpair(AF_UNIX, SOCK_STREAM)
      >>> c1.send(b'hello', MSG_OOB)
      5
      >>> c2.recv(5, MSG_PEEK)
      b'hell'
    
    Fixes: 314001f0bf92 ("af_unix: Add OOB support")
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://lore.kernel.org/r/20240410171016.7621-2-kuniyu@amazon.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

af_unix: Don't peek OOB data without MSG_OOB. [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Wed Apr 10 10:10:16 2024 -0700

    af_unix: Don't peek OOB data without MSG_OOB.
    
    [ Upstream commit 22dd70eb2c3d754862964377a75abafd3167346b ]
    
    Currently, we can read OOB data without MSG_OOB by using MSG_PEEK
    when OOB data is sitting on the front row, which is apparently
    wrong.
    
      >>> from socket import *
      >>> c1, c2 = socketpair(AF_UNIX, SOCK_STREAM)
      >>> c1.send(b'a', MSG_OOB)
      1
      >>> c2.recv(1, MSG_PEEK | MSG_DONTWAIT)
      b'a'
    
    If manage_oob() is called when no data has been copied, we only
    check if the socket enables SO_OOBINLINE or MSG_PEEK is not used.
    Otherwise, the skb is returned as is.
    
    However, here we should return NULL if MSG_PEEK is set and no data
    has been copied.
    
    Also, in such a case, we should not jump to the redo label because
    we will be caught in the loop and hog the CPU until normal data
    comes in.
    
    Then, we need to handle skb == NULL case with the if-clause below
    the manage_oob() block.
    
    With this patch:
    
      >>> from socket import *
      >>> c1, c2 = socketpair(AF_UNIX, SOCK_STREAM)
      >>> c1.send(b'a', MSG_OOB)
      1
      >>> c2.recv(1, MSG_PEEK | MSG_DONTWAIT)
      Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
      BlockingIOError: [Errno 11] Resource temporarily unavailable
    
    Fixes: 314001f0bf92 ("af_unix: Add OOB support")
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://lore.kernel.org/r/20240410171016.7621-3-kuniyu@amazon.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ALSA: hda/realtek - Enable audio jacks of Haier Boyue G42 with ALC269VC [+ + +]
Author: Ai Chao <aichao@kylinos.cn>
Date:   Fri Apr 19 16:21:59 2024 +0800

    ALSA: hda/realtek - Enable audio jacks of Haier Boyue G42 with ALC269VC
    
    commit 7ee5faad0f8c3ad86c8cfc2f6aac91d2ba29790f upstream.
    
    The Haier Boyue G42 with ALC269VC cannot detect the MIC of headset,
    the line out and internal speaker until
    ALC269VC_FIXUP_ACER_VCOPPERBOX_PINS quirk applied.
    
    Signed-off-by: Ai Chao <aichao@kylinos.cn>
    Cc: <stable@vger.kernel.org>
    Message-ID: <20240419082159.476879-1-aichao@kylinos.cn>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: hda/realtek: Add quirks for Huawei Matebook D14 NBLB-WAX9N [+ + +]
Author: Mauro Carvalho Chehab <mchehab@kernel.org>
Date:   Wed Apr 17 17:16:33 2024 +0100

    ALSA: hda/realtek: Add quirks for Huawei Matebook D14 NBLB-WAX9N
    
    commit 7caf3daaaf0436fe370834c72c667a97d3671d1a upstream.
    
    The headset mic requires a fixup to be properly detected/used.
    
    As a reference, this specific model from 2021 reports
    the following devices:
            https://alsa-project.org/db/?f=1a5ddeb0b151db8fe051407f5bb1c075b7dd3e4a
    
    Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
    Cc: <stable@vger.kernel.org>
    Message-ID: <b92a9e49fb504eec8416bcc6882a52de89450102.1713370457.git.mchehab@kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: hda/realtek: Fix volumn control of ThinkBook 16P Gen4 [+ + +]
Author: Huayu Zhang <zhanghuayu1233@qq.com>
Date:   Sat Apr 13 19:41:22 2024 +0800

    ALSA: hda/realtek: Fix volumn control of ThinkBook 16P Gen4
    
    [ Upstream commit dca5f4dfa925b51becee65031869e917e6229620 ]
    
    change HDA & AMP configuration from ALC287_FIXUP_CS35L41_I2C_2 to
    ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD for ThinkBook 16P Gen4
    models to fix volumn control issue (cannot fully mute).
    
    Signed-off-by: Huayu Zhang <zhanghuayu1233@qq.com>
    Fixes: 6214e24cae9b ("ALSA: hda/realtek: Add quirks for Lenovo Thinkbook 16P laptops")
    Message-ID: <tencent_37EB880C5E5BD99D21C16B288115C4545F06@qq.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda/tas2781: Add new vendor_id and subsystem_id to support ThinkPad ICE-1 [+ + +]
Author: Shenghao Ding <shenghao-ding@ti.com>
Date:   Thu Apr 11 17:18:22 2024 +0800

    ALSA: hda/tas2781: Add new vendor_id and subsystem_id to support ThinkPad ICE-1
    
    commit f74ab0c5e5947bcb3a400ab73d837974e76fad23 upstream.
    
    Add new vendor_id and subsystem_id to support new Lenovo laptop
    ThinkPad ICE-1
    
    Signed-off-by: Shenghao Ding <shenghao-ding@ti.com>
    Cc: <stable@vger.kernel.org>
    Message-ID: <20240411091823.1644-1-shenghao-ding@ti.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: hda/tas2781: correct the register for pow calibrated data [+ + +]
Author: Shenghao Ding <shenghao-ding@ti.com>
Date:   Sat Apr 6 21:20:09 2024 +0800

    ALSA: hda/tas2781: correct the register for pow calibrated data
    
    commit 0b6f0ff01a4a8c1b66c600263465976d57dcc1a3 upstream.
    
    Calibrated data was written into an incorrect register, which cause
    speaker protection sometimes malfuctions
    
    Fixes: 5be27f1e3ec9 ("ALSA: hda/tas2781: Add tas2781 HDA driver")
    Signed-off-by: Shenghao Ding <shenghao-ding@ti.com>
    Cc: <stable@vger.kernel.org>
    Message-ID: <20240406132010.341-1-shenghao-ding@ti.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: seq: ump: Fix conversion from MIDI2 to MIDI1 UMP messages [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Fri Apr 19 12:04:39 2024 +0200

    ALSA: seq: ump: Fix conversion from MIDI2 to MIDI1 UMP messages
    
    commit f25f17dc5c6a5e3f2014d44635f0c0db45224efe upstream.
    
    The conversion from MIDI2 to MIDI1 UMP messages had a leftover
    artifact (superfluous bit shift), and this resulted in the bogus type
    check, leading to empty outputs.  Let's fix it.
    
    Fixes: e9e02819a98a ("ALSA: seq: Automatic conversion of UMP events")
    Cc: <stable@vger.kernel.org>
    Link: https://github.com/alsa-project/alsa-utils/issues/262
    Message-ID: <20240419100442.14806-1-tiwai@suse.de>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
arm64/head: Disable MMU at EL2 before clearing HCR_EL2.E2H [+ + +]
Author: Ard Biesheuvel <ardb@kernel.org>
Date:   Mon Apr 15 09:54:15 2024 +0200

    arm64/head: Disable MMU at EL2 before clearing HCR_EL2.E2H
    
    commit 34e526cb7d46726b2ae5f83f2892d00ebb088509 upstream.
    
    Even though the boot protocol stipulates otherwise, an exception has
    been made for the EFI stub, and entering the core kernel with the MMU
    enabled is permitted. This allows a substantial amount of cache
    maintenance to be elided, wich is significant when fast boot times are
    critical (e.g., for booting micro-VMs)
    
    Once the initial ID map has been populated, the MMU is disabled as part
    of the logic sequence that puts all system registers into a known state.
    Any code that needs to execute within the window where the MMU is off is
    cleaned to the PoC explicitly, which includes all of HYP text when
    entering at EL2.
    
    However, the current sequence of initializing the EL2 system registers
    is not safe: HCR_EL2 is set to its nVHE initial state before SCTLR_EL2
    is reprogrammed, and this means that a VHE-to-nVHE switch may occur
    while the MMU is enabled. This switch causes some system registers as
    well as page table descriptors to be interpreted in a different way,
    potentially resulting in spurious exceptions relating to MMU
    translation.
    
    So disable the MMU explicitly first when entering in EL2 with the MMU
    and caches enabled.
    
    Fixes: 617861703830 ("efi: arm64: enter with MMU and caches enabled")
    Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
    Cc: <stable@vger.kernel.org> # 6.3.x
    Acked-by: Mark Rutland <mark.rutland@arm.com>
    Acked-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20240415075412.2347624-6-ardb+git@google.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
arm64: hibernate: Fix level3 translation fault in swsusp_save() [+ + +]
Author: Yaxiong Tian <tianyaxiong@kylinos.cn>
Date:   Wed Apr 17 10:52:48 2024 +0800

    arm64: hibernate: Fix level3 translation fault in swsusp_save()
    
    commit 50449ca66cc5a8cbc64749cf4b9f3d3fc5f4b457 upstream.
    
    On arm64 machines, swsusp_save() faults if it attempts to access
    MEMBLOCK_NOMAP memory ranges. This can be reproduced in QEMU using UEFI
    when booting with rodata=off debug_pagealloc=off and CONFIG_KFENCE=n:
    
      Unable to handle kernel paging request at virtual address ffffff8000000000
      Mem abort info:
        ESR = 0x0000000096000007
        EC = 0x25: DABT (current EL), IL = 32 bits
        SET = 0, FnV = 0
        EA = 0, S1PTW = 0
        FSC = 0x07: level 3 translation fault
      Data abort info:
        ISV = 0, ISS = 0x00000007, ISS2 = 0x00000000
        CM = 0, WnR = 0, TnD = 0, TagAccess = 0
        GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
      swapper pgtable: 4k pages, 39-bit VAs, pgdp=00000000eeb0b000
      [ffffff8000000000] pgd=180000217fff9803, p4d=180000217fff9803, pud=180000217fff9803, pmd=180000217fff8803, pte=0000000000000000
      Internal error: Oops: 0000000096000007 [#1] SMP
      Internal error: Oops: 0000000096000007 [#1] SMP
      Modules linked in: xt_multiport ipt_REJECT nf_reject_ipv4 xt_conntrack nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 libcrc32c iptable_filter bpfilter rfkill at803x snd_hda_codec_hdmi snd_hda_intel snd_intel_dspcfg dwmac_generic stmmac_platform snd_hda_codec stmmac joydev pcs_xpcs snd_hda_core phylink ppdev lp parport ramoops reed_solomon ip_tables x_tables nls_iso8859_1 vfat multipath linear amdgpu amdxcp drm_exec gpu_sched drm_buddy hid_generic usbhid hid radeon video drm_suballoc_helper drm_ttm_helper ttm i2c_algo_bit drm_display_helper cec drm_kms_helper drm
      CPU: 0 PID: 3663 Comm: systemd-sleep Not tainted 6.6.2+ #76
      Source Version: 4e22ed63a0a48e7a7cff9b98b7806d8d4add7dc0
      Hardware name: Greatwall GW-XXXXXX-XXX/GW-XXXXXX-XXX, BIOS KunLun BIOS V4.0 01/19/2021
      pstate: 600003c5 (nZCv DAIF -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
      pc : swsusp_save+0x280/0x538
      lr : swsusp_save+0x280/0x538
      sp : ffffffa034a3fa40
      x29: ffffffa034a3fa40 x28: ffffff8000001000 x27: 0000000000000000
      x26: ffffff8001400000 x25: ffffffc08113e248 x24: 0000000000000000
      x23: 0000000000080000 x22: ffffffc08113e280 x21: 00000000000c69f2
      x20: ffffff8000000000 x19: ffffffc081ae2500 x18: 0000000000000000
      x17: 6666662074736420 x16: 3030303030303030 x15: 3038666666666666
      x14: 0000000000000b69 x13: ffffff9f89088530 x12: 00000000ffffffea
      x11: 00000000ffff7fff x10: 00000000ffff7fff x9 : ffffffc08193f0d0
      x8 : 00000000000bffe8 x7 : c0000000ffff7fff x6 : 0000000000000001
      x5 : ffffffa0fff09dc8 x4 : 0000000000000000 x3 : 0000000000000027
      x2 : 0000000000000000 x1 : 0000000000000000 x0 : 000000000000004e
      Call trace:
       swsusp_save+0x280/0x538
       swsusp_arch_suspend+0x148/0x190
       hibernation_snapshot+0x240/0x39c
       hibernate+0xc4/0x378
       state_store+0xf0/0x10c
       kobj_attr_store+0x14/0x24
    
    The reason is swsusp_save() -> copy_data_pages() -> page_is_saveable()
    -> kernel_page_present() assuming that a page is always present when
    can_set_direct_map() is false (all of rodata_full,
    debug_pagealloc_enabled() and arm64_kfence_can_set_direct_map() false),
    irrespective of the MEMBLOCK_NOMAP ranges. Such MEMBLOCK_NOMAP regions
    should not be saved during hibernation.
    
    This problem was introduced by changes to the pfn_valid() logic in
    commit a7d9f306ba70 ("arm64: drop pfn_valid_within() and simplify
    pfn_valid()").
    
    Similar to other architectures, drop the !can_set_direct_map() check in
    kernel_page_present() so that page_is_savable() skips such pages.
    
    Fixes: a7d9f306ba70 ("arm64: drop pfn_valid_within() and simplify pfn_valid()")
    Cc: <stable@vger.kernel.org> # 5.14.x
    Suggested-by: Mike Rapoport <rppt@kernel.org>
    Suggested-by: Catalin Marinas <catalin.marinas@arm.com>
    Co-developed-by: xiongxin <xiongxin@kylinos.cn>
    Signed-off-by: xiongxin <xiongxin@kylinos.cn>
    Signed-off-by: Yaxiong Tian <tianyaxiong@kylinos.cn>
    Acked-by: Mike Rapoport (IBM) <rppt@kernel.org>
    Link: https://lore.kernel.org/r/20240417025248.386622-1-tianyaxiong@kylinos.cn
    [catalin.marinas@arm.com: rework commit message]
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
binder: check offset alignment in binder_get_object() [+ + +]
Author: Carlos Llamas <cmllamas@google.com>
Date:   Sat Mar 30 19:01:14 2024 +0000

    binder: check offset alignment in binder_get_object()
    
    commit aaef73821a3b0194a01bd23ca77774f704a04d40 upstream.
    
    Commit 6d98eb95b450 ("binder: avoid potential data leakage when copying
    txn") introduced changes to how binder objects are copied. In doing so,
    it unintentionally removed an offset alignment check done through calls
    to binder_alloc_copy_from_buffer() -> check_buffer().
    
    These calls were replaced in binder_get_object() with copy_from_user(),
    so now an explicit offset alignment check is needed here. This avoids
    later complications when unwinding the objects gets harder.
    
    It is worth noting this check existed prior to commit 7a67a39320df
    ("binder: add function to copy binder object from buffer"), likely
    removed due to redundancy at the time.
    
    Fixes: 6d98eb95b450 ("binder: avoid potential data leakage when copying txn")
    Cc: stable@vger.kernel.org
    Signed-off-by: Carlos Llamas <cmllamas@google.com>
    Acked-by: Todd Kjos <tkjos@google.com>
    Link: https://lore.kernel.org/r/20240330190115.1877819-1-cmllamas@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
block: propagate partition scanning errors to the BLKRRPART ioctl [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Wed Apr 17 16:47:43 2024 +0200

    block: propagate partition scanning errors to the BLKRRPART ioctl
    
    [ Upstream commit 752863bddacab6b5c5164b1df8c8b2e3a175ee28 ]
    
    Commit 4601b4b130de ("block: reopen the device in blkdev_reread_part")
    lost the propagation of I/O errors from the low-level read of the
    partition table to the user space caller of the BLKRRPART.
    
    Apparently some user space relies on, so restore the propagation.  This
    isn't exactly pretty as other block device open calls explicitly do not
    are about these errors, so add a new BLK_OPEN_STRICT_SCAN to opt into
    the error propagation.
    
    Fixes: 4601b4b130de ("block: reopen the device in blkdev_reread_part")
    Reported-by: Saranya Muruganandam <saranyamohan@google.com>
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
    Reviewed-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
    Tested-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
    Link: https://lore.kernel.org/r/20240417144743.2277601-1-hch@lst.de
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bootconfig: use memblock_free_late to free xbc memory to buddy [+ + +]
Author: Qiang Zhang <qiang4.zhang@intel.com>
Date:   Sun Apr 14 19:49:45 2024 +0800

    bootconfig: use memblock_free_late to free xbc memory to buddy
    
    commit 89f9a1e876b5a7ad884918c03a46831af202c8a0 upstream.
    
    On the time to free xbc memory in xbc_exit(), memblock may has handed
    over memory to buddy allocator. So it doesn't make sense to free memory
    back to memblock. memblock_free() called by xbc_exit() even causes UAF bugs
    on architectures with CONFIG_ARCH_KEEP_MEMBLOCK disabled like x86.
    Following KASAN logs shows this case.
    
    This patch fixes the xbc memory free problem by calling memblock_free()
    in early xbc init error rewind path and calling memblock_free_late() in
    xbc exit path to free memory to buddy allocator.
    
    [    9.410890] ==================================================================
    [    9.418962] BUG: KASAN: use-after-free in memblock_isolate_range+0x12d/0x260
    [    9.426850] Read of size 8 at addr ffff88845dd30000 by task swapper/0/1
    
    [    9.435901] CPU: 9 PID: 1 Comm: swapper/0 Tainted: G     U             6.9.0-rc3-00208-g586b5dfb51b9 #5
    [    9.446403] Hardware name: Intel Corporation RPLP LP5 (CPU:RaptorLake)/RPLP LP5 (ID:13), BIOS IRPPN02.01.01.00.00.19.015.D-00000000 Dec 28 2023
    [    9.460789] Call Trace:
    [    9.463518]  <TASK>
    [    9.465859]  dump_stack_lvl+0x53/0x70
    [    9.469949]  print_report+0xce/0x610
    [    9.473944]  ? __virt_addr_valid+0xf5/0x1b0
    [    9.478619]  ? memblock_isolate_range+0x12d/0x260
    [    9.483877]  kasan_report+0xc6/0x100
    [    9.487870]  ? memblock_isolate_range+0x12d/0x260
    [    9.493125]  memblock_isolate_range+0x12d/0x260
    [    9.498187]  memblock_phys_free+0xb4/0x160
    [    9.502762]  ? __pfx_memblock_phys_free+0x10/0x10
    [    9.508021]  ? mutex_unlock+0x7e/0xd0
    [    9.512111]  ? __pfx_mutex_unlock+0x10/0x10
    [    9.516786]  ? kernel_init_freeable+0x2d4/0x430
    [    9.521850]  ? __pfx_kernel_init+0x10/0x10
    [    9.526426]  xbc_exit+0x17/0x70
    [    9.529935]  kernel_init+0x38/0x1e0
    [    9.533829]  ? _raw_spin_unlock_irq+0xd/0x30
    [    9.538601]  ret_from_fork+0x2c/0x50
    [    9.542596]  ? __pfx_kernel_init+0x10/0x10
    [    9.547170]  ret_from_fork_asm+0x1a/0x30
    [    9.551552]  </TASK>
    
    [    9.555649] The buggy address belongs to the physical page:
    [    9.561875] page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x1 pfn:0x45dd30
    [    9.570821] flags: 0x200000000000000(node=0|zone=2)
    [    9.576271] page_type: 0xffffffff()
    [    9.580167] raw: 0200000000000000 ffffea0011774c48 ffffea0012ba1848 0000000000000000
    [    9.588823] raw: 0000000000000001 0000000000000000 00000000ffffffff 0000000000000000
    [    9.597476] page dumped because: kasan: bad access detected
    
    [    9.605362] Memory state around the buggy address:
    [    9.610714]  ffff88845dd2ff00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    [    9.618786]  ffff88845dd2ff80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    [    9.626857] >ffff88845dd30000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    [    9.634930]                    ^
    [    9.638534]  ffff88845dd30080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    [    9.646605]  ffff88845dd30100: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    [    9.654675] ==================================================================
    
    Link: https://lore.kernel.org/all/20240414114944.1012359-1-qiang4.zhang@linux.intel.com/
    
    Fixes: 40caa127f3c7 ("init: bootconfig: Remove all bootconfig data when the init memory is removed")
    Cc: Stable@vger.kernel.org
    Signed-off-by: Qiang Zhang <qiang4.zhang@intel.com>
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
btrfs: do not wait for short bulk allocation [+ + +]
Author: Qu Wenruo <wqu@suse.com>
Date:   Tue Mar 26 09:16:46 2024 +1030

    btrfs: do not wait for short bulk allocation
    
    commit 1db7959aacd905e6487d0478ac01d89f86eb1e51 upstream.
    
    [BUG]
    There is a recent report that when memory pressure is high (including
    cached pages), btrfs can spend most of its time on memory allocation in
    btrfs_alloc_page_array() for compressed read/write.
    
    [CAUSE]
    For btrfs_alloc_page_array() we always go alloc_pages_bulk_array(), and
    even if the bulk allocation failed (fell back to single page
    allocation) we still retry but with extra memalloc_retry_wait().
    
    If the bulk alloc only returned one page a time, we would spend a lot of
    time on the retry wait.
    
    The behavior was introduced in commit 395cb57e8560 ("btrfs: wait between
    incomplete batch memory allocations").
    
    [FIX]
    Although the commit mentioned that other filesystems do the wait, it's
    not the case at least nowadays.
    
    All the mainlined filesystems only call memalloc_retry_wait() if they
    failed to allocate any page (not only for bulk allocation).
    If there is any progress, they won't call memalloc_retry_wait() at all.
    
    For example, xfs_buf_alloc_pages() would only call memalloc_retry_wait()
    if there is no allocation progress at all, and the call is not for
    metadata readahead.
    
    So I don't believe we should call memalloc_retry_wait() unconditionally
    for short allocation.
    
    Call memalloc_retry_wait() if it fails to allocate any page for tree
    block allocation (which goes with __GFP_NOFAIL and may not need the
    special handling anyway), and reduce the latency for
    btrfs_alloc_page_array().
    
    Reported-by: Julian Taylor <julian.taylor@1und1.de>
    Tested-by: Julian Taylor <julian.taylor@1und1.de>
    Link: https://lore.kernel.org/all/8966c095-cbe7-4d22-9784-a647d1bf27c3@1und1.de/
    Fixes: 395cb57e8560 ("btrfs: wait between incomplete batch memory allocations")
    CC: stable@vger.kernel.org # 6.1+
    Reviewed-by: Sweet Tea Dorminy <sweettea-kernel@dorminy.me>
    Reviewed-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: Qu Wenruo <wqu@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: zoned: do not flag ZEROOUT on non-dirty extent buffer [+ + +]
Author: Naohiro Aota <naohiro.aota@wdc.com>
Date:   Tue Mar 26 14:39:20 2024 +0900

    btrfs: zoned: do not flag ZEROOUT on non-dirty extent buffer
    
    commit 68879386180c0efd5a11e800b0525a01068c9457 upstream.
    
    Btrfs clears the content of an extent buffer marked as
    EXTENT_BUFFER_ZONED_ZEROOUT before the bio submission. This mechanism is
    introduced to prevent a write hole of an extent buffer, which is once
    allocated, marked dirty, but turns out unnecessary and cleaned up within
    one transaction operation.
    
    Currently, btrfs_clear_buffer_dirty() marks the extent buffer as
    EXTENT_BUFFER_ZONED_ZEROOUT, and skips the entry function. If this call
    happens while the buffer is under IO (with the WRITEBACK flag set,
    without the DIRTY flag), we can add the ZEROOUT flag and clear the
    buffer's content just before a bio submission. As a result:
    
    1) it can lead to adding faulty delayed reference item which leads to a
       FS corrupted (EUCLEAN) error, and
    
    2) it writes out cleared tree node on disk
    
    The former issue is previously discussed in [1]. The corruption happens
    when it runs a delayed reference update. So, on-disk data is safe.
    
    [1] https://lore.kernel.org/linux-btrfs/3f4f2a0ff1a6c818050434288925bdcf3cd719e5.1709124777.git.naohiro.aota@wdc.com/
    
    The latter one can reach on-disk data. But, as that node is already
    processed by btrfs_clear_buffer_dirty(), that will be invalidated in the
    next transaction commit anyway. So, the chance of hitting the corruption
    is relatively small.
    
    Anyway, we should skip flagging ZEROOUT on a non-DIRTY extent buffer, to
    keep the content under IO intact.
    
    Fixes: aa6313e6ff2b ("btrfs: zoned: don't clear dirty flag of extent buffer")
    CC: stable@vger.kernel.org # 6.8
    Link: https://lore.kernel.org/linux-btrfs/oadvdekkturysgfgi4qzuemd57zudeasynswurjxw3ocdfsef6@sjyufeugh63f/
    Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
clk: Get runtime PM before walking tree during disable_unused [+ + +]
Author: Stephen Boyd <sboyd@kernel.org>
Date:   Mon Mar 25 11:41:58 2024 -0700

    clk: Get runtime PM before walking tree during disable_unused
    
    [ Upstream commit e581cf5d216289ef292d1a4036d53ce90e122469 ]
    
    Doug reported [1] the following hung task:
    
     INFO: task swapper/0:1 blocked for more than 122 seconds.
           Not tainted 5.15.149-21875-gf795ebc40eb8 #1
     "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
     task:swapper/0       state:D stack:    0 pid:    1 ppid:     0 flags:0x00000008
     Call trace:
      __switch_to+0xf4/0x1f4
      __schedule+0x418/0xb80
      schedule+0x5c/0x10c
      rpm_resume+0xe0/0x52c
      rpm_resume+0x178/0x52c
      __pm_runtime_resume+0x58/0x98
      clk_pm_runtime_get+0x30/0xb0
      clk_disable_unused_subtree+0x58/0x208
      clk_disable_unused_subtree+0x38/0x208
      clk_disable_unused_subtree+0x38/0x208
      clk_disable_unused_subtree+0x38/0x208
      clk_disable_unused_subtree+0x38/0x208
      clk_disable_unused+0x4c/0xe4
      do_one_initcall+0xcc/0x2d8
      do_initcall_level+0xa4/0x148
      do_initcalls+0x5c/0x9c
      do_basic_setup+0x24/0x30
      kernel_init_freeable+0xec/0x164
      kernel_init+0x28/0x120
      ret_from_fork+0x10/0x20
     INFO: task kworker/u16:0:9 blocked for more than 122 seconds.
           Not tainted 5.15.149-21875-gf795ebc40eb8 #1
     "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
     task:kworker/u16:0   state:D stack:    0 pid:    9 ppid:     2 flags:0x00000008
     Workqueue: events_unbound deferred_probe_work_func
     Call trace:
      __switch_to+0xf4/0x1f4
      __schedule+0x418/0xb80
      schedule+0x5c/0x10c
      schedule_preempt_disabled+0x2c/0x48
      __mutex_lock+0x238/0x488
      __mutex_lock_slowpath+0x1c/0x28
      mutex_lock+0x50/0x74
      clk_prepare_lock+0x7c/0x9c
      clk_core_prepare_lock+0x20/0x44
      clk_prepare+0x24/0x30
      clk_bulk_prepare+0x40/0xb0
      mdss_runtime_resume+0x54/0x1c8
      pm_generic_runtime_resume+0x30/0x44
      __genpd_runtime_resume+0x68/0x7c
      genpd_runtime_resume+0x108/0x1f4
      __rpm_callback+0x84/0x144
      rpm_callback+0x30/0x88
      rpm_resume+0x1f4/0x52c
      rpm_resume+0x178/0x52c
      __pm_runtime_resume+0x58/0x98
      __device_attach+0xe0/0x170
      device_initial_probe+0x1c/0x28
      bus_probe_device+0x3c/0x9c
      device_add+0x644/0x814
      mipi_dsi_device_register_full+0xe4/0x170
      devm_mipi_dsi_device_register_full+0x28/0x70
      ti_sn_bridge_probe+0x1dc/0x2c0
      auxiliary_bus_probe+0x4c/0x94
      really_probe+0xcc/0x2c8
      __driver_probe_device+0xa8/0x130
      driver_probe_device+0x48/0x110
      __device_attach_driver+0xa4/0xcc
      bus_for_each_drv+0x8c/0xd8
      __device_attach+0xf8/0x170
      device_initial_probe+0x1c/0x28
      bus_probe_device+0x3c/0x9c
      deferred_probe_work_func+0x9c/0xd8
      process_one_work+0x148/0x518
      worker_thread+0x138/0x350
      kthread+0x138/0x1e0
      ret_from_fork+0x10/0x20
    
    The first thread is walking the clk tree and calling
    clk_pm_runtime_get() to power on devices required to read the clk
    hardware via struct clk_ops::is_enabled(). This thread holds the clk
    prepare_lock, and is trying to runtime PM resume a device, when it finds
    that the device is in the process of resuming so the thread schedule()s
    away waiting for the device to finish resuming before continuing. The
    second thread is runtime PM resuming the same device, but the runtime
    resume callback is calling clk_prepare(), trying to grab the
    prepare_lock waiting on the first thread.
    
    This is a classic ABBA deadlock. To properly fix the deadlock, we must
    never runtime PM resume or suspend a device with the clk prepare_lock
    held. Actually doing that is near impossible today because the global
    prepare_lock would have to be dropped in the middle of the tree, the
    device runtime PM resumed/suspended, and then the prepare_lock grabbed
    again to ensure consistency of the clk tree topology. If anything
    changes with the clk tree in the meantime, we've lost and will need to
    start the operation all over again.
    
    Luckily, most of the time we're simply incrementing or decrementing the
    runtime PM count on an active device, so we don't have the chance to
    schedule away with the prepare_lock held. Let's fix this immediate
    problem that can be triggered more easily by simply booting on Qualcomm
    sc7180.
    
    Introduce a list of clk_core structures that have been registered, or
    are in the process of being registered, that require runtime PM to
    operate. Iterate this list and call clk_pm_runtime_get() on each of them
    without holding the prepare_lock during clk_disable_unused(). This way
    we can be certain that the runtime PM state of the devices will be
    active and resumed so we can't schedule away while walking the clk tree
    with the prepare_lock held. Similarly, call clk_pm_runtime_put() without
    the prepare_lock held to properly drop the runtime PM reference. We
    remove the calls to clk_pm_runtime_{get,put}() in this path because
    they're superfluous now that we know the devices are runtime resumed.
    
    Reported-by: Douglas Anderson <dianders@chromium.org>
    Closes: https://lore.kernel.org/all/20220922084322.RFC.2.I375b6b9e0a0a5348962f004beb3dafee6a12dfbb@changeid/ [1]
    Closes: https://issuetracker.google.com/328070191
    Cc: Marek Szyprowski <m.szyprowski@samsung.com>
    Cc: Ulf Hansson <ulf.hansson@linaro.org>
    Cc: Krzysztof Kozlowski <krzk@kernel.org>
    Fixes: 9a34b45397e5 ("clk: Add support for runtime PM")
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Link: https://lore.kernel.org/r/20240325184204.745706-5-sboyd@kernel.org
    Reviewed-by: Douglas Anderson <dianders@chromium.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: Get runtime PM before walking tree for clk_summary [+ + +]
Author: Stephen Boyd <sboyd@kernel.org>
Date:   Mon Mar 25 11:41:59 2024 -0700

    clk: Get runtime PM before walking tree for clk_summary
    
    [ Upstream commit 9d1e795f754db1ac3344528b7af0b17b8146f321 ]
    
    Similar to the previous commit, we should make sure that all devices are
    runtime resumed before printing the clk_summary through debugfs. Failure
    to do so would result in a deadlock if the thread is resuming a device
    to print clk state and that device is also runtime resuming in another
    thread, e.g the screen is turning on and the display driver is starting
    up. We remove the calls to clk_pm_runtime_{get,put}() in this path
    because they're superfluous now that we know the devices are runtime
    resumed. This also squashes a bug where the return value of
    clk_pm_runtime_get() wasn't checked, leading to an RPM count underflow
    on error paths.
    
    Fixes: 1bb294a7981c ("clk: Enable/Disable runtime PM for clk_summary")
    Cc: Taniya Das <quic_tdas@quicinc.com>
    Cc: Douglas Anderson <dianders@chromium.org>
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Link: https://lore.kernel.org/r/20240325184204.745706-6-sboyd@kernel.org
    Reviewed-by: Douglas Anderson <dianders@chromium.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: Initialize struct clk_core kref earlier [+ + +]
Author: Stephen Boyd <sboyd@kernel.org>
Date:   Mon Mar 25 11:41:57 2024 -0700

    clk: Initialize struct clk_core kref earlier
    
    [ Upstream commit 9d05ae531c2cff20d5d527f04e28d28e04379929 ]
    
    Initialize this kref once we allocate memory for the struct clk_core so
    that we can reuse the release function to free any memory associated
    with the structure. This mostly consolidates code, but also clarifies
    that the kref lifetime exists once the container structure (struct
    clk_core) is allocated instead of leaving it in a half-baked state for
    most of __clk_core_init().
    
    Reviewed-by: Douglas Anderson <dianders@chromium.org>
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Link: https://lore.kernel.org/r/20240325184204.745706-4-sboyd@kernel.org
    Stable-dep-of: e581cf5d2162 ("clk: Get runtime PM before walking tree during disable_unused")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: mediatek: Do a runtime PM get on controllers during probe [+ + +]
Author: Pin-yen Lin <treapking@chromium.org>
Date:   Tue Mar 12 19:51:55 2024 +0800

    clk: mediatek: Do a runtime PM get on controllers during probe
    
    [ Upstream commit 2f7b1d8b5505efb0057cd1ab85fca206063ea4c3 ]
    
    mt8183-mfgcfg has a mutual dependency with genpd during the probing
    stage, which leads to a deadlock in the following call stack:
    
    CPU0:  genpd_lock --> clk_prepare_lock
    genpd_power_off_work_fn()
     genpd_lock()
     generic_pm_domain::power_off()
        clk_unprepare()
          clk_prepare_lock()
    
    CPU1: clk_prepare_lock --> genpd_lock
    clk_register()
      __clk_core_init()
        clk_prepare_lock()
        clk_pm_runtime_get()
          genpd_lock()
    
    Do a runtime PM get at the probe function to make sure clk_register()
    won't acquire the genpd lock. Instead of only modifying mt8183-mfgcfg,
    do this on all mediatek clock controller probings because we don't
    believe this would cause any regression.
    
    Verified on MT8183 and MT8192 Chromebooks.
    
    Fixes: acddfc2c261b ("clk: mediatek: Add MT8183 clock support")
    Signed-off-by: Pin-yen Lin <treapking@chromium.org>
    
    Link: https://lore.kernel.org/r/20240312115249.3341654-1-treapking@chromium.org
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Tested-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: mediatek: mt7988-infracfg: fix clocks for 2nd PCIe port [+ + +]
Author: Daniel Golle <daniel@makrotopia.org>
Date:   Wed Mar 13 22:05:37 2024 +0000

    clk: mediatek: mt7988-infracfg: fix clocks for 2nd PCIe port
    
    [ Upstream commit d3e8a91a848a5941e3c31ecebd6b2612b37e01a6 ]
    
    Due to what seems to be an undocumented oddity in MediaTek's MT7988
    SoC design the CLK_INFRA_PCIE_PERI_26M_CK_P2 clock requires
    CLK_INFRA_PCIE_PERI_26M_CK_P3 to be enabled.
    
    This currently leads to PCIe port 2 not working in Linux.
    
    Reflect the apparent relationship in the clk driver to make sure PCIe
    port 2 of the MT7988 SoC works.
    
    Fixes: 4b4719437d85f ("clk: mediatek: add drivers for MT7988 SoC")
    Suggested-by: Sam Shih <sam.shih@mediatek.com>
    Signed-off-by: Daniel Golle <daniel@makrotopia.org>
    Link: https://lore.kernel.org/r/1da2506a51f970706bf4ec9509dd04e0471065e5.1710367453.git.daniel@makrotopia.org
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

clk: Remove prepare_lock hold assertion in __clk_release() [+ + +]
Author: Stephen Boyd <sboyd@kernel.org>
Date:   Mon Mar 25 11:41:55 2024 -0700

    clk: Remove prepare_lock hold assertion in __clk_release()
    
    [ Upstream commit 8358a76cfb47c9a5af627a0c4e7168aa14fa25f6 ]
    
    Removing this assertion lets us move the kref_put() call outside the
    prepare_lock section. We don't need to hold the prepare_lock here to
    free memory and destroy the clk_core structure. We've already unlinked
    the clk from the clk tree and by the time the release function runs
    nothing holds a reference to the clk_core anymore so anything with the
    pointer can't access the memory that's being freed anyway. Way back in
    commit 496eadf821c2 ("clk: Use lockdep asserts to find missing hold of
    prepare_lock") we didn't need to have this assertion either.
    
    Fixes: 496eadf821c2 ("clk: Use lockdep asserts to find missing hold of prepare_lock")
    Cc: Krzysztof Kozlowski <krzk@kernel.org>
    Reviewed-by: Douglas Anderson <dianders@chromium.org>
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Link: https://lore.kernel.org/r/20240325184204.745706-2-sboyd@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
comedi: vmk80xx: fix incomplete endpoint checking [+ + +]
Author: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Date:   Mon Apr 8 10:16:33 2024 -0700

    comedi: vmk80xx: fix incomplete endpoint checking
    
    commit d1718530e3f640b7d5f0050e725216eab57a85d8 upstream.
    
    While vmk80xx does have endpoint checking implemented, some things
    can fall through the cracks. Depending on the hardware model,
    URBs can have either bulk or interrupt type, and current version
    of vmk80xx_find_usb_endpoints() function does not take that fully
    into account. While this warning does not seem to be too harmful,
    at the very least it will crash systems with 'panic_on_warn' set on
    them.
    
    Fix the issue found by Syzkaller [1] by somewhat simplifying the
    endpoint checking process with usb_find_common_endpoints() and
    ensuring that only expected endpoint types are present.
    
    This patch has not been tested on real hardware.
    
    [1] Syzkaller report:
    usb 1-1: BOGUS urb xfer, pipe 1 != type 3
    WARNING: CPU: 0 PID: 781 at drivers/usb/core/urb.c:504 usb_submit_urb+0xc4e/0x18c0 drivers/usb/core/urb.c:503
    ...
    Call Trace:
     <TASK>
     usb_start_wait_urb+0x113/0x520 drivers/usb/core/message.c:59
     vmk80xx_reset_device drivers/comedi/drivers/vmk80xx.c:227 [inline]
     vmk80xx_auto_attach+0xa1c/0x1a40 drivers/comedi/drivers/vmk80xx.c:818
     comedi_auto_config+0x238/0x380 drivers/comedi/drivers.c:1067
     usb_probe_interface+0x5cd/0xb00 drivers/usb/core/driver.c:399
    ...
    
    Similar issue also found by Syzkaller:
    Link: https://syzkaller.appspot.com/bug?extid=5205eb2f17de3e01946e
    
    Reported-and-tested-by: syzbot+5f29dc6a889fc42bd896@syzkaller.appspotmail.com
    Cc: stable <stable@kernel.org>
    Fixes: 49253d542cc0 ("staging: comedi: vmk80xx: factor out usb endpoint detection")
    Reviewed-by: Ian Abbott <abbotti@mev.co.uk>
    Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
    Link: https://lore.kernel.org/r/20240408171633.31649-1-n.zhandarovich@fintech.ru
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu: remove invalid resource->start check v2 [+ + +]
Author: Christian König <christian.koenig@amd.com>
Date:   Fri Mar 15 13:07:53 2024 +0100

    drm/amdgpu: remove invalid resource->start check v2
    
    commit ca7c4507ba87e9fc22e0ecfa819c3664b3e8287b upstream.
    
    The majority of those where removed in the commit aed01a68047b
    ("drm/amdgpu: Remove TTM resource->start visible VRAM condition v2")
    
    But this one was missed because it's working on the resource and not the
    BO. Since we also no longer use a fake start address for visible BOs
    this will now trigger invalid mapping errors.
    
    v2: also remove the unused variable
    
    Signed-off-by: Christian König <christian.koenig@amd.com>
    Fixes: aed01a68047b ("drm/amdgpu: Remove TTM resource->start visible VRAM condition v2")
    CC: stable@vger.kernel.org
    Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amdgpu: validate the parameters of bo mapping operations more clearly [+ + +]
Author: xinhui pan <xinhui.pan@amd.com>
Date:   Thu Apr 11 11:11:38 2024 +0800

    drm/amdgpu: validate the parameters of bo mapping operations more clearly
    
    commit 6fef2d4c00b5b8561ad68dd2b68173f5c6af1e75 upstream.
    
    Verify the parameters of
    amdgpu_vm_bo_(map/replace_map/clearing_mappings) in one common place.
    
    Fixes: dc54d3d1744d ("drm/amdgpu: implement AMDGPU_VA_OP_CLEAR v2")
    Cc: stable@vger.kernel.org
    Reported-by: Vlad Stolyarov <hexed@google.com>
    Suggested-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: xinhui pan <xinhui.pan@amd.com>
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdkfd: Fix memory leak in create_process failure [+ + +]
Author: Felix Kuehling <felix.kuehling@amd.com>
Date:   Wed Apr 10 15:52:10 2024 -0400

    drm/amdkfd: Fix memory leak in create_process failure
    
    commit 18921b205012568b45760753ad3146ddb9e2d4e2 upstream.
    
    Fix memory leak due to a leaked mmget reference on an error handling
    code path that is triggered when attempting to create KFD processes
    while a GPU reset is in progress.
    
    Fixes: 0ab2d7532b05 ("drm/amdkfd: prepare per-process debug enable and disable")
    CC: Xiaogang Chen <xiaogang.chen@amd.com>
    Signed-off-by: Felix Kuehling <felix.kuehling@amd.com>
    Tested-by: Harish Kasiviswanthan <Harish.Kasiviswanthan@amd.com>
    Reviewed-by: Mukul Joshi <mukul.joshi@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/i915/cdclk: Fix voltage_level programming edge case [+ + +]
Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
Date:   Tue Apr 2 18:50:04 2024 +0300

    drm/i915/cdclk: Fix voltage_level programming edge case
    
    [ Upstream commit 6154cc9177ccea00c89ce0bf93352e474b819ff2 ]
    
    Currently we only consider the relationship of the
    old and new CDCLK frequencies when determining whether
    to do the repgramming from intel_set_cdclk_pre_plane_update()
    or intel_set_cdclk_post_plane_update().
    
    It is technically possible to have a situation where the
    CDCLK frequency is decreasing, but the voltage_level is
    increasing due a DDI port. In this case we should bump
    the voltage level already in intel_set_cdclk_pre_plane_update()
    (so that the voltage_level will have been increased by the
    time the port gets enabled), while leaving the CDCLK frequency
    unchanged (as active planes/etc. may still depend on it).
    We can then reduce the CDCLK frequency to its final value
    from intel_set_cdclk_post_plane_update().
    
    In order to handle that correctly we shall construct a
    suitable amalgam of the old and new cdclk states in
    intel_set_cdclk_pre_plane_update().
    
    And we can simply call intel_set_cdclk() unconditionally
    in both places as it will not do anything if nothing actually
    changes vs. the current hw state.
    
    v2: Handle cdclk_state->disable_pipes
    v3: Only synchronize the cd2x update against the pipe's vblank
        when the cdclk frequency is changing during the current
        commit phase (Gustavo)
    
    Cc: stable@vger.kernel.org
    Cc: Gustavo Sousa <gustavo.sousa@intel.com>
    Reviewed-by: Uma Shankar <uma.shankar@intel.com>
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240402155016.13733-3-ville.syrjala@linux.intel.com
    (cherry picked from commit 34d127e2bdef73a923aa0dcd95cbc3257ad5af52)
    Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/panel: visionox-rm69299: don't unregister DSI device [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date:   Thu Apr 4 13:07:59 2024 +0300

    drm/panel: visionox-rm69299: don't unregister DSI device
    
    [ Upstream commit 9e4d3f4f34455abbaa9930bf6b7575a5cd081496 ]
    
    The DSI device for the panel was registered by the DSI host, so it is an
    error to unregister it from the panel driver. Drop the call to
    mipi_dsi_device_unregister().
    
    Fixes: c7f66d32dd43 ("drm/panel: add support for rm69299 visionox panel")
    Reviewed-by: Jessica Zhang <quic_jesszhan@quicinc.com>
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240404-drop-panel-unregister-v1-1-9f56953c5fb9@linaro.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/radeon: make -fstrict-flex-arrays=3 happy [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Sun Apr 14 22:06:08 2024 -0400

    drm/radeon: make -fstrict-flex-arrays=3 happy
    
    [ Upstream commit 0ba753bc7e79e49556e81b0d09b2de1aa558553b ]
    
    The driver parses a union where the layout up through the first
    array is the same, however, the array has different sizes
    depending on the elements in the union.  Be explicit to
    fix the UBSAN checker.
    
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3323
    Fixes: df8fc4e934c1 ("kbuild: Enable -fstrict-flex-arrays=3")
    Acked-by: Christian König <christian.koenig@amd.com>
    Reviewed-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: Kees Cook <keescook@chromium.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/ttm: stop pooling cached NUMA pages v2 [+ + +]
Author: Christian König <ckoenig.leichtzumerken@gmail.com>
Date:   Mon Apr 15 15:48:21 2024 +0200

    drm/ttm: stop pooling cached NUMA pages v2
    
    commit b6976f323a8687cc0d55bc92c2086fd934324ed5 upstream.
    
    We only pool write combined and uncached allocations because they
    require extra overhead on allocation and release.
    
    If we also pool cached NUMA it not only means some extra unnecessary
    overhead, but also that under memory pressure it can happen that
    pages from the wrong NUMA node enters the pool and are re-used
    over and over again.
    
    This can lead to performance reduction after running into memory
    pressure.
    
    v2: restructure and cleanup the code a bit from the internal hack to
        test this.
    
    Signed-off-by: Christian König <christian.koenig@amd.com>
    Fixes: 4482d3c94d7f ("drm/ttm: add NUMA node id to the pool")
    CC: stable@vger.kernel.org
    Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240415134821.1919-1-christian.koenig@amd.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/v3d: Don't increment `enabled_ns` twice [+ + +]
Author: Maíra Canal <mcanal@igalia.com>
Date:   Wed Apr 3 17:24:50 2024 -0300

    drm/v3d: Don't increment `enabled_ns` twice
    
    [ Upstream commit 35f4f8c9fc972248055096d63b782060e473311b ]
    
    The commit 509433d8146c ("drm/v3d: Expose the total GPU usage stats on sysfs")
    introduced the calculation of global GPU stats. For the regards, it used
    the already existing infrastructure provided by commit 09a93cc4f7d1 ("drm/v3d:
    Implement show_fdinfo() callback for GPU usage stats"). While adding
    global GPU stats calculation ability, the author forgot to delete the
    existing one.
    
    Currently, the value of `enabled_ns` is incremented twice by the end of
    the job, when it should be added just once. Therefore, delete the
    leftovers from commit 509433d8146c ("drm/v3d: Expose the total GPU usage
    stats on sysfs").
    
    Fixes: 509433d8146c ("drm/v3d: Expose the total GPU usage stats on sysfs")
    Reported-by: Tvrtko Ursulin <tursulin@igalia.com>
    Signed-off-by: Maíra Canal <mcanal@igalia.com>
    Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
    Reviewed-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240403203517.731876-2-mcanal@igalia.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/vmwgfx: Fix crtc's atomic check conditional [+ + +]
Author: Zack Rusin <zack.rusin@broadcom.com>
Date:   Thu Apr 11 22:55:10 2024 -0400

    drm/vmwgfx: Fix crtc's atomic check conditional
    
    commit a60ccade88f926e871a57176e86a34bbf0db0098 upstream.
    
    The conditional was supposed to prevent enabling of a crtc state
    without a set primary plane. Accidently it also prevented disabling
    crtc state with a set primary plane. Neither is correct.
    
    Fix the conditional and just driver-warn when a crtc state has been
    enabled without a primary plane which will help debug broken userspace.
    
    Fixes IGT's kms_atomic_interruptible and kms_atomic_transition tests.
    
    Signed-off-by: Zack Rusin <zack.rusin@broadcom.com>
    Fixes: 06ec41909e31 ("drm/vmwgfx: Add and connect CRTC helper functions")
    Cc: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com>
    Cc: dri-devel@lists.freedesktop.org
    Cc: <stable@vger.kernel.org> # v4.12+
    Reviewed-by: Ian Forbes <ian.forbes@broadcom.com>
    Reviewed-by: Martin Krastev <martin.krastev@broadcom.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240412025511.78553-5-zack.rusin@broadcom.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/vmwgfx: Fix prime import/export [+ + +]
Author: Zack Rusin <zack.rusin@broadcom.com>
Date:   Thu Apr 11 22:55:09 2024 -0400

    drm/vmwgfx: Fix prime import/export
    
    commit b32233accefff1338806f064fb9b62cf5bc0609f upstream.
    
    vmwgfx never supported prime import of external buffers. Furthermore the
    driver exposes two different objects to userspace: vmw_surface's and
    gem buffers but prime import/export only worked with vmw_surfaces.
    
    Because gem buffers are used through the dumb_buffer interface this meant
    that the driver created buffers couldn't have been prime exported or
    imported.
    
    Fix prime import/export. Makes IGT's kms_prime pass.
    
    Signed-off-by: Zack Rusin <zack.rusin@broadcom.com>
    Fixes: 8afa13a0583f ("drm/vmwgfx: Implement DRIVER_GEM")
    Cc: <stable@vger.kernel.org> # v6.6+
    Reviewed-by: Martin Krastev <martin.krastev@broadcom.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240412025511.78553-4-zack.rusin@broadcom.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/vmwgfx: Sort primary plane formats by order of preference [+ + +]
Author: Zack Rusin <zack.rusin@broadcom.com>
Date:   Thu Apr 11 22:55:11 2024 -0400

    drm/vmwgfx: Sort primary plane formats by order of preference
    
    commit d4c972bff3129a9dd4c22a3999fd8eba1a81531a upstream.
    
    The table of primary plane formats wasn't sorted at all, leading to
    applications picking our least desirable formats by defaults.
    
    Sort the primary plane formats according to our order of preference.
    
    Nice side-effect of this change is that it makes IGT's kms_atomic
    plane-invalid-params pass because the test picks the first format
    which for vmwgfx was DRM_FORMAT_XRGB1555 and uses fb's with odd sizes
    which make Pixman, which IGT depends on assert due to the fact that our
    16bpp formats aren't 32 bit aligned like Pixman requires all formats
    to be.
    
    Signed-off-by: Zack Rusin <zack.rusin@broadcom.com>
    Fixes: 36cc79bc9077 ("drm/vmwgfx: Add universal plane support")
    Cc: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com>
    Cc: dri-devel@lists.freedesktop.org
    Cc: <stable@vger.kernel.org> # v4.12+
    Acked-by: Pekka Paalanen <pekka.paalanen@collabora.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240412025511.78553-6-zack.rusin@broadcom.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/xe: Fix bo leak in intel_fb_bo_framebuffer_init [+ + +]
Author: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Date:   Thu Apr 4 11:03:02 2024 +0200

    drm/xe: Fix bo leak in intel_fb_bo_framebuffer_init
    
    commit 652ead9b746a63e4e79d7ad66d3edf0a8a5b0c2f upstream.
    
    Add a unreference bo in the error path, to prevent leaking a bo ref.
    
    Return 0 on success to clarify the success path.
    
    Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Fixes: 44e694958b95 ("drm/xe/display: Implement display support")
    Cc: <stable@vger.kernel.org> # v6.8+
    Reviewed-by: Nirmoy Das <nirmoy.das@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240404090302.68422-1-maarten.lankhorst@linux.intel.com
    (cherry picked from commit a2f3d731be3893e730417ae3190760fcaffdf549)
    Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm: nv04: Fix out of bounds access [+ + +]
Author: Mikhail Kobuk <m.kobuk@ispras.ru>
Date:   Thu Apr 11 14:08:52 2024 +0300

    drm: nv04: Fix out of bounds access
    
    [ Upstream commit cf92bb778eda7830e79452c6917efa8474a30c1e ]
    
    When Output Resource (dcb->or) value is assigned in
    fabricate_dcb_output(), there may be out of bounds access to
    dac_users array in case dcb->or is zero because ffs(dcb->or) is
    used as index there.
    The 'or' argument of fabricate_dcb_output() must be interpreted as a
    number of bit to set, not value.
    
    Utilize macros from 'enum nouveau_or' in calls instead of hardcoding.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 2e5702aff395 ("drm/nouveau: fabricate DCB encoder table for iMac G4")
    Fixes: 670820c0e6a9 ("drm/nouveau: Workaround incorrect DCB entry on a GeForce3 Ti 200.")
    Signed-off-by: Mikhail Kobuk <m.kobuk@ispras.ru>
    Signed-off-by: Danilo Krummrich <dakr@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240411110854.16701-1-m.kobuk@ispras.ru
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fork: defer linking file vma until vma is fully initialized [+ + +]
Author: Miaohe Lin <linmiaohe@huawei.com>
Date:   Wed Apr 10 17:14:41 2024 +0800

    fork: defer linking file vma until vma is fully initialized
    
    commit 35e351780fa9d8240dd6f7e4f245f9ea37e96c19 upstream.
    
    Thorvald reported a WARNING [1]. And the root cause is below race:
    
     CPU 1                                  CPU 2
     fork                                   hugetlbfs_fallocate
      dup_mmap                               hugetlbfs_punch_hole
       i_mmap_lock_write(mapping);
       vma_interval_tree_insert_after -- Child vma is visible through i_mmap tree.
       i_mmap_unlock_write(mapping);
       hugetlb_dup_vma_private -- Clear vma_lock outside i_mmap_rwsem!
                                             i_mmap_lock_write(mapping);
                                             hugetlb_vmdelete_list
                                              vma_interval_tree_foreach
                                               hugetlb_vma_trylock_write -- Vma_lock is cleared.
       tmp->vm_ops->open -- Alloc new vma_lock outside i_mmap_rwsem!
                                               hugetlb_vma_unlock_write -- Vma_lock is assigned!!!
                                             i_mmap_unlock_write(mapping);
    
    hugetlb_dup_vma_private() and hugetlb_vm_op_open() are called outside
    i_mmap_rwsem lock while vma lock can be used in the same time.  Fix this
    by deferring linking file vma until vma is fully initialized.  Those vmas
    should be initialized first before they can be used.
    
    Link: https://lkml.kernel.org/r/20240410091441.3539905-1-linmiaohe@huawei.com
    Fixes: 8d9bfb260814 ("hugetlb: add vma based lock for pmd sharing")
    Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
    Reported-by: Thorvald Natvig <thorvald@google.com>
    Closes: https://lore.kernel.org/linux-mm/20240129161735.6gmjsswx62o4pbja@revolver/T/ [1]
    Reviewed-by: Jane Chu <jane.chu@oracle.com>
    Cc: Christian Brauner <brauner@kernel.org>
    Cc: Heiko Carstens <hca@linux.ibm.com>
    Cc: Kent Overstreet <kent.overstreet@linux.dev>
    Cc: Liam R. Howlett <Liam.Howlett@oracle.com>
    Cc: Mateusz Guzik <mjguzik@gmail.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Miaohe Lin <linmiaohe@huawei.com>
    Cc: Muchun Song <muchun.song@linux.dev>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Peng Zhang <zhangpeng.00@bytedance.com>
    Cc: Tycho Andersen <tandersen@netflix.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fs: sysfs: Fix reference leak in sysfs_break_active_protection() [+ + +]
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Wed Mar 13 17:43:41 2024 -0400

    fs: sysfs: Fix reference leak in sysfs_break_active_protection()
    
    commit a90bca2228c0646fc29a72689d308e5fe03e6d78 upstream.
    
    The sysfs_break_active_protection() routine has an obvious reference
    leak in its error path.  If the call to kernfs_find_and_get() fails then
    kn will be NULL, so the companion sysfs_unbreak_active_protection()
    routine won't get called (and would only cause an access violation by
    trying to dereference kn->parent if it was called).  As a result, the
    reference to kobj acquired at the start of the function will never be
    released.
    
    Fix the leak by adding an explicit kobject_put() call when kn is NULL.
    
    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    Fixes: 2afc9166f79b ("scsi: sysfs: Introduce sysfs_{un,}break_active_protection()")
    Cc: Bart Van Assche <bvanassche@acm.org>
    Cc: stable@vger.kernel.org
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Acked-by: Tejun Heo <tj@kernel.org>
    Link: https://lore.kernel.org/r/8a4d3f0f-c5e3-4b70-a188-0ca433f9e6f9@rowland.harvard.edu
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fuse: fix leaked ENOSYS error on first statx call [+ + +]
Author: Danny Lin <danny@orbstack.dev>
Date:   Sat Apr 13 17:34:31 2024 -0700

    fuse: fix leaked ENOSYS error on first statx call
    
    commit eb4b691b9115fae4c844f5941418335575cf667f upstream.
    
    FUSE attempts to detect server support for statx by trying it once and
    setting no_statx=1 if it fails with ENOSYS, but consider the following
    scenario:
    
    - Userspace (e.g. sh) calls stat() on a file
      * succeeds
    - Userspace (e.g. lsd) calls statx(BTIME) on the same file
      - request_mask = STATX_BASIC_STATS | STATX_BTIME
      - first pass: sync=true due to differing cache_mask
      - statx fails and returns ENOSYS
      - set no_statx and retry
      - retry sets mask = STATX_BASIC_STATS
      - now mask == cache_mask; sync=false (time_before: still valid)
      - so we take the "else if (stat)" path
      - "err" is still ENOSYS from the failed statx call
    
    Fix this by zeroing "err" before retrying the failed call.
    
    Fixes: d3045530bdd2 ("fuse: implement statx")
    Cc: stable@vger.kernel.org # v6.6
    Signed-off-by: Danny Lin <danny@orbstack.dev>
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
gpiolib: swnode: Remove wrong header inclusion [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Wed Apr 17 17:19:13 2024 +0300

    gpiolib: swnode: Remove wrong header inclusion
    
    [ Upstream commit 69ffed4b62523bbc85511f150500329d28aba356 ]
    
    The flags in the software node properties are supposed to be
    the GPIO lookup flags, which are provided by gpio/machine.h,
    as the software nodes are the kernel internal thing and doesn't
    need to rely to any of ABIs.
    
    Fixes: e7f9ff5dc90c ("gpiolib: add support for software nodes")
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ice: Fix checking for unsupported keys on non-tunnel device [+ + +]
Author: Marcin Szycik <marcin.szycik@linux.intel.com>
Date:   Tue Apr 9 17:45:44 2024 +0200

    ice: Fix checking for unsupported keys on non-tunnel device
    
    [ Upstream commit 2cca35f5dd78b9f8297c879c5db5ab137c5d86c3 ]
    
    Add missing FLOW_DISSECTOR_KEY_ENC_* checks to TC flower filter parsing.
    Without these checks, it would be possible to add filters with tunnel
    options on non-tunnel devices. enc_* options are only valid for tunnel
    devices.
    
    Example:
      devlink dev eswitch set $PF1_PCI mode switchdev
      echo 1 > /sys/class/net/$PF1/device/sriov_numvfs
      tc qdisc add dev $VF1_PR ingress
      ethtool -K $PF1 hw-tc-offload on
      tc filter add dev $VF1_PR ingress flower enc_ttl 12 skip_sw action drop
    
    Fixes: 9e300987d4a8 ("ice: VXLAN and Geneve TC support")
    Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
    Signed-off-by: Marcin Szycik <marcin.szycik@linux.intel.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Tested-by: Sujai Buvaneswaran <sujai.buvaneswaran@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ice: tc: allow zero flags in parsing tc flower [+ + +]
Author: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
Date:   Fri Mar 15 12:08:21 2024 +0100

    ice: tc: allow zero flags in parsing tc flower
    
    [ Upstream commit 73278715725a8347032acf233082ca4eb31e6a56 ]
    
    The check for flags is done to not pass empty lookups to adding switch
    rule functions. Since metadata is always added to lookups there is no
    need to check against the flag.
    
    It is also fixing the problem with such rule:
    $ tc filter add dev gtp_dev ingress protocol ip prio 0 flower \
            enc_dst_port 2123 action drop
    Switch block in case of GTP can't parse the destination port, because it
    should always be set to GTP specific value. The same with ethertype. The
    result is that there is no other matching criteria than GTP tunnel. In
    this case flags is 0, rule can't be added only because of defensive
    check against flags.
    
    Fixes: 9a225f81f540 ("ice: Support GTP-U and GTP-C offload in switchdev")
    Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com>
    Signed-off-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Tested-by: Sujai Buvaneswaran <sujai.buvaneswaran@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ice: tc: check src_vsi in case of traffic from VF [+ + +]
Author: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
Date:   Fri Mar 15 12:08:20 2024 +0100

    ice: tc: check src_vsi in case of traffic from VF
    
    [ Upstream commit 428051600cb4e5a61d81aba3f8009b6c4f5e7582 ]
    
    In case of traffic going from the VF (so ingress for port representor)
    source VSI should be consider during packet classification. It is
    needed for hardware to not match packets from different ports with
    filters added on other port.
    
    It is only for "from VF" traffic, because other traffic direction
    doesn't have source VSI.
    
    Set correct ::src_vsi in rule_info to pass it to the hardware filter.
    
    For example this rule should drop only ipv4 packets from eth10, not from
    the others VF PRs. It is needed to check source VSI in this case.
    $tc filter add dev eth10 ingress protocol ip flower skip_sw action drop
    
    Fixes: 0d08a441fb1a ("ice: ndo_setup_tc implementation for PF")
    Reviewed-by: Jedrzej Jagielski <jedrzej.jagielski@intel.com>
    Reviewed-by: Sridhar Samudrala <sridhar.samudrala@intel.com>
    Signed-off-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Tested-by: Sujai Buvaneswaran <sujai.buvaneswaran@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
init/main.c: Fix potential static_command_line memory overflow [+ + +]
Author: Yuntao Wang <ytcoode@gmail.com>
Date:   Fri Apr 12 16:17:32 2024 +0800

    init/main.c: Fix potential static_command_line memory overflow
    
    commit 46dad3c1e57897ab9228332f03e1c14798d2d3b9 upstream.
    
    We allocate memory of size 'xlen + strlen(boot_command_line) + 1' for
    static_command_line, but the strings copied into static_command_line are
    extra_command_line and command_line, rather than extra_command_line and
    boot_command_line.
    
    When strlen(command_line) > strlen(boot_command_line), static_command_line
    will overflow.
    
    This patch just recovers strlen(command_line) which was miss-consolidated
    with strlen(boot_command_line) in the commit f5c7310ac73e ("init/main: add
    checks for the return value of memblock_alloc*()")
    
    Link: https://lore.kernel.org/all/20240412081733.35925-2-ytcoode@gmail.com/
    
    Fixes: f5c7310ac73e ("init/main: add checks for the return value of memblock_alloc*()")
    Cc: stable@vger.kernel.org
    Signed-off-by: Yuntao Wang <ytcoode@gmail.com>
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
interconnect: Don't access req_list while it's being manipulated [+ + +]
Author: Mike Tipton <quic_mdtipton@quicinc.com>
Date:   Tue Mar 5 14:56:52 2024 -0800

    interconnect: Don't access req_list while it's being manipulated
    
    [ Upstream commit de1bf25b6d771abdb52d43546cf57ad775fb68a1 ]
    
    The icc_lock mutex was split into separate icc_lock and icc_bw_lock
    mutexes in [1] to avoid lockdep splats. However, this didn't adequately
    protect access to icc_node::req_list.
    
    The icc_set_bw() function will eventually iterate over req_list while
    only holding icc_bw_lock, but req_list can be modified while only
    holding icc_lock. This causes races between icc_set_bw(), of_icc_get(),
    and icc_put().
    
    Example A:
    
      CPU0                               CPU1
      ----                               ----
      icc_set_bw(path_a)
        mutex_lock(&icc_bw_lock);
                                         icc_put(path_b)
                                           mutex_lock(&icc_lock);
        aggregate_requests()
          hlist_for_each_entry(r, ...
                                           hlist_del(...
            <r = invalid pointer>
    
    Example B:
    
      CPU0                               CPU1
      ----                               ----
      icc_set_bw(path_a)
        mutex_lock(&icc_bw_lock);
                                         path_b = of_icc_get()
                                           of_icc_get_by_index()
                                             mutex_lock(&icc_lock);
                                             path_find()
                                               path_init()
        aggregate_requests()
          hlist_for_each_entry(r, ...
                                                 hlist_add_head(...
            <r = invalid pointer>
    
    Fix this by ensuring icc_bw_lock is always held before manipulating
    icc_node::req_list. The additional places icc_bw_lock is held don't
    perform any memory allocations, so we should still be safe from the
    original lockdep splats that motivated the separate locks.
    
    [1] commit af42269c3523 ("interconnect: Fix locking for runpm vs reclaim")
    
    Signed-off-by: Mike Tipton <quic_mdtipton@quicinc.com>
    Fixes: af42269c3523 ("interconnect: Fix locking for runpm vs reclaim")
    Reviewed-by: Rob Clark <robdclark@chromium.org>
    Link: https://lore.kernel.org/r/20240305225652.22872-1-quic_mdtipton@quicinc.com
    Signed-off-by: Georgi Djakov <djakov@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

interconnect: qcom: x1e80100: Remove inexistent ACV_PERF BCM [+ + +]
Author: Konrad Dybcio <konrad.dybcio@linaro.org>
Date:   Sat Mar 2 03:22:49 2024 +0100

    interconnect: qcom: x1e80100: Remove inexistent ACV_PERF BCM
    
    [ Upstream commit 59097a2a5ecadb0f025232c665fd11c8ae1e1f58 ]
    
    Booting the kernel on X1E results in a message like:
    
    [    2.561524] qnoc-x1e80100 interconnect-0: ACV_PERF could not find RPMh address
    
    And indeed, taking a look at cmd-db, no such BCM exists. Remove it.
    
    Fixes: 9f196772841e ("interconnect: qcom: Add X1E80100 interconnect provider driver")
    Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
    Reviewed-by: Mike Tipton <quic_mdtipton@quicinc.com>
    Link: https://lore.kernel.org/r/20240302-topic-faux_bcm_x1e-v1-1-c40fab7c4bc5@linaro.org
    Signed-off-by: Georgi Djakov <djakov@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
io_uring: Fix io_cqring_wait() not restoring sigmask on get_timespec64() failure [+ + +]
Author: Alexey Izbyshev <izbyshev@ispras.ru>
Date:   Fri Apr 5 15:55:51 2024 +0300

    io_uring: Fix io_cqring_wait() not restoring sigmask on get_timespec64() failure
    
    Commit 978e5c19dfefc271e5550efba92fcef0d3f62864 upstream.
    
    This bug was introduced in commit 950e79dd7313 ("io_uring: minor
    io_cqring_wait() optimization"), which was made in preparation for
    adc8682ec690 ("io_uring: Add support for napi_busy_poll"). The latter
    got reverted in cb3182167325 ("Revert "io_uring: Add support for
    napi_busy_poll""), so simply undo the former as well.
    
    Cc: stable@vger.kernel.org
    Fixes: 950e79dd7313 ("io_uring: minor io_cqring_wait() optimization")
    Signed-off-by: Alexey Izbyshev <izbyshev@ispras.ru>
    Link: https://lore.kernel.org/r/20240405125551.237142-1-izbyshev@ispras.ru
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
iommufd: Add config needed for iommufd_fail_nth [+ + +]
Author: Muhammad Usama Anjum <usama.anjum@collabora.com>
Date:   Mon Mar 25 14:00:48 2024 +0500

    iommufd: Add config needed for iommufd_fail_nth
    
    [ Upstream commit 2760c51b8040d7cffedc337939e7475a17cc4b19 ]
    
    Add FAULT_INJECTION_DEBUG_FS and FAILSLAB configurations to the kconfig
    fragment for the iommfd selftests. These kconfigs are needed by the
    iommufd_fail_nth test.
    
    Fixes: a9af47e382a4 ("iommufd/selftest: Test IOMMU_HWPT_GET_DIRTY_BITMAP")
    Link: https://lore.kernel.org/r/20240325090048.1423908-1-usama.anjum@collabora.com
    Signed-off-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

iommufd: Add missing IOMMUFD_DRIVER kconfig for the selftest [+ + +]
Author: Jason Gunthorpe <jgg@ziepe.ca>
Date:   Thu Apr 4 21:05:14 2024 -0300

    iommufd: Add missing IOMMUFD_DRIVER kconfig for the selftest
    
    [ Upstream commit 8541323285994528ad5be2c1bdc759e6c83b936e ]
    
    Some kconfigs don't automatically include this symbol which results in sub
    functions for some of the dirty tracking related things that are
    non-functional. Thus the test suite will fail. select IOMMUFD_DRIVER in
    the IOMMUFD_TEST kconfig to fix it.
    
    Fixes: a9af47e382a4 ("iommufd/selftest: Test IOMMU_HWPT_GET_DIRTY_BITMAP")
    Link: https://lore.kernel.org/r/20240327182050.GA1363414@ziepe.ca
    Tested-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ksmbd: clear RENAME_NOREPLACE before calling vfs_rename [+ + +]
Author: Marios Makassikis <mmakassikis@freebox.fr>
Date:   Mon Apr 15 15:12:48 2024 +0200

    ksmbd: clear RENAME_NOREPLACE before calling vfs_rename
    
    commit 4973b04d3ea577db80c501c5f14e68ec69fe1794 upstream.
    
    File overwrite case is explicitly handled, so it is not necessary to
    pass RENAME_NOREPLACE to vfs_rename.
    
    Clearing the flag fixes rename operations when the share is a ntfs-3g
    mount. The latter uses an older version of fuse with no support for
    flags in the ->rename op.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Marios Makassikis <mmakassikis@freebox.fr>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ksmbd: common: use struct_group_attr instead of struct_group for network_open_info [+ + +]
Author: Namjae Jeon <linkinjeon@kernel.org>
Date:   Fri Apr 19 23:46:34 2024 +0900

    ksmbd: common: use struct_group_attr instead of struct_group for network_open_info
    
    commit 0268a7cc7fdc47d90b6c18859de7718d5059f6f1 upstream.
    
    4byte padding cause the connection issue with the applications of MacOS.
    smb2_close response size increases by 4 bytes by padding, And the smb
    client of MacOS check it and stop the connection. This patch use
    struct_group_attr instead of struct_group for network_open_info to use
     __packed to avoid padding.
    
    Fixes: 0015eb6e1238 ("smb: client, common: fix fortify warnings")
    Cc: stable@vger.kernel.org
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ksmbd: fix slab-out-of-bounds in smb2_allocate_rsp_buf [+ + +]
Author: Namjae Jeon <linkinjeon@kernel.org>
Date:   Thu Apr 11 23:02:15 2024 +0900

    ksmbd: fix slab-out-of-bounds in smb2_allocate_rsp_buf
    
    commit c119f4ede3fa90a9463f50831761c28f989bfb20 upstream.
    
    If ->ProtocolId is SMB2_TRANSFORM_PROTO_NUM, smb2 request size
    validation could be skipped. if request size is smaller than
    sizeof(struct smb2_query_info_req), slab-out-of-bounds read can happen in
    smb2_allocate_rsp_buf(). This patch allocate response buffer after
    decrypting transform request. smb3_decrypt_req() will validate transform
    request size and avoid slab-out-of-bound in smb2_allocate_rsp_buf().
    
    Reported-by: Norbert Szetei <norbert@doyensec.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ksmbd: validate request buffer size in smb2_allocate_rsp_buf() [+ + +]
Author: Namjae Jeon <linkinjeon@kernel.org>
Date:   Fri Apr 12 09:45:00 2024 +0900

    ksmbd: validate request buffer size in smb2_allocate_rsp_buf()
    
    commit 17cf0c2794bdb6f39671265aa18aea5c22ee8c4a upstream.
    
    The response buffer should be allocated in smb2_allocate_rsp_buf
    before validating request. But the fields in payload as well as smb2 header
    is used in smb2_allocate_rsp_buf(). This patch add simple buffer size
    validation to avoid potencial out-of-bounds in request buffer.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
KVM: x86/mmu: Write-protect L2 SPTEs in TDP MMU when clearing dirty status [+ + +]
Author: David Matlack <dmatlack@google.com>
Date:   Fri Mar 15 16:05:38 2024 -0700

    KVM: x86/mmu: Write-protect L2 SPTEs in TDP MMU when clearing dirty status
    
    commit 2673dfb591a359c75080dd5af3da484b89320d22 upstream.
    
    Check kvm_mmu_page_ad_need_write_protect() when deciding whether to
    write-protect or clear D-bits on TDP MMU SPTEs, so that the TDP MMU
    accounts for any role-specific reasons for disabling D-bit dirty logging.
    
    Specifically, TDP MMU SPTEs must be write-protected when the TDP MMU is
    being used to run an L2 (i.e. L1 has disabled EPT) and PML is enabled.
    KVM always disables PML when running L2, even when L1 and L2 GPAs are in
    the some domain, so failing to write-protect TDP MMU SPTEs will cause
    writes made by L2 to not be reflected in the dirty log.
    
    Reported-by: syzbot+900d58a45dcaab9e4821@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=900d58a45dcaab9e4821
    Fixes: 5982a5392663 ("KVM: x86/mmu: Use kvm_ad_enabled() to determine if TDP MMU SPTEs need wrprot")
    Cc: stable@vger.kernel.org
    Cc: Vipin Sharma <vipinsh@google.com>
    Cc: Sean Christopherson <seanjc@google.com>
    Signed-off-by: David Matlack <dmatlack@google.com>
    Link: https://lore.kernel.org/r/20240315230541.1635322-2-dmatlack@google.com
    [sean: massage shortlog and changelog, tweak ternary op formatting]
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: x86/mmu: x86: Don't overflow lpage_info when checking attributes [+ + +]
Author: Rick Edgecombe <rick.p.edgecombe@intel.com>
Date:   Thu Mar 14 14:29:02 2024 -0700

    KVM: x86/mmu: x86: Don't overflow lpage_info when checking attributes
    
    commit 992b54bd083c5bee24ff7cc35991388ab08598c4 upstream.
    
    Fix KVM_SET_MEMORY_ATTRIBUTES to not overflow lpage_info array and trigger
    KASAN splat, as seen in the private_mem_conversions_test selftest.
    
    When memory attributes are set on a GFN range, that range will have
    specific properties applied to the TDP. A huge page cannot be used when
    the attributes are inconsistent, so they are disabled for those the
    specific huge pages. For internal KVM reasons, huge pages are also not
    allowed to span adjacent memslots regardless of whether the backing memory
    could be mapped as huge.
    
    What GFNs support which huge page sizes is tracked by an array of arrays
    'lpage_info' on the memslot, of ‘kvm_lpage_info’ structs. Each index of
    lpage_info contains a vmalloc allocated array of these for a specific
    supported page size. The kvm_lpage_info denotes whether a specific huge
    page (GFN and page size) on the memslot is supported. These arrays include
    indices for unaligned head and tail huge pages.
    
    Preventing huge pages from spanning adjacent memslot is covered by
    incrementing the count in head and tail kvm_lpage_info when the memslot is
    allocated, but disallowing huge pages for memory that has mixed attributes
    has to be done in a more complicated way. During the
    KVM_SET_MEMORY_ATTRIBUTES ioctl KVM updates lpage_info for each memslot in
    the range that has mismatched attributes. KVM does this a memslot at a
    time, and marks a special bit, KVM_LPAGE_MIXED_FLAG, in the kvm_lpage_info
    for any huge page. This bit is essentially a permanently elevated count.
    So huge pages will not be mapped for the GFN at that page size if the
    count is elevated in either case: a huge head or tail page unaligned to
    the memslot or if KVM_LPAGE_MIXED_FLAG is set because it has mixed
    attributes.
    
    To determine whether a huge page has consistent attributes, the
    KVM_SET_MEMORY_ATTRIBUTES operation checks an xarray to make sure it
    consistently has the incoming attribute. Since level - 1 huge pages are
    aligned to level huge pages, it employs an optimization. As long as the
    level - 1 huge pages are checked first, it can just check these and assume
    that if each level - 1 huge page contained within the level sized huge
    page is not mixed, then the level size huge page is not mixed. This
    optimization happens in the helper hugepage_has_attrs().
    
    Unfortunately, although the kvm_lpage_info array representing page size
    'level' will contain an entry for an unaligned tail page of size level,
    the array for level - 1  will not contain an entry for each GFN at page
    size level. The level - 1 array will only contain an index for any
    unaligned region covered by level - 1 huge page size, which can be a
    smaller region. So this causes the optimization to overflow the level - 1
    kvm_lpage_info and perform a vmalloc out of bounds read.
    
    In some cases of head and tail pages where an overflow could happen,
    callers skip the operation completely as KVM_LPAGE_MIXED_FLAG is not
    required to prevent huge pages as discussed earlier. But for memslots that
    are smaller than the 1GB page size, it does call hugepage_has_attrs(). In
    this case the huge page is both the head and tail page. The issue can be
    observed simply by compiling the kernel with CONFIG_KASAN_VMALLOC and
    running the selftest “private_mem_conversions_testâ€, which produces the
    output like the following:
    
    BUG: KASAN: vmalloc-out-of-bounds in hugepage_has_attrs+0x7e/0x110
    Read of size 4 at addr ffffc900000a3008 by task private_mem_con/169
    Call Trace:
      dump_stack_lvl
      print_report
      ? __virt_addr_valid
      ? hugepage_has_attrs
      ? hugepage_has_attrs
      kasan_report
      ? hugepage_has_attrs
      hugepage_has_attrs
      kvm_arch_post_set_memory_attributes
      kvm_vm_ioctl
    
    It is a little ambiguous whether the unaligned head page (in the bug case
    also the tail page) should be expected to have KVM_LPAGE_MIXED_FLAG set.
    It is not functionally required, as the unaligned head/tail pages will
    already have their kvm_lpage_info count incremented. The comments imply
    not setting it on unaligned head pages is intentional, so fix the callers
    to skip trying to set KVM_LPAGE_MIXED_FLAG in this case, and in doing so
    not call hugepage_has_attrs().
    
    Cc: stable@vger.kernel.org
    Fixes: 90b4fe17981e ("KVM: x86: Disallow hugepages when memory attributes are mixed")
    Signed-off-by: Rick Edgecombe <rick.p.edgecombe@intel.com>
    Reviewed-by: Kai Huang <kai.huang@intel.com>
    Reviewed-by: Chao Peng <chao.p.peng@linux.intel.com>
    Link: https://lore.kernel.org/r/20240314212902.2762507-1-rick.p.edgecombe@intel.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: x86/pmu: Disable support for adaptive PEBS [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Wed Mar 6 16:58:33 2024 -0800

    KVM: x86/pmu: Disable support for adaptive PEBS
    
    commit 9e985cbf2942a1bb8fcef9adc2a17d90fd7ca8ee upstream.
    
    Drop support for virtualizing adaptive PEBS, as KVM's implementation is
    architecturally broken without an obvious/easy path forward, and because
    exposing adaptive PEBS can leak host LBRs to the guest, i.e. can leak
    host kernel addresses to the guest.
    
    Bug #1 is that KVM doesn't account for the upper 32 bits of
    IA32_FIXED_CTR_CTRL when (re)programming fixed counters, e.g
    fixed_ctrl_field() drops the upper bits, reprogram_fixed_counters()
    stores local variables as u8s and truncates the upper bits too, etc.
    
    Bug #2 is that, because KVM _always_ sets precise_ip to a non-zero value
    for PEBS events, perf will _always_ generate an adaptive record, even if
    the guest requested a basic record.  Note, KVM will also enable adaptive
    PEBS in individual *counter*, even if adaptive PEBS isn't exposed to the
    guest, but this is benign as MSR_PEBS_DATA_CFG is guaranteed to be zero,
    i.e. the guest will only ever see Basic records.
    
    Bug #3 is in perf.  intel_pmu_disable_fixed() doesn't clear the upper
    bits either, i.e. leaves ICL_FIXED_0_ADAPTIVE set, and
    intel_pmu_enable_fixed() effectively doesn't clear ICL_FIXED_0_ADAPTIVE
    either.  I.e. perf _always_ enables ADAPTIVE counters, regardless of what
    KVM requests.
    
    Bug #4 is that adaptive PEBS *might* effectively bypass event filters set
    by the host, as "Updated Memory Access Info Group" records information
    that might be disallowed by userspace via KVM_SET_PMU_EVENT_FILTER.
    
    Bug #5 is that KVM doesn't ensure LBR MSRs hold guest values (or at least
    zeros) when entering a vCPU with adaptive PEBS, which allows the guest
    to read host LBRs, i.e. host RIPs/addresses, by enabling "LBR Entries"
    records.
    
    Disable adaptive PEBS support as an immediate fix due to the severity of
    the LBR leak in particular, and because fixing all of the bugs will be
    non-trivial, e.g. not suitable for backporting to stable kernels.
    
    Note!  This will break live migration, but trying to make KVM play nice
    with live migration would be quite complicated, wouldn't be guaranteed to
    work (i.e. KVM might still kill/confuse the guest), and it's not clear
    that there are any publicly available VMMs that support adaptive PEBS,
    let alone live migrate VMs that support adaptive PEBS, e.g. QEMU doesn't
    support PEBS in any capacity.
    
    Link: https://lore.kernel.org/all/20240306230153.786365-1-seanjc@google.com
    Link: https://lore.kernel.org/all/ZeepGjHCeSfadANM@google.com
    Fixes: c59a1f106f5c ("KVM: x86/pmu: Add IA32_PEBS_ENABLE MSR emulation for extended PEBS")
    Cc: stable@vger.kernel.org
    Cc: Like Xu <like.xu.linux@gmail.com>
    Cc: Mingwei Zhang <mizhang@google.com>
    Cc: Zhenyu Wang <zhenyuw@linux.intel.com>
    Cc: Zhang Xiong <xiong.y.zhang@intel.com>
    Cc: Lv Zhiyuan <zhiyuan.lv@intel.com>
    Cc: Dapeng Mi <dapeng1.mi@intel.com>
    Cc: Jim Mattson <jmattson@google.com>
    Acked-by: Like Xu <likexu@tencent.com>
    Link: https://lore.kernel.org/r/20240307005833.827147-1-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: x86/pmu: Do not mask LVTPC when handling a PMI on AMD platforms [+ + +]
Author: Sandipan Das <sandipan.das@amd.com>
Date:   Fri Apr 5 16:55:55 2024 -0700

    KVM: x86/pmu: Do not mask LVTPC when handling a PMI on AMD platforms
    
    commit 49ff3b4aec51e3abfc9369997cc603319b02af9a upstream.
    
    On AMD and Hygon platforms, the local APIC does not automatically set
    the mask bit of the LVTPC register when handling a PMI and there is
    no need to clear it in the kernel's PMI handler.
    
    For guests, the mask bit is currently set by kvm_apic_local_deliver()
    and unless it is cleared by the guest kernel's PMI handler, PMIs stop
    arriving and break use-cases like sampling with perf record.
    
    This does not affect non-PerfMonV2 guests because PMIs are handled in
    the guest kernel by x86_pmu_handle_irq() which always clears the LVTPC
    mask bit irrespective of the vendor.
    
    Before:
    
      $ perf record -e cycles:u true
      [ perf record: Woken up 1 times to write data ]
      [ perf record: Captured and wrote 0.001 MB perf.data (1 samples) ]
    
    After:
    
      $ perf record -e cycles:u true
      [ perf record: Woken up 1 times to write data ]
      [ perf record: Captured and wrote 0.002 MB perf.data (19 samples) ]
    
    Fixes: a16eb25b09c0 ("KVM: x86: Mask LVTPC when handling a PMI")
    Cc: stable@vger.kernel.org
    Signed-off-by: Sandipan Das <sandipan.das@amd.com>
    Reviewed-by: Jim Mattson <jmattson@google.com>
    [sean: use is_intel_compatible instead of !is_amd_or_hygon()]
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Message-ID: <20240405235603.1173076-3-seanjc@google.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: x86: Snapshot if a vCPU's vendor model is AMD vs. Intel compatible [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Fri Apr 5 16:55:54 2024 -0700

    KVM: x86: Snapshot if a vCPU's vendor model is AMD vs. Intel compatible
    
    commit fd706c9b1674e2858766bfbf7430534c2b26fbef upstream.
    
    Add kvm_vcpu_arch.is_amd_compatible to cache if a vCPU's vendor model is
    compatible with AMD, i.e. if the vCPU vendor is AMD or Hygon, along with
    helpers to check if a vCPU is compatible AMD vs. Intel.  To handle Intel
    vs. AMD behavior related to masking the LVTPC entry, KVM will need to
    check for vendor compatibility on every PMI injection, i.e. querying for
    AMD will soon be a moderately hot path.
    
    Note!  This subtly (or maybe not-so-subtly) makes "Intel compatible" KVM's
    default behavior, both if userspace omits (or never sets) CPUID 0x0 and if
    userspace sets a completely unknown vendor.  One could argue that KVM
    should treat such vCPUs as not being compatible with Intel *or* AMD, but
    that would add useless complexity to KVM.
    
    KVM needs to do *something* in the face of vendor specific behavior, and
    so unless KVM conjured up a magic third option, choosing to treat unknown
    vendors as neither Intel nor AMD means that checks on AMD compatibility
    would yield Intel behavior, and checks for Intel compatibility would yield
    AMD behavior.  And that's far worse as it would effectively yield random
    behavior depending on whether KVM checked for AMD vs. Intel vs. !AMD vs.
    !Intel.  And practically speaking, all x86 CPUs follow either Intel or AMD
    architecture, i.e. "supporting" an unknown third architecture adds no
    value.
    
    Deliberately don't convert any of the existing guest_cpuid_is_intel()
    checks, as the Intel side of things is messier due to some flows explicitly
    checking for exactly vendor==Intel, versus some flows assuming anything
    that isn't "AMD compatible" gets Intel behavior.  The Intel code will be
    cleaned up in the future.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Message-ID: <20240405235603.1173076-2-seanjc@google.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: Linux 6.8.8 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Sat Apr 27 17:13:05 2024 +0200

    Linux 6.8.8
    
    Link: https://lore.kernel.org/r/20240423213855.824778126@linuxfoundation.org
    Tested-by: SeongJae Park <sj@kernel.org>
    Tested-by: Bagas Sanjaya <bagasdotme@gmail.com>
    Tested-by: Pavel Machek (CIP) <pavel@denx.de>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Ronald Warsow <rwarsow@gmx.de>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Tested-by: kernelci.org bot <bot@kernelci.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mei: me: disable RPL-S on SPS and IGN firmwares [+ + +]
Author: Alexander Usyskin <alexander.usyskin@intel.com>
Date:   Tue Mar 12 07:19:58 2024 +0200

    mei: me: disable RPL-S on SPS and IGN firmwares
    
    commit 0dc04112bee6fdd6eb847ccb32214703022c0269 upstream.
    
    Extend the quirk to disable MEI interface on Intel PCH Ignition (IGN)
    and SPS firmwares for RPL-S devices. These firmwares do not support
    the MEI protocol.
    
    Fixes: 3ed8c7d39cfe ("mei: me: add raptor lake point S DID")
    Cc: stable@vger.kernel.org
    Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com>
    Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
    Link: https://lore.kernel.org/r/20240312051958.118478-1-tomas.winkler@intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mei: vsc: Unregister interrupt handler for system suspend [+ + +]
Author: Sakari Ailus <sakari.ailus@linux.intel.com>
Date:   Wed Apr 3 13:13:41 2024 +0800

    mei: vsc: Unregister interrupt handler for system suspend
    
    commit f6085a96c97387154be7eaebd1a5420eb3cd55dc upstream.
    
    Unregister the MEI VSC interrupt handler before system suspend and
    re-register it at system resume time. This mirrors implementation of other
    MEI devices.
    
    This patch fixes the bug that causes continuous stream of MEI VSC errors
    after system resume.
    
    Fixes: 386a766c4169 ("mei: Add MEI hardware support for IVSC device")
    Cc: stable@vger.kernel.org # for 6.8
    Reported-by: Dominik Brodowski <linux@dominikbrodowski.net>
    Signed-off-by: Wentong Wu <wentong.wu@intel.com>
    Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Acked-by: Tomas Winkler <tomas.winkler@intel.com>
    Link: https://lore.kernel.org/r/20240403051341.3534650-2-wentong.wu@intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
misc: rtsx: Fix rts5264 driver status incorrect when card removed [+ + +]
Author: Ricky Wu <ricky_wu@realtek.com>
Date:   Thu Mar 14 14:51:13 2024 +0800

    misc: rtsx: Fix rts5264 driver status incorrect when card removed
    
    commit 26ac2df47d4c58f17210b7a59037e40f7eca693e upstream.
    
    rts5264 driver not clean express link error and set EXTRA_CAPS_SD_EXPRESS
    capability back when card removed
    
    Fixes: 6a511c9b3a0d ("misc: rtsx: add to support new card reader rts5264")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Ricky Wu <ricky_wu@realtek.com>
    Link: https://lore.kernel.org/r/20240314065113.5962-1-ricky_wu@realtek.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm,swapops: update check in is_pfn_swap_entry for hwpoison entries [+ + +]
Author: Oscar Salvador <osalvador@suse.de>
Date:   Sun Apr 7 15:05:37 2024 +0200

    mm,swapops: update check in is_pfn_swap_entry for hwpoison entries
    
    commit 07a57a338adb6ec9e766d6a6790f76527f45ceb5 upstream.
    
    Tony reported that the Machine check recovery was broken in v6.9-rc1, as
    he was hitting a VM_BUG_ON when injecting uncorrectable memory errors to
    DRAM.
    
    After some more digging and debugging on his side, he realized that this
    went back to v6.1, with the introduction of 'commit 0d206b5d2e0d
    ("mm/swap: add swp_offset_pfn() to fetch PFN from swap entry")'.  That
    commit, among other things, introduced swp_offset_pfn(), replacing
    hwpoison_entry_to_pfn() in its favour.
    
    The patch also introduced a VM_BUG_ON() check for is_pfn_swap_entry(), but
    is_pfn_swap_entry() never got updated to cover hwpoison entries, which
    means that we would hit the VM_BUG_ON whenever we would call
    swp_offset_pfn() for such entries on environments with CONFIG_DEBUG_VM
    set.  Fix this by updating the check to cover hwpoison entries as well,
    and update the comment while we are it.
    
    Link: https://lkml.kernel.org/r/20240407130537.16977-1-osalvador@suse.de
    Fixes: 0d206b5d2e0d ("mm/swap: add swp_offset_pfn() to fetch PFN from swap entry")
    Signed-off-by: Oscar Salvador <osalvador@suse.de>
    Reported-by: Tony Luck <tony.luck@intel.com>
    Closes: https://lore.kernel.org/all/Zg8kLSl2yAlA3o5D@agluck-desk3/
    Tested-by: Tony Luck <tony.luck@intel.com>
    Reviewed-by: Peter Xu <peterx@redhat.com>
    Reviewed-by: David Hildenbrand <david@redhat.com>
    Acked-by: Miaohe Lin <linmiaohe@huawei.com>
    Cc: <stable@vger.kernel.org>    [6.1.x]
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/madvise: make MADV_POPULATE_(READ|WRITE) handle VM_FAULT_RETRY properly [+ + +]
Author: David Hildenbrand <david@redhat.com>
Date:   Thu Mar 14 17:12:59 2024 +0100

    mm/madvise: make MADV_POPULATE_(READ|WRITE) handle VM_FAULT_RETRY properly
    
    commit 631426ba1d45a8672b177ee85ad4cabe760dd131 upstream.
    
    Darrick reports that in some cases where pread() would fail with -EIO and
    mmap()+access would generate a SIGBUS signal, MADV_POPULATE_READ /
    MADV_POPULATE_WRITE will keep retrying forever and not fail with -EFAULT.
    
    While the madvise() call can be interrupted by a signal, this is not the
    desired behavior.  MADV_POPULATE_READ / MADV_POPULATE_WRITE should behave
    like page faults in that case: fail and not retry forever.
    
    A reproducer can be found at [1].
    
    The reason is that __get_user_pages(), as called by
    faultin_vma_page_range(), will not handle VM_FAULT_RETRY in a proper way:
    it will simply return 0 when VM_FAULT_RETRY happened, making
    madvise_populate()->faultin_vma_page_range() retry again and again, never
    setting FOLL_TRIED->FAULT_FLAG_TRIED for __get_user_pages().
    
    __get_user_pages_locked() does what we want, but duplicating that logic in
    faultin_vma_page_range() feels wrong.
    
    So let's use __get_user_pages_locked() instead, that will detect
    VM_FAULT_RETRY and set FOLL_TRIED when retrying, making the fault handler
    return VM_FAULT_SIGBUS (VM_FAULT_ERROR) at some point, propagating -EFAULT
    from faultin_page() to __get_user_pages(), all the way to
    madvise_populate().
    
    But, there is an issue: __get_user_pages_locked() will end up re-taking
    the MM lock and then __get_user_pages() will do another VMA lookup.  In
    the meantime, the VMA layout could have changed and we'd fail with
    different error codes than we'd want to.
    
    As __get_user_pages() will currently do a new VMA lookup either way, let
    it do the VMA handling in a different way, controlled by a new
    FOLL_MADV_POPULATE flag, effectively moving these checks from
    madvise_populate() + faultin_page_range() in there.
    
    With this change, Darricks reproducer properly fails with -EFAULT, as
    documented for MADV_POPULATE_READ / MADV_POPULATE_WRITE.
    
    [1] https://lore.kernel.org/all/20240313171936.GN1927156@frogsfrogsfrogs/
    
    Link: https://lkml.kernel.org/r/20240314161300.382526-1-david@redhat.com
    Link: https://lkml.kernel.org/r/20240314161300.382526-2-david@redhat.com
    Fixes: 4ca9b3859dac ("mm/madvise: introduce MADV_POPULATE_(READ|WRITE) to prefault page tables")
    Signed-off-by: David Hildenbrand <david@redhat.com>
    Reported-by: Darrick J. Wong <djwong@kernel.org>
    Closes: https://lore.kernel.org/all/20240311223815.GW1927156@frogsfrogsfrogs/
    Cc: Darrick J. Wong <djwong@kernel.org>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Jason Gunthorpe <jgg@nvidia.com>
    Cc: John Hubbard <jhubbard@nvidia.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/memory-failure: fix deadlock when hugetlb_optimize_vmemmap is enabled [+ + +]
Author: Miaohe Lin <linmiaohe@huawei.com>
Date:   Sun Apr 7 16:54:56 2024 +0800

    mm/memory-failure: fix deadlock when hugetlb_optimize_vmemmap is enabled
    
    commit 1983184c22dd84a4d95a71e5c6775c2638557dc7 upstream.
    
    When I did hard offline test with hugetlb pages, below deadlock occurs:
    
    ======================================================
    WARNING: possible circular locking dependency detected
    6.8.0-11409-gf6cef5f8c37f #1 Not tainted
    ------------------------------------------------------
    bash/46904 is trying to acquire lock:
    ffffffffabe68910 (cpu_hotplug_lock){++++}-{0:0}, at: static_key_slow_dec+0x16/0x60
    
    but task is already holding lock:
    ffffffffabf92ea8 (pcp_batch_high_lock){+.+.}-{3:3}, at: zone_pcp_disable+0x16/0x40
    
    which lock already depends on the new lock.
    
    the existing dependency chain (in reverse order) is:
    
    -> #1 (pcp_batch_high_lock){+.+.}-{3:3}:
           __mutex_lock+0x6c/0x770
           page_alloc_cpu_online+0x3c/0x70
           cpuhp_invoke_callback+0x397/0x5f0
           __cpuhp_invoke_callback_range+0x71/0xe0
           _cpu_up+0xeb/0x210
           cpu_up+0x91/0xe0
           cpuhp_bringup_mask+0x49/0xb0
           bringup_nonboot_cpus+0xb7/0xe0
           smp_init+0x25/0xa0
           kernel_init_freeable+0x15f/0x3e0
           kernel_init+0x15/0x1b0
           ret_from_fork+0x2f/0x50
           ret_from_fork_asm+0x1a/0x30
    
    -> #0 (cpu_hotplug_lock){++++}-{0:0}:
           __lock_acquire+0x1298/0x1cd0
           lock_acquire+0xc0/0x2b0
           cpus_read_lock+0x2a/0xc0
           static_key_slow_dec+0x16/0x60
           __hugetlb_vmemmap_restore_folio+0x1b9/0x200
           dissolve_free_huge_page+0x211/0x260
           __page_handle_poison+0x45/0xc0
           memory_failure+0x65e/0xc70
           hard_offline_page_store+0x55/0xa0
           kernfs_fop_write_iter+0x12c/0x1d0
           vfs_write+0x387/0x550
           ksys_write+0x64/0xe0
           do_syscall_64+0xca/0x1e0
           entry_SYSCALL_64_after_hwframe+0x6d/0x75
    
    other info that might help us debug this:
    
     Possible unsafe locking scenario:
    
           CPU0                    CPU1
           ----                    ----
      lock(pcp_batch_high_lock);
                                   lock(cpu_hotplug_lock);
                                   lock(pcp_batch_high_lock);
      rlock(cpu_hotplug_lock);
    
     *** DEADLOCK ***
    
    5 locks held by bash/46904:
     #0: ffff98f6c3bb23f0 (sb_writers#5){.+.+}-{0:0}, at: ksys_write+0x64/0xe0
     #1: ffff98f6c328e488 (&of->mutex){+.+.}-{3:3}, at: kernfs_fop_write_iter+0xf8/0x1d0
     #2: ffff98ef83b31890 (kn->active#113){.+.+}-{0:0}, at: kernfs_fop_write_iter+0x100/0x1d0
     #3: ffffffffabf9db48 (mf_mutex){+.+.}-{3:3}, at: memory_failure+0x44/0xc70
     #4: ffffffffabf92ea8 (pcp_batch_high_lock){+.+.}-{3:3}, at: zone_pcp_disable+0x16/0x40
    
    stack backtrace:
    CPU: 10 PID: 46904 Comm: bash Kdump: loaded Not tainted 6.8.0-11409-gf6cef5f8c37f #1
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
    Call Trace:
     <TASK>
     dump_stack_lvl+0x68/0xa0
     check_noncircular+0x129/0x140
     __lock_acquire+0x1298/0x1cd0
     lock_acquire+0xc0/0x2b0
     cpus_read_lock+0x2a/0xc0
     static_key_slow_dec+0x16/0x60
     __hugetlb_vmemmap_restore_folio+0x1b9/0x200
     dissolve_free_huge_page+0x211/0x260
     __page_handle_poison+0x45/0xc0
     memory_failure+0x65e/0xc70
     hard_offline_page_store+0x55/0xa0
     kernfs_fop_write_iter+0x12c/0x1d0
     vfs_write+0x387/0x550
     ksys_write+0x64/0xe0
     do_syscall_64+0xca/0x1e0
     entry_SYSCALL_64_after_hwframe+0x6d/0x75
    RIP: 0033:0x7fc862314887
    Code: 10 00 f7 d8 64 89 02 48 c7 c0 ff ff ff ff eb b7 0f 1f 00 f3 0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 b8 01 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 51 c3 48 83 ec 28 48 89 54 24 18 48 89 74 24
    RSP: 002b:00007fff19311268 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
    RAX: ffffffffffffffda RBX: 000000000000000c RCX: 00007fc862314887
    RDX: 000000000000000c RSI: 000056405645fe10 RDI: 0000000000000001
    RBP: 000056405645fe10 R08: 00007fc8623d1460 R09: 000000007fffffff
    R10: 0000000000000000 R11: 0000000000000246 R12: 000000000000000c
    R13: 00007fc86241b780 R14: 00007fc862417600 R15: 00007fc862416a00
    
    In short, below scene breaks the lock dependency chain:
    
     memory_failure
      __page_handle_poison
       zone_pcp_disable -- lock(pcp_batch_high_lock)
       dissolve_free_huge_page
        __hugetlb_vmemmap_restore_folio
         static_key_slow_dec
          cpus_read_lock -- rlock(cpu_hotplug_lock)
    
    Fix this by calling drain_all_pages() instead.
    
    This issue won't occur until commit a6b40850c442 ("mm: hugetlb: replace
    hugetlb_free_vmemmap_enabled with a static_key").  As it introduced
    rlock(cpu_hotplug_lock) in dissolve_free_huge_page() code path while
    lock(pcp_batch_high_lock) is already in the __page_handle_poison().
    
    [linmiaohe@huawei.com: extend comment per Oscar]
    [akpm@linux-foundation.org: reflow block comment]
    Link: https://lkml.kernel.org/r/20240407085456.2798193-1-linmiaohe@huawei.com
    Fixes: a6b40850c442 ("mm: hugetlb: replace hugetlb_free_vmemmap_enabled with a static_key")
    Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
    Acked-by: Oscar Salvador <osalvador@suse.de>
    Reviewed-by: Jane Chu <jane.chu@oracle.com>
    Cc: Naoya Horiguchi <nao.horiguchi@gmail.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/shmem: inline shmem_is_huge() for disabled transparent hugepages [+ + +]
Author: Sumanth Korikkar <sumanthk@linux.ibm.com>
Date:   Tue Apr 9 17:54:07 2024 +0200

    mm/shmem: inline shmem_is_huge() for disabled transparent hugepages
    
    commit 1f737846aa3c45f07a06fa0d018b39e1afb8084a upstream.
    
    In order to  minimize code size (CONFIG_CC_OPTIMIZE_FOR_SIZE=y),
    compiler might choose to make a regular function call (out-of-line) for
    shmem_is_huge() instead of inlining it. When transparent hugepages are
    disabled (CONFIG_TRANSPARENT_HUGEPAGE=n), it can cause compilation
    error.
    
    mm/shmem.c: In function `shmem_getattr':
    ./include/linux/huge_mm.h:383:27: note: in expansion of macro `BUILD_BUG'
      383 | #define HPAGE_PMD_SIZE ({ BUILD_BUG(); 0; })
          |                           ^~~~~~~~~
    mm/shmem.c:1148:33: note: in expansion of macro `HPAGE_PMD_SIZE'
     1148 |                 stat->blksize = HPAGE_PMD_SIZE;
    
    To prevent the possible error, always inline shmem_is_huge() when
    transparent hugepages are disabled.
    
    Link: https://lkml.kernel.org/r/20240409155407.2322714-1-sumanthk@linux.ibm.com
    Signed-off-by: Sumanth Korikkar <sumanthk@linux.ibm.com>
    Acked-by: David Hildenbrand <david@redhat.com>
    Cc: Alexander Gordeev <agordeev@linux.ibm.com>
    Cc: Heiko Carstens <hca@linux.ibm.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Ilya Leoshkevich <iii@linux.ibm.com>
    Cc: Vasily Gorbik <gor@linux.ibm.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/userfaultfd: allow hugetlb change protection upon poison entry [+ + +]
Author: Peter Xu <peterx@redhat.com>
Date:   Fri Apr 5 19:19:20 2024 -0400

    mm/userfaultfd: allow hugetlb change protection upon poison entry
    
    commit c5977c95dff182d6ee06f4d6f60bcb0284912969 upstream.
    
    After UFFDIO_POISON, there can be two kinds of hugetlb pte markers, either
    the POISON one or UFFD_WP one.
    
    Allow change protection to run on a poisoned marker just like !hugetlb
    cases, ignoring the marker irrelevant of the permission.
    
    Here the two bits are mutual exclusive.  For example, when install a
    poisoned entry it must not be UFFD_WP already (by checking pte_none()
    before such install).  And it also means if UFFD_WP is set there must have
    no POISON bit set.  It makes sense because UFFD_WP is a bit to reflect
    permission, and permissions do not apply if the pte is poisoned and
    destined to sigbus.
    
    So here we simply check uffd_wp bit set first, do nothing otherwise.
    
    Attach the Fixes to UFFDIO_POISON work, as before that it should not be
    possible to have poison entry for hugetlb (e.g., hugetlb doesn't do swap,
    so no chance of swapin errors).
    
    Link: https://lkml.kernel.org/r/20240405231920.1772199-1-peterx@redhat.com
    Link: https://lore.kernel.org/r/000000000000920d5e0615602dd1@google.com
    Fixes: fc71884a5f59 ("mm: userfaultfd: add new UFFDIO_POISON ioctl")
    Signed-off-by: Peter Xu <peterx@redhat.com>
    Reported-by: syzbot+b07c8ac8eee3d4d8440f@syzkaller.appspotmail.com
    Reviewed-by: David Hildenbrand <david@redhat.com>
    Reviewed-by: Axel Rasmussen <axelrasmussen@google.com>
    Cc: <stable@vger.kernel.org>    [6.6+]
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/mlx5: E-switch, store eswitch pointer before registering devlink_param [+ + +]
Author: Shay Drory <shayd@nvidia.com>
Date:   Tue Apr 9 22:08:09 2024 +0300

    net/mlx5: E-switch, store eswitch pointer before registering devlink_param
    
    [ Upstream commit 0553e753ea9ee724acaf6b3dfc7354702af83567 ]
    
    Next patch will move devlink register to be first. Therefore, whenever
    mlx5 will register a param, the user will be notified.
    In order to notify the user, devlink is using the get() callback of
    the param. Hence, resources that are being used by the get() callback
    must be set before the devlink param is registered.
    
    Therefore, store eswitch pointer inside mdev before registering the
    param.
    
    Signed-off-by: Shay Drory <shayd@nvidia.com>
    Reviewed-by: Moshe Shemesh <moshe@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://lore.kernel.org/r/20240409190820.227554-2-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5: Lag, restore buckets number to default after hash LAG deactivation [+ + +]
Author: Shay Drory <shayd@nvidia.com>
Date:   Thu Apr 11 14:54:39 2024 +0300

    net/mlx5: Lag, restore buckets number to default after hash LAG deactivation
    
    [ Upstream commit 37cc10da3a50e6d0cb9808a90b7da9b4868794dd ]
    
    The cited patch introduces the concept of buckets in LAG in hash mode.
    However, the patch doesn't clear the number of buckets in the LAG
    deactivation. This results in using the wrong number of buckets in
    case user create a hash mode LAG and afterwards create a non-hash
    mode LAG.
    
    Hence, restore buckets number to default after hash mode LAG
    deactivation.
    
    Fixes: 352899f384d4 ("net/mlx5: Lag, use buckets in hash mode")
    Signed-off-by: Shay Drory <shayd@nvidia.com>
    Reviewed-by: Maor Gottlieb <maorg@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://lore.kernel.org/r/20240411115444.374475-2-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5: Restore mistakenly dropped parts in register devlink flow [+ + +]
Author: Shay Drory <shayd@nvidia.com>
Date:   Thu Apr 11 14:54:41 2024 +0300

    net/mlx5: Restore mistakenly dropped parts in register devlink flow
    
    [ Upstream commit bf729988303a27833a86acb561f42b9a3cc12728 ]
    
    Code parts from cited commit were mistakenly dropped while rebasing
    before submission. Add them here.
    
    Fixes: c6e77aa9dd82 ("net/mlx5: Register devlink first under devlink lock")
    Signed-off-by: Shay Drory <shayd@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://lore.kernel.org/r/20240411115444.374475-4-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/mlx5e: Prevent deadlock while disabling aRFS [+ + +]
Author: Carolina Jubran <cjubran@nvidia.com>
Date:   Thu Apr 11 14:54:44 2024 +0300

    net/mlx5e: Prevent deadlock while disabling aRFS
    
    [ Upstream commit fef965764cf562f28afb997b626fc7c3cec99693 ]
    
    When disabling aRFS under the `priv->state_lock`, any scheduled
    aRFS works are canceled using the `cancel_work_sync` function,
    which waits for the work to end if it has already started.
    However, while waiting for the work handler, the handler will
    try to acquire the `state_lock` which is already acquired.
    
    The worker acquires the lock to delete the rules if the state
    is down, which is not the worker's responsibility since
    disabling aRFS deletes the rules.
    
    Add an aRFS state variable, which indicates whether the aRFS is
    enabled and prevent adding rules when the aRFS is disabled.
    
    Kernel log:
    
    ======================================================
    WARNING: possible circular locking dependency detected
    6.7.0-rc4_net_next_mlx5_5483eb2 #1 Tainted: G          I
    ------------------------------------------------------
    ethtool/386089 is trying to acquire lock:
    ffff88810f21ce68 ((work_completion)(&rule->arfs_work)){+.+.}-{0:0}, at: __flush_work+0x74/0x4e0
    
    but task is already holding lock:
    ffff8884a1808cc0 (&priv->state_lock){+.+.}-{3:3}, at: mlx5e_ethtool_set_channels+0x53/0x200 [mlx5_core]
    
    which lock already depends on the new lock.
    
    the existing dependency chain (in reverse order) is:
    
    -> #1 (&priv->state_lock){+.+.}-{3:3}:
           __mutex_lock+0x80/0xc90
           arfs_handle_work+0x4b/0x3b0 [mlx5_core]
           process_one_work+0x1dc/0x4a0
           worker_thread+0x1bf/0x3c0
           kthread+0xd7/0x100
           ret_from_fork+0x2d/0x50
           ret_from_fork_asm+0x11/0x20
    
    -> #0 ((work_completion)(&rule->arfs_work)){+.+.}-{0:0}:
           __lock_acquire+0x17b4/0x2c80
           lock_acquire+0xd0/0x2b0
           __flush_work+0x7a/0x4e0
           __cancel_work_timer+0x131/0x1c0
           arfs_del_rules+0x143/0x1e0 [mlx5_core]
           mlx5e_arfs_disable+0x1b/0x30 [mlx5_core]
           mlx5e_ethtool_set_channels+0xcb/0x200 [mlx5_core]
           ethnl_set_channels+0x28f/0x3b0
           ethnl_default_set_doit+0xec/0x240
           genl_family_rcv_msg_doit+0xd0/0x120
           genl_rcv_msg+0x188/0x2c0
           netlink_rcv_skb+0x54/0x100
           genl_rcv+0x24/0x40
           netlink_unicast+0x1a1/0x270
           netlink_sendmsg+0x214/0x460
           __sock_sendmsg+0x38/0x60
           __sys_sendto+0x113/0x170
           __x64_sys_sendto+0x20/0x30
           do_syscall_64+0x40/0xe0
           entry_SYSCALL_64_after_hwframe+0x46/0x4e
    
    other info that might help us debug this:
    
     Possible unsafe locking scenario:
    
           CPU0                    CPU1
           ----                    ----
      lock(&priv->state_lock);
                                   lock((work_completion)(&rule->arfs_work));
                                   lock(&priv->state_lock);
      lock((work_completion)(&rule->arfs_work));
    
     *** DEADLOCK ***
    
    3 locks held by ethtool/386089:
     #0: ffffffff82ea7210 (cb_lock){++++}-{3:3}, at: genl_rcv+0x15/0x40
     #1: ffffffff82e94c88 (rtnl_mutex){+.+.}-{3:3}, at: ethnl_default_set_doit+0xd3/0x240
     #2: ffff8884a1808cc0 (&priv->state_lock){+.+.}-{3:3}, at: mlx5e_ethtool_set_channels+0x53/0x200 [mlx5_core]
    
    stack backtrace:
    CPU: 15 PID: 386089 Comm: ethtool Tainted: G          I        6.7.0-rc4_net_next_mlx5_5483eb2 #1
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
    Call Trace:
     <TASK>
     dump_stack_lvl+0x60/0xa0
     check_noncircular+0x144/0x160
     __lock_acquire+0x17b4/0x2c80
     lock_acquire+0xd0/0x2b0
     ? __flush_work+0x74/0x4e0
     ? save_trace+0x3e/0x360
     ? __flush_work+0x74/0x4e0
     __flush_work+0x7a/0x4e0
     ? __flush_work+0x74/0x4e0
     ? __lock_acquire+0xa78/0x2c80
     ? lock_acquire+0xd0/0x2b0
     ? mark_held_locks+0x49/0x70
     __cancel_work_timer+0x131/0x1c0
     ? mark_held_locks+0x49/0x70
     arfs_del_rules+0x143/0x1e0 [mlx5_core]
     mlx5e_arfs_disable+0x1b/0x30 [mlx5_core]
     mlx5e_ethtool_set_channels+0xcb/0x200 [mlx5_core]
     ethnl_set_channels+0x28f/0x3b0
     ethnl_default_set_doit+0xec/0x240
     genl_family_rcv_msg_doit+0xd0/0x120
     genl_rcv_msg+0x188/0x2c0
     ? ethnl_ops_begin+0xb0/0xb0
     ? genl_family_rcv_msg_dumpit+0xf0/0xf0
     netlink_rcv_skb+0x54/0x100
     genl_rcv+0x24/0x40
     netlink_unicast+0x1a1/0x270
     netlink_sendmsg+0x214/0x460
     __sock_sendmsg+0x38/0x60
     __sys_sendto+0x113/0x170
     ? do_user_addr_fault+0x53f/0x8f0
     __x64_sys_sendto+0x20/0x30
     do_syscall_64+0x40/0xe0
     entry_SYSCALL_64_after_hwframe+0x46/0x4e
     </TASK>
    
    Fixes: 45bf454ae884 ("net/mlx5e: Enabling aRFS mechanism")
    Signed-off-by: Carolina Jubran <cjubran@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://lore.kernel.org/r/20240411115444.374475-7-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/sched: Fix mirred deadlock on device recursion [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Mon Apr 15 18:07:28 2024 -0300

    net/sched: Fix mirred deadlock on device recursion
    
    [ Upstream commit 0f022d32c3eca477fbf79a205243a6123ed0fe11 ]
    
    When the mirred action is used on a classful egress qdisc and a packet is
    mirrored or redirected to self we hit a qdisc lock deadlock.
    See trace below.
    
    [..... other info removed for brevity....]
    [   82.890906]
    [   82.890906] ============================================
    [   82.890906] WARNING: possible recursive locking detected
    [   82.890906] 6.8.0-05205-g77fadd89fe2d-dirty #213 Tainted: G        W
    [   82.890906] --------------------------------------------
    [   82.890906] ping/418 is trying to acquire lock:
    [   82.890906] ffff888006994110 (&sch->q.lock){+.-.}-{3:3}, at:
    __dev_queue_xmit+0x1778/0x3550
    [   82.890906]
    [   82.890906] but task is already holding lock:
    [   82.890906] ffff888006994110 (&sch->q.lock){+.-.}-{3:3}, at:
    __dev_queue_xmit+0x1778/0x3550
    [   82.890906]
    [   82.890906] other info that might help us debug this:
    [   82.890906]  Possible unsafe locking scenario:
    [   82.890906]
    [   82.890906]        CPU0
    [   82.890906]        ----
    [   82.890906]   lock(&sch->q.lock);
    [   82.890906]   lock(&sch->q.lock);
    [   82.890906]
    [   82.890906]  *** DEADLOCK ***
    [   82.890906]
    [..... other info removed for brevity....]
    
    Example setup (eth0->eth0) to recreate
    tc qdisc add dev eth0 root handle 1: htb default 30
    tc filter add dev eth0 handle 1: protocol ip prio 2 matchall \
         action mirred egress redirect dev eth0
    
    Another example(eth0->eth1->eth0) to recreate
    tc qdisc add dev eth0 root handle 1: htb default 30
    tc filter add dev eth0 handle 1: protocol ip prio 2 matchall \
         action mirred egress redirect dev eth1
    
    tc qdisc add dev eth1 root handle 1: htb default 30
    tc filter add dev eth1 handle 1: protocol ip prio 2 matchall \
         action mirred egress redirect dev eth0
    
    We fix this by adding an owner field (CPU id) to struct Qdisc set after
    root qdisc is entered. When the softirq enters it a second time, if the
    qdisc owner is the same CPU, the packet is dropped to break the loop.
    
    Reported-by: Mingshuai Ren <renmingshuai@huawei.com>
    Closes: https://lore.kernel.org/netdev/20240314111713.5979-1-renmingshuai@huawei.com/
    Fixes: 3bcb846ca4cf ("net: get rid of spin_trylock() in net_tx_action()")
    Fixes: e578d9c02587 ("net: sched: use counter to break reclassify loops")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Victor Nogueira <victor@mojatatu.com>
    Reviewed-by: Pedro Tammela <pctammela@mojatatu.com>
    Tested-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Link: https://lore.kernel.org/r/20240415210728.36949-1-victor@mojatatu.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net: change maximum number of UDP segments to 128 [+ + +]
Author: Yuri Benditovich <yuri.benditovich@daynix.com>
Date:   Thu Apr 11 08:11:24 2024 +0300

    net: change maximum number of UDP segments to 128
    
    [ Upstream commit 1382e3b6a3500c245e5278c66d210c02926f804f ]
    
    The commit fc8b2a619469
    ("net: more strict VIRTIO_NET_HDR_GSO_UDP_L4 validation")
    adds check of potential number of UDP segments vs
    UDP_MAX_SEGMENTS in linux/virtio_net.h.
    After this change certification test of USO guest-to-guest
    transmit on Windows driver for virtio-net device fails,
    for example with packet size of ~64K and mss of 536 bytes.
    In general the USO should not be more restrictive than TSO.
    Indeed, in case of unreasonably small mss a lot of segments
    can cause queue overflow and packet loss on the destination.
    Limit of 128 segments is good for any practical purpose,
    with minimal meaningful mss of 536 the maximal UDP packet will
    be divided to ~120 segments.
    The number of segments for UDP packets is validated vs
    UDP_MAX_SEGMENTS also in udp.c (v4,v6), this does not affect
    quest-to-guest path but does affect packets sent to host, for
    example.
    It is important to mention that UDP_MAX_SEGMENTS is kernel-only
    define and not available to user mode socket applications.
    In order to request MSS smaller than MTU the applications
    just uses setsockopt with SOL_UDP and UDP_SEGMENT and there is
    no limitations on socket API level.
    
    Fixes: fc8b2a619469 ("net: more strict VIRTIO_NET_HDR_GSO_UDP_L4 validation")
    Signed-off-by: Yuri Benditovich <yuri.benditovich@daynix.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: mt7530: fix enabling EEE on MT7531 switch on all boards [+ + +]
Author: Arınç ÜNAL <arinc.unal@arinc9.com>
Date:   Mon Apr 8 10:08:53 2024 +0300

    net: dsa: mt7530: fix enabling EEE on MT7531 switch on all boards
    
    commit 06dfcd4098cfdc4d4577d94793a4f9125386da8b upstream.
    
    The commit 40b5d2f15c09 ("net: dsa: mt7530: Add support for EEE features")
    brought EEE support but did not enable EEE on MT7531 switch MACs. EEE is
    enabled on MT7531 switch MACs by pulling the LAN2LED0 pin low on the board
    (bootstrapping), unsetting the EEE_DIS bit on the trap register, or setting
    the internal EEE switch bit on the CORE_PLL_GROUP4 register. Thanks to
    SkyLake Huang (黃啟澤) from MediaTek for providing information on the
    internal EEE switch bit.
    
    There are existing boards that were not designed to pull the pin low.
    Because of that, the EEE status currently depends on the board design.
    
    The EEE_DIS bit on the trap pertains to the LAN2LED0 pin which is usually
    used to control an LED. Once the bit is unset, the pin will be low. That
    will make the active low LED turn on. The pin is controlled by the switch
    PHY. It seems that the PHY controls the pin in the way that it inverts the
    pin state. That means depending on the wiring of the LED connected to
    LAN2LED0 on the board, the LED may be on without an active link.
    
    To not cause this unwanted behaviour whilst enabling EEE on all boards, set
    the internal EEE switch bit on the CORE_PLL_GROUP4 register.
    
    My testing on MT7531 shows a certain amount of traffic loss when EEE is
    enabled. That said, I haven't come across a board that enables EEE. So
    enable EEE on the switch MACs but disable EEE advertisement on the switch
    PHYs. This way, we don't change the behaviour of the majority of the boards
    that have this switch. The mediatek-ge PHY driver already disables EEE
    advertisement on the switch PHYs but my testing shows that it is somehow
    enabled afterwards. Disabling EEE advertisement before the PHY driver
    initialises keeps it off.
    
    With this change, EEE can now be enabled using ethtool.
    
    Fixes: 40b5d2f15c09 ("net: dsa: mt7530: Add support for EEE features")
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com>
    Tested-by: Daniel Golle <daniel@makrotopia.org>
    Reviewed-by: Daniel Golle <daniel@makrotopia.org>
    Link: https://lore.kernel.org/r/20240408-for-net-mt7530-fix-eee-for-mt7531-mt7988-v3-1-84fdef1f008b@arinc9.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: dsa: mt7530: fix improper frames on all 25MHz and 40MHz XTAL MT7530 [+ + +]
Author: Arınç ÜNAL <arinc.unal@arinc9.com>
Date:   Wed Mar 20 23:45:30 2024 +0300

    net: dsa: mt7530: fix improper frames on all 25MHz and 40MHz XTAL MT7530
    
    commit 5f563c31ff0c40ce395d0bae7daa94c7950dac97 upstream.
    
    The MT7530 switch after reset initialises with a core clock frequency that
    works with a 25MHz XTAL connected to it. For 40MHz XTAL, the core clock
    frequency must be set to 500MHz.
    
    The mt7530_pll_setup() function is responsible of setting the core clock
    frequency. Currently, it runs on MT7530 with 25MHz and 40MHz XTAL. This
    causes MT7530 switch with 25MHz XTAL to egress and ingress frames
    improperly.
    
    Introduce a check to run it only on MT7530 with 40MHz XTAL.
    
    The core clock frequency is set by writing to a switch PHY's register.
    Access to the PHY's register is done via the MDIO bus the switch is also
    on. Therefore, it works only when the switch makes switch PHYs listen on
    the MDIO bus the switch is on. This is controlled either by the state of
    the ESW_P1_LED_1 pin after reset deassertion or modifying bit 5 of the
    modifiable trap register.
    
    When ESW_P1_LED_1 is pulled high, PHY indirect access is used. That means
    accessing PHY registers via the PHY indirect access control register of the
    switch.
    
    When ESW_P1_LED_1 is pulled low, PHY direct access is used. That means
    accessing PHY registers via the MDIO bus the switch is on.
    
    For MT7530 switch with 40MHz XTAL on a board with ESW_P1_LED_1 pulled high,
    the core clock frequency won't be set to 500MHz, causing the switch to
    egress and ingress frames improperly.
    
    Run mt7530_pll_setup() after PHY direct access is set on the modifiable
    trap register.
    
    With these two changes, all MT7530 switches with 25MHz and 40MHz, and
    P1_LED_1 pulled high or low, will egress and ingress frames properly.
    
    Link: https://github.com/BPI-SINOVOIP/BPI-R2-bsp/blob/4a5dd143f2172ec97a2872fa29c7c4cd520f45b5/linux-mt/drivers/net/ethernet/mediatek/gsw_mt7623.c#L1039
    Fixes: b8f126a8d543 ("net-next: dsa: add dsa support for Mediatek MT7530 switch")
    Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com>
    Link: https://lore.kernel.org/r/20240320-for-net-mt7530-fix-25mhz-xtal-with-direct-phy-access-v1-1-d92f605f1160@arinc9.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: dsa: mt7530: fix mirroring frames received on local port [+ + +]
Author: Arınç ÜNAL <arinc.unal@arinc9.com>
Date:   Sat Apr 13 16:01:39 2024 +0300

    net: dsa: mt7530: fix mirroring frames received on local port
    
    [ Upstream commit d59cf049c8378677053703e724808836f180888e ]
    
    This switch intellectual property provides a bit on the ARL global control
    register which controls allowing mirroring frames which are received on the
    local port (monitor port). This bit is unset after reset.
    
    This ability must be enabled to fully support the port mirroring feature on
    this switch intellectual property.
    
    Therefore, this patch fixes the traffic not being reflected on a port,
    which would be configured like below:
    
      tc qdisc add dev swp0 clsact
    
      tc filter add dev swp0 ingress matchall skip_sw \
      action mirred egress mirror dev swp0
    
    As a side note, this configuration provides the hairpinning feature for a
    single port.
    
    Fixes: 37feab6076aa ("net: dsa: mt7530: add support for port mirroring")
    Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: mt7530: fix port mirroring for MT7988 SoC switch [+ + +]
Author: Arınç ÜNAL <arinc.unal@arinc9.com>
Date:   Sat Apr 13 16:01:40 2024 +0300

    net: dsa: mt7530: fix port mirroring for MT7988 SoC switch
    
    [ Upstream commit 2c606d138518cc69f09c35929abc414a99e3a28f ]
    
    The "MT7988A Wi-Fi 7 Generation Router Platform: Datasheet (Open Version)
    v0.1" document shows bits 16 to 18 as the MIRROR_PORT field of the CPU
    forward control register. Currently, the MT7530 DSA subdriver configures
    bits 0 to 2 of the CPU forward control register which breaks the port
    mirroring feature for the MT7988 SoC switch.
    
    Fix this by using the MT7531_MIRROR_PORT_GET() and MT7531_MIRROR_PORT_SET()
    macros which utilise the correct bits.
    
    Fixes: 110c18bfed41 ("net: dsa: mt7530: introduce driver for MT7988 built-in switch")
    Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com>
    Acked-by: Daniel Golle <daniel@makrotopia.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ethernet: mtk_eth_soc: fix WED + wifi reset [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Tue Apr 16 10:23:29 2024 +0200

    net: ethernet: mtk_eth_soc: fix WED + wifi reset
    
    [ Upstream commit 94667949ec3bbb2218c46ad0a0e7274c8832e494 ]
    
    The WLAN + WED reset sequence relies on being able to receive interrupts from
    the card, in order to synchronize individual steps with the firmware.
    When WED is stopped, leave interrupts running and rely on the driver turning
    off unwanted ones.
    WED DMA also needs to be disabled before resetting.
    
    Fixes: f78cd9c783e0 ("net: ethernet: mtk_wed: update mtk_wed_stop")
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Link: https://lore.kernel.org/r/20240416082330.82564-1-nbd@nbd.name
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ethernet: ti: am65-cpsw-nuss: cleanup DMA Channels before using them [+ + +]
Author: Siddharth Vadapalli <s-vadapalli@ti.com>
Date:   Wed Apr 17 15:24:25 2024 +0530

    net: ethernet: ti: am65-cpsw-nuss: cleanup DMA Channels before using them
    
    [ Upstream commit c24cd679b075b0e953ea167b0aa2b2d59e4eba7f ]
    
    The TX and RX DMA Channels used by the driver to exchange data with CPSW
    are not guaranteed to be in a clean state during driver initialization.
    The Bootloader could have used the same DMA Channels without cleaning them
    up in the event of failure. Thus, reset and disable the DMA Channels to
    ensure that they are in a clean state before using them.
    
    Fixes: 93a76530316a ("net: ethernet: ti: introduce am65x/j721e gigabit eth subsystem driver")
    Reported-by: Schuyler Patton <spatton@ti.com>
    Signed-off-by: Siddharth Vadapalli <s-vadapalli@ti.com>
    Reviewed-by: Roger Quadros <rogerq@kernel.org>
    Link: https://lore.kernel.org/r/20240417095425.2253876-1-s-vadapalli@ti.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ravb: Allow RX loop to move past DMA mapping errors [+ + +]
Author: Paul Barker <paul.barker.ct@bp.renesas.com>
Date:   Tue Apr 16 13:02:52 2024 +0100

    net: ravb: Allow RX loop to move past DMA mapping errors
    
    [ Upstream commit a892493a343494bd6bab9d098593932077ff3c43 ]
    
    The RX loops in ravb_rx_gbeth() and ravb_rx_rcar() skip to the next loop
    iteration if a zero-length descriptor is seen (indicating a DMA mapping
    error). However, the current RX descriptor index `priv->cur_rx[q]` was
    incremented at the end of the loop and so would not be incremented when
    we skip to the next loop iteration. This would cause the loop to keep
    seeing the same zero-length descriptor instead of moving on to the next
    descriptor.
    
    As the loop counter `i` still increments, the loop would eventually
    terminate so there is no risk of being stuck here forever - but we
    should still fix this to avoid wasting cycles.
    
    To fix this, the RX descriptor index is incremented at the top of the
    loop, in the for statement itself. The assignments of `entry` and `desc`
    are brought into the loop to avoid the need for duplication.
    
    Fixes: d8b48911fd24 ("ravb: fix ring memory allocation")
    Signed-off-by: Paul Barker <paul.barker.ct@bp.renesas.com>
    Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ravb: Count packets instead of descriptors in R-Car RX path [+ + +]
Author: Paul Barker <paul.barker.ct@bp.renesas.com>
Date:   Tue Apr 16 13:02:51 2024 +0100

    net: ravb: Count packets instead of descriptors in R-Car RX path
    
    [ Upstream commit def52db470df28d6f43cacbd21137f03b9502073 ]
    
    The units of "work done" in the RX path should be packets instead of
    descriptors.
    
    Descriptors which are used by the hardware to record error conditions or
    are empty in the case of a DMA mapping error should not count towards
    our RX work budget.
    
    Also make the limit variable unsigned as it can never be negative.
    
    Fixes: c156633f1353 ("Renesas Ethernet AVB driver proper")
    Signed-off-by: Paul Barker <paul.barker.ct@bp.renesas.com>
    Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
    Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: sparx5: flower: fix fragment flags handling [+ + +]
Author: Asbjørn Sloth Tønnesen <ast@fiberby.net>
Date:   Thu Apr 11 11:13:18 2024 +0000

    net: sparx5: flower: fix fragment flags handling
    
    [ Upstream commit 68aba00483c7c4102429bcdfdece7289a8ab5c8e ]
    
    I noticed that only 3 out of the 4 input bits were used,
    mt.key->flags & FLOW_DIS_IS_FRAGMENT was never checked.
    
    In order to avoid a complicated maze, I converted it to
    use a 16 byte mapping table.
    
    As shown in the table below the old heuristics doesn't
    always do the right thing, ie. when FLOW_DIS_IS_FRAGMENT=1/1
    then it used to only match follow-up fragment packets.
    
    Here are all the combinations, and their resulting new/old
    VCAP key/mask filter:
    
      /- FLOW_DIS_IS_FRAGMENT (key/mask)
      |    /- FLOW_DIS_FIRST_FRAG (key/mask)
      |    |    /-- new VCAP fragment (key/mask)
      v    v    v    v- old VCAP fragment (key/mask)
    
     0/0  0/0  -/-  -/-     impossible (due to entry cond. on mask)
     0/0  0/1  -/-  0/3 !!  invalid (can't match non-fragment + follow-up frag)
     0/0  1/0  -/-  -/-     impossible (key > mask)
     0/0  1/1  1/3  1/3     first fragment
    
     0/1  0/0  0/3  3/3 !!  not fragmented
     0/1  0/1  0/3  3/3 !!  not fragmented (+ not first fragment)
     0/1  1/0  -/-  -/-     impossible (key > mask)
     0/1  1/1  -/-  1/3 !!  invalid (non-fragment and first frag)
    
     1/0  0/0  -/-  -/-     impossible (key > mask)
     1/0  0/1  -/-  -/-     impossible (key > mask)
     1/0  1/0  -/-  -/-     impossible (key > mask)
     1/0  1/1  -/-  -/-     impossible (key > mask)
    
     1/1  0/0  1/1  3/3 !!  some fragment
     1/1  0/1  3/3  3/3     follow-up fragment
     1/1  1/0  -/-  -/-     impossible (key > mask)
     1/1  1/1  1/3  1/3     first fragment
    
    In the datasheet the VCAP fragment values are documented as:
     0 = no fragment
     1 = initial fragment
     2 = suspicious fragment
     3 = valid follow-up fragment
    
    Result: 3 combinations match the old behavior,
            3 combinations have been corrected,
            2 combinations are now invalid, and fail,
            8 combinations are impossible.
    
    It should now be aligned with how FLOW_DIS_IS_FRAGMENT
    and FLOW_DIS_FIRST_FRAG is set in __skb_flow_dissect() in
    net/core/flow_dissector.c
    
    Since the VCAP fragment values are not a bitfield, we have
    to ignore the suspicious fragment value, eg. when matching
    on any kind of fragment with FLOW_DIS_IS_FRAGMENT=1/1.
    
    Only compile tested, and logic tested in userspace, as I
    unfortunately don't have access to this switch chip (yet).
    
    Fixes: d6c2964db3fe ("net: microchip: sparx5: Adding more tc flower keys for the IS2 VCAP")
    Signed-off-by: Asbjørn Sloth Tønnesen <ast@fiberby.net>
    Reviewed-by: Steen Hegelund <Steen.Hegelund@microchip.com>
    Tested-by: Daniel Machon <daniel.machon@microchip.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Link: https://lore.kernel.org/r/20240411111321.114095-1-ast@fiberby.net
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: stmmac: Apply half-duplex-less constraint for DW QoS Eth only [+ + +]
Author: Serge Semin <fancer.lancer@gmail.com>
Date:   Fri Apr 12 21:03:14 2024 +0300

    net: stmmac: Apply half-duplex-less constraint for DW QoS Eth only
    
    [ Upstream commit 0ebd96f5da4410c0cb8fc75e44f1009530b2f90b ]
    
    There are three DW MAC IP-cores which can have the multiple Tx/Rx queues
    enabled:
    DW GMAC v3.7+ with AV feature,
    DW QoS Eth v4.x/v5.x,
    DW XGMAC/XLGMAC
    Based on the respective HW databooks, only the DW QoS Eth IP-core doesn't
    support the half-duplex link mode in case if more than one queues enabled:
    
    "In multiple queue/channel configurations, for half-duplex operation,
    enable only the Q0/CH0 on Tx and Rx. For single queue/channel in
    full-duplex operation, any queue/channel can be enabled."
    
    The rest of the IP-cores don't have such constraint. Thus in order to have
    the constraint applied for the DW QoS Eth MACs only, let's move the it'
    implementation to the respective MAC-capabilities getter and make sure the
    getter is called in the queues re-init procedure.
    
    Fixes: b6cfffa7ad92 ("stmmac: fix DMA channel hang in half-duplex mode")
    Signed-off-by: Serge Semin <fancer.lancer@gmail.com>
    Reviewed-by: Romain Gantois <romain.gantois@bootlin.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: stmmac: Fix IP-cores specific MAC capabilities [+ + +]
Author: Serge Semin <fancer.lancer@gmail.com>
Date:   Fri Apr 12 21:03:16 2024 +0300

    net: stmmac: Fix IP-cores specific MAC capabilities
    
    [ Upstream commit 9cb54af214a7cdc91577ec083e5569f2ce2c86d8 ]
    
    Here is the list of the MAC capabilities specific to the particular DW MAC
    IP-cores currently supported by the driver:
    
    DW MAC100: MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
               MAC_10 | MAC_100
    
    DW GMAC:  MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
              MAC_10 | MAC_100 | MAC_1000
    
    Allwinner sun8i MAC: MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
                         MAC_10 | MAC_100 | MAC_1000
    
    DW QoS Eth: MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
                MAC_10 | MAC_100 | MAC_1000 | MAC_2500FD
    if there is more than 1 active Tx/Rx queues:
               MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
               MAC_10FD | MAC_100FD | MAC_1000FD | MAC_2500FD
    
    DW XGMAC: MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
              MAC_1000FD | MAC_2500FD | MAC_5000FD | MAC_10000FD
    
    DW XLGMAC: MAC_ASYM_PAUSE | MAC_SYM_PAUSE |
              MAC_1000FD | MAC_2500FD | MAC_5000FD | MAC_10000FD |
              MAC_25000FD | MAC_40000FD | MAC_50000FD | MAC_100000FD
    
    As you can see there are only two common capabilities:
    MAC_ASYM_PAUSE | MAC_SYM_PAUSE.
    Meanwhile what is currently implemented defines 10/100/1000 link speeds
    for all IP-cores, which is definitely incorrect for DW MAC100, DW XGMAC
    and DW XLGMAC devices.
    
    Seeing the flow-control is implemented as a callback for each MAC IP-core
    (see dwmac100_flow_ctrl(), dwmac1000_flow_ctrl(), sun8i_dwmac_flow_ctrl(),
    etc) and since the MAC-specific setup() method is supposed to be called
    for each available DW MAC-based device, the capabilities initialization
    can be freely moved to these setup() functions, thus correctly setting up
    the MAC-capabilities for each IP-core (including the Allwinner Sun8i). A
    new stmmac_link::caps field was specifically introduced for that so to
    have all link-specific info preserved in a single structure.
    
    Note the suggested change fixes three earlier commits at a time. The
    commit 5b0d7d7da64b ("net: stmmac: Add the missing speeds that XGMAC
    supports") permitted the 10-100 link speeds and 1G half-duplex mode for DW
    XGMAC IP-core even though it doesn't support them. The commit df7699c70c1b
    ("net: stmmac: Do not cut down 1G modes") incorrectly added the MAC1000
    capability to the DW MAC100 IP-core. Similarly to the DW XGMAC the commit
    8a880936e902 ("net: stmmac: Add XLGMII support") incorrectly permitted the
    10-100 link speeds and 1G half-duplex mode for DW XLGMAC IP-core.
    
    Fixes: 5b0d7d7da64b ("net: stmmac: Add the missing speeds that XGMAC supports")
    Fixes: df7699c70c1b ("net: stmmac: Do not cut down 1G modes")
    Fixes: 8a880936e902 ("net: stmmac: Add XLGMII support")
    Suggested-by: Russell King (Oracle) <linux@armlinux.org.uk>
    Signed-off-by: Serge Semin <fancer.lancer@gmail.com>
    Reviewed-by: Romain Gantois <romain.gantois@bootlin.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: stmmac: Fix max-speed being ignored on queue re-init [+ + +]
Author: Serge Semin <fancer.lancer@gmail.com>
Date:   Fri Apr 12 21:03:15 2024 +0300

    net: stmmac: Fix max-speed being ignored on queue re-init
    
    [ Upstream commit 59c3d6ca6cbded6c6599e975b42a9d6a27fcbaf2 ]
    
    It's possible to have the maximum link speed being artificially limited on
    the platform-specific basis. It's done either by setting up the
    plat_stmmacenet_data::max_speed field or by specifying the "max-speed"
    DT-property. In such cases it's required that any specific
    MAC-capabilities re-initializations would take the limit into account. In
    particular the link speed capabilities may change during the number of
    active Tx/Rx queues re-initialization. But the currently implemented
    procedure doesn't take the speed limit into account.
    
    Fix that by calling phylink_limit_mac_speed() in the
    stmmac_reinit_queues() method if the speed limitation was required in the
    same way as it's done in the stmmac_phy_setup() function.
    
    Fixes: 95201f36f395 ("net: stmmac: update MAC capabilities when tx queues are updated")
    Signed-off-by: Serge Semin <fancer.lancer@gmail.com>
    Reviewed-by: Romain Gantois <romain.gantois@bootlin.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: usb: ax88179_178a: avoid writing the mac address before first reading [+ + +]
Author: Jose Ignacio Tornos Martinez <jtornosm@redhat.com>
Date:   Wed Apr 17 10:55:13 2024 +0200

    net: usb: ax88179_178a: avoid writing the mac address before first reading
    
    commit 56f78615bcb1c3ba58a5d9911bad3d9185cf141b upstream.
    
    After the commit d2689b6a86b9 ("net: usb: ax88179_178a: avoid two
    consecutive device resets"), reset operation, in which the default mac
    address from the device is read, is not executed from bind operation and
    the random address, that is pregenerated just in case, is direclty written
    the first time in the device, so the default one from the device is not
    even read. This writing is not dangerous because is volatile and the
    default mac address is not missed.
    
    In order to avoid this and keep the simplification to have only one
    reset and reduce the delays, restore the reset from bind operation and
    remove the reset that is commanded from open operation. The behavior is
    the same but everything is ready for usbnet_probe.
    
    Tested with ASIX AX88179 USB Gigabit Ethernet devices.
    Restore the old behavior for the rest of possible devices because I don't
    have the hardware to test.
    
    cc: stable@vger.kernel.org # 6.6+
    Fixes: d2689b6a86b9 ("net: usb: ax88179_178a: avoid two consecutive device resets")
    Reported-by: Jarkko Palviainen <jarkko.palviainen@gmail.com>
    Signed-off-by: Jose Ignacio Tornos Martinez <jtornosm@redhat.com>
    Link: https://lore.kernel.org/r/20240417085524.219532-1-jtornosm@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
netfilter: br_netfilter: skip conntrack input hook for promisc packets [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Tue Apr 9 11:24:59 2024 +0200

    netfilter: br_netfilter: skip conntrack input hook for promisc packets
    
    [ Upstream commit 751de2012eafa4d46d8081056761fa0e9cc8a178 ]
    
    For historical reasons, when bridge device is in promisc mode, packets
    that are directed to the taps follow bridge input hook path. This patch
    adds a workaround to reset conntrack for these packets.
    
    Jianbo Liu reports warning splats in their test infrastructure where
    cloned packets reach the br_netfilter input hook to confirm the
    conntrack object.
    
    Scratch one bit from BR_INPUT_SKB_CB to annotate that this packet has
    reached the input hook because it is passed up to the bridge device to
    reach the taps.
    
    [   57.571874] WARNING: CPU: 1 PID: 0 at net/bridge/br_netfilter_hooks.c:616 br_nf_local_in+0x157/0x180 [br_netfilter]
    [   57.572749] Modules linked in: xt_MASQUERADE nf_conntrack_netlink nfnetlink iptable_nat xt_addrtype xt_conntrack nf_nat br_netfilter rpcsec_gss_krb5 auth_rpcgss oid_registry overlay rpcrdma rdma_ucm ib_iser libiscsi scsi_transport_isc si ib_umad rdma_cm ib_ipoib iw_cm ib_cm mlx5_ib ib_uverbs ib_core mlx5ctl mlx5_core
    [   57.575158] CPU: 1 PID: 0 Comm: swapper/1 Not tainted 6.8.0+ #19
    [   57.575700] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
    [   57.576662] RIP: 0010:br_nf_local_in+0x157/0x180 [br_netfilter]
    [   57.577195] Code: fe ff ff 41 bd 04 00 00 00 be 04 00 00 00 e9 4a ff ff ff be 04 00 00 00 48 89 ef e8 f3 a9 3c e1 66 83 ad b4 00 00 00 04 eb 91 <0f> 0b e9 f1 fe ff ff 0f 0b e9 df fe ff ff 48 89 df e8 b3 53 47 e1
    [   57.578722] RSP: 0018:ffff88885f845a08 EFLAGS: 00010202
    [   57.579207] RAX: 0000000000000002 RBX: ffff88812dfe8000 RCX: 0000000000000000
    [   57.579830] RDX: ffff88885f845a60 RSI: ffff8881022dc300 RDI: 0000000000000000
    [   57.580454] RBP: ffff88885f845a60 R08: 0000000000000001 R09: 0000000000000003
    [   57.581076] R10: 00000000ffff1300 R11: 0000000000000002 R12: 0000000000000000
    [   57.581695] R13: ffff8881047ffe00 R14: ffff888108dbee00 R15: ffff88814519b800
    [   57.582313] FS:  0000000000000000(0000) GS:ffff88885f840000(0000) knlGS:0000000000000000
    [   57.583040] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   57.583564] CR2: 000000c4206aa000 CR3: 0000000103847001 CR4: 0000000000370eb0
    [   57.584194] DR0: 0000000000000000 DR1: 0000000000000000 DR2:
    0000000000000000
    [   57.584820] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7:
    0000000000000400
    [   57.585440] Call Trace:
    [   57.585721]  <IRQ>
    [   57.585976]  ? __warn+0x7d/0x130
    [   57.586323]  ? br_nf_local_in+0x157/0x180 [br_netfilter]
    [   57.586811]  ? report_bug+0xf1/0x1c0
    [   57.587177]  ? handle_bug+0x3f/0x70
    [   57.587539]  ? exc_invalid_op+0x13/0x60
    [   57.587929]  ? asm_exc_invalid_op+0x16/0x20
    [   57.588336]  ? br_nf_local_in+0x157/0x180 [br_netfilter]
    [   57.588825]  nf_hook_slow+0x3d/0xd0
    [   57.589188]  ? br_handle_vlan+0x4b/0x110
    [   57.589579]  br_pass_frame_up+0xfc/0x150
    [   57.589970]  ? br_port_flags_change+0x40/0x40
    [   57.590396]  br_handle_frame_finish+0x346/0x5e0
    [   57.590837]  ? ipt_do_table+0x32e/0x430
    [   57.591221]  ? br_handle_local_finish+0x20/0x20
    [   57.591656]  br_nf_hook_thresh+0x4b/0xf0 [br_netfilter]
    [   57.592286]  ? br_handle_local_finish+0x20/0x20
    [   57.592802]  br_nf_pre_routing_finish+0x178/0x480 [br_netfilter]
    [   57.593348]  ? br_handle_local_finish+0x20/0x20
    [   57.593782]  ? nf_nat_ipv4_pre_routing+0x25/0x60 [nf_nat]
    [   57.594279]  br_nf_pre_routing+0x24c/0x550 [br_netfilter]
    [   57.594780]  ? br_nf_hook_thresh+0xf0/0xf0 [br_netfilter]
    [   57.595280]  br_handle_frame+0x1f3/0x3d0
    [   57.595676]  ? br_handle_local_finish+0x20/0x20
    [   57.596118]  ? br_handle_frame_finish+0x5e0/0x5e0
    [   57.596566]  __netif_receive_skb_core+0x25b/0xfc0
    [   57.597017]  ? __napi_build_skb+0x37/0x40
    [   57.597418]  __netif_receive_skb_list_core+0xfb/0x220
    
    Fixes: 62e7151ae3eb ("netfilter: bridge: confirm multicast packets before passing them up the stack")
    Reported-by: Jianbo Liu <jianbol@nvidia.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: flowtable: incorrect pppoe tuple [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Apr 11 00:09:00 2024 +0200

    netfilter: flowtable: incorrect pppoe tuple
    
    [ Upstream commit 6db5dc7b351b9569940cd1cf445e237c42cd6d27 ]
    
    pppoe traffic reaching ingress path does not match the flowtable entry
    because the pppoe header is expected to be at the network header offset.
    This bug causes a mismatch in the flow table lookup, so pppoe packets
    enter the classical forwarding path.
    
    Fixes: 72efd585f714 ("netfilter: flowtable: add pppoe support")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: flowtable: validate pppoe header [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Tue Apr 9 13:47:33 2024 +0200

    netfilter: flowtable: validate pppoe header
    
    [ Upstream commit 87b3593bed1868b2d9fe096c01bcdf0ea86cbebf ]
    
    Ensure there is sufficient room to access the protocol field of the
    PPPoe header. Validate it once before the flowtable lookup, then use a
    helper function to access protocol field.
    
    Reported-by: syzbot+b6f07e1c07ef40199081@syzkaller.appspotmail.com
    Fixes: 72efd585f714 ("netfilter: flowtable: add pppoe support")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: fix memleak in map from abort path [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Wed Apr 17 17:43:21 2024 +0200

    netfilter: nf_tables: fix memleak in map from abort path
    
    [ Upstream commit 86a1471d7cde792941109b93b558b5dc078b9ee9 ]
    
    The delete set command does not rely on the transaction object for
    element removal, therefore, a combination of delete element + delete set
    from the abort path could result in restoring twice the refcount of the
    mapping.
    
    Check for inactive element in the next generation for the delete element
    command in the abort path, skip restoring state if next generation bit
    has been already cleared. This is similar to the activate logic using
    the set walk iterator.
    
    [ 6170.286929] ------------[ cut here ]------------
    [ 6170.286939] WARNING: CPU: 6 PID: 790302 at net/netfilter/nf_tables_api.c:2086 nf_tables_chain_destroy+0x1f7/0x220 [nf_tables]
    [ 6170.287071] Modules linked in: [...]
    [ 6170.287633] CPU: 6 PID: 790302 Comm: kworker/6:2 Not tainted 6.9.0-rc3+ #365
    [ 6170.287768] RIP: 0010:nf_tables_chain_destroy+0x1f7/0x220 [nf_tables]
    [ 6170.287886] Code: df 48 8d 7d 58 e8 69 2e 3b df 48 8b 7d 58 e8 80 1b 37 df 48 8d 7d 68 e8 57 2e 3b df 48 8b 7d 68 e8 6e 1b 37 df 48 89 ef eb c4 <0f> 0b 48 83 c4 08 5b 5d 41 5c 41 5d 41 5e 41 5f c3 cc cc cc cc 0f
    [ 6170.287895] RSP: 0018:ffff888134b8fd08 EFLAGS: 00010202
    [ 6170.287904] RAX: 0000000000000001 RBX: ffff888125bffb28 RCX: dffffc0000000000
    [ 6170.287912] RDX: 0000000000000003 RSI: ffffffffa20298ab RDI: ffff88811ebe4750
    [ 6170.287919] RBP: ffff88811ebe4700 R08: ffff88838e812650 R09: fffffbfff0623a55
    [ 6170.287926] R10: ffffffff8311d2af R11: 0000000000000001 R12: ffff888125bffb10
    [ 6170.287933] R13: ffff888125bffb10 R14: dead000000000122 R15: dead000000000100
    [ 6170.287940] FS:  0000000000000000(0000) GS:ffff888390b00000(0000) knlGS:0000000000000000
    [ 6170.287948] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [ 6170.287955] CR2: 00007fd31fc00710 CR3: 0000000133f60004 CR4: 00000000001706f0
    [ 6170.287962] Call Trace:
    [ 6170.287967]  <TASK>
    [ 6170.287973]  ? __warn+0x9f/0x1a0
    [ 6170.287986]  ? nf_tables_chain_destroy+0x1f7/0x220 [nf_tables]
    [ 6170.288092]  ? report_bug+0x1b1/0x1e0
    [ 6170.287986]  ? nf_tables_chain_destroy+0x1f7/0x220 [nf_tables]
    [ 6170.288092]  ? report_bug+0x1b1/0x1e0
    [ 6170.288104]  ? handle_bug+0x3c/0x70
    [ 6170.288112]  ? exc_invalid_op+0x17/0x40
    [ 6170.288120]  ? asm_exc_invalid_op+0x1a/0x20
    [ 6170.288132]  ? nf_tables_chain_destroy+0x2b/0x220 [nf_tables]
    [ 6170.288243]  ? nf_tables_chain_destroy+0x1f7/0x220 [nf_tables]
    [ 6170.288366]  ? nf_tables_chain_destroy+0x2b/0x220 [nf_tables]
    [ 6170.288483]  nf_tables_trans_destroy_work+0x588/0x590 [nf_tables]
    
    Fixes: 591054469b3e ("netfilter: nf_tables: revisit chain/object refcounting from elements")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: Fix potential data-race in __nft_expr_type_get() [+ + +]
Author: Ziyang Xuan <william.xuanziyang@huawei.com>
Date:   Sun Apr 7 14:56:04 2024 +0800

    netfilter: nf_tables: Fix potential data-race in __nft_expr_type_get()
    
    [ Upstream commit f969eb84ce482331a991079ab7a5c4dc3b7f89bf ]
    
    nft_unregister_expr() can concurrent with __nft_expr_type_get(),
    and there is not any protection when iterate over nf_tables_expressions
    list in __nft_expr_type_get(). Therefore, there is potential data-race
    of nf_tables_expressions list entry.
    
    Use list_for_each_entry_rcu() to iterate over nf_tables_expressions
    list in __nft_expr_type_get(), and use rcu_read_lock() in the caller
    nft_expr_type_get() to protect the entire type query process.
    
    Fixes: ef1f7df9170d ("netfilter: nf_tables: expression ops overloading")
    Signed-off-by: Ziyang Xuan <william.xuanziyang@huawei.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: Fix potential data-race in __nft_obj_type_get() [+ + +]
Author: Ziyang Xuan <william.xuanziyang@huawei.com>
Date:   Sun Apr 7 14:56:05 2024 +0800

    netfilter: nf_tables: Fix potential data-race in __nft_obj_type_get()
    
    [ Upstream commit d78d867dcea69c328db30df665be5be7d0148484 ]
    
    nft_unregister_obj() can concurrent with __nft_obj_type_get(),
    and there is not any protection when iterate over nf_tables_objects
    list in __nft_obj_type_get(). Therefore, there is potential data-race
    of nf_tables_objects list entry.
    
    Use list_for_each_entry_rcu() to iterate over nf_tables_objects
    list in __nft_obj_type_get(), and use rcu_read_lock() in the caller
    nft_obj_type_get() to protect the entire type query process.
    
    Fixes: e50092404c1b ("netfilter: nf_tables: add stateful objects")
    Signed-off-by: Ziyang Xuan <william.xuanziyang@huawei.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: missing iterator type in lookup walk [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Wed Apr 17 17:43:01 2024 +0200

    netfilter: nf_tables: missing iterator type in lookup walk
    
    [ Upstream commit efefd4f00c967d00ad7abe092554ffbb70c1a793 ]
    
    Add missing decorator type to lookup expression and tighten WARN_ON_ONCE
    check in pipapo to spot earlier that this is unset.
    
    Fixes: 29b359cf6d95 ("netfilter: nft_set_pipapo: walk over current view on netlink dump")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: restore set elements when delete set fails [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Wed Apr 17 17:43:11 2024 +0200

    netfilter: nf_tables: restore set elements when delete set fails
    
    [ Upstream commit e79b47a8615d42c68aaeb68971593333667382ed ]
    
    From abort path, nft_mapelem_activate() needs to restore refcounters to
    the original state. Currently, it uses the set->ops->walk() to iterate
    over these set elements. The existing set iterator skips inactive
    elements in the next generation, this does not work from the abort path
    to restore the original state since it has to skip active elements
    instead (not inactive ones).
    
    This patch moves the check for inactive elements to the set iterator
    callback, then it reverses the logic for the .activate case which
    needs to skip active elements.
    
    Toggle next generation bit for elements when delete set command is
    invoked and call nft_clear() from .activate (abort) path to restore the
    next generation bit.
    
    The splat below shows an object in mappings memleak:
    
    [43929.457523] ------------[ cut here ]------------
    [43929.457532] WARNING: CPU: 0 PID: 1139 at include/net/netfilter/nf_tables.h:1237 nft_setelem_data_deactivate+0xe4/0xf0 [nf_tables]
    [...]
    [43929.458014] RIP: 0010:nft_setelem_data_deactivate+0xe4/0xf0 [nf_tables]
    [43929.458076] Code: 83 f8 01 77 ab 49 8d 7c 24 08 e8 37 5e d0 de 49 8b 6c 24 08 48 8d 7d 50 e8 e9 5c d0 de 8b 45 50 8d 50 ff 89 55 50 85 c0 75 86 <0f> 0b eb 82 0f 0b eb b3 0f 1f 40 00 90 90 90 90 90 90 90 90 90 90
    [43929.458081] RSP: 0018:ffff888140f9f4b0 EFLAGS: 00010246
    [43929.458086] RAX: 0000000000000000 RBX: ffff8881434f5288 RCX: dffffc0000000000
    [43929.458090] RDX: 00000000ffffffff RSI: ffffffffa26d28a7 RDI: ffff88810ecc9550
    [43929.458093] RBP: ffff88810ecc9500 R08: 0000000000000001 R09: ffffed10281f3e8f
    [43929.458096] R10: 0000000000000003 R11: ffff0000ffff0000 R12: ffff8881434f52a0
    [43929.458100] R13: ffff888140f9f5f4 R14: ffff888151c7a800 R15: 0000000000000002
    [43929.458103] FS:  00007f0c687c4740(0000) GS:ffff888390800000(0000) knlGS:0000000000000000
    [43929.458107] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [43929.458111] CR2: 00007f58dbe5b008 CR3: 0000000123602005 CR4: 00000000001706f0
    [43929.458114] Call Trace:
    [43929.458118]  <TASK>
    [43929.458121]  ? __warn+0x9f/0x1a0
    [43929.458127]  ? nft_setelem_data_deactivate+0xe4/0xf0 [nf_tables]
    [43929.458188]  ? report_bug+0x1b1/0x1e0
    [43929.458196]  ? handle_bug+0x3c/0x70
    [43929.458200]  ? exc_invalid_op+0x17/0x40
    [43929.458211]  ? nft_setelem_data_deactivate+0xd7/0xf0 [nf_tables]
    [43929.458271]  ? nft_setelem_data_deactivate+0xe4/0xf0 [nf_tables]
    [43929.458332]  nft_mapelem_deactivate+0x24/0x30 [nf_tables]
    [43929.458392]  nft_rhash_walk+0xdd/0x180 [nf_tables]
    [43929.458453]  ? __pfx_nft_rhash_walk+0x10/0x10 [nf_tables]
    [43929.458512]  ? rb_insert_color+0x2e/0x280
    [43929.458520]  nft_map_deactivate+0xdc/0x1e0 [nf_tables]
    [43929.458582]  ? __pfx_nft_map_deactivate+0x10/0x10 [nf_tables]
    [43929.458642]  ? __pfx_nft_mapelem_deactivate+0x10/0x10 [nf_tables]
    [43929.458701]  ? __rcu_read_unlock+0x46/0x70
    [43929.458709]  nft_delset+0xff/0x110 [nf_tables]
    [43929.458769]  nft_flush_table+0x16f/0x460 [nf_tables]
    [43929.458830]  nf_tables_deltable+0x501/0x580 [nf_tables]
    
    Fixes: 628bd3e49cba ("netfilter: nf_tables: drop map element references from preparation phase")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nft_set_pipapo: constify lookup fn args where possible [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Tue Feb 13 16:23:37 2024 +0100

    netfilter: nft_set_pipapo: constify lookup fn args where possible
    
    [ Upstream commit f04df573faf90bb828a2241b650598c02c074323 ]
    
    Those get called from packet path, content must not be modified.
    No functional changes intended.
    
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Stable-dep-of: 29b359cf6d95 ("netfilter: nft_set_pipapo: walk over current view on netlink dump")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nft_set_pipapo: do not free live element [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Wed Apr 10 21:05:13 2024 +0200

    netfilter: nft_set_pipapo: do not free live element
    
    [ Upstream commit 3cfc9ec039af60dbd8965ae085b2c2ccdcfbe1cc ]
    
    Pablo reports a crash with large batches of elements with a
    back-to-back add/remove pattern.  Quoting Pablo:
    
      add_elem("00000000") timeout 100 ms
      ...
      add_elem("0000000X") timeout 100 ms
      del_elem("0000000X") <---------------- delete one that was just added
      ...
      add_elem("00005000") timeout 100 ms
    
      1) nft_pipapo_remove() removes element 0000000X
      Then, KASAN shows a splat.
    
    Looking at the remove function there is a chance that we will drop a
    rule that maps to a non-deactivated element.
    
    Removal happens in two steps, first we do a lookup for key k and return the
    to-be-removed element and mark it as inactive in the next generation.
    Then, in a second step, the element gets removed from the set/map.
    
    The _remove function does not work correctly if we have more than one
    element that share the same key.
    
    This can happen if we insert an element into a set when the set already
    holds an element with same key, but the element mapping to the existing
    key has timed out or is not active in the next generation.
    
    In such case its possible that removal will unmap the wrong element.
    If this happens, we will leak the non-deactivated element, it becomes
    unreachable.
    
    The element that got deactivated (and will be freed later) will
    remain reachable in the set data structure, this can result in
    a crash when such an element is retrieved during lookup (stale
    pointer).
    
    Add a check that the fully matching key does in fact map to the element
    that we have marked as inactive in the deactivation step.
    If not, we need to continue searching.
    
    Add a bug/warn trap at the end of the function as well, the remove
    function must not ever be called with an invisible/unreachable/non-existent
    element.
    
    v2: avoid uneeded temporary variable (Stefano)
    
    Fixes: 3c4287f62044 ("nf_tables: Add set type for arbitrary concatenation of ranges")
    Reported-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nft_set_pipapo: walk over current view on netlink dump [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Wed Apr 10 18:50:45 2024 +0200

    netfilter: nft_set_pipapo: walk over current view on netlink dump
    
    [ Upstream commit 29b359cf6d95fd60730533f7f10464e95bd17c73 ]
    
    The generation mask can be updated while netlink dump is in progress.
    The pipapo set backend walk iterator cannot rely on it to infer what
    view of the datastructure is to be used. Add notation to specify if user
    wants to read/update the set.
    
    Based on patch from Florian Westphal.
    
    Fixes: 2b84e215f874 ("netfilter: nft_set_pipapo: .walk does not deal with generations")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
NFSD: fix endianness issue in nfsd4_encode_fattr4 [+ + +]
Author: Vasily Gorbik <gor@linux.ibm.com>
Date:   Thu Apr 11 11:45:57 2024 +0200

    NFSD: fix endianness issue in nfsd4_encode_fattr4
    
    [ Upstream commit f488138b526715c6d2568d7329c4477911be4210 ]
    
    The nfs4 mount fails with EIO on 64-bit big endian architectures since
    v6.7. The issue arises from employing a union in the nfsd4_encode_fattr4()
    function to overlay a 32-bit array with a 64-bit values based bitmap,
    which does not function as intended. Address the endianness issue by
    utilizing bitmap_from_arr32() to copy 32-bit attribute masks into a
    bitmap in an endianness-agnostic manner.
    
    Cc: stable@vger.kernel.org
    Fixes: fce7913b13d0 ("NFSD: Use a bitmask loop to encode FATTR4 results")
    Link: https://bugs.launchpad.net/ubuntu/+source/nfs-utils/+bug/2060217
    Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nilfs2: fix OOB in nilfs_set_de_type [+ + +]
Author: Jeongjun Park <aha310510@gmail.com>
Date:   Tue Apr 16 03:20:48 2024 +0900

    nilfs2: fix OOB in nilfs_set_de_type
    
    commit c4a7dc9523b59b3e73fd522c73e95e072f876b16 upstream.
    
    The size of the nilfs_type_by_mode array in the fs/nilfs2/dir.c file is
    defined as "S_IFMT >> S_SHIFT", but the nilfs_set_de_type() function,
    which uses this array, specifies the index to read from the array in the
    same way as "(mode & S_IFMT) >> S_SHIFT".
    
    static void nilfs_set_de_type(struct nilfs_dir_entry *de, struct inode
     *inode)
    {
            umode_t mode = inode->i_mode;
    
            de->file_type = nilfs_type_by_mode[(mode & S_IFMT)>>S_SHIFT]; // oob
    }
    
    However, when the index is determined this way, an out-of-bounds (OOB)
    error occurs by referring to an index that is 1 larger than the array size
    when the condition "mode & S_IFMT == S_IFMT" is satisfied.  Therefore, a
    patch to resize the nilfs_type_by_mode array should be applied to prevent
    OOB errors.
    
    Link: https://lkml.kernel.org/r/20240415182048.7144-1-konishi.ryusuke@gmail.com
    Reported-by: syzbot+2e22057de05b9f3b30d8@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=2e22057de05b9f3b30d8
    Fixes: 2ba466d74ed7 ("nilfs2: directory entry operations")
    Signed-off-by: Jeongjun Park <aha310510@gmail.com>
    Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Tested-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nouveau: fix instmem race condition around ptr stores [+ + +]
Author: Dave Airlie <airlied@redhat.com>
Date:   Thu Apr 11 11:15:09 2024 +1000

    nouveau: fix instmem race condition around ptr stores
    
    commit fff1386cc889d8fb4089d285f883f8cba62d82ce upstream.
    
    Running a lot of VK CTS in parallel against nouveau, once every
    few hours you might see something like this crash.
    
    BUG: kernel NULL pointer dereference, address: 0000000000000008
    PGD 8000000114e6e067 P4D 8000000114e6e067 PUD 109046067 PMD 0
    Oops: 0000 [#1] PREEMPT SMP PTI
    CPU: 7 PID: 53891 Comm: deqp-vk Not tainted 6.8.0-rc6+ #27
    Hardware name: Gigabyte Technology Co., Ltd. Z390 I AORUS PRO WIFI/Z390 I AORUS PRO WIFI-CF, BIOS F8 11/05/2021
    RIP: 0010:gp100_vmm_pgt_mem+0xe3/0x180 [nouveau]
    Code: c7 48 01 c8 49 89 45 58 85 d2 0f 84 95 00 00 00 41 0f b7 46 12 49 8b 7e 08 89 da 42 8d 2c f8 48 8b 47 08 41 83 c7 01 48 89 ee <48> 8b 40 08 ff d0 0f 1f 00 49 8b 7e 08 48 89 d9 48 8d 75 04 48 c1
    RSP: 0000:ffffac20c5857838 EFLAGS: 00010202
    RAX: 0000000000000000 RBX: 00000000004d8001 RCX: 0000000000000001
    RDX: 00000000004d8001 RSI: 00000000000006d8 RDI: ffffa07afe332180
    RBP: 00000000000006d8 R08: ffffac20c5857ad0 R09: 0000000000ffff10
    R10: 0000000000000001 R11: ffffa07af27e2de0 R12: 000000000000001c
    R13: ffffac20c5857ad0 R14: ffffa07a96fe9040 R15: 000000000000001c
    FS:  00007fe395eed7c0(0000) GS:ffffa07e2c980000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000000008 CR3: 000000011febe001 CR4: 00000000003706f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
    
    ...
    
     ? gp100_vmm_pgt_mem+0xe3/0x180 [nouveau]
     ? gp100_vmm_pgt_mem+0x37/0x180 [nouveau]
     nvkm_vmm_iter+0x351/0xa20 [nouveau]
     ? __pfx_nvkm_vmm_ref_ptes+0x10/0x10 [nouveau]
     ? __pfx_gp100_vmm_pgt_mem+0x10/0x10 [nouveau]
     ? __pfx_gp100_vmm_pgt_mem+0x10/0x10 [nouveau]
     ? __lock_acquire+0x3ed/0x2170
     ? __pfx_gp100_vmm_pgt_mem+0x10/0x10 [nouveau]
     nvkm_vmm_ptes_get_map+0xc2/0x100 [nouveau]
     ? __pfx_nvkm_vmm_ref_ptes+0x10/0x10 [nouveau]
     ? __pfx_gp100_vmm_pgt_mem+0x10/0x10 [nouveau]
     nvkm_vmm_map_locked+0x224/0x3a0 [nouveau]
    
    Adding any sort of useful debug usually makes it go away, so I hand
    wrote the function in a line, and debugged the asm.
    
    Every so often pt->memory->ptrs is NULL. This ptrs ptr is set in
    the nv50_instobj_acquire called from nvkm_kmap.
    
    If Thread A and Thread B both get to nv50_instobj_acquire around
    the same time, and Thread A hits the refcount_set line, and in
    lockstep thread B succeeds at refcount_inc_not_zero, there is a
    chance the ptrs value won't have been stored since refcount_set
    is unordered. Force a memory barrier here, I picked smp_mb, since
    we want it on all CPUs and it's write followed by a read.
    
    v2: use paired smp_rmb/smp_wmb.
    
    Cc: <stable@vger.kernel.org>
    Fixes: be55287aa5ba ("drm/nouveau/imem/nv50: embed nvkm_instobj directly into nv04_instobj")
    Signed-off-by: Dave Airlie <airlied@redhat.com>
    Signed-off-by: Danilo Krummrich <dakr@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240411011510.2546857-1-airlied@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
octeontx2-pf: fix FLOW_DIS_IS_FRAGMENT implementation [+ + +]
Author: Asbjørn Sloth Tønnesen <ast@fiberby.net>
Date:   Fri Apr 12 12:02:56 2024 +0000

    octeontx2-pf: fix FLOW_DIS_IS_FRAGMENT implementation
    
    [ Upstream commit 75ce9506ee3dc66648a7d74ab3b0acfa364d6d43 ]
    
    Upon reviewing the flower control flags handling in
    this driver, I notice that the key wasn't being used,
    only the mask.
    
    Ie. `tc flower ... ip_flags nofrag` was hardware
    offloaded as `... ip_flags frag`.
    
    Only compile tested, no access to HW.
    
    Fixes: c672e3727989 ("octeontx2-pf: Add support to filter packet based on IP fragment")
    Signed-off-by: Asbjørn Sloth Tønnesen <ast@fiberby.net>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf annotate: Make sure to call symbol__annotate2() in TUI [+ + +]
Author: Namhyung Kim <namhyung@kernel.org>
Date:   Fri Apr 5 14:17:57 2024 -0700

    perf annotate: Make sure to call symbol__annotate2() in TUI
    
    [ Upstream commit 2b8dbf69ec60faf6c7db49e57d7f316409ccec92 ]
    
    The symbol__annotate2() initializes some data structures needed by TUI.
    It has a logic to prevent calling it multiple times by checking if it
    has the annotated source.  But data type profiling uses a different
    code (symbol__annotate) to allocate the annotated lines in advance.
    So TUI missed to call symbol__annotate2() when it shows the annotation
    browser.
    
    Make symbol__annotate() reentrant and handle that situation properly.
    This fixes a crash in the annotation browser started by perf report in
    TUI like below.
    
      $ perf report -s type,sym --tui
      # and press 'a' key and then move down
    
    Fixes: 81e57deec325 ("perf report: Support data type profiling")
    Reviewed-by: Ian Rogers <irogers@google.com>
    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    Link: https://lore.kernel.org/r/20240405211800.1412920-2-namhyung@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf lock contention: Add a missing NULL check [+ + +]
Author: Namhyung Kim <namhyung@kernel.org>
Date:   Tue Apr 9 15:55:42 2024 -0700

    perf lock contention: Add a missing NULL check
    
    [ Upstream commit f3408580bac8ce5cd76e7391e529c0a22e7c7eb2 ]
    
    I got a report for a failure in BPF verifier on a recent kernel with
    perf lock contention command.  It checks task->sighand->siglock without
    checking if sighand is NULL or not.  Let's add one.
    
      ; if (&curr->sighand->siglock == (void *)lock)
      265: (79) r1 = *(u64 *)(r0 +2624)     ; frame1: R0_w=trusted_ptr_task_struct(off=0,imm=0)
                                            ;         R1_w=rcu_ptr_or_null_sighand_struct(off=0,imm=0)
      266: (b7) r2 = 0                      ; frame1: R2_w=0
      267: (0f) r1 += r2
      R1 pointer arithmetic on rcu_ptr_or_null_ prohibited, null-check it first
      processed 164 insns (limit 1000000) max_states_per_insn 1 total_states 15 peak_states 15 mark_read 5
      -- END PROG LOAD LOG --
      libbpf: prog 'contention_end': failed to load: -13
      libbpf: failed to load object 'lock_contention_bpf'
      libbpf: failed to load BPF skeleton 'lock_contention_bpf': -13
      Failed to load lock-contention BPF skeleton
      lock contention BPF setup failed
      lock contention did not detect any lock contention
    
    Fixes: 1811e82767dcc ("perf lock contention: Track and show siglock with address")
    Reviewed-by: Ian Rogers <irogers@google.com>
    Acked-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Song Liu <song@kernel.org>
    Cc: bpf@vger.kernel.org
    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    Link: https://lore.kernel.org/r/20240409225542.1870999-1-namhyung@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
platform/x86/amd/pmc: Extend Framework 13 quirk to more BIOSes [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Wed Apr 10 09:10:46 2024 -0500

    platform/x86/amd/pmc: Extend Framework 13 quirk to more BIOSes
    
    [ Upstream commit f609e7b1b49e4d15cf107d2069673ee63860c398 ]
    
    BIOS 03.05 still hasn't fixed the spurious IRQ1 issue.  As it's still
    being worked on there is still a possibility that it won't need to
    apply to future BIOS releases.
    
    Add a quirk for BIOS 03.05 as well.
    
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20240410141046.433-1-mario.limonciello@amd.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
r8169: add missing conditional compiling for call to r8169_remove_leds [+ + +]
Author: Heiner Kallweit <hkallweit1@gmail.com>
Date:   Wed Apr 10 15:11:28 2024 +0200

    r8169: add missing conditional compiling for call to r8169_remove_leds
    
    commit 97e176fcbbf3c0f2bd410c9b241177c051f57176 upstream.
    
    Add missing dependency on CONFIG_R8169_LEDS. As-is a link error occurs
    if config option CONFIG_R8169_LEDS isn't enabled.
    
    Fixes: 19fa4f2a85d7 ("r8169: fix LED-related deadlock on module removal")
    Reported-by: Venkat Rao Bagalkote <venkat88@linux.vnet.ibm.com>
    Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
    Tested-By: Venkat Rao Bagalkote <venkat88@linux.vnet.ibm.com>
    Link: https://lore.kernel.org/r/d080038c-eb6b-45ac-9237-b8c1cdd7870f@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

r8169: fix LED-related deadlock on module removal [+ + +]
Author: Heiner Kallweit <hkallweit1@gmail.com>
Date:   Mon Apr 8 20:47:40 2024 +0200

    r8169: fix LED-related deadlock on module removal
    
    commit 19fa4f2a85d777a8052e869c1b892a2f7556569d upstream.
    
    Binding devm_led_classdev_register() to the netdev is problematic
    because on module removal we get a RTNL-related deadlock. Fix this
    by avoiding the device-managed LED functions.
    
    Note: We can safely call led_classdev_unregister() for a LED even
    if registering it failed, because led_classdev_unregister() detects
    this and is a no-op in this case.
    
    Fixes: 18764b883e15 ("r8169: add support for LED's on RTL8168/RTL8101")
    Cc: stable@vger.kernel.org
    Reported-by: Lukas Wunner <lukas@wunner.de>
    Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
random: handle creditable entropy from atomic process context [+ + +]
Author: Jason A. Donenfeld <Jason@zx2c4.com>
Date:   Wed Apr 17 13:38:29 2024 +0200

    random: handle creditable entropy from atomic process context
    
    commit e871abcda3b67d0820b4182ebe93435624e9c6a4 upstream.
    
    The entropy accounting changes a static key when the RNG has
    initialized, since it only ever initializes once. Static key changes,
    however, cannot be made from atomic context, so depending on where the
    last creditable entropy comes from, the static key change might need to
    be deferred to a worker.
    
    Previously the code used the execute_in_process_context() helper
    function, which accounts for whether or not the caller is
    in_interrupt(). However, that doesn't account for the case where the
    caller is actually in process context but is holding a spinlock.
    
    This turned out to be the case with input_handle_event() in
    drivers/input/input.c contributing entropy:
    
      [<ffffffd613025ba0>] die+0xa8/0x2fc
      [<ffffffd613027428>] bug_handler+0x44/0xec
      [<ffffffd613016964>] brk_handler+0x90/0x144
      [<ffffffd613041e58>] do_debug_exception+0xa0/0x148
      [<ffffffd61400c208>] el1_dbg+0x60/0x7c
      [<ffffffd61400c000>] el1h_64_sync_handler+0x38/0x90
      [<ffffffd613011294>] el1h_64_sync+0x64/0x6c
      [<ffffffd613102d88>] __might_resched+0x1fc/0x2e8
      [<ffffffd613102b54>] __might_sleep+0x44/0x7c
      [<ffffffd6130b6eac>] cpus_read_lock+0x1c/0xec
      [<ffffffd6132c2820>] static_key_enable+0x14/0x38
      [<ffffffd61400ac08>] crng_set_ready+0x14/0x28
      [<ffffffd6130df4dc>] execute_in_process_context+0xb8/0xf8
      [<ffffffd61400ab30>] _credit_init_bits+0x118/0x1dc
      [<ffffffd6138580c8>] add_timer_randomness+0x264/0x270
      [<ffffffd613857e54>] add_input_randomness+0x38/0x48
      [<ffffffd613a80f94>] input_handle_event+0x2b8/0x490
      [<ffffffd613a81310>] input_event+0x6c/0x98
    
    According to Guoyong, it's not really possible to refactor the various
    drivers to never hold a spinlock there. And in_atomic() isn't reliable.
    
    So, rather than trying to be too fancy, just punt the change in the
    static key to a workqueue always. There's basically no drawback of doing
    this, as the code already needed to account for the static key not
    changing immediately, and given that it's just an optimization, there's
    not exactly a hurry to change the static key right away, so deferal is
    fine.
    
    Reported-by: Guoyong Wang <guoyong.wang@mediatek.com>
    Cc: stable@vger.kernel.org
    Fixes: f5bda35fba61 ("random: use static branch for crng_ready()")
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ravb: Group descriptor types used in Rx ring [+ + +]
Author: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Date:   Mon Mar 4 12:08:53 2024 +0100

    ravb: Group descriptor types used in Rx ring
    
    [ Upstream commit 4123c3fbf8632e5c553222bf1c10b3a3e0a8dc06 ]
    
    The Rx ring can either be made up of normal or extended descriptors, not
    a mix of the two at the same time. Make this explicit by grouping the
    two variables in a rx_ring union.
    
    The extension of the storage for more than one queue of normal
    descriptors from a single to NUM_RX_QUEUE queues have no practical
    effect. But aids in making the code readable as the code that uses it
    already piggyback on other members of struct ravb_private that are
    arrays of max length NUM_RX_QUEUE, e.g. rx_desc_dma. This will also make
    further refactoring easier.
    
    While at it, rename the normal descriptor Rx ring to make it clear it's
    not strictly related to the GbEthernet E-MAC IP found in RZ/G2L, normal
    descriptors could be used on R-Car SoCs too.
    
    Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
    Reviewed-by: Paul Barker <paul.barker.ct@bp.renesas.com>
    Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: def52db470df ("net: ravb: Count packets instead of descriptors in R-Car RX path")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/cm: Print the old state when cm_destroy_id gets timeout [+ + +]
Author: Mark Zhang <markzhang@nvidia.com>
Date:   Fri Mar 22 13:20:49 2024 +0200

    RDMA/cm: Print the old state when cm_destroy_id gets timeout
    
    [ Upstream commit b68e1acb5834ed1a2ad42d9d002815a8bae7c0b6 ]
    
    The old state is helpful for debugging, as the current state is always
    IB_CM_IDLE when timeout happens.
    
    Fixes: 96d9cbe2f2ff ("RDMA/cm: add timeout to cm_destroy_id wait")
    Signed-off-by: Mark Zhang <markzhang@nvidia.com>
    Link: https://lore.kernel.org/r/20240322112049.2022994-1-markzhang@nvidia.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/mlx5: Fix port number for counter query in multi-port configuration [+ + +]
Author: Michael Guralnik <michaelgur@nvidia.com>
Date:   Wed Apr 3 12:03:46 2024 +0300

    RDMA/mlx5: Fix port number for counter query in multi-port configuration
    
    [ Upstream commit be121ffb384f53e966ee7299ffccc6eeb61bc73d ]
    
    Set the correct port when querying PPCNT in multi-port configuration.
    Distinguish between cases where switchdev mode was enabled to multi-port
    configuration and don't overwrite the queried port to 1 in multi-port
    case.
    
    Fixes: 74b30b3ad5ce ("RDMA/mlx5: Set local port to one when accessing counters")
    Signed-off-by: Michael Guralnik <michaelgur@nvidia.com>
    Link: https://lore.kernel.org/r/9bfcc8ade958b760a51408c3ad654a01b11f7d76.1712134988.git.leon@kernel.org
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/rxe: Fix the problem "mutex_destroy missing" [+ + +]
Author: Yanjun.Zhu <yanjun.zhu@linux.dev>
Date:   Thu Mar 14 07:51:40 2024 +0100

    RDMA/rxe: Fix the problem "mutex_destroy missing"
    
    [ Upstream commit 481047d7e8391d3842ae59025806531cdad710d9 ]
    
    When a mutex lock is not used any more, the function mutex_destroy
    should be called to mark the mutex lock uninitialized.
    
    Fixes: 8700e3e7c485 ("Soft RoCE driver")
    Signed-off-by: Yanjun.Zhu <yanjun.zhu@linux.dev>
    Link: https://lore.kernel.org/r/20240314065140.27468-1-yanjun.zhu@linux.dev
    Reviewed-by: Daisuke Matsuda <matsuda-daisuke@fujitsu.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Revert "mei: vsc: Call wake_up() in the threaded IRQ handler" [+ + +]
Author: Sakari Ailus <sakari.ailus@linux.intel.com>
Date:   Wed Apr 3 13:13:40 2024 +0800

    Revert "mei: vsc: Call wake_up() in the threaded IRQ handler"
    
    commit e3dc66d998d2b0c2734db9ca1d6c94c97349529a upstream.
    
    This reverts commit 058a38acba15fd8e7b262ec6e17c4204cb15f984.
    
    It's not necessary to avoid a spinlock, a sleeping lock on PREEMPT_RT, in
    an interrupt handler as the interrupt handler itself would be called in a
    process context if PREEMPT_RT is enabled. So revert the patch.
    
    Cc: stable@vger.kernel.org # for 6.8
    Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Acked-by: Tomas Winkler <tomas.winkler@intel.com>
    Link: https://lore.kernel.org/r/20240403051341.3534650-1-wentong.wu@intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "usb: cdc-wdm: close race between read and workqueue" [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu Apr 18 16:33:28 2024 +0200

    Revert "usb: cdc-wdm: close race between read and workqueue"
    
    commit 1607830dadeefc407e4956336d9fcd9e9defd810 upstream.
    
    This reverts commit 339f83612f3a569b194680768b22bf113c26a29d.
    
    It has been found to cause problems in a number of Chromebook devices,
    so revert the change until it can be brought back in a safe way.
    
    Link: https://lore.kernel.org/r/385a3519-b45d-48c5-a6fd-a3fdb6bec92f@chromium.org
    Reported-by:: Aleksander Morgado <aleksandermj@chromium.org>
    Fixes: 339f83612f3a ("usb: cdc-wdm: close race between read and workqueue")
    Cc: stable <stable@kernel.org>
    Cc: Oliver Neukum <oneukum@suse.com>
    Cc: Bjørn Mork <bjorn@mork.no>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "vmgenid: emit uevent when VMGENID updates" [+ + +]
Author: Jason A. Donenfeld <Jason@zx2c4.com>
Date:   Thu Apr 18 13:45:17 2024 +0200

    Revert "vmgenid: emit uevent when VMGENID updates"
    
    commit 3aadf100f93d80815685493d60cd8cab206403df upstream.
    
    This reverts commit ad6bcdad2b6724e113f191a12f859a9e8456b26d. I had
    nak'd it, and Greg said on the thread that it links that he wasn't going
    to take it either, especially since it's not his code or his tree, but
    then, seemingly accidentally, it got pushed up some months later, in
    what looks like a mistake, with no further discussion in the linked
    thread. So revert it, since it's clearly not intended.
    
    Fixes: ad6bcdad2b67 ("vmgenid: emit uevent when VMGENID updates")
    Cc: stable@vger.kernel.org
    Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Link: https://lore.kernel.org/r/20230531095119.11202-2-bchalios@amazon.es
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
s390/cio: fix race condition during online processing [+ + +]
Author: Peter Oberparleiter <oberpar@linux.ibm.com>
Date:   Wed Apr 10 11:46:19 2024 +0200

    s390/cio: fix race condition during online processing
    
    [ Upstream commit 2d8527f2f911fab84aec04df4788c0c23af3df48 ]
    
    A race condition exists in ccw_device_set_online() that can cause the
    online process to fail, leaving the affected device in an inconsistent
    state. As a result, subsequent attempts to set that device online fail
    with return code ENODEV.
    
    The problem occurs when a path verification request arrives after
    a wait for final device state completed, but before the result state
    is evaluated.
    
    Fix this by ensuring that the CCW-device lock is held between
    determining final state and checking result state.
    
    Note that since:
    
    commit 2297791c92d0 ("s390/cio: dont unregister subchannel from child-drivers")
    
    path verification requests are much more likely to occur during boot,
    resulting in an increased chance of this race condition occurring.
    
    Fixes: 2297791c92d0 ("s390/cio: dont unregister subchannel from child-drivers")
    Reviewed-by: Alexandra Winter <wintera@linux.ibm.com>
    Reviewed-by: Vineeth Vijayan <vneethv@linux.ibm.com>
    Signed-off-by: Peter Oberparleiter <oberpar@linux.ibm.com>
    Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/ism: Properly fix receive message buffer allocation [+ + +]
Author: Gerd Bayer <gbayer@linux.ibm.com>
Date:   Mon Apr 15 15:15:07 2024 +0200

    s390/ism: Properly fix receive message buffer allocation
    
    [ Upstream commit 83781384a96b95e2b6403d3c8a002b2c89031770 ]
    
    Since [1], dma_alloc_coherent() does not accept requests for GFP_COMP
    anymore, even on archs that may be able to fulfill this. Functionality that
    relied on the receive buffer being a compound page broke at that point:
    The SMC-D protocol, that utilizes the ism device driver, passes receive
    buffers to the splice processor in a struct splice_pipe_desc with a
    single entry list of struct pages. As the buffer is no longer a compound
    page, the splice processor now rejects requests to handle more than a
    page worth of data.
    
    Replace dma_alloc_coherent() and allocate a buffer with folio_alloc and
    create a DMA map for it with dma_map_page(). Since only receive buffers
    on ISM devices use DMA, qualify the mapping as FROM_DEVICE.
    Since ISM devices are available on arch s390, only, and on that arch all
    DMA is coherent, there is no need to introduce and export some kind of
    dma_sync_to_cpu() method to be called by the SMC-D protocol layer.
    
    Analogously, replace dma_free_coherent by a two step dma_unmap_page,
    then folio_put to free the receive buffer.
    
    [1] https://lore.kernel.org/all/20221113163535.884299-1-hch@lst.de/
    
    Fixes: c08004eede4b ("s390/ism: don't pass bogus GFP_ flags to dma_alloc_coherent")
    Signed-off-by: Gerd Bayer <gbayer@linux.ibm.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/qdio: handle deferred cc1 [+ + +]
Author: Peter Oberparleiter <oberpar@linux.ibm.com>
Date:   Wed Apr 10 11:46:18 2024 +0200

    s390/qdio: handle deferred cc1
    
    [ Upstream commit 607638faf2ff1cede37458111496e7cc6c977f6f ]
    
    A deferred condition code 1 response indicates that I/O was not started
    and should be retried. The current QDIO implementation handles a cc1
    response as I/O error, resulting in a failed QDIO setup. This can happen
    for example when a path verification request arrives at the same time
    as QDIO setup I/O is started.
    
    Fix this by retrying the QDIO setup I/O when a cc1 response is received.
    
    Note that since
    
    commit 2297791c92d0 ("s390/cio: dont unregister subchannel from child-drivers")
    commit 5ef1dc40ffa6 ("s390/cio: fix invalid -EBUSY on ccw_device_start")
    
    deferred cc1 responses are much more likely to occur. See the commit
    message of the latter for more background information.
    
    Fixes: 2297791c92d0 ("s390/cio: dont unregister subchannel from child-drivers")
    Reviewed-by: Alexandra Winter <wintera@linux.ibm.com>
    Signed-off-by: Peter Oberparleiter <oberpar@linux.ibm.com>
    Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sched: Add missing memory barrier in switch_mm_cid [+ + +]
Author: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Date:   Mon Apr 15 11:21:13 2024 -0400

    sched: Add missing memory barrier in switch_mm_cid
    
    commit fe90f3967bdb3e13f133e5f44025e15f943a99c5 upstream.
    
    Many architectures' switch_mm() (e.g. arm64) do not have an smp_mb()
    which the core scheduler code has depended upon since commit:
    
        commit 223baf9d17f25 ("sched: Fix performance regression introduced by mm_cid")
    
    If switch_mm() doesn't call smp_mb(), sched_mm_cid_remote_clear() can
    unset the actively used cid when it fails to observe active task after it
    sets lazy_put.
    
    There *is* a memory barrier between storing to rq->curr and _return to
    userspace_ (as required by membarrier), but the rseq mm_cid has stricter
    requirements: the barrier needs to be issued between store to rq->curr
    and switch_mm_cid(), which happens earlier than:
    
      - spin_unlock(),
      - switch_to().
    
    So it's fine when the architecture switch_mm() happens to have that
    barrier already, but less so when the architecture only provides the
    full barrier in switch_to() or spin_unlock().
    
    It is a bug in the rseq switch_mm_cid() implementation. All architectures
    that don't have memory barriers in switch_mm(), but rather have the full
    barrier either in finish_lock_switch() or switch_to() have them too late
    for the needs of switch_mm_cid().
    
    Introduce a new smp_mb__after_switch_mm(), defined as smp_mb() in the
    generic barrier.h header, and use it in switch_mm_cid() for scheduler
    transitions where switch_mm() is expected to provide a memory barrier.
    
    Architectures can override smp_mb__after_switch_mm() if their
    switch_mm() implementation provides an implicit memory barrier.
    Override it with a no-op on x86 which implicitly provide this memory
    barrier by writing to CR3.
    
    Fixes: 223baf9d17f2 ("sched: Fix performance regression introduced by mm_cid")
    Reported-by: levi.yun <yeoreum.yun@arm.com>
    Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> # for arm64
    Acked-by: Dave Hansen <dave.hansen@linux.intel.com> # for x86
    Cc: <stable@vger.kernel.org> # 6.4.x
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Link: https://lore.kernel.org/r/20240415152114.59122-2-mathieu.desnoyers@efficios.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
scsi: core: Fix handling of SCMD_FAIL_IF_RECOVERING [+ + +]
Author: Bart Van Assche <bvanassche@acm.org>
Date:   Mon Mar 25 15:44:17 2024 -0700

    scsi: core: Fix handling of SCMD_FAIL_IF_RECOVERING
    
    commit ca91259b775f6fd98ae5d23bb4eec101d468ba8d upstream.
    
    There is code in the SCSI core that sets the SCMD_FAIL_IF_RECOVERING
    flag but there is no code that clears this flag. Instead of only clearing
    SCMD_INITIALIZED in scsi_end_request(), clear all flags. It is never
    necessary to preserve any command flags inside scsi_end_request().
    
    Cc: stable@vger.kernel.org
    Fixes: 310bcaef6d7e ("scsi: core: Support failing requests while recovering")
    Signed-off-by: Bart Van Assche <bvanassche@acm.org>
    Link: https://lore.kernel.org/r/20240325224417.1477135-1-bvanassche@acm.org
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: ufs: qcom: Add missing interconnect bandwidth values for Gear 5 [+ + +]
Author: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Date:   Wed Apr 3 18:50:03 2024 +0530

    scsi: ufs: qcom: Add missing interconnect bandwidth values for Gear 5
    
    [ Upstream commit 8db8f6ce556af60ca9a9fd5e826d369ded70fcc7 ]
    
    These entries are necessary to scale the interconnect bandwidth while
    operating in Gear 5.
    
    Cc: Amit Pundir <amit.pundir@linaro.org>
    Fixes: 03ce80a1bb86 ("scsi: ufs: qcom: Add support for scaling interconnects")
    Tested-by: Amit Pundir <amit.pundir@linaro.org>
    Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
    Link: https://lore.kernel.org/r/20240403-ufs-icc-fix-v2-1-958412a5eb45@linaro.org
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests/ftrace: Limit length in subsystem-enable tests [+ + +]
Author: Yuanhe Shu <xiangzao@linux.alibaba.com>
Date:   Mon Feb 26 11:18:16 2024 +0800

    selftests/ftrace: Limit length in subsystem-enable tests
    
    commit 1a4ea83a6e67f1415a1f17c1af5e9c814c882bb5 upstream.
    
    While sched* events being traced and sched* events continuously happen,
    "[xx] event tracing - enable/disable with subsystem level files" would
    not stop as on some slower systems it seems to take forever.
    Select the first 100 lines of output would be enough to judge whether
    there are more than 3 types of sched events.
    
    Fixes: 815b18ea66d6 ("ftracetest: Add basic event tracing test cases")
    Cc: stable@vger.kernel.org
    Signed-off-by: Yuanhe Shu <xiangzao@linux.alibaba.com>
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
selftests/powerpc/papr-vpd: Fix missing variable initialization [+ + +]
Author: Nathan Lynch <nathanl@linux.ibm.com>
Date:   Thu Apr 4 17:02:09 2024 -0500

    selftests/powerpc/papr-vpd: Fix missing variable initialization
    
    [ Upstream commit 210cfef579260ed6c3b700e7baeae51a5e183f43 ]
    
    The "close handle without consuming VPD" testcase has inconsistent
    results because it fails to initialize the location code object it
    passes to ioctl() to create a VPD handle. Initialize the location code
    to the empty string as intended.
    
    Signed-off-by: Nathan Lynch <nathanl@linux.ibm.com>
    Fixes: 9118c5d32bdd ("powerpc/selftests: Add test for papr-vpd")
    Reported-by: Geetika Moolchandani <geetika@linux.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20240404-papr-vpd-test-uninit-lc-v2-1-37bff46c65a5@linux.ibm.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests/tcp_ao: Fix fscanf() call for format-security [+ + +]
Author: Dmitry Safonov <0x7f454c46@gmail.com>
Date:   Sat Apr 13 02:42:54 2024 +0100

    selftests/tcp_ao: Fix fscanf() call for format-security
    
    [ Upstream commit beb78cd1329d039d73487ca05633d1b92e1ab2ea ]
    
    On my new laptop with packages from nixos-unstable, gcc 12.3.0 produces:
    > lib/proc.c: In function ‘netstat_read_type’:
    > lib/proc.c:89:9: error: format not a string literal and no format arguments [-Werror=format-security]
    >    89 |         if (fscanf(fnetstat, type->header_name) == EOF)
    >       |         ^~
    > cc1: some warnings being treated as errors
    
    Here the selftests lib parses header name, while expectes non-space word
    ending with a column.
    
    Fixes: cfbab37b3da0 ("selftests/net: Add TCP-AO library")
    Signed-off-by: Dmitry Safonov <0x7f454c46@gmail.com>
    Reported-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests/tcp_ao: Make RST tests less flaky [+ + +]
Author: Dmitry Safonov <0x7f454c46@gmail.com>
Date:   Sat Apr 13 02:42:52 2024 +0100

    selftests/tcp_ao: Make RST tests less flaky
    
    [ Upstream commit 4225dfa4535f219b03ae14147d9c6e7e82ec8df4 ]
    
    Currently, "active reset" cases are flaky, because select() is called
    for 3 sockets, while only 2 are expected to receive RST.
    The idea of the third socket was to get into request_sock_queue,
    but the test mistakenly attempted to connect() after the listener
    socket was shut down.
    
    Repair this test, it's important to check the different kernel
    code-paths for signing RST TCP-AO segments.
    
    Fixes: c6df7b2361d7 ("selftests/net: Add TCP-AO RST test")
    Reported-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Dmitry Safonov <0x7f454c46@gmail.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests/tcp_ao: Printing fixes to confirm with format-security [+ + +]
Author: Dmitry Safonov <0x7f454c46@gmail.com>
Date:   Sat Apr 13 02:42:55 2024 +0100

    selftests/tcp_ao: Printing fixes to confirm with format-security
    
    [ Upstream commit b476c93654d748c13624f7c7d0ba191c56a8092e ]
    
    On my new laptop with packages from nixos-unstable, gcc 12.3.0 produces
    > lib/setup.c: In function ‘__test_msg’:
    > lib/setup.c:20:9: error: format not a string literal and no format arguments [-Werror=format-security]
    >    20 |         ksft_print_msg(buf);
    >       |         ^~~~~~~~~~~~~~
    > lib/setup.c: In function ‘__test_ok’:
    > lib/setup.c:26:9: error: format not a string literal and no format arguments [-Werror=format-security]
    >    26 |         ksft_test_result_pass(buf);
    >       |         ^~~~~~~~~~~~~~~~~~~~~
    > lib/setup.c: In function ‘__test_fail’:
    > lib/setup.c:32:9: error: format not a string literal and no format arguments [-Werror=format-security]
    >    32 |         ksft_test_result_fail(buf);
    >       |         ^~~~~~~~~~~~~~~~~~~~~
    > lib/setup.c: In function ‘__test_xfail’:
    > lib/setup.c:38:9: error: format not a string literal and no format arguments [-Werror=format-security]
    >    38 |         ksft_test_result_xfail(buf);
    >       |         ^~~~~~~~~~~~~~~~~~~~~~
    > lib/setup.c: In function ‘__test_error’:
    > lib/setup.c:44:9: error: format not a string literal and no format arguments [-Werror=format-security]
    >    44 |         ksft_test_result_error(buf);
    >       |         ^~~~~~~~~~~~~~~~~~~~~~
    > lib/setup.c: In function ‘__test_skip’:
    > lib/setup.c:50:9: error: format not a string literal and no format arguments [-Werror=format-security]
    >    50 |         ksft_test_result_skip(buf);
    >       |         ^~~~~~~~~~~~~~~~~~~~~
    > cc1: some warnings being treated as errors
    
    As the buffer was already pre-printed into, print it as a string
    rather than a format-string.
    
    Fixes: cfbab37b3da0 ("selftests/net: Add TCP-AO library")
    Signed-off-by: Dmitry Safonov <0x7f454c46@gmail.com>
    Reported-by: Muhammad Usama Anjum <usama.anjum@collabora.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests/tcp_ao: Zero-init tcp_ao_info_opt [+ + +]
Author: Dmitry Safonov <0x7f454c46@gmail.com>
Date:   Sat Apr 13 02:42:53 2024 +0100

    selftests/tcp_ao: Zero-init tcp_ao_info_opt
    
    [ Upstream commit b089b3bead532419cdcbd8e4e0a3e23c49d11573 ]
    
    The structure is on the stack and has to be zero-initialized as
    the kernel checks for:
    >       if (in.reserved != 0 || in.reserved2 != 0)
    >               return -EINVAL;
    
    Fixes: b26660531cf6 ("selftests/net: Add test for TCP-AO add setsockopt() command")
    Signed-off-by: Dmitry Safonov <0x7f454c46@gmail.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
serial/pmac_zilog: Remove flawed mitigation for rx irq flood [+ + +]
Author: Finn Thain <fthain@linux-m68k.org>
Date:   Mon Apr 8 19:23:43 2024 +1000

    serial/pmac_zilog: Remove flawed mitigation for rx irq flood
    
    commit 1be3226445362bfbf461c92a5bcdb1723f2e4907 upstream.
    
    The mitigation was intended to stop the irq completely. That may be
    better than a hard lock-up but it turns out that you get a crash anyway
    if you're using pmac_zilog as a serial console:
    
    ttyPZ0: pmz: rx irq flood !
    BUG: spinlock recursion on CPU#0, swapper/0
    
    That's because the pr_err() call in pmz_receive_chars() results in
    pmz_console_write() attempting to lock a spinlock already locked in
    pmz_interrupt(). With CONFIG_DEBUG_SPINLOCK=y, this produces a fatal
    BUG splat. The spinlock in question is the one in struct uart_port.
    
    Even when it's not fatal, the serial port rx function ceases to work.
    Also, the iteration limit doesn't play nicely with QEMU, as can be
    seen in the bug report linked below.
    
    A web search for other reports of the error message "pmz: rx irq flood"
    didn't produce anything. So I don't think this code is needed any more.
    Remove it.
    
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Cc: Aneesh Kumar K.V <aneesh.kumar@kernel.org>
    Cc: Naveen N. Rao <naveen.n.rao@linux.ibm.com>
    Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
    Cc: stable@kernel.org
    Cc: linux-m68k@lists.linux-m68k.org
    Link: https://github.com/vivier/qemu-m68k/issues/44
    Link: https://lore.kernel.org/all/1078874617.9746.36.camel@gaston/
    Acked-by: Michael Ellerman <mpe@ellerman.id.au>
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Finn Thain <fthain@linux-m68k.org>
    Link: https://lore.kernel.org/r/e853cf2c762f23101cd2ddec0cc0c2be0e72685f.1712568223.git.fthain@linux-m68k.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
serial: 8250_dw: Revert: Do not reclock if already at correct rate [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Sun Mar 17 22:41:23 2024 +0100

    serial: 8250_dw: Revert: Do not reclock if already at correct rate
    
    commit 7dfae6cbadc1ac99e38ad19fb08810b31ff167be upstream.
    
    Commit e5d6bd25f93d ("serial: 8250_dw: Do not reclock if already at
    correct rate") breaks the dw UARTs on Intel Bay Trail (BYT) and
    Cherry Trail (CHT) SoCs.
    
    Before this change the RTL8732BS Bluetooth HCI which is found
    connected over the dw UART on both BYT and CHT boards works properly:
    
    Bluetooth: hci0: RTL: examining hci_ver=06 hci_rev=000b lmp_ver=06 lmp_subver=8723
    Bluetooth: hci0: RTL: rom_version status=0 version=1
    Bluetooth: hci0: RTL: loading rtl_bt/rtl8723bs_fw.bin
    Bluetooth: hci0: RTL: loading rtl_bt/rtl8723bs_config-OBDA8723.bin
    Bluetooth: hci0: RTL: cfg_sz 64, total sz 24508
    Bluetooth: hci0: RTL: fw version 0x365d462e
    
    where as after this change probing it fails:
    
    Bluetooth: hci0: RTL: examining hci_ver=06 hci_rev=000b lmp_ver=06 lmp_subver=8723
    Bluetooth: hci0: RTL: rom_version status=0 version=1
    Bluetooth: hci0: RTL: loading rtl_bt/rtl8723bs_fw.bin
    Bluetooth: hci0: RTL: loading rtl_bt/rtl8723bs_config-OBDA8723.bin
    Bluetooth: hci0: RTL: cfg_sz 64, total sz 24508
    Bluetooth: hci0: command 0xfc20 tx timeout
    Bluetooth: hci0: RTL: download fw command failed (-110)
    
    Revert the changes to fix this regression.
    
    Fixes: e5d6bd25f93d ("serial: 8250_dw: Do not reclock if already at correct rate")
    Cc: stable@vger.kernel.org
    Cc: Peter Collingbourne <pcc@google.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Acked-by: Peter Collingbourne <pcc@google.com>
    Link: https://lore.kernel.org/r/20240317214123.34482-1-hdegoede@redhat.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

serial: core: Clearing the circular buffer before NULLifying it [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Thu Apr 4 17:59:26 2024 +0300

    serial: core: Clearing the circular buffer before NULLifying it
    
    commit 9cf7ea2eeb745213dc2a04103e426b960e807940 upstream.
    
    The circular buffer is NULLified in uart_tty_port_shutdown()
    under the spin lock. However, the PM or other timer based callbacks
    may still trigger after this event without knowning that buffer pointer
    is not valid. Since the serial code is a bit inconsistent in checking
    the buffer state (some rely on the head-tail positions, some on the
    buffer pointer), it's better to have both aligned, i.e. buffer pointer
    to be NULL and head-tail possitions to be the same, meaning it's empty.
    This will prevent asynchronous calls to dereference NULL pointer as
    reported recently in 8250 case:
    
      BUG: kernel NULL pointer dereference, address: 00000cf5
      Workqueue: pm pm_runtime_work
      EIP: serial8250_tx_chars (drivers/tty/serial/8250/8250_port.c:1809)
      ...
      ? serial8250_tx_chars (drivers/tty/serial/8250/8250_port.c:1809)
      __start_tx (drivers/tty/serial/8250/8250_port.c:1551)
      serial8250_start_tx (drivers/tty/serial/8250/8250_port.c:1654)
      serial_port_runtime_suspend (include/linux/serial_core.h:667 drivers/tty/serial/serial_port.c:63)
      __rpm_callback (drivers/base/power/runtime.c:393)
      ? serial_port_remove (drivers/tty/serial/serial_port.c:50)
      rpm_suspend (drivers/base/power/runtime.c:447)
    
    The proposed change will prevent ->start_tx() to be called during
    suspend on shut down port.
    
    Fixes: 43066e32227e ("serial: port: Don't suspend if the port is still busy")
    Cc: stable <stable@kernel.org>
    Reported-by: kernel test robot <oliver.sang@intel.com>
    Closes: https://lore.kernel.org/oe-lkp/202404031607.2e92eebe-lkp@intel.com
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20240404150034.41648-1-andriy.shevchenko@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

serial: core: Fix missing shutdown and startup for serial base port [+ + +]
Author: Tony Lindgren <tony@atomide.com>
Date:   Thu Apr 11 08:58:45 2024 +0300

    serial: core: Fix missing shutdown and startup for serial base port
    
    commit 1aa4ad4eb695bac1b0a7ba542a16d6833c9c8dd8 upstream.
    
    We are seeing start_tx being called after port shutdown as noted by Jiri.
    This happens because we are missing the startup and shutdown related
    functions for the serial base port.
    
    Let's fix the issue by adding startup and shutdown functions for the
    serial base port to block tx flushing for the serial base port when the
    port is not in use.
    
    Fixes: 84a9582fd203 ("serial: core: Start managing serial controllers to enable runtime PM")
    Cc: stable <stable@kernel.org>
    Reported-by: Jiri Slaby <jirislaby@kernel.org>
    Signed-off-by: Tony Lindgren <tony@atomide.com>
    Link: https://lore.kernel.org/r/20240411055848.38190-1-tony@atomide.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

serial: core: Fix regression when runtime PM is not enabled [+ + +]
Author: Tony Lindgren <tony@atomide.com>
Date:   Mon Mar 25 09:16:47 2024 +0200

    serial: core: Fix regression when runtime PM is not enabled
    
    commit 5555980571cc744cd99b6455e3e388b54519db8f upstream.
    
    Commit 45a3a8ef8129 ("serial: core: Revert checks for tx runtime PM state")
    caused a regression for Sun Ultra 60 for the sunsab driver as reported by
    Nick Bowler <nbowler@draconx.ca>.
    
    We need to add back the check runtime PM enabled state for serial port
    controller device, I wrongly assumed earlier we could just remove it.
    
    Fixes: 45a3a8ef8129 ("serial: core: Revert checks for tx runtime PM state")
    Cc: stable <stable@kernel.org>
    Reported-by: Nick Bowler <nbowler@draconx.ca>
    Signed-off-by: Tony Lindgren <tony@atomide.com>
    Link: https://lore.kernel.org/r/20240325071649.27040-1-tony@atomide.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

serial: mxs-auart: add spinlock around changing cts state [+ + +]
Author: Emil Kronborg <emil.kronborg@protonmail.com>
Date:   Wed Mar 20 12:15:36 2024 +0000

    serial: mxs-auart: add spinlock around changing cts state
    
    commit 54c4ec5f8c471b7c1137a1f769648549c423c026 upstream.
    
    The uart_handle_cts_change() function in serial_core expects the caller
    to hold uport->lock. For example, I have seen the below kernel splat,
    when the Bluetooth driver is loaded on an i.MX28 board.
    
        [   85.119255] ------------[ cut here ]------------
        [   85.124413] WARNING: CPU: 0 PID: 27 at /drivers/tty/serial/serial_core.c:3453 uart_handle_cts_change+0xb4/0xec
        [   85.134694] Modules linked in: hci_uart bluetooth ecdh_generic ecc wlcore_sdio configfs
        [   85.143314] CPU: 0 PID: 27 Comm: kworker/u3:0 Not tainted 6.6.3-00021-gd62a2f068f92 #1
        [   85.151396] Hardware name: Freescale MXS (Device Tree)
        [   85.156679] Workqueue: hci0 hci_power_on [bluetooth]
        (...)
        [   85.191765]  uart_handle_cts_change from mxs_auart_irq_handle+0x380/0x3f4
        [   85.198787]  mxs_auart_irq_handle from __handle_irq_event_percpu+0x88/0x210
        (...)
    
    Cc: stable@vger.kernel.org
    Fixes: 4d90bb147ef6 ("serial: core: Document and assert lock requirements for irq helpers")
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Signed-off-by: Emil Kronborg <emil.kronborg@protonmail.com>
    Link: https://lore.kernel.org/r/20240320121530.11348-1-emil.kronborg@protonmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

serial: stm32: Reset .throttled state in .startup() [+ + +]
Author: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Date:   Wed Apr 17 11:03:28 2024 +0200

    serial: stm32: Reset .throttled state in .startup()
    
    commit ea2624b5b829b8f93c0dce25721d835969b34faf upstream.
    
    When an UART is opened that still has .throttled set from a previous
    open, the RX interrupt is enabled but the irq handler doesn't consider
    it. This easily results in a stuck irq with the effect to occupy the CPU
    in a tight loop.
    
    So reset the throttle state in .startup() to ensure that RX irqs are
    handled.
    
    Fixes: d1ec8a2eabe9 ("serial: stm32: update throttle and unthrottle ops for dma mode")
    Cc: stable@vger.kernel.org
    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Link: https://lore.kernel.org/r/a784f80d3414f7db723b2ec66efc56e1ad666cbf.1713344161.git.u.kleine-koenig@pengutronix.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

serial: stm32: Return IRQ_NONE in the ISR if no handling happend [+ + +]
Author: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Date:   Wed Apr 17 11:03:27 2024 +0200

    serial: stm32: Return IRQ_NONE in the ISR if no handling happend
    
    commit 13c785323b36b845300b256d0e5963c3727667d7 upstream.
    
    If there is a stuck irq that the handler doesn't address, returning
    IRQ_HANDLED unconditionally makes it impossible for the irq core to
    detect the problem and disable the irq. So only return IRQ_HANDLED if
    an event was handled.
    
    A stuck irq is still problematic, but with this change at least it only
    makes the UART nonfunctional instead of occupying the (usually only) CPU
    by 100% and so stall the whole machine.
    
    Fixes: 48a6092fb41f ("serial: stm32-usart: Add STM32 USART Driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Link: https://lore.kernel.org/r/5f92603d0dfd8a5b8014b2b10a902d91e0bb881f.1713344161.git.u.kleine-koenig@pengutronix.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
speakup: Avoid crash on very long word [+ + +]
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date:   Sat Mar 23 17:48:43 2024 +0100

    speakup: Avoid crash on very long word
    
    commit c8d2f34ea96ea3bce6ba2535f867f0d4ee3b22e1 upstream.
    
    In case a console is set up really large and contains a really long word
    (> 256 characters), we have to stop before the length of the word buffer.
    
    Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
    Fixes: c6e3fd22cd538 ("Staging: add speakup to the staging directory")
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240323164843.1426997-1-samuel.thibault@ens-lyon.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Squashfs: check the inode number is not the invalid value of zero [+ + +]
Author: Phillip Lougher <phillip@squashfs.org.uk>
Date:   Mon Apr 8 23:02:06 2024 +0100

    Squashfs: check the inode number is not the invalid value of zero
    
    commit 9253c54e01b6505d348afbc02abaa4d9f8a01395 upstream.
    
    Syskiller has produced an out of bounds access in fill_meta_index().
    
    That out of bounds access is ultimately caused because the inode
    has an inode number with the invalid value of zero, which was not checked.
    
    The reason this causes the out of bounds access is due to following
    sequence of events:
    
    1. Fill_meta_index() is called to allocate (via empty_meta_index())
       and fill a metadata index.  It however suffers a data read error
       and aborts, invalidating the newly returned empty metadata index.
       It does this by setting the inode number of the index to zero,
       which means unused (zero is not a valid inode number).
    
    2. When fill_meta_index() is subsequently called again on another
       read operation, locate_meta_index() returns the previous index
       because it matches the inode number of 0.  Because this index
       has been returned it is expected to have been filled, and because
       it hasn't been, an out of bounds access is performed.
    
    This patch adds a sanity check which checks that the inode number
    is not zero when the inode is created and returns -EINVAL if it is.
    
    [phillip@squashfs.org.uk: whitespace fix]
      Link: https://lkml.kernel.org/r/20240409204723.446925-1-phillip@squashfs.org.uk
    Link: https://lkml.kernel.org/r/20240408220206.435788-1-phillip@squashfs.org.uk
    Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
    Reported-by: "Ubisectech Sirius" <bugreport@ubisectech.com>
    Closes: https://lore.kernel.org/lkml/87f5c007-b8a5-41ae-8b57-431e924c5915.bugreport@ubisectech.com/
    Cc: Christian Brauner <brauner@kernel.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
SUNRPC: Fix rpcgss_context trace event acceptor field [+ + +]
Author: Steven Rostedt (Google) <rostedt@goodmis.org>
Date:   Wed Apr 10 12:38:13 2024 -0400

    SUNRPC: Fix rpcgss_context trace event acceptor field
    
    commit a4833e3abae132d613ce7da0e0c9a9465d1681fa upstream.
    
    The rpcgss_context trace event acceptor field is a dynamically sized
    string that records the "data" parameter. But this parameter is also
    dependent on the "len" field to determine the size of the data.
    
    It needs to use __string_len() helper macro where the length can be passed
    in. It also incorrectly uses strncpy() to save it instead of
    __assign_str(). As these macros can change, it is not wise to open code
    them in trace events.
    
    As of commit c759e609030c ("tracing: Remove __assign_str_len()"),
    __assign_str() can be used for both __string() and __string_len() fields.
    Before that commit, __assign_str_len() is required to be used. This needs
    to be noted for backporting. (In actuality, commit c1fa617caeb0 ("tracing:
    Rework __assign_str() and __string() to not duplicate getting the string")
    is the commit that makes __string_str_len() obsolete).
    
    Cc: stable@vger.kernel.org
    Fixes: 0c77668ddb4e ("SUNRPC: Introduce trace points in rpc_auth_gss.ko")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
thermal/debugfs: Add missing count increment to thermal_debug_tz_trip_up() [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Mon Apr 15 21:02:12 2024 +0200

    thermal/debugfs: Add missing count increment to thermal_debug_tz_trip_up()
    
    [ Upstream commit b552f63cd43735048bbe9bfbb7a9dcfce166fbdd ]
    
    The count field in struct trip_stats, representing the number of times
    the zone temperature was above the trip point, needs to be incremented
    in thermal_debug_tz_trip_up(), for two reasons.
    
    First, if a trip point is crossed on the way up for the first time,
    thermal_debug_update_temp() called from update_temperature() does
    not see it because it has not been added to trips_crossed[] array
    in the thermal zone's struct tz_debugfs object yet.  Therefore, when
    thermal_debug_tz_trip_up() is called after that, the trip point's
    count value is 0, and the attempt to divide by it during the average
    temperature computation leads to a divide error which causes the kernel
    to crash.  Setting the count to 1 before the division by incrementing it
    fixes this problem.
    
    Second, if a trip point is crossed on the way up, but it has been
    crossed on the way up already before, its count value needs to be
    incremented to make a record of the fact that the zone temperature is
    above the trip now.  Without doing that, if the mitigations applied
    after crossing the trip cause the zone temperature to drop below its
    threshold, the count will not be updated for this episode at all and
    the average temperature in the trip statistics record will be somewhat
    higher than it should be.
    
    Fixes: 7ef01f228c9f ("thermal/debugfs: Add thermal debugfs information for mitigation episodes")
    Cc :6.8+ <stable@vger.kernel.org> # 6.8+
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
thunderbolt: Avoid notify PM core about runtime PM resume [+ + +]
Author: Gil Fine <gil.fine@linux.intel.com>
Date:   Fri Mar 1 15:11:18 2024 +0200

    thunderbolt: Avoid notify PM core about runtime PM resume
    
    commit dcd12acaf384c30437fa5a9a1f71df06fc9835fd upstream.
    
    Currently we notify PM core about occurred wakes after any resume. This
    is not actually needed after resume from runtime suspend. Hence, notify
    PM core about occurred wakes only after resume from system sleep. Also,
    if the wake occurred in USB4 router upstream port, we don't notify the
    PM core about it since it is not actually needed and can cause
    unexpected autowake (e.g. if /sys/power/wakeup_count is used).
    
    While there add the missing kernel-doc for tb_switch_resume().
    
    Signed-off-by: Gil Fine <gil.fine@linux.intel.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

thunderbolt: Do not create DisplayPort tunnels on adapters of the same router [+ + +]
Author: Mika Westerberg <mika.westerberg@linux.intel.com>
Date:   Tue Mar 26 10:58:15 2024 +0200

    thunderbolt: Do not create DisplayPort tunnels on adapters of the same router
    
    commit c032cdd48b29549e8283c2fea99e7d91ddefebf7 upstream.
    
    Probably due to a firmware bug Dell TB16 dock announces that one of its
    DisplayPort adapters is actually DP IN. Now this is possible and used
    with some external GPUs but not likely in this case as we are dealing
    with a dock. Anyways the problem is that the driver tries to create a
    DisplayPort tunnel between adapters of the same router which then shows
    to user that there is no picture on the display (because there are no
    available DP OUT adapters on the dock anymore).
    
    Fix this by not creating DisplayPort tunnels between adapters that are
    on the same router.
    
    Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/10265
    Fixes: 274baf695b08 ("thunderbolt: Add DP IN added last in the head of the list of DP resources")
    Cc: Gil Fine <gil.fine@linux.intel.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

thunderbolt: Fix wake configurations after device unplug [+ + +]
Author: Gil Fine <gil.fine@linux.intel.com>
Date:   Fri Mar 1 15:22:53 2024 +0200

    thunderbolt: Fix wake configurations after device unplug
    
    commit c38fa07dc69f0b9e6f43ecab96dc7861a70c827c upstream.
    
    Currently we don't configure correctly the wake events after unplug of device
    router. What can happen is that the downstream ports of host router will be
    configured to wake on: USB4-wake and wake-on-disconnect, but not on
    wake-on-connect. This may cause the later plugged device not to wake the
    domain and fail in enumeration. Fix this by clearing downstream port's "USB4
    Port is Configured" bit, after unplug of a device router.
    
    Signed-off-by: Gil Fine <gil.fine@linux.intel.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

thunderbolt: Introduce tb_path_deactivate_hop() [+ + +]
Author: Sanath S <Sanath.S@amd.com>
Date:   Sat Jan 13 11:42:23 2024 +0200

    thunderbolt: Introduce tb_path_deactivate_hop()
    
    commit b35c1d7b11da8c08b14147bbe87c2c92f7a83f8b upstream.
    
    This function can be used to clear path config space of an adapter. Make
    it available for other files in this driver.
    
    Signed-off-by: Sanath S <Sanath.S@amd.com>
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Cc: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

thunderbolt: Introduce tb_port_reset() [+ + +]
Author: Sanath S <Sanath.S@amd.com>
Date:   Sat Jan 13 11:39:57 2024 +0200

    thunderbolt: Introduce tb_port_reset()
    
    commit 01da6b99d49f60b1edead44e33569b1a2e9f49b7 upstream.
    
    Introduce a function that issues Downstream Port Reset to a USB4 port.
    This supports Thunderbolt 2, 3 and USB4 routers.
    
    Signed-off-by: Sanath S <Sanath.S@amd.com>
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Cc: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

thunderbolt: Make tb_switch_reset() support Thunderbolt 2, 3 and USB4 routers [+ + +]
Author: Sanath S <Sanath.S@amd.com>
Date:   Sat Jan 13 11:47:26 2024 +0200

    thunderbolt: Make tb_switch_reset() support Thunderbolt 2, 3 and USB4 routers
    
    commit ec8162b3f0683ae08a21f20517cf49272b07ee0b upstream.
    
    Currently tb_switch_reset() only did something for Thunderbolt 1
    devices. Expand this to support all generations, including USB4, and
    both host and device routers.
    
    Signed-off-by: Sanath S <Sanath.S@amd.com>
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Cc: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

thunderbolt: Reset only non-USB4 host routers in resume [+ + +]
Author: Mika Westerberg <mika.westerberg@linux.intel.com>
Date:   Wed Jan 31 11:12:59 2024 +0200

    thunderbolt: Reset only non-USB4 host routers in resume
    
    commit 8cf9926c537ce8b0c7783afebe752e084765d553 upstream.
    
    There is no need to reset the USB4 host routers on resume because they
    are reset already and this may cause problems if the link does not come
    up soon enough. For this reason limit this to happen in non-USB4 host
    routers only (that's Apple systems with Intel Thunderbolt controllers).
    
    Fixes: 59a54c5f3dbd ("thunderbolt: Reset topology created by the boot firmware")
    Cc: Sanath S <Sanath.S@amd.com>
    Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

thunderbolt: Reset topology created by the boot firmware [+ + +]
Author: Sanath S <Sanath.S@amd.com>
Date:   Sat Jan 13 11:52:48 2024 +0200

    thunderbolt: Reset topology created by the boot firmware
    
    commit 59a54c5f3dbde00b8ad30aef27fe35b1fe07bf5c upstream.
    
    Boot firmware (typically BIOS) might have created tunnels of its own.
    The tunnel configuration that it does might be sub-optimal. For instance
    it may only support HBR2 monitors so the DisplayPort tunnels it created
    may limit Linux graphics drivers. In addition there is an issue on some
    AMD based systems where the BIOS does not allocate enough PCIe resources
    for future topology extension. By resetting the USB4 topology the PCIe
    links will be reset as well allowing Linux to re-allocate.
    
    This aligns the behavior with Windows Connection Manager.
    
    We already issued host router reset for USB4 v2 routers, now extend it
    to USB4 v1 routers as well. For pre-USB4 (that's Apple systems) we leave
    it as is and continue to discover the existing tunnels.
    
    Suggested-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Sanath S <Sanath.S@amd.com>
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tun: limit printing rate when illegal packet received by tun dev [+ + +]
Author: Lei Chen <lei.chen@smartx.com>
Date:   Sun Apr 14 22:02:46 2024 -0400

    tun: limit printing rate when illegal packet received by tun dev
    
    [ Upstream commit f8bbc07ac535593139c875ffa19af924b1084540 ]
    
    vhost_worker will call tun call backs to receive packets. If too many
    illegal packets arrives, tun_do_read will keep dumping packet contents.
    When console is enabled, it will costs much more cpu time to dump
    packet and soft lockup will be detected.
    
    net_ratelimit mechanism can be used to limit the dumping rate.
    
    PID: 33036    TASK: ffff949da6f20000  CPU: 23   COMMAND: "vhost-32980"
     #0 [fffffe00003fce50] crash_nmi_callback at ffffffff89249253
     #1 [fffffe00003fce58] nmi_handle at ffffffff89225fa3
     #2 [fffffe00003fceb0] default_do_nmi at ffffffff8922642e
     #3 [fffffe00003fced0] do_nmi at ffffffff8922660d
     #4 [fffffe00003fcef0] end_repeat_nmi at ffffffff89c01663
        [exception RIP: io_serial_in+20]
        RIP: ffffffff89792594  RSP: ffffa655314979e8  RFLAGS: 00000002
        RAX: ffffffff89792500  RBX: ffffffff8af428a0  RCX: 0000000000000000
        RDX: 00000000000003fd  RSI: 0000000000000005  RDI: ffffffff8af428a0
        RBP: 0000000000002710   R8: 0000000000000004   R9: 000000000000000f
        R10: 0000000000000000  R11: ffffffff8acbf64f  R12: 0000000000000020
        R13: ffffffff8acbf698  R14: 0000000000000058  R15: 0000000000000000
        ORIG_RAX: ffffffffffffffff  CS: 0010  SS: 0018
     #5 [ffffa655314979e8] io_serial_in at ffffffff89792594
     #6 [ffffa655314979e8] wait_for_xmitr at ffffffff89793470
     #7 [ffffa65531497a08] serial8250_console_putchar at ffffffff897934f6
     #8 [ffffa65531497a20] uart_console_write at ffffffff8978b605
     #9 [ffffa65531497a48] serial8250_console_write at ffffffff89796558
     #10 [ffffa65531497ac8] console_unlock at ffffffff89316124
     #11 [ffffa65531497b10] vprintk_emit at ffffffff89317c07
     #12 [ffffa65531497b68] printk at ffffffff89318306
     #13 [ffffa65531497bc8] print_hex_dump at ffffffff89650765
     #14 [ffffa65531497ca8] tun_do_read at ffffffffc0b06c27 [tun]
     #15 [ffffa65531497d38] tun_recvmsg at ffffffffc0b06e34 [tun]
     #16 [ffffa65531497d68] handle_rx at ffffffffc0c5d682 [vhost_net]
     #17 [ffffa65531497ed0] vhost_worker at ffffffffc0c644dc [vhost]
     #18 [ffffa65531497f10] kthread at ffffffff892d2e72
     #19 [ffffa65531497f50] ret_from_fork at ffffffff89c0022f
    
    Fixes: ef3db4a59542 ("tun: avoid BUG, dump packet on GSO errors")
    Signed-off-by: Lei Chen <lei.chen@smartx.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Acked-by: Jason Wang <jasowang@redhat.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Acked-by: Michael S. Tsirkin <mst@redhat.com>
    Link: https://lore.kernel.org/r/20240415020247.2207781-1-lei.chen@smartx.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
usb: Disable USB3 LPM at shutdown [+ + +]
Author: Kai-Heng Feng <kai.heng.feng@canonical.com>
Date:   Tue Mar 5 14:51:38 2024 +0800

    usb: Disable USB3 LPM at shutdown
    
    commit d920a2ed8620be04a3301e1a9c2b7cc1de65f19d upstream.
    
    SanDisks USB3 storage may disapper after system reboot:
    
    usb usb2-port3: link state change
    xhci_hcd 0000:00:14.0: clear port3 link state change, portsc: 0x2c0
    usb usb2-port3: do warm reset, port only
    xhci_hcd 0000:00:14.0: xhci_hub_status_data: stopping usb2 port polling
    xhci_hcd 0000:00:14.0: Get port status 2-3 read: 0x2b0, return 0x2b0
    usb usb2-port3: not warm reset yet, waiting 50ms
    xhci_hcd 0000:00:14.0: Get port status 2-3 read: 0x2f0, return 0x2f0
    usb usb2-port3: not warm reset yet, waiting 200ms
    ...
    xhci_hcd 0000:00:14.0: Get port status 2-3 read: 0x6802c0, return 0x7002c0
    usb usb2-port3: not warm reset yet, waiting 200ms
    xhci_hcd 0000:00:14.0: clear port3 reset change, portsc: 0x4802c0
    xhci_hcd 0000:00:14.0: clear port3 warm(BH) reset change, portsc: 0x4002c0
    xhci_hcd 0000:00:14.0: clear port3 link state change, portsc: 0x2c0
    xhci_hcd 0000:00:14.0: Get port status 2-3 read: 0x2c0, return 0x2c0
    usb usb2-port3: not enabled, trying warm reset again...
    
    This is due to the USB device still cause port change event after xHCI is
    shuted down:
    
    xhci_hcd 0000:38:00.0: // Setting command ring address to 0xffffe001
    xhci_hcd 0000:38:00.0: xhci_resume: starting usb3 port polling.
    xhci_hcd 0000:38:00.0: xhci_hub_status_data: stopping usb4 port polling
    xhci_hcd 0000:38:00.0: xhci_hub_status_data: stopping usb3 port polling
    xhci_hcd 0000:38:00.0: hcd_pci_runtime_resume: 0
    xhci_hcd 0000:38:00.0: xhci_shutdown: stopping usb3 port polling.
    xhci_hcd 0000:38:00.0: // Halt the HC
    xhci_hcd 0000:38:00.0: xhci_shutdown completed - status = 1
    xhci_hcd 0000:00:14.0: xhci_shutdown: stopping usb1 port polling.
    xhci_hcd 0000:00:14.0: // Halt the HC
    xhci_hcd 0000:00:14.0: xhci_shutdown completed - status = 1
    xhci_hcd 0000:00:14.0: Get port status 2-3 read: 0x1203, return 0x203
    xhci_hcd 0000:00:14.0: set port reset, actual port 2-3 status  = 0x1311
    xhci_hcd 0000:00:14.0: Get port status 2-3 read: 0x201203, return 0x100203
    xhci_hcd 0000:00:14.0: clear port3 reset change, portsc: 0x1203
    xhci_hcd 0000:00:14.0: clear port3 warm(BH) reset change, portsc: 0x1203
    xhci_hcd 0000:00:14.0: clear port3 link state change, portsc: 0x1203
    xhci_hcd 0000:00:14.0: clear port3 connect change, portsc: 0x1203
    xhci_hcd 0000:00:14.0: Get port status 2-3 read: 0x1203, return 0x203
    usb 2-3: device not accepting address 2, error -108
    xhci_hcd 0000:00:14.0: xHCI dying or halted, can't queue_command
    xhci_hcd 0000:00:14.0: Set port 2-3 link state, portsc: 0x1203, write 0x11261
    xhci_hcd 0000:00:14.0: Get port status 2-3 read: 0x1263, return 0x263
    xhci_hcd 0000:00:14.0: set port reset, actual port 2-3 status  = 0x1271
    xhci_hcd 0000:00:14.0: Get port status 2-3 read: 0x12b1, return 0x2b1
    usb usb2-port3: not reset yet, waiting 60ms
    ACPI: PM: Preparing to enter system sleep state S5
    xhci_hcd 0000:00:14.0: Get port status 2-3 read: 0x12f1, return 0x2f1
    usb usb2-port3: not reset yet, waiting 200ms
    reboot: Restarting system
    
    The port change event is caused by LPM transition, so disabling LPM at shutdown
    to make sure the device is in U0 for warmboot.
    
    Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
    Cc: stable <stable@kernel.org>
    Link: https://lore.kernel.org/r/20240305065140.66801-1-kai.heng.feng@canonical.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: dwc2: host: Fix dereference issue in DDMA completion flow. [+ + +]
Author: Minas Harutyunyan <Minas.Harutyunyan@synopsys.com>
Date:   Tue Apr 9 12:27:54 2024 +0000

    usb: dwc2: host: Fix dereference issue in DDMA completion flow.
    
    commit eed04fa96c48790c1cce73c8a248e9d460b088f8 upstream.
    
    Fixed variable dereference issue in DDMA completion flow.
    
    Fixes: b258e4268850 ("usb: dwc2: host: Fix ISOC flow in DDMA mode")
    CC: stable@vger.kernel.org
    Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
    Closes: https://lore.kernel.org/linux-usb/2024040834-ethically-rumble-701f@gregkh/T/#m4c4b83bef0ebb4b67fe2e0a7d6466cbb6f416e39
    Signed-off-by: Minas Harutyunyan <Minas.Harutyunyan@synopsys.com>
    Link: https://lore.kernel.org/r/cc826d3ef53c934d8e6d98870f17f3cdc3d2755d.1712665387.git.Minas.Harutyunyan@synopsys.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: f_ncm: Fix UAF ncm object at re-bind after usb ep transport error [+ + +]
Author: Norihiko Hama <Norihiko.Hama@alpsalpine.com>
Date:   Wed Mar 27 11:35:50 2024 +0900

    usb: gadget: f_ncm: Fix UAF ncm object at re-bind after usb ep transport error
    
    commit 6334b8e4553cc69f51e383c9de545082213d785e upstream.
    
    When ncm function is working and then stop usb0 interface for link down,
    eth_stop() is called. At this piont, accidentally if usb transport error
    should happen in usb_ep_enable(), 'in_ep' and/or 'out_ep' may not be enabled.
    
    After that, ncm_disable() is called to disable for ncm unbind
    but gether_disconnect() is never called since 'in_ep' is not enabled.
    
    As the result, ncm object is released in ncm unbind
    but 'dev->port_usb' associated to 'ncm->port' is not NULL.
    
    And when ncm bind again to recover netdev, ncm object is reallocated
    but usb0 interface is already associated to previous released ncm object.
    
    Therefore, once usb0 interface is up and eth_start_xmit() is called,
    released ncm object is dereferrenced and it might cause use-after-free memory.
    
    [function unlink via configfs]
      usb0: eth_stop dev->port_usb=ffffff9b179c3200
      --> error happens in usb_ep_enable().
      NCM: ncm_disable: ncm=ffffff9b179c3200
      --> no gether_disconnect() since ncm->port.in_ep->enabled is false.
      NCM: ncm_unbind: ncm unbind ncm=ffffff9b179c3200
      NCM: ncm_free: ncm free ncm=ffffff9b179c3200   <-- released ncm
    
    [function link via configfs]
      NCM: ncm_alloc: ncm alloc ncm=ffffff9ac4f8a000
      NCM: ncm_bind: ncm bind ncm=ffffff9ac4f8a000
      NCM: ncm_set_alt: ncm=ffffff9ac4f8a000 alt=0
      usb0: eth_open dev->port_usb=ffffff9b179c3200  <-- previous released ncm
      usb0: eth_start dev->port_usb=ffffff9b179c3200 <--
      eth_start_xmit()
      --> dev->wrap()
      Unable to handle kernel paging request at virtual address dead00000000014f
    
    This patch addresses the issue by checking if 'ncm->netdev' is not NULL at
    ncm_disable() to call gether_disconnect() to deassociate 'dev->port_usb'.
    It's more reasonable to check 'ncm->netdev' to call gether_connect/disconnect
    rather than check 'ncm->port.in_ep->enabled' since it might not be enabled
    but the gether connection might be established.
    
    Signed-off-by: Norihiko Hama <Norihiko.Hama@alpsalpine.com>
    Cc: stable <stable@kernel.org>
    Link: https://lore.kernel.org/r/20240327023550.51214-1-Norihiko.Hama@alpsalpine.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: misc: onboard_usb_hub: Disable the USB hub clock on failure [+ + +]
Author: Fabio Estevam <festevam@denx.de>
Date:   Tue Apr 9 13:29:10 2024 -0300

    usb: misc: onboard_usb_hub: Disable the USB hub clock on failure
    
    commit 34b990e9bb54d20b9675ca9483be8668eed374d8 upstream.
    
    In case regulator_bulk_enable() fails, the previously enabled USB hub
    clock should be disabled.
    
    Fix it accordingly.
    
    Fixes: 65e62b8a955a ("usb: misc: onboard_usb_hub: Add support for clock input")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Fabio Estevam <festevam@denx.de>
    Reviewed-by: Frieder Schrempf <frieder.schrempf@kontron.de>
    Acked-by: Matthias Kaehlcke <mka@chromium.org>
    Link: https://lore.kernel.org/r/20240409162910.2061640-1-festevam@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: serial: option: add Fibocom FM135-GL variants [+ + +]
Author: bolan wang <bolan.wang@fibocom.com>
Date:   Wed Mar 6 19:03:39 2024 +0800

    USB: serial: option: add Fibocom FM135-GL variants
    
    commit 356952b13af5b2c338df1e06889fd1b5e12cbbf4 upstream.
    
    Update the USB serial option driver support for the Fibocom
    FM135-GL LTE modules.
    - VID:PID 2cb7:0115, FM135-GL for laptop debug M.2 cards(with MBIM
    interface for /Linux/Chrome OS)
    
    0x0115: mbim, diag, at, pipe
    
    Here are the outputs of usb-devices:
    T:  Bus=01 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#= 16 Spd=480 MxCh= 0
    D:  Ver= 2.01 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=2cb7 ProdID=0115 Rev=05.15
    S:  Manufacturer=Fibocom Wireless Inc.
    S:  Product=Fibocom Module
    S:  SerialNumber=12345678
    C:  #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=usbfs
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Signed-off-by: bolan wang <bolan.wang@fibocom.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add Lonsung U8300/U9300 product [+ + +]
Author: Coia Prant <coiaprant@gmail.com>
Date:   Mon Apr 15 07:26:25 2024 -0700

    USB: serial: option: add Lonsung U8300/U9300 product
    
    commit cf16ffa17c398434a77b8a373e69287c95b60de2 upstream.
    
    Update the USB serial option driver to support Longsung U8300/U9300.
    
    For U8300
    
    Interface 4 is used by for QMI interface in stock firmware of U8300, the
    router which uses U8300 modem.
    Interface 5 is used by for ADB interface in stock firmware of U8300, the
    router which uses U8300 modem.
    
    Interface mapping is:
    0: unknown (Debug), 1: AT (Modem), 2: AT, 3: PPP (NDIS / Pipe), 4: QMI, 5: ADB
    
    T:  Bus=05 Lev=01 Prnt=03 Port=02 Cnt=01 Dev#=  4 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1c9e ProdID=9b05 Rev=03.18
    S:  Manufacturer=Android
    S:  Product=Android
    C:  #Ifs= 6 Cfg#= 1 Atr=80 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8a(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    For U9300
    
    Interface 1 is used by for ADB interface in stock firmware of U9300, the
    router which uses U9300 modem.
    Interface 4 is used by for QMI interface in stock firmware of U9300, the
    router which uses U9300 modem.
    
    Interface mapping is:
    0: ADB, 1: AT (Modem), 2: AT, 3: PPP (NDIS / Pipe), 4: QMI
    
    Note: Interface 3 of some models of the U9300 series can send AT commands.
    
    T:  Bus=05 Lev=01 Prnt=05 Port=04 Cnt=01 Dev#=  6 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1c9e ProdID=9b3c Rev=03.18
    S:  Manufacturer=Android
    S:  Product=Android
    C:  #Ifs= 5 Cfg#= 1 Atr=80 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=qmi_wwan
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    
    Tested successfully using Modem Manager on U9300.
    Tested successfully AT commands using If=1, If=2 and If=3 on U9300.
    
    Signed-off-by: Coia Prant <coiaprant@gmail.com>
    Reviewed-by: Lars Melin <larsm17@gmail.com>
    [ johan: drop product defines, trim commit message ]
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add Rolling RW101-GL and RW135-GL support [+ + +]
Author: Vanillan Wang <vanillanwang@163.com>
Date:   Tue Apr 16 18:02:55 2024 +0800

    USB: serial: option: add Rolling RW101-GL and RW135-GL support
    
    commit 311f97a4c7c22a01f8897bddf00428dfd0668e79 upstream.
    
    Update the USB serial option driver support for the Rolling
    LTE modules.
    
    - VID:PID 33f8:01a2, RW101-GL for laptop debug M.2 cards(with MBIM
    interface for /Linux/Chrome OS)
    0x01a2: mbim, diag, at, pipe
    - VID:PID 33f8:01a3, RW101-GL for laptop debug M.2 cards(with MBIM
    interface for /Linux/Chrome OS)
    0x01a3: mbim, pipe
    - VID:PID 33f8:01a4, RW101-GL for laptop debug M.2 cards(with MBIM
    interface for /Linux/Chrome OS)
    0x01a4: mbim, diag, at, pipe
    - VID:PID 33f8:0104, RW101-GL for laptop debug M.2 cards(with RMNET
    interface for /Linux/Chrome OS)
    0x0104: RMNET, diag, at, pipe
    - VID:PID 33f8:0115, RW135-GL for laptop debug M.2 cards(with MBIM
    interface for /Linux/Chrome OS)
    0x0115: MBIM, diag, at, pipe
    
    Here are the outputs of usb-devices:
    T:  Bus=01 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#=  5 Spd=480 MxCh= 0
    D:  Ver= 2.01 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=33f8 ProdID=01a2 Rev=05.15
    S:  Manufacturer=Rolling Wireless S.a.r.l.
    S:  Product=Rolling Module
    S:  SerialNumber=12345678
    C:  #Ifs= 5 Cfg#= 1 Atr=a0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    T:  Bus=01 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#=  8 Spd=480 MxCh= 0
    D:  Ver= 2.01 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=33f8 ProdID=01a3 Rev=05.15
    S:  Manufacturer=Rolling Wireless S.a.r.l.
    S:  Product=Rolling Module
    S:  SerialNumber=12345678
    C:  #Ifs= 3 Cfg#= 1 Atr=a0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    T:  Bus=01 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#= 17 Spd=480 MxCh= 0
    D:  Ver= 2.01 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=33f8 ProdID=01a4 Rev=05.15
    S:  Manufacturer=Rolling Wireless S.a.r.l.
    S:  Product=Rolling Module
    S:  SerialNumber=12345678
    C:  #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=usbfs
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    T:  Bus=04 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=5000 MxCh= 0
    D:  Ver= 3.20 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs=  1
    P:  Vendor=33f8 ProdID=0104 Rev=05.04
    S:  Manufacturer=Rolling Wireless S.a.r.l.
    S:  Product=Rolling Module
    S:  SerialNumber=ba2eb033
    C:  #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=896mA
    I:  If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=82(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=83(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=85(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=40 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=87(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
    E:  Ad=0f(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=88(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    E:  Ad=8e(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=usbfs
    E:  Ad=05(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=89(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    
    T:  Bus=01 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#= 16 Spd=480 MxCh= 0
    D:  Ver= 2.01 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=33f8 ProdID=0115 Rev=05.15
    S:  Manufacturer=Rolling Wireless S.a.r.l.
    S:  Product=Rolling Module
    S:  SerialNumber=12345678
    C:  #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=usbfs
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Signed-off-by: Vanillan Wang <vanillanwang@163.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add support for Fibocom FM650/FG650 [+ + +]
Author: Chuanhong Guo <gch981213@gmail.com>
Date:   Tue Mar 12 14:29:12 2024 +0800

    USB: serial: option: add support for Fibocom FM650/FG650
    
    commit fb1f4584b1215e8c209f6b3a4028ed8351a0e961 upstream.
    
    Fibocom FM650/FG650 are 5G modems with ECM/NCM/RNDIS/MBIM modes.
    This patch adds support to all 4 modes.
    
    In all 4 modes, the first serial port is the AT console while the other
    3 appear to be diagnostic interfaces for dumping modem logs.
    
    usb-devices output for all modes:
    
    ECM:
    T:  Bus=04 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  5 Spd=5000 MxCh= 0
    D:  Ver= 3.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs=  1
    P:  Vendor=2cb7 ProdID=0a04 Rev=04.04
    S:  Manufacturer=Fibocom Wireless Inc.
    S:  Product=FG650 Module
    S:  SerialNumber=0123456789ABCDEF
    C:  #Ifs= 5 Cfg#= 1 Atr=c0 MxPwr=504mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=06 Prot=00 Driver=cdc_ether
    E:  Ad=82(I) Atr=03(Int.) MxPS=  16 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
    E:  Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    
    NCM:
    T:  Bus=04 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  6 Spd=5000 MxCh= 0
    D:  Ver= 3.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs=  1
    P:  Vendor=2cb7 ProdID=0a05 Rev=04.04
    S:  Manufacturer=Fibocom Wireless Inc.
    S:  Product=FG650 Module
    S:  SerialNumber=0123456789ABCDEF
    C:  #Ifs= 6 Cfg#= 1 Atr=c0 MxPwr=504mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0d Prot=00 Driver=cdc_ncm
    E:  Ad=82(I) Atr=03(Int.) MxPS=  16 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=01 Driver=cdc_ncm
    E:  Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    
    RNDIS:
    T:  Bus=04 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  4 Spd=5000 MxCh= 0
    D:  Ver= 3.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs=  1
    P:  Vendor=2cb7 ProdID=0a06 Rev=04.04
    S:  Manufacturer=Fibocom Wireless Inc.
    S:  Product=FG650 Module
    S:  SerialNumber=0123456789ABCDEF
    C:  #Ifs= 6 Cfg#= 1 Atr=c0 MxPwr=504mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=e0(wlcon) Sub=01 Prot=03 Driver=rndis_host
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
    E:  Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    
    MBIM:
    T:  Bus=04 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  7 Spd=5000 MxCh= 0
    D:  Ver= 3.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs=  1
    P:  Vendor=2cb7 ProdID=0a07 Rev=04.04
    S:  Manufacturer=Fibocom Wireless Inc.
    S:  Product=FG650 Module
    S:  SerialNumber=0123456789ABCDEF
    C:  #Ifs= 6 Cfg#= 1 Atr=c0 MxPwr=504mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    
    Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add Telit FN920C04 rmnet compositions [+ + +]
Author: Daniele Palmas <dnlplm@gmail.com>
Date:   Thu Apr 18 13:34:30 2024 +0200

    USB: serial: option: add Telit FN920C04 rmnet compositions
    
    commit 582ee2f9d268d302595db3e36b985e5cbb93284d upstream.
    
    Add the following Telit FN920C04 compositions:
    
    0x10a0: rmnet + tty (AT/NMEA) + tty (AT) + tty (diag)
    T:  Bus=03 Lev=01 Prnt=03 Port=06 Cnt=01 Dev#=  5 Spd=480  MxCh= 0
    D:  Ver= 2.01 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10a0 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FN920
    S:  SerialNumber=92c4c4d8
    C:  #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10a4: rmnet + tty (AT) + tty (AT) + tty (diag)
    T:  Bus=03 Lev=01 Prnt=03 Port=06 Cnt=01 Dev#=  8 Spd=480  MxCh= 0
    D:  Ver= 2.01 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10a4 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FN920
    S:  SerialNumber=92c4c4d8
    C:  #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10a9: rmnet + tty (AT) + tty (diag) + DPL (data packet logging) + adb
    T:  Bus=03 Lev=01 Prnt=03 Port=06 Cnt=01 Dev#=  9 Spd=480  MxCh= 0
    D:  Ver= 2.01 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10a9 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FN920
    S:  SerialNumber=92c4c4d8
    C:  #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 3 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: support Quectel EM060K sub-models [+ + +]
Author: Jerry Meng <jerry-meng@foxmail.com>
Date:   Mon Apr 15 15:04:29 2024 +0800

    USB: serial: option: support Quectel EM060K sub-models
    
    commit c840244aba7ad2b83ed904378b36bd6aef25511c upstream.
    
    EM060K_129, EM060K_12a, EM060K_12b and EM0060K_12c are EM060K's sub-models,
    having the same name "Quectel EM060K-GL" and the same interface layout.
    
    MBIM + GNSS + DIAG + NMEA + AT + QDSS + DPL
    
    T:  Bus=03 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#=  8 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=2c7c ProdID=0129 Rev= 5.04
    S:  Manufacturer=Quectel
    S:  Product=Quectel EM060K-GL
    S:  SerialNumber=f6fa08b6
    C:* #Ifs= 8 Cfg#= 1 Atr=a0 MxPwr=500mA
    A:  FirstIf#= 0 IfCount= 2 Cls=02(comm.) Sub=0e Prot=00
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=81(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=0f(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 2 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=40 Driver=option
    E:  Ad=85(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=87(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 6 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=70 Driver=(none)
    E:  Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 7 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=8f(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Signed-off-by: Jerry Meng <jerry-meng@foxmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: typec: tcpm: Correct the PDO counting in pd_set [+ + +]
Author: Kyle Tso <kyletso@google.com>
Date:   Thu Apr 4 21:35:17 2024 +0800

    usb: typec: tcpm: Correct the PDO counting in pd_set
    
    commit c4128304c2169b4664ed6fb6200f228cead2ab70 upstream.
    
    Off-by-one errors happen because nr_snk_pdo and nr_src_pdo are
    incorrectly added one. The index of the loop is equal to the number of
    PDOs to be updated when leaving the loop and it doesn't need to be added
    one.
    
    When doing the power negotiation, TCPM relies on the "nr_snk_pdo" as
    the size of the local sink PDO array to match the Source capabilities
    of the partner port. If the off-by-one overflow occurs, a wrong RDO
    might be sent and unexpected power transfer might happen such as over
    voltage or over current (than expected).
    
    "nr_src_pdo" is used to set the Rp level when the port is in Source
    role. It is also the array size of the local Source capabilities when
    filling up the buffer which will be sent as the Source PDOs (such as
    in Power Negotiation). If the off-by-one overflow occurs, a wrong Rp
    level might be set and wrong Source PDOs will be sent to the partner
    port. This could potentially cause over current or port resets.
    
    Fixes: cd099cde4ed2 ("usb: typec: tcpm: Support multiple capabilities")
    Cc: stable@vger.kernel.org
    Signed-off-by: Kyle Tso <kyletso@google.com>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Link: https://lore.kernel.org/r/20240404133517.2707955-1-kyletso@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
userfaultfd: change src_folio after ensuring it's unpinned in UFFDIO_MOVE [+ + +]
Author: Lokesh Gidra <lokeshgidra@google.com>
Date:   Thu Apr 4 10:17:26 2024 -0700

    userfaultfd: change src_folio after ensuring it's unpinned in UFFDIO_MOVE
    
    commit c0205eaf3af9f5db14d4b5ee4abacf4a583c3c50 upstream.
    
    Commit d7a08838ab74 ("mm: userfaultfd: fix unexpected change to src_folio
    when UFFDIO_MOVE fails") moved the src_folio->{mapping, index} changing to
    after clearing the page-table and ensuring that it's not pinned.  This
    avoids failure of swapout+migration and possibly memory corruption.
    
    However, the commit missed fixing it in the huge-page case.
    
    Link: https://lkml.kernel.org/r/20240404171726.2302435-1-lokeshgidra@google.com
    Fixes: adef440691ba ("userfaultfd: UFFDIO_MOVE uABI")
    Signed-off-by: Lokesh Gidra <lokeshgidra@google.com>
    Acked-by: David Hildenbrand <david@redhat.com>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: Kalesh Singh <kaleshsingh@google.com>
    Cc: Lokesh Gidra <lokeshgidra@google.com>
    Cc: Nicolas Geoffray <ngeoffray@google.com>
    Cc: Peter Xu <peterx@redhat.com>
    Cc: Qi Zheng <zhengqi.arch@bytedance.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Lokesh Gidra <lokeshgidra@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/bugs: Fix BHI retpoline check [+ + +]
Author: Josh Poimboeuf <jpoimboe@kernel.org>
Date:   Fri Apr 12 11:10:33 2024 -0700

    x86/bugs: Fix BHI retpoline check
    
    [ Upstream commit 69129794d94c544810e68b2b4eaa7e44063f9bf2 ]
    
    Confusingly, X86_FEATURE_RETPOLINE doesn't mean retpolines are enabled,
    as it also includes the original "AMD retpoline" which isn't a retpoline
    at all.
    
    Also replace cpu_feature_enabled() with boot_cpu_has() because this is
    before alternatives are patched and cpu_feature_enabled()'s fallback
    path is slower than plain old boot_cpu_has().
    
    Fixes: ec9404e40e8f ("x86/bhi: Add BHI mitigation knob")
    Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Reviewed-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Link: https://lore.kernel.org/r/ad3807424a3953f0323c011a643405619f2a4927.1712944776.git.jpoimboe@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/cpufeatures: Fix dependencies for GFNI, VAES, and VPCLMULQDQ [+ + +]
Author: Eric Biggers <ebiggers@google.com>
Date:   Tue Apr 16 23:04:34 2024 -0700

    x86/cpufeatures: Fix dependencies for GFNI, VAES, and VPCLMULQDQ
    
    [ Upstream commit 9543f6e26634537997b6e909c20911b7bf4876de ]
    
    Fix cpuid_deps[] to list the correct dependencies for GFNI, VAES, and
    VPCLMULQDQ.  These features don't depend on AVX512, and there exist CPUs
    that support these features but not AVX512.  GFNI actually doesn't even
    depend on AVX.
    
    This prevents GFNI from being unnecessarily disabled if AVX is disabled
    to mitigate the GDS vulnerability.
    
    This also prevents all three features from being unnecessarily disabled
    if AVX512VL (or its dependency AVX512F) were to be disabled, but it
    looks like there isn't any case where this happens anyway.
    
    Fixes: c128dbfa0f87 ("x86/cpufeatures: Enable new SSE/AVX/AVX512 CPU features")
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Acked-by: Dave Hansen <dave.hansen@linux.intel.com>
    Link: https://lore.kernel.org/r/20240417060434.47101-1-ebiggers@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>