Changelog in Linux kernel 5.15.184

 
ACPI: PPTT: Fix processor subtable walk [+ + +]
Author: Jeremy Linton <[email protected]>
Date:   Wed May 7 21:30:25 2025 -0500

    ACPI: PPTT: Fix processor subtable walk
    
    commit adfab6b39202481bb43286fff94def4953793fdb upstream.
    
    The original PPTT code had a bug where the processor subtable length
    was not correctly validated when encountering a truncated
    acpi_pptt_processor node.
    
    Commit 7ab4f0e37a0f4 ("ACPI PPTT: Fix coding mistakes in a couple of
    sizeof() calls") attempted to fix this by validating the size is as
    large as the acpi_pptt_processor node structure. This introduced a
    regression where the last processor node in the PPTT table is ignored
    if it doesn't contain any private resources. That results errors like:
    
      ACPI PPTT: PPTT table found, but unable to locate core XX (XX)
      ACPI: SPE must be homogeneous
    
    Furthermore, it fails in a common case where the node length isn't
    equal to the acpi_pptt_processor structure size, leaving the original
    bug in a modified form.
    
    Correct the regression by adjusting the loop termination conditions as
    suggested by the bug reporters. An additional check performed after
    the subtable node type is detected, validates the acpi_pptt_processor
    node is fully contained in the PPTT table. Repeating the check in
    acpi_pptt_leaf_node() is largely redundant as the node is already
    known to be fully contained in the table.
    
    The case where a final truncated node's parent property is accepted,
    but the node itself is rejected should not be considered a bug.
    
    Fixes: 7ab4f0e37a0f4 ("ACPI PPTT: Fix coding mistakes in a couple of sizeof() calls")
    Reported-by: Maximilian Heyne <[email protected]>
    Closes: https://lore.kernel.org/linux-acpi/20250506-draco-taped-15f475cd@mheyne-amazon/
    Reported-by: Yicong Yang <[email protected]>
    Closes: https://lore.kernel.org/linux-acpi/[email protected]/
    Signed-off-by: Jeremy Linton <[email protected]>
    Tested-by: Yicong Yang <[email protected]>
    Reviewed-by: Sudeep Holla <[email protected]>
    Tested-by: Maximilian Heyne <[email protected]>
    Cc: All applicable <[email protected]> # 7ab4f0e37a0f4: ACPI PPTT: Fix coding mistakes ...
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ALSA: es1968: Add error handling for snd_pcm_hw_constraint_pow2() [+ + +]
Author: Wentao Liang <[email protected]>
Date:   Wed May 14 17:24:44 2025 +0800

    ALSA: es1968: Add error handling for snd_pcm_hw_constraint_pow2()
    
    commit 9e000f1b7f31684cc5927e034360b87ac7919593 upstream.
    
    The function snd_es1968_capture_open() calls the function
    snd_pcm_hw_constraint_pow2(), but does not check its return
    value. A proper implementation can be found in snd_cx25821_pcm_open().
    
    Add error handling for snd_pcm_hw_constraint_pow2() and propagate its
    error code.
    
    Fixes: b942cf815b57 ("[ALSA] es1968 - Fix stuttering capture")
    Cc: [email protected] # v2.6.22
    Signed-off-by: Wentao Liang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: sh: SND_AICA should depend on SH_DMA_API [+ + +]
Author: Geert Uytterhoeven <[email protected]>
Date:   Tue May 13 09:31:04 2025 +0200

    ALSA: sh: SND_AICA should depend on SH_DMA_API
    
    [ Upstream commit 66e48ef6ef506c89ec1b3851c6f9f5f80b5835ff ]
    
    If CONFIG_SH_DMA_API=n:
    
        WARNING: unmet direct dependencies detected for G2_DMA
          Depends on [n]: SH_DREAMCAST [=y] && SH_DMA_API [=n]
          Selected by [y]:
          - SND_AICA [=y] && SOUND [=y] && SND [=y] && SND_SUPERH [=y] && SH_DREAMCAST [=y]
    
    SND_AICA selects G2_DMA.  As the latter depends on SH_DMA_API, the
    former should depend on SH_DMA_API, too.
    
    Fixes: f477a538c14d07f8 ("sh: dma: fix kconfig dependency for G2_DMA")
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Signed-off-by: Geert Uytterhoeven <[email protected]>
    Link: https://patch.msgid.link/b90625f8a9078d0d304bafe862cbe3a3fab40082.1747121335.git.geert+renesas@glider.be
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: usb-audio: Add sample rate quirk for Audioengine D1 [+ + +]
Author: Christian Heusel <[email protected]>
Date:   Mon May 12 22:23:37 2025 +0200

    ALSA: usb-audio: Add sample rate quirk for Audioengine D1
    
    commit 2b24eb060c2bb9ef79e1d3bcf633ba1bc95215d6 upstream.
    
    A user reported on the Arch Linux Forums that their device is emitting
    the following message in the kernel journal, which is fixed by adding
    the quirk as submitted in this patch:
    
        > kernel: usb 1-2: current rate 8436480 is different from the runtime rate 48000
    
    There also is an entry for this product line added long time ago.
    Their specific device has the following ID:
    
        $ lsusb | grep Audio
        Bus 001 Device 002: ID 1101:0003 EasyPass Industrial Co., Ltd Audioengine D1
    
    Link: https://bbs.archlinux.org/viewtopic.php?id=305494
    Fixes: 93f9d1a4ac593 ("ALSA: usb-audio: Apply sample rate quirk for Audioengine D1")
    Cc: [email protected]
    Signed-off-by: Christian Heusel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: usb-audio: Add sample rate quirk for Microdia JP001 USB Camera [+ + +]
Author: Nicolas Chauvet <[email protected]>
Date:   Thu May 15 12:21:32 2025 +0200

    ALSA: usb-audio: Add sample rate quirk for Microdia JP001 USB Camera
    
    commit 7b9938a14460e8ec7649ca2e80ac0aae9815bf02 upstream.
    
    Microdia JP001 does not support reading the sample rate which leads to
    many lines of "cannot get freq at ep 0x84".
    This patch adds the USB ID to quirks.c and avoids those error messages.
    
    usb 7-4: New USB device found, idVendor=0c45, idProduct=636b, bcdDevice= 1.00
    usb 7-4: New USB device strings: Mfr=2, Product=1, SerialNumber=3
    usb 7-4: Product: JP001
    usb 7-4: Manufacturer: JP001
    usb 7-4: SerialNumber: JP001
    usb 7-4: 3:1: cannot get freq at ep 0x84
    
    Cc: <[email protected]>
    Signed-off-by: Nicolas Chauvet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
block: fix direct io NOWAIT flag not work [+ + +]
Author: Fengnan Chang <[email protected]>
Date:   Tue May 13 19:28:04 2025 +0800

    block: fix direct io NOWAIT flag not work
    
    commit 8b44b4d81598 ("block: don't allow multiple bios for IOCB_NOWAIT
    issue") backport a upstream fix, but miss commit b77c88c2100c ("block:
    pass a block_device and opf to bio_alloc_kiocb"), and introduce this bug.
    commit b77c88c2100c ("block: pass a block_device and opf to
    bio_alloc_kiocb") have other depend patch, so just fix it.
    
    Fixes: 8b44b4d81598 ("block: don't allow multiple bios for IOCB_NOWAIT issue")
    Signed-off-by: Fengnan Chang <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
btrfs: do not clean up repair bio if submit fails [+ + +]
Author: Josef Bacik <[email protected]>
Date:   Fri Feb 18 10:03:29 2022 -0500

    btrfs: do not clean up repair bio if submit fails
    
    commit 8cbc3001a3264d998d6b6db3e23f935c158abd4d upstream.
    
    The submit helper will always run bio_endio() on the bio if it fails to
    submit, so cleaning up the bio just leads to a variety of use-after-free
    and NULL pointer dereference bugs because we race with the endio
    function that is cleaning up the bio.  Instead just return BLK_STS_OK as
    the repair function has to continue to process the rest of the pages,
    and the endio for the repair bio will do the appropriate cleanup for the
    page that it was given.
    
    Reviewed-by: Boris Burkov <[email protected]>
    Signed-off-by: Josef Bacik <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    [Minor context change fixed.]
    Signed-off-by: Bin Lan <[email protected]>
    Signed-off-by: He Zhe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: don't BUG_ON() when 0 reference count at btrfs_lookup_extent_info() [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Tue Jun 18 12:15:01 2024 +0100

    btrfs: don't BUG_ON() when 0 reference count at btrfs_lookup_extent_info()
    
    commit 28cb13f29faf6290597b24b728dc3100c019356f upstream.
    
    Instead of doing a BUG_ON() handle the error by returning -EUCLEAN,
    aborting the transaction and logging an error message.
    
    Reviewed-by: Qu Wenruo <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    [Minor conflict resolved due to code context change.]
    Signed-off-by: Jianqi Ren <[email protected]>
    Signed-off-by: He Zhe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: fix discard worker infinite loop after disabling discard [+ + +]
Author: Filipe Manana <[email protected]>
Date:   Mon May 5 16:03:16 2025 +0100

    btrfs: fix discard worker infinite loop after disabling discard
    
    commit 54db6d1bdd71fa90172a2a6aca3308bbf7fa7eb5 upstream.
    
    If the discard worker is running and there's currently only one block
    group, that block group is a data block group, it's in the unused block
    groups discard list and is being used (it got an extent allocated from it
    after becoming unused), the worker can end up in an infinite loop if a
    transaction abort happens or the async discard is disabled (during remount
    or unmount for example).
    
    This happens like this:
    
    1) Task A, the discard worker, is at peek_discard_list() and
       find_next_block_group() returns block group X;
    
    2) Block group X is in the unused block groups discard list (its discard
       index is BTRFS_DISCARD_INDEX_UNUSED) since at some point in the past
       it become an unused block group and was added to that list, but then
       later it got an extent allocated from it, so its ->used counter is not
       zero anymore;
    
    3) The current transaction is aborted by task B and we end up at
       __btrfs_handle_fs_error() in the transaction abort path, where we call
       btrfs_discard_stop(), which clears BTRFS_FS_DISCARD_RUNNING from
       fs_info, and then at __btrfs_handle_fs_error() we set the fs to RO mode
       (setting SB_RDONLY in the super block's s_flags field);
    
    4) Task A calls __add_to_discard_list() with the goal of moving the block
       group from the unused block groups discard list into another discard
       list, but at __add_to_discard_list() we end up doing nothing because
       btrfs_run_discard_work() returns false, since the super block has
       SB_RDONLY set in its flags and BTRFS_FS_DISCARD_RUNNING is not set
       anymore in fs_info->flags. So block group X remains in the unused block
       groups discard list;
    
    5) Task A then does a goto into the 'again' label, calls
       find_next_block_group() again we gets block group X again. Then it
       repeats the previous steps over and over since there are not other
       block groups in the discard lists and block group X is never moved
       out of the unused block groups discard list since
       btrfs_run_discard_work() keeps returning false and therefore
       __add_to_discard_list() doesn't move block group X out of that discard
       list.
    
    When this happens we can get a soft lockup report like this:
    
      [71.957] watchdog: BUG: soft lockup - CPU#0 stuck for 27s! [kworker/u4:3:97]
      [71.957] Modules linked in: xfs af_packet rfkill (...)
      [71.957] CPU: 0 UID: 0 PID: 97 Comm: kworker/u4:3 Tainted: G        W          6.14.2-1-default #1 openSUSE Tumbleweed 968795ef2b1407352128b466fe887416c33af6fa
      [71.957] Tainted: [W]=WARN
      [71.957] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.2-3-gd478f380-rebuilt.opensuse.org 04/01/2014
      [71.957] Workqueue: btrfs_discard btrfs_discard_workfn [btrfs]
      [71.957] RIP: 0010:btrfs_discard_workfn+0xc4/0x400 [btrfs]
      [71.957] Code: c1 01 48 83 (...)
      [71.957] RSP: 0018:ffffafaec03efe08 EFLAGS: 00000246
      [71.957] RAX: ffff897045500000 RBX: ffff8970413ed8d0 RCX: 0000000000000000
      [71.957] RDX: 0000000000000001 RSI: ffff8970413ed8d0 RDI: 0000000a8f1272ad
      [71.957] RBP: 0000000a9d61c60e R08: ffff897045500140 R09: 8080808080808080
      [71.957] R10: ffff897040276800 R11: fefefefefefefeff R12: ffff8970413ed860
      [71.957] R13: ffff897045500000 R14: ffff8970413ed868 R15: 0000000000000000
      [71.957] FS:  0000000000000000(0000) GS:ffff89707bc00000(0000) knlGS:0000000000000000
      [71.957] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [71.957] CR2: 00005605bcc8d2f0 CR3: 000000010376a001 CR4: 0000000000770ef0
      [71.957] PKRU: 55555554
      [71.957] Call Trace:
      [71.957]  <TASK>
      [71.957]  process_one_work+0x17e/0x330
      [71.957]  worker_thread+0x2ce/0x3f0
      [71.957]  ? __pfx_worker_thread+0x10/0x10
      [71.957]  kthread+0xef/0x220
      [71.957]  ? __pfx_kthread+0x10/0x10
      [71.957]  ret_from_fork+0x34/0x50
      [71.957]  ? __pfx_kthread+0x10/0x10
      [71.957]  ret_from_fork_asm+0x1a/0x30
      [71.957]  </TASK>
      [71.957] Kernel panic - not syncing: softlockup: hung tasks
      [71.987] CPU: 0 UID: 0 PID: 97 Comm: kworker/u4:3 Tainted: G        W    L     6.14.2-1-default #1 openSUSE Tumbleweed 968795ef2b1407352128b466fe887416c33af6fa
      [71.989] Tainted: [W]=WARN, [L]=SOFTLOCKUP
      [71.989] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.2-3-gd478f380-rebuilt.opensuse.org 04/01/2014
      [71.991] Workqueue: btrfs_discard btrfs_discard_workfn [btrfs]
      [71.992] Call Trace:
      [71.993]  <IRQ>
      [71.994]  dump_stack_lvl+0x5a/0x80
      [71.994]  panic+0x10b/0x2da
      [71.995]  watchdog_timer_fn.cold+0x9a/0xa1
      [71.996]  ? __pfx_watchdog_timer_fn+0x10/0x10
      [71.997]  __hrtimer_run_queues+0x132/0x2a0
      [71.997]  hrtimer_interrupt+0xff/0x230
      [71.998]  __sysvec_apic_timer_interrupt+0x55/0x100
      [71.999]  sysvec_apic_timer_interrupt+0x6c/0x90
      [72.000]  </IRQ>
      [72.000]  <TASK>
      [72.001]  asm_sysvec_apic_timer_interrupt+0x1a/0x20
      [72.002] RIP: 0010:btrfs_discard_workfn+0xc4/0x400 [btrfs]
      [72.002] Code: c1 01 48 83 (...)
      [72.005] RSP: 0018:ffffafaec03efe08 EFLAGS: 00000246
      [72.006] RAX: ffff897045500000 RBX: ffff8970413ed8d0 RCX: 0000000000000000
      [72.006] RDX: 0000000000000001 RSI: ffff8970413ed8d0 RDI: 0000000a8f1272ad
      [72.007] RBP: 0000000a9d61c60e R08: ffff897045500140 R09: 8080808080808080
      [72.008] R10: ffff897040276800 R11: fefefefefefefeff R12: ffff8970413ed860
      [72.009] R13: ffff897045500000 R14: ffff8970413ed868 R15: 0000000000000000
      [72.010]  ? btrfs_discard_workfn+0x51/0x400 [btrfs 23b01089228eb964071fb7ca156eee8cd3bf996f]
      [72.011]  process_one_work+0x17e/0x330
      [72.012]  worker_thread+0x2ce/0x3f0
      [72.013]  ? __pfx_worker_thread+0x10/0x10
      [72.014]  kthread+0xef/0x220
      [72.014]  ? __pfx_kthread+0x10/0x10
      [72.015]  ret_from_fork+0x34/0x50
      [72.015]  ? __pfx_kthread+0x10/0x10
      [72.016]  ret_from_fork_asm+0x1a/0x30
      [72.017]  </TASK>
      [72.017] Kernel Offset: 0x15000000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
      [72.019] Rebooting in 90 seconds..
    
    So fix this by making sure we move a block group out of the unused block
    groups discard list when calling __add_to_discard_list().
    
    Fixes: 2bee7eb8bb81 ("btrfs: discard one region at a time in async discard")
    Link: https://bugzilla.suse.com/show_bug.cgi?id=1242012
    CC: [email protected] # 5.10+
    Reviewed-by: Boris Burkov <[email protected]>
    Reviewed-by: Daniel Vacek <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
