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

 
3c589_cs: Fix an error handling path in tc589_probe() [+ + +]
Author: Christophe JAILLET <[email protected]>
Date:   Sat May 20 11:48:55 2023 +0200

    3c589_cs: Fix an error handling path in tc589_probe()
    
    commit 640bf95b2c7c2981fb471acdafbd3e0458f8390d upstream.
    
    Should tc589_config() fail, some resources need to be released as already
    done in the remove function.
    
    Fixes: 15b99ac17295 ("[PATCH] pcmcia: add return value to _config() functions")
    Signed-off-by: Christophe JAILLET <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://lore.kernel.org/r/d8593ae867b24c79063646e36f9b18b0790107cb.1684575975.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ALSA: hda/ca0132: add quirk for EVGA X299 DARK [+ + +]
Author: Adam Stylinski <[email protected]>
Date:   Sun May 21 10:52:23 2023 -0400

    ALSA: hda/ca0132: add quirk for EVGA X299 DARK
    
    commit 7843380d07bbeffd3ce6504e73cf61f840ae76ca upstream.
    
    This quirk is necessary for surround and other DSP effects to work
    with the onboard ca0132 based audio chipset for the EVGA X299 dark
    mainboard.
    
    Signed-off-by: Adam Stylinski <[email protected]>
    Cc: <[email protected]>
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=67071
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: hda/realtek: Enable headset onLenovo M70/M90 [+ + +]
Author: Bin Li <[email protected]>
Date:   Wed May 24 19:37:55 2023 +0800

    ALSA: hda/realtek: Enable headset onLenovo M70/M90
    
    commit 4ca110cab46561cd74a2acd9b447435acb4bec5f upstream.
    
    Lenovo M70/M90 Gen4 are equipped with ALC897, and they need
    ALC897_FIXUP_HEADSET_MIC_PIN quirk to make its headset mic work.
    The previous quirk for M70/M90 is for Gen3.
    
    Signed-off-by: Bin Li <[email protected]>
    Cc: <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: hda: Fix unhandled register update during auto-suspend period [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Thu May 18 13:35:20 2023 +0200

    ALSA: hda: Fix unhandled register update during auto-suspend period
    
    commit 81302b1c7c997e8a56c1c2fc63a296ebeb0cd2d0 upstream.
    
    It's reported that the recording started right after the driver probe
    doesn't work properly, and it turned out that this is related with the
    codec auto-suspend.  Namely, after the probe phase, the usage count
    goes zero, and the auto-suspend is programmed, but the codec is kept
    still active until the auto-suspend expiration.  When an application
    (e.g. alsactl) updates the mixer values at this moment, the values are
    cached but not actually written.  Then, starting arecord thereafter
    also results in the silence because of the missing unmute.
    
    The root cause is the handling of "lazy update" mode; when a mixer
    value is updated *after* the suspend, it should update only the cache
    and exits.  At the resume, the cached value is written to the device,
    in turn.  The problem is that the current code misinterprets the state
    of auto-suspend as if it were already suspended.
    
    Although we can add the check of the actual device state after
    pm_runtime_get_if_in_use() for catching the missing state, this won't
    suffice; the second call of regmap_update_bits_check() will skip
    writing the register because the cache has been already updated by the
    first call.  So we'd need fixes in two different places.
    
    OTOH, a simpler fix is to replace pm_runtime_get_if_in_use() with
    pm_runtime_get_if_active() (with ign_usage_count=true).  This change
    implies that the driver takes the pm refcount if the device is still
    in ACTIVE state and continues the processing.  A small caveat is that
    this will leave the auto-suspend timer.  But, since the timer callback
    itself checks the device state and aborts gracefully when it's active,
    this won't be any substantial problem.
    
    Long story short: we address the missing register-write problem just
    by replacing the pm_runtime_*() call in snd_hda_keep_power_up().
    
    Fixes: fc4f000bf8c0 ("ALSA: hda - Fix unexpected resume through regmap code path")
    Reported-by: Amadeusz SÅ‚awiÅ„ski <[email protected]>
    Closes: https://lore.kernel.org/r/[email protected]
    Suggested-by: Cezary Rojewski <[email protected]>
    Cc: <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
arm64: Also reset KASAN tag if page is not PG_mte_tagged [+ + +]
Author: Peter Collingbourne <[email protected]>
Date:   Thu Apr 20 14:09:45 2023 -0700

    arm64: Also reset KASAN tag if page is not PG_mte_tagged
    
    commit 2efbafb91e12ff5a16cbafb0085e4c10c3fca493 upstream.
    
    Consider the following sequence of events:
    
    1) A page in a PROT_READ|PROT_WRITE VMA is faulted.
    2) Page migration allocates a page with the KASAN allocator,
       causing it to receive a non-match-all tag, and uses it
       to replace the page faulted in 1.
    3) The program uses mprotect() to enable PROT_MTE on the page faulted in 1.
    
    As a result of step 3, we are left with a non-match-all tag for a page
    with tags accessible to userspace, which can lead to the same kind of
    tag check faults that commit e74a68468062 ("arm64: Reset KASAN tag in
    copy_highpage with HW tags only") intended to fix.
    
    The general invariant that we have for pages in a VMA with VM_MTE_ALLOWED
    is that they cannot have a non-match-all tag. As a result of step 2, the
    invariant is broken. This means that the fix in the referenced commit
    was incomplete and we also need to reset the tag for pages without
    PG_mte_tagged.
    
    Fixes: e5b8d9218951 ("arm64: mte: reset the page tag in page->flags")
    Cc: <[email protected]> # 5.15
    Link: https://linux-review.googlesource.com/id/I7409cdd41acbcb215c2a7417c1e50d37b875beff
    Signed-off-by: Peter Collingbourne <[email protected]>
    Reviewed-by: Catalin Marinas <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Will Deacon <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

arm64: dts: imx8mn-var-som: fix PHY detection bug by adding deassert delay [+ + +]
Author: Hugo Villeneuve <[email protected]>
Date:   Mon May 1 13:05:32 2023 -0400

    arm64: dts: imx8mn-var-som: fix PHY detection bug by adding deassert delay
    
    commit f161cea5a20f3aeeb637a88ad1705fc2720b4d58 upstream.
    
    While testing the ethernet interface on a Variscite symphony carrier
    board using an imx8mn SOM with an onboard ADIN1300 PHY (EC hardware
    configuration), the ethernet PHY is not detected.
    
    The ADIN1300 datasheet indicate that the "Management interface
    active (t4)" state is reached at most 5ms after the reset signal is
    deasserted.
    
    The device tree in Variscite custom git repository uses the following
    property:
    
        phy-reset-post-delay = <20>;
    
    Add a new MDIO property 'reset-deassert-us' of 20ms to have the same
    delay inside the ethphy node. Adding this property fixes the problem
    with the PHY detection.
    
    Note that this SOM can also have an Atheros AR8033 PHY. In this case,
    a 1ms deassert delay is sufficient. Add a comment to that effect.
    
    Fixes: ade0176dd8a0 ("arm64: dts: imx8mn-var-som: Add Variscite VAR-SOM-MX8MN System on Module")
    Signed-off-by: Hugo Villeneuve <[email protected]>
    Signed-off-by: Shawn Guo <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ARM: dts: imx6qdl-mba6: Add missing pvcie-supply regulator [+ + +]
Author: Alexander Stein <[email protected]>
Date:   Wed May 3 13:31:10 2023 +0200

    ARM: dts: imx6qdl-mba6: Add missing pvcie-supply regulator
    
    commit 91aa4b3782448a7a13baa8cbcdfd5fd19defcbd9 upstream.
    
    This worked before by coincidence, as the regulator was probed and enabled
    before PCI RC probe. But probe order changed since commit 259b93b21a9f
    ("regulator: Set PROBE_PREFER_ASYNCHRONOUS for drivers that existed in
    4.14") and PCIe supply is enabled after RC.
    Fix this by adding the regulator to RC node.
    
    The PCIe vaux regulator still needs to be enabled unconditionally for
    Mini-PCIe USB-only devices.
    
    Fixes: ef3846247b41 ("ARM: dts: imx6qdl: add TQ-Systems MBa6x device trees")
    Signed-off-by: Alexander Stein <[email protected]>
    Signed-off-by: Shawn Guo <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ASoC: Intel: avs: Access path components under lock [+ + +]
Author: Amadeusz SÅ‚awiÅ„ski <[email protected]>
Date:   Fri May 19 22:17:06 2023 +0200

    ASoC: Intel: avs: Access path components under lock
    
    commit d849996f7458042af803b7d15a181922834c5249 upstream.
    
    Path and its components should be accessed under lock to prevent
    problems with one thread modifying them while other tries to read.
    
    Fixes: c8c960c10971 ("ASoC: Intel: avs: APL-based platforms support")
    Reviewed-by: Cezary Rojewski <[email protected]>
    Signed-off-by: Amadeusz SÅ‚awiÅ„ski <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: Intel: avs: Fix declaration of enum avs_channel_config [+ + +]
Author: Cezary Rojewski <[email protected]>
Date:   Fri May 19 22:17:08 2023 +0200

    ASoC: Intel: avs: Fix declaration of enum avs_channel_config
    
    commit 1cf036deebcdec46d6348842bd2f8931202fd4cd upstream.
    
    Constant 'C4_CHANNEL' does not exist on the firmware side. Value 0xC is
    reserved for 'C7_1' instead.
    
    Fixes: 580a5912d1fe ("ASoC: Intel: avs: Declare module configuration types")
    Signed-off-by: Cezary Rojewski <[email protected]>
    Signed-off-by: Amadeusz SÅ‚awiÅ„ski <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: Intel: Skylake: Fix declaration of enum skl_ch_cfg [+ + +]
Author: Cezary Rojewski <[email protected]>
Date:   Fri May 19 22:17:07 2023 +0200

    ASoC: Intel: Skylake: Fix declaration of enum skl_ch_cfg
    
    commit 95109657471311601b98e71f03d0244f48dc61bb upstream.
    
    Constant 'C4_CHANNEL' does not exist on the firmware side. Value 0xC is
    reserved for 'C7_1' instead.
    
    Fixes: 04afbbbb1cba ("ASoC: Intel: Skylake: Update the topology interface structure")
    Signed-off-by: Cezary Rojewski <[email protected]>
    Signed-off-by: Amadeusz SÅ‚awiÅ„ski <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: lpass: Fix for KASAN use_after_free out of bounds [+ + +]
Author: Ravulapati Vishnu Vardhan Rao <[email protected]>
Date:   Thu May 11 16:55:32 2023 +0530

    ASoC: lpass: Fix for KASAN use_after_free out of bounds
    
    commit 75e5fab7db0cecb6e16b22c34608f0b40a4c7cd1 upstream.
    
    When we run syzkaller we get below Out of Bounds error.
    
    "KASAN: slab-out-of-bounds Read in regcache_flat_read"
    
    Below is the backtrace of the issue:
    
    BUG: KASAN: slab-out-of-bounds in regcache_flat_read+0x10c/0x110
    Read of size 4 at addr ffffff8088fbf714 by task syz-executor.4/14144
    CPU: 6 PID: 14144 Comm: syz-executor.4 Tainted: G        W
    Hardware name: Qualcomm Technologies, Inc. sc7280 CRD platform (rev5+) (DT)
    Call trace:
    dump_backtrace+0x0/0x4ec
    show_stack+0x34/0x50
    dump_stack_lvl+0xdc/0x11c
    print_address_description+0x30/0x2d8
    kasan_report+0x178/0x1e4
    __asan_report_load4_noabort+0x44/0x50
    regcache_flat_read+0x10c/0x110
    regcache_read+0xf8/0x5a0
    _regmap_read+0x45c/0x86c
    _regmap_update_bits+0x128/0x290
    regmap_update_bits_base+0xc0/0x15c
    snd_soc_component_update_bits+0xa8/0x22c
    snd_soc_component_write_field+0x68/0xd4
    tx_macro_put_dec_enum+0x1d0/0x268
    snd_ctl_elem_write+0x288/0x474
    
    By Error checking and checking valid values issue gets rectifies.
    
    Signed-off-by: Ravulapati Vishnu Vardhan Rao <[email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ASoC: rt5682: Disable jack detection interrupt during suspend [+ + +]
Author: Matthias Kaehlcke <[email protected]>
Date:   Tue May 16 16:46:30 2023 +0000

    ASoC: rt5682: Disable jack detection interrupt during suspend
    
    commit 8b271370e963370703819bd9795a54d658071bed upstream.
    
    The rt5682 driver switches its regmap to cache-only when the
    device suspends and back to regular mode on resume. When the
    jack detect interrupt fires rt5682_irq() schedules the jack
    detect work. This can result in invalid reads from the regmap
    in cache-only mode if the work runs before the device has
    resumed:
    
    [   56.245502] rt5682 9-001a: ASoC: error at soc_component_read_no_lock on rt5682.9-001a for register: [0x000000f0] -16
    
    Disable the jack detection interrupt during suspend and
    re-enable it on resume. The driver already schedules the
    jack detection work on resume, so any state change during
    suspend is still handled.
    
    This is essentially the same as commit f7d00a9be147 ("SoC:
    rt5682s: Disable jack detection interrupt during suspend")
    for the rt5682s.
    
    Cc: [email protected]
    Signed-off-by: Matthias Kaehlcke <[email protected]
    Reviewed-by: Douglas Anderson <[email protected]
    Reviewed-by: Stephen Boyd <[email protected]
    Link: https://lore.kernel.org/r/20230516164629.1.Ibf79e94b3442eecc0054d2b478779cc512d967fc@changeid
    Signed-off-by: Mark Brown <[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
binder: add lockless binder_alloc_(set|get)_vma() [+ + +]
Author: Carlos Llamas <[email protected]>
Date:   Tue May 2 20:12:19 2023 +0000

    binder: add lockless binder_alloc_(set|get)_vma()
    
    commit 0fa53349c3acba0239369ba4cd133740a408d246 upstream.
    
    Bring back the original lockless design in binder_alloc to determine
    whether the buffer setup has been completed by the ->mmap() handler.
    However, this time use smp_load_acquire() and smp_store_release() to
    wrap all the ordering in a single macro call.
    
    Also, add comments to make it evident that binder uses alloc->vma to
    determine when the binder_alloc has been fully initialized. In these
    scenarios acquiring the mmap_lock is not required.
    
    Fixes: a43cfc87caaf ("android: binder: stop saving a pointer to the VMA")
    Cc: Liam Howlett <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: [email protected]
    Signed-off-by: Carlos Llamas <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

binder: fix UAF caused by faulty buffer cleanup [+ + +]
Author: Carlos Llamas <[email protected]>
Date:   Fri May 5 20:30:20 2023 +0000

    binder: fix UAF caused by faulty buffer cleanup
    
    commit bdc1c5fac982845a58d28690cdb56db8c88a530d upstream.
    
    In binder_transaction_buffer_release() the 'failed_at' offset indicates
    the number of objects to clean up. However, this function was changed by
    commit 44d8047f1d87 ("binder: use standard functions to allocate fds"),
    to release all the objects in the buffer when 'failed_at' is zero.
    
    This introduced an issue when a transaction buffer is released without
    any objects having been processed so far. In this case, 'failed_at' is
    indeed zero yet it is misinterpreted as releasing the entire buffer.
    
    This leads to use-after-free errors where nodes are incorrectly freed
    and subsequently accessed. Such is the case in the following KASAN
    report:
    
      ==================================================================
      BUG: KASAN: slab-use-after-free in binder_thread_read+0xc40/0x1f30
      Read of size 8 at addr ffff4faf037cfc58 by task poc/474
    
      CPU: 6 PID: 474 Comm: poc Not tainted 6.3.0-12570-g7df047b3f0aa #5
      Hardware name: linux,dummy-virt (DT)
      Call trace:
       dump_backtrace+0x94/0xec
       show_stack+0x18/0x24
       dump_stack_lvl+0x48/0x60
       print_report+0xf8/0x5b8
       kasan_report+0xb8/0xfc
       __asan_load8+0x9c/0xb8
       binder_thread_read+0xc40/0x1f30
       binder_ioctl+0xd9c/0x1768
       __arm64_sys_ioctl+0xd4/0x118
       invoke_syscall+0x60/0x188
      [...]
    
      Allocated by task 474:
       kasan_save_stack+0x3c/0x64
       kasan_set_track+0x2c/0x40
       kasan_save_alloc_info+0x24/0x34
       __kasan_kmalloc+0xb8/0xbc
       kmalloc_trace+0x48/0x5c
       binder_new_node+0x3c/0x3a4
       binder_transaction+0x2b58/0x36f0
       binder_thread_write+0x8e0/0x1b78
       binder_ioctl+0x14a0/0x1768
       __arm64_sys_ioctl+0xd4/0x118
       invoke_syscall+0x60/0x188
      [...]
    
      Freed by task 475:
       kasan_save_stack+0x3c/0x64
       kasan_set_track+0x2c/0x40
       kasan_save_free_info+0x38/0x5c
       __kasan_slab_free+0xe8/0x154
       __kmem_cache_free+0x128/0x2bc
       kfree+0x58/0x70
       binder_dec_node_tmpref+0x178/0x1fc
       binder_transaction_buffer_release+0x430/0x628
       binder_transaction+0x1954/0x36f0
       binder_thread_write+0x8e0/0x1b78
       binder_ioctl+0x14a0/0x1768
       __arm64_sys_ioctl+0xd4/0x118
       invoke_syscall+0x60/0x188
      [...]
      ==================================================================
    
    In order to avoid these issues, let's always calculate the intended
    'failed_at' offset beforehand. This is renamed and wrapped in a helper
    function to make it clear and convenient.
    
    Fixes: 32e9f56a96d8 ("binder: don't detect sender/target during buffer cleanup")
    Reported-by: Zi Fan Tan <[email protected]>
    Cc: [email protected]
    Signed-off-by: Carlos Llamas <[email protected]>
    Acked-by: Todd Kjos <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

binder: fix UAF of alloc->vma in race with munmap() [+ + +]
Author: Carlos Llamas <[email protected]>
Date:   Fri May 19 19:59:49 2023 +0000

    binder: fix UAF of alloc->vma in race with munmap()
    
    commit d1d8875c8c13517f6fd1ff8d4d3e1ac366a17e07 upstream.
    
    [ cmllamas: clean forward port from commit 015ac18be7de ("binder: fix
      UAF of alloc->vma in race with munmap()") in 5.10 stable. It is needed
      in mainline after the revert of commit a43cfc87caaf ("android: binder:
      stop saving a pointer to the VMA") as pointed out by Liam. The commit
      log and tags have been tweaked to reflect this. ]
    
    In commit 720c24192404 ("ANDROID: binder: change down_write to
    down_read") binder assumed the mmap read lock is sufficient to protect
    alloc->vma inside binder_update_page_range(). This used to be accurate
    until commit dd2283f2605e ("mm: mmap: zap pages with read mmap_sem in
    munmap"), which now downgrades the mmap_lock after detaching the vma
    from the rbtree in munmap(). Then it proceeds to teardown and free the
    vma with only the read lock held.
    
    This means that accesses to alloc->vma in binder_update_page_range() now
    will race with vm_area_free() in munmap() and can cause a UAF as shown
    in the following KASAN trace:
    
      ==================================================================
      BUG: KASAN: use-after-free in vm_insert_page+0x7c/0x1f0
      Read of size 8 at addr ffff16204ad00600 by task server/558
    
      CPU: 3 PID: 558 Comm: server Not tainted 5.10.150-00001-gdc8dcf942daa #1
      Hardware name: linux,dummy-virt (DT)
      Call trace:
       dump_backtrace+0x0/0x2a0
       show_stack+0x18/0x2c
       dump_stack+0xf8/0x164
       print_address_description.constprop.0+0x9c/0x538
       kasan_report+0x120/0x200
       __asan_load8+0xa0/0xc4
       vm_insert_page+0x7c/0x1f0
       binder_update_page_range+0x278/0x50c
       binder_alloc_new_buf+0x3f0/0xba0
       binder_transaction+0x64c/0x3040
       binder_thread_write+0x924/0x2020
       binder_ioctl+0x1610/0x2e5c
       __arm64_sys_ioctl+0xd4/0x120
       el0_svc_common.constprop.0+0xac/0x270
       do_el0_svc+0x38/0xa0
       el0_svc+0x1c/0x2c
       el0_sync_handler+0xe8/0x114
       el0_sync+0x180/0x1c0
    
      Allocated by task 559:
       kasan_save_stack+0x38/0x6c
       __kasan_kmalloc.constprop.0+0xe4/0xf0
       kasan_slab_alloc+0x18/0x2c
       kmem_cache_alloc+0x1b0/0x2d0
       vm_area_alloc+0x28/0x94
       mmap_region+0x378/0x920
       do_mmap+0x3f0/0x600
       vm_mmap_pgoff+0x150/0x17c
       ksys_mmap_pgoff+0x284/0x2dc
       __arm64_sys_mmap+0x84/0xa4
       el0_svc_common.constprop.0+0xac/0x270
       do_el0_svc+0x38/0xa0
       el0_svc+0x1c/0x2c
       el0_sync_handler+0xe8/0x114
       el0_sync+0x180/0x1c0
    
      Freed by task 560:
       kasan_save_stack+0x38/0x6c
       kasan_set_track+0x28/0x40
       kasan_set_free_info+0x24/0x4c
       __kasan_slab_free+0x100/0x164
       kasan_slab_free+0x14/0x20
       kmem_cache_free+0xc4/0x34c
       vm_area_free+0x1c/0x2c
       remove_vma+0x7c/0x94
       __do_munmap+0x358/0x710
       __vm_munmap+0xbc/0x130
       __arm64_sys_munmap+0x4c/0x64
       el0_svc_common.constprop.0+0xac/0x270
       do_el0_svc+0x38/0xa0
       el0_svc+0x1c/0x2c
       el0_sync_handler+0xe8/0x114
       el0_sync+0x180/0x1c0
    
      [...]
      ==================================================================
    
    To prevent the race above, revert back to taking the mmap write lock
    inside binder_update_page_range(). One might expect an increase of mmap
    lock contention. However, binder already serializes these calls via top
    level alloc->mutex. Also, there was no performance impact shown when
    running the binder benchmark tests.
    
    Fixes: c0fd2101781e ("Revert "android: binder: stop saving a pointer to the VMA"")
    Fixes: dd2283f2605e ("mm: mmap: zap pages with read mmap_sem in munmap")
    Reported-by: Jann Horn <[email protected]>
    Closes: https://lore.kernel.org/all/20230518144052.xkj6vmddccq4v66b@revolver
    Cc: <[email protected]>
    Cc: Minchan Kim <[email protected]>
    Cc: Yang Shi <[email protected]>
    Cc: Liam Howlett <[email protected]>
    Signed-off-by: Carlos Llamas <[email protected]>
    Acked-by: Todd Kjos <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
bpf: fix a memory leak in the LRU and LRU_PERCPU hash maps [+ + +]
Author: Anton Protopopov <[email protected]>
Date:   Mon May 22 15:45:58 2023 +0000

    bpf: fix a memory leak in the LRU and LRU_PERCPU hash maps
    
    commit b34ffb0c6d23583830f9327864b9c1f486003305 upstream.
    
    The LRU and LRU_PERCPU maps allocate a new element on update before locking the
    target hash table bucket. Right after that the maps try to lock the bucket.
    If this fails, then maps return -EBUSY to the caller without releasing the
    allocated element. This makes the element untracked: it doesn't belong to
    either of free lists, and it doesn't belong to the hash table, so can't be
    re-used; this eventually leads to the permanent -ENOMEM on LRU map updates,
    which is unexpected. Fix this by returning the element to the local free list
    if bucket locking fails.
    
    Fixes: 20b6cc34ea74 ("bpf: Avoid hashtab deadlock with map_locked")
    Signed-off-by: Anton Protopopov <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Martin KaFai Lau <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

bpf: Fix mask generation for 32-bit narrow loads of 64-bit fields [+ + +]
Author: Will Deacon <[email protected]>
Date:   Thu May 18 11:25:28 2023 +0100

    bpf: Fix mask generation for 32-bit narrow loads of 64-bit fields
    
    commit 0613d8ca9ab382caabe9ed2dceb429e9781e443f upstream.
    
    A narrow load from a 64-bit context field results in a 64-bit load
    followed potentially by a 64-bit right-shift and then a bitwise AND
    operation to extract the relevant data.
    
    In the case of a 32-bit access, an immediate mask of 0xffffffff is used
    to construct a 64-bit BPP_AND operation which then sign-extends the mask
    value and effectively acts as a glorified no-op. For example:
    
    0:      61 10 00 00 00 00 00 00 r0 = *(u32 *)(r1 + 0)
    
    results in the following code generation for a 64-bit field:
    
            ldr     x7, [x7]        // 64-bit load
            mov     x10, #0xffffffffffffffff
            and     x7, x7, x10
    
    Fix the mask generation so that narrow loads always perform a 32-bit AND
    operation:
    
            ldr     x7, [x7]        // 64-bit load
            mov     w10, #0xffffffff
            and     w7, w7, w10
    
    Cc: Alexei Starovoitov <[email protected]>
    Cc: Daniel Borkmann <[email protected]>
    Cc: John Fastabend <[email protected]>
    Cc: Krzesimir Nowak <[email protected]>
    Cc: Andrey Ignatov <[email protected]>
    Acked-by: Yonghong Song <[email protected]>
    Fixes: 31fd85816dbe ("bpf: permits narrower load from bpf program context fields")
    Signed-off-by: Will Deacon <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
btrfs: use nofs when cleaning up aborted transactions [+ + +]
Author: Josef Bacik <[email protected]>
Date:   Thu May 11 12:45:59 2023 -0400

    btrfs: use nofs when cleaning up aborted transactions
    
    commit 597441b3436a43011f31ce71dc0a6c0bf5ce958a upstream.
    
    Our CI system caught a lockdep splat:
    
      ======================================================
      WARNING: possible circular locking dependency detected
      6.3.0-rc7+ #1167 Not tainted
      ------------------------------------------------------
      kswapd0/46 is trying to acquire lock:
      ffff8c6543abd650 (sb_internal#2){++++}-{0:0}, at: btrfs_commit_inode_delayed_inode+0x5f/0x120
    
      but task is already holding lock:
      ffffffffabe61b40 (fs_reclaim){+.+.}-{0:0}, at: balance_pgdat+0x4aa/0x7a0
    
      which lock already depends on the new lock.
    
      the existing dependency chain (in reverse order) is:
    
      -> #1 (fs_reclaim){+.+.}-{0:0}:
             fs_reclaim_acquire+0xa5/0xe0
             kmem_cache_alloc+0x31/0x2c0
             alloc_extent_state+0x1d/0xd0
             __clear_extent_bit+0x2e0/0x4f0
             try_release_extent_mapping+0x216/0x280
             btrfs_release_folio+0x2e/0x90
             invalidate_inode_pages2_range+0x397/0x470
             btrfs_cleanup_dirty_bgs+0x9e/0x210
             btrfs_cleanup_one_transaction+0x22/0x760
             btrfs_commit_transaction+0x3b7/0x13a0
             create_subvol+0x59b/0x970
             btrfs_mksubvol+0x435/0x4f0
             __btrfs_ioctl_snap_create+0x11e/0x1b0
             btrfs_ioctl_snap_create_v2+0xbf/0x140
             btrfs_ioctl+0xa45/0x28f0
             __x64_sys_ioctl+0x88/0xc0
             do_syscall_64+0x38/0x90
             entry_SYSCALL_64_after_hwframe+0x72/0xdc
    
      -> #0 (sb_internal#2){++++}-{0:0}:
             __lock_acquire+0x1435/0x21a0
             lock_acquire+0xc2/0x2b0
             start_transaction+0x401/0x730
             btrfs_commit_inode_delayed_inode+0x5f/0x120
             btrfs_evict_inode+0x292/0x3d0
             evict+0xcc/0x1d0
             inode_lru_isolate+0x14d/0x1e0
             __list_lru_walk_one+0xbe/0x1c0
             list_lru_walk_one+0x58/0x80
             prune_icache_sb+0x39/0x60
             super_cache_scan+0x161/0x1f0
             do_shrink_slab+0x163/0x340
             shrink_slab+0x1d3/0x290
             shrink_node+0x300/0x720
             balance_pgdat+0x35c/0x7a0
             kswapd+0x205/0x410
             kthread+0xf0/0x120
             ret_from_fork+0x29/0x50
    
      other info that might help us debug this:
    
       Possible unsafe locking scenario:
    
             CPU0                    CPU1
             ----                    ----
        lock(fs_reclaim);
                                     lock(sb_internal#2);
                                     lock(fs_reclaim);
        lock(sb_internal#2);
    
       *** DEADLOCK ***
    
      3 locks held by kswapd0/46:
       #0: ffffffffabe61b40 (fs_reclaim){+.+.}-{0:0}, at: balance_pgdat+0x4aa/0x7a0
       #1: ffffffffabe50270 (shrinker_rwsem){++++}-{3:3}, at: shrink_slab+0x113/0x290
       #2: ffff8c6543abd0e0 (&type->s_umount_key#44){++++}-{3:3}, at: super_cache_scan+0x38/0x1f0
    
      stack backtrace:
      CPU: 0 PID: 46 Comm: kswapd0 Not tainted 6.3.0-rc7+ #1167
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.13.0-2.fc32 04/01/2014
      Call Trace:
       <TASK>
       dump_stack_lvl+0x58/0x90
       check_noncircular+0xd6/0x100
       ? save_trace+0x3f/0x310
       ? add_lock_to_list+0x97/0x120
       __lock_acquire+0x1435/0x21a0
       lock_acquire+0xc2/0x2b0
       ? btrfs_commit_inode_delayed_inode+0x5f/0x120
       start_transaction+0x401/0x730
       ? btrfs_commit_inode_delayed_inode+0x5f/0x120
       btrfs_commit_inode_delayed_inode+0x5f/0x120
       btrfs_evict_inode+0x292/0x3d0
       ? lock_release+0x134/0x270
       ? __pfx_wake_bit_function+0x10/0x10
       evict+0xcc/0x1d0
       inode_lru_isolate+0x14d/0x1e0
       __list_lru_walk_one+0xbe/0x1c0
       ? __pfx_inode_lru_isolate+0x10/0x10
       ? __pfx_inode_lru_isolate+0x10/0x10
       list_lru_walk_one+0x58/0x80
       prune_icache_sb+0x39/0x60
       super_cache_scan+0x161/0x1f0
       do_shrink_slab+0x163/0x340
       shrink_slab+0x1d3/0x290
       shrink_node+0x300/0x720
       balance_pgdat+0x35c/0x7a0
       kswapd+0x205/0x410
       ? __pfx_autoremove_wake_function+0x10/0x10
       ? __pfx_kswapd+0x10/0x10
       kthread+0xf0/0x120
       ? __pfx_kthread+0x10/0x10
       ret_from_fork+0x29/0x50
       </TASK>
    
    This happens because when we abort the transaction in the transaction
    commit path we call invalidate_inode_pages2_range on our block group
    cache inodes (if we have space cache v1) and any delalloc inodes we may
    have.  The plain invalidate_inode_pages2_range() call passes through
    GFP_KERNEL, which makes sense in most cases, but not here.  Wrap these
    two invalidate callees with memalloc_nofs_save/memalloc_nofs_restore to
    make sure we don't end up with the fs reclaim dependency under the
    transaction dependency.
    
    CC: [email protected] # 4.14+
    Signed-off-by: Josef Bacik <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cifs: mapchars mount option ignored [+ + +]
Author: Steve French <[email protected]>
Date:   Wed May 24 03:26:19 2023 -0500

    cifs: mapchars mount option ignored
    
    commit cb8b02fd6343228966324528adf920bfb8b8e681 upstream.
    
    There are two ways that special characters (not allowed in some
    other operating systems like Windows, but allowed in POSIX) have
    been mapped in the past ("SFU" and "SFM" mappings) to allow them
    to be stored in a range reserved for special chars. The default
    for Linux has been to use "mapposix" (ie the SFM mapping) but
    the conversion to the new mount API in the 5.11 kernel broke
    the ability to override the default mapping of the reserved
    characters (like '?' and '*' and '\') via "mapchars" mount option.
    
    This patch fixes that - so can now mount with "mapchars"
    mount option to override the default ("mapposix" ie SFM) mapping.
    
    Reported-by: Tyler Spivey <[email protected]>
    Fixes: 24e0a1eff9e2 ("cifs: switch to new mount api")
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
coresight: Fix signedness bug in tmc_etr_buf_insert_barrier_packet() [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Fri Apr 21 13:42:41 2023 +0300

    coresight: Fix signedness bug in tmc_etr_buf_insert_barrier_packet()
    
    commit f67bc15e526bb9920683ad6c1891ff9e08981335 upstream.
    
    This code generates a Smatch warning:
    
        drivers/hwtracing/coresight/coresight-tmc-etr.c:947 tmc_etr_buf_insert_barrier_packet()
        error: uninitialized symbol 'bufp'.
    
    The problem is that if tmc_sg_table_get_data() returns -EINVAL, then
    when we test if "len < CORESIGHT_BARRIER_PKT_SIZE", the negative "len"
    value is type promoted to a high unsigned long value which is greater
    than CORESIGHT_BARRIER_PKT_SIZE.  Fix this bug by adding an explicit
    check for error codes.
    
    Fixes: 75f4e3619fe2 ("coresight: tmc-etr: Add transparent buffer management")
    Signed-off-by: Dan Carpenter <[email protected]>
    Signed-off-by: Suzuki K Poulose <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cxl: Wait Memory_Info_Valid before access memory related info [+ + +]
Author: Dave Jiang <[email protected]>
Date:   Thu May 18 14:54:34 2023 -0700

    cxl: Wait Memory_Info_Valid before access memory related info
    
    commit ce17ad0d54985e2595a3e615fda31df61808a08c upstream.
    
    The Memory_Info_Valid bit (CXL 3.0 8.1.3.8.2) indicates that the CXL
    Range Size High and Size Low registers are valid. The bit must be set
    within 1 second of reset deassertion to the device. Check valid bit
    before we check the Memory_Active bit when waiting for
    cxl_await_media_ready() to ensure that the memory info is valid for
    consumption. Also ensures both DVSEC ranges 1 and 2 are ready if DVSEC
    Capability indicates they are both supported.
    
    Fixes: 523e594d9cc0 ("cxl/pci: Implement wait for media active")
    Reviewed-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Dave Jiang <[email protected]>
    Link: https://lore.kernel.org/r/168444687469.3134781.11033518965387297327.stgit@djiang5-mobl3
    Signed-off-by: Dan Williams <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
debugobjects: Don't wake up kswapd from fill_pool() [+ + +]
Author: Tetsuo Handa <[email protected]>
Date:   Thu May 11 22:47:32 2023 +0900

    debugobjects: Don't wake up kswapd from fill_pool()
    
    commit eb799279fb1f9c63c520fe8c1c41cb9154252db6 upstream.
    
    syzbot is reporting a lockdep warning in fill_pool() because the allocation
    from debugobjects is using GFP_ATOMIC, which is (__GFP_HIGH | __GFP_KSWAPD_RECLAIM)
    and therefore tries to wake up kswapd, which acquires kswapd_wait::lock.
    
    Since fill_pool() might be called with arbitrary locks held, fill_pool()
    should not assume that acquiring kswapd_wait::lock is safe.
    
    Use __GFP_HIGH instead and remove __GFP_NORETRY as it is pointless for
    !__GFP_DIRECT_RECLAIM allocation.
    
    Fixes: 3ac7fe5a4aab ("infrastructure to debug (dynamic) objects")
    Reported-by: syzbot <[email protected]>
    Signed-off-by: Tetsuo Handa <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=fe0c72f0ccbb93786380
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amd/amdgpu: limit one queue per gang [+ + +]
Author: Jack Xiao <[email protected]>
Date:   Wed Mar 22 09:31:16 2023 +0800

    drm/amd/amdgpu: limit one queue per gang
    
    commit 5ee33d905f89c18d4b33da6e5eefdae6060502df upstream.
    
    Limit one queue per gang in mes self test,
    due to mes schq fw change.
    
    Signed-off-by: Jack Xiao <[email protected]>
    Reviewed-by: Hawking Zhang <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Cc: Mario Limonciello <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amd/amdgpu: update mes11 api def [+ + +]
Author: Jack Xiao <[email protected]>
Date:   Tue Nov 29 11:12:08 2022 +0800

    drm/amd/amdgpu: update mes11 api def
    
    commit 1e7bbdba68baf6af7500dd636f18b6fcce58e945 upstream.
    
    Update the api def of mes11.
    
    Signed-off-by: Jack Xiao <[email protected]>
    Reviewed-by: Hawking Zhang <[email protected]>
    Tested-and-acked-by: Evan Quan <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Cc: "Gong, Richard" <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amd/display: hpd rx irq not working with eDP interface [+ + +]
Author: Robin Chen <[email protected]>
Date:   Fri Feb 17 20:47:57 2023 +0800

    drm/amd/display: hpd rx irq not working with eDP interface
    
    commit eeefe7c4820b6baa0462a8b723ea0a3b5846ccae upstream.
    
    [Why]
    This is the fix for the defect of commit ab144f0b4ad6
    ("drm/amd/display: Allow individual control of eDP hotplug support").
    
    [How]
    To revise the default eDP hotplug setting and use the enum to git rid
    of the magic number for different options.
    
    Fixes: ab144f0b4ad6 ("drm/amd/display: Allow individual control of eDP hotplug support")
    Cc: [email protected]
    Cc: Mario Limonciello <[email protected]>
    Reviewed-by: Wenjing Liu <[email protected]>
    Acked-by: Qingqing Zhuo <[email protected]>
    Signed-off-by: Robin Chen <[email protected]>
    Tested-by: Daniel Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit eeefe7c4820b6baa0462a8b723ea0a3b5846ccae)
    Hand modified for missing file rename changes and symbol moves in 6.1.y.
    Signed-off-by: Mario Limonciello <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amd/pm: add missing NotifyPowerSource message mapping for SMU13.0.7 [+ + +]
Author: Evan Quan <[email protected]>
Date:   Fri May 19 14:20:17 2023 +0800

    drm/amd/pm: add missing NotifyPowerSource message mapping for SMU13.0.7
    
    commit 0d2dd02d74e6377268f56b90261de0fae8f0d2cb upstream.
    
    Otherwise, the power source switching will fail due to message
    unavailable.
    
    Fixes: bf4823267a81 ("drm/amd/pm: fix possible power mode mismatch between driver and PMFW")
    Signed-off-by: Evan Quan <[email protected]>
    Reviewed-by: Guchun Chen <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amd/pm: Fix output of pp_od_clk_voltage [+ + +]
Author: Jonatas Esteves <[email protected]>
Date:   Sat May 20 10:39:52 2023 -0300

    drm/amd/pm: Fix output of pp_od_clk_voltage
    
    commit 40baba5693b9af586dc1063af603d05a79e57a6b upstream.
    
    Printing the other clock types should not be conditioned on being able
    to print OD_SCLK. Some GPUs currently have limited capability of only
    printing a subset of these.
    
    Since this condition was introduced in v5.18-rc1, reading from
    `pp_od_clk_voltage` has been returning empty on the Asus ROG Strix G15
    (2021).
    
    Fixes: 79c65f3fcbb1 ("drm/amd/pm: do not expose power implementation details to amdgpu_pm.c")
    Reviewed-by: Evan Quan <[email protected]>
    Signed-off-by: Jonatas Esteves <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdgpu/mes11: enable reg active poll [+ + +]
Author: Jack Xiao <[email protected]>
Date:   Tue Nov 29 11:12:32 2022 +0800

    drm/amdgpu/mes11: enable reg active poll
    
    commit a6b3b618c0f7abc3f543dd0c57b2b19a770bffec upstream.
    
    Enable reg active poll in mes11.
    
    Signed-off-by: Jack Xiao <[email protected]>
    Reviewed-by: Hawking Zhang <[email protected]>
    Tested-and-acked-by: Evan Quan <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Cc: "Gong, Richard" <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/mgag200: Fix gamma lut not initialized. [+ + +]
Author: Jocelyn Falempe <[email protected]>
Date:   Wed May 10 15:10:34 2023 +0200

    drm/mgag200: Fix gamma lut not initialized.
    
    commit ad81e23426a651eb89a4b306e1c4169e6308c124 upstream.
    
    When mgag200 switched from simple KMS to regular atomic helpers,
    the initialization of the gamma settings was lost.
    This leads to a black screen, if the bios/uefi doesn't use the same
    pixel color depth.
    
    v2: rebase on top of drm-misc-fixes, and add Cc stable tag.
    
    Link: https://bugzilla.redhat.com/show_bug.cgi?id=2171155
    Fixes: 1baf9127c482 ("drm/mgag200: Replace simple-KMS with regular atomic helpers")
    Cc: <[email protected]>
    Tested-by: Phil Oester <[email protected]>
    Reviewed-by: Thomas Zimmermann <[email protected]>
    Signed-off-by: Jocelyn Falempe <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/radeon: reintroduce radeon_dp_work_func content [+ + +]
Author: Alex Deucher <[email protected]>
Date:   Thu May 18 12:38:22 2023 -0400

    drm/radeon: reintroduce radeon_dp_work_func content
    
    commit a34fc1bcd2c4d8b09dcfc0b95ac65bca1e579bd7 upstream.
    
    Put back the radeon_dp_work_func logic.  It seems that
    handling DP RX interrupts is necessary to make some
    panels work.  This was removed with the MST support,
    but it regresses some systems so add it back.  While
    we are here, add the proper mutex locking.
    
    Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2567
    Fixes: 01ad1d9c2888 ("drm/radeon: Drop legacy MST support")
    Reviewed-by: Lyude Paul <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Cc: Lyude Paul <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm: fix drmm_mutex_init() [+ + +]
Author: Matthew Auld <[email protected]>
Date:   Fri May 19 10:07:33 2023 +0100

    drm: fix drmm_mutex_init()
    
    commit c21f11d182c2180d8b90eaff84f574cfa845b250 upstream.
    
    In mutex_init() lockdep identifies a lock by defining a special static
    key for each lock class. However if we wrap the macro in a function,
    like in drmm_mutex_init(), we end up generating:
    
    int drmm_mutex_init(struct drm_device *dev, struct mutex *lock)
    {
          static struct lock_class_key __key;
    
          __mutex_init((lock), "lock", &__key);
          ....
    }
    
    The static __key here is what lockdep uses to identify the lock class,
    however since this is just a normal function the key here will be
    created once, where all callers then use the same key. In effect the
    mutex->depmap.key will be the same pointer for different
    drmm_mutex_init() callers. This then results in impossible lockdep
    splats since lockdep thinks completely unrelated locks are the same lock
    class.
    
    To fix this turn drmm_mutex_init() into a macro such that it generates a
    different "static struct lock_class_key __key" for each invocation,
    which looks to be inline with what mutex_init() wants.
    
    v2:
      - Revamp the commit message with clearer explanation of the issue.
      - Rather export __drmm_mutex_release() than static inline.
    
    Reported-by: Thomas Hellström <[email protected]>
    Reported-by: Sarah Walker <[email protected]>
    Fixes: e13f13e039dc ("drm: Add DRM-managed mutex_init()")
    Cc: Stanislaw Gruszka <[email protected]>
    Cc: Boris Brezillon <[email protected]>
    Cc: Thomas Zimmermann <[email protected]>
    Cc: Jocelyn Falempe <[email protected]>
    Cc: Daniel Vetter <[email protected]>
    Cc: [email protected]
    Signed-off-by: Matthew Auld <[email protected]>
    Reviewed-by: Boris Brezillon <[email protected]>
    Reviewed-by: Stanislaw Gruszka <[email protected]>
    Reviewed-by: Lucas De Marchi <[email protected]>
    Acked-by: Thomas Zimmermann <[email protected]>
    Signed-off-by: Thomas Zimmermann <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dt-binding: cdns,usb3: Fix cdns,on-chip-buff-size type [+ + +]
Author: Frank Li <[email protected]>
Date:   Mon May 15 12:20:52 2023 -0400

    dt-binding: cdns,usb3: Fix cdns,on-chip-buff-size type
    
    commit 50a1726b148ff30778cb8a6cf3736130b07c93fd upstream.
    
    In cdns3-gadget.c, 'cdns,on-chip-buff-size' was read using
    device_property_read_u16(). It resulted in 0 if a 32bit value was used
    in dts. This commit fixes the dt binding doc to declare it as u16.
    
    Cc: [email protected]
    Fixes: 68989fe1c39d ("dt-bindings: usb: Convert cdns-usb3.txt to YAML schema")
    Signed-off-by: Frank Li <[email protected]>
    Reviewed-by: Krzysztof Kozlowski <[email protected]>
    Signed-off-by: Shawn Guo <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fbdev: udlfb: Fix endpoint check [+ + +]
Author: Alan Stern <[email protected]>
Date:   Fri May 19 15:32:30 2023 -0400

    fbdev: udlfb: Fix endpoint check
    
    commit ed9de4ed39875706607fb08118a58344ae6c5f42 upstream.
    
    The syzbot fuzzer detected a problem in the udlfb driver, caused by an
    endpoint not having the expected type:
    
    usb 1-1: Read EDID byte 0 failed: -71
    usb 1-1: Unable to get valid EDID from device/display
    ------------[ cut here ]------------
    usb 1-1: BOGUS urb xfer, pipe 3 != type 1
    WARNING: CPU: 0 PID: 9 at drivers/usb/core/urb.c:504 usb_submit_urb+0xed6/0x1880
    drivers/usb/core/urb.c:504
    Modules linked in:
    CPU: 0 PID: 9 Comm: kworker/0:1 Not tainted
    6.4.0-rc1-syzkaller-00016-ga4422ff22142 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google
    04/28/2023
    Workqueue: usb_hub_wq hub_event
    RIP: 0010:usb_submit_urb+0xed6/0x1880 drivers/usb/core/urb.c:504
    ...
    Call Trace:
     <TASK>
     dlfb_submit_urb+0x92/0x180 drivers/video/fbdev/udlfb.c:1980
     dlfb_set_video_mode+0x21f0/0x2950 drivers/video/fbdev/udlfb.c:315
     dlfb_ops_set_par+0x2a7/0x8d0 drivers/video/fbdev/udlfb.c:1111
     dlfb_usb_probe+0x149a/0x2710 drivers/video/fbdev/udlfb.c:1743
    
    The current approach for this issue failed to catch the problem
    because it only checks for the existence of a bulk-OUT endpoint; it
    doesn't check whether this endpoint is the one that the driver will
    actually use.
    
    We can fix the problem by instead checking that the endpoint used by
    the driver does exist and is bulk-OUT.
    
    Reported-and-tested-by: [email protected]
    Signed-off-by: Alan Stern <[email protected]>
    CC: Pavel Skripkin <[email protected]>
    Fixes: aaf7dbe07385 ("video: fbdev: udlfb: properly check endpoint type")
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
firmware: arm_ffa: Check if ffa_driver remove is present before executing [+ + +]
Author: Sudeep Holla <[email protected]>
Date:   Thu Apr 20 16:06:01 2023 +0100

    firmware: arm_ffa: Check if ffa_driver remove is present before executing
    
    commit b71b55248a580e9c9befc4ae060539f1f8e477da upstream.
    
    Currently ffa_drv->remove() is called unconditionally from
    ffa_device_remove(). Since the driver registration doesn't check for it
    and allows it to be registered without .remove callback, we need to check
    for the presence of it before executing it from ffa_device_remove() to
    above a NULL pointer dereference like the one below:
    
      | Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000
      | Mem abort info:
      |   ESR = 0x0000000086000004
      |   EC = 0x21: IABT (current EL), IL = 32 bits
      |   SET = 0, FnV = 0
      |   EA = 0, S1PTW = 0
      |   FSC = 0x04: level 0 translation fault
      | user pgtable: 4k pages, 48-bit VAs, pgdp=0000000881cc8000
      | [0000000000000000] pgd=0000000000000000, p4d=0000000000000000
      | Internal error: Oops: 0000000086000004 [#1] PREEMPT SMP
      | CPU: 3 PID: 130 Comm: rmmod Not tainted 6.3.0-rc7 #6
      | Hardware name: FVP Base RevC (DT)
      | pstate: 63402809 (nZCv daif +PAN -UAO +TCO +DIT -SSBS BTYPE=-c)
      | pc : 0x0
      | lr : ffa_device_remove+0x20/0x2c
      | Call trace:
      |  0x0
      |  device_release_driver_internal+0x16c/0x260
      |  driver_detach+0x90/0xd0
      |  bus_remove_driver+0xdc/0x11c
      |  driver_unregister+0x30/0x54
      |  ffa_driver_unregister+0x14/0x20
      |  cleanup_module+0x18/0xeec
      |  __arm64_sys_delete_module+0x234/0x378
      |  invoke_syscall+0x40/0x108
      |  el0_svc_common+0xb4/0xf0
      |  do_el0_svc+0x30/0xa4
      |  el0_svc+0x2c/0x7c
      |  el0t_64_sync_handler+0x84/0xf0
      |  el0t_64_sync+0x190/0x194
    
    Fixes: 244f5d597e1e ("firmware: arm_ffa: Add missing remove callback to ffa_bus_type")
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sudeep Holla <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

firmware: arm_ffa: Fix FFA device names for logical partitions [+ + +]
Author: Sudeep Holla <[email protected]>
Date:   Thu Apr 20 16:06:03 2023 +0100

    firmware: arm_ffa: Fix FFA device names for logical partitions
    
    commit 19b8766459c41c6f318f8a548cc1c66dffd18363 upstream.
    
    Each physical partition can provide multiple services each with UUID.
    Each such service can be presented as logical partition with a unique
    combination of VM ID and UUID. The number of distinct UUID in a system
    will be less than or equal to the number of logical partitions.
    
    However, currently it fails to register more than one logical partition
    or service within a physical partition as the device name contains only
    VM ID while both VM ID and UUID are maintained in the partition information.
    The kernel complains with the below message:
    
      | sysfs: cannot create duplicate filename '/devices/arm-ffa-8001'
      | CPU: 1 PID: 1 Comm: swapper/0 Not tainted 6.3.0-rc7 #8
      | Hardware name: FVP Base RevC (DT)
      | Call trace:
      |  dump_backtrace+0xf8/0x118
      |  show_stack+0x18/0x24
      |  dump_stack_lvl+0x50/0x68
      |  dump_stack+0x18/0x24
      |  sysfs_create_dir_ns+0xe0/0x13c
      |  kobject_add_internal+0x220/0x3d4
      |  kobject_add+0x94/0x100
      |  device_add+0x144/0x5d8
      |  device_register+0x20/0x30
      |  ffa_device_register+0x88/0xd8
      |  ffa_setup_partitions+0x108/0x1b8
      |  ffa_init+0x2ec/0x3a4
      |  do_one_initcall+0xcc/0x240
      |  do_initcall_level+0x8c/0xac
      |  do_initcalls+0x54/0x94
      |  do_basic_setup+0x1c/0x28
      |  kernel_init_freeable+0x100/0x16c
      |  kernel_init+0x20/0x1a0
      |  ret_from_fork+0x10/0x20
      | kobject_add_internal failed for arm-ffa-8001 with -EEXIST, don't try to
      | register things with the same name in the same directory.
      | arm_ffa arm-ffa: unable to register device arm-ffa-8001 err=-17
      | ARM FF-A: ffa_setup_partitions: failed to register partition ID 0x8001
    
    By virtue of being random enough to avoid collisions when generated in a
    distributed system, there is no way to compress UUID keys to the number
    of bits required to identify each. We can eliminate '-' in the name but
    it is not worth eliminating 4 bytes and add unnecessary logic for doing
    that. Also v1.0 doesn't provide the UUID of the partitions which makes
    it hard to use the same for the device name.
    
    So to keep it simple, let us alloc an ID using ida_alloc() and append the
    same to "arm-ffa" to make up a unique device name. Also stash the id value
    in ffa_dev to help freeing the ID later when the device is destroyed.
    
    Fixes: e781858488b9 ("firmware: arm_ffa: Add initial FFA bus support for device enumeration")
    Reported-by: Lucian Paul-Trifu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sudeep Holla <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

firmware: arm_ffa: Set reserved/MBZ fields to zero in the memory descriptors [+ + +]
Author: Sudeep Holla <[email protected]>
Date:   Wed May 3 14:12:52 2023 +0100

    firmware: arm_ffa: Set reserved/MBZ fields to zero in the memory descriptors
    
    commit 111a833dc5cbef3d05b2a796a7e23cb7f6ff2192 upstream.
    
    The transmit buffers allocated by the driver can be used to transmit data
    by any messages/commands needing the buffer. However, it is not guaranteed
    to have been zero-ed before every new transmission and hence it will just
    contain residual value from the previous transmission. There are several
    reserved fields in the memory descriptors that must be zero(MBZ). The
    receiver can reject the transmission if any such MBZ fields are non-zero.
    
    While we can set the whole page to zero, it is not optimal as most of the
    fields get initialised to the value required for the current transmission.
    
    So, just set the reserved/MBZ fields to zero in the memory descriptors
    explicitly to honour the requirement and keep the receiver happy.
    
    Fixes: cc2195fe536c ("firmware: arm_ffa: Add support for MEM_* interfaces")
    Reported-by: Marc Bonnici <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sudeep Holla <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
forcedeth: Fix an error handling path in nv_probe() [+ + +]
Author: Christophe JAILLET <[email protected]>
Date:   Sat May 20 10:30:17 2023 +0200

    forcedeth: Fix an error handling path in nv_probe()
    
    commit 5b17a4971d3b2a073f4078dd65331efbe35baa2d upstream.
    
    If an error occures after calling nv_mgmt_acquire_sema(), it should be
    undone with a corresponding nv_mgmt_release_sema() call.
    
    Add it in the error handling path of the probe as already done in the
    remove function.
    
    Fixes: cac1c52c3621 ("forcedeth: mgmt unit interface")
    Signed-off-by: Christophe JAILLET <[email protected]>
    Acked-by: Zhu Yanjun <[email protected]>
    Link: https://lore.kernel.org/r/355e9a7d351b32ad897251b6f81b5886fcdc6766.1684571393.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fs: fix undefined behavior in bit shift for SB_NOUSER [+ + +]
Author: Hao Ge <[email protected]>
Date:   Mon Apr 24 13:18:35 2023 +0800

    fs: fix undefined behavior in bit shift for SB_NOUSER
    
    commit f15afbd34d8fadbd375f1212e97837e32bc170cc upstream.
    
    Shifting signed 32-bit value by 31 bits is undefined, so changing
    significant bit to unsigned. It was spotted by UBSAN.
    
    So let's just fix this by using the BIT() helper for all SB_* flags.
    
    Fixes: e462ec50cb5f ("VFS: Differentiate mount flags (MS_*) from internal superblock flags")
    Signed-off-by: Hao Ge <[email protected]>
    Message-Id: <[email protected]>
    [[email protected]: use BIT() for all SB_* flags]
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
gpio: mockup: Fix mode of debugfs files [+ + +]
Author: Zev Weiss <[email protected]>
Date:   Tue May 16 22:47:56 2023 -0700

    gpio: mockup: Fix mode of debugfs files
    
    commit 0a1bb16e0fe6650c3841e611de374bfd5578ad70 upstream.
    
    This driver's debugfs files have had a read operation since commit
    2a9e27408e12 ("gpio: mockup: rework debugfs interface"), but were
    still being created with write-only mode bits.  Update them to
    indicate that the files can also be read.
    
    Signed-off-by: Zev Weiss <[email protected]>
    Fixes: 2a9e27408e12 ("gpio: mockup: rework debugfs interface")
    Cc: [email protected] # v5.1+
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ipv6: Fix out-of-bounds access in ipv6_find_tlv() [+ + +]
Author: Gavrilov Ilia <[email protected]>
Date:   Tue May 23 08:29:44 2023 +0000

    ipv6: Fix out-of-bounds access in ipv6_find_tlv()
    
    commit 878ecb0897f4737a4c9401f3523fd49589025671 upstream.
    
    optlen is fetched without checking whether there is more than one byte to parse.
    It can lead to out-of-bounds access.
    
    Found by InfoTeCS on behalf of Linux Verification Center
    (linuxtesting.org) with SVACE.
    
    Fixes: c61a40432509 ("[IPV6]: Find option offset by type.")
    Signed-off-by: Gavrilov Ilia <[email protected]>
    Reviewed-by: Jiri Pirko <[email protected]>
    Reviewed-by: David Ahern <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
irqchip/mips-gic: Don't touch vl_map if a local interrupt is not routable [+ + +]
Author: Jiaxun Yang <[email protected]>
Date:   Mon Apr 24 11:31:55 2023 +0100

    irqchip/mips-gic: Don't touch vl_map if a local interrupt is not routable
    
    commit 2c6c9c049510163090b979ea5f92a68ae8d93c45 upstream.
    
    When a GIC local interrupt is not routable, it's vl_map will be used
    to control some internal states for core (providing IPTI, IPPCI, IPFDC
    input signal for core). Overriding it will interfere core's intetrupt
    controller.
    
    Do not touch vl_map if a local interrupt is not routable, we are not
    going to remap it.
    
    Before dd098a0e0319 (" irqchip/mips-gic: Get rid of the reliance on
    irq_cpu_online()"), if a local interrupt is not routable, then it won't
    be requested from GIC Local domain, and thus gic_all_vpes_irq_cpu_online
    won't be called for that particular interrupt.
    
    Fixes: dd098a0e0319 (" irqchip/mips-gic: Get rid of the reliance on irq_cpu_online()")
    Cc: [email protected]
    Signed-off-by: Jiaxun Yang <[email protected]>
    Reviewed-by: Serge Semin <[email protected]>
    Tested-by: Serge Semin <[email protected]>
    Signed-off-by: Marc Zyngier <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

irqchip/mips-gic: Use raw spinlock for gic_lock [+ + +]
Author: Jiaxun Yang <[email protected]>
Date:   Mon Apr 24 11:31:56 2023 +0100

    irqchip/mips-gic: Use raw spinlock for gic_lock
    
    commit 3d6a0e4197c04599d75d85a608c8bb16a630a38c upstream.
    
    Since we may hold gic_lock in hardirq context, use raw spinlock
    makes more sense given that it is for low-level interrupt handling
    routine and the critical section is small.
    
    Fixes BUG:
    
    [    0.426106] =============================
    [    0.426257] [ BUG: Invalid wait context ]
    [    0.426422] 6.3.0-rc7-next-20230421-dirty #54 Not tainted
    [    0.426638] -----------------------------
    [    0.426766] swapper/0/1 is trying to lock:
    [    0.426954] ffffffff8104e7b8 (gic_lock){....}-{3:3}, at: gic_set_type+0x30/08
    
    Fixes: 95150ae8b330 ("irqchip: mips-gic: Implement irq_set_type callback")
    Cc: [email protected]
    Signed-off-by: Jiaxun Yang <[email protected]>
    Reviewed-by: Serge Semin <[email protected]>
    Tested-by: Serge Semin <[email protected]>
    Signed-off-by: Marc Zyngier <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
lan966x: Fix unloading/loading of the driver [+ + +]
Author: Horatiu Vultur <[email protected]>
Date:   Mon May 22 14:00:38 2023 +0200

    lan966x: Fix unloading/loading of the driver
    
    commit 600761245952d7f70280add6ce02894f1528992b upstream.
    
    It was noticing that after a while when unloading/loading the driver and
    sending traffic through the switch, it would stop working. It would stop
    forwarding any traffic and the only way to get out of this was to do a
    power cycle of the board. The root cause seems to be that the switch
    core is initialized twice. Apparently initializing twice the switch core
    disturbs the pointers in the queue systems in the HW, so after a while
    it would stop sending the traffic.
    Unfortunetly, it is not possible to use a reset of the switch here,
    because the reset line is connected to multiple devices like MDIO,
    SGPIO, FAN, etc. So then all the devices will get reseted when the
    network driver will be loaded.
    So the fix is to check if the core is initialized already and if that is
    the case don't initialize it again.
    
    Fixes: db8bcaad5393 ("net: lan966x: add the basic lan966x driver")
    Signed-off-by: Horatiu Vultur <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Linux: Linux 6.1.31 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Tue May 30 14:03:33 2023 +0100

    Linux 6.1.31
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Bagas Sanjaya <[email protected]>
    Tested-by: Takeshi Ogasawara <[email protected]>
    Tested-by: Conor Dooley <[email protected]>
    Tested-by: Markus Reichelt <[email protected]>
    Tested-by: Linux Kernel Functional Testing <[email protected]>
    Tested-by: Guenter Roeck <[email protected]>
    Tested-by: Ron Economos <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Tested-by: Chris Paterson (CIP) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
m68k: Move signal frame following exception on 68020/030 [+ + +]
Author: Finn Thain <[email protected]>
Date:   Sat May 6 19:38:12 2023 +1000

    m68k: Move signal frame following exception on 68020/030
    
    commit b845b574f86dcb6a70dfa698aa87a237b0878d2a upstream.
    
    On 68030/020, an instruction such as, moveml %a2-%a3/%a5,%sp@- may cause
    a stack page fault during instruction execution (i.e. not at an
    instruction boundary) and produce a format 0xB exception frame.
    
    In this situation, the value of USP will be unreliable.  If a signal is
    to be delivered following the exception, this USP value is used to
    calculate the location for a signal frame.  This can result in a
    corrupted user stack.
    
    The corruption was detected in dash (actually in glibc) where it showed
    up as an intermittent "stack smashing detected" message and crash
    following signal delivery for SIGCHLD.
    
    It was hard to reproduce that failure because delivery of the signal
    raced with the page fault and because the kernel places an unpredictable
    gap of up to 7 bytes between the USP and the signal frame.
    
    A format 0xB exception frame can be produced by a bus error or an
    address error.  The 68030 Users Manual says that address errors occur
    immediately upon detection during instruction prefetch.  The instruction
    pipeline allows prefetch to overlap with other instructions, which means
    an address error can arise during the execution of a different
    instruction.  So it seems likely that this patch may help in the address
    error case also.
    
    Reported-and-tested-by: Stan Johnson <[email protected]>
    Link: https://lore.kernel.org/all/CAMuHMdW3yD22_ApemzW_6me3adq6A458u1_F0v-1EYwK_62jPA@mail.gmail.com/
    Cc: Michael Schmitz <[email protected]>
    Cc: Andreas Schwab <[email protected]>
    Cc: [email protected]
    Co-developed-by: Michael Schmitz <[email protected]>
    Signed-off-by: Michael Schmitz <[email protected]>
    Signed-off-by: Finn Thain <[email protected]>
    Reviewed-by: Geert Uytterhoeven <[email protected]>
    Link: https://lore.kernel.org/r/9e66262a754fcba50208aa424188896cc52a1dd1.1683365892.git.fthain@linux-m68k.org
    Signed-off-by: Geert Uytterhoeven <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
media: radio-shark: Add endpoint checks [+ + +]
Author: Alan Stern <[email protected]>
Date:   Mon Apr 10 15:40:05 2023 -0400

    media: radio-shark: Add endpoint checks
    
    commit 76e31045ba030e94e72105c01b2e98f543d175ac upstream.
    
    The syzbot fuzzer was able to provoke a WARNING from the radio-shark2
    driver:
    
    ------------[ cut here ]------------
    usb 1-1: BOGUS urb xfer, pipe 1 != type 3
    WARNING: CPU: 0 PID: 3271 at drivers/usb/core/urb.c:504 usb_submit_urb+0xed2/0x1880 drivers/usb/core/urb.c:504
    Modules linked in:
    CPU: 0 PID: 3271 Comm: kworker/0:3 Not tainted 6.1.0-rc4-syzkaller #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/26/2022
    Workqueue: usb_hub_wq hub_event
    RIP: 0010:usb_submit_urb+0xed2/0x1880 drivers/usb/core/urb.c:504
    Code: 7c 24 18 e8 00 36 ea fb 48 8b 7c 24 18 e8 36 1c 02 ff 41 89 d8 44 89 e1 4c 89 ea 48 89 c6 48 c7 c7 a0 b6 90 8a e8 9a 29 b8 03 <0f> 0b e9 58 f8 ff ff e8 d2 35 ea fb 48 81 c5 c0 05 00 00 e9 84 f7
    RSP: 0018:ffffc90003876dd0 EFLAGS: 00010282
    RAX: 0000000000000000 RBX: 0000000000000003 RCX: 0000000000000000
    RDX: ffff8880750b0040 RSI: ffffffff816152b8 RDI: fffff5200070edac
    RBP: ffff8880172d81e0 R08: 0000000000000005 R09: 0000000000000000
    R10: 0000000080000000 R11: 0000000000000000 R12: 0000000000000001
    R13: ffff8880285c5040 R14: 0000000000000002 R15: ffff888017158200
    FS:  0000000000000000(0000) GS:ffff8880b9a00000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007ffe03235b90 CR3: 000000000bc8e000 CR4: 00000000003506f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     usb_start_wait_urb+0x101/0x4b0 drivers/usb/core/message.c:58
     usb_bulk_msg+0x226/0x550 drivers/usb/core/message.c:387
     shark_write_reg+0x1ff/0x2e0 drivers/media/radio/radio-shark2.c:88
    ...
    
    The problem was caused by the fact that the driver does not check
    whether the endpoints it uses are actually present and have the
    appropriate types.  This can be fixed by adding a simple check of
    these endpoints (and similarly for the radio-shark driver).
    
    Link: https://syzkaller.appspot.com/bug?extid=4b3f8190f6e13b3efd74
    Reported-and-tested-by: [email protected]
    Signed-off-by: Alan Stern <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mmc: block: ensure error propagation for non-blk [+ + +]
Author: Christian Loehle <[email protected]>
Date:   Wed Apr 26 16:59:39 2023 +0000

    mmc: block: ensure error propagation for non-blk
    
    commit 003fb0a51162d940f25fc35e70b0996a12c9e08a upstream.
    
    Requests to the mmc layer usually come through a block device IO.
    The exceptions are the ioctl interface, RPMB chardev ioctl
    and debugfs, which issue their own blk_mq requests through
    blk_execute_rq and do not query the BLK_STS error but the
    mmcblk-internal drv_op_result. This patch ensures that drv_op_result
    defaults to an error and has to be overwritten by the operation
    to be considered successful.
    
    The behavior leads to a bug where the request never propagates
    the error, e.g. by directly erroring out at mmc_blk_mq_issue_rq if
    mmc_blk_part_switch fails. The ioctl caller of the rpmb chardev then
    can never see an error (BLK_STS_IOERR, but drv_op_result is unchanged)
    and thus may assume that their call executed successfully when it did not.
    
    While always checking the blk_execute_rq return value would be
    advised, let's eliminate the error by always setting
    drv_op_result as -EIO to be overwritten on success (or other error)
    
    Fixes: 614f0388f580 ("mmc: block: move single ioctl() commands to block requests")
    Signed-off-by: Christian Loehle <[email protected]>
    Acked-by: Adrian Hunter <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mmc: sdhci-esdhc-imx: make "no-mmc-hs400" works [+ + +]
Author: Haibo Chen <[email protected]>
Date:   Thu May 4 19:22:22 2023 +0800

    mmc: sdhci-esdhc-imx: make "no-mmc-hs400" works
    
    commit 81dce1490e28439c3cd8a8650b862a712f3061ba upstream.
    
    After commit 1ed5c3b22fc7 ("mmc: sdhci-esdhc-imx: Propagate
    ESDHC_FLAG_HS400* only on 8bit bus"), the property "no-mmc-hs400"
    from device tree file do not work any more.
    This patch reorder the code, which can avoid the warning message
    "drop HS400 support since no 8-bit bus" and also make the property
    "no-mmc-hs400" from dts file works.
    
    Fixes: 1ed5c3b22fc7 ("mmc: sdhci-esdhc-imx: Propagate ESDHC_FLAG_HS400* only on 8bit bus")
    Signed-off-by: Haibo Chen <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net/mlx5: Collect command failures data only for known commands [+ + +]
Author: Shay Drory <[email protected]>
Date:   Tue May 2 11:03:53 2023 +0300

    net/mlx5: Collect command failures data only for known commands
    
    commit 2a0a935fb64ee8af253b9c6133bb6702fb152ac2 upstream.
    
    DEVX can issue a general command, which is not used by mlx5 driver.
    In case such command is failed, mlx5 is trying to collect the failure
    data, However, mlx5 doesn't create a storage for this command, since
    mlx5 doesn't use it. This lead to array-index-out-of-bounds error.
    
    Fix it by checking whether the command is known before collecting the
    failure data.
    
    Fixes: 34f46ae0d4b3 ("net/mlx5: Add command failures data to debugfs")
    Signed-off-by: Shay Drory <[email protected]>
    Signed-off-by: Saeed Mahameed <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net/mlx5: Devcom, fix error flow in mlx5_devcom_register_device [+ + +]
Author: Shay Drory <[email protected]>
Date:   Tue May 2 13:35:11 2023 +0300

    net/mlx5: Devcom, fix error flow in mlx5_devcom_register_device
    
    commit af87194352cad882d787d06fb7efa714acd95427 upstream.
    
    In case devcom allocation is failed, mlx5 is always freeing the priv.
    However, this priv might have been allocated by a different thread,
    and freeing it might lead to use-after-free bugs.
    Fix it by freeing the priv only in case it was allocated by the
    running thread.
    
    Fixes: fadd59fc50d0 ("net/mlx5: Introduce inter-device communication mechanism")
    Signed-off-by: Shay Drory <[email protected]>
    Signed-off-by: Saeed Mahameed <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net/mlx5: Devcom, serialize devcom registration [+ + +]
Author: Shay Drory <[email protected]>
Date:   Tue May 2 13:36:42 2023 +0300

    net/mlx5: Devcom, serialize devcom registration
    
    commit 1f893f57a3bf9fe1f4bcb25b55aea7f7f9712fe7 upstream.
    
    From one hand, mlx5 driver is allowing to probe PFs in parallel.
    From the other hand, devcom, which is a share resource between PFs, is
    registered without any lock. This might resulted in memory problems.
    
    Hence, use the global mlx5_dev_list_lock in order to serialize devcom
    registration.
    
    Fixes: fadd59fc50d0 ("net/mlx5: Introduce inter-device communication mechanism")
    Signed-off-by: Shay Drory <[email protected]>
    Reviewed-by: Mark Bloch <[email protected]>
    Signed-off-by: Saeed Mahameed <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net/mlx5: DR, Check force-loopback RC QP capability independently from RoCE [+ + +]
Author: Yevgeny Kliteynik <[email protected]>
Date:   Sun Apr 2 17:14:10 2023 +0300

    net/mlx5: DR, Check force-loopback RC QP capability independently from RoCE
    
    commit c7dd225bc224726c22db08e680bf787f60ebdee3 upstream.
    
    SW Steering uses RC QP for writing STEs to ICM. This writingis done in LB
    (loopback), and FL (force-loopback) QP is preferred for performance. FL is
    available when RoCE is enabled or disabled based on RoCE caps.
    This patch adds reading of FL capability from HCA caps in addition to the
    existing reading from RoCE caps, thus fixing the case where we didn't
    have loopback enabled when RoCE was disabled.
    
    Fixes: 7304d603a57a ("net/mlx5: DR, Add support for force-loopback QP")
    Signed-off-by: Itamar Gozlan <[email protected]>
    Signed-off-by: Yevgeny Kliteynik <[email protected]>
    Signed-off-by: Saeed Mahameed <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net/mlx5: DR, Fix crc32 calculation to work on big-endian (BE) CPUs [+ + +]
Author: Erez Shitrit <[email protected]>
Date:   Thu Mar 9 16:43:15 2023 +0200

    net/mlx5: DR, Fix crc32 calculation to work on big-endian (BE) CPUs
    
    commit 1e5daf5565b61a96e570865091589afc9156e3d3 upstream.
    
    When calculating crc for hash index we use the function crc32 that
    calculates for little-endian (LE) arch.
    Then we convert it to network endianness using htonl(), but it's wrong
    to do the conversion in BE archs since the crc32 value is already LE.
    
    The solution is to switch the bytes from the crc result for all types
    of arc.
    
    Fixes: 40416d8ede65 ("net/mlx5: DR, Replace CRC32 implementation to use kernel lib")
    Signed-off-by: Erez Shitrit <[email protected]>
    Reviewed-by: Alex Vesker <[email protected]>
    Signed-off-by: Saeed Mahameed <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net/mlx5: Fix error message when failing to allocate device memory [+ + +]
Author: Roi Dayan <[email protected]>
Date:   Mon May 1 14:37:56 2023 +0300

    net/mlx5: Fix error message when failing to allocate device memory
    
    commit a65735148e0328f80c0f72f9f8d2f609bfcf4aff upstream.
    
    Fix spacing for the error and also the correct error code pointer.
    
    Fixes: c9b9dcb430b3 ("net/mlx5: Move device memory management to mlx5_core")
    Signed-off-by: Roi Dayan <[email protected]>
    Signed-off-by: Saeed Mahameed <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net/mlx5: Handle pairing of E-switch via uplink un/load APIs [+ + +]
Author: Shay Drory <[email protected]>
Date:   Mon Mar 20 13:07:53 2023 +0200

    net/mlx5: Handle pairing of E-switch via uplink un/load APIs
    
    commit 2be5bd42a5bba1a05daedc86cf0e248210009669 upstream.
    
    In case user switch a device from switchdev mode to legacy mode, mlx5
    first unpair the E-switch and afterwards unload the uplink vport.
    From the other hand, in case user remove or reload a device, mlx5
    first unload the uplink vport and afterwards unpair the E-switch.
    
    The latter is causing a bug[1], hence, handle pairing of E-switch as
    part of uplink un/load APIs.
    
    [1]
    In case VF_LAG is used, every tc fdb flow is duplicated to the peer
    esw. However, the original esw keeps a pointer to this duplicated
    flow, not the peer esw.
    e.g.: if user create tc fdb flow over esw0, the flow is duplicated
    over esw1, in FW/HW, but in SW, esw0 keeps a pointer to the duplicated
    flow.
    During module unload while a peer tc fdb flow is still offloaded, in
    case the first device to be removed is the peer device (esw1 in the
    example above), the peer net-dev is destroyed, and so the mlx5e_priv
    is memset to 0.
    Afterwards, the peer device is trying to unpair himself from the
    original device (esw0 in the example above). Unpair API invoke the
    original device to clear peer flow from its eswitch (esw0), but the
    peer flow, which is stored over the original eswitch (esw0), is
    trying to use the peer mlx5e_priv, which is memset to 0 and result in
    bellow kernel-oops.
    
    [  157.964081 ] BUG: unable to handle page fault for address: 000000000002ce60
    [  157.964662 ] #PF: supervisor read access in kernel mode
    [  157.965123 ] #PF: error_code(0x0000) - not-present page
    [  157.965582 ] PGD 0 P4D 0
    [  157.965866 ] Oops: 0000 [#1] SMP
    [  157.967670 ] RIP: 0010:mlx5e_tc_del_fdb_flow+0x48/0x460 [mlx5_core]
    [  157.976164 ] Call Trace:
    [  157.976437 ]  <TASK>
    [  157.976690 ]  __mlx5e_tc_del_fdb_peer_flow+0xe6/0x100 [mlx5_core]
    [  157.977230 ]  mlx5e_tc_clean_fdb_peer_flows+0x67/0x90 [mlx5_core]
    [  157.977767 ]  mlx5_esw_offloads_unpair+0x2d/0x1e0 [mlx5_core]
    [  157.984653 ]  mlx5_esw_offloads_devcom_event+0xbf/0x130 [mlx5_core]
    [  157.985212 ]  mlx5_devcom_send_event+0xa3/0xb0 [mlx5_core]
    [  157.985714 ]  esw_offloads_disable+0x5a/0x110 [mlx5_core]
    [  157.986209 ]  mlx5_eswitch_disable_locked+0x152/0x170 [mlx5_core]
    [  157.986757 ]  mlx5_eswitch_disable+0x51/0x80 [mlx5_core]
    [  157.987248 ]  mlx5_unload+0x2a/0xb0 [mlx5_core]
    [  157.987678 ]  mlx5_uninit_one+0x5f/0xd0 [mlx5_core]
    [  157.988127 ]  remove_one+0x64/0xe0 [mlx5_core]
    [  157.988549 ]  pci_device_remove+0x31/0xa0
    [  157.988933 ]  device_release_driver_internal+0x18f/0x1f0
    [  157.989402 ]  driver_detach+0x3f/0x80
    [  157.989754 ]  bus_remove_driver+0x70/0xf0
    [  157.990129 ]  pci_unregister_driver+0x34/0x90
    [  157.990537 ]  mlx5_cleanup+0xc/0x1c [mlx5_core]
    [  157.990972 ]  __x64_sys_delete_module+0x15a/0x250
    [  157.991398 ]  ? exit_to_user_mode_prepare+0xea/0x110
    [  157.991840 ]  do_syscall_64+0x3d/0x90
    [  157.992198 ]  entry_SYSCALL_64_after_hwframe+0x46/0xb0
    
    Fixes: 04de7dda7394 ("net/mlx5e: Infrastructure for duplicated offloading of TC flows")
    Fixes: 1418ddd96afd ("net/mlx5e: Duplicate offloaded TC eswitch rules under uplink LAG")
    Signed-off-by: Shay Drory <[email protected]>
    Reviewed-by: Roi Dayan <[email protected]>
    Signed-off-by: Saeed Mahameed <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net/mlx5e: do as little as possible in napi poll when budget is 0 [+ + +]
Author: Jakub Kicinski <[email protected]>
Date:   Tue May 16 18:59:35 2023 -0700

    net/mlx5e: do as little as possible in napi poll when budget is 0
    
    commit afbed3f74830163f9559579dee382cac3cff82da upstream.
    
    NAPI gets called with budget of 0 from netpoll, which has interrupts
    disabled. We should try to free some space on Tx rings and nothing
    else.
    
    Specifically do not try to handle XDP TX or try to refill Rx buffers -
    we can't use the page pool from IRQ context. Don't check if IRQs moved,
    either, that makes no sense in netpoll. Netpoll calls _all_ the rings
    from whatever CPU it happens to be invoked on.
    
    In general do as little as possible, the work quickly adds up when
    there's tens of rings to poll.
    
    The immediate stack trace I was seeing is:
    
        __do_softirq+0xd1/0x2c0
        __local_bh_enable_ip+0xc7/0x120
        </IRQ>
        <TASK>
        page_pool_put_defragged_page+0x267/0x320
        mlx5e_free_xdpsq_desc+0x99/0xd0
        mlx5e_poll_xdpsq_cq+0x138/0x3b0
        mlx5e_napi_poll+0xc3/0x8b0
        netpoll_poll_dev+0xce/0x150
    
    AFAIU page pool takes a BH lock, releases it and since BH is now
    enabled tries to run softirqs.
    
    Reviewed-by: Tariq Toukan <[email protected]>
    Fixes: 60bbf7eeef10 ("mlx5: use page_pool for xdp_return_frame call")
    Signed-off-by: Jakub Kicinski <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net/mlx5e: Fix deadlock in tc route query code [+ + +]
Author: Vlad Buslov <[email protected]>
Date:   Fri Mar 31 14:20:51 2023 +0200

    net/mlx5e: Fix deadlock in tc route query code
    
    commit 691c041bf20899fc13c793f92ba61ab660fa3a30 upstream.
    
    Cited commit causes ABBA deadlock[0] when peer flows are created while
    holding the devcom rw semaphore. Due to peer flows offload implementation
    the lock is taken much higher up the call chain and there is no obvious way
    to easily fix the deadlock. Instead, since tc route query code needs the
    peer eswitch structure only to perform a lookup in xarray and doesn't
    perform any sleeping operations with it, refactor the code for lockless
    execution in following ways:
    
    - RCUify the devcom 'data' pointer. When resetting the pointer
    synchronously wait for RCU grace period before returning. This is fine
    since devcom is currently only used for synchronization of
    pairing/unpairing of eswitches which is rare and already expensive as-is.
    
    - Wrap all usages of 'paired' boolean in {READ|WRITE}_ONCE(). The flag has
    already been used in some unlocked contexts without proper
    annotations (e.g. users of mlx5_devcom_is_paired() function), but it wasn't
    an issue since all relevant code paths checked it again after obtaining the
    devcom semaphore. Now it is also used by mlx5_devcom_get_peer_data_rcu() as
    "best effort" check to return NULL when devcom is being unpaired. Note that
    while RCU read lock doesn't prevent the unpaired flag from being changed
    concurrently it still guarantees that reader can continue to use 'data'.
    
    - Refactor mlx5e_tc_query_route_vport() function to use new
    mlx5_devcom_get_peer_data_rcu() API which fixes the deadlock.
    
    [0]:
    
    [  164.599612] ======================================================
    [  164.600142] WARNING: possible circular locking dependency detected
    [  164.600667] 6.3.0-rc3+ #1 Not tainted
    [  164.601021] ------------------------------------------------------
    [  164.601557] handler1/3456 is trying to acquire lock:
    [  164.601998] ffff88811f1714b0 (&esw->offloads.encap_tbl_lock){+.+.}-{3:3}, at: mlx5e_attach_encap+0xd8/0x8b0 [mlx5_core]
    [  164.603078]
                   but task is already holding lock:
    [  164.603617] ffff88810137fc98 (&comp->sem){++++}-{3:3}, at: mlx5_devcom_get_peer_data+0x37/0x80 [mlx5_core]
    [  164.604459]
                   which lock already depends on the new lock.
    
    [  164.605190]
                   the existing dependency chain (in reverse order) is:
    [  164.605848]
                   -> #1 (&comp->sem){++++}-{3:3}:
    [  164.606380]        down_read+0x39/0x50
    [  164.606772]        mlx5_devcom_get_peer_data+0x37/0x80 [mlx5_core]
    [  164.607336]        mlx5e_tc_query_route_vport+0x86/0xc0 [mlx5_core]
    [  164.607914]        mlx5e_tc_tun_route_lookup+0x1a4/0x1d0 [mlx5_core]
    [  164.608495]        mlx5e_attach_decap_route+0xc6/0x1e0 [mlx5_core]
    [  164.609063]        mlx5e_tc_add_fdb_flow+0x1ea/0x360 [mlx5_core]
    [  164.609627]        __mlx5e_add_fdb_flow+0x2d2/0x430 [mlx5_core]
    [  164.610175]        mlx5e_configure_flower+0x952/0x1a20 [mlx5_core]
    [  164.610741]        tc_setup_cb_add+0xd4/0x200
    [  164.611146]        fl_hw_replace_filter+0x14c/0x1f0 [cls_flower]
    [  164.611661]        fl_change+0xc95/0x18a0 [cls_flower]
    [  164.612116]        tc_new_tfilter+0x3fc/0xd20
    [  164.612516]        rtnetlink_rcv_msg+0x418/0x5b0
    [  164.612936]        netlink_rcv_skb+0x54/0x100
    [  164.613339]        netlink_unicast+0x190/0x250
    [  164.613746]        netlink_sendmsg+0x245/0x4a0
    [  164.614150]        sock_sendmsg+0x38/0x60
    [  164.614522]        ____sys_sendmsg+0x1d0/0x1e0
    [  164.614934]        ___sys_sendmsg+0x80/0xc0
    [  164.615320]        __sys_sendmsg+0x51/0x90
    [  164.615701]        do_syscall_64+0x3d/0x90
    [  164.616083]        entry_SYSCALL_64_after_hwframe+0x46/0xb0
    [  164.616568]
                   -> #0 (&esw->offloads.encap_tbl_lock){+.+.}-{3:3}:
    [  164.617210]        __lock_acquire+0x159e/0x26e0
    [  164.617638]        lock_acquire+0xc2/0x2a0
    [  164.618018]        __mutex_lock+0x92/0xcd0
    [  164.618401]        mlx5e_attach_encap+0xd8/0x8b0 [mlx5_core]
    [  164.618943]        post_process_attr+0x153/0x2d0 [mlx5_core]
    [  164.619471]        mlx5e_tc_add_fdb_flow+0x164/0x360 [mlx5_core]
    [  164.620021]        __mlx5e_add_fdb_flow+0x2d2/0x430 [mlx5_core]
    [  164.620564]        mlx5e_configure_flower+0xe33/0x1a20 [mlx5_core]
    [  164.621125]        tc_setup_cb_add+0xd4/0x200
    [  164.621531]        fl_hw_replace_filter+0x14c/0x1f0 [cls_flower]
    [  164.622047]        fl_change+0xc95/0x18a0 [cls_flower]
    [  164.622500]        tc_new_tfilter+0x3fc/0xd20
    [  164.622906]        rtnetlink_rcv_msg+0x418/0x5b0
    [  164.623324]        netlink_rcv_skb+0x54/0x100
    [  164.623727]        netlink_unicast+0x190/0x250
    [  164.624138]        netlink_sendmsg+0x245/0x4a0
    [  164.624544]        sock_sendmsg+0x38/0x60
    [  164.624919]        ____sys_sendmsg+0x1d0/0x1e0
    [  164.625340]        ___sys_sendmsg+0x80/0xc0
    [  164.625731]        __sys_sendmsg+0x51/0x90
    [  164.626117]        do_syscall_64+0x3d/0x90
    [  164.626502]        entry_SYSCALL_64_after_hwframe+0x46/0xb0
    [  164.626995]
                   other info that might help us debug this:
    
    [  164.627725]  Possible unsafe locking scenario:
    
    [  164.628268]        CPU0                    CPU1
    [  164.628683]        ----                    ----
    [  164.629098]   lock(&comp->sem);
    [  164.629421]                                lock(&esw->offloads.encap_tbl_lock);
    [  164.630066]                                lock(&comp->sem);
    [  164.630555]   lock(&esw->offloads.encap_tbl_lock);
    [  164.630993]
                    *** DEADLOCK ***
    
    [  164.631575] 3 locks held by handler1/3456:
    [  164.631962]  #0: ffff888124b75130 (&block->cb_lock){++++}-{3:3}, at: tc_setup_cb_add+0x5b/0x200
    [  164.632703]  #1: ffff888116e512b8 (&esw->mode_lock){++++}-{3:3}, at: mlx5_esw_hold+0x39/0x50 [mlx5_core]
    [  164.633552]  #2: ffff88810137fc98 (&comp->sem){++++}-{3:3}, at: mlx5_devcom_get_peer_data+0x37/0x80 [mlx5_core]
    [  164.634435]
                   stack backtrace:
    [  164.634883] CPU: 17 PID: 3456 Comm: handler1 Not tainted 6.3.0-rc3+ #1
    [  164.635431] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
    [  164.636340] Call Trace:
    [  164.636616]  <TASK>
    [  164.636863]  dump_stack_lvl+0x47/0x70
    [  164.637217]  check_noncircular+0xfe/0x110
    [  164.637601]  __lock_acquire+0x159e/0x26e0
    [  164.637977]  ? mlx5_cmd_set_fte+0x5b0/0x830 [mlx5_core]
    [  164.638472]  lock_acquire+0xc2/0x2a0
    [  164.638828]  ? mlx5e_attach_encap+0xd8/0x8b0 [mlx5_core]
    [  164.639339]  ? lock_is_held_type+0x98/0x110
    [  164.639728]  __mutex_lock+0x92/0xcd0
    [  164.640074]  ? mlx5e_attach_encap+0xd8/0x8b0 [mlx5_core]
    [  164.640576]  ? __lock_acquire+0x382/0x26e0
    [  164.640958]  ? mlx5e_attach_encap+0xd8/0x8b0 [mlx5_core]
    [  164.641468]  ? mlx5e_attach_encap+0xd8/0x8b0 [mlx5_core]
    [  164.641965]  mlx5e_attach_encap+0xd8/0x8b0 [mlx5_core]
    [  164.642454]  ? lock_release+0xbf/0x240
    [  164.642819]  post_process_attr+0x153/0x2d0 [mlx5_core]
    [  164.643318]  mlx5e_tc_add_fdb_flow+0x164/0x360 [mlx5_core]
    [  164.643835]  __mlx5e_add_fdb_flow+0x2d2/0x430 [mlx5_core]
    [  164.644340]  mlx5e_configure_flower+0xe33/0x1a20 [mlx5_core]
    [  164.644862]  ? lock_acquire+0xc2/0x2a0
    [  164.645219]  tc_setup_cb_add+0xd4/0x200
    [  164.645588]  fl_hw_replace_filter+0x14c/0x1f0 [cls_flower]
    [  164.646067]  fl_change+0xc95/0x18a0 [cls_flower]
    [  164.646488]  tc_new_tfilter+0x3fc/0xd20
    [  164.646861]  ? tc_del_tfilter+0x810/0x810
    [  164.647236]  rtnetlink_rcv_msg+0x418/0x5b0
    [  164.647621]  ? rtnl_setlink+0x160/0x160
    [  164.647982]  netlink_rcv_skb+0x54/0x100
    [  164.648348]  netlink_unicast+0x190/0x250
    [  164.648722]  netlink_sendmsg+0x245/0x4a0
    [  164.649090]  sock_sendmsg+0x38/0x60
    [  164.649434]  ____sys_sendmsg+0x1d0/0x1e0
    [  164.649804]  ? copy_msghdr_from_user+0x6d/0xa0
    [  164.650213]  ___sys_sendmsg+0x80/0xc0
    [  164.650563]  ? lock_acquire+0xc2/0x2a0
    [  164.650926]  ? lock_acquire+0xc2/0x2a0
    [  164.651286]  ? __fget_files+0x5/0x190
    [  164.651644]  ? find_held_lock+0x2b/0x80
    [  164.652006]  ? __fget_files+0xb9/0x190
    [  164.652365]  ? lock_release+0xbf/0x240
    [  164.652723]  ? __fget_files+0xd3/0x190
    [  164.653079]  __sys_sendmsg+0x51/0x90
    [  164.653435]  do_syscall_64+0x3d/0x90
    [  164.653784]  entry_SYSCALL_64_after_hwframe+0x46/0xb0
    [  164.654229] RIP: 0033:0x7f378054f8bd
    [  164.654577] Code: 28 89 54 24 1c 48 89 74 24 10 89 7c 24 08 e8 6a c3 f4 ff 8b 54 24 1c 48 8b 74 24 10 41 89 c0 8b 7c 24 08 b8 2e 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 33 44 89 c7 48 89 44 24 08 e8 be c3 f4 ff 48
    [  164.656041] RSP: 002b:00007f377fa114b0 EFLAGS: 00000293 ORIG_RAX: 000000000000002e
    [  164.656701] RAX: ffffffffffffffda RBX: 0000000000000001 RCX: 00007f378054f8bd
    [  164.657297] RDX: 0000000000000000 RSI: 00007f377fa11540 RDI: 0000000000000014
    [  164.657885] RBP: 00007f377fa12278 R08: 0000000000000000 R09: 000000000000015c
    [  164.658472] R10: 00007f377fa123d0 R11: 0000000000000293 R12: 0000560962d99bd0
    [  164.665317] R13: 0000000000000000 R14: 0000560962d99bd0 R15: 00007f377fa11540
    
    Fixes: f9d196bd632b ("net/mlx5e: Use correct eswitch for stack devices with lag")
    Signed-off-by: Vlad Buslov <[email protected]>
    Reviewed-by: Roi Dayan <[email protected]>
    Reviewed-by: Shay Drory <[email protected]>
    Reviewed-by: Tariq Toukan <[email protected]>
    Signed-off-by: Saeed Mahameed <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net/mlx5e: Fix SQ wake logic in ptp napi_poll context [+ + +]
Author: Rahul Rameshbabu <[email protected]>
Date:   Tue Feb 21 16:18:48 2023 -0800

    net/mlx5e: Fix SQ wake logic in ptp napi_poll context
    
    commit 7aa50380191635e5897a773f272829cc961a2be5 upstream.
    
    Check in the mlx5e_ptp_poll_ts_cq context if the ptp tx sq should be woken
    up. Before change, the ptp tx sq may never wake up if the ptp tx ts skb
    fifo is full when mlx5e_poll_tx_cq checks if the queue should be woken up.
    
    Fixes: 1880bc4e4a96 ("net/mlx5e: Add TX port timestamp support")
    Signed-off-by: Rahul Rameshbabu <[email protected]>
    Reviewed-by: Tariq Toukan <[email protected]>
    Signed-off-by: Saeed Mahameed <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net/mlx5e: Use correct encap attribute during invalidation [+ + +]
Author: Vlad Buslov <[email protected]>
Date:   Mon Apr 3 22:26:00 2023 +0200

    net/mlx5e: Use correct encap attribute during invalidation
    
    commit be071cdb167fc3e25fe81922166b3d499d23e8ac upstream.
    
    With introduction of post action infrastructure most of the users of encap
    attribute had been modified in order to obtain the correct attribute by
    calling mlx5e_tc_get_encap_attr() helper instead of assuming encap action
    is always on default attribute. However, the cited commit didn't modify
    mlx5e_invalidate_encap() which prevents it from destroying correct modify
    header action which leads to a warning [0]. Fix the issue by using correct
    attribute.
    
    [0]:
    
    Feb 21 09:47:35 c-237-177-40-045 kernel: WARNING: CPU: 17 PID: 654 at drivers/net/ethernet/mellanox/mlx5/core/en_tc.c:684 mlx5e_tc_attach_mod_hdr+0x1cc/0x230 [mlx5_core]
    Feb 21 09:47:35 c-237-177-40-045 kernel: RIP: 0010:mlx5e_tc_attach_mod_hdr+0x1cc/0x230 [mlx5_core]
    Feb 21 09:47:35 c-237-177-40-045 kernel: Call Trace:
    Feb 21 09:47:35 c-237-177-40-045 kernel:  <TASK>
    Feb 21 09:47:35 c-237-177-40-045 kernel:  mlx5e_tc_fib_event_work+0x8e3/0x1f60 [mlx5_core]
    Feb 21 09:47:35 c-237-177-40-045 kernel:  ? mlx5e_take_all_encap_flows+0xe0/0xe0 [mlx5_core]
    Feb 21 09:47:35 c-237-177-40-045 kernel:  ? lock_downgrade+0x6d0/0x6d0
    Feb 21 09:47:35 c-237-177-40-045 kernel:  ? lockdep_hardirqs_on_prepare+0x273/0x3f0
    Feb 21 09:47:35 c-237-177-40-045 kernel:  ? lockdep_hardirqs_on_prepare+0x273/0x3f0
    Feb 21 09:47:35 c-237-177-40-045 kernel:  process_one_work+0x7c2/0x1310
    Feb 21 09:47:35 c-237-177-40-045 kernel:  ? lockdep_hardirqs_on_prepare+0x3f0/0x3f0
    Feb 21 09:47:35 c-237-177-40-045 kernel:  ? pwq_dec_nr_in_flight+0x230/0x230
    Feb 21 09:47:35 c-237-177-40-045 kernel:  ? rwlock_bug.part.0+0x90/0x90
    Feb 21 09:47:35 c-237-177-40-045 kernel:  worker_thread+0x59d/0xec0
    Feb 21 09:47:35 c-237-177-40-045 kernel:  ? __kthread_parkme+0xd9/0x1d0
    
    Fixes: 8300f225268b ("net/mlx5e: Create new flow attr for multi table actions")
    Signed-off-by: Vlad Buslov <[email protected]>
    Reviewed-by: Roi Dayan <[email protected]>
    Reviewed-by: Tariq Toukan <[email protected]>
    Signed-off-by: Saeed Mahameed <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net/smc: Reset connection when trying to use SMCRv2 fails. [+ + +]
Author: Wen Gu <[email protected]>
Date:   Thu May 18 13:14:55 2023 +0800

    net/smc: Reset connection when trying to use SMCRv2 fails.
    
    commit 35112271672ae98f45df7875244a4e33aa215e31 upstream.
    
    We found a crash when using SMCRv2 with 2 Mellanox ConnectX-4. It
    can be reproduced by:
    
    - smc_run nginx
    - smc_run wrk -t 32 -c 500 -d 30 http://<ip>:<port>
    
     BUG: kernel NULL pointer dereference, address: 0000000000000014
     #PF: supervisor read access in kernel mode
     #PF: error_code(0x0000) - not-present page
     PGD 8000000108713067 P4D 8000000108713067 PUD 151127067 PMD 0
     Oops: 0000 [#1] PREEMPT SMP PTI
     CPU: 4 PID: 2441 Comm: kworker/4:249 Kdump: loaded Tainted: G        W   E      6.4.0-rc1+ #42
     Workqueue: smc_hs_wq smc_listen_work [smc]
     RIP: 0010:smc_clc_send_confirm_accept+0x284/0x580 [smc]
     RSP: 0018:ffffb8294b2d7c78 EFLAGS: 00010a06
     RAX: ffff8f1873238880 RBX: ffffb8294b2d7dc8 RCX: 0000000000000000
     RDX: 00000000000000b4 RSI: 0000000000000001 RDI: 0000000000b40c00
     RBP: ffffb8294b2d7db8 R08: ffff8f1815c5860c R09: 0000000000000000
     R10: 0000000000000400 R11: 0000000000000000 R12: ffff8f1846f56180
     R13: ffff8f1815c5860c R14: 0000000000000001 R15: 0000000000000001
     FS:  0000000000000000(0000) GS:ffff8f1aefd00000(0000) knlGS:0000000000000000
     CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: 0000000000000014 CR3: 00000001027a0001 CR4: 00000000003706e0
     DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
     DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
     Call Trace:
      <TASK>
      ? mlx5_ib_map_mr_sg+0xa1/0xd0 [mlx5_ib]
      ? smcr_buf_map_link+0x24b/0x290 [smc]
      ? __smc_buf_create+0x4ee/0x9b0 [smc]
      smc_clc_send_accept+0x4c/0xb0 [smc]
      smc_listen_work+0x346/0x650 [smc]
      ? __schedule+0x279/0x820
      process_one_work+0x1e5/0x3f0
      worker_thread+0x4d/0x2f0
      ? __pfx_worker_thread+0x10/0x10
      kthread+0xe5/0x120
      ? __pfx_kthread+0x10/0x10
      ret_from_fork+0x2c/0x50
      </TASK>
    
    During the CLC handshake, server sequentially tries available SMCRv2
    and SMCRv1 devices in smc_listen_work().
    
    If an SMCRv2 device is found. SMCv2 based link group and link will be
    assigned to the connection. Then assumed that some buffer assignment
    errors happen later in the CLC handshake, such as RMB registration
    failure, server will give up SMCRv2 and try SMCRv1 device instead. But
    the resources assigned to the connection won't be reset.
    
    When server tries SMCRv1 device, the connection creation process will
    be executed again. Since conn->lnk has been assigned when trying SMCRv2,
    it will not be set to the correct SMCRv1 link in
    smcr_lgr_conn_assign_link(). So in such situation, conn->lgr points to
    correct SMCRv1 link group but conn->lnk points to the SMCRv2 link
    mistakenly.
    
    Then in smc_clc_send_confirm_accept(), conn->rmb_desc->mr[link->link_idx]
    will be accessed. Since the link->link_idx is not correct, the related
    MR may not have been initialized, so crash happens.
    
     | Try SMCRv2 device first
     |     |-> conn->lgr:   assign existed SMCRv2 link group;
     |     |-> conn->link:  assign existed SMCRv2 link (link_idx may be 1 in SMC_LGR_SYMMETRIC);
     |     |-> sndbuf & RMB creation fails, quit;
     |
     | Try SMCRv1 device then
     |     |-> conn->lgr:   create SMCRv1 link group and assign;
     |     |-> conn->link:  keep SMCRv2 link mistakenly;
     |     |-> sndbuf & RMB creation succeed, only RMB->mr[link_idx = 0]
     |         initialized.
     |
     | Then smc_clc_send_confirm_accept() accesses
     | conn->rmb_desc->mr[conn->link->link_idx, which is 1], then crash.
     v
    
    This patch tries to fix this by cleaning conn->lnk before assigning
    link. In addition, it is better to reset the connection and clean the
    resources assigned if trying SMCRv2 failed in buffer creation or
    registration.
    
    Fixes: e49300a6bf62 ("net/smc: add listen processing for SMC-Rv2")
    Link: https://lore.kernel.org/r/[email protected]/
    Signed-off-by: Wen Gu <[email protected]>
    Reviewed-by: Tony Lu <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net: cdc_ncm: Deal with too low values of dwNtbOutMaxSize [+ + +]
Author: Tudor Ambarus <[email protected]>
Date:   Wed May 17 13:38:08 2023 +0000

    net: cdc_ncm: Deal with too low values of dwNtbOutMaxSize
    
    commit 7e01c7f7046efc2c7c192c3619db43292b98e997 upstream.
    
    Currently in cdc_ncm_check_tx_max(), if dwNtbOutMaxSize is lower than
    the calculated "min" value, but greater than zero, the logic sets
    tx_max to dwNtbOutMaxSize. This is then used to allocate a new SKB in
    cdc_ncm_fill_tx_frame() where all the data is handled.
    
    For small values of dwNtbOutMaxSize the memory allocated during
    alloc_skb(dwNtbOutMaxSize, GFP_ATOMIC) will have the same size, due to
    how size is aligned at alloc time:
            size = SKB_DATA_ALIGN(size);
            size += SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
    Thus we hit the same bug that we tried to squash with
    commit 2be6d4d16a084 ("net: cdc_ncm: Allow for dwNtbOutMaxSize to be unset or zero")
    
    Low values of dwNtbOutMaxSize do not cause an issue presently because at
    alloc_skb() time more memory (512b) is allocated than required for the
    SKB headers alone (320b), leaving some space (512b - 320b = 192b)
    for CDC data (172b).
    
    However, if more elements (for example 3 x u64 = [24b]) were added to
    one of the SKB header structs, say 'struct skb_shared_info',
    increasing its original size (320b [320b aligned]) to something larger
    (344b [384b aligned]), then suddenly the CDC data (172b) no longer
    fits in the spare SKB data area (512b - 384b = 128b).
    
    Consequently the SKB bounds checking semantics fails and panics:
    
    skbuff: skb_over_panic: text:ffffffff831f755b len:184 put:172 head:ffff88811f1c6c00 data:ffff88811f1c6c00 tail:0xb8 end:0x80 dev:<NULL>
    ------------[ cut here ]------------
    kernel BUG at net/core/skbuff.c:113!
    invalid opcode: 0000 [#1] PREEMPT SMP KASAN
    CPU: 0 PID: 57 Comm: kworker/0:2 Not tainted 5.15.106-syzkaller-00249-g19c0ed55a470 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 04/14/2023
    Workqueue: mld mld_ifc_work
    RIP: 0010:skb_panic net/core/skbuff.c:113 [inline]
    RIP: 0010:skb_over_panic+0x14c/0x150 net/core/skbuff.c:118
    [snip]
    Call Trace:
     <TASK>
     skb_put+0x151/0x210 net/core/skbuff.c:2047
     skb_put_zero include/linux/skbuff.h:2422 [inline]
     cdc_ncm_ndp16 drivers/net/usb/cdc_ncm.c:1131 [inline]
     cdc_ncm_fill_tx_frame+0x11ab/0x3da0 drivers/net/usb/cdc_ncm.c:1308
     cdc_ncm_tx_fixup+0xa3/0x100
    
    Deal with too low values of dwNtbOutMaxSize, clamp it in the range
    [USB_CDC_NCM_NTB_MIN_OUT_SIZE, CDC_NCM_NTB_MAX_SIZE_TX]. We ensure
    enough data space is allocated to handle CDC data by making sure
    dwNtbOutMaxSize is not smaller than USB_CDC_NCM_NTB_MIN_OUT_SIZE.
    
    Fixes: 289507d3364f ("net: cdc_ncm: use sysfs for rx/tx aggregation tuning")
    Cc: [email protected]
    Reported-by: [email protected]
    Link: https://syzkaller.appspot.com/bug?extid=b982f1059506db48409d
    Link: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Tudor Ambarus <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: dsa: mv88e6xxx: Add RGMII delay to 88E6320 [+ + +]
Author: Steffen Bätz <[email protected]>
Date:   Fri Oct 28 13:31:58 2022 -0300

    net: dsa: mv88e6xxx: Add RGMII delay to 88E6320
    
    commit 91e87045a5ef6f7003e9a2cb7dfa435b9b002dbe upstream.
    
    Currently, the .port_set_rgmii_delay hook is missing for the 88E6320
    family, which causes failure to retrieve an IP address via DHCP.
    
    Add mv88e6320_port_set_rgmii_delay() that allows applying the RGMII
    delay for ports 2, 5, and 6, which are the only ports that can be used
    in RGMII mode.
    
    Tested on a custom i.MX8MN board connected to an 88E6320 switch.
    
    This change also applies safely to the 88E6321 variant.
    
    The only difference between 88E6320 versus 88E6321 is the temperature
    grade and pinout.
    
    They share exactly the same MDIO register map for ports 2, 5, and 6,
    which are the only ports that can be used in RGMII mode.
    
    Signed-off-by: Steffen Bätz <[email protected]>
    [fabio: Improved commit log and extended it to mv88e6321_ops]
    Signed-off-by: Fabio Estevam <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Cc: Fabio Estevam <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: fix skb leak in __skb_tstamp_tx() [+ + +]
Author: Pratyush Yadav <[email protected]>
Date:   Mon May 22 17:30:20 2023 +0200

    net: fix skb leak in __skb_tstamp_tx()
    
    commit 8a02fb71d7192ff1a9a47c9d937624966c6e09af upstream.
    
    Commit 50749f2dd685 ("tcp/udp: Fix memleaks of sk and zerocopy skbs with
    TX timestamp.") added a call to skb_orphan_frags_rx() to fix leaks with
    zerocopy skbs. But it ended up adding a leak of its own. When
    skb_orphan_frags_rx() fails, the function just returns, leaking the skb
    it just cloned. Free it before returning.
    
    This bug was discovered and resolved using Coverity Static Analysis
    Security Testing (SAST) by Synopsys, Inc.
    
    Fixes: 50749f2dd685 ("tcp/udp: Fix memleaks of sk and zerocopy skbs with TX timestamp.")
    Signed-off-by: Pratyush Yadav <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Willem de Bruijn <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: fix stack overflow when LRO is disabled for virtual interfaces [+ + +]
Author: Taehee Yoo <[email protected]>
Date:   Wed May 17 14:30:10 2023 +0000

    net: fix stack overflow when LRO is disabled for virtual interfaces
    
    commit ae9b15fbe63447bc1d3bba3769f409d17ca6fdf6 upstream.
    
    When the virtual interface's feature is updated, it synchronizes the
    updated feature for its own lower interface.
    This propagation logic should be worked as the iteration, not recursively.
    But it works recursively due to the netdev notification unexpectedly.
    This problem occurs when it disables LRO only for the team and bonding
    interface type.
    
           team0
             |
      +------+------+-----+-----+
      |      |      |     |     |
    team1  team2  team3  ...  team200
    
    If team0's LRO feature is updated, it generates the NETDEV_FEAT_CHANGE
    event to its own lower interfaces(team1 ~ team200).
    It is worked by netdev_sync_lower_features().
    So, the NETDEV_FEAT_CHANGE notification logic of each lower interface
    work iteratively.
    But generated NETDEV_FEAT_CHANGE event is also sent to the upper
    interface too.
    upper interface(team0) generates the NETDEV_FEAT_CHANGE event for its own
    lower interfaces again.
    lower and upper interfaces receive this event and generate this
    event again and again.
    So, the stack overflow occurs.
    
    But it is not the infinite loop issue.
    Because the netdev_sync_lower_features() updates features before
    generating the NETDEV_FEAT_CHANGE event.
    Already synchronized lower interfaces skip notification logic.
    So, it is just the problem that iteration logic is changed to the
    recursive unexpectedly due to the notification mechanism.
    
    Reproducer:
    
    ip link add team0 type team
    ethtool -K team0 lro on
    for i in {1..200}
    do
            ip link add team$i master team0 type team
            ethtool -K team$i lro on
    done
    
    ethtool -K team0 lro off
    
    In order to fix it, the notifier_ctx member of bonding/team is introduced.
    
    Reported-by: [email protected]
    Fixes: fd867d51f889 ("net/core: generic support for disabling netdev features down stack")
    Signed-off-by: Taehee Yoo <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Reviewed-by: Nikolay Aleksandrov <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: phy: mscc: add VSC8502 to MODULE_DEVICE_TABLE [+ + +]
Author: David Epping <[email protected]>
Date:   Tue May 23 17:31:05 2023 +0200

    net: phy: mscc: add VSC8502 to MODULE_DEVICE_TABLE
    
    commit 57fb54ab9f6945e204740b696bd4cee61ee04e5e upstream.
    
    The mscc driver implements support for VSC8502, so its ID should be in
    the MODULE_DEVICE_TABLE for automatic loading.
    
    Signed-off-by: David Epping <[email protected]>
    Fixes: d3169863310d ("net: phy: mscc: add support for VSC8502")
    Reviewed-by: Vladimir Oltean <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ocfs2: Switch to security_inode_init_security() [+ + +]
Author: Roberto Sassu <[email protected]>
Date:   Tue Mar 14 09:17:16 2023 +0100

    ocfs2: Switch to security_inode_init_security()
    
    commit de3004c874e740304cc4f4a83d6200acb511bbda upstream.
    
    In preparation for removing security_old_inode_init_security(), switch to
    security_inode_init_security().
    
    Extend the existing ocfs2_initxattrs() to take the
    ocfs2_security_xattr_info structure from fs_info, and populate the
    name/value/len triple with the first xattr provided by LSMs.
    
    As fs_info was not used before, ocfs2_initxattrs() can now handle the case
    of replicating the behavior of security_old_inode_init_security(), i.e.
    just obtaining the xattr, in addition to setting all xattrs provided by
    LSMs.
    
    Supporting multiple xattrs is not currently supported where
    security_old_inode_init_security() was called (mknod, symlink), as it
    requires non-trivial changes that can be done at a later time. Like for
    reiserfs, even if EVM is invoked, it will not provide an xattr (if it is
    not the first to set it, its xattr will be discarded; if it is the first,
    it does not have xattrs to calculate the HMAC on).
    
    Finally, since security_inode_init_security(), unlike
    security_old_inode_init_security(), returns zero instead of -EOPNOTSUPP if
    no xattrs were provided by LSMs or if inodes are private, additionally
    check in ocfs2_init_security_get() if the xattr name is set.
    
    If not, act as if security_old_inode_init_security() returned -EOPNOTSUPP,
    and set si->enable to zero to notify to the functions following
    ocfs2_init_security_get() that no xattrs are available.
    
    Signed-off-by: Roberto Sassu <[email protected]>
    Reviewed-by: Casey Schaufler <[email protected]>
    Acked-by: Joseph Qi <[email protected]>
    Reviewed-by: Mimi Zohar <[email protected]>
    Signed-off-by: Paul Moore <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
octeontx2-pf: Fix TSOv6 offload [+ + +]
Author: Sunil Goutham <[email protected]>
Date:   Thu May 18 12:10:42 2023 +0530

    octeontx2-pf: Fix TSOv6 offload
    
    commit de678ca38861f2eb58814048076dcf95ed1b5bf9 upstream.
    
    HW adds segment size to the payload length
    in the IPv6 header. Fix payload length to
    just TCP header length instead of 'TCP header
    size + IPv6 header size'.
    
    Fixes: 86d7476078b8 ("octeontx2-pf: TCP segmentation offload support")
    Signed-off-by: Sunil Goutham <[email protected]>
    Signed-off-by: Ratheesh Kannoth <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
optee: fix uninited async notif value [+ + +]
Author: Etienne Carriere <[email protected]>
Date:   Thu Apr 20 09:49:23 2023 +0200

    optee: fix uninited async notif value
    
    commit 654d0310007146fae87b0c1a68f81e53ad519b14 upstream.
    
    Fixes an uninitialized variable in irq_handler() that could lead to
    unpredictable behavior in case OP-TEE fails to handle SMC function ID
    OPTEE_SMC_GET_ASYNC_NOTIF_VALUE. This change ensures that in that case
    get_async_notif_value() properly reports there are no notification
    event.
    
    Reported-by: kernel test robot <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]/
    Reported-by: Dan Carpenter <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]/
    Fixes: 6749e69c4dad ("optee: add asynchronous notifications")
    Signed-off-by: Etienne Carriere <[email protected]>
    Reviewed-by: Sumit Garg <[email protected]>
    Signed-off-by: Jens Wiklander <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
parisc: Allow to reboot machine after system halt [+ + +]
Author: Helge Deller <[email protected]>
Date:   Mon May 22 22:57:30 2023 +0200

    parisc: Allow to reboot machine after system halt
    
    commit 2028315cf59bb899a5ac7e87dc48ecb8fac7ac24 upstream.
    
    In case a machine can't power-off itself on system shutdown,
    allow the user to reboot it by pressing the RETURN key.
    
    Cc: <[email protected]> # v4.14+
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

parisc: Enable LOCKDEP support [+ + +]
Author: Helge Deller <[email protected]>
Date:   Tue May 23 09:06:40 2023 +0200

    parisc: Enable LOCKDEP support
    
    commit adf8e96a7ea670d45b5de7594acc67e8f4787ae6 upstream.
    
    Cc: <[email protected]> # v6.0+
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

parisc: Fix flush_dcache_page() for usage from irq context [+ + +]
Author: Helge Deller <[email protected]>
Date:   Wed May 24 17:07:07 2023 +0200

    parisc: Fix flush_dcache_page() for usage from irq context
    
    commit 61e150fb310729c98227a5edf6e4a3619edc3702 upstream.
    
    Since at least kernel 6.1, flush_dcache_page() is called with IRQs
    disabled, e.g. from aio_complete().
    
    But the current implementation for flush_dcache_page() on parisc
    unintentionally re-enables IRQs, which may lead to deadlocks.
    
    Fix it by using xa_lock_irqsave() and xa_unlock_irqrestore()
    for the flush_dcache_mmap_*lock() macros instead.
    
    Cc: [email protected]
    Cc: [email protected] # 5.18+
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

parisc: Handle kgdb breakpoints only in kernel context [+ + +]
Author: Helge Deller <[email protected]>
Date:   Wed May 24 14:34:58 2023 +0200

    parisc: Handle kgdb breakpoints only in kernel context
    
    commit 6888ff04e37d01295620a73f3f7efbc79f6ef152 upstream.
    
    The kernel kgdb break instructions should only be handled when running
    in kernel context.
    
    Cc: <[email protected]> # v5.4+
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

parisc: Handle kprobes breakpoints only in kernel context [+ + +]
Author: Helge Deller <[email protected]>
Date:   Wed May 24 14:31:14 2023 +0200

    parisc: Handle kprobes breakpoints only in kernel context
    
    commit df419492e428b6a2bce98d0f613c58a13da6666c upstream.
    
    The kernel kprobes break instructions should only be handled when running
    in kernel context.
    
    Cc: <[email protected]> # v5.18+
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

parisc: Use num_present_cpus() in alternative patching code [+ + +]
Author: Helge Deller <[email protected]>
Date:   Fri May 19 12:12:06 2023 +0200

    parisc: Use num_present_cpus() in alternative patching code
    
    commit b6405f0829d7b1dd926ba3ca5f691cab835abfaa upstream.
    
    When patching the kernel code some alternatives depend on SMP vs. !SMP.
    Use the value of num_present_cpus() instead of num_online_cpus() to
    decide, otherwise we may run into issues if and additional CPU is
    enabled after having loaded a module while only one CPU was enabled.
    
    Signed-off-by: Helge Deller <[email protected]>
    Cc: <[email protected]> # v6.1+
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
perf/x86/uncore: Correct the number of CHAs on SPR [+ + +]
Author: Kan Liang <[email protected]>
Date:   Mon May 8 07:02:06 2023 -0700

    perf/x86/uncore: Correct the number of CHAs on SPR
    
    commit 38776cc45eb7603df4735a0410f42cffff8e71a1 upstream.
    
    The number of CHAs from the discovery table on some SPR variants is
    incorrect, because of a firmware issue. An accurate number can be read
    from the MSR UNC_CBO_CONFIG.
    
    Fixes: 949b11381f81 ("perf/x86/intel/uncore: Add Sapphire Rapids server CHA support")
    Reported-by: Stephane Eranian <[email protected]>
    Signed-off-by: Kan Liang <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Tested-by: Stephane Eranian <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
platform/mellanox: mlxbf-pmc: fix sscanf() error checking [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Mon May 15 13:32:37 2023 +0300

    platform/mellanox: mlxbf-pmc: fix sscanf() error checking
    
    commit 95e4b25192e9238fd2dbe85d96dd2f8fd1ce9d14 upstream.
    
    The sscanf() function never returns negatives.  It returns the number of
    items successfully read.
    
    Fixes: 1a218d312e65 ("platform/mellanox: mlxbf-pmc: Add Mellanox BlueField PMC driver")
    Signed-off-by: Dan Carpenter <[email protected]>
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Hans de Goede <[email protected]>
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
platform/x86/intel/ifs: Annotate work queue on stack so object debug does not complain [+ + +]
Author: David Arcari <[email protected]>
Date:   Tue May 23 06:54:00 2023 -0400

    platform/x86/intel/ifs: Annotate work queue on stack so object debug does not complain
    
    commit 3279decb2c3c8d58cb0b70ed5235c480735a36ee upstream.
    
    Object Debug results in the following warning while attempting to load
    ifs firmware:
    
    [  220.007422] ODEBUG: object 000000003bf952db is on stack 00000000e843994b, but NOT annotated.
    [  220.007459] ------------[ cut here ]------------
    [  220.007461] WARNING: CPU: 0 PID: 11774 at lib/debugobjects.c:548 __debug_object_init.cold+0x22e/0x2d5
    [  220.137476] RIP: 0010:__debug_object_init.cold+0x22e/0x2d5
    [  220.254774] Call Trace:
    [  220.257641]  <TASK>
    [  220.265606]  scan_chunks_sanity_check+0x368/0x5f0 [intel_ifs]
    [  220.288292]  ifs_load_firmware+0x2a3/0x400 [intel_ifs]
    [  220.332793]  current_batch_store+0xea/0x160 [intel_ifs]
    [  220.357947]  kernfs_fop_write_iter+0x355/0x530
    [  220.363048]  new_sync_write+0x28e/0x4a0
    [  220.381226]  vfs_write+0x62a/0x920
    [  220.385160]  ksys_write+0xf9/0x1d0
    [  220.399421]  do_syscall_64+0x59/0x90
    [  220.440635]  entry_SYSCALL_64_after_hwframe+0x63/0xcd
    [  220.566845] ---[ end trace 3a01b299db142b41 ]---
    
    Correct this by calling INIT_WORK_ONSTACK instead of INIT_WORK.
    
    Fixes: 684ec215706d ("platform/x86/intel/ifs: Authenticate and copy to secured memory")
    
    Signed-off-by: David Arcari <[email protected]>
    Cc: Jithu Joseph <[email protected]>
    Cc: Ashok Raj <[email protected]>
    Cc: Tony Luck <[email protected]>
    Cc: Hans de Goede <[email protected]>
    Cc: Mark Gross <[email protected]>
    Cc: Greg Kroah-Hartman <[email protected]>
    Cc: Thomas Gleixner <[email protected]>
    Cc: Dan Williams <[email protected]>
    Cc: [email protected]
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Hans de Goede <[email protected]>
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
platform/x86: hp-wmi: Fix cast to smaller integer type warning [+ + +]
Author: Hans de Goede <[email protected]>
Date:   Mon Jan 23 14:28:24 2023 +0100

    platform/x86: hp-wmi: Fix cast to smaller integer type warning
    
    commit ce95010ef62d4bf470928969bafc9070ae98cbb1 upstream.
    
    Fix the following compiler warning:
    
    drivers/platform/x86/hp/hp-wmi.c:551:24: warning: cast to smaller integer
       type 'enum hp_wmi_radio' from 'void *' [-Wvoid-pointer-to-enum-cast]
    
    Reported-by: kernel test robot <[email protected]>
    Signed-off-by: Hans de Goede <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

platform/x86: ISST: Remove 8 socket limit [+ + +]
Author: Steve Wahl <[email protected]>
Date:   Fri May 19 11:04:20 2023 -0500

    platform/x86: ISST: Remove 8 socket limit
    
    commit bbb320bfe2c3e9740fe89cfa0a7089b4e8bfc4ff upstream.
    
    Stop restricting the PCI search to a range of PCI domains fed to
    pci_get_domain_bus_and_slot().  Instead, use for_each_pci_dev() and
    look at all PCI domains in one pass.
    
    On systems with more than 8 sockets, this avoids error messages like
    "Information: Invalid level, Can't get TDP control information at
    specified levels on cpu 480" from the intel speed select utility.
    
    Fixes: aa2ddd242572 ("platform/x86: ISST: Use numa node id for cpu pci dev mapping")
    Signed-off-by: Steve Wahl <[email protected]>
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
power: supply: axp288_fuel_gauge: Fix external_power_changed race [+ + +]
Author: Hans de Goede <[email protected]>
Date:   Sat Apr 15 18:07:30 2023 +0200

    power: supply: axp288_fuel_gauge: Fix external_power_changed race
    
    commit f8319774d6f1567d6e7d03653174ab0c82c5c66d upstream.
    
    fuel_gauge_external_power_changed() dereferences info->bat,
    which gets sets in axp288_fuel_gauge_probe() like this:
    
      info->bat = devm_power_supply_register(dev, &fuel_gauge_desc, &psy_cfg);
    
    As soon as devm_power_supply_register() has called device_add()
    the external_power_changed callback can get called. So there is a window
    where fuel_gauge_external_power_changed() may get called while
    info->bat has not been set yet leading to a NULL pointer dereference.
    
    Fixing this is easy. The external_power_changed callback gets passed
    the power_supply which will eventually get stored in info->bat,
    so fuel_gauge_external_power_changed() can simply directly use
    the passed in psy argument which is always valid.
    
    Fixes: 30abb3d07929 ("power: supply: axp288_fuel_gauge: Take lock before updating the valid flag")
    Cc: [email protected]
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

power: supply: bq24190: Call power_supply_changed() after updating input current [+ + +]
Author: Hans de Goede <[email protected]>
Date:   Sat Apr 15 20:23:41 2023 +0200

    power: supply: bq24190: Call power_supply_changed() after updating input current
    
    commit 77c2a3097d7029441e8a91aa0de1b4e5464593da upstream.
    
    The bq24192 model relies on external charger-type detection and once
    that is done the bq24190_charger code will update the input current.
    
    In this case, when the initial power_supply_changed() call is made
    from the interrupt handler, the input settings are 5V/0.5A which
    on many devices is not enough power to charge (while the device is on).
    
    On many devices the fuel-gauge relies in its external_power_changed
    callback to timely signal userspace about charging <-> discharging
    status changes. Add a power_supply_changed() call after updating
    the input current. This allows the fuel-gauge driver to timely recheck
    if the battery is charging after the new input current has been applied
    and then it can immediately notify userspace about this.
    
    Fixes: 18f8e6f695ac ("power: supply: bq24190_charger: Get input_current_limit from our supplier")
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

power: supply: bq25890: Call power_supply_changed() after updating input current or voltage [+ + +]
Author: Hans de Goede <[email protected]>
Date:   Sat Apr 15 20:23:40 2023 +0200

    power: supply: bq25890: Call power_supply_changed() after updating input current or voltage
    
    commit ad3d9c779b1f09f3f3a6fefd07af407c7bc7c9a7 upstream.
    
    The bq25892 model relies on external charger-type detection and once
    that is done the bq25890_charger code will update the input current
    and if pumpexpress is used also the input voltage.
    
    In this case, when the initial power_supply_changed() call is made
    from the interrupt handler, the input settings are 5V/0.5A which
    on many devices is not enough power to charge (while the device is on).
    
    On many devices the fuel-gauge relies in its external_power_changed
    callback to timely signal userspace about charging <-> discharging
    status changes. Add a power_supply_changed() call after updating
    the input current or voltage. This allows the fuel-gauge driver
    to timely recheck if the battery is charging after the new input
    settings have been applied and then it can immediately notify
    userspace about this.
    
    Fixes: 48f45b094dbb ("power: supply: bq25890: Support higher charging voltages through Pump Express+ protocol")
    Fixes: eab25b4f93aa ("power: supply: bq25890: On the bq25892 set the IINLIM based on external charger detection")
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

power: supply: bq25890: Fix external_power_changed race [+ + +]
Author: Hans de Goede <[email protected]>
Date:   Sat Apr 15 18:07:31 2023 +0200

    power: supply: bq25890: Fix external_power_changed race
    
    commit 029a443b9b6424170f00f6dd5b7682e682cce92e upstream.
    
    bq25890_charger_external_power_changed() dereferences bq->charger,
    which gets sets in bq25890_power_supply_init() like this:
    
      bq->charger = devm_power_supply_register(bq->dev, &bq->desc, &psy_cfg);
    
    As soon as devm_power_supply_register() has called device_add()
    the external_power_changed callback can get called. So there is a window
    where bq25890_charger_external_power_changed() may get called while
    bq->charger has not been set yet leading to a NULL pointer dereference.
    
    This race hits during boot sometimes on a Lenovo Yoga Book 1 yb1-x90f
    when the cht_wcove_pwrsrc (extcon) power_supply is done with detecting
    the connected charger-type which happens to exactly hit the small window:
    
      BUG: kernel NULL pointer dereference, address: 0000000000000018
      <snip>
      RIP: 0010:__power_supply_is_supplied_by+0xb/0xb0
      <snip>
      Call Trace:
       <TASK>
       __power_supply_get_supplier_property+0x19/0x50
       class_for_each_device+0xb1/0xe0
       power_supply_get_property_from_supplier+0x2e/0x50
       bq25890_charger_external_power_changed+0x38/0x1b0 [bq25890_charger]
       __power_supply_changed_work+0x30/0x40
       class_for_each_device+0xb1/0xe0
       power_supply_changed_work+0x5f/0xe0
      <snip>
    
    Fixing this is easy. The external_power_changed callback gets passed
    the power_supply which will eventually get stored in bq->charger,
    so bq25890_charger_external_power_changed() can simply directly use
    the passed in psy argument which is always valid.
    
    Fixes: eab25b4f93aa ("power: supply: bq25890: On the bq25892 set the IINLIM based on external charger detection")
    Cc: [email protected]
    Cc: Marek Vasut <[email protected]>
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

power: supply: bq27xxx: Add cache parameter to bq27xxx_battery_current_and_status() [+ + +]
Author: Hans de Goede <[email protected]>
Date:   Sat Apr 15 20:23:35 2023 +0200

    power: supply: bq27xxx: Add cache parameter to bq27xxx_battery_current_and_status()
    
    commit 35092c5819f8c5acc7bafe3fdbb13d6307c4f5e1 upstream.
    
    Add a cache parameter to bq27xxx_battery_current_and_status() so that
    it can optionally use cached flags instead of re-reading them itself.
    
    This is a preparation patch for making bq27xxx_battery_update() check
    the status and have it call power_supply_changed() on status changes.
    
    Fixes: 297a533b3e62 ("bq27x00: Cache battery registers")
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

power: supply: bq27xxx: After charger plug in/out wait 0.5s for things to stabilize [+ + +]
Author: Hans de Goede <[email protected]>
Date:   Sat Apr 15 20:23:38 2023 +0200

    power: supply: bq27xxx: After charger plug in/out wait 0.5s for things to stabilize
    
    commit 59a99cd462fbdf71f4e845e09f37783035088b4f upstream.
    
    bq27xxx_external_power_changed() gets called when the charger is plugged
    in or out. Rather then immediately scheduling an update wait 0.5 seconds
    for things to stabilize, so that e.g. the (dis)charge current is stable
    when bq27xxx_battery_update() runs.
    
    Fixes: 740b755a3b34 ("bq27x00: Poll battery state")
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

power: supply: bq27xxx: Ensure power_supply_changed() is called on current sign changes [+ + +]
Author: Hans de Goede <[email protected]>
Date:   Sat Apr 15 20:23:37 2023 +0200

    power: supply: bq27xxx: Ensure power_supply_changed() is called on current sign changes
    
    commit 939a116142012926e25de0ea6b7e2f8d86a5f1b6 upstream.
    
    On gauges where the current register is signed, there is no charging
    flag in the flags register. So only checking flags will not result
    in power_supply_changed() getting called when e.g. a charger is plugged
    in and the current sign changes from negative (discharging) to
    positive (charging).
    
    This causes userspace's notion of the status to lag until userspace
    does a poll.
    
    And when a power_supply_leds.c LED trigger is used to indicate charging
    status with a LED, this LED will lag until the capacity percentage
    changes, which may take many minutes (because the LED trigger only is
    updated on power_supply_changed() calls).
    
    Fix this by calling bq27xxx_battery_current_and_status() on gauges with
    a signed current register and checking if the status has changed.
    
    Fixes: 297a533b3e62 ("bq27x00: Cache battery registers")
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

power: supply: bq27xxx: Fix bq27xxx_battery_update() race condition [+ + +]
Author: Hans de Goede <[email protected]>
Date:   Sat Apr 15 20:23:32 2023 +0200

    power: supply: bq27xxx: Fix bq27xxx_battery_update() race condition
    
    commit 5c34c0aef185dcd10881847b9ebf20046aa77cb4 upstream.
    
    bq27xxx_battery_update() assumes / requires that it is only run once,
    not multiple times at the same time. But there are 3 possible callers:
    
    1. bq27xxx_battery_poll() delayed_work item handler
    2. bq27xxx_battery_irq_handler_thread() I2C IRQ handler
    3. bq27xxx_battery_setup()
    
    And there is no protection against these racing with each other,
    fix this race condition by making all callers take di->lock:
    
    - Rename bq27xxx_battery_update() to bq27xxx_battery_update_unlocked()
    
    - Add new bq27xxx_battery_update() which takes di->lock and then calls
      bq27xxx_battery_update_unlocked()
    
    - Make stale cache check code in bq27xxx_battery_get_property(), which
      already takes di->lock directly to check the jiffies, call
      bq27xxx_battery_update_unlocked() instead of messing with
      the delayed_work item
    
    - Make bq27xxx_battery_update_unlocked() mod the delayed-work item
      so that the next poll is delayed to poll_interval milliseconds after
      the last update independent of the source of the update
    
    Fixes: 740b755a3b34 ("bq27x00: Poll battery state")
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

power: supply: bq27xxx: Fix I2C IRQ race on remove [+ + +]
Author: Hans de Goede <[email protected]>
Date:   Sat Apr 15 20:23:33 2023 +0200

    power: supply: bq27xxx: Fix I2C IRQ race on remove
    
    commit 444ff00734f3878cd54ddd1ed5e2e6dbea9326d5 upstream.
    
    devm_request_threaded_irq() requested IRQs are only free-ed after
    the driver's remove function has ran. So the IRQ could trigger and
    call bq27xxx_battery_update() after bq27xxx_battery_teardown() has
    already run.
    
    Switch to explicitly free-ing the IRQ in bq27xxx_battery_i2c_remove()
    to fix this.
    
    Fixes: 8807feb91b76 ("power: bq27xxx_battery: Add interrupt handling support")
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

power: supply: bq27xxx: Fix poll_interval handling and races on remove [+ + +]
Author: Hans de Goede <[email protected]>
Date:   Sat Apr 15 20:23:34 2023 +0200

    power: supply: bq27xxx: Fix poll_interval handling and races on remove
    
    commit c00bc80462afc7963f449d7f21d896d2f629cacc upstream.
    
    Before this patch bq27xxx_battery_teardown() was setting poll_interval = 0
    to avoid bq27xxx_battery_update() requeuing the delayed_work item.
    
    There are 2 problems with this:
    
    1. If the driver is unbound through sysfs, rather then the module being
       rmmod-ed, this changes poll_interval unexpectedly
    
    2. This is racy, after it being set poll_interval could be changed
       before bq27xxx_battery_update() checks it through
       /sys/module/bq27xxx_battery/parameters/poll_interval
    
    Fix this by added a removed attribute to struct bq27xxx_device_info and
    using that instead of setting poll_interval to 0.
    
    There also is another poll_interval related race on remove(), writing
    /sys/module/bq27xxx_battery/parameters/poll_interval will requeue
    the delayed_work item for all devices on the bq27xxx_battery_devices
    list and the device being removed was only removed from that list
    after cancelling the delayed_work item.
    
    Fix this by moving the removal from the bq27xxx_battery_devices list
    to before cancelling the delayed_work item.
    
    Fixes: 8cfaaa811894 ("bq27x00_battery: Fix OOPS caused by unregistring bq27x00 driver")
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

power: supply: bq27xxx: Move bq27xxx_battery_update() down [+ + +]
Author: Hans de Goede <[email protected]>
Date:   Sat Apr 15 20:23:36 2023 +0200

    power: supply: bq27xxx: Move bq27xxx_battery_update() down
    
    commit ff4c4a2a4437a6d03787c7aafb2617f20c3ef45f upstream.
    
    Move the bq27xxx_battery_update() functions to below
    the bq27xxx_battery_current_and_status() function.
    
    This is just moving a block of text, no functional changes.
    
    This is a preparation patch for making bq27xxx_battery_update() check
    the status and have it call power_supply_changed() on status changes.
    
    Fixes: 297a533b3e62 ("bq27x00: Cache battery registers")
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

power: supply: leds: Fix blink to LED on transition [+ + +]
Author: Hans de Goede <[email protected]>
Date:   Thu Apr 13 12:09:41 2023 +0200

    power: supply: leds: Fix blink to LED on transition
    
    commit e4484643991e0f6b89060092563f0dbab9450cbb upstream.
    
    When a battery's status changes from charging to full then
    the charging-blink-full-solid trigger tries to change
    the LED from blinking to solid/on.
    
    As is documented in include/linux/leds.h to deactivate blinking /
    to make the LED solid a LED_OFF must be send:
    
    """
             * Deactivate blinking again when the brightness is set to LED_OFF
             * via the brightness_set() callback.
    """
    
    led_set_brighness() calls with a brightness value other then 0 / LED_OFF
    merely change the brightness of the LED in its on state while it is
    blinking.
    
    So power_supply_update_bat_leds() must first send a LED_OFF event
    before the LED_FULL to disable blinking.
    
    Fixes: 6501f728c56f ("power_supply: Add new LED trigger charging-blink-solid-full")
    Signed-off-by: Hans de Goede <[email protected]>
    Reviewed-by: Vasily Khoruzhick <[email protected]>
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

power: supply: mt6360: add a check of devm_work_autocancel in mt6360_charger_probe [+ + +]
Author: Kang Chen <[email protected]>
Date:   Mon Feb 27 11:14:10 2023 +0800

    power: supply: mt6360: add a check of devm_work_autocancel in mt6360_charger_probe
    
    commit 4cbb0d358883a27e432714b5256f0362946f5e25 upstream.
    
    devm_work_autocancel may fail, add a check and return early.
    
    Fixes: 0402e8ebb8b86 ("power: supply: mt6360_charger: add MT6360 charger support")
    Signed-off-by: Kang Chen <[email protected]>
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

power: supply: sbs-charger: Fix INHIBITED bit for Status reg [+ + +]
Author: Daisuke Nojiri <[email protected]>
Date:   Mon Apr 24 11:25:58 2023 -0700

    power: supply: sbs-charger: Fix INHIBITED bit for Status reg
    
    commit b2f2a3c9800208b0db2c2e34b05323757117faa2 upstream.
    
    CHARGE_INHIBITED bit position of the ChargerStatus register is actually
    0 not 1. This patch corrects it.
    
    Fixes: feb583e37f8a8 ("power: supply: add sbs-charger driver")
    Signed-off-by: Daisuke Nojiri <[email protected]>
    Signed-off-by: Sebastian Reichel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
regulator: mt6359: add read check for PMIC MT6359 [+ + +]
Author: Sen Chu <[email protected]>
Date:   Thu May 18 12:06:46 2023 +0800

    regulator: mt6359: add read check for PMIC MT6359
    
    commit a511637502b1caa135046d0f8fdabd55a31af8ef upstream.
    
    Add hardware version read check for PMIC MT6359
    
    Signed-off-by: Sen Chu <[email protected]
    Fixes: 4cfc96547512 ("regulator: mt6359: Add support for MT6359P regulator")
    Reviewed-by: AngeloGioacchino Del Regno <[email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

regulator: pca9450: Fix BUCK2 enable_mask [+ + +]
Author: Alexander Stein <[email protected]>
Date:   Fri May 12 10:19:34 2023 +0200

    regulator: pca9450: Fix BUCK2 enable_mask
    
    commit d67dada3e2524514b09496b9ee1df22d4507a280 upstream.
    
    This fixes a copy & paste error.
    No functional change intended, BUCK1_ENMODE_MASK equals BUCK2_ENMODE_MASK.
    
    Fixes: 0935ff5f1f0a ("regulator: pca9450: add pca9450 pmic driver")
    Originally-from: Robin Gong <[email protected]
    Signed-off-by: Alexander Stein <[email protected]
    Reviewed-by: Frieder Schrempf <[email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "android: binder: stop saving a pointer to the VMA" [+ + +]
Author: Carlos Llamas <[email protected]>
Date:   Tue May 2 20:12:18 2023 +0000

    Revert "android: binder: stop saving a pointer to the VMA"
    
    commit c0fd2101781ef761b636769b2f445351f71c3626 upstream.
    
    This reverts commit a43cfc87caaf46710c8027a8c23b8a55f1078f19.
    
    This patch fixed an issue reported by syzkaller in [1]. However, this
    turned out to be only a band-aid in binder. The root cause, as bisected
    by syzkaller, was fixed by commit 5789151e48ac ("mm/mmap: undo ->mmap()
    when mas_preallocate() fails"). We no longer need the patch for binder.
    
    Reverting such patch allows us to have a lockless access to alloc->vma
    in specific cases where the mmap_lock is not required. This approach
    avoids the contention that caused a performance regression.
    
    [1] https://lore.kernel.org/all/[email protected]
    
    [cmllamas: resolved conflicts with rework of alloc->mm and removal of
     binder_alloc_set_vma() also fixed comment section]
    
    Fixes: a43cfc87caaf ("android: binder: stop saving a pointer to the VMA")
    Cc: Liam Howlett <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: [email protected]
    Signed-off-by: Carlos Llamas <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "binder_alloc: add missing mmap_lock calls when using the VMA" [+ + +]
Author: Carlos Llamas <[email protected]>
Date:   Tue May 2 20:12:17 2023 +0000

    Revert "binder_alloc: add missing mmap_lock calls when using the VMA"
    
    commit b15655b12ddca7ade09807f790bafb6fab61b50a upstream.
    
    This reverts commit 44e602b4e52f70f04620bbbf4fe46ecb40170bde.
    
    This caused a performance regression particularly when pages are getting
    reclaimed. We don't need to acquire the mmap_lock to determine when the
    binder buffer has been fully initialized. A subsequent patch will bring
    back the lockless approach for this.
    
    [cmllamas: resolved trivial conflicts with renaming of alloc->mm]
    
    Fixes: 44e602b4e52f ("binder_alloc: add missing mmap_lock calls when using the VMA")
    Cc: Liam Howlett <[email protected]>
    Cc: Suren Baghdasaryan <[email protected]>
    Cc: [email protected]
    Signed-off-by: Carlos Llamas <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sctp: fix an issue that plpmtu can never go to complete state [+ + +]
Author: Xin Long <[email protected]>
Date:   Thu May 18 16:03:00 2023 -0400

    sctp: fix an issue that plpmtu can never go to complete state
    
    commit 6ca328e985cd995dfd1d5de44046e6074f853fbb upstream.
    
    When doing plpmtu probe, the probe size is growing every time when it
    receives the ACK during the Search state until the probe fails. When
    the failure occurs, pl.probe_high is set and it goes to the Complete
    state.
    
    However, if the link pmtu is huge, like 65535 in loopback_dev, the probe
    eventually keeps using SCTP_MAX_PLPMTU as the probe size and never fails.
    Because of that, pl.probe_high can not be set, and the plpmtu probe can
    never go to the Complete state.
    
    Fix it by setting pl.probe_high to SCTP_MAX_PLPMTU when the probe size
    grows to SCTP_MAX_PLPMTU in sctp_transport_pl_recv(). Also, not allow
    the probe size greater than SCTP_MAX_PLPMTU in the Complete state.
    
    Fixes: b87641aff9e7 ("sctp: do state transition when a probe succeeds on HB ACK recv path")
    Signed-off-by: Xin Long <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
selftests/memfd: Fix unknown type name build failure [+ + +]
Author: Hardik Garg <[email protected]>
Date:   Fri May 26 16:21:36 2023 -0700

    selftests/memfd: Fix unknown type name build failure
    
    Partially backport v6.3 commit 11f75a01448f ("selftests/memfd: add tests
    for MFD_NOEXEC_SEAL MFD_EXEC") to fix an unknown type name build error.
    In some systems, the __u64 typedef is not present due to differences in
    system headers, causing compilation errors like this one:
    
    fuse_test.c:64:8: error: unknown type name '__u64'
       64 | static __u64 mfd_assert_get_seals(int fd)
    
    This header includes the  __u64 typedef which increases the likelihood
    of successful compilation on a wider variety of systems.
    
    Signed-off-by: Hardik Garg <[email protected]>
    Reviewed-by: Tyler Hicks (Microsoft) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
selftests: fib_tests: mute cleanup error message [+ + +]
Author: Po-Hsu Lin <[email protected]>
Date:   Thu May 18 12:37:59 2023 +0800

    selftests: fib_tests: mute cleanup error message
    
    commit d226b1df361988f885c298737d6019c863a25f26 upstream.
    
    In the end of the test, there will be an error message induced by the
    `ip netns del ns1` command in cleanup()
    
      Tests passed: 201
      Tests failed:   0
      Cannot remove namespace file "/run/netns/ns1": No such file or directory
    
    This can even be reproduced with just `./fib_tests.sh -h` as we're
    calling cleanup() on exit.
    
    Redirect the error message to /dev/null to mute it.
    
    V2: Update commit message and fixes tag.
    V3: resubmit due to missing netdev ML in V2
    
    Fixes: b60417a9f2b8 ("selftest: fib_tests: Always cleanup before exit")
    Signed-off-by: Po-Hsu Lin <[email protected]>
    Reviewed-by: Ido Schimmel <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
skbuff: Proactively round up to kmalloc bucket size [+ + +]
Author: Kees Cook <[email protected]>
Date:   Tue Oct 25 15:39:35 2022 -0700

    skbuff: Proactively round up to kmalloc bucket size
    
    commit 12d6c1d3a2ad0c199ec57c201cdc71e8e157a232 upstream.
    
    Instead of discovering the kmalloc bucket size _after_ allocation, round
    up proactively so the allocation is explicitly made for the full size,
    allowing the compiler to correctly reason about the resulting size of
    the buffer through the existing __alloc_size() hint.
    
    This will allow for kernels built with CONFIG_UBSAN_BOUNDS or the
    coming dynamic bounds checking under CONFIG_FORTIFY_SOURCE to gain
    back the __alloc_size() hints that were temporarily reverted in commit
    93dd04ab0b2b ("slab: remove __alloc_size attribute from __kmalloc_track_caller")
    
    Cc: "David S. Miller" <[email protected]>
    Cc: Eric Dumazet <[email protected]>
    Cc: Jakub Kicinski <[email protected]>
    Cc: Paolo Abeni <[email protected]>
    Cc: [email protected]
    Cc: Greg Kroah-Hartman <[email protected]>
    Cc: Nick Desaulniers <[email protected]>
    Cc: David Rientjes <[email protected]>
    Acked-by: Vlastimil Babka <[email protected]>
    Link: https://patchwork.kernel.org/project/netdevbpf/patch/[email protected]/
    Signed-off-by: Kees Cook <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Cc: Daniel Díaz <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
SUNRPC: Don't change task->tk_status after the call to rpc_exit_task [+ + +]
Author: Trond Myklebust <[email protected]>
Date:   Wed May 10 12:28:00 2023 -0400

    SUNRPC: Don't change task->tk_status after the call to rpc_exit_task
    
    commit d180891fba995bd54e25b089b1ec98d134873586 upstream.
    
    Some calls to rpc_exit_task() may deliberately change the value of
    task->tk_status, for instance because it gets checked by the RPC call's
    rpc_release() callback. That makes it wrong to reset the value to
    task->tk_rpc_status.
    In particular this causes a bug where the rpc_call_done() callback tries
    to fail over a set of pNFS/flexfiles writes to a different IP address,
    but the reset of task->tk_status causes nfs_commit_release_pages() to
    immediately mark the file as having a fatal error.
    
    Fixes: 39494194f93b ("SUNRPC: Fix races with rpc_killall_tasks()")
    Cc: [email protected] # 6.1.x
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Anna Schumaker <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tpm, tpm_tis: Avoid cache incoherency in test for interrupts [+ + +]
Author: Lino Sanfilippo <[email protected]>
Date:   Thu Nov 24 14:55:25 2022 +0100

    tpm, tpm_tis: Avoid cache incoherency in test for interrupts
    
    [ Upstream commit 858e8b792d06f45c427897bd90205a1d90bf430f ]
    
    The interrupt handler that sets the boolean variable irq_tested may run on
    another CPU as the thread that checks irq_tested as part of the irq test in
    tpm_tis_send().
    
    Since nothing guarantees cache coherency between CPUs for unsynchronized
    accesses to boolean variables the testing thread might not perceive the
    value change done in the interrupt handler.
    
    Avoid this issue by setting the bit TPM_TIS_IRQ_TESTED in the flags field
    of the tpm_tis_data struct and by accessing this field with the bit
    manipulating functions that provide cache coherency.
    
    Also convert all other existing sites to use the proper macros when
    accessing this bitfield.
    
    Signed-off-by: Lino Sanfilippo <[email protected]>
    Tested-by: Michael Niewöhner <[email protected]>
    Tested-by: Jarkko Sakkinen <[email protected]>
    Reviewed-by: Jarkko Sakkinen <[email protected]>
    Signed-off-by: Jarkko Sakkinen <[email protected]>
    Stable-dep-of: 1398aa803f19 ("tpm_tis: Use tpm_chip_{start,stop} decoration inside tpm_tis_resume")
    Signed-off-by: Sasha Levin <[email protected]>

tpm, tpm_tis: Only handle supported interrupts [+ + +]
Author: Lino Sanfilippo <[email protected]>
Date:   Thu Nov 24 14:55:30 2022 +0100

    tpm, tpm_tis: Only handle supported interrupts
    
    [ Upstream commit e87fcf0dc2b47fac5b4824f00f74dfbcd4acd363 ]
    
    According to the TPM Interface Specification (TIS) support for "stsValid"
    and "commandReady" interrupts is only optional.
    This has to be taken into account when handling the interrupts in functions
    like wait_for_tpm_stat(). To determine the supported interrupts use the
    capability query.
    
    Also adjust wait_for_tpm_stat() to only wait for interrupt reported status
    changes. After that process all the remaining status changes by polling
    the status register.
    
    Signed-off-by: Lino Sanfilippo <[email protected]>
    Tested-by: Michael Niewöhner <[email protected]>
    Tested-by: Jarkko Sakkinen <[email protected]>
    Reviewed-by: Jarkko Sakkinen <[email protected]>
    Signed-off-by: Jarkko Sakkinen <[email protected]>
    Stable-dep-of: 1398aa803f19 ("tpm_tis: Use tpm_chip_{start,stop} decoration inside tpm_tis_resume")
    Signed-off-by: Sasha Levin <[email protected]>

tpm, tpm_tis: startup chip before testing for interrupts [+ + +]
Author: Lino Sanfilippo <[email protected]>
Date:   Thu Nov 24 14:55:37 2022 +0100

    tpm, tpm_tis: startup chip before testing for interrupts
    
    [ Upstream commit 548eb516ec0f7a484a23a902835899341164b8ea ]
    
    In tpm_tis_gen_interrupt() a request for a property value is sent to the
    TPM to test if interrupts are generated. However after a power cycle the
    TPM responds with TPM_RC_INITIALIZE which indicates that the TPM is not
    yet properly initialized.
    Fix this by first starting the TPM up before the request is sent. For this
    the startup implementation is removed from tpm_chip_register() and put
    into the new function tpm_chip_startup() which is called before the
    interrupts are tested.
    
    Signed-off-by: Lino Sanfilippo <[email protected]>
    Tested-by: Jarkko Sakkinen <[email protected]>
    Reviewed-by: Jarkko Sakkinen <[email protected]>
    Signed-off-by: Jarkko Sakkinen <[email protected]>
    Stable-dep-of: 99d464506255 ("tpm: Prevent hwrng from activating during resume")
    Signed-off-by: Sasha Levin <[email protected]>

 
tpm: Prevent hwrng from activating during resume [+ + +]
Author: Jarkko Sakkinen <[email protected]>
Date:   Wed Apr 26 20:29:28 2023 +0300

    tpm: Prevent hwrng from activating during resume
    
    [ Upstream commit 99d46450625590d410f86fe4660a5eff7d3b8343 ]
    
    Set TPM_CHIP_FLAG_SUSPENDED in tpm_pm_suspend() and reset in
    tpm_pm_resume(). While the flag is set, tpm_hwrng() gives back zero
    bytes. This prevents hwrng from racing during resume.
    
    Cc: [email protected]
    Fixes: 6e592a065d51 ("tpm: Move Linux RNG connection to hwrng")
    Reviewed-by: Jerry Snitselaar <[email protected]>
    Signed-off-by: Jarkko Sakkinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

tpm: Re-enable TPM chip boostrapping non-tpm_tis TPM drivers [+ + +]
Author: Jarkko Sakkinen <[email protected]>
Date:   Wed Apr 26 21:49:37 2023 +0300

    tpm: Re-enable TPM chip boostrapping non-tpm_tis TPM drivers
    
    [ Upstream commit 0c8862de05c1a087795ee0a87bf61a6394306cc0 ]
    
    TPM chip bootstrapping was removed from tpm_chip_register(), and it
    was relocated to tpm_tis_core. This breaks all drivers which are not
    based on tpm_tis because the chip will not get properly initialized.
    
    Take the corrective steps:
    1. Rename tpm_chip_startup() as tpm_chip_bootstrap() and make it one-shot.
    2. Call tpm_chip_bootstrap() in tpm_chip_register(), which reverts the
       things  as tehy used to be.
    
    Cc: Lino Sanfilippo <[email protected]>
    Fixes: 548eb516ec0f ("tpm, tpm_tis: startup chip before testing for interrupts")
    Reported-by: Pengfei Xu <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]/
    Tested-by: Pengfei Xu <[email protected]>
    Signed-off-by: Jarkko Sakkinen <[email protected]>
    Stable-dep-of: 99d464506255 ("tpm: Prevent hwrng from activating during resume")
    Signed-off-by: Sasha Levin <[email protected]>

 
tpm_tis: Use tpm_chip_{start,stop} decoration inside tpm_tis_resume [+ + +]
Author: Jarkko Sakkinen <[email protected]>
Date:   Wed Apr 26 20:29:27 2023 +0300

    tpm_tis: Use tpm_chip_{start,stop} decoration inside tpm_tis_resume
    
    [ Upstream commit 1398aa803f198b7a386fdd8404666043e95f4c16 ]
    
    Before sending a TPM command, CLKRUN protocol must be disabled. This is not
    done in the case of tpm1_do_selftest() call site inside tpm_tis_resume().
    
    Address this by decorating the calls with tpm_chip_{start,stop}, which
    should be always used to arm and disarm the TPM chip for transmission.
    
    Finally, move the call to the main TPM driver callback as the last step
    because it should arm the chip by itself, if it needs that type of
    functionality.
    
    Cc: [email protected]
    Reported-by: Jason A. Donenfeld <[email protected]>
    Closes: https://lore.kernel.org/linux-integrity/CS68AWILHXS4.3M36M1EKZLUMS@suppilovahvero/
    Fixes: a3fbfae82b4c ("tpm: take TPM chip power gating out of tpm_transmit()")
    Reviewed-by: Jerry Snitselaar <[email protected]>
    Signed-off-by: Jarkko Sakkinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
udplite: Fix NULL pointer dereference in __sk_mem_raise_allocated(). [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Tue May 23 09:33:05 2023 -0700

    udplite: Fix NULL pointer dereference in __sk_mem_raise_allocated().
    
    commit ad42a35bdfc6d3c0fc4cb4027d7b2757ce665665 upstream.
    
    syzbot reported [0] a null-ptr-deref in sk_get_rmem0() while using
    IPPROTO_UDPLITE (0x88):
    
      14:25:52 executing program 1:
      r0 = socket$inet6(0xa, 0x80002, 0x88)
    
    We had a similar report [1] for probably sk_memory_allocated_add()
    in __sk_mem_raise_allocated(), and commit c915fe13cbaa ("udplite: fix
    NULL pointer dereference") fixed it by setting .memory_allocated for
    udplite_prot and udplitev6_prot.
    
    To fix the variant, we need to set either .sysctl_wmem_offset or
    .sysctl_rmem.
    
    Now UDP and UDPLITE share the same value for .memory_allocated, so we
    use the same .sysctl_wmem_offset for UDP and UDPLITE.
    
    [0]:
    general protection fault, probably for non-canonical address 0xdffffc0000000000: 0000 [#1] PREEMPT SMP KASAN
    KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
    CPU: 0 PID: 6829 Comm: syz-executor.1 Not tainted 6.4.0-rc2-syzkaller #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 04/28/2023
    RIP: 0010:sk_get_rmem0 include/net/sock.h:2907 [inline]
    RIP: 0010:__sk_mem_raise_allocated+0x806/0x17a0 net/core/sock.c:3006
    Code: c1 ea 03 80 3c 02 00 0f 85 23 0f 00 00 48 8b 44 24 08 48 8b 98 38 01 00 00 48 b8 00 00 00 00 00 fc ff df 48 89 da 48 c1 ea 03 <0f> b6 14 02 48 89 d8 83 e0 07 83 c0 03 38 d0 0f 8d 6f 0a 00 00 8b
    RSP: 0018:ffffc90005d7f450 EFLAGS: 00010246
    RAX: dffffc0000000000 RBX: 0000000000000000 RCX: ffffc90004d92000
    RDX: 0000000000000000 RSI: ffffffff88066482 RDI: ffffffff8e2ccbb8
    RBP: ffff8880173f7000 R08: 0000000000000005 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000030000
    R13: 0000000000000001 R14: 0000000000000340 R15: 0000000000000001
    FS:  0000000000000000(0000) GS:ffff8880b9800000(0063) knlGS:00000000f7f1cb40
    CS:  0010 DS: 002b ES: 002b CR0: 0000000080050033
    CR2: 000000002e82f000 CR3: 0000000034ff0000 CR4: 00000000003506f0
    Call Trace:
     <TASK>
     __sk_mem_schedule+0x6c/0xe0 net/core/sock.c:3077
     udp_rmem_schedule net/ipv4/udp.c:1539 [inline]
     __udp_enqueue_schedule_skb+0x776/0xb30 net/ipv4/udp.c:1581
     __udpv6_queue_rcv_skb net/ipv6/udp.c:666 [inline]
     udpv6_queue_rcv_one_skb+0xc39/0x16c0 net/ipv6/udp.c:775
     udpv6_queue_rcv_skb+0x194/0xa10 net/ipv6/udp.c:793
     __udp6_lib_mcast_deliver net/ipv6/udp.c:906 [inline]
     __udp6_lib_rcv+0x1bda/0x2bd0 net/ipv6/udp.c:1013
     ip6_protocol_deliver_rcu+0x2e7/0x1250 net/ipv6/ip6_input.c:437
     ip6_input_finish+0x150/0x2f0 net/ipv6/ip6_input.c:482
     NF_HOOK include/linux/netfilter.h:303 [inline]
     NF_HOOK include/linux/netfilter.h:297 [inline]
     ip6_input+0xa0/0xd0 net/ipv6/ip6_input.c:491
     ip6_mc_input+0x40b/0xf50 net/ipv6/ip6_input.c:585
     dst_input include/net/dst.h:468 [inline]
     ip6_rcv_finish net/ipv6/ip6_input.c:79 [inline]
     NF_HOOK include/linux/netfilter.h:303 [inline]
     NF_HOOK include/linux/netfilter.h:297 [inline]
     ipv6_rcv+0x250/0x380 net/ipv6/ip6_input.c:309
     __netif_receive_skb_one_core+0x114/0x180 net/core/dev.c:5491
     __netif_receive_skb+0x1f/0x1c0 net/core/dev.c:5605
     netif_receive_skb_internal net/core/dev.c:5691 [inline]
     netif_receive_skb+0x133/0x7a0 net/core/dev.c:5750
     tun_rx_batched+0x4b3/0x7a0 drivers/net/tun.c:1553
     tun_get_user+0x2452/0x39c0 drivers/net/tun.c:1989
     tun_chr_write_iter+0xdf/0x200 drivers/net/tun.c:2035
     call_write_iter include/linux/fs.h:1868 [inline]
     new_sync_write fs/read_write.c:491 [inline]
     vfs_write+0x945/0xd50 fs/read_write.c:584
     ksys_write+0x12b/0x250 fs/read_write.c:637
     do_syscall_32_irqs_on arch/x86/entry/common.c:112 [inline]
     __do_fast_syscall_32+0x65/0xf0 arch/x86/entry/common.c:178
     do_fast_syscall_32+0x33/0x70 arch/x86/entry/common.c:203
     entry_SYSENTER_compat_after_hwframe+0x70/0x82
    RIP: 0023:0xf7f21579
    Code: b8 01 10 06 03 74 b4 01 10 07 03 74 b0 01 10 08 03 74 d8 01 00 00 00 00 00 00 00 00 00 00 00 00 00 51 52 55 89 e5 0f 34 cd 80 <5d> 5a 59 c3 90 90 90 90 8d b4 26 00 00 00 00 8d b4 26 00 00 00 00
    RSP: 002b:00000000f7f1c590 EFLAGS: 00000282 ORIG_RAX: 0000000000000004
    RAX: ffffffffffffffda RBX: 00000000000000c8 RCX: 0000000020000040
    RDX: 0000000000000083 RSI: 00000000f734e000 RDI: 0000000000000000
    RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000296 R12: 0000000000000000
    R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
     </TASK>
    Modules linked in:
    
    Link: https://lore.kernel.org/netdev/CANaxB-yCk8hhP68L4Q2nFOJht8sqgXGGQO2AftpHs0u1xyGG5A@mail.gmail.com/ [1]
    Fixes: 850cbaddb52d ("udp: use it's own memory accounting schema")
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=444ca0907e96f7c5e48b
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
USB: core: Add routines for endpoint checks in old drivers [+ + +]
Author: Alan Stern <[email protected]>
Date:   Mon Apr 10 15:37:07 2023 -0400

    USB: core: Add routines for endpoint checks in old drivers
    
    commit 13890626501ffda22b18213ddaf7930473da5792 upstream.
    
    Many of the older USB drivers in the Linux USB stack were written
    based simply on a vendor's device specification.  They use the
    endpoint information in the spec and assume these endpoints will
    always be present, with the properties listed, in any device matching
    the given vendor and product IDs.
    
    While that may have been true back then, with spoofing and fuzzing it
    is not true any more.  More and more we are finding that those old
    drivers need to perform at least a minimum of checking before they try
    to use any endpoint other than ep0.
    
    To make this checking as simple as possible, we now add a couple of
    utility routines to the USB core.  usb_check_bulk_endpoints() and
    usb_check_int_endpoints() take an interface pointer together with a
    list of endpoint addresses (numbers and directions).  They check that
    the interface's current alternate setting includes endpoints with
    those addresses and that each of these endpoints has the right type:
    bulk or interrupt, respectively.
    
    Although we already have usb_find_common_endpoints() and related
    routines meant for a similar purpose, they are not well suited for
    this kind of checking.  Those routines find endpoints of various
    kinds, but only one (either the first or the last) of each kind, and
    they don't verify that the endpoints' addresses agree with what the
    caller expects.
    
    In theory the new routines could be more general: They could take a
    particular altsetting as their argument instead of always using the
    interface's current altsetting.  In practice I think this won't matter
    too much; multiple altsettings tend to be used for transferring media
    (audio or visual) over isochronous endpoints, not bulk or interrupt.
    Drivers for such devices will generally require more sophisticated
    checking than these simplistic routines provide.
    
    Signed-off-by: Alan Stern <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usb: dwc3: fix gadget mode suspend interrupt handler issue [+ + +]
Author: Linyu Yuan <[email protected]>
Date:   Fri May 12 08:45:24 2023 +0800

    usb: dwc3: fix gadget mode suspend interrupt handler issue
    
    [ Upstream commit 4e8ef34e36f2839ef8c8da521ab7035956436818 ]
    
    When work in gadget mode, currently driver doesn't update software level
    link_state correctly as link state change event is not enabled for most
    devices, in function dwc3_gadget_suspend_interrupt(), it will only pass
    suspend event to UDC core when software level link state changes, so when
    interrupt generated in sequences of suspend -> reset -> conndone ->
    suspend, link state is not updated during reset and conndone, so second
    suspend interrupt event will not pass to UDC core.
    
    Remove link_state compare in dwc3_gadget_suspend_interrupt() and add a
    suspended flag to replace the compare function.
    
    Fixes: 799e9dc82968 ("usb: dwc3: gadget: conditionally disable Link State change events")
    Cc: stable <[email protected]>
    Acked-by: Thinh Nguyen <[email protected]>
    Signed-off-by: Linyu Yuan <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
 
USB: sisusbvga: Add endpoint checks [+ + +]
Author: Alan Stern <[email protected]>
Date:   Mon Apr 10 15:38:22 2023 -0400

    USB: sisusbvga: Add endpoint checks
    
    commit df05a9b05e466a46725564528b277d0c570d0104 upstream.
    
    The syzbot fuzzer was able to provoke a WARNING from the sisusbvga driver:
    
    ------------[ cut here ]------------
    usb 1-1: BOGUS urb xfer, pipe 3 != type 1
    WARNING: CPU: 1 PID: 26 at drivers/usb/core/urb.c:504 usb_submit_urb+0xed6/0x1880 drivers/usb/core/urb.c:504
    Modules linked in:
    CPU: 1 PID: 26 Comm: kworker/1:1 Not tainted 6.2.0-rc5-syzkaller-00199-g5af6ce704936 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/12/2023
    Workqueue: usb_hub_wq hub_event
    RIP: 0010:usb_submit_urb+0xed6/0x1880 drivers/usb/core/urb.c:504
    Code: 7c 24 18 e8 6c 50 80 fb 48 8b 7c 24 18 e8 62 1a 01 ff 41 89 d8 44 89 e1 4c 89 ea 48 89 c6 48 c7 c7 60 b1 fa 8a e8 84 b0 be 03 <0f> 0b e9 58 f8 ff ff e8 3e 50 80 fb 48 81 c5 c0 05 00 00 e9 84 f7
    RSP: 0018:ffffc90000a1ed18 EFLAGS: 00010282
    RAX: 0000000000000000 RBX: 0000000000000001 RCX: 0000000000000000
    RDX: ffff888012783a80 RSI: ffffffff816680ec RDI: fffff52000143d95
    RBP: ffff888079020000 R08: 0000000000000005 R09: 0000000000000000
    R10: 0000000080000000 R11: 0000000000000000 R12: 0000000000000003
    R13: ffff888017d33370 R14: 0000000000000003 R15: ffff888021213600
    FS:  0000000000000000(0000) GS:ffff8880b9900000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00005592753a60b0 CR3: 0000000022899000 CR4: 00000000003506e0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     sisusb_bulkout_msg drivers/usb/misc/sisusbvga/sisusbvga.c:224 [inline]
     sisusb_send_bulk_msg.constprop.0+0x904/0x1230 drivers/usb/misc/sisusbvga/sisusbvga.c:379
     sisusb_send_bridge_packet drivers/usb/misc/sisusbvga/sisusbvga.c:567 [inline]
     sisusb_do_init_gfxdevice drivers/usb/misc/sisusbvga/sisusbvga.c:2077 [inline]
     sisusb_init_gfxdevice+0x87b/0x4000 drivers/usb/misc/sisusbvga/sisusbvga.c:2177
     sisusb_probe+0x9cd/0xbe2 drivers/usb/misc/sisusbvga/sisusbvga.c:2869
    ...
    
    The problem was caused by the fact that the driver does not check
    whether the endpoints it uses are actually present and have the
    appropriate types.  This can be fixed by adding a simple check of
    the endpoints.
    
    Link: https://syzkaller.appspot.com/bug?extid=23be03b56c5259385d79
    Reported-and-tested-by: [email protected]
    Signed-off-by: Alan Stern <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
watchdog: sp5100_tco: Immediately trigger upon starting. [+ + +]
Author: Gregory Oakes <[email protected]>
Date:   Thu Mar 16 15:13:12 2023 -0500

    watchdog: sp5100_tco: Immediately trigger upon starting.
    
    commit 4eda19cc8a29cde3580ed73bf11dc73b4e757697 upstream.
    
    The watchdog countdown is supposed to begin when the device file is
    opened. Instead, it would begin countdown upon the first write to or
    close of the device file. Now, the ping operation is called within the
    start operation which ensures the countdown begins. From experimenation,
    it does not appear possible to do this with a single write including
    both the start bit and the trigger bit. So, it is done as two distinct
    writes.
    
    Signed-off-by: Gregory Oakes <[email protected]>
    Reviewed-by: Guenter Roeck <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Wim Van Sebroeck <[email protected]>
    Cc: Mario Limonciello <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86/mm: Avoid incomplete Global INVLPG flushes [+ + +]
Author: Dave Hansen <[email protected]>
Date:   Tue May 16 12:24:25 2023 -0700

    x86/mm: Avoid incomplete Global INVLPG flushes
    
    commit ce0b15d11ad837fbacc5356941712218e38a0a83 upstream.
    
    The INVLPG instruction is used to invalidate TLB entries for a
    specified virtual address.  When PCIDs are enabled, INVLPG is supposed
    to invalidate TLB entries for the specified address for both the
    current PCID *and* Global entries.  (Note: Only kernel mappings set
    Global=1.)
    
    Unfortunately, some INVLPG implementations can leave Global
    translations unflushed when PCIDs are enabled.
    
    As a workaround, never enable PCIDs on affected processors.
    
    I expect there to eventually be microcode mitigations to replace this
    software workaround.  However, the exact version numbers where that
    will happen are not known today.  Once the version numbers are set in
    stone, the processor list can be tweaked to only disable PCIDs on
    affected processors with affected microcode.
    
    Note: if anyone wants a quick fix that doesn't require patching, just
    stick 'nopcid' on your kernel command-line.
    
    Signed-off-by: Dave Hansen <[email protected]>
    Reviewed-by: Thomas Gleixner <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86/pci/xen: populate MSI sysfs entries [+ + +]
Author: Maximilian Heyne <[email protected]>
Date:   Wed May 3 13:16:53 2023 +0000

    x86/pci/xen: populate MSI sysfs entries
    
    commit 335b4223466dd75f9f3ea4918187afbadd22e5c8 upstream.
    
    Commit bf5e758f02fc ("genirq/msi: Simplify sysfs handling") reworked the
    creation of sysfs entries for MSI IRQs. The creation used to be in
    msi_domain_alloc_irqs_descs_locked after calling ops->domain_alloc_irqs.
    Then it moved into __msi_domain_alloc_irqs which is an implementation of
    domain_alloc_irqs. However, Xen comes with the only other implementation
    of domain_alloc_irqs and hence doesn't run the sysfs population code
    anymore.
    
    Commit 6c796996ee70 ("x86/pci/xen: Fixup fallout from the PCI/MSI
    overhaul") set the flag MSI_FLAG_DEV_SYSFS for the xen msi_domain_info
    but that doesn't actually have an effect because Xen uses it's own
    domain_alloc_irqs implementation.
    
    Fix this by making use of the fallback functions for sysfs population.
    
    Fixes: bf5e758f02fc ("genirq/msi: Simplify sysfs handling")
    Signed-off-by: Maximilian Heyne <[email protected]>
    Reviewed-by: Juergen Gross <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Juergen Gross <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86/show_trace_log_lvl: Ensure stack pointer is aligned, again [+ + +]
Author: Vernon Lovejoy <[email protected]>
Date:   Fri May 12 12:42:32 2023 +0200

    x86/show_trace_log_lvl: Ensure stack pointer is aligned, again
    
    commit 2e4be0d011f21593c6b316806779ba1eba2cd7e0 upstream.
    
    The commit e335bb51cc15 ("x86/unwind: Ensure stack pointer is aligned")
    tried to align the stack pointer in show_trace_log_lvl(), otherwise the
    "stack < stack_info.end" check can't guarantee that the last read does
    not go past the end of the stack.
    
    However, we have the same problem with the initial value of the stack
    pointer, it can also be unaligned. So without this patch this trivial
    kernel module
    
            #include <linux/module.h>
    
            static int init(void)
            {
                    asm volatile("sub    $0x4,%rsp");
                    dump_stack();
                    asm volatile("add    $0x4,%rsp");
    
                    return -EAGAIN;
            }
    
            module_init(init);
            MODULE_LICENSE("GPL");
    
    crashes the kernel.
    
    Fixes: e335bb51cc15 ("x86/unwind: Ensure stack pointer is aligned")
    Signed-off-by: Vernon Lovejoy <[email protected]>
    Signed-off-by: Oleg Nesterov <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Josh Poimboeuf <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86/topology: Fix erroneous smp_num_siblings on Intel Hybrid platforms [+ + +]
Author: Zhang Rui <[email protected]>
Date:   Thu Mar 23 09:56:40 2023 +0800

    x86/topology: Fix erroneous smp_num_siblings on Intel Hybrid platforms
    
    commit edc0a2b5957652f4685ef3516f519f84807087db upstream.
    
    Traditionally, all CPUs in a system have identical numbers of SMT
    siblings.  That changes with hybrid processors where some logical CPUs
    have a sibling and others have none.
    
    Today, the CPU boot code sets the global variable smp_num_siblings when
    every CPU thread is brought up. The last thread to boot will overwrite
    it with the number of siblings of *that* thread. That last thread to
    boot will "win". If the thread is a Pcore, smp_num_siblings == 2.  If it
    is an Ecore, smp_num_siblings == 1.
    
    smp_num_siblings describes if the *system* supports SMT.  It should
    specify the maximum number of SMT threads among all cores.
    
    Ensure that smp_num_siblings represents the system-wide maximum number
    of siblings by always increasing its value. Never allow it to decrease.
    
    On MeteorLake-P platform, this fixes a problem that the Ecore CPUs are
    not updated in any cpu sibling map because the system is treated as an
    UP system when probing Ecore CPUs.
    
    Below shows part of the CPU topology information before and after the
    fix, for both Pcore and Ecore CPU (cpu0 is Pcore, cpu 12 is Ecore).
    ...
    -/sys/devices/system/cpu/cpu0/topology/package_cpus:000fff
    -/sys/devices/system/cpu/cpu0/topology/package_cpus_list:0-11
    +/sys/devices/system/cpu/cpu0/topology/package_cpus:3fffff
    +/sys/devices/system/cpu/cpu0/topology/package_cpus_list:0-21
    ...
    -/sys/devices/system/cpu/cpu12/topology/package_cpus:001000
    -/sys/devices/system/cpu/cpu12/topology/package_cpus_list:12
    +/sys/devices/system/cpu/cpu12/topology/package_cpus:3fffff
    +/sys/devices/system/cpu/cpu12/topology/package_cpus_list:0-21
    
    Notice that the "before" 'package_cpus_list' has only one CPU.  This
    means that userspace tools like lscpu will see a little laptop like
    an 11-socket system:
    
    -Core(s) per socket:  1
    -Socket(s):           11
    +Core(s) per socket:  16
    +Socket(s):           1
    
    This is also expected to make the scheduler do rather wonky things
    too.
    
    [ dhansen: remove CPUID detail from changelog, add end user effects ]
    
    CC: [email protected]
    Fixes: bbb65d2d365e ("x86: use cpuid vector 0xb when available for detecting cpu topology")
    Fixes: 95f3d39ccf7a ("x86/cpu/topology: Provide detect_extended_topology_early()")
    Suggested-by: Len Brown <[email protected]>
    Signed-off-by: Zhang Rui <[email protected]>
    Signed-off-by: Dave Hansen <[email protected]>
    Acked-by: Peter Zijlstra (Intel) <[email protected]>
    Link: https://lore.kernel.org/all/20230323015640.27906-1-rui.zhang%40intel.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
xen/pvcalls-back: fix double frees with pvcalls_new_active_socket() [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Wed May 3 18:11:35 2023 +0300

    xen/pvcalls-back: fix double frees with pvcalls_new_active_socket()
    
    commit 8fafac202d18230bb9926bda48e563fd2cce2a4f upstream.
    
    In the pvcalls_new_active_socket() function, most error paths call
    pvcalls_back_release_active(fedata->dev, fedata, map) which calls
    sock_release() on "sock".  The bug is that the caller also frees sock.
    
    Fix this by making every error path in pvcalls_new_active_socket()
    release the sock, and don't free it in the caller.
    
    Fixes: 5db4d286a8ef ("xen/pvcalls: implement connect command")
    Signed-off-by: Dan Carpenter <[email protected]>
    Reviewed-by: Juergen Gross <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Juergen Gross <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
xtensa: add __bswap{si,di}2 helpers [+ + +]
Author: Max Filippov <[email protected]>
Date:   Sat May 6 17:10:36 2023 -0700

    xtensa: add __bswap{si,di}2 helpers
    
    commit 034f4a7877c32a8efd6beee4d71ed14e424499a9 upstream.
    
    gcc-13 may generate calls for __bswap{si,di}2. This breaks the kernel
    build when optimization for size is selected. Add __bswap{si,di}2
    helpers to fix that.
    
    Cc: [email protected]
    Fixes: 19c5699f9aff ("xtensa: don't link with libgcc")
    Signed-off-by: Max Filippov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

xtensa: fix signal delivery to FDPIC process [+ + +]
Author: Max Filippov <[email protected]>
Date:   Tue May 2 03:20:47 2023 -0700

    xtensa: fix signal delivery to FDPIC process
    
    commit 9c2cc74fb31ec76b8b118c97041a6a154a3ff219 upstream.
    
    Fetch function descriptor pointed to by the signal handler pointer from
    userspace on signal delivery and function pointer pointed to by the
    sa_restorer on return from the signal handler.
    
    Cc: [email protected]
    Fixes: e3ddb8bbe0f8 ("xtensa: add FDPIC and static PIE support for noMMU")
    Signed-off-by: Max Filippov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>