Changelog in Linux kernel 6.1.125

 
ACPI: resource: Add Asus Vivobook X1504VAP to irq1_level_low_skip_override[] [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Fri Dec 20 19:13:52 2024 +0100

    ACPI: resource: Add Asus Vivobook X1504VAP to irq1_level_low_skip_override[]
    
    commit 66d337fede44dcbab4107d37684af8fcab3d648e upstream.
    
    Like the Vivobook X1704VAP the X1504VAP has its keyboard IRQ (1) described
    as ActiveLow in the DSDT, which the kernel overrides to EdgeHigh which
    breaks the keyboard.
    
    Add the X1504VAP to the irq1_level_low_skip_override[] quirk table to fix
    this.
    
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219224
    Cc: All applicable <stable@vger.kernel.org>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://patch.msgid.link/20241220181352.25974-1-hdegoede@redhat.com
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ACPI: resource: Add TongFang GM5HG0A to irq1_edge_low_force_override[] [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Sat Dec 28 17:48:45 2024 +0100

    ACPI: resource: Add TongFang GM5HG0A to irq1_edge_low_force_override[]
    
    commit 7ed4e4a659d99499dc6968c61970d41b64feeac0 upstream.
    
    The TongFang GM5HG0A is a TongFang barebone design which is sold under
    various brand names.
    
    The ACPI IRQ override for the keyboard IRQ must be used on these AMD Zen
    laptops in order for the IRQ to work.
    
    At least on the SKIKK Vanaheim variant the DMI product- and board-name
    strings have been replaced by the OEM with "Vanaheim" so checking that
    board-name contains "GM5HG0A" as is usually done for TongFang barebones
    quirks does not work.
    
    The DMI OEM strings do contain "GM5HG0A". I have looked at the dmidecode
    for a few other TongFang devices and the TongFang code-name string being
    in the OEM strings seems to be something which is consistently true.
    
    Add a quirk checking one of the DMI_OEM_STRING(s) is "GM5HG0A" in the hope
    that this will work for other OEM versions of the "GM5HG0A" too.
    
    Link: https://www.skikk.eu/en/laptops/vanaheim-15-rtx-4060
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219614
    Cc: All applicable <stable@vger.kernel.org>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://patch.msgid.link/20241228164845.42381-1-hdegoede@redhat.com
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
afs: Fix the maximum cell name length [+ + +]
Author: David Howells <dhowells@redhat.com>
Date:   Mon Jan 6 16:21:00 2025 +0000

    afs: Fix the maximum cell name length
    
    [ Upstream commit 8fd56ad6e7c90ac2bddb0741c6b248c8c5d56ac8 ]
    
    The kafs filesystem limits the maximum length of a cell to 256 bytes, but a
    problem occurs if someone actually does that: kafs tries to create a
    directory under /proc/net/afs/ with the name of the cell, but that fails
    with a warning:
    
            WARNING: CPU: 0 PID: 9 at fs/proc/generic.c:405
    
    because procfs limits the maximum filename length to 255.
    
    However, the DNS limits the maximum lookup length and, by extension, the
    maximum cell name, to 255 less two (length count and trailing NUL).
    
    Fix this by limiting the maximum acceptable cellname length to 253.  This
    also allows us to be sure we can create the "/afs/.<cell>/" mountpoint too.
    
    Further, split the YFS VL record cell name maximum to be the 256 allowed by
    the protocol and ignore the record retrieved by YFSVL.GetCellName if it
    exceeds 253.
    
    Fixes: c3e9f888263b ("afs: Implement client support for the YFSVL.GetCellName RPC op")
    Reported-by: syzbot+7848fee1f1e5c53f912b@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/r/6776d25d.050a0220.3a8527.0048.GAE@google.com/
    Signed-off-by: David Howells <dhowells@redhat.com>
    Link: https://lore.kernel.org/r/376236.1736180460@warthog.procyon.org.uk
    Tested-by: syzbot+7848fee1f1e5c53f912b@syzkaller.appspotmail.com
    cc: Marc Dionne <marc.dionne@auristor.com>
    cc: linux-afs@lists.infradead.org
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
arm64: dts: rockchip: add hevc power domain clock to rk3328 [+ + +]
Author: Peter Geis <pgwipeout@gmail.com>
Date:   Sat Dec 14 22:43:39 2024 +0000

    arm64: dts: rockchip: add hevc power domain clock to rk3328
    
    [ Upstream commit 3699f2c43ea9984e00d70463f8c29baaf260ea97 ]
    
    There is a race condition at startup between disabling power domains not
    used and disabling clocks not used on the rk3328. When the clocks are
    disabled first, the hevc power domain fails to shut off leading to a
    splat of failures. Add the hevc core clock to the rk3328 power domain
    node to prevent this condition.
    
    rcu: INFO: rcu_sched detected expedited stalls on CPUs/tasks: { 3-.... }
    1087 jiffies s: 89 root: 0x8/.
    rcu: blocking rcu_node structures (internal RCU debug):
    Sending NMI from CPU 0 to CPUs 3:
    NMI backtrace for cpu 3
    CPU: 3 UID: 0 PID: 86 Comm: kworker/3:3 Not tainted 6.12.0-rc5+ #53
    Hardware name: Firefly ROC-RK3328-CC (DT)
    Workqueue: pm genpd_power_off_work_fn
    pstate: 20400005 (nzCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    pc : regmap_unlock_spinlock+0x18/0x30
    lr : regmap_read+0x60/0x88
    sp : ffff800081123c00
    x29: ffff800081123c00 x28: ffff2fa4c62cad80 x27: 0000000000000000
    x26: ffffd74e6e660eb8 x25: ffff2fa4c62cae00 x24: 0000000000000040
    x23: ffffd74e6d2f3ab8 x22: 0000000000000001 x21: ffff800081123c74
    x20: 0000000000000000 x19: ffff2fa4c0412000 x18: 0000000000000000
    x17: 77202c31203d2065 x16: 6c6469203a72656c x15: 6c6f72746e6f632d
    x14: 7265776f703a6e6f x13: 2063766568206e69 x12: 616d6f64202c3431
    x11: 347830206f742030 x10: 3430303034783020 x9 : ffffd74e6c7369e0
    x8 : 3030316666206e69 x7 : 205d383738353733 x6 : 332e31202020205b
    x5 : ffffd74e6c73fc88 x4 : ffffd74e6c73fcd4 x3 : ffffd74e6c740b40
    x2 : ffff800080015484 x1 : 0000000000000000 x0 : ffff2fa4c0412000
    Call trace:
    regmap_unlock_spinlock+0x18/0x30
    rockchip_pmu_set_idle_request+0xac/0x2c0
    rockchip_pd_power+0x144/0x5f8
    rockchip_pd_power_off+0x1c/0x30
    _genpd_power_off+0x9c/0x180
    genpd_power_off.part.0.isra.0+0x130/0x2a8
    genpd_power_off_work_fn+0x6c/0x98
    process_one_work+0x170/0x3f0
    worker_thread+0x290/0x4a8
    kthread+0xec/0xf8
    ret_from_fork+0x10/0x20
    rockchip-pm-domain ff100000.syscon:power-controller: failed to get ack on domain 'hevc', val=0x88220
    
    Fixes: 52e02d377a72 ("arm64: dts: rockchip: add core dtsi file for RK3328 SoCs")
    Signed-off-by: Peter Geis <pgwipeout@gmail.com>
    Reviewed-by: Dragan Simic <dsimic@manjaro.org>
    Link: https://lore.kernel.org/r/20241214224339.24674-1-pgwipeout@gmail.com
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ARM: dts: imxrt1050: Fix clocks for mmc [+ + +]
Author: Jesse Taube <Mr.Bossman075@gmail.com>
Date:   Mon Nov 18 10:36:41 2024 -0500

    ARM: dts: imxrt1050: Fix clocks for mmc
    
    [ Upstream commit 5f122030061db3e5d2bddd9cf5c583deaa6c54ff ]
    
    One of the usdhc1 controller's clocks should be IMXRT1050_CLK_AHB_PODF not
    IMXRT1050_CLK_OSC.
    
    Fixes: 1c4f01be3490 ("ARM: dts: imx: Add i.MXRT1050-EVK support")
    Signed-off-by: Jesse Taube <Mr.Bossman075@gmail.com>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ASoC: mediatek: disable buffer pre-allocation [+ + +]
Author: Chen-Yu Tsai <wenst@chromium.org>
Date:   Thu Dec 19 18:53:02 2024 +0800

    ASoC: mediatek: disable buffer pre-allocation
    
    [ Upstream commit 32c9c06adb5b157ef259233775a063a43746d699 ]
    
    On Chromebooks based on Mediatek MT8195 or MT8188, the audio frontend
    (AFE) is limited to accessing a very small window (1 MiB) of memory,
    which is described as a reserved memory region in the device tree.
    
    On these two platforms, the maximum buffer size is given as 512 KiB.
    The MediaTek common code uses the same value for preallocations. This
    means that only the first two PCM substreams get preallocations, and
    then the whole space is exhausted, barring any other substreams from
    working. Since the substreams used are not always the first two, this
    means audio won't work correctly.
    
    This is observed on the MT8188 Geralt Chromebooks, on which the
    "mediatek,dai-link" property was dropped when it was upstreamed. That
    property causes the driver to only register the PCM substreams listed
    in the property, and in the order given.
    
    Instead of trying to compute an optimal value and figuring out which
    streams are used, simply disable preallocation. The PCM buffers are
    managed by the core and are allocated and released on the fly. There
    should be no impact to any of the other MediaTek platforms.
    
    Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Link: https://patch.msgid.link/20241219105303.548437-1-wenst@chromium.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
block, bfq: fix waker_bfqq UAF after bfq_split_bfqq() [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Wed Jan 8 16:41:48 2025 +0800

    block, bfq: fix waker_bfqq UAF after bfq_split_bfqq()
    
    [ Upstream commit fcede1f0a043ccefe9bc6ad57f12718e42f63f1d ]
    
    Our syzkaller report a following UAF for v6.6:
    
    BUG: KASAN: slab-use-after-free in bfq_init_rq+0x175d/0x17a0 block/bfq-iosched.c:6958
    Read of size 8 at addr ffff8881b57147d8 by task fsstress/232726
    
    CPU: 2 PID: 232726 Comm: fsstress Not tainted 6.6.0-g3629d1885222 #39
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:88 [inline]
     dump_stack_lvl+0x91/0xf0 lib/dump_stack.c:106
     print_address_description.constprop.0+0x66/0x300 mm/kasan/report.c:364
     print_report+0x3e/0x70 mm/kasan/report.c:475
     kasan_report+0xb8/0xf0 mm/kasan/report.c:588
     hlist_add_head include/linux/list.h:1023 [inline]
     bfq_init_rq+0x175d/0x17a0 block/bfq-iosched.c:6958
     bfq_insert_request.isra.0+0xe8/0xa20 block/bfq-iosched.c:6271
     bfq_insert_requests+0x27f/0x390 block/bfq-iosched.c:6323
     blk_mq_insert_request+0x290/0x8f0 block/blk-mq.c:2660
     blk_mq_submit_bio+0x1021/0x15e0 block/blk-mq.c:3143
     __submit_bio+0xa0/0x6b0 block/blk-core.c:639
     __submit_bio_noacct_mq block/blk-core.c:718 [inline]
     submit_bio_noacct_nocheck+0x5b7/0x810 block/blk-core.c:747
     submit_bio_noacct+0xca0/0x1990 block/blk-core.c:847
     __ext4_read_bh fs/ext4/super.c:205 [inline]
     ext4_read_bh+0x15e/0x2e0 fs/ext4/super.c:230
     __read_extent_tree_block+0x304/0x6f0 fs/ext4/extents.c:567
     ext4_find_extent+0x479/0xd20 fs/ext4/extents.c:947
     ext4_ext_map_blocks+0x1a3/0x2680 fs/ext4/extents.c:4182
     ext4_map_blocks+0x929/0x15a0 fs/ext4/inode.c:660
     ext4_iomap_begin_report+0x298/0x480 fs/ext4/inode.c:3569
     iomap_iter+0x3dd/0x1010 fs/iomap/iter.c:91
     iomap_fiemap+0x1f4/0x360 fs/iomap/fiemap.c:80
     ext4_fiemap+0x181/0x210 fs/ext4/extents.c:5051
     ioctl_fiemap.isra.0+0x1b4/0x290 fs/ioctl.c:220
     do_vfs_ioctl+0x31c/0x11a0 fs/ioctl.c:811
     __do_sys_ioctl fs/ioctl.c:869 [inline]
     __se_sys_ioctl+0xae/0x190 fs/ioctl.c:857
     do_syscall_x64 arch/x86/entry/common.c:51 [inline]
     do_syscall_64+0x70/0x120 arch/x86/entry/common.c:81
     entry_SYSCALL_64_after_hwframe+0x78/0xe2
    
    Allocated by task 232719:
     kasan_save_stack+0x22/0x50 mm/kasan/common.c:45
     kasan_set_track+0x25/0x30 mm/kasan/common.c:52
     __kasan_slab_alloc+0x87/0x90 mm/kasan/common.c:328
     kasan_slab_alloc include/linux/kasan.h:188 [inline]
     slab_post_alloc_hook mm/slab.h:768 [inline]
     slab_alloc_node mm/slub.c:3492 [inline]
     kmem_cache_alloc_node+0x1b8/0x6f0 mm/slub.c:3537
     bfq_get_queue+0x215/0x1f00 block/bfq-iosched.c:5869
     bfq_get_bfqq_handle_split+0x167/0x5f0 block/bfq-iosched.c:6776
     bfq_init_rq+0x13a4/0x17a0 block/bfq-iosched.c:6938
     bfq_insert_request.isra.0+0xe8/0xa20 block/bfq-iosched.c:6271
     bfq_insert_requests+0x27f/0x390 block/bfq-iosched.c:6323
     blk_mq_insert_request+0x290/0x8f0 block/blk-mq.c:2660
     blk_mq_submit_bio+0x1021/0x15e0 block/blk-mq.c:3143
     __submit_bio+0xa0/0x6b0 block/blk-core.c:639
     __submit_bio_noacct_mq block/blk-core.c:718 [inline]
     submit_bio_noacct_nocheck+0x5b7/0x810 block/blk-core.c:747
     submit_bio_noacct+0xca0/0x1990 block/blk-core.c:847
     __ext4_read_bh fs/ext4/super.c:205 [inline]
     ext4_read_bh_nowait+0x15a/0x240 fs/ext4/super.c:217
     ext4_read_bh_lock+0xac/0xd0 fs/ext4/super.c:242
     ext4_bread_batch+0x268/0x500 fs/ext4/inode.c:958
     __ext4_find_entry+0x448/0x10f0 fs/ext4/namei.c:1671
     ext4_lookup_entry fs/ext4/namei.c:1774 [inline]
     ext4_lookup.part.0+0x359/0x6f0 fs/ext4/namei.c:1842
     ext4_lookup+0x72/0x90 fs/ext4/namei.c:1839
     __lookup_slow+0x257/0x480 fs/namei.c:1696
     lookup_slow fs/namei.c:1713 [inline]
     walk_component+0x454/0x5c0 fs/namei.c:2004
     link_path_walk.part.0+0x773/0xda0 fs/namei.c:2331
     link_path_walk fs/namei.c:3826 [inline]
     path_openat+0x1b9/0x520 fs/namei.c:3826
     do_filp_open+0x1b7/0x400 fs/namei.c:3857
     do_sys_openat2+0x5dc/0x6e0 fs/open.c:1428
     do_sys_open fs/open.c:1443 [inline]
     __do_sys_openat fs/open.c:1459 [inline]
     __se_sys_openat fs/open.c:1454 [inline]
     __x64_sys_openat+0x148/0x200 fs/open.c:1454
     do_syscall_x64 arch/x86/entry/common.c:51 [inline]
     do_syscall_64+0x70/0x120 arch/x86/entry/common.c:81
     entry_SYSCALL_64_after_hwframe+0x78/0xe2
    
    Freed by task 232726:
     kasan_save_stack+0x22/0x50 mm/kasan/common.c:45
     kasan_set_track+0x25/0x30 mm/kasan/common.c:52
     kasan_save_free_info+0x2b/0x50 mm/kasan/generic.c:522
     ____kasan_slab_free mm/kasan/common.c:236 [inline]
     __kasan_slab_free+0x12a/0x1b0 mm/kasan/common.c:244
     kasan_slab_free include/linux/kasan.h:164 [inline]
     slab_free_hook mm/slub.c:1827 [inline]
     slab_free_freelist_hook mm/slub.c:1853 [inline]
     slab_free mm/slub.c:3820 [inline]
     kmem_cache_free+0x110/0x760 mm/slub.c:3842
     bfq_put_queue+0x6a7/0xfb0 block/bfq-iosched.c:5428
     bfq_forget_entity block/bfq-wf2q.c:634 [inline]
     bfq_put_idle_entity+0x142/0x240 block/bfq-wf2q.c:645
     bfq_forget_idle+0x189/0x1e0 block/bfq-wf2q.c:671
     bfq_update_vtime block/bfq-wf2q.c:1280 [inline]
     __bfq_lookup_next_entity block/bfq-wf2q.c:1374 [inline]
     bfq_lookup_next_entity+0x350/0x480 block/bfq-wf2q.c:1433
     bfq_update_next_in_service+0x1c0/0x4f0 block/bfq-wf2q.c:128
     bfq_deactivate_entity+0x10a/0x240 block/bfq-wf2q.c:1188
     bfq_deactivate_bfqq block/bfq-wf2q.c:1592 [inline]
     bfq_del_bfqq_busy+0x2e8/0xad0 block/bfq-wf2q.c:1659
     bfq_release_process_ref+0x1cc/0x220 block/bfq-iosched.c:3139
     bfq_split_bfqq+0x481/0xdf0 block/bfq-iosched.c:6754
     bfq_init_rq+0xf29/0x17a0 block/bfq-iosched.c:6934
     bfq_insert_request.isra.0+0xe8/0xa20 block/bfq-iosched.c:6271
     bfq_insert_requests+0x27f/0x390 block/bfq-iosched.c:6323
     blk_mq_insert_request+0x290/0x8f0 block/blk-mq.c:2660
     blk_mq_submit_bio+0x1021/0x15e0 block/blk-mq.c:3143
     __submit_bio+0xa0/0x6b0 block/blk-core.c:639
     __submit_bio_noacct_mq block/blk-core.c:718 [inline]
     submit_bio_noacct_nocheck+0x5b7/0x810 block/blk-core.c:747
     submit_bio_noacct+0xca0/0x1990 block/blk-core.c:847
     __ext4_read_bh fs/ext4/super.c:205 [inline]
     ext4_read_bh+0x15e/0x2e0 fs/ext4/super.c:230
     __read_extent_tree_block+0x304/0x6f0 fs/ext4/extents.c:567
     ext4_find_extent+0x479/0xd20 fs/ext4/extents.c:947
     ext4_ext_map_blocks+0x1a3/0x2680 fs/ext4/extents.c:4182
     ext4_map_blocks+0x929/0x15a0 fs/ext4/inode.c:660
     ext4_iomap_begin_report+0x298/0x480 fs/ext4/inode.c:3569
     iomap_iter+0x3dd/0x1010 fs/iomap/iter.c:91
     iomap_fiemap+0x1f4/0x360 fs/iomap/fiemap.c:80
     ext4_fiemap+0x181/0x210 fs/ext4/extents.c:5051
     ioctl_fiemap.isra.0+0x1b4/0x290 fs/ioctl.c:220
     do_vfs_ioctl+0x31c/0x11a0 fs/ioctl.c:811
     __do_sys_ioctl fs/ioctl.c:869 [inline]
     __se_sys_ioctl+0xae/0x190 fs/ioctl.c:857
     do_syscall_x64 arch/x86/entry/common.c:51 [inline]
     do_syscall_64+0x70/0x120 arch/x86/entry/common.c:81
     entry_SYSCALL_64_after_hwframe+0x78/0xe2
    
    commit 1ba0403ac644 ("block, bfq: fix uaf for accessing waker_bfqq after
    splitting") fix the problem that if waker_bfqq is in the merge chain,
    and current is the only procress, waker_bfqq can be freed from
    bfq_split_bfqq(). However, the case that waker_bfqq is not in the merge
    chain is missed, and if the procress reference of waker_bfqq is 0,
    waker_bfqq can be freed as well.
    
    Fix the problem by checking procress reference if waker_bfqq is not in
    the merge_chain.
    
    Fixes: 1ba0403ac644 ("block, bfq: fix uaf for accessing waker_bfqq after splitting")
    Signed-off-by: Hou Tao <houtao1@huawei.com>
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20250108084148.1549973-1-yukuai1@huaweicloud.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Bluetooth: hci_sync: Fix not setting Random Address when required [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Mon Nov 25 15:42:09 2024 -0500

    Bluetooth: hci_sync: Fix not setting Random Address when required
    
    [ Upstream commit c2994b008492db033d40bd767be1620229a3035e ]
    
    This fixes errors such as the following when Own address type is set to
    Random Address but it has not been programmed yet due to either be
    advertising or connecting:
    
    < HCI Command: LE Set Exte.. (0x08|0x0041) plen 13
            Own address type: Random (0x03)
            Filter policy: Ignore not in accept list (0x01)
            PHYs: 0x05
            Entry 0: LE 1M
              Type: Passive (0x00)
              Interval: 60.000 msec (0x0060)
              Window: 30.000 msec (0x0030)
            Entry 1: LE Coded
              Type: Passive (0x00)
              Interval: 180.000 msec (0x0120)
              Window: 90.000 msec (0x0090)
    > HCI Event: Command Complete (0x0e) plen 4
          LE Set Extended Scan Parameters (0x08|0x0041) ncmd 1
            Status: Success (0x00)
    < HCI Command: LE Set Exten.. (0x08|0x0042) plen 6
            Extended scan: Enabled (0x01)
            Filter duplicates: Enabled (0x01)
            Duration: 0 msec (0x0000)
            Period: 0.00 sec (0x0000)
    > HCI Event: Command Complete (0x0e) plen 4
          LE Set Extended Scan Enable (0x08|0x0042) ncmd 1
            Status: Invalid HCI Command Parameters (0x12)
    
    Fixes: c45074d68a9b ("Bluetooth: Fix not generating RPA when required")
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bnxt_en: Fix possible memory leak when hwrm_req_replace fails [+ + +]
Author: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Date:   Fri Jan 3 20:38:47 2025 -0800

    bnxt_en: Fix possible memory leak when hwrm_req_replace fails
    
    [ Upstream commit c8dafb0e4398dacc362832098a04b97da3b0395b ]
    
    When hwrm_req_replace() fails, the driver is not invoking bnxt_req_drop()
    which could cause a memory leak.
    
    Fixes: bbf33d1d9805 ("bnxt_en: update all firmware calls to use the new APIs")
    Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
    Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Signed-off-by: Michael Chan <michael.chan@broadcom.com>
    Link: https://patch.msgid.link/20250104043849.3482067-2-michael.chan@broadcom.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf, sockmap: Fix race between element replace and close() [+ + +]
Author: Michal Luczaj <mhal@rbox.co>
Date:   Mon Dec 2 12:29:25 2024 +0100

    bpf, sockmap: Fix race between element replace and close()
    
    commit ed1fc5d76b81a4d681211333c026202cad4d5649 upstream.
    
    Element replace (with a socket different from the one stored) may race
    with socket's close() link popping & unlinking. __sock_map_delete()
    unconditionally unrefs the (wrong) element:
    
    // set map[0] = s0
    map_update_elem(map, 0, s0)
    
    // drop fd of s0
    close(s0)
      sock_map_close()
        lock_sock(sk)               (s0!)
        sock_map_remove_links(sk)
          link = sk_psock_link_pop()
          sock_map_unlink(sk, link)
            sock_map_delete_from_link
                                            // replace map[0] with s1
                                            map_update_elem(map, 0, s1)
                                              sock_map_update_elem
                                    (s1!)       lock_sock(sk)
                                                sock_map_update_common
                                                  psock = sk_psock(sk)
                                                  spin_lock(&stab->lock)
                                                  osk = stab->sks[idx]
                                                  sock_map_add_link(..., &stab->sks[idx])
                                                  sock_map_unref(osk, &stab->sks[idx])
                                                    psock = sk_psock(osk)
                                                    sk_psock_put(sk, psock)
                                                      if (refcount_dec_and_test(&psock))
                                                        sk_psock_drop(sk, psock)
                                                  spin_unlock(&stab->lock)
                                                unlock_sock(sk)
              __sock_map_delete
                spin_lock(&stab->lock)
                sk = *psk                        // s1 replaced s0; sk == s1
                if (!sk_test || sk_test == sk)   // sk_test (s0) != sk (s1); no branch
                  sk = xchg(psk, NULL)
                if (sk)
                  sock_map_unref(sk, psk)        // unref s1; sks[idx] will dangle
                    psock = sk_psock(sk)
                    sk_psock_put(sk, psock)
                      if (refcount_dec_and_test())
                        sk_psock_drop(sk, psock)
                spin_unlock(&stab->lock)
        release_sock(sk)
    
    Then close(map) enqueues bpf_map_free_deferred, which finally calls
    sock_map_free(). This results in some refcount_t warnings along with
    a KASAN splat [1].
    
    Fix __sock_map_delete(), do not allow sock_map_unref() on elements that
    may have been replaced.
    
    [1]:
    BUG: KASAN: slab-use-after-free in sock_map_free+0x10e/0x330
    Write of size 4 at addr ffff88811f5b9100 by task kworker/u64:12/1063
    
    CPU: 14 UID: 0 PID: 1063 Comm: kworker/u64:12 Not tainted 6.12.0+ #125
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Arch Linux 1.16.3-1-1 04/01/2014
    Workqueue: events_unbound bpf_map_free_deferred
    Call Trace:
     <TASK>
     dump_stack_lvl+0x68/0x90
     print_report+0x174/0x4f6
     kasan_report+0xb9/0x190
     kasan_check_range+0x10f/0x1e0
     sock_map_free+0x10e/0x330
     bpf_map_free_deferred+0x173/0x320
     process_one_work+0x846/0x1420
     worker_thread+0x5b3/0xf80
     kthread+0x29e/0x360
     ret_from_fork+0x2d/0x70
     ret_from_fork_asm+0x1a/0x30
     </TASK>
    
    Allocated by task 1202:
     kasan_save_stack+0x1e/0x40
     kasan_save_track+0x10/0x30
     __kasan_slab_alloc+0x85/0x90
     kmem_cache_alloc_noprof+0x131/0x450
     sk_prot_alloc+0x5b/0x220
     sk_alloc+0x2c/0x870
     unix_create1+0x88/0x8a0
     unix_create+0xc5/0x180
     __sock_create+0x241/0x650
     __sys_socketpair+0x1ce/0x420
     __x64_sys_socketpair+0x92/0x100
     do_syscall_64+0x93/0x180
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    Freed by task 46:
     kasan_save_stack+0x1e/0x40
     kasan_save_track+0x10/0x30
     kasan_save_free_info+0x37/0x60
     __kasan_slab_free+0x4b/0x70
     kmem_cache_free+0x1a1/0x590
     __sk_destruct+0x388/0x5a0
     sk_psock_destroy+0x73e/0xa50
     process_one_work+0x846/0x1420
     worker_thread+0x5b3/0xf80
     kthread+0x29e/0x360
     ret_from_fork+0x2d/0x70
     ret_from_fork_asm+0x1a/0x30
    
    The buggy address belongs to the object at ffff88811f5b9080
     which belongs to the cache UNIX-STREAM of size 1984
    The buggy address is located 128 bytes inside of
     freed 1984-byte region [ffff88811f5b9080, ffff88811f5b9840)
    
    The buggy address belongs to the physical page:
    page: refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x11f5b8
    head: order:3 mapcount:0 entire_mapcount:0 nr_pages_mapped:0 pincount:0
    memcg:ffff888127d49401
    flags: 0x17ffffc0000040(head|node=0|zone=2|lastcpupid=0x1fffff)
    page_type: f5(slab)
    raw: 0017ffffc0000040 ffff8881042e4500 dead000000000122 0000000000000000
    raw: 0000000000000000 00000000800f000f 00000001f5000000 ffff888127d49401
    head: 0017ffffc0000040 ffff8881042e4500 dead000000000122 0000000000000000
    head: 0000000000000000 00000000800f000f 00000001f5000000 ffff888127d49401
    head: 0017ffffc0000003 ffffea00047d6e01 ffffffffffffffff 0000000000000000
    head: 0000000000000008 0000000000000000 00000000ffffffff 0000000000000000
    page dumped because: kasan: bad access detected
    
    Memory state around the buggy address:
     ffff88811f5b9000: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
     ffff88811f5b9080: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                       ^
     ffff88811f5b9180: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff88811f5b9200: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    Disabling lock debugging due to kernel taint
    
    refcount_t: addition on 0; use-after-free.
    WARNING: CPU: 14 PID: 1063 at lib/refcount.c:25 refcount_warn_saturate+0xce/0x150
    CPU: 14 UID: 0 PID: 1063 Comm: kworker/u64:12 Tainted: G    B              6.12.0+ #125
    Tainted: [B]=BAD_PAGE
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Arch Linux 1.16.3-1-1 04/01/2014
    Workqueue: events_unbound bpf_map_free_deferred
    RIP: 0010:refcount_warn_saturate+0xce/0x150
    Code: 34 73 eb 03 01 e8 82 53 ad fe 0f 0b eb b1 80 3d 27 73 eb 03 00 75 a8 48 c7 c7 80 bd 95 84 c6 05 17 73 eb 03 01 e8 62 53 ad fe <0f> 0b eb 91 80 3d 06 73 eb 03 00 75 88 48 c7 c7 e0 bd 95 84 c6 05
    RSP: 0018:ffff88815c49fc70 EFLAGS: 00010282
    RAX: 0000000000000000 RBX: ffff88811f5b9100 RCX: 0000000000000000
    RDX: 0000000000000000 RSI: 0000000000000004 RDI: 0000000000000001
    RBP: 0000000000000002 R08: 0000000000000001 R09: ffffed10bcde6349
    R10: ffff8885e6f31a4b R11: 0000000000000000 R12: ffff88813be0b000
    R13: ffff88811f5b9100 R14: ffff88811f5b9080 R15: ffff88813be0b024
    FS:  0000000000000000(0000) GS:ffff8885e6f00000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 000055dda99b0250 CR3: 000000015dbac000 CR4: 0000000000752ef0
    PKRU: 55555554
    Call Trace:
     <TASK>
     ? __warn.cold+0x5f/0x1ff
     ? refcount_warn_saturate+0xce/0x150
     ? report_bug+0x1ec/0x390
     ? handle_bug+0x58/0x90
     ? exc_invalid_op+0x13/0x40
     ? asm_exc_invalid_op+0x16/0x20
     ? refcount_warn_saturate+0xce/0x150
     sock_map_free+0x2e5/0x330
     bpf_map_free_deferred+0x173/0x320
     process_one_work+0x846/0x1420
     worker_thread+0x5b3/0xf80
     kthread+0x29e/0x360
     ret_from_fork+0x2d/0x70
     ret_from_fork_asm+0x1a/0x30
     </TASK>
    irq event stamp: 10741
    hardirqs last  enabled at (10741): [<ffffffff84400ec6>] asm_sysvec_apic_timer_interrupt+0x16/0x20
    hardirqs last disabled at (10740): [<ffffffff811e532d>] handle_softirqs+0x60d/0x770
    softirqs last  enabled at (10506): [<ffffffff811e55a9>] __irq_exit_rcu+0x109/0x210
    softirqs last disabled at (10301): [<ffffffff811e55a9>] __irq_exit_rcu+0x109/0x210
    
    refcount_t: underflow; use-after-free.
    WARNING: CPU: 14 PID: 1063 at lib/refcount.c:28 refcount_warn_saturate+0xee/0x150
    CPU: 14 UID: 0 PID: 1063 Comm: kworker/u64:12 Tainted: G    B   W          6.12.0+ #125
    Tainted: [B]=BAD_PAGE, [W]=WARN
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Arch Linux 1.16.3-1-1 04/01/2014
    Workqueue: events_unbound bpf_map_free_deferred
    RIP: 0010:refcount_warn_saturate+0xee/0x150
    Code: 17 73 eb 03 01 e8 62 53 ad fe 0f 0b eb 91 80 3d 06 73 eb 03 00 75 88 48 c7 c7 e0 bd 95 84 c6 05 f6 72 eb 03 01 e8 42 53 ad fe <0f> 0b e9 6e ff ff ff 80 3d e6 72 eb 03 00 0f 85 61 ff ff ff 48 c7
    RSP: 0018:ffff88815c49fc70 EFLAGS: 00010282
    RAX: 0000000000000000 RBX: ffff88811f5b9100 RCX: 0000000000000000
    RDX: 0000000000000000 RSI: 0000000000000004 RDI: 0000000000000001
    RBP: 0000000000000003 R08: 0000000000000001 R09: ffffed10bcde6349
    R10: ffff8885e6f31a4b R11: 0000000000000000 R12: ffff88813be0b000
    R13: ffff88811f5b9100 R14: ffff88811f5b9080 R15: ffff88813be0b024
    FS:  0000000000000000(0000) GS:ffff8885e6f00000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 000055dda99b0250 CR3: 000000015dbac000 CR4: 0000000000752ef0
    PKRU: 55555554
    Call Trace:
     <TASK>
     ? __warn.cold+0x5f/0x1ff
     ? refcount_warn_saturate+0xee/0x150
     ? report_bug+0x1ec/0x390
     ? handle_bug+0x58/0x90
     ? exc_invalid_op+0x13/0x40
     ? asm_exc_invalid_op+0x16/0x20
     ? refcount_warn_saturate+0xee/0x150
     sock_map_free+0x2d3/0x330
     bpf_map_free_deferred+0x173/0x320
     process_one_work+0x846/0x1420
     worker_thread+0x5b3/0xf80
     kthread+0x29e/0x360
     ret_from_fork+0x2d/0x70
     ret_from_fork_asm+0x1a/0x30
     </TASK>
    irq event stamp: 10741
    hardirqs last  enabled at (10741): [<ffffffff84400ec6>] asm_sysvec_apic_timer_interrupt+0x16/0x20
    hardirqs last disabled at (10740): [<ffffffff811e532d>] handle_softirqs+0x60d/0x770
    softirqs last  enabled at (10506): [<ffffffff811e55a9>] __irq_exit_rcu+0x109/0x210
    softirqs last disabled at (10301): [<ffffffff811e55a9>] __irq_exit_rcu+0x109/0x210
    
    Fixes: 604326b41a6f ("bpf, sockmap: convert to generic sk_msg interface")
    Signed-off-by: Michal Luczaj <mhal@rbox.co>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: John Fastabend <john.fastabend@gmail.com>
    Link: https://lore.kernel.org/bpf/20241202-sockmap-replace-v1-3-1e88579e7bd5@rbox.co
    Signed-off-by: Alva Lan <alvalan9@foxmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
bpf: Add MEM_WRITE attribute [+ + +]
Author: Daniel Borkmann <daniel@iogearbox.net>
Date:   Mon Oct 21 17:28:05 2024 +0200

    bpf: Add MEM_WRITE attribute
    
    commit 6fad274f06f038c29660aa53fbad14241c9fd976 upstream.
    
    Add a MEM_WRITE attribute for BPF helper functions which can be used in
    bpf_func_proto to annotate an argument type in order to let the verifier
    know that the helper writes into the memory passed as an argument. In
    the past MEM_UNINIT has been (ab)used for this function, but the latter
    merely tells the verifier that the passed memory can be uninitialized.
    
    There have been bugs with overloading the latter but aside from that
    there are also cases where the passed memory is read + written which
    currently cannot be expressed, see also 4b3786a6c539 ("bpf: Zero former
    ARG_PTR_TO_{LONG,INT} args in case of error").
    
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
    Link: https://lore.kernel.org/r/20241021152809.33343-1-daniel@iogearbox.net
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: BRUNO VERNAY <bruno.vernay@se.com>
    Signed-off-by: Hugo SIMELIERE <hsimeliere.opensource@witekio.com>
    Stable-dep-of: 8ea607330a39 ("bpf: Fix overloading of MEM_UNINIT's meaning")
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

bpf: Fix overloading of MEM_UNINIT's meaning [+ + +]
Author: Daniel Borkmann <daniel@iogearbox.net>
Date:   Mon Oct 21 17:28:06 2024 +0200

    bpf: Fix overloading of MEM_UNINIT's meaning
    
    commit 8ea607330a39184f51737c6ae706db7fdca7628e upstream.
    
    Lonial reported an issue in the BPF verifier where check_mem_size_reg()
    has the following code:
    
        if (!tnum_is_const(reg->var_off))
            /* For unprivileged variable accesses, disable raw
             * mode so that the program is required to
             * initialize all the memory that the helper could
             * just partially fill up.
             */
             meta = NULL;
    
    This means that writes are not checked when the register containing the
    size of the passed buffer has not a fixed size. Through this bug, a BPF
    program can write to a map which is marked as read-only, for example,
    .rodata global maps.
    
    The problem is that MEM_UNINIT's initial meaning that "the passed buffer
    to the BPF helper does not need to be initialized" which was added back
    in commit 435faee1aae9 ("bpf, verifier: add ARG_PTR_TO_RAW_STACK type")
    got overloaded over time with "the passed buffer is being written to".
    
    The problem however is that checks such as the above which were added later
    via 06c1c049721a ("bpf: allow helpers access to variable memory") set meta
    to NULL in order force the user to always initialize the passed buffer to
    the helper. Due to the current double meaning of MEM_UNINIT, this bypasses
    verifier write checks to the memory (not boundary checks though) and only
    assumes the latter memory is read instead.
    
    Fix this by reverting MEM_UNINIT back to its original meaning, and having
    MEM_WRITE as an annotation to BPF helpers in order to then trigger the
    BPF verifier checks for writing to memory.
    
    Some notes: check_arg_pair_ok() ensures that for ARG_CONST_SIZE{,_OR_ZERO}
    we can access fn->arg_type[arg - 1] since it must contain a preceding
    ARG_PTR_TO_MEM. For check_mem_reg() the meta argument can be removed
    altogether since we do check both BPF_READ and BPF_WRITE. Same for the
    equivalent check_kfunc_mem_size_reg().
    
    Fixes: 7b3552d3f9f6 ("bpf: Reject writes for PTR_TO_MAP_KEY in check_helper_mem_access")
    Fixes: 97e6d7dab1ca ("bpf: Check PTR_TO_MEM | MEM_RDONLY in check_helper_mem_access")
    Fixes: 15baa55ff5b0 ("bpf/verifier: allow all functions to read user provided context")
    Reported-by: Lonial Con <kongln9170@gmail.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
    Link: https://lore.kernel.org/r/20241021152809.33343-2-daniel@iogearbox.net
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: BRUNO VERNAY <bruno.vernay@se.com>
    Signed-off-by: Hugo SIMELIERE <hsimeliere.opensource@witekio.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ceph: give up on paths longer than PATH_MAX [+ + +]
Author: Max Kellermann <max.kellermann@ionos.com>
Date:   Mon Nov 18 23:28:28 2024 +0100

    ceph: give up on paths longer than PATH_MAX
    
    commit 550f7ca98ee028a606aa75705a7e77b1bd11720f upstream.
    
    If the full path to be built by ceph_mdsc_build_path() happens to be
    longer than PATH_MAX, then this function will enter an endless (retry)
    loop, effectively blocking the whole task.  Most of the machine
    becomes unusable, making this a very simple and effective DoS
    vulnerability.
    
    I cannot imagine why this retry was ever implemented, but it seems
    rather useless and harmful to me.  Let's remove it and fail with
    ENAMETOOLONG instead.
    
    Cc: stable@vger.kernel.org
    Reported-by: Dario Weißer <dario@cure53.de>
    Signed-off-by: Max Kellermann <max.kellermann@ionos.com>
    Reviewed-by: Alex Markuze <amarkuze@redhat.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    [idryomov@gmail.com: backport to 6.1: pr_warn() is still in use]
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
cpuidle: riscv-sbi: fix device node release in early exit of for_each_possible_cpu [+ + +]
Author: Javier Carrasco <javier.carrasco.cruz@gmail.com>
Date:   Sat Nov 16 00:32:39 2024 +0100

    cpuidle: riscv-sbi: fix device node release in early exit of for_each_possible_cpu
    
    [ Upstream commit 7e25044b804581b9c029d5a28d8800aebde18043 ]
    
    The 'np' device_node is initialized via of_cpu_device_node_get(), which
    requires explicit calls to of_node_put() when it is no longer required
    to avoid leaking the resource.
    
    Instead of adding the missing calls to of_node_put() in all execution
    paths, use the cleanup attribute for 'np' by means of the __free()
    macro, which automatically calls of_node_put() when the variable goes
    out of scope. Given that 'np' is only used within the
    for_each_possible_cpu(), reduce its scope to release the nood after
    every iteration of the loop.
    
    Fixes: 6abf32f1d9c5 ("cpuidle: Add RISC-V SBI CPU idle driver")
    Reviewed-by: Andrew Jones <ajones@ventanamicro.com>
    Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
    Link: https://lore.kernel.org/r/20241116-cpuidle-riscv-sbi-cleanup-v3-1-a3a46372ce08@gmail.com
    Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
cxgb4: Avoid removal of uninserted tid [+ + +]
Author: Anumula Murali Mohan Reddy <anumula@chelsio.com>
Date:   Fri Jan 3 14:53:27 2025 +0530

    cxgb4: Avoid removal of uninserted tid
    
    [ Upstream commit 4c1224501e9d6c5fd12d83752f1c1b444e0e3418 ]
    
    During ARP failure, tid is not inserted but _c4iw_free_ep()
    attempts to remove tid which results in error.
    This patch fixes the issue by avoiding removal of uninserted tid.
    
    Fixes: 59437d78f088 ("cxgb4/chtls: fix ULD connection failures due to wrong TID base")
    Signed-off-by: Anumula Murali Mohan Reddy <anumula@chelsio.com>
    Signed-off-by: Potnuri Bharat Teja <bharat@chelsio.com>
    Link: https://patch.msgid.link/20250103092327.1011925-1-anumula@chelsio.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dm array: fix cursor index when skipping across block boundaries [+ + +]
Author: Ming-Hung Tsai <mtsai@redhat.com>
Date:   Thu Dec 5 19:41:53 2024 +0800

    dm array: fix cursor index when skipping across block boundaries
    
    [ Upstream commit 0bb1968da2737ba68fd63857d1af2b301a18d3bf ]
    
    dm_array_cursor_skip() seeks to the target position by loading array
    blocks iteratively until the specified number of entries to skip is
    reached. When seeking across block boundaries, it uses
    dm_array_cursor_next() to step into the next block.
    dm_array_cursor_skip() must first move the cursor index to the end
    of the current block; otherwise, the cursor position could incorrectly
    remain in the same block, causing the actual number of skipped entries
    to be much smaller than expected.
    
    This bug affects cache resizing in v2 metadata and could lead to data
    loss if the fast device is shrunk during the first-time resume. For
    example:
    
    1. create a cache metadata consists of 32768 blocks, with a dirty block
       assigned to the second bitmap block. cache_restore v1.0 is required.
    
    cat <<EOF >> cmeta.xml
    <superblock uuid="" block_size="64" nr_cache_blocks="32768" \
    policy="smq" hint_width="4">
      <mappings>
        <mapping cache_block="32767" origin_block="0" dirty="true"/>
      </mappings>
    </superblock>
    EOF
    dmsetup create cmeta --table "0 8192 linear /dev/sdc 0"
    cache_restore -i cmeta.xml -o /dev/mapper/cmeta --metadata-version=2
    
    2. bring up the cache while attempt to discard all the blocks belonging
       to the second bitmap block (block# 32576 to 32767). The last command
       is expected to fail, but it actually succeeds.
    
    dmsetup create cdata --table "0 2084864 linear /dev/sdc 8192"
    dmsetup create corig --table "0 65536 linear /dev/sdc 2105344"
    dmsetup create cache --table "0 65536 cache /dev/mapper/cmeta \
    /dev/mapper/cdata /dev/mapper/corig 64 2 metadata2 writeback smq \
    2 migration_threshold 0"
    
    In addition to the reproducer described above, this fix can be
    verified using the "array_cursor/skip" tests in dm-unit:
      dm-unit run /pdata/array_cursor/skip/ --kernel-dir <KERNEL_DIR>
    
    Signed-off-by: Ming-Hung Tsai <mtsai@redhat.com>
    Fixes: 9b696229aa7d ("dm persistent data: add cursor skip functions to the cursor APIs")
    Reviewed-by: Joe Thornber <thornber@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

dm array: fix releasing a faulty array block twice in dm_array_cursor_end [+ + +]
Author: Ming-Hung Tsai <mtsai@redhat.com>
Date:   Thu Dec 5 19:41:51 2024 +0800

    dm array: fix releasing a faulty array block twice in dm_array_cursor_end
    
    [ Upstream commit f2893c0804d86230ffb8f1c8703fdbb18648abc8 ]
    
    When dm_bm_read_lock() fails due to locking or checksum errors, it
    releases the faulty block implicitly while leaving an invalid output
    pointer behind. The caller of dm_bm_read_lock() should not operate on
    this invalid dm_block pointer, or it will lead to undefined result.
    For example, the dm_array_cursor incorrectly caches the invalid pointer
    on reading a faulty array block, causing a double release in
    dm_array_cursor_end(), then hitting the BUG_ON in dm-bufio cache_put().
    
    Reproduce steps:
    
    1. initialize a cache device
    
    dmsetup create cmeta --table "0 8192 linear /dev/sdc 0"
    dmsetup create cdata --table "0 65536 linear /dev/sdc 8192"
    dmsetup create corig --table "0 524288 linear /dev/sdc $262144"
    dd if=/dev/zero of=/dev/mapper/cmeta bs=4k count=1
    dmsetup create cache --table "0 524288 cache /dev/mapper/cmeta \
    /dev/mapper/cdata /dev/mapper/corig 128 2 metadata2 writethrough smq 0"
    
    2. wipe the second array block offline
    
    dmsteup remove cache cmeta cdata corig
    mapping_root=$(dd if=/dev/sdc bs=1c count=8 skip=192 \
    2>/dev/null | hexdump -e '1/8 "%u\n"')
    ablock=$(dd if=/dev/sdc bs=1c count=8 skip=$((4096*mapping_root+2056)) \
    2>/dev/null | hexdump -e '1/8 "%u\n"')
    dd if=/dev/zero of=/dev/sdc bs=4k count=1 seek=$ablock
    
    3. try reopen the cache device
    
    dmsetup create cmeta --table "0 8192 linear /dev/sdc 0"
    dmsetup create cdata --table "0 65536 linear /dev/sdc 8192"
    dmsetup create corig --table "0 524288 linear /dev/sdc $262144"
    dmsetup create cache --table "0 524288 cache /dev/mapper/cmeta \
    /dev/mapper/cdata /dev/mapper/corig 128 2 metadata2 writethrough smq 0"
    
    Kernel logs:
    
    (snip)
    device-mapper: array: array_block_check failed: blocknr 0 != wanted 10
    device-mapper: block manager: array validator check failed for block 10
    device-mapper: array: get_ablock failed
    device-mapper: cache metadata: dm_array_cursor_next for mapping failed
    ------------[ cut here ]------------
    kernel BUG at drivers/md/dm-bufio.c:638!
    
    Fix by setting the cached block pointer to NULL on errors.
    
    In addition to the reproducer described above, this fix can be
    verified using the "array_cursor/damaged" test in dm-unit:
      dm-unit run /pdata/array_cursor/damaged --kernel-dir <KERNEL_DIR>
    
    Signed-off-by: Ming-Hung Tsai <mtsai@redhat.com>
    Fixes: fdd1315aa5f0 ("dm array: introduce cursor api")
    Reviewed-by: Joe Thornber <thornber@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

dm array: fix unreleased btree blocks on closing a faulty array cursor [+ + +]
Author: Ming-Hung Tsai <mtsai@redhat.com>
Date:   Thu Dec 5 19:41:52 2024 +0800

    dm array: fix unreleased btree blocks on closing a faulty array cursor
    
    [ Upstream commit 626f128ee9c4133b1cfce4be2b34a1508949370e ]
    
    The cached block pointer in dm_array_cursor might be NULL if it reaches
    an unreadable array block, or the array is empty. Therefore,
    dm_array_cursor_end() should call dm_btree_cursor_end() unconditionally,
    to prevent leaving unreleased btree blocks.
    
    This fix can be verified using the "array_cursor/iterate/empty" test
    in dm-unit:
      dm-unit run /pdata/array_cursor/iterate/empty --kernel-dir <KERNEL_DIR>
    
    Signed-off-by: Ming-Hung Tsai <mtsai@redhat.com>
    Fixes: fdd1315aa5f0 ("dm array: introduce cursor api")
    Reviewed-by: Joe Thornber <thornber@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dm thin: make get_first_thin use rcu-safe list first function [+ + +]
Author: Krister Johansen <kjlx@templeofstupid.com>
Date:   Tue Jan 7 15:24:58 2025 -0800

    dm thin: make get_first_thin use rcu-safe list first function
    
    commit 80f130bfad1dab93b95683fc39b87235682b8f72 upstream.
    
    The documentation in rculist.h explains the absence of list_empty_rcu()
    and cautions programmers against relying on a list_empty() ->
    list_first() sequence in RCU safe code.  This is because each of these
    functions performs its own READ_ONCE() of the list head.  This can lead
    to a situation where the list_empty() sees a valid list entry, but the
    subsequent list_first() sees a different view of list head state after a
    modification.
    
    In the case of dm-thin, this author had a production box crash from a GP
    fault in the process_deferred_bios path.  This function saw a valid list
    head in get_first_thin() but when it subsequently dereferenced that and
    turned it into a thin_c, it got the inside of the struct pool, since the
    list was now empty and referring to itself.  The kernel on which this
    occurred printed both a warning about a refcount_t being saturated, and
    a UBSAN error for an out-of-bounds cpuid access in the queued spinlock,
    prior to the fault itself.  When the resulting kdump was examined, it
    was possible to see another thread patiently waiting in thin_dtr's
    synchronize_rcu.
    
    The thin_dtr call managed to pull the thin_c out of the active thins
    list (and have it be the last entry in the active_thins list) at just
    the wrong moment which lead to this crash.
    
    Fortunately, the fix here is straight forward.  Switch get_first_thin()
    function to use list_first_or_null_rcu() which performs just a single
    READ_ONCE() and returns NULL if the list is already empty.
    
    This was run against the devicemapper test suite's thin-provisioning
    suites for delete and suspend and no regressions were observed.
    
    Signed-off-by: Krister Johansen <kjlx@templeofstupid.com>
    Fixes: b10ebd34ccca ("dm thin: fix rcu_read_lock being held in code that can sleep")
    Cc: stable@vger.kernel.org
    Acked-by: Ming-Hung Tsai <mtsai@redhat.com>
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dm-ebs: don't set the flag DM_TARGET_PASSES_INTEGRITY [+ + +]
Author: Mikulas Patocka <mpatocka@redhat.com>
Date:   Tue Jan 7 17:47:01 2025 +0100

    dm-ebs: don't set the flag DM_TARGET_PASSES_INTEGRITY
    
    commit 47f33c27fc9565fb0bc7dfb76be08d445cd3d236 upstream.
    
    dm-ebs uses dm-bufio to process requests that are not aligned on logical
    sector size. dm-bufio doesn't support passing integrity data (and it is
    unclear how should it do it), so we shouldn't set the
    DM_TARGET_PASSES_INTEGRITY flag.
    
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Cc: stable@vger.kernel.org
    Fixes: d3c7b35c20d6 ("dm: add emulated block size target")
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dm-verity FEC: Fix RS FEC repair for roots unaligned to block size (take 2) [+ + +]
Author: Milan Broz <gmazyland@gmail.com>
Date:   Wed Dec 18 13:56:58 2024 +0100

    dm-verity FEC: Fix RS FEC repair for roots unaligned to block size (take 2)
    
    commit 6df90c02bae468a3a6110bafbc659884d0c4966c upstream.
    
    This patch fixes an issue that was fixed in the commit
      df7b59ba9245 ("dm verity: fix FEC for RS roots unaligned to block size")
    but later broken again in the commit
      8ca7cab82bda ("dm verity fec: fix misaligned RS roots IO")
    
    If the Reed-Solomon roots setting spans multiple blocks, the code does not
    use proper parity bytes and randomly fails to repair even trivial errors.
    
    This bug cannot happen if the sector size is multiple of RS roots
    setting (Android case with roots 2).
    
    The previous solution was to find a dm-bufio block size that is multiple
    of the device sector size and roots size. Unfortunately, the optimization
    in commit 8ca7cab82bda ("dm verity fec: fix misaligned RS roots IO")
    is incorrect and uses data block size for some roots (for example, it uses
    4096 block size for roots = 20).
    
    This patch uses a different approach:
    
     - It always uses a configured data block size for dm-bufio to avoid
     possible misaligned IOs.
    
     - and it caches the processed parity bytes, so it can join it
     if it spans two blocks.
    
    As the RS calculation is called only if an error is detected and
    the process is computationally intensive, copying a few more bytes
    should not introduce performance issues.
    
    The issue was reported to cryptsetup with trivial reproducer
      https://gitlab.com/cryptsetup/cryptsetup/-/issues/923
    
    Reproducer (with roots=20):
    
     # create verity device with RS FEC
     dd if=/dev/urandom of=data.img bs=4096 count=8 status=none
     veritysetup format data.img hash.img --fec-device=fec.img --fec-roots=20 | \
     awk '/^Root hash/{ print $3 }' >roothash
    
     # create an erasure that should always be repairable with this roots setting
     dd if=/dev/zero of=data.img conv=notrunc bs=1 count=4 seek=4 status=none
    
     # try to read it through dm-verity
     veritysetup open data.img test hash.img --fec-device=fec.img --fec-roots=20 $(cat roothash)
     dd if=/dev/mapper/test of=/dev/null bs=4096 status=noxfer
    
     Even now the log says it cannot repair it:
       : verity-fec: 7:1: FEC 0: failed to correct: -74
       : device-mapper: verity: 7:1: data block 0 is corrupted
       ...
    
    With this fix, errors are properly repaired.
       : verity-fec: 7:1: FEC 0: corrected 4 errors
    
    Signed-off-by: Milan Broz <gmazyland@gmail.com>
    Fixes: 8ca7cab82bda ("dm verity fec: fix misaligned RS roots IO")
    Cc: stable@vger.kernel.org
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: Milan Broz <gmazyland@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amd/display: Add check for granularity in dml ceil/floor helpers [+ + +]
Author: Roman Li <Roman.Li@amd.com>
Date:   Fri Dec 13 13:51:07 2024 -0500

    drm/amd/display: Add check for granularity in dml ceil/floor helpers
    
    commit 0881fbc4fd62e00a2b8e102725f76d10351b2ea8 upstream.
    
    [Why]
    Wrapper functions for dcn_bw_ceil2() and dcn_bw_floor2()
    should check for granularity is non zero to avoid assert and
    divide-by-zero error in dcn_bw_ functions.
    
    [How]
    Add check for granularity 0.
    
    Cc: Mario Limonciello <mario.limonciello@amd.com>
    Reviewed-by: Alvin Lee <alvin.lee2@amd.com>
    Signed-off-by: Roman Li <Roman.Li@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit f6e09701c3eb2ccb8cb0518e0b67f1c69742a4ec)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/display: increase MAX_SURFACES to the value supported by hw [+ + +]
Author: Melissa Wen <mwen@igalia.com>
Date:   Tue Dec 17 17:45:04 2024 -0300

    drm/amd/display: increase MAX_SURFACES to the value supported by hw
    
    commit 21541bc6b44241e3f791f9e552352d8440b2b29e upstream.
    
    As the hw supports up to 4 surfaces, increase the maximum number of
    surfaces to prevent the DC error when trying to use more than three
    planes.
    
    [drm:dc_state_add_plane [amdgpu]] *ERROR* Surface: can not attach plane_state 000000003e2cb82c! Maximum is: 3
    
    Link: https://gitlab.freedesktop.org/drm/amd/-/issues/3693
    Signed-off-by: Melissa Wen <mwen@igalia.com>
    Reviewed-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
    Signed-off-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit b8d6daffc871a42026c3c20bff7b8fa0302298c1)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/mediatek: Add return value check when reading DPCD [+ + +]
Author: Liankun Yang <liankun.yang@mediatek.com>
Date:   Wed Dec 18 19:34:07 2024 +0800

    drm/mediatek: Add return value check when reading DPCD
    
    [ Upstream commit 522908140645865dc3e2fac70fd3b28834dfa7be ]
    
    Check the return value of drm_dp_dpcd_readb() to confirm that
    AUX communication is successful. To simplify the code, replace
    drm_dp_dpcd_readb() and DP_GET_SINK_COUNT() with drm_dp_read_sink_count().
    
    Fixes: f70ac097a2cf ("drm/mediatek: Add MT8195 Embedded DisplayPort driver")
    Signed-off-by: Liankun Yang <liankun.yang@mediatek.com>
    Reviewed-by: Guillaume Ranquet <granquet@baylibre.com>
    Link: https://patchwork.kernel.org/project/dri-devel/patch/20241218113448.2992-1-liankun.yang@mediatek.com/
    Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/mediatek: Fix mode valid issue for dp [+ + +]
Author: Liankun Yang <liankun.yang@mediatek.com>
Date:   Fri Oct 25 16:28:28 2024 +0800

    drm/mediatek: Fix mode valid issue for dp
    
    [ Upstream commit 0d68b55887cedc7487036ed34cb4c2097c4228f1 ]
    
    Fix dp mode valid issue to avoid abnormal display of limit state.
    
    After DP passes link training, it can express the lane count of the
    current link status is good. Calculate the maximum bandwidth supported
    by DP using the current lane count.
    
    The color format will select the best one based on the bandwidth
    requirements of the current timing mode. If the current timing mode
    uses RGB and meets the DP link bandwidth requirements, RGB will be used.
    
    If the timing mode uses RGB but does not meet the DP link bandwidthi
    requirements, it will continue to check whether YUV422 meets
    the DP link bandwidth.
    
    FEC overhead is approximately 2.4% from DP 1.4a spec 2.2.1.4.2.
    The down-spread amplitude shall either be disabled (0.0%) or up
    to 0.5% from 1.4a 3.5.2.6. Add up to approximately 3% total overhead.
    
    Because rate is already divided by 10,
    mode->clock does not need to be multiplied by 10.
    
    Fixes: f70ac097a2cf ("drm/mediatek: Add MT8195 Embedded DisplayPort driver")
    Signed-off-by: Liankun Yang <liankun.yang@mediatek.com>
    Link: https://patchwork.kernel.org/project/dri-devel/patch/20241025083036.8829-3-liankun.yang@mediatek.com/
    Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/mediatek: Fix YCbCr422 color format issue for DP [+ + +]
Author: Liankun Yang <liankun.yang@mediatek.com>
Date:   Fri Oct 25 16:28:27 2024 +0800

    drm/mediatek: Fix YCbCr422 color format issue for DP
    
    [ Upstream commit ef24fbd8f12015ff827973fffefed3902ffd61cc ]
    
    Setting up misc0 for Pixel Encoding Format.
    
    According to the definition of YCbCr in spec 1.2a Table 2-96,
    0x1 << 1 should be written to the register.
    
    Use switch case to distinguish RGB, YCbCr422,
    and unsupported color formats.
    
    Fixes: f70ac097a2cf ("drm/mediatek: Add MT8195 Embedded DisplayPort driver")
    Signed-off-by: Liankun Yang <liankun.yang@mediatek.com>
    Link: https://patchwork.kernel.org/project/dri-devel/patch/20241025083036.8829-2-liankun.yang@mediatek.com/
    Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/mediatek: stop selecting foreign drivers [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Wed Dec 18 09:58:31 2024 +0100

    drm/mediatek: stop selecting foreign drivers
    
    [ Upstream commit 924d66011f2401a4145e2e814842c5c4572e439f ]
    
    The PHY portion of the mediatek hdmi driver was originally part of
    the driver it self and later split out into drivers/phy, which a
    'select' to keep the prior behavior.
    
    However, this leads to build failures when the PHY driver cannot
    be built:
    
    WARNING: unmet direct dependencies detected for PHY_MTK_HDMI
      Depends on [n]: (ARCH_MEDIATEK || COMPILE_TEST [=y]) && COMMON_CLK [=y] && OF [=y] && REGULATOR [=n]
      Selected by [m]:
      - DRM_MEDIATEK_HDMI [=m] && HAS_IOMEM [=y] && DRM [=m] && DRM_MEDIATEK [=m]
    ERROR: modpost: "devm_regulator_register" [drivers/phy/mediatek/phy-mtk-hdmi-drv.ko] undefined!
    ERROR: modpost: "rdev_get_drvdata" [drivers/phy/mediatek/phy-mtk-hdmi-drv.ko] undefined!
    
    The best option here is to just not select the phy driver and leave that
    up to the defconfig. Do the same for the other PHY and memory drivers
    selected here as well for consistency.
    
    Fixes: a481bf2f0ca4 ("drm/mediatek: Separate mtk_hdmi_phy to an independent module")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Reviewed-by: CK Hu <ck.hu@mediatek.com>
    Link: https://patchwork.kernel.org/project/dri-devel/patch/20241218085837.2670434-1-arnd@kernel.org/
    Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm: adv7511: Fix use-after-free in adv7533_attach_dsi() [+ + +]
Author: Biju Das <biju.das.jz@bp.renesas.com>
Date:   Tue Nov 19 19:20:29 2024 +0000

    drm: adv7511: Fix use-after-free in adv7533_attach_dsi()
    
    [ Upstream commit 81adbd3ff21c1182e06aa02c6be0bfd9ea02d8e8 ]
    
    The host_node pointer was assigned and freed in adv7533_parse_dt(), and
    later, adv7533_attach_dsi() uses the same. Fix this use-after-free issue
    by dropping of_node_put() in adv7533_parse_dt() and calling of_node_put()
    in error path of probe() and also in the remove().
    
    Fixes: 1e4d58cd7f88 ("drm/bridge: adv7533: Create a MIPI DSI device")
    Cc: stable@vger.kernel.org
    Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
    Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241119192040.152657-2-biju.das.jz@bp.renesas.com
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm: bridge: adv7511: use dev_err_probe in probe function [+ + +]
Author: Ahmad Fatoum <a.fatoum@pengutronix.de>
Date:   Wed Oct 26 14:52:46 2022 +0200

    drm: bridge: adv7511: use dev_err_probe in probe function
    
    [ Upstream commit 2a865248399a13bb2b2bcc50297069a7521de258 ]
    
    adv7511 probe may need to be attempted multiple times before no
    -EPROBE_DEFER is returned. Currently, every such probe results in
    an error message:
    
    [    4.534229] adv7511 1-003d: failed to find dsi host
    [    4.580288] adv7511 1-003d: failed to find dsi host
    
    This is misleading, as there is no error and probe deferral is normal
    behavior. Fix this by using dev_err_probe that will suppress
    -EPROBE_DEFER errors. While at it, we touch all dev_err in the probe
    path. This makes the code more concise and included the error code
    everywhere to aid user in debugging.
    
    Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
    Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20221026125246.3188260-1-a.fatoum@pengutronix.de
    Stable-dep-of: 81adbd3ff21c ("drm: adv7511: Fix use-after-free in adv7533_attach_dsi()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
exfat: fix the infinite loop in __exfat_free_cluster() [+ + +]
Author: Yuezhang Mo <Yuezhang.Mo@sony.com>
Date:   Mon Dec 16 13:39:42 2024 +0800

    exfat: fix the infinite loop in __exfat_free_cluster()
    
    [ Upstream commit a5324b3a488d883aa2d42f72260054e87d0940a0 ]
    
    In __exfat_free_cluster(), the cluster chain is traversed until the
    EOF cluster. If the cluster chain includes a loop due to file system
    corruption, the EOF cluster cannot be traversed, resulting in an
    infinite loop.
    
    This commit uses the total number of clusters to prevent this infinite
    loop.
    
    Reported-by: syzbot+1de5a37cb85a2d536330@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=1de5a37cb85a2d536330
    Tested-by: syzbot+1de5a37cb85a2d536330@syzkaller.appspotmail.com
    Fixes: 31023864e67a ("exfat: add fat entry operations")
    Signed-off-by: Yuezhang Mo <Yuezhang.Mo@sony.com>
    Reviewed-by: Sungjong Seo <sj1557.seo@samsung.com>
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

exfat: fix the infinite loop in exfat_readdir() [+ + +]
Author: Yuezhang Mo <Yuezhang.Mo@sony.com>
Date:   Fri Dec 13 13:08:37 2024 +0800

    exfat: fix the infinite loop in exfat_readdir()
    
    [ Upstream commit fee873761bd978d077d8c55334b4966ac4cb7b59 ]
    
    If the file system is corrupted so that a cluster is linked to
    itself in the cluster chain, and there is an unused directory
    entry in the cluster, 'dentry' will not be incremented, causing
    condition 'dentry < max_dentries' unable to prevent an infinite
    loop.
    
    This infinite loop causes s_lock not to be released, and other
    tasks will hang, such as exfat_sync_fs().
    
    This commit stops traversing the cluster chain when there is unused
    directory entry in the cluster to avoid this infinite loop.
    
    Reported-by: syzbot+205c2644abdff9d3f9fc@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=205c2644abdff9d3f9fc
    Tested-by: syzbot+205c2644abdff9d3f9fc@syzkaller.appspotmail.com
    Fixes: ca06197382bd ("exfat: add directory operations")
    Signed-off-by: Yuezhang Mo <Yuezhang.Mo@sony.com>
    Reviewed-by: Sungjong Seo <sj1557.seo@samsung.com>
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ice: fix incorrect PHY settings for 100 GB/s [+ + +]
Author: Przemyslaw Korba <przemyslaw.korba@intel.com>
Date:   Wed Dec 4 14:22:18 2024 +0100

    ice: fix incorrect PHY settings for 100 GB/s
    
    [ Upstream commit 6c5b989116083a98f45aada548ff54e7a83a9c2d ]
    
    ptp4l application reports too high offset when ran on E823 device
    with a 100GB/s link. Those values cannot go under 100ns, like in a
    working case when using 100 GB/s cable.
    
    This is due to incorrect frequency settings on the PHY clocks for
    100 GB/s speed. Changes are introduced to align with the internal
    hardware documentation, and correctly initialize frequency in PHY
    clocks with the frequency values that are in our HW spec.
    
    To reproduce the issue run ptp4l as a Time Receiver on E823 device,
    and observe the offset, which will never approach values seen
    in the PTP working case.
    
    Reproduction output:
    ptp4l -i enp137s0f3 -m -2 -s -f /etc/ptp4l_8275.conf
    ptp4l[5278.775]: master offset      12470 s2 freq  +41288 path delay -3002
    ptp4l[5278.837]: master offset      10525 s2 freq  +39202 path delay -3002
    ptp4l[5278.900]: master offset     -24840 s2 freq  -20130 path delay -3002
    ptp4l[5278.963]: master offset      10597 s2 freq  +37908 path delay -3002
    ptp4l[5279.025]: master offset       8883 s2 freq  +36031 path delay -3002
    ptp4l[5279.088]: master offset       7267 s2 freq  +34151 path delay -3002
    ptp4l[5279.150]: master offset       5771 s2 freq  +32316 path delay -3002
    ptp4l[5279.213]: master offset       4388 s2 freq  +30526 path delay -3002
    ptp4l[5279.275]: master offset     -30434 s2 freq  -28485 path delay -3002
    ptp4l[5279.338]: master offset     -28041 s2 freq  -27412 path delay -3002
    ptp4l[5279.400]: master offset       7870 s2 freq  +31118 path delay -3002
    
    Fixes: 3a7496234d17 ("ice: implement basic E822 PTP support")
    Reviewed-by: Milena Olech <milena.olech@intel.com>
    Signed-off-by: Przemyslaw Korba <przemyslaw.korba@intel.com>
    Tested-by: Rinitha S <sx.rinitha@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ieee802154: ca8210: Add missing check for kfifo_alloc() in ca8210_probe() [+ + +]
Author: Keisuke Nishimura <keisuke.nishimura@inria.fr>
Date:   Tue Oct 29 19:27:12 2024 +0100

    ieee802154: ca8210: Add missing check for kfifo_alloc() in ca8210_probe()
    
    [ Upstream commit 2c87309ea741341c6722efdf1fb3f50dd427c823 ]
    
    ca8210_test_interface_init() returns the result of kfifo_alloc(),
    which can be non-zero in case of an error. The caller, ca8210_probe(),
    should check the return value and do error-handling if it fails.
    
    Fixes: ded845a781a5 ("ieee802154: Add CA8210 IEEE 802.15.4 device driver")
    Signed-off-by: Keisuke Nishimura <keisuke.nishimura@inria.fr>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Link: https://lore.kernel.org/20241029182712.318271-1-keisuke.nishimura@inria.fr
    Signed-off-by: Stefan Schmidt <stefan@datenfreihafen.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iio: adc: ad7124: Disable all channels at probe time [+ + +]
Author: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
Date:   Mon Nov 4 11:19:04 2024 +0100

    iio: adc: ad7124: Disable all channels at probe time
    
    commit 4be339af334c283a1a1af3cb28e7e448a0aa8a7c upstream.
    
    When during a measurement two channels are enabled, two measurements are
    done that are reported sequencially in the DATA register. As the code
    triggered by reading one of the sysfs properties expects that only one
    channel is enabled it only reads the first data set which might or might
    not belong to the intended channel.
    
    To prevent this situation disable all channels during probe. This fixes
    a problem in practise because the reset default for channel 0 is
    enabled. So all measurements before the first measurement on channel 0
    (which disables channel 0 at the end) might report wrong values.
    
    Fixes: 7b8d045e497a ("iio: adc: ad7124: allow more than 8 channels")
    Reviewed-by: Nuno Sa <nuno.sa@analog.com>
    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
    Link: https://patch.msgid.link/20241104101905.845737-2-u.kleine-koenig@baylibre.com
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: adc: at91: call input_free_device() on allocated iio_dev [+ + +]
Author: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Date:   Sat Dec 7 13:30:45 2024 +0900

    iio: adc: at91: call input_free_device() on allocated iio_dev
    
    commit de6a73bad1743e9e81ea5a24c178c67429ff510b upstream.
    
    Current implementation of at91_ts_register() calls input_free_deivce()
    on st->ts_input, however, the err label can be reached before the
    allocated iio_dev is stored to st->ts_input. Thus call
    input_free_device() on input instead of st->ts_input.
    
    Fixes: 84882b060301 ("iio: adc: at91_adc: Add support for touchscreens without TSMR")
    Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
    Link: https://patch.msgid.link/20241207043045.1255409-1-joe@pf.is.s.u-tokyo.ac.jp
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: adc: ti-ads124s08: Use gpiod_set_value_cansleep() [+ + +]
Author: Fabio Estevam <festevam@gmail.com>
Date:   Fri Nov 22 13:43:08 2024 -0300

    iio: adc: ti-ads124s08: Use gpiod_set_value_cansleep()
    
    commit 2a8e34096ec70d73ebb6d9920688ea312700cbd9 upstream.
    
    Using gpiod_set_value() to control the reset GPIO causes some verbose
    warnings during boot when the reset GPIO is controlled by an I2C IO
    expander.
    
    As the caller can sleep, use the gpiod_set_value_cansleep() variant to
    fix the issue.
    
    Tested on a custom i.MX93 board with a ADS124S08 ADC.
    
    Cc: stable@kernel.org
    Fixes: e717f8c6dfec ("iio: adc: Add the TI ads124s08 ADC code")
    Signed-off-by: Fabio Estevam <festevam@gmail.com>
    Link: https://patch.msgid.link/20241122164308.390340-1-festevam@gmail.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: adc: ti-ads8688: fix information leak in triggered buffer [+ + +]
Author: Javier Carrasco <javier.carrasco.cruz@gmail.com>
Date:   Mon Nov 25 22:16:16 2024 +0100

    iio: adc: ti-ads8688: fix information leak in triggered buffer
    
    commit 2a7377ccfd940cd6e9201756aff1e7852c266e69 upstream.
    
    The 'buffer' local array is used to push data to user space from a
    triggered buffer, but it does not set values for inactive channels, as
    it only uses iio_for_each_active_channel() to assign new values.
    
    Initialize the array to zero before using it to avoid pushing
    uninitialized information to userspace.
    
    Cc: stable@vger.kernel.org
    Fixes: 61fa5dfa5f52 ("iio: adc: ti-ads8688: Fix alignment of buffer in iio_push_to_buffers_with_timestamp()")
    Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
    Link: https://patch.msgid.link/20241125-iio_memset_scan_holes-v1-8-0cb6e98d895c@gmail.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: dummy: iio_simply_dummy_buffer: fix information leak in triggered buffer [+ + +]
Author: Javier Carrasco <javier.carrasco.cruz@gmail.com>
Date:   Mon Nov 25 22:16:17 2024 +0100

    iio: dummy: iio_simply_dummy_buffer: fix information leak in triggered buffer
    
    commit 333be433ee908a53f283beb95585dfc14c8ffb46 upstream.
    
    The 'data' array is allocated via kmalloc() and it is used to push data
    to user space from a triggered buffer, but it does not set values for
    inactive channels, as it only uses iio_for_each_active_channel()
    to assign new values.
    
    Use kzalloc for the memory allocation to avoid pushing uninitialized
    information to userspace.
    
    Cc: stable@vger.kernel.org
    Fixes: 415f79244757 ("iio: Move IIO Dummy Driver out of staging")
    Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
    Link: https://patch.msgid.link/20241125-iio_memset_scan_holes-v1-9-0cb6e98d895c@gmail.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: gyro: fxas21002c: Fix missing data update in trigger handler [+ + +]
Author: Carlos Song <carlos.song@nxp.com>
Date:   Sat Nov 16 10:29:45 2024 -0500

    iio: gyro: fxas21002c: Fix missing data update in trigger handler
    
    commit fa13ac6cdf9b6c358e7d77c29fb60145c7a87965 upstream.
    
    The fxas21002c_trigger_handler() may fail to acquire sample data because
    the runtime PM enters the autosuspend state and sensor can not return
    sample data in standby mode..
    
    Resume the sensor before reading the sample data into the buffer within the
    trigger handler. After the data is read, place the sensor back into the
    autosuspend state.
    
    Fixes: a0701b6263ae ("iio: gyro: add core driver for fxas21002c")
    Signed-off-by: Carlos Song <carlos.song@nxp.com>
    Signed-off-by: Frank Li <Frank.Li@nxp.com>
    Link: https://patch.msgid.link/20241116152945.4006374-1-Frank.Li@nxp.com
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: imu: kmx61: fix information leak in triggered buffer [+ + +]
Author: Javier Carrasco <javier.carrasco.cruz@gmail.com>
Date:   Mon Nov 25 22:16:13 2024 +0100

    iio: imu: kmx61: fix information leak in triggered buffer
    
    commit 6ae053113f6a226a2303caa4936a4c37f3bfff7b upstream.
    
    The 'buffer' local array is used to push data to user space from a
    triggered buffer, but it does not set values for inactive channels, as
    it only uses iio_for_each_active_channel() to assign new values.
    
    Initialize the array to zero before using it to avoid pushing
    uninitialized information to userspace.
    
    Cc: stable@vger.kernel.org
    Fixes: c3a23ecc0901 ("iio: imu: kmx61: Add support for data ready triggers")
    Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
    Link: https://patch.msgid.link/20241125-iio_memset_scan_holes-v1-5-0cb6e98d895c@gmail.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: inkern: call iio_device_put() only on mapped devices [+ + +]
Author: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Date:   Wed Dec 4 20:13:42 2024 +0900

    iio: inkern: call iio_device_put() only on mapped devices
    
    commit 64f43895b4457532a3cc524ab250b7a30739a1b1 upstream.
    
    In the error path of iio_channel_get_all(), iio_device_put() is called
    on all IIO devices, which can cause a refcount imbalance. Fix this error
    by calling iio_device_put() only on IIO devices whose refcounts were
    previously incremented by iio_device_get().
    
    Fixes: 314be14bb893 ("iio: Rename _st_ functions to loose the bit that meant the staging version.")
    Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
    Link: https://patch.msgid.link/20241204111342.1246706-1-joe@pf.is.s.u-tokyo.ac.jp
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: light: vcnl4035: fix information leak in triggered buffer [+ + +]
Author: Javier Carrasco <javier.carrasco.cruz@gmail.com>
Date:   Mon Nov 25 22:16:14 2024 +0100

    iio: light: vcnl4035: fix information leak in triggered buffer
    
    commit 47b43e53c0a0edf5578d5d12f5fc71c019649279 upstream.
    
    The 'buffer' local array is used to push data to userspace from a
    triggered buffer, but it does not set an initial value for the single
    data element, which is an u16 aligned to 8 bytes. That leaves at least
    4 bytes uninitialized even after writing an integer value with
    regmap_read().
    
    Initialize the array to zero before using it to avoid pushing
    uninitialized information to userspace.
    
    Cc: stable@vger.kernel.org
    Fixes: ec90b52c07c0 ("iio: light: vcnl4035: Fix buffer alignment in iio_push_to_buffers_with_timestamp()")
    Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
    Link: https://patch.msgid.link/20241125-iio_memset_scan_holes-v1-6-0cb6e98d895c@gmail.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: pressure: zpa2326: fix information leak in triggered buffer [+ + +]
Author: Javier Carrasco <javier.carrasco.cruz@gmail.com>
Date:   Mon Nov 25 22:16:11 2024 +0100

    iio: pressure: zpa2326: fix information leak in triggered buffer
    
    commit 6007d10c5262f6f71479627c1216899ea7f09073 upstream.
    
    The 'sample' local struct is used to push data to user space from a
    triggered buffer, but it has a hole between the temperature and the
    timestamp (u32 pressure, u16 temperature, GAP, u64 timestamp).
    This hole is never initialized.
    
    Initialize the struct to zero before using it to avoid pushing
    uninitialized information to userspace.
    
    Cc: stable@vger.kernel.org
    Fixes: 03b262f2bbf4 ("iio:pressure: initial zpa2326 barometer support")
    Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
    Link: https://patch.msgid.link/20241125-iio_memset_scan_holes-v1-3-0cb6e98d895c@gmail.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
io_uring/eventfd: ensure io_eventfd_signal() defers another RCU period [+ + +]
Author: Jens Axboe <axboe@kernel.dk>
Date:   Wed Jan 8 11:16:13 2025 -0700

    io_uring/eventfd: ensure io_eventfd_signal() defers another RCU period
    
    Commit c9a40292a44e78f71258b8522655bffaf5753bdb upstream.
    
    io_eventfd_do_signal() is invoked from an RCU callback, but when
    dropping the reference to the io_ev_fd, it calls io_eventfd_free()
    directly if the refcount drops to zero. This isn't correct, as any
    potential freeing of the io_ev_fd should be deferred another RCU grace
    period.
    
    Just call io_eventfd_put() rather than open-code the dec-and-test and
    free, which will correctly defer it another RCU grace period.
    
    Fixes: 21a091b970cd ("io_uring: signal registered eventfd to process deferred task work")
    Reported-by: Jann Horn <jannh@google.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
jbd2: flush filesystem device before updating tail sequence [+ + +]
Author: Zhang Yi <yi.zhang@huawei.com>
Date:   Tue Dec 3 09:44:07 2024 +0800

    jbd2: flush filesystem device before updating tail sequence
    
    [ Upstream commit a0851ea9cd555c333795b85ddd908898b937c4e1 ]
    
    When committing transaction in jbd2_journal_commit_transaction(), the
    disk caches for the filesystem device should be flushed before updating
    the journal tail sequence. However, this step is missed if the journal
    is not located on the filesystem device. As a result, the filesystem may
    become inconsistent following a power failure or system crash. Fix it by
    ensuring that the filesystem device is flushed appropriately.
    
    Fixes: 3339578f0578 ("jbd2: cleanup journal tail after transaction commit")
    Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
    Link: https://lore.kernel.org/r/20241203014407.805916-3-yi.zhang@huaweicloud.com
    Reviewed-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

jbd2: increase IO priority for writing revoke records [+ + +]
Author: Zhang Yi <yi.zhang@huawei.com>
Date:   Tue Dec 3 09:44:06 2024 +0800

    jbd2: increase IO priority for writing revoke records
    
    [ Upstream commit ac1e21bd8c883aeac2f1835fc93b39c1e6838b35 ]
    
    Commit '6a3afb6ac6df ("jbd2: increase the journal IO's priority")'
    increases the priority of journal I/O by marking I/O with the
    JBD2_JOURNAL_REQ_FLAGS. However, that commit missed the revoke buffers,
    so also addresses that kind of I/Os.
    
    Fixes: 6a3afb6ac6df ("jbd2: increase the journal IO's priority")
    Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
    Link: https://lore.kernel.org/r/20241203014407.805916-2-yi.zhang@huaweicloud.com
    Reviewed-by: Kemeng Shi <shikemeng@huaweicloud.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ksmbd: fix a missing return value check bug [+ + +]
Author: Wentao Liang <liangwentao@iscas.ac.cn>
Date:   Mon Dec 23 23:30:50 2024 +0800

    ksmbd: fix a missing return value check bug
    
    [ Upstream commit 4c16e1cadcbcaf3c82d5fc310fbd34d0f5d0db7c ]
    
    In the smb2_send_interim_resp(), if ksmbd_alloc_work_struct()
    fails to allocate a node, it returns a NULL pointer to the
    in_work pointer. This can lead to an illegal memory write of
    in_work->response_buf when allocate_interim_rsp_buf() attempts
    to perform a kzalloc() on it.
    
    To address this issue, incorporating a check for the return
    value of ksmbd_alloc_work_struct() ensures that the function
    returns immediately upon allocation failure, thereby preventing
    the aforementioned illegal memory access.
    
    Fixes: 041bba4414cd ("ksmbd: fix wrong interim response on compound")
    Signed-off-by: Wentao Liang <liangwentao@iscas.ac.cn>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ksmbd: fix unexpectedly changed path in ksmbd_vfs_kern_path_locked [+ + +]
Author: He Wang <xw897002528@gmail.com>
Date:   Mon Jan 6 03:39:54 2025 +0000

    ksmbd: fix unexpectedly changed path in ksmbd_vfs_kern_path_locked
    
    [ Upstream commit 2ac538e40278a2c0c051cca81bcaafc547d61372 ]
    
    When `ksmbd_vfs_kern_path_locked` met an error and it is not the last
    entry, it will exit without restoring changed path buffer. But later this
    buffer may be used as the filename for creation.
    
    Fixes: c5a709f08d40 ("ksmbd: handle caseless file creation")
    Signed-off-by: He Wang <xw897002528@gmail.com>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: Linux 6.1.125 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Fri Jan 17 13:34:49 2025 +0100

    Linux 6.1.125
    
    Link: https://lore.kernel.org/r/20250115103547.522503305@linuxfoundation.org
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Hardik Garg <hargar@linux.microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
misc: microchip: pci1xxxx: Resolve kernel panic during GPIO IRQ handling [+ + +]
Author: Rengarajan S <rengarajan.s@microchip.com>
Date:   Thu Dec 5 19:06:25 2024 +0530

    misc: microchip: pci1xxxx: Resolve kernel panic during GPIO IRQ handling
    
    commit 194f9f94a5169547d682e9bbcc5ae6d18a564735 upstream.
    
    Resolve kernel panic caused by improper handling of IRQs while
    accessing GPIO values. This is done by replacing generic_handle_irq with
    handle_nested_irq.
    
    Fixes: 1f4d8ae231f4 ("misc: microchip: pci1xxxx: Add gpio irq handler and irq helper functions irq_ack, irq_mask, irq_unmask and irq_set_type of irq_chip.")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Rengarajan S <rengarajan.s@microchip.com>
    Link: https://lore.kernel.org/r/20241205133626.1483499-2-rengarajan.s@microchip.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

misc: microchip: pci1xxxx: Resolve return code mismatch during GPIO set config [+ + +]
Author: Rengarajan S <rengarajan.s@microchip.com>
Date:   Thu Dec 5 19:06:26 2024 +0530

    misc: microchip: pci1xxxx: Resolve return code mismatch during GPIO set config
    
    commit c7a5378a0f707686de3ddb489f1653c523bb7dcc upstream.
    
    Driver returns -EOPNOTSUPPORTED on unsupported parameters case in set
    config. Upper level driver checks for -ENOTSUPP. Because of the return
    code mismatch, the ioctls from userspace fail. Resolve the issue by
    passing -ENOTSUPP during unsupported case.
    
    Fixes: 7d3e4d807df2 ("misc: microchip: pci1xxxx: load gpio driver for the gpio controller auxiliary device enumerated by the auxiliary bus driver.")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Rengarajan S <rengarajan.s@microchip.com>
    Link: https://lore.kernel.org/r/20241205133626.1483499-3-rengarajan.s@microchip.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/mlx5: Fix variable not being completed when function returns [+ + +]
Author: Chenguang Zhao <zhaochenguang@kylinos.cn>
Date:   Wed Jan 8 11:00:09 2025 +0800

    net/mlx5: Fix variable not being completed when function returns
    
    [ Upstream commit 0e2909c6bec9048f49d0c8e16887c63b50b14647 ]
    
    When cmd_alloc_index(), fails cmd_work_handler() needs
    to complete ent->slotted before returning early.
    Otherwise the task which issued the command may hang:
    
       mlx5_core 0000:01:00.0: cmd_work_handler:877:(pid 3880418): failed to allocate command entry
       INFO: task kworker/13:2:4055883 blocked for more than 120 seconds.
             Not tainted 4.19.90-25.44.v2101.ky10.aarch64 #1
       "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
       kworker/13:2    D    0 4055883      2 0x00000228
       Workqueue: events mlx5e_tx_dim_work [mlx5_core]
       Call trace:
          __switch_to+0xe8/0x150
          __schedule+0x2a8/0x9b8
          schedule+0x2c/0x88
          schedule_timeout+0x204/0x478
          wait_for_common+0x154/0x250
          wait_for_completion+0x28/0x38
          cmd_exec+0x7a0/0xa00 [mlx5_core]
          mlx5_cmd_exec+0x54/0x80 [mlx5_core]
          mlx5_core_modify_cq+0x6c/0x80 [mlx5_core]
          mlx5_core_modify_cq_moderation+0xa0/0xb8 [mlx5_core]
          mlx5e_tx_dim_work+0x54/0x68 [mlx5_core]
          process_one_work+0x1b0/0x448
          worker_thread+0x54/0x468
          kthread+0x134/0x138
          ret_from_fork+0x10/0x18
    
    Fixes: 485d65e13571 ("net/mlx5: Add a timeout to acquire the command queue semaphore")
    Signed-off-by: Chenguang Zhao <zhaochenguang@kylinos.cn>
    Reviewed-by: Moshe Shemesh <moshe@nvidia.com>
    Acked-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/20250108030009.68520-1-zhaochenguang@kylinos.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net: 802: LLC+SNAP OID:PID lookup on start of skb data [+ + +]
Author: Antonio Pastor <antonio.pastor@gmail.com>
Date:   Thu Jan 2 20:23:00 2025 -0500

    net: 802: LLC+SNAP OID:PID lookup on start of skb data
    
    [ Upstream commit 1e9b0e1c550c42c13c111d1a31e822057232abc4 ]
    
    802.2+LLC+SNAP frames received by napi_complete_done() with GRO and DSA
    have skb->transport_header set two bytes short, or pointing 2 bytes
    before network_header & skb->data. This was an issue as snap_rcv()
    expected offset to point to SNAP header (OID:PID), causing packet to
    be dropped.
    
    A fix at llc_fixup_skb() (a024e377efed) resets transport_header for any
    LLC consumers that may care about it, and stops SNAP packets from being
    dropped, but doesn't fix the problem which is that LLC and SNAP should
    not use transport_header offset.
    
    Ths patch eliminates the use of transport_header offset for SNAP lookup
    of OID:PID so that SNAP does not rely on the offset at all.
    The offset is reset after pull for any SNAP packet consumers that may
    (but shouldn't) use it.
    
    Fixes: fda55eca5a33 ("net: introduce skb_transport_header_was_set()")
    Signed-off-by: Antonio Pastor <antonio.pastor@gmail.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20250103012303.746521-1-antonio.pastor@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net_sched: cls_flow: validate TCA_FLOW_RSHIFT attribute [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Jan 3 10:45:46 2025 +0000

    net_sched: cls_flow: validate TCA_FLOW_RSHIFT attribute
    
    [ Upstream commit a039e54397c6a75b713b9ce7894a62e06956aa92 ]
    
    syzbot found that TCA_FLOW_RSHIFT attribute was not validated.
    Right shitfing a 32bit integer is undefined for large shift values.
    
    UBSAN: shift-out-of-bounds in net/sched/cls_flow.c:329:23
    shift exponent 9445 is too large for 32-bit type 'u32' (aka 'unsigned int')
    CPU: 1 UID: 0 PID: 54 Comm: kworker/u8:3 Not tainted 6.13.0-rc3-syzkaller-00180-g4f619d518db9 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
    Workqueue: ipv6_addrconf addrconf_dad_work
    Call Trace:
     <TASK>
      __dump_stack lib/dump_stack.c:94 [inline]
      dump_stack_lvl+0x241/0x360 lib/dump_stack.c:120
      ubsan_epilogue lib/ubsan.c:231 [inline]
      __ubsan_handle_shift_out_of_bounds+0x3c8/0x420 lib/ubsan.c:468
      flow_classify+0x24d5/0x25b0 net/sched/cls_flow.c:329
      tc_classify include/net/tc_wrapper.h:197 [inline]
      __tcf_classify net/sched/cls_api.c:1771 [inline]
      tcf_classify+0x420/0x1160 net/sched/cls_api.c:1867
      sfb_classify net/sched/sch_sfb.c:260 [inline]
      sfb_enqueue+0x3ad/0x18b0 net/sched/sch_sfb.c:318
      dev_qdisc_enqueue+0x4b/0x290 net/core/dev.c:3793
      __dev_xmit_skb net/core/dev.c:3889 [inline]
      __dev_queue_xmit+0xf0e/0x3f50 net/core/dev.c:4400
      dev_queue_xmit include/linux/netdevice.h:3168 [inline]
      neigh_hh_output include/net/neighbour.h:523 [inline]
      neigh_output include/net/neighbour.h:537 [inline]
      ip_finish_output2+0xd41/0x1390 net/ipv4/ip_output.c:236
      iptunnel_xmit+0x55d/0x9b0 net/ipv4/ip_tunnel_core.c:82
      udp_tunnel_xmit_skb+0x262/0x3b0 net/ipv4/udp_tunnel_core.c:173
      geneve_xmit_skb drivers/net/geneve.c:916 [inline]
      geneve_xmit+0x21dc/0x2d00 drivers/net/geneve.c:1039
      __netdev_start_xmit include/linux/netdevice.h:5002 [inline]
      netdev_start_xmit include/linux/netdevice.h:5011 [inline]
      xmit_one net/core/dev.c:3590 [inline]
      dev_hard_start_xmit+0x27a/0x7d0 net/core/dev.c:3606
      __dev_queue_xmit+0x1b73/0x3f50 net/core/dev.c:4434
    
    Fixes: e5dfb815181f ("[NET_SCHED]: Add flow classifier")
    Reported-by: syzbot+1dbb57d994e54aaa04d2@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/6777bf49.050a0220.178762.0040.GAE@google.com/T/#u
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20250103104546.3714168-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netfilter: conntrack: clamp maximum hashtable size to INT_MAX [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Wed Jan 8 22:56:33 2025 +0100

    netfilter: conntrack: clamp maximum hashtable size to INT_MAX
    
    [ Upstream commit b541ba7d1f5a5b7b3e2e22dc9e40e18a7d6dbc13 ]
    
    Use INT_MAX as maximum size for the conntrack hashtable. Otherwise, it
    is possible to hit WARN_ON_ONCE in __kvmalloc_node_noprof() when
    resizing hashtable because __GFP_NOWARN is unset. See:
    
      0708a0afe291 ("mm: Consider __GFP_NOWARN flag for oversized kvmalloc() calls")
    
    Note: hashtable resize is only possible from init_netns.
    
    Fixes: 9cc1c73ad666 ("netfilter: conntrack: avoid integer overflow when resizing")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: imbalance in flowtable binding [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jan 2 13:01:13 2025 +0100

    netfilter: nf_tables: imbalance in flowtable binding
    
    [ Upstream commit 13210fc63f353fe78584048079343413a3cdf819 ]
    
    All these cases cause imbalance between BIND and UNBIND calls:
    
    - Delete an interface from a flowtable with multiple interfaces
    
    - Add a (device to a) flowtable with --check flag
    
    - Delete a netns containing a flowtable
    
    - In an interactive nft session, create a table with owner flag and
      flowtable inside, then quit.
    
    Fix it by calling FLOW_BLOCK_UNBIND when unregistering hooks, then
    remove late FLOW_BLOCK_UNBIND call when destroying flowtable.
    
    Fixes: ff4bf2f42a40 ("netfilter: nf_tables: add nft_unregister_flowtable_hook()")
    Reported-by: Phil Sutter <phil@nwl.cc>
    Tested-by: Phil Sutter <phil@nwl.cc>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ocfs2: correct return value of ocfs2_local_free_info() [+ + +]
Author: Joseph Qi <joseph.qi@linux.alibaba.com>
Date:   Sun May 28 21:20:32 2023 +0800

    ocfs2: correct return value of ocfs2_local_free_info()
    
    [ Upstream commit d32840ad4a111c6abd651fbf6b5996e6123913da ]
    
    Now in ocfs2_local_free_info(), it returns 0 even if it actually fails.
    Though it doesn't cause any real problem since the only caller
    dquot_disable() ignores the return value, we'd better return correct as it
    is.
    
    Link: https://lkml.kernel.org/r/20230528132033.217664-1-joseph.qi@linux.alibaba.com
    Signed-off-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Cc: Mark Fasheh <mark@fasheh.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Cc: Joseph Qi <jiangqi903@gmail.com>
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: Gang He <ghe@suse.com>
    Cc: Jun Piao <piaojun@huawei.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: 5f3fd772d152 ("ocfs2: fix slab-use-after-free due to dangling pointer dqi_priv")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ocfs2: fix slab-use-after-free due to dangling pointer dqi_priv [+ + +]
Author: Dennis Lam <dennis.lamerice@gmail.com>
Date:   Tue Dec 17 21:39:25 2024 -0500

    ocfs2: fix slab-use-after-free due to dangling pointer dqi_priv
    
    [ Upstream commit 5f3fd772d152229d94602bca243fbb658068a597 ]
    
    When mounting ocfs2 and then remounting it as read-only, a
    slab-use-after-free occurs after the user uses a syscall to
    quota_getnextquota.  Specifically, sb_dqinfo(sb, type)->dqi_priv is the
    dangling pointer.
    
    During the remounting process, the pointer dqi_priv is freed but is never
    set as null leaving it to be accessed.  Additionally, the read-only option
    for remounting sets the DQUOT_SUSPENDED flag instead of setting the
    DQUOT_USAGE_ENABLED flags.  Moreover, later in the process of getting the
    next quota, the function ocfs2_get_next_id is called and only checks the
    quota usage flags and not the quota suspended flags.
    
    To fix this, I set dqi_priv to null when it is freed after remounting with
    read-only and put a check for DQUOT_SUSPENDED in ocfs2_get_next_id.
    
    [akpm@linux-foundation.org: coding-style cleanups]
    Link: https://lkml.kernel.org/r/20241218023924.22821-2-dennis.lamerice@gmail.com
    Fixes: 8f9e8f5fcc05 ("ocfs2: Fix Q_GETNEXTQUOTA for filesystem without quotas")
    Signed-off-by: Dennis Lam <dennis.lamerice@gmail.com>
    Reported-by: syzbot+d173bf8a5a7faeede34c@syzkaller.appspotmail.com
    Tested-by: syzbot+d173bf8a5a7faeede34c@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/all/6731d26f.050a0220.1fb99c.014b.GAE@google.com/T/
    Reviewed-by: Joseph Qi <joseph.qi@linux.alibaba.com>
    Cc: Mark Fasheh <mark@fasheh.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Cc: Changwei Ge <gechangwei@live.cn>
    Cc: Jun Piao <piaojun@huawei.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
of/address: Add support for 3 address cell bus [+ + +]
Author: Rob Herring <robh@kernel.org>
Date:   Tue Mar 28 15:15:58 2023 -0500

    of/address: Add support for 3 address cell bus
    
    [ Upstream commit 3d5089c4263d3594dc055e0f9c5cb990505cdd64 ]
    
    There's a few custom bus bindings (e.g. fsl,qoriq-mc) which use a
    3 cell format with custom flags in the high cell. We can match these
    buses as a fallback if we didn't match on PCI bus which is the only
    standard bus binding with 3 address cells.
    
    Link: https://lore.kernel.org/r/20230328-dt-address-helpers-v1-3-e2456c3e77ab@kernel.org
    Signed-off-by: Rob Herring <robh@kernel.org>
    Stable-dep-of: 7f05e20b989a ("of: address: Preserve the flags portion on 1:1 dma-ranges mapping")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
of: address: Fix address translation when address-size is greater than 2 [+ + +]
Author: Herve Codina <herve.codina@bootlin.com>
Date:   Tue Oct 17 13:02:16 2023 +0200

    of: address: Fix address translation when address-size is greater than 2
    
    [ Upstream commit 42604f8eb7ba04b589375049cc76282dad4677d2 ]
    
    With the recent addition of of_pci_prop_ranges() in commit 407d1a51921e
    ("PCI: Create device tree node for bridge"), the ranges property can
    have a 3 cells child address, a 3 cells parent address and a 2 cells
    child size.
    
    A range item property for a PCI device is filled as follow:
      <BAR_nbr> 0 0 <phys.hi> <phys.mid> <phys.low> <BAR_sizeh> <BAR_sizel>
      <-- Child --> <-- Parent (PCI definition) --> <- BAR size (64bit) -->
    
    This allow to translate BAR addresses from the DT. For instance:
    pci@0,0 {
      #address-cells = <0x03>;
      #size-cells = <0x02>;
      device_type = "pci";
      compatible = "pci11ab,100", "pciclass,060400", "pciclass,0604";
      ranges = <0x82000000 0x00 0xe8000000
                0x82000000 0x00 0xe8000000
                0x00 0x4400000>;
      ...
      dev@0,0 {
        #address-cells = <0x03>;
        #size-cells = <0x02>;
        compatible = "pci1055,9660", "pciclass,020000", "pciclass,0200";
        /* Translations for BAR0 to BAR5 */
        ranges = <0x00 0x00 0x00 0x82010000 0x00 0xe8000000 0x00 0x2000000
                  0x01 0x00 0x00 0x82010000 0x00 0xea000000 0x00 0x1000000
                  0x02 0x00 0x00 0x82010000 0x00 0xeb000000 0x00 0x800000
                  0x03 0x00 0x00 0x82010000 0x00 0xeb800000 0x00 0x800000
                  0x04 0x00 0x00 0x82010000 0x00 0xec000000 0x00 0x20000
                  0x05 0x00 0x00 0x82010000 0x00 0xec020000 0x00 0x2000>;
        ...
        pci-ep-bus@0 {
          #address-cells = <0x01>;
          #size-cells = <0x01>;
          compatible = "simple-bus";
          /* Translate 0xe2000000 to BAR0 and 0xe0000000 to BAR1 */
          ranges = <0xe2000000 0x00 0x00 0x00 0x2000000
                    0xe0000000 0x01 0x00 0x00 0x1000000>;
          ...
        };
      };
    };
    
    During the translation process, the "default-flags" map() function is
    used to select the matching item in the ranges table and determine the
    address offset from this matching item.
    This map() function simply calls of_read_number() and when address-size
    is greater than 2, the map() function skips the extra high address part
    (ie part over 64bit). This lead to a wrong matching item and a wrong
    offset computation.
    Also during the translation itself, the extra high part related to the
    parent address is not present in the translated address.
    
    Fix the "default-flags" map() and translate() in order to take into
    account the child extra high address part in map() and the parent extra
    high address part in translate() and so having a correct address
    translation for ranges patterns such as the one given in the example
    above.
    
    Signed-off-by: Herve Codina <herve.codina@bootlin.com>
    Link: https://lore.kernel.org/r/20231017110221.189299-2-herve.codina@bootlin.com
    Signed-off-by: Rob Herring <robh@kernel.org>
    Stable-dep-of: 7f05e20b989a ("of: address: Preserve the flags portion on 1:1 dma-ranges mapping")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

of: address: Preserve the flags portion on 1:1 dma-ranges mapping [+ + +]
Author: Andrea della Porta <andrea.porta@suse.com>
Date:   Sun Nov 24 11:05:37 2024 +0100

    of: address: Preserve the flags portion on 1:1 dma-ranges mapping
    
    [ Upstream commit 7f05e20b989ac33c9c0f8c2028ec0a566493548f ]
    
    A missing or empty dma-ranges in a DT node implies a 1:1 mapping for dma
    translations. In this specific case, the current behaviour is to zero out
    the entire specifier so that the translation could be carried on as an
    offset from zero. This includes address specifier that has flags (e.g.
    PCI ranges).
    
    Once the flags portion has been zeroed, the translation chain is broken
    since the mapping functions will check the upcoming address specifier
    against mismatching flags, always failing the 1:1 mapping and its entire
    purpose of always succeeding.
    
    Set to zero only the address portion while passing the flags through.
    
    Fixes: dbbdee94734b ("of/address: Merge all of the bus translation code")
    Cc: stable@vger.kernel.org
    Signed-off-by: Andrea della Porta <andrea.porta@suse.com>
    Tested-by: Herve Codina <herve.codina@bootlin.com>
    Link: https://lore.kernel.org/r/e51ae57874e58a9b349c35e2e877425ebc075d7a.1732441813.git.andrea.porta@suse.com
    Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

of: address: Remove duplicated functions [+ + +]
Author: Herve Codina <herve.codina@bootlin.com>
Date:   Tue Oct 17 13:02:17 2023 +0200

    of: address: Remove duplicated functions
    
    [ Upstream commit 3eb030c60835668997d5763b1a0c7938faf169f6 ]
    
    The recently added of_bus_default_flags_translate() performs the exact
    same operation as of_bus_pci_translate() and of_bus_isa_translate().
    
    Avoid duplicated code replacing both of_bus_pci_translate() and
    of_bus_isa_translate() with of_bus_default_flags_translate().
    
    Signed-off-by: Herve Codina <herve.codina@bootlin.com>
    Link: https://lore.kernel.org/r/20231017110221.189299-3-herve.codina@bootlin.com
    Signed-off-by: Rob Herring <robh@kernel.org>
    Stable-dep-of: 7f05e20b989a ("of: address: Preserve the flags portion on 1:1 dma-ranges mapping")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

of: address: Store number of bus flag cells rather than bool [+ + +]
Author: Rob Herring <robh@kernel.org>
Date:   Thu Oct 26 08:53:58 2023 -0500

    of: address: Store number of bus flag cells rather than bool
    
    [ Upstream commit 88696db08b7efa3b6bb722014ea7429e78f6be32 ]
    
    It is more useful to know how many flags cells a bus has rather than
    whether a bus has flags or not as ultimately the number of cells is the
    information used. Replace 'has_flags' boolean with 'flag_cells' count.
    
    Acked-by: Herve Codina <herve.codina@bootlin.com>
    Link: https://lore.kernel.org/r/20231026135358.3564307-2-robh@kernel.org
    Signed-off-by: Rob Herring <robh@kernel.org>
    Stable-dep-of: 7f05e20b989a ("of: address: Preserve the flags portion on 1:1 dma-ranges mapping")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

of: unittest: Add bus address range parsing tests [+ + +]
Author: Rob Herring <robh@kernel.org>
Date:   Tue Mar 28 15:15:56 2023 -0500

    of: unittest: Add bus address range parsing tests
    
    [ Upstream commit 6d32dadb11a6480be62c6ada901bbdcbda1775c9 ]
    
    While there are tests for "dma-ranges" helpers, "ranges" is missing any
    tests. It's the same underlying code, but for completeness add a test
    for "ranges" parsing iterators. This is in preparation to add some
    additional "ranges" helpers.
    
    Link: https://lore.kernel.org/r/20230328-dt-address-helpers-v1-1-e2456c3e77ab@kernel.org
    Signed-off-by: Rob Herring <robh@kernel.org>
    Stable-dep-of: 7f05e20b989a ("of: address: Preserve the flags portion on 1:1 dma-ranges mapping")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
riscv: Fix sleeping in invalid context in die() [+ + +]
Author: Nam Cao <namcao@linutronix.de>
Date:   Mon Nov 18 10:13:33 2024 +0100

    riscv: Fix sleeping in invalid context in die()
    
    commit 6a97f4118ac07cfdc316433f385dbdc12af5025e upstream.
    
    die() can be called in exception handler, and therefore cannot sleep.
    However, die() takes spinlock_t which can sleep with PREEMPT_RT enabled.
    That causes the following warning:
    
    BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:48
    in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 285, name: mutex
    preempt_count: 110001, expected: 0
    RCU nest depth: 0, expected: 0
    CPU: 0 UID: 0 PID: 285 Comm: mutex Not tainted 6.12.0-rc7-00022-ge19049cf7d56-dirty #234
    Hardware name: riscv-virtio,qemu (DT)
    Call Trace:
        dump_backtrace+0x1c/0x24
        show_stack+0x2c/0x38
        dump_stack_lvl+0x5a/0x72
        dump_stack+0x14/0x1c
        __might_resched+0x130/0x13a
        rt_spin_lock+0x2a/0x5c
        die+0x24/0x112
        do_trap_insn_illegal+0xa0/0xea
        _new_vmalloc_restore_context_a0+0xcc/0xd8
    Oops - illegal instruction [#1]
    
    Switch to use raw_spinlock_t, which does not sleep even with PREEMPT_RT
    enabled.
    
    Fixes: 76d2a0493a17 ("RISC-V: Init and Halt Code")
    Signed-off-by: Nam Cao <namcao@linutronix.de>
    Cc: stable@vger.kernel.org
    Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Link: https://lore.kernel.org/r/20241118091333.1185288-1-namcao@linutronix.de
    Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sched/task_stack: fix object_is_on_stack() for KASAN tagged pointers [+ + +]
Author: Qun-Wei Lin <qun-wei.lin@mediatek.com>
Date:   Wed Nov 13 12:25:43 2024 +0800

    sched/task_stack: fix object_is_on_stack() for KASAN tagged pointers
    
    commit fd7b4f9f46d46acbc7af3a439bb0d869efdc5c58 upstream.
    
    When CONFIG_KASAN_SW_TAGS and CONFIG_KASAN_STACK are enabled, the
    object_is_on_stack() function may produce incorrect results due to the
    presence of tags in the obj pointer, while the stack pointer does not have
    tags.  This discrepancy can lead to incorrect stack object detection and
    subsequently trigger warnings if CONFIG_DEBUG_OBJECTS is also enabled.
    
    Example of the warning:
    
    ODEBUG: object 3eff800082ea7bb0 is NOT on stack ffff800082ea0000, but annotated.
    ------------[ cut here ]------------
    WARNING: CPU: 0 PID: 1 at lib/debugobjects.c:557 __debug_object_init+0x330/0x364
    Modules linked in:
    CPU: 0 UID: 0 PID: 1 Comm: swapper/0 Not tainted 6.12.0-rc5 #4
    Hardware name: linux,dummy-virt (DT)
    pstate: 600000c5 (nZCv daIF -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    pc : __debug_object_init+0x330/0x364
    lr : __debug_object_init+0x330/0x364
    sp : ffff800082ea7b40
    x29: ffff800082ea7b40 x28: 98ff0000c0164518 x27: 98ff0000c0164534
    x26: ffff800082d93ec8 x25: 0000000000000001 x24: 1cff0000c00172a0
    x23: 0000000000000000 x22: ffff800082d93ed0 x21: ffff800081a24418
    x20: 3eff800082ea7bb0 x19: efff800000000000 x18: 0000000000000000
    x17: 00000000000000ff x16: 0000000000000047 x15: 206b63617473206e
    x14: 0000000000000018 x13: ffff800082ea7780 x12: 0ffff800082ea78e
    x11: 0ffff800082ea790 x10: 0ffff800082ea79d x9 : 34d77febe173e800
    x8 : 34d77febe173e800 x7 : 0000000000000001 x6 : 0000000000000001
    x5 : feff800082ea74b8 x4 : ffff800082870a90 x3 : ffff80008018d3c4
    x2 : 0000000000000001 x1 : ffff800082858810 x0 : 0000000000000050
    Call trace:
     __debug_object_init+0x330/0x364
     debug_object_init_on_stack+0x30/0x3c
     schedule_hrtimeout_range_clock+0xac/0x26c
     schedule_hrtimeout+0x1c/0x30
     wait_task_inactive+0x1d4/0x25c
     kthread_bind_mask+0x28/0x98
     init_rescuer+0x1e8/0x280
     workqueue_init+0x1a0/0x3cc
     kernel_init_freeable+0x118/0x200
     kernel_init+0x28/0x1f0
     ret_from_fork+0x10/0x20
    ---[ end trace 0000000000000000 ]---
    ODEBUG: object 3eff800082ea7bb0 is NOT on stack ffff800082ea0000, but annotated.
    ------------[ cut here ]------------
    
    Link: https://lkml.kernel.org/r/20241113042544.19095-1-qun-wei.lin@mediatek.com
    Signed-off-by: Qun-Wei Lin <qun-wei.lin@mediatek.com>
    Cc: Andrew Yang <andrew.yang@mediatek.com>
    Cc: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Cc: Casper Li <casper.li@mediatek.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Chinwen Chang <chinwen.chang@mediatek.com>
    Cc: Kent Overstreet <kent.overstreet@linux.dev>
    Cc: Matthias Brugger <matthias.bgg@gmail.com>
    Cc: Pasha Tatashin <pasha.tatashin@soleen.com>
    Cc: Shakeel Butt <shakeel.butt@linux.dev>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Alva Lan <alvalan9@foxmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sched: sch_cake: add bounds checks to host bulk flow fairness counts [+ + +]
Author: Toke Høiland-Jørgensen <toke@redhat.com>
Date:   Tue Jan 7 13:01:05 2025 +0100

    sched: sch_cake: add bounds checks to host bulk flow fairness counts
    
    [ Upstream commit 737d4d91d35b5f7fa5bb442651472277318b0bfd ]
    
    Even though we fixed a logic error in the commit cited below, syzbot
    still managed to trigger an underflow of the per-host bulk flow
    counters, leading to an out of bounds memory access.
    
    To avoid any such logic errors causing out of bounds memory accesses,
    this commit factors out all accesses to the per-host bulk flow counters
    to a series of helpers that perform bounds-checking before any
    increments and decrements. This also has the benefit of improving
    readability by moving the conditional checks for the flow mode into
    these helpers, instead of having them spread out throughout the
    code (which was the cause of the original logic error).
    
    As part of this change, the flow quantum calculation is consolidated
    into a helper function, which means that the dithering applied to the
    ost load scaling is now applied both in the DRR rotation and when a
    sparse flow's quantum is first initiated. The only user-visible effect
    of this is that the maximum packet size that can be sent while a flow
    stays sparse will now vary with +/- one byte in some cases. This should
    not make a noticeable difference in practice, and thus it's not worth
    complicating the code to preserve the old behaviour.
    
    Fixes: 546ea84d07e3 ("sched: sch_cake: fix bulk flow accounting logic for host fairness")
    Reported-by: syzbot+f63600d288bfb7057424@syzkaller.appspotmail.com
    Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Acked-by: Dave Taht <dave.taht@gmail.com>
    Link: https://patch.msgid.link/20250107120105.70685-1-toke@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
scripts/sorttable: fix orc_sort_cmp() to maintain symmetry and transitivity [+ + +]
Author: Kuan-Wei Chiu <visitorckw@gmail.com>
Date:   Tue Jan 7 01:44:59 2025 +0800

    scripts/sorttable: fix orc_sort_cmp() to maintain symmetry and transitivity
    
    The orc_sort_cmp() function, used with qsort(), previously violated the
    symmetry and transitivity rules required by the C standard.  Specifically,
    when both entries are ORC_REG_UNDEFINED, it could result in both a < b
    and b < a, which breaks the required symmetry and transitivity.  This can
    lead to undefined behavior and incorrect sorting results, potentially
    causing memory corruption in glibc implementations [1].
    
    Symmetry: If x < y, then y > x.
    Transitivity: If x < y and y < z, then x < z.
    
    Fix the comparison logic to return 0 when both entries are
    ORC_REG_UNDEFINED, ensuring compliance with qsort() requirements.
    
    Link: https://www.qualys.com/2024/01/30/qsort.txt [1]
    Link: https://lkml.kernel.org/r/20241226140332.2670689-1-visitorckw@gmail.com
    Fixes: 57fa18994285 ("scripts/sorttable: Implement build-time ORC unwind table sorting")
    Fixes: fb799447ae29 ("x86,objtool: Split UNWIND_HINT_EMPTY in two")
    Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
    Cc: Ching-Chun (Jim) Huang <jserv@ccns.ncku.edu.tw>
    Cc: <chuang@cs.nycu.edu.tw>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Josh Poimboeuf <jpoimboe@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Shile Zhang <shile.zhang@linux.alibaba.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    (cherry picked from commit 0210d251162f4033350a94a43f95b1c39ec84a90)
    Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sctp: sysctl: auth_enable: avoid using current->nsproxy [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Wed Jan 8 16:34:34 2025 +0100

    sctp: sysctl: auth_enable: avoid using current->nsproxy
    
    commit 15649fd5415eda664ef35780c2013adeb5d9c695 upstream.
    
    As mentioned in a previous commit of this series, using the 'net'
    structure via 'current' is not recommended for different reasons:
    
    - Inconsistency: getting info from the reader's/writer's netns vs only
      from the opener's netns.
    
    - current->nsproxy can be NULL in some cases, resulting in an 'Oops'
      (null-ptr-deref), e.g. when the current task is exiting, as spotted by
      syzbot [1] using acct(2).
    
    The 'net' structure can be obtained from the table->data using
    container_of().
    
    Note that table->data could also be used directly, but that would
    increase the size of this fix, while 'sctp.ctl_sock' still needs to be
    retrieved from 'net' structure.
    
    Fixes: b14878ccb7fa ("net: sctp: cache auth_enable per endpoint")
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/67769ecb.050a0220.3a8527.003f.GAE@google.com [1]
    Suggested-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20250108-net-sysctl-current-nsproxy-v1-6-5df34b2083e8@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

sctp: sysctl: cookie_hmac_alg: avoid using current->nsproxy [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Wed Jan 8 16:34:32 2025 +0100

    sctp: sysctl: cookie_hmac_alg: avoid using current->nsproxy
    
    commit ea62dd1383913b5999f3d16ae99d411f41b528d4 upstream.
    
    As mentioned in a previous commit of this series, using the 'net'
    structure via 'current' is not recommended for different reasons:
    
    - Inconsistency: getting info from the reader's/writer's netns vs only
      from the opener's netns.
    
    - current->nsproxy can be NULL in some cases, resulting in an 'Oops'
      (null-ptr-deref), e.g. when the current task is exiting, as spotted by
      syzbot [1] using acct(2).
    
    The 'net' structure can be obtained from the table->data using
    container_of().
    
    Note that table->data could also be used directly, as this is the only
    member needed from the 'net' structure, but that would increase the size
    of this fix, to use '*data' everywhere 'net->sctp.sctp_hmac_alg' is
    used.
    
    Fixes: 3c68198e7511 ("sctp: Make hmac algorithm selection for cookie generation dynamic")
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/67769ecb.050a0220.3a8527.003f.GAE@google.com [1]
    Suggested-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20250108-net-sysctl-current-nsproxy-v1-4-5df34b2083e8@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

sctp: sysctl: plpmtud_probe_interval: avoid using current->nsproxy [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Wed Jan 8 16:34:36 2025 +0100

    sctp: sysctl: plpmtud_probe_interval: avoid using current->nsproxy
    
    commit 6259d2484d0ceff42245d1f09cc8cb6ee72d847a upstream.
    
    As mentioned in a previous commit of this series, using the 'net'
    structure via 'current' is not recommended for different reasons:
    
    - Inconsistency: getting info from the reader's/writer's netns vs only
      from the opener's netns.
    
    - current->nsproxy can be NULL in some cases, resulting in an 'Oops'
      (null-ptr-deref), e.g. when the current task is exiting, as spotted by
      syzbot [1] using acct(2).
    
    The 'net' structure can be obtained from the table->data using
    container_of().
    
    Note that table->data could also be used directly, as this is the only
    member needed from the 'net' structure, but that would increase the size
    of this fix, to use '*data' everywhere 'net->sctp.probe_interval' is
    used.
    
    Fixes: d1e462a7a5f3 ("sctp: add probe_interval in sysctl and sock/asoc/transport")
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/67769ecb.050a0220.3a8527.003f.GAE@google.com [1]
    Suggested-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20250108-net-sysctl-current-nsproxy-v1-8-5df34b2083e8@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

sctp: sysctl: rto_min/max: avoid using current->nsproxy [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Wed Jan 8 16:34:33 2025 +0100

    sctp: sysctl: rto_min/max: avoid using current->nsproxy
    
    commit 9fc17b76fc70763780aa78b38fcf4742384044a5 upstream.
    
    As mentioned in a previous commit of this series, using the 'net'
    structure via 'current' is not recommended for different reasons:
    
    - Inconsistency: getting info from the reader's/writer's netns vs only
      from the opener's netns.
    
    - current->nsproxy can be NULL in some cases, resulting in an 'Oops'
      (null-ptr-deref), e.g. when the current task is exiting, as spotted by
      syzbot [1] using acct(2).
    
    The 'net' structure can be obtained from the table->data using
    container_of().
    
    Note that table->data could also be used directly, as this is the only
    member needed from the 'net' structure, but that would increase the size
    of this fix, to use '*data' everywhere 'net->sctp.rto_min/max' is used.
    
    Fixes: 4f3fdf3bc59c ("sctp: add check rto_min and rto_max in sysctl")
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/67769ecb.050a0220.3a8527.003f.GAE@google.com [1]
    Suggested-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20250108-net-sysctl-current-nsproxy-v1-5-5df34b2083e8@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

sctp: sysctl: udp_port: avoid using current->nsproxy [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Wed Jan 8 16:34:35 2025 +0100

    sctp: sysctl: udp_port: avoid using current->nsproxy
    
    commit c10377bbc1972d858eaf0ab366a311b39f8ef1b6 upstream.
    
    As mentioned in a previous commit of this series, using the 'net'
    structure via 'current' is not recommended for different reasons:
    
    - Inconsistency: getting info from the reader's/writer's netns vs only
      from the opener's netns.
    
    - current->nsproxy can be NULL in some cases, resulting in an 'Oops'
      (null-ptr-deref), e.g. when the current task is exiting, as spotted by
      syzbot [1] using acct(2).
    
    The 'net' structure can be obtained from the table->data using
    container_of().
    
    Note that table->data could also be used directly, but that would
    increase the size of this fix, while 'sctp.ctl_sock' still needs to be
    retrieved from 'net' structure.
    
    Fixes: 046c052b475e ("sctp: enable udp tunneling socks")
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/67769ecb.050a0220.3a8527.003f.GAE@google.com [1]
    Suggested-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20250108-net-sysctl-current-nsproxy-v1-7-5df34b2083e8@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
staging: iio: ad9832: Correct phase range check [+ + +]
Author: Zicheng Qu <quzicheng@huawei.com>
Date:   Thu Nov 7 01:10:15 2024 +0000

    staging: iio: ad9832: Correct phase range check
    
    commit 4636e859ebe0011f41e35fa79bab585b8004e9a3 upstream.
    
    User Perspective:
    When a user sets the phase value, the ad9832_write_phase() is called.
    The phase register has a 12-bit resolution, so the valid range is 0 to
    4095. If the phase offset value of 4096 is input, it effectively exactly
    equals 0 in the lower 12 bits, meaning no offset.
    
    Reasons for the Change:
    1) Original Condition (phase > BIT(AD9832_PHASE_BITS)):
    This condition allows a phase value equal to 2^12, which is 4096.
    However, this value exceeds the valid 12-bit range, as the maximum valid
    phase value should be 4095.
    2) Modified Condition (phase >= BIT(AD9832_PHASE_BITS)):
    Ensures that the phase value is within the valid range, preventing
    invalid datafrom being written.
    
    Impact on Subsequent Logic: st->data = cpu_to_be16(addr | phase):
    If the phase value is 2^12, i.e., 4096 (0001 0000 0000 0000), and addr
    is AD9832_REG_PHASE0 (1100 0000 0000 0000), then addr | phase results in
    1101 0000 0000 0000, occupying DB12. According to the section of WRITING
    TO A PHASE REGISTER in the datasheet, the MSB 12 PHASE0 bits should be
    DB11. The original condition leads to incorrect DB12 usage, which
    contradicts the datasheet and could pose potential issues for future
    updates if DB12 is used in such related cases.
    
    Fixes: ea707584bac1 ("Staging: IIO: DDS: AD9832 / AD9835 driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zicheng Qu <quzicheng@huawei.com>
    Link: https://patch.msgid.link/20241107011015.2472600-3-quzicheng@huawei.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

staging: iio: ad9834: Correct phase range check [+ + +]
Author: Zicheng Qu <quzicheng@huawei.com>
Date:   Thu Nov 7 01:10:14 2024 +0000

    staging: iio: ad9834: Correct phase range check
    
    commit c0599762f0c7e260b99c6b7bceb8eae69b804c94 upstream.
    
    User Perspective:
    When a user sets the phase value, the ad9834_write_phase() is called.
    The phase register has a 12-bit resolution, so the valid range is 0 to
    4095. If the phase offset value of 4096 is input, it effectively exactly
    equals 0 in the lower 12 bits, meaning no offset.
    
    Reasons for the Change:
    1) Original Condition (phase > BIT(AD9834_PHASE_BITS)):
    This condition allows a phase value equal to 2^12, which is 4096.
    However, this value exceeds the valid 12-bit range, as the maximum valid
    phase value should be 4095.
    2) Modified Condition (phase >= BIT(AD9834_PHASE_BITS)):
    Ensures that the phase value is within the valid range, preventing
    invalid datafrom being written.
    
    Impact on Subsequent Logic: st->data = cpu_to_be16(addr | phase):
    If the phase value is 2^12, i.e., 4096 (0001 0000 0000 0000), and addr
    is AD9834_REG_PHASE0 (1100 0000 0000 0000), then addr | phase results in
    1101 0000 0000 0000, occupying DB12. According to the section of WRITING
    TO A PHASE REGISTER in the datasheet, the MSB 12 PHASE0 bits should be
    DB11. The original condition leads to incorrect DB12 usage, which
    contradicts the datasheet and could pose potential issues for future
    updates if DB12 is used in such related cases.
    
    Fixes: 12b9d5bf76bf ("Staging: IIO: DDS: AD9833 / AD9834 driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zicheng Qu <quzicheng@huawei.com>
    Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
    Link: https://patch.msgid.link/20241107011015.2472600-2-quzicheng@huawei.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tcp/dccp: allow a connection when sk_max_ack_backlog is zero [+ + +]
Author: Zhongqiu Duan <dzq.aishenghu0@gmail.com>
Date:   Thu Jan 2 17:14:26 2025 +0000

    tcp/dccp: allow a connection when sk_max_ack_backlog is zero
    
    [ Upstream commit 3479c7549fb1dfa7a1db4efb7347c7b8ef50de4b ]
    
    If the backlog of listen() is set to zero, sk_acceptq_is_full() allows
    one connection to be made, but inet_csk_reqsk_queue_is_full() does not.
    When the net.ipv4.tcp_syncookies is zero, inet_csk_reqsk_queue_is_full()
    will cause an immediate drop before the sk_acceptq_is_full() check in
    tcp_conn_request(), resulting in no connection can be made.
    
    This patch tries to keep consistent with 64a146513f8f ("[NET]: Revert
    incorrect accept queue backlog changes.").
    
    Link: https://lore.kernel.org/netdev/20250102080258.53858-1-kuniyu@amazon.com/
    Fixes: ef547f2ac16b ("tcp: remove max_qlen_log")
    Signed-off-by: Zhongqiu Duan <dzq.aishenghu0@gmail.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Jason Xing <kerneljasonxing@gmail.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20250102171426.915276-1-dzq.aishenghu0@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp/dccp: complete lockless accesses to sk->sk_max_ack_backlog [+ + +]
Author: Jason Xing <kernelxing@tencent.com>
Date:   Sun Mar 31 17:05:21 2024 +0800

    tcp/dccp: complete lockless accesses to sk->sk_max_ack_backlog
    
    [ Upstream commit 9a79c65f00e2b036e17af3a3a607d7d732b7affb ]
    
    Since commit 099ecf59f05b ("net: annotate lockless accesses to
    sk->sk_max_ack_backlog") decided to handle the sk_max_ack_backlog
    locklessly, there is one more function mostly called in TCP/DCCP
    cases. So this patch completes it:)
    
    Signed-off-by: Jason Xing <kernelxing@tencent.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20240331090521.71965-1-kerneljasonxing@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 3479c7549fb1 ("tcp/dccp: allow a connection when sk_max_ack_backlog is zero")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tcp: Annotate data-race around sk->sk_mark in tcp_v4_send_reset [+ + +]
Author: Daniel Borkmann <daniel@iogearbox.net>
Date:   Tue Jan 7 11:14:39 2025 +0100

    tcp: Annotate data-race around sk->sk_mark in tcp_v4_send_reset
    
    [ Upstream commit 80fb40baba19e25a1b6f3ecff6fc5c0171806bde ]
    
    This is a follow-up to 3c5b4d69c358 ("net: annotate data-races around
    sk->sk_mark"). sk->sk_mark can be read and written without holding
    the socket lock. IPv6 equivalent is already covered with READ_ONCE()
    annotation in tcp_v6_send_response().
    
    Fixes: 3c5b4d69c358 ("net: annotate data-races around sk->sk_mark")
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/f459d1fc44f205e13f6d8bdca2c8bfb9902ffac9.1736244569.git.daniel@iogearbox.net
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
thermal: of: fix OF node leak in of_thermal_zone_find() [+ + +]
Author: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Date:   Tue Dec 24 12:18:09 2024 +0900

    thermal: of: fix OF node leak in of_thermal_zone_find()
    
    [ Upstream commit 9164e0912af206a72ddac4915f7784e470a04ace ]
    
    of_thermal_zone_find() calls of_parse_phandle_with_args(), but does not
    release the OF node reference obtained by it.
    
    Add a of_node_put() call when the call is successful.
    
    Fixes: 3fd6d6e2b4e8 ("thermal/of: Rework the thermal device tree initialization")
    Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
    Link: https://patch.msgid.link/20241224031809.950461-1-joe@pf.is.s.u-tokyo.ac.jp
    [ rjw: Changelog edit ]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tls: Fix tls_sw_sendmsg error handling [+ + +]
Author: Benjamin Coddington <bcodding@redhat.com>
Date:   Sat Jan 4 10:29:45 2025 -0500

    tls: Fix tls_sw_sendmsg error handling
    
    [ Upstream commit b341ca51d2679829d26a3f6a4aa9aee9abd94f92 ]
    
    We've noticed that NFS can hang when using RPC over TLS on an unstable
    connection, and investigation shows that the RPC layer is stuck in a tight
    loop attempting to transmit, but forever getting -EBADMSG back from the
    underlying network.  The loop begins when tcp_sendmsg_locked() returns
    -EPIPE to tls_tx_records(), but that error is converted to -EBADMSG when
    calling the socket's error reporting handler.
    
    Instead of converting errors from tcp_sendmsg_locked(), let's pass them
    along in this path.  The RPC layer handles -EPIPE by reconnecting the
    transport, which prevents the endless attempts to transmit on a broken
    connection.
    
    Signed-off-by: Benjamin Coddington <bcodding@redhat.com>
    Fixes: a42055e8d2c3 ("net/tls: Add support for async encryption of records for performance")
    Link: https://patch.msgid.link/9594185559881679d81f071b181a10eb07cd079f.1736004079.git.bcodding@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
topology: Keep the cpumask unchanged when printing cpumap [+ + +]
Author: Li Huafei <lihuafei1@huawei.com>
Date:   Thu Nov 14 19:01:41 2024 +0800

    topology: Keep the cpumask unchanged when printing cpumap
    
    commit cbd399f78e23ad4492c174fc5e6b3676dba74a52 upstream.
    
    During fuzz testing, the following warning was discovered:
    
     different return values (15 and 11) from vsnprintf("%*pbl
     ", ...)
    
     test:keyward is WARNING in kvasprintf
     WARNING: CPU: 55 PID: 1168477 at lib/kasprintf.c:30 kvasprintf+0x121/0x130
     Call Trace:
      kvasprintf+0x121/0x130
      kasprintf+0xa6/0xe0
      bitmap_print_to_buf+0x89/0x100
      core_siblings_list_read+0x7e/0xb0
      kernfs_file_read_iter+0x15b/0x270
      new_sync_read+0x153/0x260
      vfs_read+0x215/0x290
      ksys_read+0xb9/0x160
      do_syscall_64+0x56/0x100
      entry_SYSCALL_64_after_hwframe+0x78/0xe2
    
    The call trace shows that kvasprintf() reported this warning during the
    printing of core_siblings_list. kvasprintf() has several steps:
    
     (1) First, calculate the length of the resulting formatted string.
    
     (2) Allocate a buffer based on the returned length.
    
     (3) Then, perform the actual string formatting.
    
     (4) Check whether the lengths of the formatted strings returned in
         steps (1) and (2) are consistent.
    
    If the core_cpumask is modified between steps (1) and (3), the lengths
    obtained in these two steps may not match. Indeed our test includes cpu
    hotplugging, which should modify core_cpumask while printing.
    
    To fix this issue, cache the cpumask into a temporary variable before
    calling cpumap_print_{list, cpumask}_to_buf(), to keep it unchanged
    during the printing process.
    
    Fixes: bb9ec13d156e ("topology: use bin_attribute to break the size limitation of cpumap ABI")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Li Huafei <lihuafei1@huawei.com>
    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Link: https://lore.kernel.org/r/20241114110141.94725-1-lihuafei1@huawei.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb-storage: Add max sectors quirk for Nokia 208 [+ + +]
Author: Lubomir Rintel <lrintel@redhat.com>
Date:   Wed Jan 1 22:22:06 2025 +0100

    usb-storage: Add max sectors quirk for Nokia 208
    
    commit cdef30e0774802df2f87024d68a9d86c3b99ca2a upstream.
    
    This fixes data corruption when accessing the internal SD card in mass
    storage mode.
    
    I am actually not too sure why. I didn't figure a straightforward way to
    reproduce the issue, but i seem to get garbage when issuing a lot (over 50)
    of large reads (over 120 sectors) are done in a quick succession. That is,
    time seems to matter here -- larger reads are fine if they are done with
    some delay between them.
    
    But I'm not great at understanding this sort of things, so I'll assume
    the issue other, smarter, folks were seeing with similar phones is the
    same problem and I'll just put my quirk next to theirs.
    
    The "Software details" screen on the phone is as follows:
    
      V 04.06
      07-08-13
      RM-849
      (c) Nokia
    
    TL;DR version of the device descriptor:
    
      idVendor           0x0421 Nokia Mobile Phones
      idProduct          0x06c2
      bcdDevice            4.06
      iManufacturer           1 Nokia
      iProduct                2 Nokia 208
    
    The patch assumes older firmwares are broken too (I'm unable to test, but
    no biggie if they aren't I guess), and I have no idea if newer firmware
    exists.
    
    Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
    Cc: stable <stable@kernel.org>
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://lore.kernel.org/r/20250101212206.2386207-1-lkundrak@v3.sk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: core: Disable LPM only for non-suspended ports [+ + +]
Author: Kai-Heng Feng <kaihengf@nvidia.com>
Date:   Fri Dec 6 15:48:17 2024 +0800

    USB: core: Disable LPM only for non-suspended ports
    
    commit 59bfeaf5454b7e764288d84802577f4a99bf0819 upstream.
    
    There's USB error when tegra board is shutting down:
    [  180.919315] usb 2-3: Failed to set U1 timeout to 0x0,error code -113
    [  180.919995] usb 2-3: Failed to set U1 timeout to 0xa,error code -113
    [  180.920512] usb 2-3: Failed to set U2 timeout to 0x4,error code -113
    [  186.157172] tegra-xusb 3610000.usb: xHCI host controller not responding, assume dead
    [  186.157858] tegra-xusb 3610000.usb: HC died; cleaning up
    [  186.317280] tegra-xusb 3610000.usb: Timeout while waiting for evaluate context command
    
    The issue is caused by disabling LPM on already suspended ports.
    
    For USB2 LPM, the LPM is already disabled during port suspend. For USB3
    LPM, port won't transit to U1/U2 when it's already suspended in U3,
    hence disabling LPM is only needed for ports that are not suspended.
    
    Cc: Wayne Chang <waynec@nvidia.com>
    Cc: stable <stable@kernel.org>
    Fixes: d920a2ed8620 ("usb: Disable USB3 LPM at shutdown")
    Signed-off-by: Kai-Heng Feng <kaihengf@nvidia.com>
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Link: https://lore.kernel.org/r/20241206074817.89189-1-kaihengf@nvidia.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: dwc3-am62: Disable autosuspend during remove [+ + +]
Author: Prashanth K <quic_prashk@quicinc.com>
Date:   Mon Dec 9 16:27:28 2024 +0530

    usb: dwc3-am62: Disable autosuspend during remove
    
    commit 625e70ccb7bbbb2cc912e23c63390946170c085c upstream.
    
    Runtime PM documentation (Section 5) mentions, during remove()
    callbacks, drivers should undo the runtime PM changes done in
    probe(). Usually this means calling pm_runtime_disable(),
    pm_runtime_dont_use_autosuspend() etc. Hence add missing
    function to disable autosuspend on dwc3-am62 driver unbind.
    
    Fixes: e8784c0aec03 ("drivers: usb: dwc3: Add AM62 USB wrapper driver")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Prashanth K <quic_prashk@quicinc.com>
    Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Link: https://lore.kernel.org/r/20241209105728.3216872-1-quic_prashk@quicinc.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: dwc3: gadget: fix writing NYET threshold [+ + +]
Author: André Draszik <andre.draszik@linaro.org>
Date:   Mon Dec 9 11:49:53 2024 +0000

    usb: dwc3: gadget: fix writing NYET threshold
    
    commit 01ea6bf5cb58b20cc1bd159f0cf74a76cf04bb69 upstream.
    
    Before writing a new value to the register, the old value needs to be
    masked out for the new value to be programmed as intended, because at
    least in some cases the reset value of that field is 0xf (max value).
    
    At the moment, the dwc3 core initialises the threshold to the maximum
    value (0xf), with the option to override it via a DT. No upstream DTs
    seem to override it, therefore this commit doesn't change behaviour for
    any upstream platform. Nevertheless, the code should be fixed to have
    the desired outcome.
    
    Do so.
    
    Fixes: 80caf7d21adc ("usb: dwc3: add lpm erratum support")
    Cc: stable@vger.kernel.org # 5.10+ (needs adjustment for 5.4)
    Signed-off-by: André Draszik <andre.draszik@linaro.org>
    Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Link: https://lore.kernel.org/r/20241209-dwc3-nyet-fix-v2-1-02755683345b@linaro.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: fix reference leak in usb_new_device() [+ + +]
Author: Ma Ke <make_ruc2021@163.com>
Date:   Wed Dec 18 15:13:46 2024 +0800

    usb: fix reference leak in usb_new_device()
    
    commit 0df11fa8cee5a9cf8753d4e2672bb3667138c652 upstream.
    
    When device_add(&udev->dev) succeeds and a later call fails,
    usb_new_device() does not properly call device_del(). 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: stable <stable@kernel.org>
    Fixes: 9f8b17e643fe ("USB: make usbdevices export their device nodes instead of using a separate class")
    Signed-off-by: Ma Ke <make_ruc2021@163.com>
    Reviewed-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://lore.kernel.org/r/20241218071346.2973980-1-make_ruc2021@163.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: f_fs: Remove WARN_ON in functionfs_bind [+ + +]
Author: Akash M <akash.m5@samsung.com>
Date:   Thu Dec 19 18:22:19 2024 +0530

    usb: gadget: f_fs: Remove WARN_ON in functionfs_bind
    
    commit dfc51e48bca475bbee984e90f33fdc537ce09699 upstream.
    
    This commit addresses an issue related to below kernel panic where
    panic_on_warn is enabled. It is caused by the unnecessary use of WARN_ON
    in functionsfs_bind, which easily leads to the following scenarios.
    
    1.adb_write in adbd               2. UDC write via configfs
      =================                  =====================
    
    ->usb_ffs_open_thread()           ->UDC write
     ->open_functionfs()               ->configfs_write_iter()
      ->adb_open()                      ->gadget_dev_desc_UDC_store()
       ->adb_write()                     ->usb_gadget_register_driver_owner
                                          ->driver_register()
    ->StartMonitor()                       ->bus_add_driver()
     ->adb_read()                           ->gadget_bind_driver()
    <times-out without BIND event>           ->configfs_composite_bind()
                                              ->usb_add_function()
    ->open_functionfs()                        ->ffs_func_bind()
     ->adb_open()                               ->functionfs_bind()
                                           <ffs->state !=FFS_ACTIVE>
    
    The adb_open, adb_read, and adb_write operations are invoked from the
    daemon, but trying to bind the function is a process that is invoked by
    UDC write through configfs, which opens up the possibility of a race
    condition between the two paths. In this race scenario, the kernel panic
    occurs due to the WARN_ON from functionfs_bind when panic_on_warn is
    enabled. This commit fixes the kernel panic by removing the unnecessary
    WARN_ON.
    
    Kernel panic - not syncing: kernel: panic_on_warn set ...
    [   14.542395] Call trace:
    [   14.542464]  ffs_func_bind+0x1c8/0x14a8
    [   14.542468]  usb_add_function+0xcc/0x1f0
    [   14.542473]  configfs_composite_bind+0x468/0x588
    [   14.542478]  gadget_bind_driver+0x108/0x27c
    [   14.542483]  really_probe+0x190/0x374
    [   14.542488]  __driver_probe_device+0xa0/0x12c
    [   14.542492]  driver_probe_device+0x3c/0x220
    [   14.542498]  __driver_attach+0x11c/0x1fc
    [   14.542502]  bus_for_each_dev+0x104/0x160
    [   14.542506]  driver_attach+0x24/0x34
    [   14.542510]  bus_add_driver+0x154/0x270
    [   14.542514]  driver_register+0x68/0x104
    [   14.542518]  usb_gadget_register_driver_owner+0x48/0xf4
    [   14.542523]  gadget_dev_desc_UDC_store+0xf8/0x144
    [   14.542526]  configfs_write_iter+0xf0/0x138
    
    Fixes: ddf8abd25994 ("USB: f_fs: the FunctionFS driver")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Akash M <akash.m5@samsung.com>
    Link: https://lore.kernel.org/r/20241219125221.1679-1-akash.m5@samsung.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: f_uac2: Fix incorrect setting of bNumEndpoints [+ + +]
Author: Prashanth K <quic_prashk@quicinc.com>
Date:   Wed Dec 11 17:29:15 2024 +0530

    usb: gadget: f_uac2: Fix incorrect setting of bNumEndpoints
    
    commit 057bd54dfcf68b1f67e6dfc32a47a72e12198495 upstream.
    
    Currently afunc_bind sets std_ac_if_desc.bNumEndpoints to 1 if
    controls (mute/volume) are enabled. During next afunc_bind call,
    bNumEndpoints would be unchanged and incorrectly set to 1 even
    if the controls aren't enabled.
    
    Fix this by resetting the value of bNumEndpoints to 0 on every
    afunc_bind call.
    
    Fixes: eaf6cbe09920 ("usb: gadget: f_uac2: add volume and mute support")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Prashanth K <quic_prashk@quicinc.com>
    Link: https://lore.kernel.org/r/20241211115915.159864-1-quic_prashk@quicinc.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: u_serial: Disable ep before setting port to null to fix the crash caused by port being null [+ + +]
Author: Lianqin Hu <hulianqin@vivo.com>
Date:   Tue Dec 17 07:58:44 2024 +0000

    usb: gadget: u_serial: Disable ep before setting port to null to fix the crash caused by port being null
    
    commit 13014969cbf07f18d62ceea40bd8ca8ec9d36cec upstream.
    
    Considering that in some extreme cases, when performing the
    unbinding operation, gserial_disconnect has cleared gser->ioport,
    which triggers gadget reconfiguration, and then calls gs_read_complete,
    resulting in access to a null pointer. Therefore, ep is disabled before
    gserial_disconnect sets port to null to prevent this from happening.
    
    Call trace:
     gs_read_complete+0x58/0x240
     usb_gadget_giveback_request+0x40/0x160
     dwc3_remove_requests+0x170/0x484
     dwc3_ep0_out_start+0xb0/0x1d4
     __dwc3_gadget_start+0x25c/0x720
     kretprobe_trampoline.cfi_jt+0x0/0x8
     kretprobe_trampoline.cfi_jt+0x0/0x8
     udc_bind_to_driver+0x1d8/0x300
     usb_gadget_probe_driver+0xa8/0x1dc
     gadget_dev_desc_UDC_store+0x13c/0x188
     configfs_write_iter+0x160/0x1f4
     vfs_write+0x2d0/0x40c
     ksys_write+0x7c/0xf0
     __arm64_sys_write+0x20/0x30
     invoke_syscall+0x60/0x150
     el0_svc_common+0x8c/0xf8
     do_el0_svc+0x28/0xa0
     el0_svc+0x24/0x84
    
    Fixes: c1dca562be8a ("usb gadget: split out serial core")
    Cc: stable <stable@kernel.org>
    Suggested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Lianqin Hu <hulianqin@vivo.com>
    Link: https://lore.kernel.org/r/TYUPR06MB621733B5AC690DBDF80A0DCCD2042@TYUPR06MB6217.apcprd06.prod.outlook.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
USB: serial: cp210x: add Phoenix Contact UPS Device [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Wed Jan 8 11:24:36 2025 +0100

    USB: serial: cp210x: add Phoenix Contact UPS Device
    
    commit 854eee93bd6e3dca619d47087af4d65b2045828e upstream.
    
    Phoenix Contact sells UPS Quint devices [1] with a custom datacable [2]
    that embeds a Silicon Labs converter:
    
    Bus 001 Device 003: ID 1b93:1013 Silicon Labs Phoenix Contact UPS Device
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               2.00
      bDeviceClass            0
      bDeviceSubClass         0
      bDeviceProtocol         0
      bMaxPacketSize0        64
      idVendor           0x1b93
      idProduct          0x1013
      bcdDevice            1.00
      iManufacturer           1 Silicon Labs
      iProduct                2 Phoenix Contact UPS Device
      iSerial                 3 <redacted>
      bNumConfigurations     1
      Configuration Descriptor:
        bLength                 9
        bDescriptorType         2
        wTotalLength       0x0020
        bNumInterfaces          1
        bConfigurationValue     1
        iConfiguration          0
        bmAttributes         0x80
          (Bus Powered)
        MaxPower              100mA
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        0
          bAlternateSetting       0
          bNumEndpoints           2
          bInterfaceClass       255 Vendor Specific Class
          bInterfaceSubClass      0
          bInterfaceProtocol      0
          iInterface              2 Phoenix Contact UPS Device
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x01  EP 1 OUT
            bmAttributes            2
              Transfer Type            Bulk
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0040  1x 64 bytes
            bInterval               0
          Endpoint Descriptor:
            bLength                 7
            bDescriptorType         5
            bEndpointAddress     0x82  EP 2 IN
            bmAttributes            2
              Transfer Type            Bulk
              Synch Type               None
              Usage Type               Data
            wMaxPacketSize     0x0040  1x 64 bytes
            bInterval               0
    
    [1] https://www.phoenixcontact.com/en-pc/products/power-supply-unit-quint-ps-1ac-24dc-10-2866763
    [2] https://www.phoenixcontact.com/en-il/products/data-cable-preassembled-ifs-usb-datacable-2320500
    
    Reported-by: Giuseppe Corbelli <giuseppe.corbelli@antaresvision.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add MeiG Smart SRM815 [+ + +]
Author: Chukun Pan <amadeus@jmu.edu.cn>
Date:   Sun Dec 15 18:00:27 2024 +0800

    USB: serial: option: add MeiG Smart SRM815
    
    commit c1947d244f807b1f95605b75a4059e7b37b5dcc3 upstream.
    
    It looks like SRM815 shares ID with SRM825L.
    
    T:  Bus=03 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480  MxCh= 0
    D:  Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=2dee ProdID=4d22 Rev= 4.14
    S:  Manufacturer=MEIG
    S:  Product=LTE-A Module
    S:  SerialNumber=123456
    C:* #Ifs= 5 Cfg#= 1 Atr=80 MxPwr=500mA
    I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=83(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=85(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=87(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Signed-off-by: Chukun Pan <amadeus@jmu.edu.cn>
    Link: https://lore.kernel.org/lkml/20241215100027.1970930-1-amadeus@jmu.edu.cn/
    Link: https://lore.kernel.org/all/4333b4d0-281f-439d-9944-5570cbc4971d@gmail.com/
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add Neoway N723-EA support [+ + +]
Author: Michal Hrusecky <michal.hrusecky@turris.com>
Date:   Tue Jan 7 17:08:29 2025 +0100

    USB: serial: option: add Neoway N723-EA support
    
    commit f5b435be70cb126866fa92ffc6f89cda9e112c75 upstream.
    
    Update the USB serial option driver to support Neoway N723-EA.
    
    ID 2949:8700 Marvell Mobile Composite Device Bus
    
    T:  Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=2949 ProdID=8700 Rev= 1.00
    S:  Manufacturer=Marvell
    S:  Product=Mobile Composite Device Bus
    S:  SerialNumber=200806006809080000
    C:* #Ifs= 5 Cfg#= 1 Atr=c0 MxPwr=500mA
    A:  FirstIf#= 0 IfCount= 2 Cls=e0(wlcon) Sub=01 Prot=03
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=e0(wlcon) Sub=01 Prot=03 Driver=rndis_host
    E:  Ad=87(I) Atr=03(Int.) MxPS=  64 Ivl=4096ms
    I:* If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=0c(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=89(I) Atr=03(Int.) MxPS=  64 Ivl=4096ms
    E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=0b(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=86(I) Atr=03(Int.) MxPS=  64 Ivl=4096ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=0e(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 6 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=88(I) Atr=03(Int.) MxPS=  64 Ivl=4096ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=0a(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Tested successfully connecting to the Internet via rndis interface after
    dialing via AT commands on If#=4 or If#=6.
    
    Not sure of the purpose of the other serial interface.
    
    Signed-off-by: Michal Hrusecky <michal.hrusecky@turris.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: usblp: return error when setting unsupported protocol [+ + +]
Author: Jun Yan <jerrysteve1101@gmail.com>
Date:   Thu Dec 12 22:38:52 2024 +0800

    USB: usblp: return error when setting unsupported protocol
    
    commit 7a3d76a0b60b3f6fc3375e4de2174bab43f64545 upstream.
    
    Fix the regression introduced by commit d8c6edfa3f4e ("USB:
    usblp: don't call usb_set_interface if there's a single alt"),
    which causes that unsupported protocols can also be set via
    ioctl when the num_altsetting of the device is 1.
    
    Move the check for protocol support to the earlier stage.
    
    Fixes: d8c6edfa3f4e ("USB: usblp: don't call usb_set_interface if there's a single alt")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Jun Yan <jerrysteve1101@gmail.com>
    Link: https://lore.kernel.org/r/20241212143852.671889-1-jerrysteve1101@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xhci: use pm_ptr() instead of #ifdef for CONFIG_PM conditionals [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue Mar 28 15:10:43 2023 +0200

    xhci: use pm_ptr() instead of #ifdef for CONFIG_PM conditionals
    
    commit 130eac4170859fb368681e00d390f20f44bbf27b upstream.
    
    A recent patch caused an unused-function warning in builds with
    CONFIG_PM disabled, after the function became marked 'static':
    
    drivers/usb/host/xhci-pci.c:91:13: error: 'xhci_msix_sync_irqs' defined but not used [-Werror=unused-function]
       91 | static void xhci_msix_sync_irqs(struct xhci_hcd *xhci)
          |             ^~~~~~~~~~~~~~~~~~~
    
    This could be solved by adding another #ifdef, but as there is
    a trend towards removing CONFIG_PM checks in favor of helper
    macros, do the same conversion here and use pm_ptr() to get
    either a function pointer or NULL but avoid the warning.
    
    As the hidden functions reference some other symbols, make
    sure those are visible at compile time, at the minimal cost of
    a few extra bytes for 'struct usb_device'.
    
    Fixes: 9abe15d55dcc ("xhci: Move xhci MSI sync function to to xhci-pci")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Link: https://lore.kernel.org/r/20230328131114.1296430-1-arnd@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>