clocksource/i8253: Use raw_spinlock_irqsave() in clockevent_i8253_disable() [+ + +]
Author: Sebastian Andrzej Siewior <[email protected]>
Date:   Fri Apr 4 15:31:16 2025 +0200

    clocksource/i8253: Use raw_spinlock_irqsave() in clockevent_i8253_disable()
    
    commit 94cff94634e506a4a44684bee1875d2dbf782722 upstream.
    
    On x86 during boot, clockevent_i8253_disable() can be invoked via
    x86_late_time_init -> hpet_time_init() -> pit_timer_init() which happens
    with enabled interrupts.
    
    If some of the old i8253 hardware is actually used then lockdep will notice
    that i8253_lock is used in hard interrupt context. This causes lockdep to
    complain because it observed the lock being acquired with interrupts
    enabled and in hard interrupt context.
    
    Make clockevent_i8253_disable() acquire the lock with
    raw_spinlock_irqsave() to cure this.
    
    [ tglx: Massage change log and use guard() ]
    
    Fixes: c8c4076723dac ("x86/timer: Skip PIT initialization on modern chipsets")
    Signed-off-by: Sebastian Andrzej Siewior <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/all/[email protected]
    Signed-off-by: Sebastian Andrzej Siewior <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dmaengine: idxd: fix memory leak in error handling path of idxd_setup_engines [+ + +]
Author: Shuai Xue <[email protected]>
Date:   Fri Apr 4 20:02:10 2025 +0800

    dmaengine: idxd: fix memory leak in error handling path of idxd_setup_engines
    
    commit 817bced19d1dbdd0b473580d026dc0983e30e17b upstream.
    
    Memory allocated for engines is not freed if an error occurs during
    idxd_setup_engines(). To fix it, free the allocated memory in the
    reverse order of allocation before exiting the function in case of an
    error.
    
    Fixes: 75b911309060 ("dmaengine: idxd: fix engine conf_dev lifetime")
    Cc: [email protected]
    Signed-off-by: Shuai Xue <[email protected]>
    Reviewed-by: Dave Jiang <[email protected]>
    Reviewed-by: Fenghua Yu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: idxd: fix memory leak in error handling path of idxd_setup_groups [+ + +]
Author: Shuai Xue <[email protected]>
Date:   Fri Apr 4 20:02:11 2025 +0800

    dmaengine: idxd: fix memory leak in error handling path of idxd_setup_groups
    
    commit aa6f4f945b10eac57aed46154ae7d6fada7fccc7 upstream.
    
    Memory allocated for groups is not freed if an error occurs during
    idxd_setup_groups(). To fix it, free the allocated memory in the reverse
    order of allocation before exiting the function in case of an error.
    
    Fixes: defe49f96012 ("dmaengine: idxd: fix group conf_dev lifetime")
    Cc: [email protected]
    Signed-off-by: Shuai Xue <[email protected]>
    Reviewed-by: Dave Jiang <[email protected]>
    Reviewed-by: Fenghua Yu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: Revert "dmaengine: dmatest: Fix dmatest waiting less when interrupted" [+ + +]
Author: Nathan Lynch <[email protected]>
Date:   Thu Apr 3 11:24:19 2025 -0500

    dmaengine: Revert "dmaengine: dmatest: Fix dmatest waiting less when interrupted"
    
    commit df180e65305f8c1e020d54bfc2132349fd693de1 upstream.
    
    Several issues with this change:
    
    * The analysis is flawed and it's unclear what problem is being
      fixed. There is no difference between wait_event_freezable_timeout()
      and wait_event_timeout() with respect to device interrupts. And of
      course "the interrupt notifying the finish of an operation happens
      during wait_event_freezable_timeout()" -- that's how it's supposed
      to work.
    
    * The link at the "Closes:" tag appears to be an unrelated
      use-after-free in idxd.
    
    * It introduces a regression: dmatest threads are meant to be
      freezable and this change breaks that.
    
    See discussion here:
    https://lore.kernel.org/dmaengine/[email protected]/
    
    Fixes: e87ca16e9911 ("dmaengine: dmatest: Fix dmatest waiting less when interrupted")
    Signed-off-by: Nathan Lynch <[email protected]>
    Link: https://lore.kernel.org/r/20250403-dmaengine-dmatest-revert-waiting-less-v1-1-8227c5a3d7c8@amd.com
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: ti: k3-udma: Add missing locking [+ + +]
Author: Ronald Wahl <[email protected]>
Date:   Mon Apr 14 19:31:13 2025 +0200

    dmaengine: ti: k3-udma: Add missing locking
    
    commit fca280992af8c2fbd511bc43f65abb4a17363f2f upstream.
    
    Recent kernels complain about a missing lock in k3-udma.c when the lock
    validator is enabled:
    
    [    4.128073] WARNING: CPU: 0 PID: 746 at drivers/dma/ti/../virt-dma.h:169 udma_start.isra.0+0x34/0x238
    [    4.137352] CPU: 0 UID: 0 PID: 746 Comm: kworker/0:3 Not tainted 6.12.9-arm64 #28
    [    4.144867] Hardware name: pp-v12 (DT)
    [    4.148648] Workqueue: events udma_check_tx_completion
    [    4.153841] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    [    4.160834] pc : udma_start.isra.0+0x34/0x238
    [    4.165227] lr : udma_start.isra.0+0x30/0x238
    [    4.169618] sp : ffffffc083cabcf0
    [    4.172963] x29: ffffffc083cabcf0 x28: 0000000000000000 x27: ffffff800001b005
    [    4.180167] x26: ffffffc0812f0000 x25: 0000000000000000 x24: 0000000000000000
    [    4.187370] x23: 0000000000000001 x22: 00000000e21eabe9 x21: ffffff8000fa0670
    [    4.194571] x20: ffffff8001b6bf00 x19: ffffff8000fa0430 x18: ffffffc083b95030
    [    4.201773] x17: 0000000000000000 x16: 00000000f0000000 x15: 0000000000000048
    [    4.208976] x14: 0000000000000048 x13: 0000000000000000 x12: 0000000000000001
    [    4.216179] x11: ffffffc08151a240 x10: 0000000000003ea1 x9 : ffffffc08046ab68
    [    4.223381] x8 : ffffffc083cabac0 x7 : ffffffc081df3718 x6 : 0000000000029fc8
    [    4.230583] x5 : ffffffc0817ee6d8 x4 : 0000000000000bc0 x3 : 0000000000000000
    [    4.237784] x2 : 0000000000000000 x1 : 00000000001fffff x0 : 0000000000000000
    [    4.244986] Call trace:
    [    4.247463]  udma_start.isra.0+0x34/0x238
    [    4.251509]  udma_check_tx_completion+0xd0/0xdc
    [    4.256076]  process_one_work+0x244/0x3fc
    [    4.260129]  process_scheduled_works+0x6c/0x74
    [    4.264610]  worker_thread+0x150/0x1dc
    [    4.268398]  kthread+0xd8/0xe8
    [    4.271492]  ret_from_fork+0x10/0x20
    [    4.275107] irq event stamp: 220
    [    4.278363] hardirqs last  enabled at (219): [<ffffffc080a27c7c>] _raw_spin_unlock_irq+0x38/0x50
    [    4.287183] hardirqs last disabled at (220): [<ffffffc080a1c154>] el1_dbg+0x24/0x50
    [    4.294879] softirqs last  enabled at (182): [<ffffffc080037e68>] handle_softirqs+0x1c0/0x3cc
    [    4.303437] softirqs last disabled at (177): [<ffffffc080010170>] __do_softirq+0x1c/0x28
    [    4.311559] ---[ end trace 0000000000000000 ]---
    
    This commit adds the missing locking.
    
    Fixes: 25dcb5dd7b7c ("dmaengine: ti: New driver for K3 UDMA")
    Cc: Peter Ujfalusi <[email protected]>
    Cc: Vignesh Raghavendra <[email protected]>
    Cc: Vinod Koul <[email protected]>
    Cc: [email protected]
    Cc: [email protected]
    Signed-off-by: Ronald Wahl <[email protected]>
    Acked-by: Peter Ujfalusi <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: ti: k3-udma: Use cap_mask directly from dma_device structure instead of a local copy [+ + +]
Author: Yemike Abhilash Chandra <[email protected]>
Date:   Thu Apr 17 13:25:21 2025 +0530

    dmaengine: ti: k3-udma: Use cap_mask directly from dma_device structure instead of a local copy
    
    commit 8ca9590c39b69b55a8de63d2b21b0d44f523b43a upstream.
    
    Currently, a local dma_cap_mask_t variable is used to store device
    cap_mask within udma_of_xlate(). However, the DMA_PRIVATE flag in
    the device cap_mask can get cleared when the last channel is released.
    This can happen right after storing the cap_mask locally in
    udma_of_xlate(), and subsequent dma_request_channel() can fail due to
    mismatch in the cap_mask. Fix this by removing the local dma_cap_mask_t
    variable and directly using the one from the dma_device structure.
    
    Fixes: 25dcb5dd7b7c ("dmaengine: ti: New driver for K3 UDMA")
    Cc: [email protected]
    Signed-off-by: Vaishnav Achath <[email protected]>
    Acked-by: Peter Ujfalusi <[email protected]>
    Reviewed-by: Udit Kumar <[email protected]>
    Signed-off-by: Yemike Abhilash Chandra <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Documentation: x86/bugs/its: Add ITS documentation [+ + +]
Author: Pawan Gupta <[email protected]>
Date:   Fri May 16 17:00:46 2025 -0700

    Documentation: x86/bugs/its: Add ITS documentation
    
    commit 1ac116ce6468670eeda39345a5585df308243dca upstream.
    
    Add the admin-guide for Indirect Target Selection (ITS).
    
    Signed-off-by: Pawan Gupta <[email protected]>
    Signed-off-by: Dave Hansen <[email protected]>
    Reviewed-by: Josh Poimboeuf <[email protected]>
    Reviewed-by: Alexandre Chartre <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ftrace: Fix preemption accounting for stacktrace filter command [+ + +]
Author: pengdonglin <[email protected]>
Date:   Mon May 12 17:42:46 2025 +0800

    ftrace: Fix preemption accounting for stacktrace filter command
    
    commit 11aff32439df6ca5b3b891b43032faf88f4a6a29 upstream.
    
    The preemption count of the stacktrace filter command to trace ksys_read
    is consistently incorrect:
    
    $ echo ksys_read:stacktrace > set_ftrace_filter
    
       <...>-453     [004] ...1.    38.308956: <stack trace>
    => ksys_read
    => do_syscall_64
    => entry_SYSCALL_64_after_hwframe
    
    The root cause is that the trace framework disables preemption when
    invoking the filter command callback in function_trace_probe_call:
    
       preempt_disable_notrace();
       probe_ops->func(ip, parent_ip, probe_opsbe->tr, probe_ops, probe->data);
       preempt_enable_notrace();
    
    Use tracing_gen_ctx_dec() to account for the preempt_disable_notrace(),
    which will output the correct preemption count:
    
    $ echo ksys_read:stacktrace > set_ftrace_filter
    
       <...>-410     [006] .....    31.420396: <stack trace>
    => ksys_read
    => do_syscall_64
    => entry_SYSCALL_64_after_hwframe
    
    Cc: [email protected]
    Fixes: 36590c50b2d07 ("tracing: Merge irqflags + preempt counter.")
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: pengdonglin <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ftrace: Fix preemption accounting for stacktrace trigger command [+ + +]
Author: pengdonglin <[email protected]>
Date:   Mon May 12 17:42:45 2025 +0800

    ftrace: Fix preemption accounting for stacktrace trigger command
    
    commit e333332657f615ac2b55aa35565c4a882018bbe9 upstream.
    
    When using the stacktrace trigger command to trace syscalls, the
    preemption count was consistently reported as 1 when the system call
    event itself had 0 (".").
    
    For example:
    
    root@ubuntu22-vm:/sys/kernel/tracing/events/syscalls/sys_enter_read
    $ echo stacktrace > trigger
    $ echo 1 > enable
    
        sshd-416     [002] .....   232.864910: sys_read(fd: a, buf: 556b1f3221d0, count: 8000)
        sshd-416     [002] ...1.   232.864913: <stack trace>
     => ftrace_syscall_enter
     => syscall_trace_enter
     => do_syscall_64
     => entry_SYSCALL_64_after_hwframe
    
    The root cause is that the trace framework disables preemption in __DO_TRACE before
    invoking the trigger callback.
    
    Use the tracing_gen_ctx_dec() that will accommodate for the increase of
    the preemption count in __DO_TRACE when calling the callback. The result
    is the accurate reporting of:
    
        sshd-410     [004] .....   210.117660: sys_read(fd: 4, buf: 559b725ba130, count: 40000)
        sshd-410     [004] .....   210.117662: <stack trace>
     => ftrace_syscall_enter
     => syscall_trace_enter
     => do_syscall_64
     => entry_SYSCALL_64_after_hwframe
    
    Cc: [email protected]
    Fixes: ce33c845b030c ("tracing: Dump stacktrace trigger to the corresponding instance")
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: pengdonglin <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ice: arfs: fix use-after-free when freeing @rx_cpu_rmap [+ + +]
Author: Alexander Lobakin <[email protected]>
Date:   Mon Apr 4 18:15:09 2022 +0200

    ice: arfs: fix use-after-free when freeing @rx_cpu_rmap
    
    commit d7442f512b71fc63a99c8a801422dde4fbbf9f93 upstream.
    
    The CI testing bots triggered the following splat:
    
    [  718.203054] BUG: KASAN: use-after-free in free_irq_cpu_rmap+0x53/0x80
    [  718.206349] Read of size 4 at addr ffff8881bd127e00 by task sh/20834
    [  718.212852] CPU: 28 PID: 20834 Comm: sh Kdump: loaded Tainted: G S      W IOE     5.17.0-rc8_nextqueue-devqueue-02643-g23f3121aca93 #1
    [  718.219695] Hardware name: Intel Corporation S2600WFT/S2600WFT, BIOS SE5C620.86B.02.01.0012.070720200218 07/07/2020
    [  718.223418] Call Trace:
    [  718.227139]
    [  718.230783]  dump_stack_lvl+0x33/0x42
    [  718.234431]  print_address_description.constprop.9+0x21/0x170
    [  718.238177]  ? free_irq_cpu_rmap+0x53/0x80
    [  718.241885]  ? free_irq_cpu_rmap+0x53/0x80
    [  718.245539]  kasan_report.cold.18+0x7f/0x11b
    [  718.249197]  ? free_irq_cpu_rmap+0x53/0x80
    [  718.252852]  free_irq_cpu_rmap+0x53/0x80
    [  718.256471]  ice_free_cpu_rx_rmap.part.11+0x37/0x50 [ice]
    [  718.260174]  ice_remove_arfs+0x5f/0x70 [ice]
    [  718.263810]  ice_rebuild_arfs+0x3b/0x70 [ice]
    [  718.267419]  ice_rebuild+0x39c/0xb60 [ice]
    [  718.270974]  ? asm_sysvec_apic_timer_interrupt+0x12/0x20
    [  718.274472]  ? ice_init_phy_user_cfg+0x360/0x360 [ice]
    [  718.278033]  ? delay_tsc+0x4a/0xb0
    [  718.281513]  ? preempt_count_sub+0x14/0xc0
    [  718.284984]  ? delay_tsc+0x8f/0xb0
    [  718.288463]  ice_do_reset+0x92/0xf0 [ice]
    [  718.292014]  ice_pci_err_resume+0x91/0xf0 [ice]
    [  718.295561]  pci_reset_function+0x53/0x80
    <...>
    [  718.393035] Allocated by task 690:
    [  718.433497] Freed by task 20834:
    [  718.495688] Last potentially related work creation:
    [  718.568966] The buggy address belongs to the object at ffff8881bd127e00
                    which belongs to the cache kmalloc-96 of size 96
    [  718.574085] The buggy address is located 0 bytes inside of
                    96-byte region [ffff8881bd127e00, ffff8881bd127e60)
    [  718.579265] The buggy address belongs to the page:
    [  718.598905] Memory state around the buggy address:
    [  718.601809]  ffff8881bd127d00: fa fb fb fb fb fb fb fb fb fb fb fb fc fc fc fc
    [  718.604796]  ffff8881bd127d80: 00 00 00 00 00 00 00 00 00 00 fc fc fc fc fc fc
    [  718.607794] >ffff8881bd127e00: fa fb fb fb fb fb fb fb fb fb fb fb fc fc fc fc
    [  718.610811]                    ^
    [  718.613819]  ffff8881bd127e80: 00 00 00 00 00 00 00 00 00 00 00 00 fc fc fc fc
    [  718.617107]  ffff8881bd127f00: fa fb fb fb fb fb fb fb fb fb fb fb fc fc fc fc
    
    This is due to that free_irq_cpu_rmap() is always being called
    *after* (devm_)free_irq() and thus it tries to work with IRQ descs
    already freed. For example, on device reset the driver frees the
    rmap right before allocating a new one (the splat above).
    Make rmap creation and freeing function symmetrical with
    {request,free}_irq() calls i.e. do that on ifup/ifdown instead
    of device probe/remove/resume. These operations can be performed
    independently from the actual device aRFS configuration.
    Also, make sure ice_vsi_free_irq() clears IRQ affinity notifiers
    only when aRFS is disabled -- otherwise, CPU rmap sets and clears
    its own and they must not be touched manually.
    
    Fixes: 28bf26724fdb0 ("ice: Implement aRFS")
    Co-developed-by: Ivan Vecera <[email protected]>
    Signed-off-by: Ivan Vecera <[email protected]>
    Signed-off-by: Alexander Lobakin <[email protected]>
    Tested-by: Ivan Vecera <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Suraj Jitindar Singh <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
iio: adc: ad7768-1: Fix insufficient alignment of timestamp. [+ + +]
Author: Jonathan Cameron <[email protected]>
Date:   Sun Apr 13 11:34:25 2025 +0100

    iio: adc: ad7768-1: Fix insufficient alignment of timestamp.
    
    [ Upstream commit ffbc26bc91c1f1eb3dcf5d8776e74cbae21ee13a ]
    
    On architectures where an s64 is not 64-bit aligned, this may result
    insufficient alignment of the timestamp and the structure being too small.
    Use aligned_s64 to force the alignment.
    
    Fixes: a1caeebab07e ("iio: adc: ad7768-1: Fix too small buffer passed to iio_push_to_buffers_with_timestamp()") # aligned_s64 newer
    Reported-by: David Lechner <[email protected]>
    Reviewed-by: Nuno Sá <[email protected]>
    Reviewed-by: David Lechner <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

iio: chemical: sps30: use aligned_s64 for timestamp [+ + +]
Author: David Lechner <[email protected]>
Date:   Thu Apr 17 11:52:37 2025 -0500

    iio: chemical: sps30: use aligned_s64 for timestamp
    
    [ Upstream commit bb49d940344bcb8e2b19e69d7ac86f567887ea9a ]
    
    Follow the pattern of other drivers and use aligned_s64 for the
    timestamp. This will ensure that the timestamp is correctly aligned on
    all architectures.
    
    Fixes: a5bf6fdd19c3 ("iio:chemical:sps30: Fix timestamp alignment")
    Signed-off-by: David Lechner <[email protected]>
    Reviewed-by: Nuno Sá <[email protected]>
    Link: https://patch.msgid.link/20250417-iio-more-timestamp-alignment-v1-5-eafac1e22318@baylibre.com
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Linux: Linux 5.15.184 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Thu May 22 14:08:28 2025 +0200

    Linux 5.15.184
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Shuah Khan <[email protected]>
    Tested-by: Ron Economos <[email protected]>
    Tested-by: Vijayendra Suman <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Tested-by: Linux Kernel Functional Testing <[email protected]>
    Tested-by: Mark Brown <[email protected]>
    Tested-by: Hardik Garg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net: cadence: macb: Fix a possible deadlock in macb_halt_tx. [+ + +]
Author: Mathieu Othacehe <[email protected]>
Date:   Fri May 9 14:19:35 2025 +0200

    net: cadence: macb: Fix a possible deadlock in macb_halt_tx.
    
    [ Upstream commit c92d6089d8ad7d4d815ebcedee3f3907b539ff1f ]
    
    There is a situation where after THALT is set high, TGO stays high as
    well. Because jiffies are never updated, as we are in a context with
    interrupts disabled, we never exit that loop and have a deadlock.
    
    That deadlock was noticed on a sama5d4 device that stayed locked for days.
    
    Use retries instead of jiffies so that the timeout really works and we do
    not have a deadlock anymore.
    
    Fixes: e86cd53afc590 ("net/macb: better manage tx errors")
    Signed-off-by: Mathieu Othacehe <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: sja1105: discard incoming frames in BR_STATE_LISTENING [+ + +]
Author: Vladimir Oltean <[email protected]>
Date:   Fri May 9 14:38:16 2025 +0300

    net: dsa: sja1105: discard incoming frames in BR_STATE_LISTENING
    
    [ Upstream commit 498625a8ab2c8e1c9ab5105744310e8d6952cc01 ]
    
    It has been reported that when under a bridge with stp_state=1, the logs
    get spammed with this message:
    
    [  251.734607] fsl_dpaa2_eth dpni.5 eth0: Couldn't decode source port
    
    Further debugging shows the following info associated with packets:
    source_port=-1, switch_id=-1, vid=-1, vbid=1
    
    In other words, they are data plane packets which are supposed to be
    decoded by dsa_tag_8021q_find_port_by_vbid(), but the latter (correctly)
    refuses to do so, because no switch port is currently in
    BR_STATE_LEARNING or BR_STATE_FORWARDING - so the packet is effectively
    unexpected.
    
    The error goes away after the port progresses to BR_STATE_LEARNING in 15
    seconds (the default forward_time of the bridge), because then,
    dsa_tag_8021q_find_port_by_vbid() can correctly associate the data plane
    packets with a plausible bridge port in a plausible STP state.
    
    Re-reading IEEE 802.1D-1990, I see the following:
    
    "4.4.2 Learning: (...) The Forwarding Process shall discard received
    frames."
    
    IEEE 802.1D-2004 further clarifies:
    
    "DISABLED, BLOCKING, LISTENING, and BROKEN all correspond to the
    DISCARDING port state. While those dot1dStpPortStates serve to
    distinguish reasons for discarding frames, the operation of the
    Forwarding and Learning processes is the same for all of them. (...)
    LISTENING represents a port that the spanning tree algorithm has
    selected to be part of the active topology (computing a Root Port or
    Designated Port role) but is temporarily discarding frames to guard
    against loops or incorrect learning."
    
    Well, this is not what the driver does - instead it sets
    mac[port].ingress = true.
    
    To get rid of the log spam, prevent unexpected data plane packets to
    be received by software by discarding them on ingress in the LISTENING
    state.
    
    In terms of blame attribution: the prints only date back to commit
    d7f9787a763f ("net: dsa: tag_8021q: add support for imprecise RX based
    on the VBID"). However, the settings would permit a LISTENING port to
    forward to a FORWARDING port, and the standard suggests that's not OK.
    
    Fixes: 640f763f98c2 ("net: dsa: sja1105: Add support for Spanning Tree Protocol")
    Signed-off-by: Vladimir Oltean <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net_sched: Flush gso_skb list too during ->change() [+ + +]
Author: Cong Wang <[email protected]>
Date:   Tue May 6 21:35:58 2025 -0700

    net_sched: Flush gso_skb list too during ->change()
    
    [ Upstream commit 2d3cbfd6d54a2c39ce3244f33f85c595844bd7b8 ]
    
    Previously, when reducing a qdisc's limit via the ->change() operation, only
    the main skb queue was trimmed, potentially leaving packets in the gso_skb
    list. This could result in NULL pointer dereference when we only check
    sch->limit against sch->q.qlen.
    
    This patch introduces a new helper, qdisc_dequeue_internal(), which ensures
    both the gso_skb list and the main queue are properly flushed when trimming
    excess packets. All relevant qdiscs (codel, fq, fq_codel, fq_pie, hhf, pie)
    are updated to use this helper in their ->change() routines.
    
    Fixes: 76e3cc126bb2 ("codel: Controlled Delay AQM")
    Fixes: 4b549a2ef4be ("fq_codel: Fair Queue Codel AQM")
    Fixes: afe4fd062416 ("pkt_sched: fq: Fair Queue packet scheduler")
    Fixes: ec97ecf1ebe4 ("net: sched: add Flow Queue PIE packet scheduler")
    Fixes: 10239edf86f1 ("net-qdisc-hhf: Heavy-Hitter Filter (HHF) qdisc")
    Fixes: d4b36210c2e6 ("net: pkt_sched: PIE AQM scheme")
    Reported-by: Will <[email protected]>
    Reported-by: Savy <[email protected]>
    Signed-off-by: Cong Wang <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
netfilter: nf_tables: do not defer rule destruction via call_rcu [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Tue May 20 01:35:15 2025 +0200

    netfilter: nf_tables: do not defer rule destruction via call_rcu
    
    commit b04df3da1b5c6f6dc7cdccc37941740c078c4043 upstream.
    
    nf_tables_chain_destroy can sleep, it can't be used from call_rcu
    callbacks.
    
    Moreover, nf_tables_rule_release() is only safe for error unwinding,
    while transaction mutex is held and the to-be-desroyed rule was not
    exposed to either dataplane or dumps, as it deactives+frees without
    the required synchronize_rcu() in-between.
    
    nft_rule_expr_deactivate() callbacks will change ->use counters
    of other chains/sets, see e.g. nft_lookup .deactivate callback, these
    must be serialized via transaction mutex.
    
    Also add a few lockdep asserts to make this more explicit.
    
    Calling synchronize_rcu() isn't ideal, but fixing this without is hard
    and way more intrusive.  As-is, we can get:
    
    WARNING: .. net/netfilter/nf_tables_api.c:5515 nft_set_destroy+0x..
    Workqueue: events nf_tables_trans_destroy_work
    RIP: 0010:nft_set_destroy+0x3fe/0x5c0
    Call Trace:
     <TASK>
     nf_tables_trans_destroy_work+0x6b7/0xad0
     process_one_work+0x64a/0xce0
     worker_thread+0x613/0x10d0
    
    In case the synchronize_rcu becomes an issue, we can explore alternatives.
    
    One way would be to allocate nft_trans_rule objects + one nft_trans_chain
    object, deactivate the rules + the chain and then defer the freeing to the
    nft destroy workqueue.  We'd still need to keep the synchronize_rcu path as
    a fallback to handle -ENOMEM corner cases though.
    
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/all/[email protected]/T/
    Fixes: c03d278fdf35 ("netfilter: nf_tables: wait for rcu grace period on net_device removal")
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: nf_tables: pass nft_chain to destroy function, not nft_ctx [+ + +]
Author: Florian Westphal <[email protected]>
Date:   Tue May 20 01:35:13 2025 +0200

    netfilter: nf_tables: pass nft_chain to destroy function, not nft_ctx
    
    commit 8965d42bcf54d42cbc72fe34a9d0ec3f8527debd upstream.
    
    It would be better to not store nft_ctx inside nft_trans object,
    the netlink ctx strucutre is huge and most of its information is
    never needed in places that use trans->ctx.
    
    Avoid/reduce its usage if possible, no runtime behaviour change
    intended.
    
    Signed-off-by: Florian Westphal <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

netfilter: nf_tables: wait for rcu grace period on net_device removal [+ + +]
Author: Pablo Neira Ayuso <[email protected]>
Date:   Tue May 20 01:35:14 2025 +0200

    netfilter: nf_tables: wait for rcu grace period on net_device removal
    
    commit c03d278fdf35e73dd0ec543b9b556876b9d9a8dc upstream.
    
    8c873e219970 ("netfilter: core: free hooks with call_rcu") removed
    synchronize_net() call when unregistering basechain hook, however,
    net_device removal event handler for the NFPROTO_NETDEV was not updated
    to wait for RCU grace period.
    
    Note that 835b803377f5 ("netfilter: nf_tables_netdev: unregister hooks
    on net_device removal") does not remove basechain rules on device
    removal, I was hinted to remove rules on net_device removal later, see
    5ebe0b0eec9d ("netfilter: nf_tables: destroy basechain and rules on
    netdevice removal").
    
    Although NETDEV_UNREGISTER event is guaranteed to be handled after
    synchronize_net() call, this path needs to wait for rcu grace period via
    rcu callback to release basechain hooks if netns is alive because an
    ongoing netlink dump could be in progress (sockets hold a reference on
    the netns).
    
    Note that nf_tables_pre_exit_net() unregisters and releases basechain
    hooks but it is possible to see NETDEV_UNREGISTER at a later stage in
    the netns exit path, eg. veth peer device in another netns:
    
     cleanup_net()
      default_device_exit_batch()
       unregister_netdevice_many_notify()
        notifier_call_chain()
         nf_tables_netdev_event()
          __nft_release_basechain()
    
    In this particular case, same rule of thumb applies: if netns is alive,
    then wait for rcu grace period because netlink dump in the other netns
    could be in progress. Otherwise, if the other netns is going away then
    no netlink dump can be in progress and basechain hooks can be released
    inmediately.
    
    While at it, turn WARN_ON() into WARN_ON_ONCE() for the basechain
    validation, which should not ever happen.
    
    Fixes: 835b803377f5 ("netfilter: nf_tables_netdev: unregister hooks on net_device removal")
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nfs: handle failure of nfs_get_lock_context in unlock path [+ + +]
Author: Li Lingfeng <[email protected]>
Date:   Thu Apr 17 15:25:08 2025 +0800

    nfs: handle failure of nfs_get_lock_context in unlock path
    
    [ Upstream commit c457dc1ec770a22636b473ce5d35614adfe97636 ]
    
    When memory is insufficient, the allocation of nfs_lock_context in
    nfs_get_lock_context() fails and returns -ENOMEM. If we mistakenly treat
    an nfs4_unlockdata structure (whose l_ctx member has been set to -ENOMEM)
    as valid and proceed to execute rpc_run_task(), this will trigger a NULL
    pointer dereference in nfs4_locku_prepare. For example:
    
    BUG: kernel NULL pointer dereference, address: 000000000000000c
    PGD 0 P4D 0
    Oops: Oops: 0000 [#1] SMP PTI
    CPU: 15 UID: 0 PID: 12 Comm: kworker/u64:0 Not tainted 6.15.0-rc2-dirty #60
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-2.fc40
    Workqueue: rpciod rpc_async_schedule
    RIP: 0010:nfs4_locku_prepare+0x35/0xc2
    Code: 89 f2 48 89 fd 48 c7 c7 68 69 ef b5 53 48 8b 8e 90 00 00 00 48 89 f3
    RSP: 0018:ffffbbafc006bdb8 EFLAGS: 00010246
    RAX: 000000000000004b RBX: ffff9b964fc1fa00 RCX: 0000000000000000
    RDX: 0000000000000000 RSI: fffffffffffffff4 RDI: ffff9ba53fddbf40
    RBP: ffff9ba539934000 R08: 0000000000000000 R09: ffffbbafc006bc38
    R10: ffffffffb6b689c8 R11: 0000000000000003 R12: ffff9ba539934030
    R13: 0000000000000001 R14: 0000000004248060 R15: ffffffffb56d1c30
    FS: 0000000000000000(0000) GS:ffff9ba5881f0000(0000) knlGS:00000000
    CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 000000000000000c CR3: 000000093f244000 CR4: 00000000000006f0
    Call Trace:
     <TASK>
     __rpc_execute+0xbc/0x480
     rpc_async_schedule+0x2f/0x40
     process_one_work+0x232/0x5d0
     worker_thread+0x1da/0x3d0
     ? __pfx_worker_thread+0x10/0x10
     kthread+0x10d/0x240
     ? __pfx_kthread+0x10/0x10
     ret_from_fork+0x34/0x50
     ? __pfx_kthread+0x10/0x10
     ret_from_fork_asm+0x1a/0x30
     </TASK>
    Modules linked in:
    CR2: 000000000000000c
    ---[ end trace 0000000000000000 ]---
    
    Free the allocated nfs4_unlockdata when nfs_get_lock_context() fails and
    return NULL to terminate subsequent rpc_run_task, preventing NULL pointer
    dereference.
    
    Fixes: f30cb757f680 ("NFS: Always wait for I/O completion before unlock")
    Signed-off-by: Li Lingfeng <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
NFSv4/pnfs: Reset the layout state after a layoutreturn [+ + +]
Author: Trond Myklebust <[email protected]>
Date:   Sat May 10 10:50:13 2025 -0400

    NFSv4/pnfs: Reset the layout state after a layoutreturn
    
    [ Upstream commit 6d6d7f91cc8c111d40416ac9240a3bb9396c5235 ]
    
    If there are still layout segments in the layout plh_return_lsegs list
    after a layout return, we should be resetting the state to ensure they
    eventually get returned as well.
    
    Fixes: 68f744797edd ("pNFS: Do not free layout segments that are marked for return")
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
phy: Fix error handling in tegra_xusb_port_init [+ + +]
Author: Ma Ke <[email protected]>
Date:   Mon Mar 3 15:27:39 2025 +0800

    phy: Fix error handling in tegra_xusb_port_init
    
    commit b2ea5f49580c0762d17d80d8083cb89bc3acf74f upstream.
    
    If device_add() fails, do not use device_unregister() for error
    handling. device_unregister() consists two functions: device_del() and
    put_device(). device_unregister() should only be called after
    device_add() succeeded because device_del() undoes what device_add()
    does if successful. Change device_unregister() to put_device() call
    before returning from the function.
    
    As comment of device_add() says, 'if device_add() succeeds, you should
    call device_del() when you want to get rid of it. If device_add() has
    not succeeded, use only put_device() to drop the reference count'.
    
    Found by code review.
    
    Cc: [email protected]
    Fixes: 53d2a715c240 ("phy: Add Tegra XUSB pad controller support")
    Signed-off-by: Ma Ke <[email protected]>
    Acked-by: Thierry Reding <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

phy: renesas: rcar-gen3-usb2: Set timing registers only once [+ + +]
Author: Claudiu Beznea <[email protected]>
Date:   Wed May 7 15:50:32 2025 +0300

    phy: renesas: rcar-gen3-usb2: Set timing registers only once
    
    commit 86e70849f4b2b4597ac9f7c7931f2a363774be25 upstream.
    
    phy-rcar-gen3-usb2 driver exports 4 PHYs. The timing registers are common
    to all PHYs. There is no need to set them every time a PHY is initialized.
    Set timing register only when the 1st PHY is initialized.
    
    Fixes: f3b5a8d9b50d ("phy: rcar-gen3-usb2: Add R-Car Gen3 USB2 PHY driver")
    Cc: [email protected]
    Reviewed-by: Yoshihiro Shimoda <[email protected]>
    Tested-by: Yoshihiro Shimoda <[email protected]>
    Reviewed-by: Lad Prabhakar <[email protected]>
    Signed-off-by: Claudiu Beznea <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
platform/x86: asus-wmi: Fix wlan_ctrl_by_user detection [+ + +]
Author: Hans de Goede <[email protected]>
Date:   Thu May 1 15:17:02 2025 +0200

    platform/x86: asus-wmi: Fix wlan_ctrl_by_user detection
    
    [ Upstream commit bfcfe6d335a967f8ea0c1980960e6f0205b5de6e ]
    
    The wlan_ctrl_by_user detection was introduced by commit a50bd128f28c
    ("asus-wmi: record wlan status while controlled by userapp").
    
    Quoting from that commit's commit message:
    
    """
    When you call WMIMethod(DSTS, 0x00010011) to get WLAN status, it may return
    
    (1) 0x00050001 (On)
    (2) 0x00050000 (Off)
    (3) 0x00030001 (On)
    (4) 0x00030000 (Off)
    (5) 0x00000002 (Unknown)
    
    (1), (2) means that the model has hardware GPIO for WLAN, you can call
    WMIMethod(DEVS, 0x00010011, 1 or 0) to turn WLAN on/off.
    (3), (4) means that the model doesn’t have hardware GPIO, you need to use
    API or driver library to turn WLAN on/off, and call
    WMIMethod(DEVS, 0x00010012, 1 or 0) to set WLAN LED status.
    After you set WLAN LED status, you can see the WLAN status is changed with
    WMIMethod(DSTS, 0x00010011). Because the status is recorded lastly
    (ex: Windows), you can use it for synchronization.
    (5) means that the model doesn’t have WLAN device.
    
    WLAN is the ONLY special case with upper rule.
    """
    
    The wlan_ctrl_by_user flag should be set on 0x0003000? ((3), (4) above)
    return values, but the flag mistakenly also gets set on laptops with
    0x0005000? ((1), (2)) return values. This is causing rfkill problems on
    laptops where 0x0005000? is returned.
    
    Fix the check to only set the wlan_ctrl_by_user flag for 0x0003000?
    return values.
    
    Fixes: a50bd128f28c ("asus-wmi: record wlan status while controlled by userapp")
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=219786
    Signed-off-by: Hans de Goede <[email protected]>
    Reviewed-by: Armin Wolf <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
 
qlcnic: fix memory leak in qlcnic_sriov_channel_cfg_cmd() [+ + +]
Author: Abdun Nihaal <[email protected]>
Date:   Mon May 12 10:18:27 2025 +0530

    qlcnic: fix memory leak in qlcnic_sriov_channel_cfg_cmd()
    
    [ Upstream commit 9d8a99c5a7c7f4f7eca2c168a4ec254409670035 ]
    
    In one of the error paths in qlcnic_sriov_channel_cfg_cmd(), the memory
    allocated in qlcnic_sriov_alloc_bc_mbx_args() for mailbox arguments is
    not freed. Fix that by jumping to the error path that frees them, by
    calling qlcnic_free_mbx_args(). This was found using static analysis.
    
    Fixes: f197a7aa6288 ("qlcnic: VF-PF communication channel implementation")
    Signed-off-by: Abdun Nihaal <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/rxe: Fix slab-use-after-free Read in rxe_queue_cleanup bug [+ + +]
Author: Zhu Yanjun <[email protected]>
Date:   Sat Apr 12 09:57:14 2025 +0200

    RDMA/rxe: Fix slab-use-after-free Read in rxe_queue_cleanup bug
    
    [ Upstream commit f81b33582f9339d2dc17c69b92040d3650bb4bae ]
    
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:94 [inline]
     dump_stack_lvl+0x7d/0xa0 lib/dump_stack.c:120
     print_address_description mm/kasan/report.c:378 [inline]
     print_report+0xcf/0x610 mm/kasan/report.c:489
     kasan_report+0xb5/0xe0 mm/kasan/report.c:602
     rxe_queue_cleanup+0xd0/0xe0 drivers/infiniband/sw/rxe/rxe_queue.c:195
     rxe_cq_cleanup+0x3f/0x50 drivers/infiniband/sw/rxe/rxe_cq.c:132
     __rxe_cleanup+0x168/0x300 drivers/infiniband/sw/rxe/rxe_pool.c:232
     rxe_create_cq+0x22e/0x3a0 drivers/infiniband/sw/rxe/rxe_verbs.c:1109
     create_cq+0x658/0xb90 drivers/infiniband/core/uverbs_cmd.c:1052
     ib_uverbs_create_cq+0xc7/0x120 drivers/infiniband/core/uverbs_cmd.c:1095
     ib_uverbs_write+0x969/0xc90 drivers/infiniband/core/uverbs_main.c:679
     vfs_write fs/read_write.c:677 [inline]
     vfs_write+0x26a/0xcc0 fs/read_write.c:659
     ksys_write+0x1b8/0x200 fs/read_write.c:731
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xaa/0x1b0 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    In the function rxe_create_cq, when rxe_cq_from_init fails, the function
    rxe_cleanup will be called to handle the allocated resources. In fact,
    some memory resources have already been freed in the function
    rxe_cq_from_init. Thus, this problem will occur.
    
    The solution is to let rxe_cleanup do all the work.
    
    Fixes: 8700e3e7c485 ("Soft RoCE driver")
    Link: https://paste.ubuntu.com/p/tJgC42wDf6/
    Tested-by: liuyi <[email protected]>
    Signed-off-by: Zhu Yanjun <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Daisuke Matsuda <[email protected]>
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
sctp: add mutual exclusion in proc_sctp_do_udp_port() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Mon Mar 31 09:15:32 2025 +0000

    sctp: add mutual exclusion in proc_sctp_do_udp_port()
    
    commit 10206302af856791fbcc27a33ed3c3eb09b2793d upstream.
    
    We must serialize calls to sctp_udp_sock_stop() and sctp_udp_sock_start()
    or risk a crash as syzbot reported:
    
    Oops: general protection fault, probably for non-canonical address 0xdffffc000000000d: 0000 [#1] SMP KASAN PTI
    KASAN: null-ptr-deref in range [0x0000000000000068-0x000000000000006f]
    CPU: 1 UID: 0 PID: 6551 Comm: syz.1.44 Not tainted 6.14.0-syzkaller-g7f2ff7b62617 #0 PREEMPT(full)
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 02/12/2025
     RIP: 0010:kernel_sock_shutdown+0x47/0x70 net/socket.c:3653
    Call Trace:
     <TASK>
      udp_tunnel_sock_release+0x68/0x80 net/ipv4/udp_tunnel_core.c:181
      sctp_udp_sock_stop+0x71/0x160 net/sctp/protocol.c:930
      proc_sctp_do_udp_port+0x264/0x450 net/sctp/sysctl.c:553
      proc_sys_call_handler+0x3d0/0x5b0 fs/proc/proc_sysctl.c:601
      iter_file_splice_write+0x91c/0x1150 fs/splice.c:738
      do_splice_from fs/splice.c:935 [inline]
      direct_splice_actor+0x18f/0x6c0 fs/splice.c:1158
      splice_direct_to_actor+0x342/0xa30 fs/splice.c:1102
      do_splice_direct_actor fs/splice.c:1201 [inline]
      do_splice_direct+0x174/0x240 fs/splice.c:1227
      do_sendfile+0xafd/0xe50 fs/read_write.c:1368
      __do_sys_sendfile64 fs/read_write.c:1429 [inline]
      __se_sys_sendfile64 fs/read_write.c:1415 [inline]
      __x64_sys_sendfile64+0x1d8/0x220 fs/read_write.c:1415
      do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
    
    Fixes: 046c052b475e ("sctp: enable udp tunneling socks")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Cc: Marcelo Ricardo Leitner <[email protected]>
    Acked-by: Xin Long <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [Minor conflict resolved due to code context change.]
    Signed-off-by: Jianqi Ren <[email protected]>
    Signed-off-by: He Zhe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
selftests/mm: compaction_test: support platform with huge mount of memory [+ + +]
Author: Feng Tang <[email protected]>
Date:   Wed Apr 23 18:36:45 2025 +0800

    selftests/mm: compaction_test: support platform with huge mount of memory
    
    commit ab00ddd802f80e31fc9639c652d736fe3913feae upstream.
    
    When running mm selftest to verify mm patches, 'compaction_test' case
    failed on an x86 server with 1TB memory.  And the root cause is that it
    has too much free memory than what the test supports.
    
    The test case tries to allocate 100000 huge pages, which is about 200 GB
    for that x86 server, and when it succeeds, it expects it's large than 1/3
    of 80% of the free memory in system.  This logic only works for platform
    with 750 GB ( 200 / (1/3) / 80% ) or less free memory, and may raise false
    alarm for others.
    
    Fix it by changing the fixed page number to self-adjustable number
    according to the real number of free memory.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: bd67d5c15cc1 ("Test compaction of mlocked memory")
    Signed-off-by: Feng Tang <[email protected]>
    Acked-by: Dev Jain <[email protected]>
    Reviewed-by: Baolin Wang <[email protected]>
    Tested-by: Baolin Wang <[email protected]>
    Cc: Shuah Khan <[email protected]>
    Cc: Sri Jayaramappa <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
spi: loopback-test: Do not split 1024-byte hexdumps [+ + +]
Author: Geert Uytterhoeven <[email protected]>
Date:   Fri May 2 13:10:35 2025 +0200

    spi: loopback-test: Do not split 1024-byte hexdumps
    
    [ Upstream commit a73fa3690a1f3014d6677e368dce4e70767a6ba2 ]
    
    spi_test_print_hex_dump() prints buffers holding less than 1024 bytes in
    full.  Larger buffers are truncated: only the first 512 and the last 512
    bytes are printed, separated by a truncation message.  The latter is
    confusing in case the buffer holds exactly 1024 bytes, as all data is
    printed anyway.
    
    Fix this by printing buffers holding up to and including 1024 bytes in
    full.
    
    Fixes: 84e0c4e5e2c4ef42 ("spi: add loopback test driver to allow for spi_master regression tests")
    Signed-off-by: Geert Uytterhoeven <[email protected]>
    Link: https://patch.msgid.link/37ee1bc90c6554c9347040adabf04188c8f704aa.1746184171.git.geert+renesas@glider.be
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tracing: probes: Fix a possible race in trace_probe_log APIs [+ + +]
Author: Masami Hiramatsu (Google) <[email protected]>
Date:   Sat May 10 12:44:41 2025 +0900

    tracing: probes: Fix a possible race in trace_probe_log APIs
    
    [ Upstream commit fd837de3c9cb1a162c69bc1fb1f438467fe7f2f5 ]
    
    Since the shared trace_probe_log variable can be accessed and
    modified via probe event create operation of kprobe_events,
    uprobe_events, and dynamic_events, it should be protected.
    In the dynamic_events, all operations are serialized by
    `dyn_event_ops_mutex`. But kprobe_events and uprobe_events
    interfaces are not serialized.
    
    To solve this issue, introduces dyn_event_create(), which runs
    create() operation under the mutex, for kprobe_events and
    uprobe_events. This also uses lockdep to check the mutex is
    held when using trace_probe_log* APIs.
    
    Link: https://lore.kernel.org/all/174684868120.551552.3068655787654268804.stgit@devnote2/
    
    Reported-by: Paul Cacheux <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Fixes: ab105a4fb894 ("tracing: Use tracing error_log with probe events")
    Signed-off-by: Masami Hiramatsu (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

tracing: samples: Initialize trace_array_printk() with the correct function [+ + +]
Author: Steven Rostedt <[email protected]>
Date:   Fri May 9 15:26:57 2025 -0400

    tracing: samples: Initialize trace_array_printk() with the correct function
    
    commit 1b0c192c92ea1fe2dcb178f84adf15fe37c3e7c8 upstream.
    
    When using trace_array_printk() on a created instance, the correct
    function to use to initialize it is:
    
      trace_array_init_printk()
    
    Not
    
      trace_printk_init_buffer()
    
    The former is a proper function to use, the latter is for initializing
    trace_printk() and causes the NOTICE banner to be displayed.
    
    Cc: [email protected]
    Cc: Masami Hiramatsu <[email protected]>
    Cc: Mathieu Desnoyers <[email protected]>
    Cc: Divya Indi <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Fixes: 89ed42495ef4a ("tracing: Sample module to demonstrate kernel access to Ftrace instances.")
    Fixes: 38ce2a9e33db6 ("tracing: Add trace_array_init_printk() to initialize instance trace_printk() buffers")
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usb: typec: altmodes/displayport: create sysfs nodes as driver's default device attribute group [+ + +]
Author: RD Babiera <[email protected]>
Date:   Thu Feb 29 00:11:02 2024 +0000

    usb: typec: altmodes/displayport: create sysfs nodes as driver's default device attribute group
    
    commit 165376f6b23e9a779850e750fb2eb06622e5a531 upstream.
    
    The DisplayPort driver's sysfs nodes may be present to the userspace before
    typec_altmode_set_drvdata() completes in dp_altmode_probe. This means that
    a sysfs read can trigger a NULL pointer error by deferencing dp->hpd in
    hpd_show or dp->lock in pin_assignment_show, as dev_get_drvdata() returns
    NULL in those cases.
    
    Remove manual sysfs node creation in favor of adding attribute group as
    default for devices bound to the driver. The ATTRIBUTE_GROUPS() macro is
    not used here otherwise the path to the sysfs nodes is no longer compliant
    with the ABI.
    
    Fixes: 0e3bb7d6894d ("usb: typec: Add driver for DisplayPort alternate mode")
    Cc: [email protected]
    Signed-off-by: RD Babiera <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    [Minor conflict resolved due to code context change.]
    Signed-off-by: Jianqi Ren <[email protected]>
    Signed-off-by: He Zhe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: typec: fix pm usage counter imbalance in ucsi_ccg_sync_control() [+ + +]
Author: GONG Ruiqi <[email protected]>
Date:   Tue Jan 7 09:57:50 2025 +0800

    usb: typec: fix pm usage counter imbalance in ucsi_ccg_sync_control()
    
    commit b0e525d7a22ea350e75e2aec22e47fcfafa4cacd upstream.
    
    The error handling for the case `con_index == 0` should involve dropping
    the pm usage counter, as ucsi_ccg_sync_control() gets it at the
    beginning. Fix it.
    
    Cc: stable <[email protected]>
    Fixes: e56aac6e5a25 ("usb: typec: fix potential array underflow in ucsi_ccg_sync_control()")
    Signed-off-by: GONG Ruiqi <[email protected]>
    Reviewed-by: Dan Carpenter <[email protected]>
    Reviewed-by: Heikki Krogerus <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    [Minor context change fixed.]
    Signed-off-by: Bin Lan <[email protected]>
    Signed-off-by: He Zhe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: typec: fix potential array underflow in ucsi_ccg_sync_control() [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Mon Nov 11 14:08:06 2024 +0300

    usb: typec: fix potential array underflow in ucsi_ccg_sync_control()
    
    commit e56aac6e5a25630645607b6856d4b2a17b2311a5 upstream.
    
    The "command" variable can be controlled by the user via debugfs.  The
    worry is that if con_index is zero then "&uc->ucsi->connector[con_index
    - 1]" would be an array underflow.
    
    Fixes: 170a6726d0e2 ("usb: typec: ucsi: add support for separate DP altmode devices")
    Signed-off-by: Dan Carpenter <[email protected]>
    Reviewed-by: Heikki Krogerus <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    [ The function ucsi_ccg_sync_write() is renamed to ucsi_ccg_sync_control()
      in commit 13f2ec3115c8 ("usb: typec: ucsi:simplify command sending API").
      Apply this patch to ucsi_ccg_sync_write() in 6.1.y accordingly. ]
    Signed-off-by: Bin Lan <[email protected]>
    Signed-off-by: He Zhe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

usb: typec: ucsi: displayport: Fix deadlock [+ + +]
Author: Andrei Kuchynski <[email protected]>
Date:   Thu Apr 24 08:44:28 2025 +0000

    usb: typec: ucsi: displayport: Fix deadlock
    
    commit 364618c89d4c57c85e5fc51a2446cd939bf57802 upstream.
    
    This patch introduces the ucsi_con_mutex_lock / ucsi_con_mutex_unlock
    functions to the UCSI driver. ucsi_con_mutex_lock ensures the connector
    mutex is only locked if a connection is established and the partner pointer
    is valid. This resolves a deadlock scenario where
    ucsi_displayport_remove_partner holds con->mutex waiting for
    dp_altmode_work to complete while dp_altmode_work attempts to acquire it.
    
    Cc: stable <[email protected]>
    Fixes: af8622f6a585 ("usb: typec: ucsi: Support for DisplayPort alt mode")
    Signed-off-by: Andrei Kuchynski <[email protected]>
    Reviewed-by: Heikki Krogerus <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
wifi: mt76: disable napi on driver removal [+ + +]
Author: Fedor Pchelkin <[email protected]>
Date:   Tue May 6 14:55:39 2025 +0300

    wifi: mt76: disable napi on driver removal
    
    commit 78ab4be549533432d97ea8989d2f00b508fa68d8 upstream.
    
    A warning on driver removal started occurring after commit 9dd05df8403b
    ("net: warn if NAPI instance wasn't shut down"). Disable tx napi before
    deleting it in mt76_dma_cleanup().
    
     WARNING: CPU: 4 PID: 18828 at net/core/dev.c:7288 __netif_napi_del_locked+0xf0/0x100
     CPU: 4 UID: 0 PID: 18828 Comm: modprobe Not tainted 6.15.0-rc4 #4 PREEMPT(lazy)
     Hardware name: ASUS System Product Name/PRIME X670E-PRO WIFI, BIOS 3035 09/05/2024
     RIP: 0010:__netif_napi_del_locked+0xf0/0x100
     Call Trace:
     <TASK>
     mt76_dma_cleanup+0x54/0x2f0 [mt76]
     mt7921_pci_remove+0xd5/0x190 [mt7921e]
     pci_device_remove+0x47/0xc0
     device_release_driver_internal+0x19e/0x200
     driver_detach+0x48/0x90
     bus_remove_driver+0x6d/0xf0
     pci_unregister_driver+0x2e/0xb0
     __do_sys_delete_module.isra.0+0x197/0x2e0
     do_syscall_64+0x7b/0x160
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Tested with mt7921e but the same pattern can be actually applied to other
    mt76 drivers calling mt76_dma_cleanup() during removal. Tx napi is enabled
    in their *_dma_init() functions and only toggled off and on again inside
    their suspend/resume/reset paths. So it should be okay to disable tx
    napi in such a generic way.
    
    Found by Linux Verification Center (linuxtesting.org).
    
    Fixes: 2ac515a5d74f ("mt76: mt76x02: use napi polling for tx cleanup")
    Cc: [email protected]
    Signed-off-by: Fedor Pchelkin <[email protected]>
    Tested-by: Ming Yen Hsieh <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Felix Fietkau <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86,nospec: Simplify {JMP,CALL}_NOSPEC [+ + +]
Author: Peter Zijlstra <[email protected]>
Date:   Fri May 16 16:59:44 2025 -0700

    x86,nospec: Simplify {JMP,CALL}_NOSPEC
    
    commit 09d09531a51a24635bc3331f56d92ee7092f5516 upstream.
    
    Have {JMP,CALL}_NOSPEC generate the same code GCC does for indirect
    calls and rely on the objtool retpoline patching infrastructure.
    
    There's no reason these should be alternatives while the vast bulk of
    compiler generated retpolines are not.
    
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Signed-off-by: Pawan Gupta <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86/alternative: Optimize returns patching [+ + +]
Author: Borislav Petkov (AMD) <[email protected]>
Date:   Fri May 16 17:01:32 2025 -0700

    x86/alternative: Optimize returns patching
    
    commit d2408e043e7296017420aa5929b3bba4d5e61013 upstream.
    
    Instead of decoding each instruction in the return sites range only to
    realize that that return site is a jump to the default return thunk
    which is needed - X86_FEATURE_RETHUNK is enabled - lift that check
    before the loop and get rid of that loop overhead.
    
    Add comments about what gets patched, while at it.
    
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Acked-by: Peter Zijlstra (Intel) <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Pawan Gupta <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86/alternatives: Remove faulty optimization [+ + +]
Author: Josh Poimboeuf <[email protected]>
Date:   Fri May 16 17:01:47 2025 -0700

    x86/alternatives: Remove faulty optimization
    
    commit 4ba89dd6ddeca2a733bdaed7c9a5cbe4e19d9124 upstream.
    
    The following commit
    
      095b8303f383 ("x86/alternative: Make custom return thunk unconditional")
    
    made '__x86_return_thunk' a placeholder value.  All code setting
    X86_FEATURE_RETHUNK also changes the value of 'x86_return_thunk'.  So
    the optimization at the beginning of apply_returns() is dead code.
    
    Also, before the above-mentioned commit, the optimization actually had a
    bug It bypassed __static_call_fixup(), causing some raw returns to
    remain unpatched in static call trampolines.  Thus the 'Fixes' tag.
    
    Fixes: d2408e043e72 ("x86/alternative: Optimize returns patching")
    Signed-off-by: Josh Poimboeuf <[email protected]>
    Signed-off-by: Ingo Molnar <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Acked-by: Borislav Petkov (AMD) <[email protected]>
    Link: https://lore.kernel.org/r/16d19d2249d4485d8380fb215ffaae81e6b8119e.1693889988.git.jpoimboe@kernel.org
    Signed-off-by: Pawan Gupta <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86/its: Add "vmexit" option to skip mitigation on some CPUs [+ + +]
Author: Pawan Gupta <[email protected]>
Date:   Fri May 16 17:02:35 2025 -0700

    x86/its: Add "vmexit" option to skip mitigation on some CPUs
    
    commit 2665281a07e19550944e8354a2024635a7b2714a upstream.
    
    Ice Lake generation CPUs are not affected by guest/host isolation part of
    ITS. If a user is only concerned about KVM guests, they can now choose a
    new cmdline option "vmexit" that will not deploy the ITS mitigation when
    CPU is not affected by guest/host isolation. This saves the performance
    overhead of ITS mitigation on Ice Lake gen CPUs.
    
    When "vmexit" option selected, if the CPU is affected by ITS guest/host
    isolation, the default ITS mitigation is deployed.
    
    Signed-off-by: Pawan Gupta <[email protected]>
    Signed-off-by: Dave Hansen <[email protected]>
    Reviewed-by: Josh Poimboeuf <[email protected]>
    Reviewed-by: Alexandre Chartre <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

x86/its: Add support for ITS-safe indirect thunk [+ + +]
Author: Pawan Gupta <[email protected]>
Date:   Fri May 16 17:01:17 2025 -0700

    x86/its: Add support for ITS-safe indirect thunk
    
    commit 8754e67ad4ac692c67ff1f99c0d07156f04ae40c upstream.
    
    Due to ITS, indirect branches in the lower half of a cacheline may be
    vulnerable to branch target injection attack.
    
    Introduce ITS-safe thunks to patch indirect branches in the lower half of
    cacheline with the thunk. Also thunk any eBPF generated indirect branches
    in emit_indirect_jump().
    
    Below category of indirect branches are not mitigated:
    
    - Indirect branches in the .init section are not mitigated because they are
      discarded after boot.
    - Indirect branches that are explicitly marked retpoline-safe.
    
    Note that retpoline also mitigates the indirect branches against ITS. This
    is because the retpoline sequence fills an RSB entry before RET, and it
    does not suffer from RSB-underflow part of the ITS.
    
    Signed-off-by: Pawan Gupta <[email protected]>
    Signed-off-by: Dave Hansen <[email protected]>
    Reviewed-by: Josh Poimboeuf <[email protected]>
    Reviewed-by: Alexandre Chartre <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

x86/its: Add support for ITS-safe return thunk [+ + +]
Author: Pawan Gupta <[email protected]>
Date:   Fri May 16 17:02:03 2025 -0700

    x86/its: Add support for ITS-safe return thunk
    
    commit a75bf27fe41abe658c53276a0c486c4bf9adecfc upstream.
    
    RETs in the lower half of cacheline may be affected by ITS bug,
    specifically when the RSB-underflows. Use ITS-safe return thunk for such
    RETs.
    
    RETs that are not patched:
    
    - RET in retpoline sequence does not need to be patched, because the
      sequence itself fills an RSB before RET.
    - RETs in .init section are not reachable after init.
    - RETs that are explicitly marked safe with ANNOTATE_UNRET_SAFE.
    
    Signed-off-by: Pawan Gupta <[email protected]>
    Signed-off-by: Dave Hansen <[email protected]>
    Reviewed-by: Josh Poimboeuf <[email protected]>
    Reviewed-by: Alexandre Chartre <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

x86/its: Align RETs in BHB clear sequence to avoid thunking [+ + +]
Author: Pawan Gupta <[email protected]>
Date:   Fri May 16 17:02:50 2025 -0700

    x86/its: Align RETs in BHB clear sequence to avoid thunking
    
    commit f0cd7091cc5a032c8870b4285305d9172569d126 upstream.
    
    The software mitigation for BHI is to execute BHB clear sequence at syscall
    entry, and possibly after a cBPF program. ITS mitigation thunks RETs in the
    lower half of the cacheline. This causes the RETs in the BHB clear sequence
    to be thunked as well, adding unnecessary branches to the BHB clear
    sequence.
    
    Since the sequence is in hot path, align the RET instructions in the
    sequence to avoid thunking.
    
    This is how disassembly clear_bhb_loop() looks like after this change:
    
       0x44 <+4>:     mov    $0x5,%ecx
       0x49 <+9>:     call   0xffffffff81001d9b <clear_bhb_loop+91>
       0x4e <+14>:    jmp    0xffffffff81001de5 <clear_bhb_loop+165>
       0x53 <+19>:    int3
       ...
       0x9b <+91>:    call   0xffffffff81001dce <clear_bhb_loop+142>
       0xa0 <+96>:    ret
       0xa1 <+97>:    int3
       ...
       0xce <+142>:   mov    $0x5,%eax
       0xd3 <+147>:   jmp    0xffffffff81001dd6 <clear_bhb_loop+150>
       0xd5 <+149>:   nop
       0xd6 <+150>:   sub    $0x1,%eax
       0xd9 <+153>:   jne    0xffffffff81001dd3 <clear_bhb_loop+147>
       0xdb <+155>:   sub    $0x1,%ecx
       0xde <+158>:   jne    0xffffffff81001d9b <clear_bhb_loop+91>
       0xe0 <+160>:   ret
       0xe1 <+161>:   int3
       0xe2 <+162>:   int3
       0xe3 <+163>:   int3
       0xe4 <+164>:   int3
       0xe5 <+165>:   lfence
       0xe8 <+168>:   pop    %rbp
       0xe9 <+169>:   ret
    
    Suggested-by: Andrew Cooper <[email protected]>
    Signed-off-by: Pawan Gupta <[email protected]>
    Signed-off-by: Dave Hansen <[email protected]>
    Reviewed-by: Alexandre Chartre <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

x86/its: Enable Indirect Target Selection mitigation [+ + +]
Author: Pawan Gupta <[email protected]>
Date:   Fri May 16 17:02:19 2025 -0700

    x86/its: Enable Indirect Target Selection mitigation
    
    commit f4818881c47fd91fcb6d62373c57c7844e3de1c0 upstream.
    
    Indirect Target Selection (ITS) is a bug in some pre-ADL Intel CPUs with
    eIBRS. It affects prediction of indirect branch and RETs in the
    lower half of cacheline. Due to ITS such branches may get wrongly predicted
    to a target of (direct or indirect) branch that is located in the upper
    half of the cacheline.
    
    Scope of impact
    ===============
    
    Guest/host isolation
    --------------------
    When eIBRS is used for guest/host isolation, the indirect branches in the
    VMM may still be predicted with targets corresponding to branches in the
    guest.
    
    Intra-mode
    ----------
    cBPF or other native gadgets can be used for intra-mode training and
    disclosure using ITS.
    
    User/kernel isolation
    ---------------------
    When eIBRS is enabled user/kernel isolation is not impacted.
    
    Indirect Branch Prediction Barrier (IBPB)
    -----------------------------------------
    After an IBPB, indirect branches may be predicted with targets
    corresponding to direct branches which were executed prior to IBPB. This is
    mitigated by a microcode update.
    
    Add cmdline parameter indirect_target_selection=off|on|force to control the
    mitigation to relocate the affected branches to an ITS-safe thunk i.e.
    located in the upper half of cacheline. Also add the sysfs reporting.
    
    When retpoline mitigation is deployed, ITS safe-thunks are not needed,
    because retpoline sequence is already ITS-safe. Similarly, when call depth
    tracking (CDT) mitigation is deployed (retbleed=stuff), ITS safe return
    thunk is not used, as CDT prevents RSB-underflow.
    
    To not overcomplicate things, ITS mitigation is not supported with
    spectre-v2 lfence;jmp mitigation. Moreover, it is less practical to deploy
    lfence;jmp mitigation on ITS affected parts anyways.
    
    Signed-off-by: Pawan Gupta <[email protected]>
    Signed-off-by: Dave Hansen <[email protected]>
    Reviewed-by: Josh Poimboeuf <[email protected]>
    Reviewed-by: Alexandre Chartre <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

x86/its: Enumerate Indirect Target Selection (ITS) bug [+ + +]
Author: Pawan Gupta <[email protected]>
Date:   Fri May 16 17:01:01 2025 -0700

    x86/its: Enumerate Indirect Target Selection (ITS) bug
    
    commit 159013a7ca18c271ff64192deb62a689b622d860 upstream.
    
    ITS bug in some pre-Alderlake Intel CPUs may allow indirect branches in the
    first half of a cache line get predicted to a target of a branch located in
    the second half of the cache line.
    
    Set X86_BUG_ITS on affected CPUs. Mitigation to follow in later commits.
    
    Signed-off-by: Pawan Gupta <[email protected]>
    Signed-off-by: Dave Hansen <[email protected]>
    Reviewed-by: Josh Poimboeuf <[email protected]>
    Reviewed-by: Alexandre Chartre <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

x86/its: FineIBT-paranoid vs ITS [+ + +]
Author: Peter Zijlstra <[email protected]>
Date:   Fri May 16 17:03:37 2025 -0700

    x86/its: FineIBT-paranoid vs ITS
    
    commit e52c1dc7455d32c8a55f9949d300e5e87d011fa6 upstream.
    
    FineIBT-paranoid was using the retpoline bytes for the paranoid check,
    disabling retpolines, because all parts that have IBT also have eIBRS
    and thus don't need no stinking retpolines.
    
    Except... ITS needs the retpolines for indirect calls must not be in
    the first half of a cacheline :-/
    
    So what was the paranoid call sequence:
    
      <fineibt_paranoid_start>:
       0:   41 ba 78 56 34 12       mov    $0x12345678, %r10d
       6:   45 3b 53 f7             cmp    -0x9(%r11), %r10d
       a:   4d 8d 5b <f0>           lea    -0x10(%r11), %r11
       e:   75 fd                   jne    d <fineibt_paranoid_start+0xd>
      10:   41 ff d3                call   *%r11
      13:   90                      nop
    
    Now becomes:
    
      <fineibt_paranoid_start>:
       0:   41 ba 78 56 34 12       mov    $0x12345678, %r10d
       6:   45 3b 53 f7             cmp    -0x9(%r11), %r10d
       a:   4d 8d 5b f0             lea    -0x10(%r11), %r11
       e:   2e e8 XX XX XX XX       cs call __x86_indirect_paranoid_thunk_r11
    
      Where the paranoid_thunk looks like:
    
       1d:  <ea>                    (bad)
       __x86_indirect_paranoid_thunk_r11:
       1e:  75 fd                   jne 1d
       __x86_indirect_its_thunk_r11:
       20:  41 ff eb                jmp *%r11
       23:  cc                      int3
    
    [ dhansen: remove initialization to false ]
    
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Signed-off-by: Pawan Gupta <[email protected]>
    Signed-off-by: Dave Hansen <[email protected]>
    Reviewed-by: Alexandre Chartre <[email protected]>
    [ Just a portion of the original commit, in order to fix a build issue
      in stable kernels due to backports ]
    Tested-by: Holger Hoffstätte <[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]>

x86/its: Fix build errors when CONFIG_MODULES=n [+ + +]
Author: Eric Biggers <[email protected]>
Date:   Fri May 16 17:03:22 2025 -0700

    x86/its: Fix build errors when CONFIG_MODULES=n
    
    commit 9f35e33144ae5377d6a8de86dd3bd4d995c6ac65 upstream.
    
    Fix several build errors when CONFIG_MODULES=n, including the following:
    
    ../arch/x86/kernel/alternative.c:195:25: error: incomplete definition of type 'struct module'
      195 |         for (int i = 0; i < mod->its_num_pages; i++) {
    
      [ pawan: backport: Bring ITS dynamic thunk code under CONFIG_MODULES ]
    
    Fixes: 872df34d7c51 ("x86/its: Use dynamic thunks for indirect branches")
    Cc: [email protected]
    Signed-off-by: Eric Biggers <[email protected]>
    Acked-by: Dave Hansen <[email protected]>
    Tested-by: Steven Rostedt (Google) <[email protected]>
    Reviewed-by: Alexandre Chartre <[email protected]>
    Signed-off-by: Linus Torvalds <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Pawan Gupta <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

x86/its: Use dynamic thunks for indirect branches [+ + +]
Author: Peter Zijlstra <[email protected]>
Date:   Fri May 16 17:03:06 2025 -0700

    x86/its: Use dynamic thunks for indirect branches
    
    commit 872df34d7c51a79523820ea6a14860398c639b87 upstream.
    
    ITS mitigation moves the unsafe indirect branches to a safe thunk. This
    could degrade the prediction accuracy as the source address of indirect
    branches becomes same for different execution paths.
    
    To improve the predictions, and hence the performance, assign a separate
    thunk for each indirect callsite. This is also a defense-in-depth measure
    to avoid indirect branches aliasing with each other.
    
    As an example, 5000 dynamic thunks would utilize around 16 bits of the
    address space, thereby gaining entropy. For a BTB that uses
    32 bits for indexing, dynamic thunks could provide better prediction
    accuracy over fixed thunks.
    
    Have ITS thunks be variable sized and use EXECMEM_MODULE_TEXT such that
    they are both more flexible (got to extend them later) and live in 2M TLBs,
    just like kernel code, avoiding undue TLB pressure.
    
      [ pawan: CONFIG_EXECMEM and CONFIG_EXECMEM_ROX are not supported on
               backport kernel, made changes to use module_alloc() and
               set_memory_*() for dynamic thunks. ]
    
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Signed-off-by: Pawan Gupta <[email protected]>
    Signed-off-by: Dave Hansen <[email protected]>
    Reviewed-by: Alexandre Chartre <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86/modules: Set VM_FLUSH_RESET_PERMS in module_alloc() [+ + +]
Author: Thomas Gleixner <[email protected]>
Date:   Thu Sep 15 13:10:44 2022 +0200

    x86/modules: Set VM_FLUSH_RESET_PERMS in module_alloc()
    
    commit 4c4eb3ecc91f4fee6d6bf7cfbc1e21f2e38d19ff upstream.
    
    Instead of resetting permissions all over the place when freeing module
    memory tell the vmalloc code to do so. Avoids the exercise for the next
    upcoming user.
    
    Signed-off-by: Thomas Gleixner <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86/speculation: Add a conditional CS prefix to CALL_NOSPEC [+ + +]
Author: Pawan Gupta <[email protected]>
Date:   Fri May 16 17:00:15 2025 -0700

    x86/speculation: Add a conditional CS prefix to CALL_NOSPEC
    
    commit 052040e34c08428a5a388b85787e8531970c0c67 upstream.
    
    Retpoline mitigation for spectre-v2 uses thunks for indirect branches. To
    support this mitigation compilers add a CS prefix with
    -mindirect-branch-cs-prefix. For an indirect branch in asm, this needs to
    be added manually.
    
    CS prefix is already being added to indirect branches in asm files, but not
    in inline asm. Add CS prefix to CALL_NOSPEC for inline asm as well. There
    is no JMP_NOSPEC for inline asm.
    
    Reported-by: Josh Poimboeuf <[email protected]>
    Signed-off-by: Pawan Gupta <[email protected]>
    Signed-off-by: Ingo Molnar <[email protected]>
    Cc: Andrew Cooper <[email protected]
    Cc: Linus Torvalds <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

x86/speculation: Remove the extra #ifdef around CALL_NOSPEC [+ + +]
Author: Pawan Gupta <[email protected]>
Date:   Fri May 16 17:00:30 2025 -0700

    x86/speculation: Remove the extra #ifdef around CALL_NOSPEC
    
    commit c8c81458863ab686cda4fe1e603fccaae0f12460 upstream.
    
    Commit:
    
      010c4a461c1d ("x86/speculation: Simplify and make CALL_NOSPEC consistent")
    
    added an #ifdef CONFIG_RETPOLINE around the CALL_NOSPEC definition. This is
    not required as this code is already under a larger #ifdef.
    
    Remove the extra #ifdef, no functional change.
    
    vmlinux size remains same before and after this change:
    
     CONFIG_RETPOLINE=y:
          text       data        bss         dec        hex    filename
      25434752    7342290    2301212    35078254    217406e    vmlinux.before
      25434752    7342290    2301212    35078254    217406e    vmlinux.after
    
     # CONFIG_RETPOLINE is not set:
          text       data        bss         dec        hex    filename
      22943094    6214994    1550152    30708240    1d49210    vmlinux.before
      22943094    6214994    1550152    30708240    1d49210    vmlinux.after
    
      [ pawan: s/CONFIG_MITIGATION_RETPOLINE/CONFIG_RETPOLINE/ ]
    
    Signed-off-by: Pawan Gupta <[email protected]>
    Signed-off-by: Ingo Molnar <[email protected]>
    Reviewed-by: Josh Poimboeuf <[email protected]>
    Link: https://lore.kernel.org/r/20250320-call-nospec-extra-ifdef-v1-1-d9b084d24820@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

x86/speculation: Simplify and make CALL_NOSPEC consistent [+ + +]
Author: Pawan Gupta <[email protected]>
Date:   Fri May 16 16:59:59 2025 -0700

    x86/speculation: Simplify and make CALL_NOSPEC consistent
    
    commit cfceff8526a426948b53445c02bcb98453c7330d upstream.
    
    CALL_NOSPEC macro is used to generate Spectre-v2 mitigation friendly
    indirect branches. At compile time the macro defaults to indirect branch,
    and at runtime those can be patched to thunk based mitigations.
    
    This approach is opposite of what is done for the rest of the kernel, where
    the compile time default is to replace indirect calls with retpoline thunk
    calls.
    
    Make CALL_NOSPEC consistent with the rest of the kernel, default to
    retpoline thunk at compile time when CONFIG_RETPOLINE is
    enabled.
    
      [ pawan: s/CONFIG_MITIGATION_RETPOLINE/CONFIG_RETPOLINE/ ]
    
    Signed-off-by: Pawan Gupta <[email protected]>
    Signed-off-by: Ingo Molnar <[email protected]>
    Cc: Andrew Cooper <[email protected]
    Cc: Linus Torvalds <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>