Changelog in Linux kernel 5.15.176

 
af_packet: fix vlan_get_protocol_dgram() vs MSG_PEEK [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Mon Dec 30 16:10:04 2024 +0000

    af_packet: fix vlan_get_protocol_dgram() vs MSG_PEEK
    
    [ Upstream commit f91a5b8089389eb408501af2762f168c3aaa7b79 ]
    
    Blamed commit forgot MSG_PEEK case, allowing a crash [1] as found
    by syzbot.
    
    Rework vlan_get_protocol_dgram() to not touch skb at all,
    so that it can be used from many cpus on the same skb.
    
    Add a const qualifier to skb argument.
    
    [1]
    skbuff: skb_under_panic: text:ffffffff8a8ccd05 len:29 put:14 head:ffff88807fc8e400 data:ffff88807fc8e3f4 tail:0x11 end:0x140 dev:<NULL>
    ------------[ cut here ]------------
     kernel BUG at net/core/skbuff.c:206 !
    Oops: invalid opcode: 0000 [#1] PREEMPT SMP KASAN PTI
    CPU: 1 UID: 0 PID: 5892 Comm: syz-executor883 Not tainted 6.13.0-rc4-syzkaller-00054-gd6ef8b40d075 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
     RIP: 0010:skb_panic net/core/skbuff.c:206 [inline]
     RIP: 0010:skb_under_panic+0x14b/0x150 net/core/skbuff.c:216
    Code: 0b 8d 48 c7 c6 86 d5 25 8e 48 8b 54 24 08 8b 0c 24 44 8b 44 24 04 4d 89 e9 50 41 54 41 57 41 56 e8 5a 69 79 f7 48 83 c4 20 90 <0f> 0b 0f 1f 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 f3
    RSP: 0018:ffffc900038d7638 EFLAGS: 00010282
    RAX: 0000000000000087 RBX: dffffc0000000000 RCX: 609ffd18ea660600
    RDX: 0000000000000000 RSI: 0000000080000000 RDI: 0000000000000000
    RBP: ffff88802483c8d0 R08: ffffffff817f0a8c R09: 1ffff9200071ae60
    R10: dffffc0000000000 R11: fffff5200071ae61 R12: 0000000000000140
    R13: ffff88807fc8e400 R14: ffff88807fc8e3f4 R15: 0000000000000011
    FS:  00007fbac5e006c0(0000) GS:ffff8880b8700000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007fbac5e00d58 CR3: 000000001238e000 CR4: 00000000003526f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
      skb_push+0xe5/0x100 net/core/skbuff.c:2636
      vlan_get_protocol_dgram+0x165/0x290 net/packet/af_packet.c:585
      packet_recvmsg+0x948/0x1ef0 net/packet/af_packet.c:3552
      sock_recvmsg_nosec net/socket.c:1033 [inline]
      sock_recvmsg+0x22f/0x280 net/socket.c:1055
      ____sys_recvmsg+0x1c6/0x480 net/socket.c:2803
      ___sys_recvmsg net/socket.c:2845 [inline]
      do_recvmmsg+0x426/0xab0 net/socket.c:2940
      __sys_recvmmsg net/socket.c:3014 [inline]
      __do_sys_recvmmsg net/socket.c:3037 [inline]
      __se_sys_recvmmsg net/socket.c:3030 [inline]
      __x64_sys_recvmmsg+0x199/0x250 net/socket.c:3030
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Fixes: 79eecf631c14 ("af_packet: Handle outgoing VLAN packets without hardware offloading")
    Reported-by: syzbot+74f70bb1cb968bf09e4f@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/6772c485.050a0220.2f3838.04c5.GAE@google.com/T/#u
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Chengen Du <chengen.du@canonical.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Link: https://patch.msgid.link/20241230161004.2681892-2-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

af_packet: fix vlan_get_tci() vs MSG_PEEK [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Mon Dec 30 16:10:03 2024 +0000

    af_packet: fix vlan_get_tci() vs MSG_PEEK
    
    [ Upstream commit 77ee7a6d16b6ec07b5c3ae2b6b60a24c1afbed09 ]
    
    Blamed commit forgot MSG_PEEK case, allowing a crash [1] as found
    by syzbot.
    
    Rework vlan_get_tci() to not touch skb at all,
    so that it can be used from many cpus on the same skb.
    
    Add a const qualifier to skb argument.
    
    [1]
    skbuff: skb_under_panic: text:ffffffff8a8da482 len:32 put:14 head:ffff88807a1d5800 data:ffff88807a1d5810 tail:0x14 end:0x140 dev:<NULL>
    ------------[ cut here ]------------
     kernel BUG at net/core/skbuff.c:206 !
    Oops: invalid opcode: 0000 [#1] PREEMPT SMP KASAN PTI
    CPU: 0 UID: 0 PID: 5880 Comm: syz-executor172 Not tainted 6.13.0-rc3-syzkaller-00762-g9268abe611b0 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
     RIP: 0010:skb_panic net/core/skbuff.c:206 [inline]
     RIP: 0010:skb_under_panic+0x14b/0x150 net/core/skbuff.c:216
    Code: 0b 8d 48 c7 c6 9e 6c 26 8e 48 8b 54 24 08 8b 0c 24 44 8b 44 24 04 4d 89 e9 50 41 54 41 57 41 56 e8 3a 5a 79 f7 48 83 c4 20 90 <0f> 0b 0f 1f 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 f3
    RSP: 0018:ffffc90003baf5b8 EFLAGS: 00010286
    RAX: 0000000000000087 RBX: dffffc0000000000 RCX: 8565c1eec37aa000
    RDX: 0000000000000000 RSI: 0000000080000000 RDI: 0000000000000000
    RBP: ffff88802616fb50 R08: ffffffff817f0a4c R09: 1ffff92000775e50
    R10: dffffc0000000000 R11: fffff52000775e51 R12: 0000000000000140
    R13: ffff88807a1d5800 R14: ffff88807a1d5810 R15: 0000000000000014
    FS:  00007fa03261f6c0(0000) GS:ffff8880b8600000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007ffd65753000 CR3: 0000000031720000 CR4: 00000000003526f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
      skb_push+0xe5/0x100 net/core/skbuff.c:2636
      vlan_get_tci+0x272/0x550 net/packet/af_packet.c:565
      packet_recvmsg+0x13c9/0x1ef0 net/packet/af_packet.c:3616
      sock_recvmsg_nosec net/socket.c:1044 [inline]
      sock_recvmsg+0x22f/0x280 net/socket.c:1066
      ____sys_recvmsg+0x1c6/0x480 net/socket.c:2814
      ___sys_recvmsg net/socket.c:2856 [inline]
      do_recvmmsg+0x426/0xab0 net/socket.c:2951
      __sys_recvmmsg net/socket.c:3025 [inline]
      __do_sys_recvmmsg net/socket.c:3048 [inline]
      __se_sys_recvmmsg net/socket.c:3041 [inline]
      __x64_sys_recvmmsg+0x199/0x250 net/socket.c:3041
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
    
    Fixes: 79eecf631c14 ("af_packet: Handle outgoing VLAN packets without hardware offloading")
    Reported-by: syzbot+8400677f3fd43f37d3bc@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/6772c485.050a0220.2f3838.04c6.GAE@google.com/T/#u
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Chengen Du <chengen.du@canonical.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Link: https://patch.msgid.link/20241230161004.2681892-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ALSA: hda/conexant: fix Z60MR100 startup pop issue [+ + +]
Author: bo liu <bo.liu@senarytech.com>
Date:   Fri Nov 29 09:44:41 2024 +0800

    ALSA: hda/conexant: fix Z60MR100 startup pop issue
    
    [ Upstream commit 947c4012f8f03a8bb946beb6e5294d5e32817d67 ]
    
    When Z60MR100 startup, speaker will output a pop. To fix this issue,
    we mute codec by init verbs in bios when system startup, and set GPIO
    to low to unmute codec in codec driver when it loaded .
    
    [ white space fixes and compile warning fix by tiwai ]
    
    Signed-off-by: bo liu <bo.liu@senarytech.com>
    Link: https://patch.msgid.link/20241129014441.437205-1-bo.liu@senarytech.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: usb-audio: US16x08: Initialize array before use [+ + +]
Author: Tanya Agarwal <tanyaagarwal25699@gmail.com>
Date:   Sun Dec 29 11:32:42 2024 +0530

    ALSA: usb-audio: US16x08: Initialize array before use
    
    [ Upstream commit b06a6187ef983f501e93faa56209169752d3bde3 ]
    
    Initialize meter_urb array before use in mixer_us16x08.c.
    
    CID 1410197: (#1 of 1): Uninitialized scalar variable (UNINIT)
    uninit_use_in_call: Using uninitialized value *meter_urb when
    calling get_meter_levels_from_urb.
    
    Coverity Link:
    https://scan7.scan.coverity.com/#/project-view/52849/11354?selectedIssue=1410197
    
    Fixes: d2bb390a2081 ("ALSA: usb-audio: Tascam US-16x08 DSP mixer quirk")
    Signed-off-by: Tanya Agarwal <tanyaagarwal25699@gmail.com>
    Link: https://patch.msgid.link/20241229060240.1642-1-tanyaagarwal25699@gmail.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: usb: Fix UBSAN warning in parse_audio_unit() [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Sun Jul 28 12:08:55 2024 -0400

    ALSA: usb: Fix UBSAN warning in parse_audio_unit()
    
    [ Upstream commit 2f38cf730caedaeacdefb7ff35b0a3c1168117f9 ]
    
    A malformed USB descriptor may pass the lengthy mixer description with
    a lot of channels, and this may overflow the 32bit integer shift
    size, as caught by syzbot UBSAN test.  Although this won't cause any
    real trouble, it's better to address.
    
    This patch introduces a sanity check of the number of channels to bail
    out the parsing when too many channels are found.
    
    Reported-by: syzbot+78d5b129a762182225aa@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/0000000000000adac5061d3c7355@google.com
    Link: https://patch.msgid.link/20240715123619.26612-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ARC: build: Try to guess GCC variant of cross compiler [+ + +]
Author: Leon Romanovsky <leon@kernel.org>
Date:   Tue Dec 3 14:37:15 2024 +0200

    ARC: build: Try to guess GCC variant of cross compiler
    
    [ Upstream commit 824927e88456331c7a999fdf5d9d27923b619590 ]
    
    ARC GCC compiler is packaged starting from Fedora 39i and the GCC
    variant of cross compile tools has arc-linux-gnu- prefix and not
    arc-linux-. This is causing that CROSS_COMPILE variable is left unset.
    
    This change allows builds without need to supply CROSS_COMPILE argument
    if distro package is used.
    
    Before this change:
    $ make -j 128 ARCH=arc W=1 drivers/infiniband/hw/mlx4/
      gcc: warning: ‘-mcpu=’ is deprecated; use ‘-mtune=’ or ‘-march=’ instead
      gcc: error: unrecognized command-line option ‘-mmedium-calls’
      gcc: error: unrecognized command-line option ‘-mlock’
      gcc: error: unrecognized command-line option ‘-munaligned-access’
    
    [1] https://packages.fedoraproject.org/pkgs/cross-gcc/gcc-arc-linux-gnu/index.html
    Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Vineet Gupta <vgupta@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
arm64: Ensure bits ASID[15:8] are masked out when the kernel uses 8-bit ASIDs [+ + +]
Author: Catalin Marinas <catalin.marinas@arm.com>
Date:   Tue Dec 3 15:19:41 2024 +0000

    arm64: Ensure bits ASID[15:8] are masked out when the kernel uses 8-bit ASIDs
    
    [ Upstream commit c0900d15d31c2597dd9f634c8be2b71762199890 ]
    
    Linux currently sets the TCR_EL1.AS bit unconditionally during CPU
    bring-up. On an 8-bit ASID CPU, this is RES0 and ignored, otherwise
    16-bit ASIDs are enabled. However, if running in a VM and the hypervisor
    reports 8-bit ASIDs (ID_AA64MMFR0_EL1.ASIDBits == 0) on a 16-bit ASIDs
    CPU, Linux uses bits 8 to 63 as a generation number for tracking old
    process ASIDs. The bottom 8 bits of this generation end up being written
    to TTBR1_EL1 and also used for the ASID-based TLBI operations as the
    upper 8 bits of the ASID. Following an ASID roll-over event we can have
    threads of the same application with the same 8-bit ASID but different
    generation numbers running on separate CPUs. Both TLB caching and the
    TLBI operations will end up using different actual 16-bit ASIDs for the
    same process.
    
    A similar scenario can happen in a big.LITTLE configuration if the boot
    CPU only uses 8-bit ASIDs while secondary CPUs have 16-bit ASIDs.
    
    Ensure that the ASID generation is only tracked by bits 16 and up,
    leaving bits 15:8 as 0 if the kernel uses 8-bit ASIDs. Note that
    clearing TCR_EL1.AS is not sufficient since the architecture requires
    that the top 8 bits of the ASID passed to TLBI instructions are 0 rather
    than ignored in such configuration.
    
    Cc: stable@vger.kernel.org
    Cc: Will Deacon <will@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: James Morse <james.morse@arm.com>
    Acked-by: Mark Rutland <mark.rutland@arm.com>
    Acked-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20241203151941.353796-1-catalin.marinas@arm.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: mm: Rename asid2idx() to ctxid2asid() [+ + +]
Author: Yunfeng Ye <yeyunfeng@huawei.com>
Date:   Thu Dec 9 09:42:25 2021 +0800

    arm64: mm: Rename asid2idx() to ctxid2asid()
    
    [ Upstream commit a3a5b763410c7bceacf41a52071134d9dc26202a ]
    
    The commit 0c8ea531b774 ("arm64: mm: Allocate ASIDs in pairs") introduce
    the asid2idx and idx2asid macro, but these macros are not really useful
    after the commit f88f42f853a8 ("arm64: context: Free up kernel ASIDs if
    KPTI is not in use").
    
    The code "(asid & ~ASID_MASK)" can be instead by a macro, which is the
    same code with asid2idx(). So rename it to ctxid2asid() for a better
    understanding.
    
    Also we add asid2ctxid() macro, the contextid can be generated based on
    the asid and generation through this macro.
    
    Signed-off-by: Yunfeng Ye <yeyunfeng@huawei.com>
    Reviewed-by: Kefeng Wang <wangkefeng.wang@huawei.com>
    Link: https://lore.kernel.org/r/c31516eb-6d15-94e0-421c-305fc010ea79@huawei.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Stable-dep-of: c0900d15d31c ("arm64: Ensure bits ASID[15:8] are masked out when the kernel uses 8-bit ASIDs")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ASoC: Intel: sof_sdw: fix jack detection on ADL-N variant RVP [+ + +]
Author: Pierre-Louis Bossart <pierre-louis.bossart@linux.dev>
Date:   Sun Jul 28 12:08:51 2024 -0400

    ASoC: Intel: sof_sdw: fix jack detection on ADL-N variant RVP
    
    [ Upstream commit 65c90df918205bc84f5448550cde76a54dae5f52 ]
    
    Experimental tests show that JD2_100K is required, otherwise the jack
    is detected always even with nothing plugged-in.
    
    To avoid matching with other known quirks the SKU information is used.
    
    Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Link: https://patch.msgid.link/20240624121119.91552-2-pierre-louis.bossart@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf: Check negative offsets in __bpf_skb_min_len() [+ + +]
Author: Cong Wang <cong.wang@bytedance.com>
Date:   Thu Dec 12 19:40:54 2024 -0800

    bpf: Check negative offsets in __bpf_skb_min_len()
    
    [ Upstream commit 9ecc4d858b92c1bb0673ad9c327298e600c55659 ]
    
    skb_network_offset() and skb_transport_offset() can be negative when
    they are called after we pull the transport header, for example, when
    we use eBPF sockmap at the point of ->sk_data_ready().
    
    __bpf_skb_min_len() uses an unsigned int to get these offsets, this
    leads to a very large number which then causes bpf_skb_change_tail()
    failed unexpectedly.
    
    Fix this by using a signed int to get these offsets and ensure the
    minimum is at least zero.
    
    Fixes: 5293efe62df8 ("bpf: add bpf_skb_change_tail helper")
    Signed-off-by: Cong Wang <cong.wang@bytedance.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: John Fastabend <john.fastabend@gmail.com>
    Link: https://lore.kernel.org/bpf/20241213034057.246437-2-xiyou.wangcong@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Check validity of link->type in bpf_link_show_fdinfo() [+ + +]
Author: Hou Tao <houtao1@huawei.com>
Date:   Fri Dec 27 14:04:35 2024 +0800

    bpf: Check validity of link->type in bpf_link_show_fdinfo()
    
    commit 8421d4c8762bd022cb491f2f0f7019ef51b4f0a7 upstream.
    
    If a newly-added link type doesn't invoke BPF_LINK_TYPE(), accessing
    bpf_link_type_strs[link->type] may result in an out-of-bounds access.
    
    To spot such missed invocations early in the future, checking the
    validity of link->type in bpf_link_show_fdinfo() and emitting a warning
    when such invocations are missed.
    
    Signed-off-by: Hou Tao <houtao1@huawei.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20241024013558.1135167-3-houtao@huaweicloud.com
    [ shung-hsi.yu: break up existing seq_printf() call since commit 68b04864ca42
      ("bpf: Create links for BPF struct_ops maps.") is not present ]
    Signed-off-by: Shung-Hsi Yu <shung-hsi.yu@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: fix potential error return [+ + +]
Author: Anton Protopopov <aspsk@isovalent.com>
Date:   Tue Dec 10 11:42:45 2024 +0000

    bpf: fix potential error return
    
    [ Upstream commit c4441ca86afe4814039ee1b32c39d833c1a16bbc ]
    
    The bpf_remove_insns() function returns WARN_ON_ONCE(error), where
    error is a result of bpf_adj_branches(), and thus should be always 0
    However, if for any reason it is not 0, then it will be converted to
    boolean by WARN_ON_ONCE and returned to user space as 1, not an actual
    error value. Fix this by returning the original err after the WARN check.
    
    Signed-off-by: Anton Protopopov <aspsk@isovalent.com>
    Acked-by: Jiri Olsa <jolsa@kernel.org>
    Acked-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/r/20241210114245.836164-1-aspsk@isovalent.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
btrfs: avoid monopolizing a core when activating a swap file [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Mon Dec 9 16:43:44 2024 +0000

    btrfs: avoid monopolizing a core when activating a swap file
    
    commit 2c8507c63f5498d4ee4af404a8e44ceae4345056 upstream.
    
    During swap activation we iterate over the extents of a file and we can
    have many thousands of them, so we can end up in a busy loop monopolizing
    a core. Avoid this by doing a voluntary reschedule after processing each
    extent.
    
    CC: stable@vger.kernel.org # 5.4+
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: fix use-after-free when COWing tree bock and tracing is enabled [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Wed Dec 11 16:08:07 2024 +0000

    btrfs: fix use-after-free when COWing tree bock and tracing is enabled
    
    [ Upstream commit 44f52bbe96dfdbe4aca3818a2534520082a07040 ]
    
    When a COWing a tree block, at btrfs_cow_block(), and we have the
    tracepoint trace_btrfs_cow_block() enabled and preemption is also enabled
    (CONFIG_PREEMPT=y), we can trigger a use-after-free in the COWed extent
    buffer while inside the tracepoint code. This is because in some paths
    that call btrfs_cow_block(), such as btrfs_search_slot(), we are holding
    the last reference on the extent buffer @buf so btrfs_force_cow_block()
    drops the last reference on the @buf extent buffer when it calls
    free_extent_buffer_stale(buf), which schedules the release of the extent
    buffer with RCU. This means that if we are on a kernel with preemption,
    the current task may be preempted before calling trace_btrfs_cow_block()
    and the extent buffer already released by the time trace_btrfs_cow_block()
    is called, resulting in a use-after-free.
    
    Fix this by moving the trace_btrfs_cow_block() from btrfs_cow_block() to
    btrfs_force_cow_block() before the COWed extent buffer is freed.
    This also has a side effect of invoking the tracepoint in the tree defrag
    code, at defrag.c:btrfs_realloc_node(), since btrfs_force_cow_block() is
    called there, but this is fine and it was actually missing there.
    
    Reported-by: syzbot+8517da8635307182c8a5@syzkaller.appspotmail.com
    Link: https://lore.kernel.org/linux-btrfs/6759a9b9.050a0220.1ac542.000d.GAE@google.com/
    CC: stable@vger.kernel.org # 5.4+
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: flush delalloc workers queue before stopping cleaner kthread during unmount [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Tue Dec 3 11:53:27 2024 +0000

    btrfs: flush delalloc workers queue before stopping cleaner kthread during unmount
    
    [ Upstream commit f10bef73fb355e3fc85e63a50386798be68ff486 ]
    
    During the unmount path, at close_ctree(), we first stop the cleaner
    kthread, using kthread_stop() which frees the associated task_struct, and
    then stop and destroy all the work queues. However after we stopped the
    cleaner we may still have a worker from the delalloc_workers queue running
    inode.c:submit_compressed_extents(), which calls btrfs_add_delayed_iput(),
    which in turn tries to wake up the cleaner kthread - which was already
    destroyed before, resulting in a use-after-free on the task_struct.
    
    Syzbot reported this with the following stack traces:
    
      BUG: KASAN: slab-use-after-free in __lock_acquire+0x78/0x2100 kernel/locking/lockdep.c:5089
      Read of size 8 at addr ffff8880259d2818 by task kworker/u8:3/52
    
      CPU: 1 UID: 0 PID: 52 Comm: kworker/u8:3 Not tainted 6.13.0-rc1-syzkaller-00002-gcdd30ebb1b9f #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
      Workqueue: btrfs-delalloc btrfs_work_helper
      Call Trace:
       <TASK>
       __dump_stack lib/dump_stack.c:94 [inline]
       dump_stack_lvl+0x241/0x360 lib/dump_stack.c:120
       print_address_description mm/kasan/report.c:378 [inline]
       print_report+0x169/0x550 mm/kasan/report.c:489
       kasan_report+0x143/0x180 mm/kasan/report.c:602
       __lock_acquire+0x78/0x2100 kernel/locking/lockdep.c:5089
       lock_acquire+0x1ed/0x550 kernel/locking/lockdep.c:5849
       __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
       _raw_spin_lock_irqsave+0xd5/0x120 kernel/locking/spinlock.c:162
       class_raw_spinlock_irqsave_constructor include/linux/spinlock.h:551 [inline]
       try_to_wake_up+0xc2/0x1470 kernel/sched/core.c:4205
       submit_compressed_extents+0xdf/0x16e0 fs/btrfs/inode.c:1615
       run_ordered_work fs/btrfs/async-thread.c:288 [inline]
       btrfs_work_helper+0x96f/0xc40 fs/btrfs/async-thread.c:324
       process_one_work kernel/workqueue.c:3229 [inline]
       process_scheduled_works+0xa66/0x1840 kernel/workqueue.c:3310
       worker_thread+0x870/0xd30 kernel/workqueue.c:3391
       kthread+0x2f0/0x390 kernel/kthread.c:389
       ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147
       ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244
       </TASK>
    
      Allocated by task 2:
       kasan_save_stack mm/kasan/common.c:47 [inline]
       kasan_save_track+0x3f/0x80 mm/kasan/common.c:68
       unpoison_slab_object mm/kasan/common.c:319 [inline]
       __kasan_slab_alloc+0x66/0x80 mm/kasan/common.c:345
       kasan_slab_alloc include/linux/kasan.h:250 [inline]
       slab_post_alloc_hook mm/slub.c:4104 [inline]
       slab_alloc_node mm/slub.c:4153 [inline]
       kmem_cache_alloc_node_noprof+0x1d9/0x380 mm/slub.c:4205
       alloc_task_struct_node kernel/fork.c:180 [inline]
       dup_task_struct+0x57/0x8c0 kernel/fork.c:1113
       copy_process+0x5d1/0x3d50 kernel/fork.c:2225
       kernel_clone+0x223/0x870 kernel/fork.c:2807
       kernel_thread+0x1bc/0x240 kernel/fork.c:2869
       create_kthread kernel/kthread.c:412 [inline]
       kthreadd+0x60d/0x810 kernel/kthread.c:767
       ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147
       ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244
    
      Freed by task 24:
       kasan_save_stack mm/kasan/common.c:47 [inline]
       kasan_save_track+0x3f/0x80 mm/kasan/common.c:68
       kasan_save_free_info+0x40/0x50 mm/kasan/generic.c:582
       poison_slab_object mm/kasan/common.c:247 [inline]
       __kasan_slab_free+0x59/0x70 mm/kasan/common.c:264
       kasan_slab_free include/linux/kasan.h:233 [inline]
       slab_free_hook mm/slub.c:2338 [inline]
       slab_free mm/slub.c:4598 [inline]
       kmem_cache_free+0x195/0x410 mm/slub.c:4700
       put_task_struct include/linux/sched/task.h:144 [inline]
       delayed_put_task_struct+0x125/0x300 kernel/exit.c:227
       rcu_do_batch kernel/rcu/tree.c:2567 [inline]
       rcu_core+0xaaa/0x17a0 kernel/rcu/tree.c:2823
       handle_softirqs+0x2d4/0x9b0 kernel/softirq.c:554
       run_ksoftirqd+0xca/0x130 kernel/softirq.c:943
       smpboot_thread_fn+0x544/0xa30 kernel/smpboot.c:164
       kthread+0x2f0/0x390 kernel/kthread.c:389
       ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147
       ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244
    
      Last potentially related work creation:
       kasan_save_stack+0x3f/0x60 mm/kasan/common.c:47
       __kasan_record_aux_stack+0xac/0xc0 mm/kasan/generic.c:544
       __call_rcu_common kernel/rcu/tree.c:3086 [inline]
       call_rcu+0x167/0xa70 kernel/rcu/tree.c:3190
       context_switch kernel/sched/core.c:5372 [inline]
       __schedule+0x1803/0x4be0 kernel/sched/core.c:6756
       __schedule_loop kernel/sched/core.c:6833 [inline]
       schedule+0x14b/0x320 kernel/sched/core.c:6848
       schedule_timeout+0xb0/0x290 kernel/time/sleep_timeout.c:75
       do_wait_for_common kernel/sched/completion.c:95 [inline]
       __wait_for_common kernel/sched/completion.c:116 [inline]
       wait_for_common kernel/sched/completion.c:127 [inline]
       wait_for_completion+0x355/0x620 kernel/sched/completion.c:148
       kthread_stop+0x19e/0x640 kernel/kthread.c:712
       close_ctree+0x524/0xd60 fs/btrfs/disk-io.c:4328
       generic_shutdown_super+0x139/0x2d0 fs/super.c:642
       kill_anon_super+0x3b/0x70 fs/super.c:1237
       btrfs_kill_super+0x41/0x50 fs/btrfs/super.c:2112
       deactivate_locked_super+0xc4/0x130 fs/super.c:473
       cleanup_mnt+0x41f/0x4b0 fs/namespace.c:1373
       task_work_run+0x24f/0x310 kernel/task_work.c:239
       ptrace_notify+0x2d2/0x380 kernel/signal.c:2503
       ptrace_report_syscall include/linux/ptrace.h:415 [inline]
       ptrace_report_syscall_exit include/linux/ptrace.h:477 [inline]
       syscall_exit_work+0xc7/0x1d0 kernel/entry/common.c:173
       syscall_exit_to_user_mode_prepare kernel/entry/common.c:200 [inline]
       __syscall_exit_to_user_mode_work kernel/entry/common.c:205 [inline]
       syscall_exit_to_user_mode+0x24a/0x340 kernel/entry/common.c:218
       do_syscall_64+0x100/0x230 arch/x86/entry/common.c:89
       entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
      The buggy address belongs to the object at ffff8880259d1e00
       which belongs to the cache task_struct of size 7424
      The buggy address is located 2584 bytes inside of
       freed 7424-byte region [ffff8880259d1e00, ffff8880259d3b00)
    
      The buggy address belongs to the physical page:
      page: refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x259d0
      head: order:3 mapcount:0 entire_mapcount:0 nr_pages_mapped:0 pincount:0
      memcg:ffff88802f4b56c1
      flags: 0xfff00000000040(head|node=0|zone=1|lastcpupid=0x7ff)
      page_type: f5(slab)
      raw: 00fff00000000040 ffff88801bafe500 dead000000000100 dead000000000122
      raw: 0000000000000000 0000000000040004 00000001f5000000 ffff88802f4b56c1
      head: 00fff00000000040 ffff88801bafe500 dead000000000100 dead000000000122
      head: 0000000000000000 0000000000040004 00000001f5000000 ffff88802f4b56c1
      head: 00fff00000000003 ffffea0000967401 ffffffffffffffff 0000000000000000
      head: 0000000000000008 0000000000000000 00000000ffffffff 0000000000000000
      page dumped because: kasan: bad access detected
      page_owner tracks the page as allocated
      page last allocated via order 3, migratetype Unmovable, gfp_mask 0xd20c0(__GFP_IO|__GFP_FS|__GFP_NOWARN|__GFP_NORETRY|__GFP_COMP|__GFP_NOMEMALLOC), pid 12, tgid 12 (kworker/u8:1), ts 7328037942, free_ts 0
       set_page_owner include/linux/page_owner.h:32 [inline]
       post_alloc_hook+0x1f3/0x230 mm/page_alloc.c:1556
       prep_new_page mm/page_alloc.c:1564 [inline]
       get_page_from_freelist+0x3651/0x37a0 mm/page_alloc.c:3474
       __alloc_pages_noprof+0x292/0x710 mm/page_alloc.c:4751
       alloc_pages_mpol_noprof+0x3e8/0x680 mm/mempolicy.c:2265
       alloc_slab_page+0x6a/0x140 mm/slub.c:2408
       allocate_slab+0x5a/0x2f0 mm/slub.c:2574
       new_slab mm/slub.c:2627 [inline]
       ___slab_alloc+0xcd1/0x14b0 mm/slub.c:3815
       __slab_alloc+0x58/0xa0 mm/slub.c:3905
       __slab_alloc_node mm/slub.c:3980 [inline]
       slab_alloc_node mm/slub.c:4141 [inline]
       kmem_cache_alloc_node_noprof+0x269/0x380 mm/slub.c:4205
       alloc_task_struct_node kernel/fork.c:180 [inline]
       dup_task_struct+0x57/0x8c0 kernel/fork.c:1113
       copy_process+0x5d1/0x3d50 kernel/fork.c:2225
       kernel_clone+0x223/0x870 kernel/fork.c:2807
       user_mode_thread+0x132/0x1a0 kernel/fork.c:2885
       call_usermodehelper_exec_work+0x5c/0x230 kernel/umh.c:171
       process_one_work kernel/workqueue.c:3229 [inline]
       process_scheduled_works+0xa66/0x1840 kernel/workqueue.c:3310
       worker_thread+0x870/0xd30 kernel/workqueue.c:3391
      page_owner free stack trace missing
    
      Memory state around the buggy address:
       ffff8880259d2700: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
       ffff8880259d2780: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      >ffff8880259d2800: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                                  ^
       ffff8880259d2880: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
       ffff8880259d2900: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      ==================================================================
    
    Fix this by flushing the delalloc workers queue before stopping the
    cleaner kthread.
    
    Reported-by: syzbot+b7cf50a0c173770dcb14@syzkaller.appspotmail.com
    Link: https://lore.kernel.org/linux-btrfs/674ed7e8.050a0220.48a03.0031.GAE@google.com/
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: rename and export __btrfs_cow_block() [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Wed Sep 27 12:09:26 2023 +0100

    btrfs: rename and export __btrfs_cow_block()
    
    [ Upstream commit 95f93bc4cbcac6121a5ee85cd5019ee8e7447e0b ]
    
    Rename and export __btrfs_cow_block() as btrfs_force_cow_block(). This is
    to allow to move defrag specific code out of ctree.c and into defrag.c in
    one of the next patches.
    
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Stable-dep-of: 44f52bbe96df ("btrfs: fix use-after-free when COWing tree bock and tracing is enabled")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: sysfs: convert scnprintf and snprintf to sysfs_emit [+ + +]
Author: Anand Jain <anand.jain@oracle.com>
Date:   Tue Oct 19 08:22:09 2021 +0800

    btrfs: sysfs: convert scnprintf and snprintf to sysfs_emit
    
    [ Upstream commit 020e5277583dc26d7a5322ff2d334c764ac1faa8 ]
    
    Commit 2efc459d06f1 ("sysfs: Add sysfs_emit and sysfs_emit_at to format
    sysfs out") merged in 5.10 introduced two new functions sysfs_emit() and
    sysfs_emit_at() which are aware of the PAGE_SIZE limit of the output
    buffer.
    
    Use the above two new functions instead of scnprintf() and snprintf()
    in various sysfs show().
    
    Reviewed-by: Josef Bacik <josef@toxicpanda.com>
    Signed-off-by: Anand Jain <anand.jain@oracle.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Stable-dep-of: fca432e73db2 ("btrfs: sysfs: fix direct super block member reads")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: sysfs: fix direct super block member reads [+ + +]
Author: Qu Wenruo <wqu@suse.com>
Date:   Wed Dec 18 17:00:56 2024 +1030

    btrfs: sysfs: fix direct super block member reads
    
    [ Upstream commit fca432e73db2bec0fdbfbf6d98d3ebcd5388a977 ]
    
    The following sysfs entries are reading super block member directly,
    which can have a different endian and cause wrong values:
    
    - sys/fs/btrfs/<uuid>/nodesize
    - sys/fs/btrfs/<uuid>/sectorsize
    - sys/fs/btrfs/<uuid>/clone_alignment
    
    Thankfully those values (nodesize and sectorsize) are always aligned
    inside the btrfs_super_block, so it won't trigger unaligned read errors,
    just endian problems.
    
    Fix them by using the native cached members instead.
    
    Fixes: df93589a1737 ("btrfs: export more from FS_INFO to sysfs")
    CC: stable@vger.kernel.org
    Reviewed-by: Naohiro Aota <naohiro.aota@wdc.com>
    Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Signed-off-by: Qu Wenruo <wqu@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: tree-checker: reject inline extent items with 0 ref count [+ + +]
Author: Qu Wenruo <wqu@suse.com>
Date:   Wed Dec 4 13:30:46 2024 +1030

    btrfs: tree-checker: reject inline extent items with 0 ref count
    
    commit dfb92681a19e1d5172420baa242806414b3eff6f upstream.
    
    [BUG]
    There is a bug report in the mailing list where btrfs_run_delayed_refs()
    failed to drop the ref count for logical 25870311358464 num_bytes
    2113536.
    
    The involved leaf dump looks like this:
    
      item 166 key (25870311358464 168 2113536) itemoff 10091 itemsize 50
        extent refs 1 gen 84178 flags 1
        ref#0: shared data backref parent 32399126528000 count 0 <<<
        ref#1: shared data backref parent 31808973717504 count 1
    
    Notice the count number is 0.
    
    [CAUSE]
    There is no concrete evidence yet, but considering 0 -> 1 is also a
    single bit flipped, it's possible that hardware memory bitflip is
    involved, causing the on-disk extent tree to be corrupted.
    
    [FIX]
    To prevent us reading such corrupted extent item, or writing such
    damaged extent item back to disk, enhance the handling of
    BTRFS_EXTENT_DATA_REF_KEY and BTRFS_SHARED_DATA_REF_KEY keys for both
    inlined and key items, to detect such 0 ref count and reject them.
    
    CC: stable@vger.kernel.org # 5.4+
    Link: https://lore.kernel.org/linux-btrfs/7c69dd49-c346-4806-86e7-e6f863a66f48@app.fastmail.com/
    Reported-by: Frankie Fisher <frankie@terrorise.me.uk>
    Reviewed-by: Filipe Manana <fdmanana@suse.com>
    Signed-off-by: Qu Wenruo <wqu@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ceph: validate snapdirname option length when mounting [+ + +]
Author: Ilya Dryomov <idryomov@gmail.com>
Date:   Wed Nov 20 16:43:51 2024 +0100

    ceph: validate snapdirname option length when mounting
    
    commit 12eb22a5a609421b380c3c6ca887474fb2089b2c upstream.
    
    It becomes a path component, so it shouldn't exceed NAME_MAX
    characters.  This was hardened in commit c152737be22b ("ceph: Use
    strscpy() instead of strcpy() in __get_snap_name()"), but no actual
    check was put in place.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Reviewed-by: Alex Markuze <amarkuze@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
chelsio/chtls: prevent potential integer overflow on 32bit [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Fri Dec 13 12:47:27 2024 +0300

    chelsio/chtls: prevent potential integer overflow on 32bit
    
    commit fbbd84af6ba70334335bdeba3ae536cf751c14c6 upstream.
    
    The "gl->tot_len" variable is controlled by the user.  It comes from
    process_responses().  On 32bit systems, the "gl->tot_len +
    sizeof(struct cpl_pass_accept_req) + sizeof(struct rss_header)" addition
    could have an integer wrapping bug.  Use size_add() to prevent this.
    
    Fixes: a08943947873 ("crypto: chtls - Register chtls with net tls")
    Cc: stable@vger.kernel.org
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/c6bfb23c-2db2-4e1b-b8ab-ba3925c82ef5@stanley.mountain
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dmaengine: at_xdmac: avoid null_prt_deref in at_xdmac_prep_dma_memset [+ + +]
Author: Chen Ridong <chenridong@huawei.com>
Date:   Tue Oct 29 08:28:45 2024 +0000

    dmaengine: at_xdmac: avoid null_prt_deref in at_xdmac_prep_dma_memset
    
    commit c43ec96e8d34399bd9dab2f2dc316b904892133f upstream.
    
    The at_xdmac_memset_create_desc may return NULL, which will lead to a
    null pointer dereference. For example, the len input is error, or the
    atchan->free_descs_list is empty and memory is exhausted. Therefore, add
    check to avoid this.
    
    Fixes: b206d9a23ac7 ("dmaengine: xdmac: Add memset support")
    Signed-off-by: Chen Ridong <chenridong@huawei.com>
    Link: https://lore.kernel.org/r/20241029082845.1185380-1-chenridong@huaweicloud.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dmaengine: dw: Select only supported masters for ACPI devices [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Mon Nov 4 11:50:50 2024 +0200

    dmaengine: dw: Select only supported masters for ACPI devices
    
    commit f0e870a0e9c5521f2952ea9f3ea9d3d122631a89 upstream.
    
    The recently submitted fix-commit revealed a problem in the iDMA 32-bit
    platform code. Even though the controller supported only a single master
    the dw_dma_acpi_filter() method hard-coded two master interfaces with IDs
    0 and 1. As a result the sanity check implemented in the commit
    b336268dde75 ("dmaengine: dw: Add peripheral bus width verification")
    got incorrect interface data width and thus prevented the client drivers
    from configuring the DMA-channel with the EINVAL error returned. E.g.,
    the next error was printed for the PXA2xx SPI controller driver trying
    to configure the requested channels:
    
    > [  164.525604] pxa2xx_spi_pci 0000:00:07.1: DMA slave config failed
    > [  164.536105] pxa2xx_spi_pci 0000:00:07.1: failed to get DMA TX descriptor
    > [  164.543213] spidev spi-SPT0001:00: SPI transfer failed: -16
    
    The problem would have been spotted much earlier if the iDMA 32-bit
    controller supported more than one master interfaces. But since it
    supports just a single master and the iDMA 32-bit specific code just
    ignores the master IDs in the CTLLO preparation method, the issue has
    been gone unnoticed so far.
    
    Fix the problem by specifying the default master ID for both memory
    and peripheral devices in the driver data. Thus the issue noticed for
    the iDMA 32-bit controllers will be eliminated and the ACPI-probed
    DW DMA controllers will be configured with the correct master ID by
    default.
    
    Cc: stable@vger.kernel.org
    Fixes: b336268dde75 ("dmaengine: dw: Add peripheral bus width verification")
    Fixes: 199244d69458 ("dmaengine: dw: add support of iDMA 32-bit hardware")
    Reported-by: Ferry Toth <fntoth@gmail.com>
    Closes: https://lore.kernel.org/dmaengine/ZuXbCKUs1iOqFu51@black.fi.intel.com/
    Reported-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Closes: https://lore.kernel.org/dmaengine/ZuXgI-VcHpMgbZ91@black.fi.intel.com/
    Tested-by: Ferry Toth <fntoth@gmail.com>
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20241104095142.157925-1-andriy.shevchenko@linux.intel.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dmaengine: mv_xor: fix child node refcount handling in early exit [+ + +]
Author: Javier Carrasco <javier.carrasco.cruz@gmail.com>
Date:   Fri Oct 11 22:57:59 2024 +0200

    dmaengine: mv_xor: fix child node refcount handling in early exit
    
    commit 362f1bf98a3ecb5a2a4fcbdaa9718c8403beceb2 upstream.
    
    The for_each_child_of_node() loop requires explicit calls to
    of_node_put() to decrement the child's refcount upon early exits (break,
    goto, return).
    
    Add the missing calls in the two early exits before the goto
    instructions.
    
    Cc: stable@vger.kernel.org
    Fixes: f7d12ef53ddf ("dma: mv_xor: add Device Tree binding")
    Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
    Link: https://lore.kernel.org/r/20241011-dma_mv_xor_of_node_put-v1-1-3c2de819f463@gmail.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Drivers: hv: util: Avoid accessing a ringbuffer not initialized yet [+ + +]
Author: Michael Kelley <mhklinux@outlook.com>
Date:   Wed Nov 6 07:42:47 2024 -0800

    Drivers: hv: util: Avoid accessing a ringbuffer not initialized yet
    
    commit 07a756a49f4b4290b49ea46e089cbe6f79ff8d26 upstream.
    
    If the KVP (or VSS) daemon starts before the VMBus channel's ringbuffer is
    fully initialized, we can hit the panic below:
    
    hv_utils: Registering HyperV Utility Driver
    hv_vmbus: registering driver hv_utils
    ...
    BUG: kernel NULL pointer dereference, address: 0000000000000000
    CPU: 44 UID: 0 PID: 2552 Comm: hv_kvp_daemon Tainted: G E 6.11.0-rc3+ #1
    RIP: 0010:hv_pkt_iter_first+0x12/0xd0
    Call Trace:
    ...
     vmbus_recvpacket
     hv_kvp_onchannelcallback
     vmbus_on_event
     tasklet_action_common
     tasklet_action
     handle_softirqs
     irq_exit_rcu
     sysvec_hyperv_stimer0
     </IRQ>
     <TASK>
     asm_sysvec_hyperv_stimer0
    ...
     kvp_register_done
     hvt_op_read
     vfs_read
     ksys_read
     __x64_sys_read
    
    This can happen because the KVP/VSS channel callback can be invoked
    even before the channel is fully opened:
    1) as soon as hv_kvp_init() -> hvutil_transport_init() creates
    /dev/vmbus/hv_kvp, the kvp daemon can open the device file immediately and
    register itself to the driver by writing a message KVP_OP_REGISTER1 to the
    file (which is handled by kvp_on_msg() ->kvp_handle_handshake()) and
    reading the file for the driver's response, which is handled by
    hvt_op_read(), which calls hvt->on_read(), i.e. kvp_register_done().
    
    2) the problem with kvp_register_done() is that it can cause the
    channel callback to be called even before the channel is fully opened,
    and when the channel callback is starting to run, util_probe()->
    vmbus_open() may have not initialized the ringbuffer yet, so the
    callback can hit the panic of NULL pointer dereference.
    
    To reproduce the panic consistently, we can add a "ssleep(10)" for KVP in
    __vmbus_open(), just before the first hv_ringbuffer_init(), and then we
    unload and reload the driver hv_utils, and run the daemon manually within
    the 10 seconds.
    
    Fix the panic by reordering the steps in util_probe() so the char dev
    entry used by the KVP or VSS daemon is not created until after
    vmbus_open() has completed. This reordering prevents the race condition
    from happening.
    
    Reported-by: Dexuan Cui <decui@microsoft.com>
    Fixes: e0fa3e5e7df6 ("Drivers: hv: utils: fix a race on userspace daemons registration")
    Cc: stable@vger.kernel.org
    Signed-off-by: Michael Kelley <mhklinux@outlook.com>
    Acked-by: Wei Liu <wei.liu@kernel.org>
    Link: https://lore.kernel.org/r/20241106154247.2271-3-mhklinux@outlook.com
    Signed-off-by: Wei Liu <wei.liu@kernel.org>
    Message-ID: <20241106154247.2271-3-mhklinux@outlook.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu: Handle NULL bo->tbo.resource (again) in amdgpu_vm_bo_update [+ + +]
Author: Michel Dänzer <mdaenzer@redhat.com>
Date:   Tue Dec 17 18:22:56 2024 +0100

    drm/amdgpu: Handle NULL bo->tbo.resource (again) in amdgpu_vm_bo_update
    
    commit 85230ee36d88e7a09fb062d43203035659dd10a5 upstream.
    
    Third time's the charm, I hope?
    
    Fixes: d3116756a710 ("drm/ttm: rename bo->mem and make it a pointer")
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/3837
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Michel Dänzer <mdaenzer@redhat.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 695c2c745e5dff201b75da8a1d237ce403600d04)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdkfd: Correct the migration DMA map direction [+ + +]
Author: Prike Liang <Prike.Liang@amd.com>
Date:   Tue Nov 5 09:57:42 2024 +0800

    drm/amdkfd: Correct the migration DMA map direction
    
    [ Upstream commit 5c3de6b02d38eb9386edf50490e050bb44398e40 ]
    
    The SVM DMA device map direction should be set the same as
    the DMA unmap setting, otherwise the DMA core will report
    the following warning.
    
    Before finialize this solution, there're some discussion on
    the DMA mapping type(stream-based or coherent) in this KFD
    migration case, followed by https://lore.kernel.org/all/04d4ab32
    -45a1-4b88-86ee-fb0f35a0ca40@amd.com/T/.
    
    As there's no dma_sync_single_for_*() in the DMA buffer accessed
    that because this migration operation should be sync properly and
    automatically. Give that there's might not be a performance problem
    in various cache sync policy of DMA sync. Therefore, in order to
    simplify the DMA direction setting alignment, let's set the DMA map
    direction as BIDIRECTIONAL.
    
    [  150.834218] WARNING: CPU: 8 PID: 1812 at kernel/dma/debug.c:1028 check_unmap+0x1cc/0x930
    [  150.834225] Modules linked in: amdgpu(OE) amdxcp drm_exec(OE) gpu_sched drm_buddy(OE) drm_ttm_helper(OE) ttm(OE) drm_suballoc_helper(OE) drm_display_helper(OE) drm_kms_helper(OE) i2c_algo_bit rpcsec_gss_krb5 auth_rpcgss nfsv4 nfs lockd grace netfs xt_conntrack xt_MASQUERADE nf_conntrack_netlink xfrm_user xfrm_algo iptable_nat xt_addrtype iptable_filter br_netfilter nvme_fabrics overlay nfnetlink_cttimeout nfnetlink openvswitch nsh nf_conncount nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 libcrc32c bridge stp llc sch_fq_codel intel_rapl_msr amd_atl intel_rapl_common snd_hda_codec_realtek snd_hda_codec_generic snd_hda_scodec_component snd_hda_codec_hdmi snd_hda_intel snd_intel_dspcfg edac_mce_amd snd_pci_acp6x snd_hda_codec snd_acp_config snd_hda_core snd_hwdep snd_soc_acpi kvm_amd sunrpc snd_pcm kvm binfmt_misc snd_seq_midi crct10dif_pclmul snd_seq_midi_event ghash_clmulni_intel sha512_ssse3 snd_rawmidi nls_iso8859_1 sha256_ssse3 sha1_ssse3 snd_seq aesni_intel snd_seq_device crypto_simd snd_timer cryptd input_leds
    [  150.834310]  wmi_bmof serio_raw k10temp rapl snd sp5100_tco ipmi_devintf soundcore ccp ipmi_msghandler cm32181 industrialio mac_hid msr parport_pc ppdev lp parport efi_pstore drm(OE) ip_tables x_tables pci_stub crc32_pclmul nvme ahci libahci i2c_piix4 r8169 nvme_core i2c_designware_pci realtek i2c_ccgx_ucsi video wmi hid_generic cdc_ether usbnet usbhid hid r8152 mii
    [  150.834354] CPU: 8 PID: 1812 Comm: rocrtst64 Tainted: G           OE      6.10.0-custom #492
    [  150.834358] Hardware name: AMD Majolica-RN/Majolica-RN, BIOS RMJ1009A 06/13/2021
    [  150.834360] RIP: 0010:check_unmap+0x1cc/0x930
    [  150.834363] Code: c0 4c 89 4d c8 e8 34 bf 86 00 4c 8b 4d c8 4c 8b 45 c0 48 8b 4d b8 48 89 c6 41 57 4c 89 ea 48 c7 c7 80 49 b4 84 e8 b4 81 f3 ff <0f> 0b 48 c7 c7 04 83 ac 84 e8 76 ba fc ff 41 8b 76 4c 49 8d 7e 50
    [  150.834365] RSP: 0018:ffffaac5023739e0 EFLAGS: 00010086
    [  150.834368] RAX: 0000000000000000 RBX: ffffffff8566a2e0 RCX: 0000000000000027
    [  150.834370] RDX: ffff8f6a8f621688 RSI: 0000000000000001 RDI: ffff8f6a8f621680
    [  150.834372] RBP: ffffaac502373a30 R08: 00000000000000c9 R09: ffffaac502373850
    [  150.834373] R10: ffffaac502373848 R11: ffffffff84f46328 R12: ffffaac502373a40
    [  150.834375] R13: ffff8f6741045330 R14: ffff8f6741a77700 R15: ffffffff84ac831b
    [  150.834377] FS:  00007faf0fc94c00(0000) GS:ffff8f6a8f600000(0000) knlGS:0000000000000000
    [  150.834379] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  150.834381] CR2: 00007faf0b600020 CR3: 000000010a52e000 CR4: 0000000000350ef0
    [  150.834383] Call Trace:
    [  150.834385]  <TASK>
    [  150.834387]  ? show_regs+0x6d/0x80
    [  150.834393]  ? __warn+0x8c/0x140
    [  150.834397]  ? check_unmap+0x1cc/0x930
    [  150.834400]  ? report_bug+0x193/0x1a0
    [  150.834406]  ? handle_bug+0x46/0x80
    [  150.834410]  ? exc_invalid_op+0x1d/0x80
    [  150.834413]  ? asm_exc_invalid_op+0x1f/0x30
    [  150.834420]  ? check_unmap+0x1cc/0x930
    [  150.834425]  debug_dma_unmap_page+0x86/0x90
    [  150.834431]  ? srso_return_thunk+0x5/0x5f
    [  150.834435]  ? rmap_walk+0x28/0x50
    [  150.834438]  ? srso_return_thunk+0x5/0x5f
    [  150.834441]  ? remove_migration_ptes+0x79/0x80
    [  150.834445]  ? srso_return_thunk+0x5/0x5f
    [  150.834448]  dma_unmap_page_attrs+0xfa/0x1d0
    [  150.834453]  svm_range_dma_unmap_dev+0x8a/0xf0 [amdgpu]
    [  150.834710]  svm_migrate_ram_to_vram+0x361/0x740 [amdgpu]
    [  150.834914]  svm_migrate_to_vram+0xa8/0xe0 [amdgpu]
    [  150.835111]  svm_range_set_attr+0xff2/0x1450 [amdgpu]
    [  150.835311]  svm_ioctl+0x4a/0x50 [amdgpu]
    [  150.835510]  kfd_ioctl_svm+0x54/0x90 [amdgpu]
    [  150.835701]  kfd_ioctl+0x3c2/0x530 [amdgpu]
    [  150.835888]  ? __pfx_kfd_ioctl_svm+0x10/0x10 [amdgpu]
    [  150.836075]  ? srso_return_thunk+0x5/0x5f
    [  150.836080]  ? tomoyo_file_ioctl+0x20/0x30
    [  150.836086]  __x64_sys_ioctl+0x9c/0xd0
    [  150.836091]  x64_sys_call+0x1219/0x20d0
    [  150.836095]  do_syscall_64+0x51/0x120
    [  150.836098]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
    [  150.836102] RIP: 0033:0x7faf0f11a94f
    [  150.836105] Code: 00 48 89 44 24 18 31 c0 48 8d 44 24 60 c7 04 24 10 00 00 00 48 89 44 24 08 48 8d 44 24 20 48 89 44 24 10 b8 10 00 00 00 0f 05 <41> 89 c0 3d 00 f0 ff ff 77 1f 48 8b 44 24 18 64 48 2b 04 25 28 00
    [  150.836107] RSP: 002b:00007ffeced26bc0 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
    [  150.836110] RAX: ffffffffffffffda RBX: 000055c683528fb0 RCX: 00007faf0f11a94f
    [  150.836112] RDX: 00007ffeced26c60 RSI: 00000000c0484b20 RDI: 0000000000000003
    [  150.836114] RBP: 00007ffeced26c50 R08: 0000000000000000 R09: 0000000000000001
    [  150.836115] R10: 0000000000000032 R11: 0000000000000246 R12: 000055c683528bd0
    [  150.836117] R13: 0000000000000000 R14: 0000000000000021 R15: 0000000000000000
    [  150.836122]  </TASK>
    [  150.836124] ---[ end trace 0000000000000000 ]---
    
    Signed-off-by: Prike Liang <Prike.Liang@amd.com>
    Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/bridge: adv7511_audio: Update Audio InfoFrame properly [+ + +]
Author: Stefan Ekenberg <stefan.ekenberg@axis.com>
Date:   Tue Nov 19 08:40:29 2024 +0100

    drm/bridge: adv7511_audio: Update Audio InfoFrame properly
    
    [ Upstream commit 902806baf3c1e8383c1fe3ff0b6042b8cb5c2707 ]
    
    AUDIO_UPDATE bit (Bit 5 of MAIN register 0x4A) needs to be set to 1
    while updating Audio InfoFrame information and then set to 0 when done.
    Otherwise partially updated Audio InfoFrames could be sent out. Two
    cases where this rule were not followed are fixed:
     - In adv7511_hdmi_hw_params() make sure AUDIO_UPDATE bit is updated
       before/after setting ADV7511_REG_AUDIO_INFOFRAME.
     - In audio_startup() use the correct register for clearing
       AUDIO_UPDATE bit.
    
    The problem with corrupted audio infoframes were discovered by letting
    a HDMI logic analyser check the output of ADV7535.
    
    Note that this patchs replaces writing REG_GC(1) with
    REG_INFOFRAME_UPDATE. Bit 5 of REG_GC(1) is positioned within field
    GC_PP[3:0] and that field doesn't control audio infoframe and is read-
    only. My conclusion therefore was that the author if this code meant to
    clear bit 5 of REG_INFOFRAME_UPDATE from the very beginning.
    
    Tested-by: Biju Das <biju.das.jz@bp.renesas.com>
    Fixes: 53c515befe28 ("drm/bridge: adv7511: Add Audio support")
    Signed-off-by: Stefan Ekenberg <stefan.ekenberg@axis.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241119-adv7511-audio-info-frame-v4-1-4ae68e76c89c@axis.com
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/dp_mst: Fix MST sideband message body length check [+ + +]
Author: Imre Deak <imre.deak@intel.com>
Date:   Mon Nov 25 22:53:14 2024 +0200

    drm/dp_mst: Fix MST sideband message body length check
    
    [ Upstream commit bd2fccac61b40eaf08d9546acc9fef958bfe4763 ]
    
    Fix the MST sideband message body length check, which must be at least 1
    byte accounting for the message body CRC (aka message data CRC) at the
    end of the message.
    
    This fixes a case where an MST branch device returns a header with a
    correct header CRC (indicating a correctly received body length), with
    the body length being incorrectly set to 0. This will later lead to a
    memory corruption in drm_dp_sideband_append_payload() and the following
    errors in dmesg:
    
       UBSAN: array-index-out-of-bounds in drivers/gpu/drm/display/drm_dp_mst_topology.c:786:25
       index -1 is out of range for type 'u8 [48]'
       Call Trace:
        drm_dp_sideband_append_payload+0x33d/0x350 [drm_display_helper]
        drm_dp_get_one_sb_msg+0x3ce/0x5f0 [drm_display_helper]
        drm_dp_mst_hpd_irq_handle_event+0xc8/0x1580 [drm_display_helper]
    
       memcpy: detected field-spanning write (size 18446744073709551615) of single field "&msg->msg[msg->curlen]" at drivers/gpu/drm/display/drm_dp_mst_topology.c:791 (size 256)
       Call Trace:
        drm_dp_sideband_append_payload+0x324/0x350 [drm_display_helper]
        drm_dp_get_one_sb_msg+0x3ce/0x5f0 [drm_display_helper]
        drm_dp_mst_hpd_irq_handle_event+0xc8/0x1580 [drm_display_helper]
    
    Cc: <stable@vger.kernel.org>
    Cc: Lyude Paul <lyude@redhat.com>
    Reviewed-by: Lyude Paul <lyude@redhat.com>
    Signed-off-by: Imre Deak <imre.deak@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241125205314.1725887-1-imre.deak@intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/dp_mst: Verify request type in the corresponding down message reply [+ + +]
Author: Imre Deak <imre.deak@intel.com>
Date:   Tue Dec 3 18:02:18 2024 +0200

    drm/dp_mst: Verify request type in the corresponding down message reply
    
    [ Upstream commit 4d49e77a973d3b5d1881663c3f122906a0702940 ]
    
    After receiving the response for an MST down request message, the
    response should be accepted/parsed only if the response type matches
    that of the request. Ensure this by checking if the request type code
    stored both in the request and the reply match, dropping the reply in
    case of a mismatch.
    
    This fixes the topology detection for an MST hub, as described in the
    Closes link below, where the hub sends an incorrect reply message after
    a CLEAR_PAYLOAD_TABLE -> LINK_ADDRESS down request message sequence.
    
    Cc: Lyude Paul <lyude@redhat.com>
    Cc: <stable@vger.kernel.org>
    Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12804
    Reviewed-by: Lyude Paul <lyude@redhat.com>
    Signed-off-by: Imre Deak <imre.deak@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241203160223.2926014-3-imre.deak@intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/i915/dg1: Fix power gate sequence. [+ + +]
Author: Rodrigo Vivi <rodrigo.vivi@intel.com>
Date:   Thu Dec 19 16:00:19 2024 -0500

    drm/i915/dg1: Fix power gate sequence.
    
    [ Upstream commit 20e7c5313ffbf11c34a46395345677adbe890bee ]
    
    sub-pipe PG is not present on DG1. Setting these bits can disable
    other power gates and cause GPU hangs on video playbacks.
    
    VLK: 16314, 4304
    
    Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13381
    Fixes: 85a12d7eb8fe ("drm/i915/tgl: Fix Media power gate sequence.")
    Cc: Vinay Belgaumkar <vinay.belgaumkar@intel.com>
    Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
    Reviewed-by: Vinay Belgaumkar <vinay.belgaumkar@intel.com>
    Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241219210019.70532-1-rodrigo.vivi@intel.com
    Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
    (cherry picked from commit de7061947b4ed4be857d452c60d5fb795831d79e)
    Signed-off-by: Tvrtko Ursulin <tursulin@ursulin.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/modes: Avoid divide by zero harder in drm_mode_vrefresh() [+ + +]
Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
Date:   Fri Nov 29 06:26:28 2024 +0200

    drm/modes: Avoid divide by zero harder in drm_mode_vrefresh()
    
    commit 9398332f23fab10c5ec57c168b44e72997d6318e upstream.
    
    drm_mode_vrefresh() is trying to avoid divide by zero
    by checking whether htotal or vtotal are zero. But we may
    still end up with a div-by-zero of vtotal*htotal*...
    
    Cc: stable@vger.kernel.org
    Reported-by: syzbot+622bba18029bcde672e1@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=622bba18029bcde672e1
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241129042629.18280-2-ville.syrjala@linux.intel.com
    Reviewed-by: Jani Nikula <jani.nikula@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm: adv7511: Drop dsi single lane support [+ + +]
Author: Biju Das <biju.das.jz@bp.renesas.com>
Date:   Tue Nov 19 19:20:31 2024 +0000

    drm: adv7511: Drop dsi single lane support
    
    commit 79d67c499c3f886202a40c5cb27e747e4fa4d738 upstream.
    
    As per [1] and [2], ADV7535/7533 supports only 2-, 3-, or 4-lane. Drop
    unsupported 1-lane.
    
    [1] https://www.analog.com/media/en/technical-documentation/data-sheets/ADV7535.pdf
    [2] https://www.analog.com/media/en/technical-documentation/data-sheets/ADV7533.pdf
    
    Fixes: 1e4d58cd7f88 ("drm/bridge: adv7533: Create a MIPI DSI device")
    Reported-by: Hien Huynh <hien.huynh.px@renesas.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
    Reviewed-by: Adam Ford <aford173@gmail.com>
    Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241119192040.152657-4-biju.das.jz@bp.renesas.com
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dt-bindings: display: adi,adv7533: Drop single lane support [+ + +]
Author: Biju Das <biju.das.jz@bp.renesas.com>
Date:   Tue Nov 19 19:20:30 2024 +0000

    dt-bindings: display: adi,adv7533: Drop single lane support
    
    commit ee8f9ed57a397605434caeef351bafa3ec4dfdd4 upstream.
    
    As per [1] and [2], ADV7535/7533 supports only 2-, 3-, or 4-lane. Drop
    unsupported 1-lane from bindings.
    
    [1] https://www.analog.com/media/en/technical-documentation/data-sheets/ADV7535.pdf
    [2] https://www.analog.com/media/en/technical-documentation/data-sheets/ADV7533.pdf
    
    Fixes: 1e4d58cd7f88 ("drm/bridge: adv7533: Create a MIPI DSI device")
    Cc: stable@vger.kernel.org
    Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
    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-3-biju.das.jz@bp.renesas.com
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
efivarfs: Fix error on non-existent file [+ + +]
Author: James Bottomley <James.Bottomley@HansenPartnership.com>
Date:   Sun Dec 8 13:34:13 2024 -0500

    efivarfs: Fix error on non-existent file
    
    commit 2ab0837cb91b7de507daa145d17b3b6b2efb3abf upstream.
    
    When looking up a non-existent file, efivarfs returns -EINVAL if the
    file does not conform to the NAME-GUID format and -ENOENT if it does.
    This is caused by efivars_d_hash() returning -EINVAL if the name is not
    formatted correctly.  This error is returned before simple_lookup()
    returns a negative dentry, and is the error value that the user sees.
    
    Fix by removing this check.  If the file does not exist, simple_lookup()
    will return a negative dentry leading to -ENOENT and efivarfs_create()
    already has a validity check before it creates an entry (and will
    correctly return -EINVAL)
    
    Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
    Cc: <stable@vger.kernel.org>
    [ardb: make efivarfs_valid_name() static]
    Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
epoll: Add synchronous wakeup support for ep_poll_callback [+ + +]
Author: Xuewen Yan <xuewen.yan@unisoc.com>
Date:   Fri Apr 26 16:05:48 2024 +0800

    epoll: Add synchronous wakeup support for ep_poll_callback
    
    commit 900bbaae67e980945dec74d36f8afe0de7556d5a upstream.
    
    Now, the epoll only use wake_up() interface to wake up task.
    However, sometimes, there are epoll users which want to use
    the synchronous wakeup flag to hint the scheduler, such as
    Android binder driver.
    So add a wake_up_sync() define, and use the wake_up_sync()
    when the sync is true in ep_poll_callback().
    
    Co-developed-by: Jing Xia <jing.xia@unisoc.com>
    Signed-off-by: Jing Xia <jing.xia@unisoc.com>
    Signed-off-by: Xuewen Yan <xuewen.yan@unisoc.com>
    Link: https://lore.kernel.org/r/20240426080548.8203-1-xuewen.yan@unisoc.com
    Tested-by: Brian Geffon <bgeffon@google.com>
    Reviewed-by: Brian Geffon <bgeffon@google.com>
    Reported-by: Benoit Lize <lizeb@google.com>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Cc: Brian Geffon <bgeffon@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
erofs: fix incorrect symlink detection in fast symlink [+ + +]
Author: Gao Xiang <xiang@kernel.org>
Date:   Wed Dec 18 15:34:02 2024 +0800

    erofs: fix incorrect symlink detection in fast symlink
    
    commit 9ed50b8231e37b1ae863f5dec8153b98d9f389b4 upstream.
    
    Fast symlink can be used if the on-disk symlink data is stored
    in the same block as the on-disk inode, so we don’t need to trigger
    another I/O for symlink data.  However, currently fs correction could be
    reported _incorrectly_ if inode xattrs are too large.
    
    In fact, these should be valid images although they cannot be handled as
    fast symlinks.
    
    Many thanks to Colin for reporting this!
    
    Reported-by: Colin Walters <walters@verbum.org>
    Reported-by: https://honggfuzz.dev/
    Link: https://lore.kernel.org/r/bb2dd430-7de0-47da-ae5b-82ab2dd4d945@app.fastmail.com
    Fixes: 431339ba9042 ("staging: erofs: add inode operations")
    [ Note that it's a runtime misbehavior instead of a security issue. ]
    Link: https://lore.kernel.org/r/20240909031911.1174718-1-hsiangkao@linux.alibaba.com
    Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
eth: bcmsysport: fix call balance of priv->clk handling routines [+ + +]
Author: Vitalii Mordan <mordan@ispras.ru>
Date:   Fri Dec 27 15:30:07 2024 +0300

    eth: bcmsysport: fix call balance of priv->clk handling routines
    
    [ Upstream commit b255ef45fcc2141c1bf98456796abb956d843a27 ]
    
    Check the return value of clk_prepare_enable to ensure that priv->clk has
    been successfully enabled.
    
    If priv->clk was not enabled during bcm_sysport_probe, bcm_sysport_resume,
    or bcm_sysport_open, it must not be disabled in any subsequent execution
    paths.
    
    Fixes: 31bc72d97656 ("net: systemport: fetch and use clock resources")
    Signed-off-by: Vitalii Mordan <mordan@ispras.ru>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Link: https://patch.msgid.link/20241227123007.2333397-1-mordan@ispras.ru
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
hwmon: (tmp513) Don't use "proxy" headers [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Tue Nov 28 20:06:02 2023 +0200

    hwmon: (tmp513) Don't use "proxy" headers
    
    [ Upstream commit 5d9ad4e0fa7cc27199fdb94beb6ec5f655ba9489 ]
    
    The driver uses math.h and not util_macros.h.
    
    All the same for the kernel.h, replace it with what the driver is using.
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20231128180654.395692-2-andriy.shevchenko@linux.intel.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Stable-dep-of: 74d7e038fd07 ("hwmon: (tmp513) Fix interpretation of values of Shunt Voltage and Limit Registers")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (tmp513) Fix Current Register value interpretation [+ + +]
Author: Murad Masimov <m.masimov@maxima.ru>
Date:   Mon Dec 16 20:36:47 2024 +0300

    hwmon: (tmp513) Fix Current Register value interpretation
    
    [ Upstream commit da1d0e6ba211baf6747db74c07700caddfd8a179 ]
    
    The value returned by the driver after processing the contents of the
    Current Register does not correspond to the TMP512/TMP513 specifications.
    A raw register value is converted to a signed integer value by a sign
    extension in accordance with the algorithm provided in the specification,
    but due to the off-by-one error in the sign bit index, the result is
    incorrect. Moreover, negative values will be reported as large positive
    due to missing sign extension from u32 to long.
    
    According to the TMP512 and TMP513 datasheets, the Current Register (07h)
    is a 16-bit two's complement integer value. E.g., if regval = 1000 0011
    0000 0000, then the value must be (-32000 * lsb), but the driver will
    return (33536 * lsb).
    
    Fix off-by-one bug, and also cast data->curr_lsb_ua (which is of type u32)
    to long to prevent incorrect cast for negative values.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 59dfa75e5d82 ("hwmon: Add driver for Texas Instruments TMP512/513 sensor chips.")
    Signed-off-by: Murad Masimov <m.masimov@maxima.ru>
    Link: https://lore.kernel.org/r/20241216173648.526-3-m.masimov@maxima.ru
    [groeck: Fixed description line length]
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (tmp513) Fix interpretation of values of Shunt Voltage and Limit Registers [+ + +]
Author: Murad Masimov <m.masimov@maxima.ru>
Date:   Mon Dec 16 20:36:46 2024 +0300

    hwmon: (tmp513) Fix interpretation of values of Shunt Voltage and Limit Registers
    
    [ Upstream commit 74d7e038fd072635d21e4734e3223378e09168d3 ]
    
    The values returned by the driver after processing the contents of the
    Shunt Voltage Register and the Shunt Limit Registers do not correspond to
    the TMP512/TMP513 specifications. A raw register value is converted to a
    signed integer value by a sign extension in accordance with the algorithm
    provided in the specification, but due to the off-by-one error in the sign
    bit index, the result is incorrect. Moreover, the PGA shift calculated with
    the tmp51x_get_pga_shift function is relevant only to the Shunt Voltage
    Register, but is also applied to the Shunt Limit Registers.
    
    According to the TMP512 and TMP513 datasheets, the Shunt Voltage Register
    (04h) is 13 to 16 bit two's complement integer value, depending on the PGA
    setting.  The Shunt Positive (0Ch) and Negative (0Dh) Limit Registers are
    16-bit two's complement integer values. Below are some examples:
    
    * Shunt Voltage Register
    If PGA = 8, and regval = 1000 0011 0000 0000, then the decimal value must
    be -32000, but the value calculated by the driver will be 33536.
    
    * Shunt Limit Register
    If regval = 1000 0011 0000 0000, then the decimal value must be -32000, but
    the value calculated by the driver will be 768, if PGA = 1.
    
    Fix sign bit index, and also correct misleading comment describing the
    tmp51x_get_pga_shift function.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 59dfa75e5d82 ("hwmon: Add driver for Texas Instruments TMP512/513 sensor chips.")
    Signed-off-by: Murad Masimov <m.masimov@maxima.ru>
    Link: https://lore.kernel.org/r/20241216173648.526-2-m.masimov@maxima.ru
    [groeck: Fixed description and multi-line alignments]
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (tmp513) Fix interpretation of values of Temperature Result and Limit Registers [+ + +]
Author: Murad Masimov <m.masimov@maxima.ru>
Date:   Mon Dec 16 20:36:48 2024 +0300

    hwmon: (tmp513) Fix interpretation of values of Temperature Result and Limit Registers
    
    [ Upstream commit dd471e25770e7e632f736b90db1e2080b2171668 ]
    
    The values returned by the driver after processing the contents of the
    Temperature Result and the Temperature Limit Registers do not correspond to
    the TMP512/TMP513 specifications. A raw register value is converted to a
    signed integer value by a sign extension in accordance with the algorithm
    provided in the specification, but due to the off-by-one error in the sign
    bit index, the result is incorrect.
    
    According to the TMP512 and TMP513 datasheets, the Temperature Result (08h
    to 0Bh) and Limit (11h to 14h) Registers are 13-bit two's complement
    integer values, shifted left by 3 bits. The value is scaled by 0.0625
    degrees Celsius per bit.  E.g., if regval = 1 1110 0111 0000 000, the
    output should be -25 degrees, but the driver will return +487 degrees.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 59dfa75e5d82 ("hwmon: Add driver for Texas Instruments TMP512/513 sensor chips.")
    Signed-off-by: Murad Masimov <m.masimov@maxima.ru>
    Link: https://lore.kernel.org/r/20241216173648.526-4-m.masimov@maxima.ru
    [groeck: fixed description line length]
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (tmp513) Simplify with dev_err_probe() [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Tue Nov 28 20:06:03 2023 +0200

    hwmon: (tmp513) Simplify with dev_err_probe()
    
    [ Upstream commit df989762bc4b71068e6adc0c2b5ef6f76b6acf74 ]
    
    Common pattern of handling deferred probe can be simplified with
    dev_err_probe().  Less code and also it prints the error value.
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20231128180654.395692-3-andriy.shevchenko@linux.intel.com
    [groeck: Fixed excessive line length]
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Stable-dep-of: 74d7e038fd07 ("hwmon: (tmp513) Fix interpretation of values of Shunt Voltage and Limit Registers")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (tmp513) Use SI constants from units.h [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Tue Nov 28 20:06:04 2023 +0200

    hwmon: (tmp513) Use SI constants from units.h
    
    [ Upstream commit f07f9d2467f4a298d24e186ddee6f69724903067 ]
    
    MILLI and MICRO may be used in the driver to make code more robust
    against possible miscalculations.
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20231128180654.395692-4-andriy.shevchenko@linux.intel.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Stable-dep-of: 74d7e038fd07 ("hwmon: (tmp513) Fix interpretation of values of Shunt Voltage and Limit Registers")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
i2c: pnx: Fix timeout in wait functions [+ + +]
Author: Vladimir Riabchun <ferr.lambarginio@gmail.com>
Date:   Sat Dec 7 00:19:34 2024 +0100

    i2c: pnx: Fix timeout in wait functions
    
    [ Upstream commit 7363f2d4c18557c99c536b70489187bb4e05c412 ]
    
    Since commit f63b94be6942 ("i2c: pnx: Fix potential deadlock warning
    from del_timer_sync() call in isr") jiffies are stored in
    i2c_pnx_algo_data.timeout, but wait_timeout and wait_reset are still
    using it as milliseconds. Convert jiffies back to milliseconds to wait
    for the expected amount of time.
    
    Fixes: f63b94be6942 ("i2c: pnx: Fix potential deadlock warning from del_timer_sync() call in isr")
    Signed-off-by: Vladimir Riabchun <ferr.lambarginio@gmail.com>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: riic: Always round-up when calculating bus period [+ + +]
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Fri Nov 22 15:14:35 2024 +0100

    i2c: riic: Always round-up when calculating bus period
    
    commit de6b43798d9043a7c749a0428dbb02d5fff156e5 upstream.
    
    Currently, the RIIC driver may run the I2C bus faster than requested,
    which may cause subtle failures.  E.g. Biju reported a measured bus
    speed of 450 kHz instead of the expected maximum of 400 kHz on RZ/G2L.
    
    The initial calculation of the bus period uses DIV_ROUND_UP(), to make
    sure the actual bus speed never becomes faster than the requested bus
    speed.  However, the subsequent division-by-two steps do not use
    round-up, which may lead to a too-small period, hence a too-fast and
    possible out-of-spec bus speed.  E.g. on RZ/Five, requesting a bus speed
    of 100 resp. 400 kHz will yield too-fast target bus speeds of 100806
    resp. 403226 Hz instead of 97656 resp. 390625 Hz.
    
    Fix this by using DIV_ROUND_UP() in the subsequent divisions, too.
    
    Tested on RZ/A1H, RZ/A2M, and RZ/Five.
    
    Fixes: d982d66514192cdb ("i2c: riic: remove clock and frequency restrictions")
    Reported-by: Biju Das <biju.das.jz@bp.renesas.com>
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Cc: <stable@vger.kernel.org> # v4.15+
    Link: https://lore.kernel.org/r/c59aea77998dfea1b4456c4b33b55ab216fcbf5e.1732284746.git.geert+renesas@glider.be
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ila: serialize calls to nf_register_net_hooks() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Mon Dec 30 16:28:49 2024 +0000

    ila: serialize calls to nf_register_net_hooks()
    
    [ Upstream commit 260466b576bca0081a7d4acecc8e93687aa22d0e ]
    
    syzbot found a race in ila_add_mapping() [1]
    
    commit 031ae72825ce ("ila: call nf_unregister_net_hooks() sooner")
    attempted to fix a similar issue.
    
    Looking at the syzbot repro, we have concurrent ILA_CMD_ADD commands.
    
    Add a mutex to make sure at most one thread is calling nf_register_net_hooks().
    
    [1]
     BUG: KASAN: slab-use-after-free in rht_key_hashfn include/linux/rhashtable.h:159 [inline]
     BUG: KASAN: slab-use-after-free in __rhashtable_lookup.constprop.0+0x426/0x550 include/linux/rhashtable.h:604
    Read of size 4 at addr ffff888028f40008 by task dhcpcd/5501
    
    CPU: 1 UID: 0 PID: 5501 Comm: dhcpcd Not tainted 6.13.0-rc4-syzkaller-00054-gd6ef8b40d075 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
    Call Trace:
     <IRQ>
      __dump_stack lib/dump_stack.c:94 [inline]
      dump_stack_lvl+0x116/0x1f0 lib/dump_stack.c:120
      print_address_description mm/kasan/report.c:378 [inline]
      print_report+0xc3/0x620 mm/kasan/report.c:489
      kasan_report+0xd9/0x110 mm/kasan/report.c:602
      rht_key_hashfn include/linux/rhashtable.h:159 [inline]
      __rhashtable_lookup.constprop.0+0x426/0x550 include/linux/rhashtable.h:604
      rhashtable_lookup include/linux/rhashtable.h:646 [inline]
      rhashtable_lookup_fast include/linux/rhashtable.h:672 [inline]
      ila_lookup_wildcards net/ipv6/ila/ila_xlat.c:127 [inline]
      ila_xlat_addr net/ipv6/ila/ila_xlat.c:652 [inline]
      ila_nf_input+0x1ee/0x620 net/ipv6/ila/ila_xlat.c:185
      nf_hook_entry_hookfn include/linux/netfilter.h:154 [inline]
      nf_hook_slow+0xbb/0x200 net/netfilter/core.c:626
      nf_hook.constprop.0+0x42e/0x750 include/linux/netfilter.h:269
      NF_HOOK include/linux/netfilter.h:312 [inline]
      ipv6_rcv+0xa4/0x680 net/ipv6/ip6_input.c:309
      __netif_receive_skb_one_core+0x12e/0x1e0 net/core/dev.c:5672
      __netif_receive_skb+0x1d/0x160 net/core/dev.c:5785
      process_backlog+0x443/0x15f0 net/core/dev.c:6117
      __napi_poll.constprop.0+0xb7/0x550 net/core/dev.c:6883
      napi_poll net/core/dev.c:6952 [inline]
      net_rx_action+0xa94/0x1010 net/core/dev.c:7074
      handle_softirqs+0x213/0x8f0 kernel/softirq.c:561
      __do_softirq kernel/softirq.c:595 [inline]
      invoke_softirq kernel/softirq.c:435 [inline]
      __irq_exit_rcu+0x109/0x170 kernel/softirq.c:662
      irq_exit_rcu+0x9/0x30 kernel/softirq.c:678
      instr_sysvec_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1049 [inline]
      sysvec_apic_timer_interrupt+0xa4/0xc0 arch/x86/kernel/apic/apic.c:1049
    
    Fixes: 7f00feaf1076 ("ila: Add generic ILA translation facility")
    Reported-by: syzbot+47e761d22ecf745f72b9@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/6772c9ae.050a0220.2f3838.04c7.GAE@google.com/T/#u
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Florian Westphal <fw@strlen.de>
    Cc: Tom Herbert <tom@herbertland.com>
    Link: https://patch.msgid.link/20241230162849.2795486-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ionic: Fix netdev notifier unregister on failure [+ + +]
Author: Brett Creeley <brett.creeley@amd.com>
Date:   Thu Dec 12 13:31:55 2024 -0800

    ionic: Fix netdev notifier unregister on failure
    
    [ Upstream commit 9590d32e090ea2751e131ae5273859ca22f5ac14 ]
    
    If register_netdev() fails, then the driver leaks the netdev notifier.
    Fix this by calling ionic_lif_unregister() on register_netdev()
    failure. This will also call ionic_lif_unregister_phc() if it has
    already been registered.
    
    Fixes: 30b87ab4c0b3 ("ionic: remove lif list concept")
    Signed-off-by: Brett Creeley <brett.creeley@amd.com>
    Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Link: https://patch.msgid.link/20241212213157.12212-2-shannon.nelson@amd.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ionic: use ee->offset when returning sprom data [+ + +]
Author: Shannon Nelson <shannon.nelson@amd.com>
Date:   Thu Dec 12 13:31:57 2024 -0800

    ionic: use ee->offset when returning sprom data
    
    [ Upstream commit b096d62ba1323391b2db98b7704e2468cf3b1588 ]
    
    Some calls into ionic_get_module_eeprom() don't use a single
    full buffer size, but instead multiple calls with an offset.
    Teach our driver to use the offset correctly so we can
    respond appropriately to the caller.
    
    Fixes: 4d03e00a2140 ("ionic: Add initial ethtool support")
    Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Link: https://patch.msgid.link/20241212213157.12212-4-shannon.nelson@amd.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
irqchip/gic: Correct declaration of *percpu_base pointer in union gic_base [+ + +]
Author: Uros Bizjak <ubizjak@gmail.com>
Date:   Fri Dec 13 15:57:53 2024 +0100

    irqchip/gic: Correct declaration of *percpu_base pointer in union gic_base
    
    [ Upstream commit a1855f1b7c33642c9f7a01991fb763342a312e9b ]
    
    percpu_base is used in various percpu functions that expect variable in
    __percpu address space. Correct the declaration of percpu_base to
    
    void __iomem * __percpu *percpu_base;
    
    to declare the variable as __percpu pointer.
    
    The patch fixes several sparse warnings:
    
    irq-gic.c:1172:44: warning: incorrect type in assignment (different address spaces)
    irq-gic.c:1172:44:    expected void [noderef] __percpu *[noderef] __iomem *percpu_base
    irq-gic.c:1172:44:    got void [noderef] __iomem *[noderef] __percpu *
    ...
    irq-gic.c:1231:43: warning: incorrect type in argument 1 (different address spaces)
    irq-gic.c:1231:43:    expected void [noderef] __percpu *__pdata
    irq-gic.c:1231:43:    got void [noderef] __percpu *[noderef] __iomem *percpu_base
    
    There were no changes in the resulting object files.
    
    Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Acked-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/all/20241213145809.2918-2-ubizjak@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
kcov: mark in_softirq_really() as __always_inline [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue Dec 17 08:18:10 2024 +0100

    kcov: mark in_softirq_really() as __always_inline
    
    commit cb0ca08b326aa03f87fe94bb91872ce8d2ef1ed8 upstream.
    
    If gcc decides not to inline in_softirq_really(), objtool warns about a
    function call with UACCESS enabled:
    
    kernel/kcov.o: warning: objtool: __sanitizer_cov_trace_pc+0x1e: call to in_softirq_really() with UACCESS enabled
    kernel/kcov.o: warning: objtool: check_kcov_mode+0x11: call to in_softirq_really() with UACCESS enabled
    
    Mark this as __always_inline to avoid the problem.
    
    Link: https://lkml.kernel.org/r/20241217071814.2261620-1-arnd@kernel.org
    Fixes: 7d4df2dad312 ("kcov: properly check for softirq context")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Reviewed-by: Marco Elver <elver@google.com>
    Cc: Aleksandr Nogikh <nogikh@google.com>
    Cc: Andrey Konovalov <andreyknvl@gmail.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Josh Poimboeuf <jpoimboe@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ksmbd: fix Out-of-Bounds Read in ksmbd_vfs_stream_read [+ + +]
Author: Jordy Zomer <jordyzomer@google.com>
Date:   Thu Nov 28 09:32:45 2024 +0900

    ksmbd: fix Out-of-Bounds Read in ksmbd_vfs_stream_read
    
    [ Upstream commit fc342cf86e2dc4d2edb0fc2ff5e28b6c7845adb9 ]
    
    An offset from client could be a negative value, It could lead
    to an out-of-bounds read from the stream_buf.
    Note that this issue is coming when setting
    'vfs objects = streams_xattr parameter' in ksmbd.conf.
    
    Cc: stable@vger.kernel.org # v5.15+
    Reported-by: Jordy Zomer <jordyzomer@google.com>
    Signed-off-by: Jordy Zomer <jordyzomer@google.com>
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ksmbd: fix Out-of-Bounds Write in ksmbd_vfs_stream_write [+ + +]
Author: Jordy Zomer <jordyzomer@google.com>
Date:   Thu Nov 28 09:33:25 2024 +0900

    ksmbd: fix Out-of-Bounds Write in ksmbd_vfs_stream_write
    
    [ Upstream commit 313dab082289e460391c82d855430ec8a28ddf81 ]
    
    An offset from client could be a negative value, It could allows
    to write data outside the bounds of the allocated buffer.
    Note that this issue is coming when setting
    'vfs objects = streams_xattr parameter' in ksmbd.conf.
    
    Cc: stable@vger.kernel.org # v5.15+
    Reported-by: Jordy Zomer <jordyzomer@google.com>
    Signed-off-by: Jordy Zomer <jordyzomer@google.com>
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ksmbd: fix racy issue from session lookup and expire [+ + +]
Author: Namjae Jeon <linkinjeon@kernel.org>
Date:   Thu Dec 5 21:38:47 2024 +0900

    ksmbd: fix racy issue from session lookup and expire
    
    [ Upstream commit b95629435b84b9ecc0c765995204a4d8a913ed52 ]
    
    Increment the session reference count within the lock for lookup to avoid
    racy issue with session expire.
    
    Cc: stable@vger.kernel.org
    Reported-by: zdi-disclosures@trendmicro.com # ZDI-CAN-25737
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
KVM: x86: Play nice with protected guests in complete_hypercall_exit() [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Wed Nov 27 16:43:39 2024 -0800

    KVM: x86: Play nice with protected guests in complete_hypercall_exit()
    
    commit 9b42d1e8e4fe9dc631162c04caa69b0d1860b0f0 upstream.
    
    Use is_64_bit_hypercall() instead of is_64_bit_mode() to detect a 64-bit
    hypercall when completing said hypercall.  For guests with protected state,
    e.g. SEV-ES and SEV-SNP, KVM must assume the hypercall was made in 64-bit
    mode as the vCPU state needed to detect 64-bit mode is unavailable.
    
    Hacking the sev_smoke_test selftest to generate a KVM_HC_MAP_GPA_RANGE
    hypercall via VMGEXIT trips the WARN:
    
      ------------[ cut here ]------------
      WARNING: CPU: 273 PID: 326626 at arch/x86/kvm/x86.h:180 complete_hypercall_exit+0x44/0xe0 [kvm]
      Modules linked in: kvm_amd kvm ... [last unloaded: kvm]
      CPU: 273 UID: 0 PID: 326626 Comm: sev_smoke_test Not tainted 6.12.0-smp--392e932fa0f3-feat #470
      Hardware name: Google Astoria/astoria, BIOS 0.20240617.0-0 06/17/2024
      RIP: 0010:complete_hypercall_exit+0x44/0xe0 [kvm]
      Call Trace:
       <TASK>
       kvm_arch_vcpu_ioctl_run+0x2400/0x2720 [kvm]
       kvm_vcpu_ioctl+0x54f/0x630 [kvm]
       __se_sys_ioctl+0x6b/0xc0
       do_syscall_64+0x83/0x160
       entry_SYSCALL_64_after_hwframe+0x76/0x7e
       </TASK>
      ---[ end trace 0000000000000000 ]---
    
    Fixes: b5aead0064f3 ("KVM: x86: Assume a 64-bit hypercall for guests with protected state")
    Cc: stable@vger.kernel.org
    Cc: Tom Lendacky <thomas.lendacky@amd.com>
    Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
    Reviewed-by: Nikunj A Dadhania <nikunj@amd.com>
    Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com>
    Reviewed-by: Binbin Wu <binbin.wu@linux.intel.com>
    Reviewed-by: Kai Huang <kai.huang@intel.com>
    Link: https://lore.kernel.org/r/20241128004344.4072099-2-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
lib: stackinit: hide never-taken branch from compiler [+ + +]
Author: Kees Cook <kees@kernel.org>
Date:   Sun Nov 17 03:38:13 2024 -0800

    lib: stackinit: hide never-taken branch from compiler
    
    [ Upstream commit 5c3793604f91123bf49bc792ce697a0bef4c173c ]
    
    The never-taken branch leads to an invalid bounds condition, which is by
    design. To avoid the unwanted warning from the compiler, hide the
    variable from the optimizer.
    
    ../lib/stackinit_kunit.c: In function 'do_nothing_u16_zero':
    ../lib/stackinit_kunit.c:51:49: error: array subscript 1 is outside array bounds of 'u16[0]' {aka 'short unsigned int[]'} [-Werror=array-bounds=]
       51 | #define DO_NOTHING_RETURN_SCALAR(ptr)           *(ptr)
          |                                                 ^~~~~~
    ../lib/stackinit_kunit.c:219:24: note: in expansion of macro 'DO_NOTHING_RETURN_SCALAR'
      219 |                 return DO_NOTHING_RETURN_ ## which(ptr + 1);    \
          |                        ^~~~~~~~~~~~~~~~~~
    
    Link: https://lkml.kernel.org/r/20241117113813.work.735-kees@kernel.org
    Signed-off-by: Kees Cook <kees@kernel.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: Linux 5.15.176 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu Jan 9 13:28:51 2025 +0100

    Linux 5.15.176
    
    Link: https://lore.kernel.org/r/20250106151138.451846855@linuxfoundation.org
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: SeongJae Park <sj@kernel.org>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Hardik Garg <hargar@linux.microsoft.com>
    Tested-by: kernelci.org bot <bot@kernelci.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
media: dvb-frontends: dib3000mb: fix uninit-value in dib3000_write_reg [+ + +]
Author: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Date:   Fri May 17 08:58:00 2024 -0700

    media: dvb-frontends: dib3000mb: fix uninit-value in dib3000_write_reg
    
    [ Upstream commit 2dd59fe0e19e1ab955259978082b62e5751924c7 ]
    
    Syzbot reports [1] an uninitialized value issue found by KMSAN in
    dib3000_read_reg().
    
    Local u8 rb[2] is used in i2c_transfer() as a read buffer; in case
    that call fails, the buffer may end up with some undefined values.
    
    Since no elaborate error handling is expected in dib3000_write_reg(),
    simply zero out rb buffer to mitigate the problem.
    
    [1] Syzkaller report
    dvb-usb: bulk message failed: -22 (6/0)
    =====================================================
    BUG: KMSAN: uninit-value in dib3000mb_attach+0x2d8/0x3c0 drivers/media/dvb-frontends/dib3000mb.c:758
     dib3000mb_attach+0x2d8/0x3c0 drivers/media/dvb-frontends/dib3000mb.c:758
     dibusb_dib3000mb_frontend_attach+0x155/0x2f0 drivers/media/usb/dvb-usb/dibusb-mb.c:31
     dvb_usb_adapter_frontend_init+0xed/0x9a0 drivers/media/usb/dvb-usb/dvb-usb-dvb.c:290
     dvb_usb_adapter_init drivers/media/usb/dvb-usb/dvb-usb-init.c:90 [inline]
     dvb_usb_init drivers/media/usb/dvb-usb/dvb-usb-init.c:186 [inline]
     dvb_usb_device_init+0x25a8/0x3760 drivers/media/usb/dvb-usb/dvb-usb-init.c:310
     dibusb_probe+0x46/0x250 drivers/media/usb/dvb-usb/dibusb-mb.c:110
    ...
    Local variable rb created at:
     dib3000_read_reg+0x86/0x4e0 drivers/media/dvb-frontends/dib3000mb.c:54
     dib3000mb_attach+0x123/0x3c0 drivers/media/dvb-frontends/dib3000mb.c:758
    ...
    
    Fixes: 74340b0a8bc6 ("V4L/DVB (4457): Remove dib3000-common-module")
    Reported-by: syzbot+c88fc0ebe0d5935c70da@syzkaller.appspotmail.com
    Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
    Link: https://lore.kernel.org/r/20240517155800.9881-1-n.zhandarovich@fintech.ru
    Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
MIPS: Loongson64: DTS: Fix msi node for ls7a [+ + +]
Author: Jiaxun Yang <jiaxun.yang@flygoat.com>
Date:   Sun Jul 28 12:08:48 2024 -0400

    MIPS: Loongson64: DTS: Fix msi node for ls7a
    
    [ Upstream commit 98a9e2ac3755a353eefea8c52e23d5b0c50f3899 ]
    
    Add it to silent warning:
    arch/mips/boot/dts/loongson/ls7a-pch.dtsi:68.16-416.5: Warning (interrupt_provider): /bus@10000000/pci@1a000000: '#interrupt-cells' found, but node is not an interrupt provider
    arch/mips/boot/dts/loongson/loongson64g_4core_ls7a.dts:32.31-40.4: Warning (interrupt_provider): /bus@10000000/msi-controller@2ff00000: Missing '#interrupt-cells' in interrupt provider
    arch/mips/boot/dts/loongson/loongson64g_4core_ls7a.dtb: Warning (interrupt_map): Failed prerequisite 'interrupt_provider'
    
    Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

MIPS: Probe toolchain support of -msym32 [+ + +]
Author: Jiaxun Yang <jiaxun.yang@flygoat.com>
Date:   Tue Dec 24 14:09:18 2024 +0800

    MIPS: Probe toolchain support of -msym32
    
    [ Upstream commit 18ca63a2e23c5e170d2d7552b64b1f5ad019cd9b ]
    
    msym32 is not supported by LLVM toolchain.
    Workaround by probe toolchain support of msym32 for KBUILD_SYM32
    feature.
    
    Link: https://github.com/ClangBuiltLinux/linux/issues/1544
    Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: WangYuli <wangyuli@uniontech.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mm/vmstat: fix a W=1 clang compiler warning [+ + +]
Author: Bart Van Assche <bvanassche@acm.org>
Date:   Thu Dec 12 13:31:26 2024 -0800

    mm/vmstat: fix a W=1 clang compiler warning
    
    [ Upstream commit 30c2de0a267c04046d89e678cc0067a9cfb455df ]
    
    Fix the following clang compiler warning that is reported if the kernel is
    built with W=1:
    
    ./include/linux/vmstat.h:518:36: error: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Werror,-Wenum-enum-conversion]
      518 |         return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
          |                               ~~~~~~~~~~~ ^ ~~~
    
    Link: https://lkml.kernel.org/r/20241212213126.1269116-1-bvanassche@acm.org
    Fixes: 9d7ea9a297e6 ("mm/vmstat: add helpers to get vmstat item names for each enum type")
    Signed-off-by: Bart Van Assche <bvanassche@acm.org>
    Cc: Konstantin Khlebnikov <koct9i@gmail.com>
    Cc: Nathan Chancellor <nathan@kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mm: vmscan: account for free pages to prevent infinite Loop in throttle_direct_reclaim() [+ + +]
Author: Seiji Nishikawa <snishika@redhat.com>
Date:   Sun Dec 1 01:12:34 2024 +0900

    mm: vmscan: account for free pages to prevent infinite Loop in throttle_direct_reclaim()
    
    commit 6aaced5abd32e2a57cd94fd64f824514d0361da8 upstream.
    
    The task sometimes continues looping in throttle_direct_reclaim() because
    allow_direct_reclaim(pgdat) keeps returning false.
    
     #0 [ffff80002cb6f8d0] __switch_to at ffff8000080095ac
     #1 [ffff80002cb6f900] __schedule at ffff800008abbd1c
     #2 [ffff80002cb6f990] schedule at ffff800008abc50c
     #3 [ffff80002cb6f9b0] throttle_direct_reclaim at ffff800008273550
     #4 [ffff80002cb6fa20] try_to_free_pages at ffff800008277b68
     #5 [ffff80002cb6fae0] __alloc_pages_nodemask at ffff8000082c4660
     #6 [ffff80002cb6fc50] alloc_pages_vma at ffff8000082e4a98
     #7 [ffff80002cb6fca0] do_anonymous_page at ffff80000829f5a8
     #8 [ffff80002cb6fce0] __handle_mm_fault at ffff8000082a5974
     #9 [ffff80002cb6fd90] handle_mm_fault at ffff8000082a5bd4
    
    At this point, the pgdat contains the following two zones:
    
            NODE: 4  ZONE: 0  ADDR: ffff00817fffe540  NAME: "DMA32"
              SIZE: 20480  MIN/LOW/HIGH: 11/28/45
              VM_STAT:
                    NR_FREE_PAGES: 359
            NR_ZONE_INACTIVE_ANON: 18813
              NR_ZONE_ACTIVE_ANON: 0
            NR_ZONE_INACTIVE_FILE: 50
              NR_ZONE_ACTIVE_FILE: 0
              NR_ZONE_UNEVICTABLE: 0
            NR_ZONE_WRITE_PENDING: 0
                         NR_MLOCK: 0
                        NR_BOUNCE: 0
                       NR_ZSPAGES: 0
                NR_FREE_CMA_PAGES: 0
    
            NODE: 4  ZONE: 1  ADDR: ffff00817fffec00  NAME: "Normal"
              SIZE: 8454144  PRESENT: 98304  MIN/LOW/HIGH: 68/166/264
              VM_STAT:
                    NR_FREE_PAGES: 146
            NR_ZONE_INACTIVE_ANON: 94668
              NR_ZONE_ACTIVE_ANON: 3
            NR_ZONE_INACTIVE_FILE: 735
              NR_ZONE_ACTIVE_FILE: 78
              NR_ZONE_UNEVICTABLE: 0
            NR_ZONE_WRITE_PENDING: 0
                         NR_MLOCK: 0
                        NR_BOUNCE: 0
                       NR_ZSPAGES: 0
                NR_FREE_CMA_PAGES: 0
    
    In allow_direct_reclaim(), while processing ZONE_DMA32, the sum of
    inactive/active file-backed pages calculated in zone_reclaimable_pages()
    based on the result of zone_page_state_snapshot() is zero.
    
    Additionally, since this system lacks swap, the calculation of inactive/
    active anonymous pages is skipped.
    
            crash> p nr_swap_pages
            nr_swap_pages = $1937 = {
              counter = 0
            }
    
    As a result, ZONE_DMA32 is deemed unreclaimable and skipped, moving on to
    the processing of the next zone, ZONE_NORMAL, despite ZONE_DMA32 having
    free pages significantly exceeding the high watermark.
    
    The problem is that the pgdat->kswapd_failures hasn't been incremented.
    
            crash> px ((struct pglist_data *) 0xffff00817fffe540)->kswapd_failures
            $1935 = 0x0
    
    This is because the node deemed balanced.  The node balancing logic in
    balance_pgdat() evaluates all zones collectively.  If one or more zones
    (e.g., ZONE_DMA32) have enough free pages to meet their watermarks, the
    entire node is deemed balanced.  This causes balance_pgdat() to exit early
    before incrementing the kswapd_failures, as it considers the overall
    memory state acceptable, even though some zones (like ZONE_NORMAL) remain
    under significant pressure.
    
    
    The patch ensures that zone_reclaimable_pages() includes free pages
    (NR_FREE_PAGES) in its calculation when no other reclaimable pages are
    available (e.g., file-backed or anonymous pages).  This change prevents
    zones like ZONE_DMA32, which have sufficient free pages, from being
    mistakenly deemed unreclaimable.  By doing so, the patch ensures proper
    node balancing, avoids masking pressure on other zones like ZONE_NORMAL,
    and prevents infinite loops in throttle_direct_reclaim() caused by
    allow_direct_reclaim(pgdat) repeatedly returning false.
    
    
    The kernel hangs due to a task stuck in throttle_direct_reclaim(), caused
    by a node being incorrectly deemed balanced despite pressure in certain
    zones, such as ZONE_NORMAL.  This issue arises from
    zone_reclaimable_pages() returning 0 for zones without reclaimable file-
    backed or anonymous pages, causing zones like ZONE_DMA32 with sufficient
    free pages to be skipped.
    
    The lack of swap or reclaimable pages results in ZONE_DMA32 being ignored
    during reclaim, masking pressure in other zones.  Consequently,
    pgdat->kswapd_failures remains 0 in balance_pgdat(), preventing fallback
    mechanisms in allow_direct_reclaim() from being triggered, leading to an
    infinite loop in throttle_direct_reclaim().
    
    This patch modifies zone_reclaimable_pages() to account for free pages
    (NR_FREE_PAGES) when no other reclaimable pages exist.  This ensures zones
    with sufficient free pages are not skipped, enabling proper balancing and
    reclaim behavior.
    
    [akpm@linux-foundation.org: coding-style cleanups]
    Link: https://lkml.kernel.org/r/20241130164346.436469-1-snishika@redhat.com
    Link: https://lkml.kernel.org/r/20241130161236.433747-2-snishika@redhat.com
    Fixes: 5a1c84b404a7 ("mm: remove reclaim and compaction retry approximations")
    Signed-off-by: Seiji Nishikawa <snishika@redhat.com>
    Cc: Mel Gorman <mgorman@techsingularity.net>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mmc: sdhci-tegra: Remove SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC quirk [+ + +]
Author: Prathamesh Shete <pshete@nvidia.com>
Date:   Mon Dec 9 15:40:09 2024 +0530

    mmc: sdhci-tegra: Remove SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC quirk
    
    commit a56335c85b592cb2833db0a71f7112b7d9f0d56b upstream.
    
    Value 0 in ADMA length descriptor is interpreted as 65536 on new Tegra
    chips, remove SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC quirk to make sure max
    ADMA2 length is 65536.
    
    Fixes: 4346b7c7941d ("mmc: tegra: Add Tegra186 support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Prathamesh Shete <pshete@nvidia.com>
    Acked-by: Thierry Reding <treding@nvidia.com>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Message-ID: <20241209101009.22710-1-pshete@nvidia.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
modpost: fix input MODULE_DEVICE_TABLE() built for 64-bit on 32-bit host [+ + +]
Author: Masahiro Yamada <masahiroy@kernel.org>
Date:   Sun Nov 3 21:52:57 2024 +0900

    modpost: fix input MODULE_DEVICE_TABLE() built for 64-bit on 32-bit host
    
    [ Upstream commit 77dc55a978e69625f9718460012e5ef0172dc4de ]
    
    When building a 64-bit kernel on a 32-bit build host, incorrect
    input MODULE_ALIAS() entries may be generated.
    
    For example, when compiling a 64-bit kernel with CONFIG_INPUT_MOUSEDEV=m
    on a 64-bit build machine, you will get the correct output:
    
      $ grep MODULE_ALIAS drivers/input/mousedev.mod.c
      MODULE_ALIAS("input:b*v*p*e*-e*1,*2,*k*110,*r*0,*1,*a*m*l*s*f*w*");
      MODULE_ALIAS("input:b*v*p*e*-e*1,*2,*k*r*8,*a*m*l*s*f*w*");
      MODULE_ALIAS("input:b*v*p*e*-e*1,*3,*k*14A,*r*a*0,*1,*m*l*s*f*w*");
      MODULE_ALIAS("input:b*v*p*e*-e*1,*3,*k*145,*r*a*0,*1,*18,*1C,*m*l*s*f*w*");
      MODULE_ALIAS("input:b*v*p*e*-e*1,*3,*k*110,*r*a*0,*1,*m*l*s*f*w*");
    
    However, building the same kernel on a 32-bit machine results in
    incorrect output:
    
      $ grep MODULE_ALIAS drivers/input/mousedev.mod.c
      MODULE_ALIAS("input:b*v*p*e*-e*1,*2,*k*110,*130,*r*0,*1,*a*m*l*s*f*w*");
      MODULE_ALIAS("input:b*v*p*e*-e*1,*2,*k*r*8,*a*m*l*s*f*w*");
      MODULE_ALIAS("input:b*v*p*e*-e*1,*3,*k*14A,*16A,*r*a*0,*1,*20,*21,*m*l*s*f*w*");
      MODULE_ALIAS("input:b*v*p*e*-e*1,*3,*k*145,*165,*r*a*0,*1,*18,*1C,*20,*21,*38,*3C,*m*l*s*f*w*");
      MODULE_ALIAS("input:b*v*p*e*-e*1,*3,*k*110,*130,*r*a*0,*1,*20,*21,*m*l*s*f*w*");
    
    A similar issue occurs with CONFIG_INPUT_JOYDEV=m. On a 64-bit build
    machine, the output is:
    
      $ grep MODULE_ALIAS drivers/input/joydev.mod.c
      MODULE_ALIAS("input:b*v*p*e*-e*3,*k*r*a*0,*m*l*s*f*w*");
      MODULE_ALIAS("input:b*v*p*e*-e*3,*k*r*a*2,*m*l*s*f*w*");
      MODULE_ALIAS("input:b*v*p*e*-e*3,*k*r*a*8,*m*l*s*f*w*");
      MODULE_ALIAS("input:b*v*p*e*-e*3,*k*r*a*6,*m*l*s*f*w*");
      MODULE_ALIAS("input:b*v*p*e*-e*1,*k*120,*r*a*m*l*s*f*w*");
      MODULE_ALIAS("input:b*v*p*e*-e*1,*k*130,*r*a*m*l*s*f*w*");
      MODULE_ALIAS("input:b*v*p*e*-e*1,*k*2C0,*r*a*m*l*s*f*w*");
    
    However, on a 32-bit machine, the output is incorrect:
    
      $ grep MODULE_ALIAS drivers/input/joydev.mod.c
      MODULE_ALIAS("input:b*v*p*e*-e*3,*k*r*a*0,*20,*m*l*s*f*w*");
      MODULE_ALIAS("input:b*v*p*e*-e*3,*k*r*a*2,*22,*m*l*s*f*w*");
      MODULE_ALIAS("input:b*v*p*e*-e*3,*k*r*a*8,*28,*m*l*s*f*w*");
      MODULE_ALIAS("input:b*v*p*e*-e*3,*k*r*a*6,*26,*m*l*s*f*w*");
      MODULE_ALIAS("input:b*v*p*e*-e*1,*k*11F,*13F,*r*a*m*l*s*f*w*");
      MODULE_ALIAS("input:b*v*p*e*-e*1,*k*11F,*13F,*r*a*m*l*s*f*w*");
      MODULE_ALIAS("input:b*v*p*e*-e*1,*k*2C0,*2E0,*r*a*m*l*s*f*w*");
    
    When building a 64-bit kernel, BITS_PER_LONG is defined as 64. However,
    on a 32-bit build machine, the constant 1L is a signed 32-bit value.
    Left-shifting it beyond 32 bits causes wraparound, and shifting by 31
    or 63 bits makes it a negative value.
    
    The fix in commit e0e92632715f ("[PATCH] PATCH: 1 line 2.6.18 bugfix:
    modpost-64bit-fix.patch") is incorrect; it only addresses cases where
    a 64-bit kernel is built on a 64-bit build machine, overlooking cases
    on a 32-bit build machine.
    
    Using 1ULL ensures a 64-bit width on both 32-bit and 64-bit machines,
    avoiding the wraparound issue.
    
    Fixes: e0e92632715f ("[PATCH] PATCH: 1 line 2.6.18 bugfix: modpost-64bit-fix.patch")
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Stable-dep-of: bf36b4bf1b9a ("modpost: fix the missed iteration for the max bit in do_input()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

modpost: fix the missed iteration for the max bit in do_input() [+ + +]
Author: Masahiro Yamada <masahiroy@kernel.org>
Date:   Thu Dec 26 00:33:35 2024 +0900

    modpost: fix the missed iteration for the max bit in do_input()
    
    [ Upstream commit bf36b4bf1b9a7a0015610e2f038ee84ddb085de2 ]
    
    This loop should iterate over the range from 'min' to 'max' inclusively.
    The last interation is missed.
    
    Fixes: 1d8f430c15b3 ("[PATCH] Input: add modalias support")
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Tested-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mtd: diskonchip: Cast an operand to prevent potential overflow [+ + +]
Author: Zichen Xie <zichenxie0106@gmail.com>
Date:   Wed Oct 23 16:13:10 2024 -0500

    mtd: diskonchip: Cast an operand to prevent potential overflow
    
    commit 9b458e8be0d13e81ed03fffa23f8f9b528bbd786 upstream.
    
    There may be a potential integer overflow issue in inftl_partscan().
    parts[0].size is defined as "uint64_t"  while mtd->erasesize and
    ip->firstUnit are defined as 32-bit unsigned integer. The result of
    the calculation will be limited to 32 bits without correct casting.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Zichen Xie <zichenxie0106@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mtd: rawnand: arasan: Fix double assertion of chip-select [+ + +]
Author: Maciej Andrzejewski <maciej.andrzejewski@m-works.net>
Date:   Mon Dec 2 13:51:07 2024 +0100

    mtd: rawnand: arasan: Fix double assertion of chip-select
    
    commit b086a46dae48829e11c0c02580e30d920b76743c upstream.
    
    When two chip-selects are configured in the device tree, and the second is
    a non-native GPIO, both the GPIO-based chip-select and the first native
    chip-select may be asserted simultaneously. This double assertion causes
    incorrect read and write operations.
    
    The issue occurs because when nfc->ncs <= 2, nfc->spare_cs is always
    initialized to 0 due to static initialization. Consequently, when the
    second chip-select (GPIO-based) is selected in anfc_assert_cs(), it is
    detected by anfc_is_gpio_cs(), and nfc->native_cs is assigned the value 0.
    This results in both the GPIO-based chip-select being asserted and the
    NAND controller register receiving 0, erroneously selecting the native
    chip-select.
    
    This patch resolves the issue, as confirmed by oscilloscope testing with
    configurations involving two or more chip-selects in the device tree.
    
    Fixes: acbd3d0945f9 ("mtd: rawnand: arasan: Leverage additional GPIO CS")
    Cc: stable@vger.kernel.org
    Signed-off-by: Maciej Andrzejewski <maciej.andrzejewski@m-works.net>
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mtd: rawnand: arasan: Fix missing de-registration of NAND [+ + +]
Author: Maciej Andrzejewski <maciej.andrzejewski@m-works.net>
Date:   Mon Dec 2 19:58:36 2024 +0100

    mtd: rawnand: arasan: Fix missing de-registration of NAND
    
    commit 11e6831fd81468cf48155b9b3c11295c391da723 upstream.
    
    The NAND chip-selects are registered for the Arasan driver during
    initialization but are not de-registered when the driver is unloaded. As a
    result, if the driver is loaded again, the chip-selects remain registered
    and busy, making them unavailable for use.
    
    Fixes: 197b88fecc50 ("mtd: rawnand: arasan: Add new Arasan NAND controller")
    Cc: stable@vger.kernel.org
    Signed-off-by: Maciej Andrzejewski ICEYE <maciej.andrzejewski@m-works.net>
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mtd: rawnand: fix double free in atmel_pmecc_create_user() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Wed Oct 23 11:40:56 2024 +0300

    mtd: rawnand: fix double free in atmel_pmecc_create_user()
    
    commit d8e4771f99c0400a1873235704b28bb803c83d17 upstream.
    
    The "user" pointer was converted from being allocated with kzalloc() to
    being allocated by devm_kzalloc().  Calling kfree(user) will lead to a
    double free.
    
    Fixes: 6d734f1bfc33 ("mtd: rawnand: atmel: Fix possible memory leak")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/sctp: Prevent autoclose integer overflow in sctp_association_init() [+ + +]
Author: Nikolay Kuratov <kniv@yandex-team.ru>
Date:   Thu Dec 19 19:21:14 2024 +0300

    net/sctp: Prevent autoclose integer overflow in sctp_association_init()
    
    commit 4e86729d1ff329815a6e8a920cb554a1d4cb5b8d upstream.
    
    While by default max_autoclose equals to INT_MAX / HZ, one may set
    net.sctp.max_autoclose to UINT_MAX. There is code in
    sctp_association_init() that can consequently trigger overflow.
    
    Cc: stable@vger.kernel.org
    Fixes: 9f70f46bd4c7 ("sctp: properly latch and use autoclose value from sock to association")
    Signed-off-by: Nikolay Kuratov <kniv@yandex-team.ru>
    Acked-by: Xin Long <lucien.xin@gmail.com>
    Link: https://patch.msgid.link/20241219162114.2863827-1-kniv@yandex-team.ru
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/smc: check iparea_offset and ipv6_prefixes_cnt when receiving proposal msg [+ + +]
Author: Guangguan Wang <guangguan.wang@linux.alibaba.com>
Date:   Wed Dec 11 17:21:18 2024 +0800

    net/smc: check iparea_offset and ipv6_prefixes_cnt when receiving proposal msg
    
    [ Upstream commit a29e220d3c8edbf0e1beb0f028878a4a85966556 ]
    
    When receiving proposal msg in server, the field iparea_offset
    and the field ipv6_prefixes_cnt in proposal msg are from the
    remote client and can not be fully trusted. Especially the
    field iparea_offset, once exceed the max value, there has the
    chance to access wrong address, and crash may happen.
    
    This patch checks iparea_offset and ipv6_prefixes_cnt before using them.
    
    Fixes: e7b7a64a8493 ("smc: support variable CLC proposal messages")
    Signed-off-by: Guangguan Wang <guangguan.wang@linux.alibaba.com>
    Reviewed-by: Wen Gu <guwen@linux.alibaba.com>
    Reviewed-by: D. Wythe <alibuda@linux.alibaba.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/smc: check return value of sock_recvmsg when draining clc data [+ + +]
Author: Guangguan Wang <guangguan.wang@linux.alibaba.com>
Date:   Wed Dec 11 17:21:21 2024 +0800

    net/smc: check return value of sock_recvmsg when draining clc data
    
    [ Upstream commit c5b8ee5022a19464783058dc6042e8eefa34e8cd ]
    
    When receiving clc msg, the field length in smc_clc_msg_hdr indicates the
    length of msg should be received from network and the value should not be
    fully trusted as it is from the network. Once the value of length exceeds
    the value of buflen in function smc_clc_wait_msg it may run into deadloop
    when trying to drain the remaining data exceeding buflen.
    
    This patch checks the return value of sock_recvmsg when draining data in
    case of deadloop in draining.
    
    Fixes: fb4f79264c0f ("net/smc: tolerate future SMCD versions")
    Signed-off-by: Guangguan Wang <guangguan.wang@linux.alibaba.com>
    Reviewed-by: Wen Gu <guwen@linux.alibaba.com>
    Reviewed-by: D. Wythe <alibuda@linux.alibaba.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/smc: check smcd_v2_ext_offset when receiving proposal msg [+ + +]
Author: Guangguan Wang <guangguan.wang@linux.alibaba.com>
Date:   Wed Dec 11 17:21:20 2024 +0800

    net/smc: check smcd_v2_ext_offset when receiving proposal msg
    
    [ Upstream commit 9ab332deb671d8f7e66d82a2ff2b3f715bc3a4ad ]
    
    When receiving proposal msg in server, the field smcd_v2_ext_offset in
    proposal msg is from the remote client and can not be fully trusted.
    Once the value of smcd_v2_ext_offset exceed the max value, there has
    the chance to access wrong address, and crash may happen.
    
    This patch checks the value of smcd_v2_ext_offset before using it.
    
    Fixes: 5c21c4ccafe8 ("net/smc: determine accepted ISM devices")
    Signed-off-by: Guangguan Wang <guangguan.wang@linux.alibaba.com>
    Reviewed-by: Wen Gu <guwen@linux.alibaba.com>
    Reviewed-by: D. Wythe <alibuda@linux.alibaba.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/smc: check sndbuf_space again after NOSPACE flag is set in smc_poll [+ + +]
Author: Guangguan Wang <guangguan.wang@linux.alibaba.com>
Date:   Wed Dec 11 17:21:17 2024 +0800

    net/smc: check sndbuf_space again after NOSPACE flag is set in smc_poll
    
    [ Upstream commit 679e9ddcf90dbdf98aaaa71a492454654b627bcb ]
    
    When application sending data more than sndbuf_space, there have chances
    application will sleep in epoll_wait, and will never be wakeup again. This
    is caused by a race between smc_poll and smc_cdc_tx_handler.
    
    application                                      tasklet
    smc_tx_sendmsg(len > sndbuf_space)   |
    epoll_wait for EPOLL_OUT,timeout=0   |
      smc_poll                           |
        if (!smc->conn.sndbuf_space)     |
                                         |  smc_cdc_tx_handler
                                         |    atomic_add sndbuf_space
                                         |    smc_tx_sndbuf_nonfull
                                         |      if (!test_bit SOCK_NOSPACE)
                                         |        do not sk_write_space;
          set_bit SOCK_NOSPACE;          |
        return mask=0;                   |
    
    Application will sleep in epoll_wait as smc_poll returns 0. And
    smc_cdc_tx_handler will not call sk_write_space because the SOCK_NOSPACE
    has not be set. If there is no inflight cdc msg, sk_write_space will not be
    called any more, and application will sleep in epoll_wait forever.
    So check sndbuf_space again after NOSPACE flag is set to break the race.
    
    Fixes: 8dce2786a290 ("net/smc: smc_poll improvements")
    Signed-off-by: Guangguan Wang <guangguan.wang@linux.alibaba.com>
    Suggested-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net: dsa: improve shutdown sequence [+ + +]
Author: Vladimir Oltean <vladimir.oltean@nxp.com>
Date:   Fri Sep 13 23:35:49 2024 +0300

    net: dsa: improve shutdown sequence
    
    commit 6c24a03a61a245fe34d47582898331fa034b6ccd upstream.
    
    Alexander Sverdlin presents 2 problems during shutdown with the
    lan9303 driver. One is specific to lan9303 and the other just happens
    to reproduce there.
    
    The first problem is that lan9303 is unique among DSA drivers in that it
    calls dev_get_drvdata() at "arbitrary runtime" (not probe, not shutdown,
    not remove):
    
    phy_state_machine()
    -> ...
       -> dsa_user_phy_read()
          -> ds->ops->phy_read()
             -> lan9303_phy_read()
                -> chip->ops->phy_read()
                   -> lan9303_mdio_phy_read()
                      -> dev_get_drvdata()
    
    But we never stop the phy_state_machine(), so it may continue to run
    after dsa_switch_shutdown(). Our common pattern in all DSA drivers is
    to set drvdata to NULL to suppress the remove() method that may come
    afterwards. But in this case it will result in an NPD.
    
    The second problem is that the way in which we set
    dp->conduit->dsa_ptr = NULL; is concurrent with receive packet
    processing. dsa_switch_rcv() checks once whether dev->dsa_ptr is NULL,
    but afterwards, rather than continuing to use that non-NULL value,
    dev->dsa_ptr is dereferenced again and again without NULL checks:
    dsa_conduit_find_user() and many other places. In between dereferences,
    there is no locking to ensure that what was valid once continues to be
    valid.
    
    Both problems have the common aspect that closing the conduit interface
    solves them.
    
    In the first case, dev_close(conduit) triggers the NETDEV_GOING_DOWN
    event in dsa_user_netdevice_event() which closes user ports as well.
    dsa_port_disable_rt() calls phylink_stop(), which synchronously stops
    the phylink state machine, and ds->ops->phy_read() will thus no longer
    call into the driver after this point.
    
    In the second case, dev_close(conduit) should do this, as per
    Documentation/networking/driver.rst:
    
    | Quiescence
    | ----------
    |
    | After the ndo_stop routine has been called, the hardware must
    | not receive or transmit any data.  All in flight packets must
    | be aborted. If necessary, poll or wait for completion of
    | any reset commands.
    
    So it should be sufficient to ensure that later, when we zeroize
    conduit->dsa_ptr, there will be no concurrent dsa_switch_rcv() call
    on this conduit.
    
    The addition of the netif_device_detach() function is to ensure that
    ioctls, rtnetlinks and ethtool requests on the user ports no longer
    propagate down to the driver - we're no longer prepared to handle them.
    
    The race condition actually did not exist when commit 0650bf52b31f
    ("net: dsa: be compatible with masters which unregister on shutdown")
    first introduced dsa_switch_shutdown(). It was created later, when we
    stopped unregistering the user interfaces from a bad spot, and we just
    replaced that sequence with a racy zeroization of conduit->dsa_ptr
    (one which doesn't ensure that the interfaces aren't up).
    
    Reported-by: Alexander Sverdlin <alexander.sverdlin@siemens.com>
    Closes: https://lore.kernel.org/netdev/2d2e3bba17203c14a5ffdabc174e3b6bbb9ad438.camel@siemens.com/
    Closes: https://lore.kernel.org/netdev/c1bf4de54e829111e0e4a70e7bd1cf523c9550ff.camel@siemens.com/
    Fixes: ee534378f005 ("net: dsa: fix panic when DSA master device unbinds on shutdown")
    Reviewed-by: Alexander Sverdlin <alexander.sverdlin@siemens.com>
    Tested-by: Alexander Sverdlin <alexander.sverdlin@siemens.com>
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Link: https://patch.msgid.link/20240913203549.3081071-1-vladimir.oltean@nxp.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Suggested-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: Peilin He <he.peilin@zte.com.cn>
    Reviewed-by: xu xin <xu.xin16@zte.com.cn>
    Signed-off-by: Kun Jiang <jiang.kun2@zte.com.cn>
    Cc: Fan Yu <fan.yu9@zte.com.cn>
    Cc: Yutan Qiu <qiu.yutan@zte.com.cn>
    Cc: Yaxin Wang <wang.yaxin@zte.com.cn>
    Cc: tuqiang <tu.qiang35@zte.com.cn>
    Cc: Yang Yang <yang.yang29@zte.com.cn>
    Cc: ye xingchen <ye.xingchen@zte.com.cn>
    Cc: Yunkai Zhang <zhang.yunkai@zte.com.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: ethernet: bgmac-platform: fix an OF node reference leak [+ + +]
Author: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Date:   Sat Dec 14 10:49:12 2024 +0900

    net: ethernet: bgmac-platform: fix an OF node reference leak
    
    [ Upstream commit 0cb2c504d79e7caa3abade3f466750c82ad26f01 ]
    
    The OF node obtained by of_parse_phandle() is not freed. Call
    of_node_put() to balance the refcount.
    
    This bug was found by an experimental static analysis tool that I am
    developing.
    
    Fixes: 1676aba5ef7e ("net: ethernet: bgmac: device tree phy enablement")
    Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20241214014912.2810315-1-joe@pf.is.s.u-tokyo.ac.jp
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: fix memory leak in tcp_conn_request() [+ + +]
Author: Wang Liang <wangliang74@huawei.com>
Date:   Thu Dec 19 15:28:59 2024 +0800

    net: fix memory leak in tcp_conn_request()
    
    [ Upstream commit 4f4aa4aa28142d53f8b06585c478476cfe325cfc ]
    
    If inet_csk_reqsk_queue_hash_add() return false, tcp_conn_request() will
    return without free the dst memory, which allocated in af_ops->route_req.
    
    Here is the kmemleak stack:
    
    unreferenced object 0xffff8881198631c0 (size 240):
      comm "softirq", pid 0, jiffies 4299266571 (age 1802.392s)
      hex dump (first 32 bytes):
        00 10 9b 03 81 88 ff ff 80 98 da bc ff ff ff ff  ................
        81 55 18 bb ff ff ff ff 00 00 00 00 00 00 00 00  .U..............
      backtrace:
        [<ffffffffb93e8d4c>] kmem_cache_alloc+0x60c/0xa80
        [<ffffffffba11b4c5>] dst_alloc+0x55/0x250
        [<ffffffffba227bf6>] rt_dst_alloc+0x46/0x1d0
        [<ffffffffba23050a>] __mkroute_output+0x29a/0xa50
        [<ffffffffba23456b>] ip_route_output_key_hash+0x10b/0x240
        [<ffffffffba2346bd>] ip_route_output_flow+0x1d/0x90
        [<ffffffffba254855>] inet_csk_route_req+0x2c5/0x500
        [<ffffffffba26b331>] tcp_conn_request+0x691/0x12c0
        [<ffffffffba27bd08>] tcp_rcv_state_process+0x3c8/0x11b0
        [<ffffffffba2965c6>] tcp_v4_do_rcv+0x156/0x3b0
        [<ffffffffba299c98>] tcp_v4_rcv+0x1cf8/0x1d80
        [<ffffffffba239656>] ip_protocol_deliver_rcu+0xf6/0x360
        [<ffffffffba2399a6>] ip_local_deliver_finish+0xe6/0x1e0
        [<ffffffffba239b8e>] ip_local_deliver+0xee/0x360
        [<ffffffffba239ead>] ip_rcv+0xad/0x2f0
        [<ffffffffba110943>] __netif_receive_skb_one_core+0x123/0x140
    
    Call dst_release() to free the dst memory when
    inet_csk_reqsk_queue_hash_add() return false in tcp_conn_request().
    
    Fixes: ff46e3b44219 ("Fix race for duplicate reqsk on identical SYN")
    Signed-off-by: Wang Liang <wangliang74@huawei.com>
    Link: https://patch.msgid.link/20241219072859.3783576-1-wangliang74@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: hinic: Fix cleanup in create_rxqs/txqs() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Fri Dec 13 17:28:11 2024 +0300

    net: hinic: Fix cleanup in create_rxqs/txqs()
    
    [ Upstream commit 7203d10e93b6e6e1d19481ef7907de6a9133a467 ]
    
    There is a check for NULL at the start of create_txqs() and
    create_rxqs() which tess if "nic_dev->txqs" is non-NULL.  The
    intention is that if the device is already open and the queues
    are already created then we don't create them a second time.
    
    However, the bug is that if we have an error in the create_txqs()
    then the pointer doesn't get set back to NULL.  The NULL check
    at the start of the function will say that it's already open when
    it's not and the device can't be used.
    
    Set ->txqs back to NULL on cleanup on error.
    
    Fixes: c3e79baf1b03 ("net-next/hinic: Add logical Txq and Rxq")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/0cc98faf-a0ed-4565-a55b-0fa2734bc205@stanley.mountain
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: llc: reset skb->transport_header [+ + +]
Author: Antonio Pastor <antonio.pastor@gmail.com>
Date:   Tue Dec 24 20:07:20 2024 -0500

    net: llc: reset skb->transport_header
    
    [ Upstream commit a024e377efed31ecfb39210bed562932321345b3 ]
    
    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. As snap_rcv expects transport_header
    to point to SNAP header (OID:PID) after LLC processing advances offset
    over LLC header (llc_rcv & llc_fixup_skb), code doesn't find a match
    and packet is dropped.
    
    Between napi_complete_done and snap_rcv, transport_header is not used
    until __netif_receive_skb_core, where originally it was being reset.
    Commit fda55eca5a33 ("net: introduce skb_transport_header_was_set()")
    only does so if not set, on the assumption the value was set correctly
    by GRO (and also on assumption that "network stacks usually reset the
    transport header anyway"). Afterwards it is moved forward by
    llc_fixup_skb.
    
    Locally generated traffic shows up at __netif_receive_skb_core with no
    transport_header set and is processed without issue. On a setup with
    GRO but no DSA, transport_header and network_header are both set to
    point to skb->data which is also correct.
    
    As issue is LLC specific, to avoid impacting non-LLC traffic, and to
    follow up on original assumption made on previous code change,
    llc_fixup_skb to reset the offset after skb pull. llc_fixup_skb
    assumes the LLC header is at skb->data, and by definition SNAP header
    immediately follows.
    
    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/20241225010723.2830290-1-antonio.pastor@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: mdiobus: fix an OF node reference leak [+ + +]
Author: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Date:   Wed Dec 18 12:51:06 2024 +0900

    net: mdiobus: fix an OF node reference leak
    
    [ Upstream commit 572af9f284669d31d9175122bbef9bc62cea8ded ]
    
    fwnode_find_mii_timestamper() calls of_parse_phandle_with_fixed_args()
    but does not decrement the refcount of the obtained OF node. Add an
    of_node_put() call before returning from the function.
    
    This bug was detected by an experimental static analysis tool that I am
    developing.
    
    Fixes: bc1bee3b87ee ("net: mdiobus: Introduce fwnode_mdiobus_register_phy()")
    Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://patch.msgid.link/20241218035106.1436405-1-joe@pf.is.s.u-tokyo.ac.jp
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: mv643xx_eth: fix an OF node reference leak [+ + +]
Author: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Date:   Sat Dec 21 17:14:48 2024 +0900

    net: mv643xx_eth: fix an OF node reference leak
    
    [ Upstream commit ad5c318086e2e23b577eca33559c5ebf89bc7eb9 ]
    
    Current implementation of mv643xx_eth_shared_of_add_port() calls
    of_parse_phandle(), but does not release the refcount on error. Call
    of_node_put() in the error path and in mv643xx_eth_shared_of_remove().
    
    This bug was found by an experimental verification tool that I am
    developing.
    
    Fixes: 76723bca2802 ("net: mv643xx_eth: add DT parsing support")
    Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
    Link: https://patch.msgid.link/20241221081448.3313163-1-joe@pf.is.s.u-tokyo.ac.jp
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: restrict SO_REUSEPORT to inet sockets [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue Dec 31 16:05:27 2024 +0000

    net: restrict SO_REUSEPORT to inet sockets
    
    [ Upstream commit 5b0af621c3f6ef9261cf6067812f2fd9943acb4b ]
    
    After blamed commit, crypto sockets could accidentally be destroyed
    from RCU call back, as spotted by zyzbot [1].
    
    Trying to acquire a mutex in RCU callback is not allowed.
    
    Restrict SO_REUSEPORT socket option to inet sockets.
    
    v1 of this patch supported TCP, UDP and SCTP sockets,
    but fcnal-test.sh test needed RAW and ICMP support.
    
    [1]
    BUG: sleeping function called from invalid context at kernel/locking/mutex.c:562
    in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 24, name: ksoftirqd/1
    preempt_count: 100, expected: 0
    RCU nest depth: 0, expected: 0
    1 lock held by ksoftirqd/1/24:
      #0: ffffffff8e937ba0 (rcu_callback){....}-{0:0}, at: rcu_lock_acquire include/linux/rcupdate.h:337 [inline]
      #0: ffffffff8e937ba0 (rcu_callback){....}-{0:0}, at: rcu_do_batch kernel/rcu/tree.c:2561 [inline]
      #0: ffffffff8e937ba0 (rcu_callback){....}-{0:0}, at: rcu_core+0xa37/0x17a0 kernel/rcu/tree.c:2823
    Preemption disabled at:
     [<ffffffff8161c8c8>] softirq_handle_begin kernel/softirq.c:402 [inline]
     [<ffffffff8161c8c8>] handle_softirqs+0x128/0x9b0 kernel/softirq.c:537
    CPU: 1 UID: 0 PID: 24 Comm: ksoftirqd/1 Not tainted 6.13.0-rc3-syzkaller-00174-ga024e377efed #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
    Call Trace:
     <TASK>
      __dump_stack lib/dump_stack.c:94 [inline]
      dump_stack_lvl+0x241/0x360 lib/dump_stack.c:120
      __might_resched+0x5d4/0x780 kernel/sched/core.c:8758
      __mutex_lock_common kernel/locking/mutex.c:562 [inline]
      __mutex_lock+0x131/0xee0 kernel/locking/mutex.c:735
      crypto_put_default_null_skcipher+0x18/0x70 crypto/crypto_null.c:179
      aead_release+0x3d/0x50 crypto/algif_aead.c:489
      alg_do_release crypto/af_alg.c:118 [inline]
      alg_sock_destruct+0x86/0xc0 crypto/af_alg.c:502
      __sk_destruct+0x58/0x5f0 net/core/sock.c:2260
      rcu_do_batch kernel/rcu/tree.c:2567 [inline]
      rcu_core+0xaaa/0x17a0 kernel/rcu/tree.c:2823
      handle_softirqs+0x2d4/0x9b0 kernel/softirq.c:561
      run_ksoftirqd+0xca/0x130 kernel/softirq.c:950
      smpboot_thread_fn+0x544/0xa30 kernel/smpboot.c:164
      kthread+0x2f0/0x390 kernel/kthread.c:389
      ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147
      ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244
     </TASK>
    
    Fixes: 8c7138b33e5c ("net: Unpublish sk from sk_reuseport_cb before call_rcu")
    Reported-by: syzbot+b3e02953598f447d4d2a@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/6772f2f4.050a0220.2f3838.04cb.GAE@google.com/T/#u
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Martin KaFai Lau <kafai@fb.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://patch.msgid.link/20241231160527.3994168-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: sched: fix ordering of qlen adjustment [+ + +]
Author: Lion Ackermann <nnamrec@gmail.com>
Date:   Mon Dec 2 17:22:57 2024 +0100

    net: sched: fix ordering of qlen adjustment
    
    commit 5eb7de8cd58e73851cd37ff8d0666517d9926948 upstream.
    
    Changes to sch->q.qlen around qdisc_tree_reduce_backlog() need to happen
    _before_ a call to said function because otherwise it may fail to notify
    parent qdiscs when the child is about to become empty.
    
    Signed-off-by: Lion Ackermann <nnamrec@gmail.com>
    Acked-by: Toke Høiland-Jørgensen <toke@toke.dk>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Cc: Artem Metla <ametla@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net: stmmac: don't create a MDIO bus if unnecessary [+ + +]
Author: Andrew Halaney <ahalaney@redhat.com>
Date:   Tue Dec 12 16:07:36 2023 -0600

    net: stmmac: don't create a MDIO bus if unnecessary
    
    [ Upstream commit f3c2caacee824ce4a331cdafb0b8dc8e987f105e ]
    
    Currently a MDIO bus is created if the devicetree description is either:
    
        1. Not fixed-link
        2. fixed-link but contains a MDIO bus as well
    
    The "1" case above isn't always accurate. If there's a phy-handle,
    it could be referencing a phy on another MDIO controller's bus[1]. In
    this case, where the MDIO bus is not described at all, currently
    stmmac will make a MDIO bus and scan its address space to discover
    phys (of which there are none). This process takes time scanning a bus
    that is known to be empty, delaying time to complete probe.
    
    There are also a lot of upstream devicetrees[2] that expect a MDIO bus
    to be created, scanned for phys, and the first one found connected
    to the MAC. This case can be inferred from the platform description by
    not having a phy-handle && not being fixed-link. This hits case "1" in
    the current driver's logic, and must be handled in any logic change here
    since it is a valid legacy dt-binding.
    
    Let's improve the logic to create a MDIO bus if either:
    
        - Devicetree contains a MDIO bus
        - !fixed-link && !phy-handle (legacy handling)
    
    This way the case where no MDIO bus should be made is handled, as well
    as retaining backwards compatibility with the valid cases.
    
    Below devicetree snippets can be found that explain some of
    the cases above more concretely.
    
    Here's[0] a devicetree example where the MAC is both fixed-link and
    driving a switch on MDIO (case "2" above). This needs a MDIO bus to
    be created:
    
        &fec1 {
                phy-mode = "rmii";
    
                fixed-link {
                        speed = <100>;
                        full-duplex;
                };
    
                mdio1: mdio {
                        switch0: switch0@0 {
                                compatible = "marvell,mv88e6190";
                                pinctrl-0 = <&pinctrl_gpio_switch0>;
                        };
                };
        };
    
    Here's[1] an example where there is no MDIO bus or fixed-link for
    the ethernet1 MAC, so no MDIO bus should be created since ethernet0
    is the MDIO master for ethernet1's phy:
    
        ðernet0 {
                phy-mode = "sgmii";
                phy-handle = <&sgmii_phy0>;
    
                mdio {
                        compatible = "snps,dwmac-mdio";
                        sgmii_phy0: phy@8 {
                                compatible = "ethernet-phy-id0141.0dd4";
                                reg = <0x8>;
                                device_type = "ethernet-phy";
                        };
    
                        sgmii_phy1: phy@a {
                                compatible = "ethernet-phy-id0141.0dd4";
                                reg = <0xa>;
                                device_type = "ethernet-phy";
                        };
                };
        };
    
        ðernet1 {
                phy-mode = "sgmii";
                phy-handle = <&sgmii_phy1>;
        };
    
    Finally there's descriptions like this[2] which don't describe the
    MDIO bus but expect it to be created and the whole address space
    scanned for a phy since there's no phy-handle or fixed-link described:
    
        &gmac {
                phy-supply = <&vcc_lan>;
                phy-mode = "rmii";
                snps,reset-gpio = <&gpio3 RK_PB4 GPIO_ACTIVE_HIGH>;
                snps,reset-active-low;
                snps,reset-delays-us = <0 10000 1000000>;
        };
    
    [0] https://elixir.bootlin.com/linux/v6.5-rc5/source/arch/arm/boot/dts/nxp/vf/vf610-zii-ssmb-dtu.dts
    [1] https://elixir.bootlin.com/linux/v6.6-rc5/source/arch/arm64/boot/dts/qcom/sa8775p-ride.dts
    [2] https://elixir.bootlin.com/linux/v6.6-rc5/source/arch/arm64/boot/dts/rockchip/rk3368-r88.dts#L164
    
    Reviewed-by: Serge Semin <fancer.lancer@gmail.com>
    Co-developed-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Signed-off-by: Andrew Halaney <ahalaney@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 2b6ffcd7873b ("net: stmmac: restructure the error path of stmmac_probe_config_dt()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: stmmac: platform: provide devm_stmmac_probe_config_dt() [+ + +]
Author: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Date:   Fri Jun 23 12:04:14 2023 +0200

    net: stmmac: platform: provide devm_stmmac_probe_config_dt()
    
    [ Upstream commit d74065427374da6659a2d7fad4ec55c8926d43c4 ]
    
    Provide a devres variant of stmmac_probe_config_dt() that allows users to
    skip calling stmmac_remove_config_dt() at driver detach.
    
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Link: https://lore.kernel.org/r/20230623100417.93592-9-brgl@bgdev.pl
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 2b6ffcd7873b ("net: stmmac: restructure the error path of stmmac_probe_config_dt()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: stmmac: restructure the error path of stmmac_probe_config_dt() [+ + +]
Author: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
Date:   Thu Dec 19 11:41:19 2024 +0900

    net: stmmac: restructure the error path of stmmac_probe_config_dt()
    
    [ Upstream commit 2b6ffcd7873b7e8a62c3e15a6f305bfc747c466b ]
    
    Current implementation of stmmac_probe_config_dt() does not release the
    OF node reference obtained by of_parse_phandle() in some error paths.
    The problem is that some error paths call stmmac_remove_config_dt() to
    clean up but others use and unwind ladder.  These two types of error
    handling have not kept in sync and have been a recurring source of bugs.
    Re-write the error handling in stmmac_probe_config_dt() to use an unwind
    ladder. Consequently, stmmac_remove_config_dt() is not needed anymore,
    thus remove it.
    
    This bug was found by an experimental verification tool that I am
    developing.
    
    Fixes: 4838a5405028 ("net: stmmac: Fix wrapper drivers not detecting PHY")
    Signed-off-by: Joe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
    Link: https://patch.msgid.link/20241219024119.2017012-1-joe@pf.is.s.u-tokyo.ac.jp
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: usb: qmi_wwan: add Telit FE910C04 compositions [+ + +]
Author: Daniele Palmas <dnlplm@gmail.com>
Date:   Mon Dec 9 16:18:21 2024 +0100

    net: usb: qmi_wwan: add Telit FE910C04 compositions
    
    [ Upstream commit 3b58b53a26598209a7ad8259a5114ce71f7c3d64 ]
    
    Add the following Telit FE910C04 compositions:
    
    0x10c0: rmnet + tty (AT/NMEA) + tty (AT) + tty (diag)
    T:  Bus=02 Lev=01 Prnt=03 Port=06 Cnt=01 Dev#= 13 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10c0 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10c4: rmnet + tty (AT) + tty (AT) + tty (diag)
    T:  Bus=02 Lev=01 Prnt=03 Port=06 Cnt=01 Dev#= 14 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10c4 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10c8: rmnet + tty (AT) + tty (diag) + DPL (data packet logging) + adb
    T:  Bus=02 Lev=01 Prnt=03 Port=06 Cnt=01 Dev#= 17 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10c8 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 3 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
    Link: https://patch.msgid.link/20241209151821.3688829-1-dnlplm@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: wwan: iosm: Properly check for valid exec stage in ipc_mmio_init() [+ + +]
Author: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
Date:   Sun Dec 29 17:46:58 2024 +0100

    net: wwan: iosm: Properly check for valid exec stage in ipc_mmio_init()
    
    [ Upstream commit a7af435df0e04cfb4a4004136d597c42639a2ae7 ]
    
    ipc_mmio_init() used the post-decrement operator in its loop continuing
    condition of "retries" counter being "> 0", which meant that when this
    condition caused loop exit "retries" counter reached -1.
    
    But the later valid exec stage failure check only tests for "retries"
    counter being exactly zero, so it didn't trigger in this case (but
    would wrongly trigger if the code reaches a valid exec stage in the
    very last loop iteration).
    
    Fix this by using the pre-decrement operator instead, so the loop counter
    is exactly zero on valid exec stage failure.
    
    Fixes: dc0514f5d828 ("net: iosm: mmio scratchpad")
    Signed-off-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
    Link: https://patch.msgid.link/8b19125a825f9dcdd81c667c1e5c48ba28d505a6.1735490770.git.mail@maciej.szmigiero.name
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netdevsim: prevent bad user input in nsim_dev_health_break_write() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Dec 13 17:25:18 2024 +0000

    netdevsim: prevent bad user input in nsim_dev_health_break_write()
    
    [ Upstream commit ee76746387f6233bdfa93d7406990f923641568f ]
    
    If either a zero count or a large one is provided, kernel can crash.
    
    Fixes: 82c93a87bf8b ("netdevsim: implement couple of testing devlink health reporters")
    Reported-by: syzbot+ea40e4294e58b0292f74@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/675c6862.050a0220.37aaf.00b1.GAE@google.com/T/#u
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Jiri Pirko <jiri@nvidia.com>
    Reviewed-by: Joe Damato <jdamato@fastly.com>
    Link: https://patch.msgid.link/20241213172518.2415666-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netfilter: ipset: Fix for recursive locking warning [+ + +]
Author: Phil Sutter <phil@nwl.cc>
Date:   Tue Dec 17 20:56:55 2024 +0100

    netfilter: ipset: Fix for recursive locking warning
    
    [ Upstream commit 70b6f46a4ed8bd56c85ffff22df91e20e8c85e33 ]
    
    With CONFIG_PROVE_LOCKING, when creating a set of type bitmap:ip, adding
    it to a set of type list:set and populating it from iptables SET target
    triggers a kernel warning:
    
    | WARNING: possible recursive locking detected
    | 6.12.0-rc7-01692-g5e9a28f41134-dirty #594 Not tainted
    | --------------------------------------------
    | ping/4018 is trying to acquire lock:
    | ffff8881094a6848 (&set->lock){+.-.}-{2:2}, at: ip_set_add+0x28c/0x360 [ip_set]
    |
    | but task is already holding lock:
    | ffff88811034c048 (&set->lock){+.-.}-{2:2}, at: ip_set_add+0x28c/0x360 [ip_set]
    
    This is a false alarm: ipset does not allow nested list:set type, so the
    loop in list_set_kadd() can never encounter the outer set itself. No
    other set type supports embedded sets, so this is the only case to
    consider.
    
    To avoid the false report, create a distinct lock class for list:set
    type ipset locks.
    
    Fixes: f830837f0eed ("netfilter: ipset: list:set set type support")
    Signed-off-by: Phil Sutter <phil@nwl.cc>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nft_set_hash: unaligned atomic read on struct nft_set_ext [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Sat Dec 21 00:29:20 2024 +0100

    netfilter: nft_set_hash: unaligned atomic read on struct nft_set_ext
    
    [ Upstream commit 542ed8145e6f9392e3d0a86a0e9027d2ffd183e4 ]
    
    Access to genmask field in struct nft_set_ext results in unaligned
    atomic read:
    
    [   72.130109] Unable to handle kernel paging request at virtual address ffff0000c2bb708c
    [   72.131036] Mem abort info:
    [   72.131213]   ESR = 0x0000000096000021
    [   72.131446]   EC = 0x25: DABT (current EL), IL = 32 bits
    [   72.132209]   SET = 0, FnV = 0
    [   72.133216]   EA = 0, S1PTW = 0
    [   72.134080]   FSC = 0x21: alignment fault
    [   72.135593] Data abort info:
    [   72.137194]   ISV = 0, ISS = 0x00000021, ISS2 = 0x00000000
    [   72.142351]   CM = 0, WnR = 0, TnD = 0, TagAccess = 0
    [   72.145989]   GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
    [   72.150115] swapper pgtable: 4k pages, 48-bit VAs, pgdp=0000000237d27000
    [   72.154893] [ffff0000c2bb708c] pgd=0000000000000000, p4d=180000023ffff403, pud=180000023f84b403, pmd=180000023f835403,
    +pte=0068000102bb7707
    [   72.163021] Internal error: Oops: 0000000096000021 [#1] SMP
    [...]
    [   72.170041] CPU: 7 UID: 0 PID: 54 Comm: kworker/7:0 Tainted: G            E      6.13.0-rc3+ #2
    [   72.170509] Tainted: [E]=UNSIGNED_MODULE
    [   72.170720] Hardware name: QEMU QEMU Virtual Machine, BIOS edk2-stable202302-for-qemu 03/01/2023
    [   72.171192] Workqueue: events_power_efficient nft_rhash_gc [nf_tables]
    [   72.171552] pstate: 21400005 (nzCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--)
    [   72.171915] pc : nft_rhash_gc+0x200/0x2d8 [nf_tables]
    [   72.172166] lr : nft_rhash_gc+0x128/0x2d8 [nf_tables]
    [   72.172546] sp : ffff800081f2bce0
    [   72.172724] x29: ffff800081f2bd40 x28: ffff0000c2bb708c x27: 0000000000000038
    [   72.173078] x26: ffff0000c6780ef0 x25: ffff0000c643df00 x24: ffff0000c6778f78
    [   72.173431] x23: 000000000000001a x22: ffff0000c4b1f000 x21: ffff0000c6780f78
    [   72.173782] x20: ffff0000c2bb70dc x19: ffff0000c2bb7080 x18: 0000000000000000
    [   72.174135] x17: ffff0000c0a4e1c0 x16: 0000000000003000 x15: 0000ac26d173b978
    [   72.174485] x14: ffffffffffffffff x13: 0000000000000030 x12: ffff0000c6780ef0
    [   72.174841] x11: 0000000000000000 x10: ffff800081f2bcf8 x9 : ffff0000c3000000
    [   72.175193] x8 : 00000000000004be x7 : 0000000000000000 x6 : 0000000000000000
    [   72.175544] x5 : 0000000000000040 x4 : ffff0000c3000010 x3 : 0000000000000000
    [   72.175871] x2 : 0000000000003a98 x1 : ffff0000c2bb708c x0 : 0000000000000004
    [   72.176207] Call trace:
    [   72.176316]  nft_rhash_gc+0x200/0x2d8 [nf_tables] (P)
    [   72.176653]  process_one_work+0x178/0x3d0
    [   72.176831]  worker_thread+0x200/0x3f0
    [   72.176995]  kthread+0xe8/0xf8
    [   72.177130]  ret_from_fork+0x10/0x20
    [   72.177289] Code: 54fff984 d503201f d2800080 91003261 (f820303f)
    [   72.177557] ---[ end trace 0000000000000000 ]---
    
    Align struct nft_set_ext to word size to address this and
    documentation it.
    
    pahole reports that this increases the size of elements for rhash and
    pipapo in 8 bytes on x86_64.
    
    Fixes: 7ffc7481153b ("netfilter: nft_set_hash: skip duplicated elements pending gc run")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netrom: check buffer length before accessing it [+ + +]
Author: Ilya Shchipletsov <rabbelkin@mail.ru>
Date:   Thu Dec 19 08:23:07 2024 +0000

    netrom: check buffer length before accessing it
    
    [ Upstream commit a4fd163aed2edd967a244499754dec991d8b4c7d ]
    
    Syzkaller reports an uninit value read from ax25cmp when sending raw message
    through ieee802154 implementation.
    
    =====================================================
    BUG: KMSAN: uninit-value in ax25cmp+0x3a5/0x460 net/ax25/ax25_addr.c:119
     ax25cmp+0x3a5/0x460 net/ax25/ax25_addr.c:119
     nr_dev_get+0x20e/0x450 net/netrom/nr_route.c:601
     nr_route_frame+0x1a2/0xfc0 net/netrom/nr_route.c:774
     nr_xmit+0x5a/0x1c0 net/netrom/nr_dev.c:144
     __netdev_start_xmit include/linux/netdevice.h:4940 [inline]
     netdev_start_xmit include/linux/netdevice.h:4954 [inline]
     xmit_one net/core/dev.c:3548 [inline]
     dev_hard_start_xmit+0x247/0xa10 net/core/dev.c:3564
     __dev_queue_xmit+0x33b8/0x5130 net/core/dev.c:4349
     dev_queue_xmit include/linux/netdevice.h:3134 [inline]
     raw_sendmsg+0x654/0xc10 net/ieee802154/socket.c:299
     ieee802154_sock_sendmsg+0x91/0xc0 net/ieee802154/socket.c:96
     sock_sendmsg_nosec net/socket.c:730 [inline]
     __sock_sendmsg net/socket.c:745 [inline]
     ____sys_sendmsg+0x9c2/0xd60 net/socket.c:2584
     ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2638
     __sys_sendmsg net/socket.c:2667 [inline]
     __do_sys_sendmsg net/socket.c:2676 [inline]
     __se_sys_sendmsg net/socket.c:2674 [inline]
     __x64_sys_sendmsg+0x307/0x490 net/socket.c:2674
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0x44/0x110 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x63/0x6b
    
    Uninit was created at:
     slab_post_alloc_hook+0x129/0xa70 mm/slab.h:768
     slab_alloc_node mm/slub.c:3478 [inline]
     kmem_cache_alloc_node+0x5e9/0xb10 mm/slub.c:3523
     kmalloc_reserve+0x13d/0x4a0 net/core/skbuff.c:560
     __alloc_skb+0x318/0x740 net/core/skbuff.c:651
     alloc_skb include/linux/skbuff.h:1286 [inline]
     alloc_skb_with_frags+0xc8/0xbd0 net/core/skbuff.c:6334
     sock_alloc_send_pskb+0xa80/0xbf0 net/core/sock.c:2780
     sock_alloc_send_skb include/net/sock.h:1884 [inline]
     raw_sendmsg+0x36d/0xc10 net/ieee802154/socket.c:282
     ieee802154_sock_sendmsg+0x91/0xc0 net/ieee802154/socket.c:96
     sock_sendmsg_nosec net/socket.c:730 [inline]
     __sock_sendmsg net/socket.c:745 [inline]
     ____sys_sendmsg+0x9c2/0xd60 net/socket.c:2584
     ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2638
     __sys_sendmsg net/socket.c:2667 [inline]
     __do_sys_sendmsg net/socket.c:2676 [inline]
     __se_sys_sendmsg net/socket.c:2674 [inline]
     __x64_sys_sendmsg+0x307/0x490 net/socket.c:2674
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0x44/0x110 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x63/0x6b
    
    CPU: 0 PID: 5037 Comm: syz-executor166 Not tainted 6.7.0-rc7-syzkaller-00003-gfbafc3e621c3 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 11/17/2023
    =====================================================
    
    This issue occurs because the skb buffer is too small, and it's actual
    allocation is aligned. This hides an actual issue, which is that nr_route_frame
    does not validate the buffer size before using it.
    
    Fix this issue by checking skb->len before accessing any fields in skb->data.
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Co-developed-by: Nikita Marushkin <hfggklm@gmail.com>
    Signed-off-by: Nikita Marushkin <hfggklm@gmail.com>
    Signed-off-by: Ilya Shchipletsov <rabbelkin@mail.ru>
    Link: https://patch.msgid.link/20241219082308.3942-1-rabbelkin@mail.ru
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
NFS/pnfs: Fix a live lock between recalled layouts and layoutget [+ + +]
Author: Trond Myklebust <trond.myklebust@hammerspace.com>
Date:   Mon Dec 16 19:28:06 2024 -0500

    NFS/pnfs: Fix a live lock between recalled layouts and layoutget
    
    commit 62e2a47ceab8f3f7d2e3f0e03fdd1c5e0059fd8b upstream.
    
    When the server is recalling a layout, we should ignore the count of
    outstanding layoutget calls, since the server is expected to return
    either NFS4ERR_RECALLCONFLICT or NFS4ERR_RETURNCONFLICT for as long as
    the recall is outstanding.
    Currently, we may end up livelocking, causing the layout to eventually
    be forcibly revoked.
    
    Fixes: bf0291dd2267 ("pNFS: Ensure LAYOUTGET and LAYOUTRETURN are properly serialised")
    Cc: stable@vger.kernel.org
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nfsd: cancel nfsd_shrinker_work using sync mode in nfs4_state_shutdown_net [+ + +]
Author: Yang Erkun <yangerkun@huaweicloud.com>
Date:   Mon Oct 21 16:25:40 2024 +0800

    nfsd: cancel nfsd_shrinker_work using sync mode in nfs4_state_shutdown_net
    
    commit d5ff2fb2e7167e9483846e34148e60c0c016a1f6 upstream.
    
    In the normal case, when we excute `echo 0 > /proc/fs/nfsd/threads`, the
    function `nfs4_state_destroy_net` in `nfs4_state_shutdown_net` will
    release all resources related to the hashed `nfs4_client`. If the
    `nfsd_client_shrinker` is running concurrently, the `expire_client`
    function will first unhash this client and then destroy it. This can
    lead to the following warning. Additionally, numerous use-after-free
    errors may occur as well.
    
    nfsd_client_shrinker         echo 0 > /proc/fs/nfsd/threads
    
    expire_client                nfsd_shutdown_net
      unhash_client                ...
                                   nfs4_state_shutdown_net
                                     /* won't wait shrinker exit */
      /*                             cancel_work(&nn->nfsd_shrinker_work)
       * nfsd_file for this          /* won't destroy unhashed client1 */
       * client1 still alive         nfs4_state_destroy_net
       */
    
                                   nfsd_file_cache_shutdown
                                     /* trigger warning */
                                     kmem_cache_destroy(nfsd_file_slab)
                                     kmem_cache_destroy(nfsd_file_mark_slab)
      /* release nfsd_file and mark */
      __destroy_client
    
    ====================================================================
    BUG nfsd_file (Not tainted): Objects remaining in nfsd_file on
    __kmem_cache_shutdown()
    --------------------------------------------------------------------
    CPU: 4 UID: 0 PID: 764 Comm: sh Not tainted 6.12.0-rc3+ #1
    
     dump_stack_lvl+0x53/0x70
     slab_err+0xb0/0xf0
     __kmem_cache_shutdown+0x15c/0x310
     kmem_cache_destroy+0x66/0x160
     nfsd_file_cache_shutdown+0xac/0x210 [nfsd]
     nfsd_destroy_serv+0x251/0x2a0 [nfsd]
     nfsd_svc+0x125/0x1e0 [nfsd]
     write_threads+0x16a/0x2a0 [nfsd]
     nfsctl_transaction_write+0x74/0xa0 [nfsd]
     vfs_write+0x1a5/0x6d0
     ksys_write+0xc1/0x160
     do_syscall_64+0x5f/0x170
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    ====================================================================
    BUG nfsd_file_mark (Tainted: G    B   W         ): Objects remaining
    nfsd_file_mark on __kmem_cache_shutdown()
    --------------------------------------------------------------------
    
     dump_stack_lvl+0x53/0x70
     slab_err+0xb0/0xf0
     __kmem_cache_shutdown+0x15c/0x310
     kmem_cache_destroy+0x66/0x160
     nfsd_file_cache_shutdown+0xc8/0x210 [nfsd]
     nfsd_destroy_serv+0x251/0x2a0 [nfsd]
     nfsd_svc+0x125/0x1e0 [nfsd]
     write_threads+0x16a/0x2a0 [nfsd]
     nfsctl_transaction_write+0x74/0xa0 [nfsd]
     vfs_write+0x1a5/0x6d0
     ksys_write+0xc1/0x160
     do_syscall_64+0x5f/0x170
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    To resolve this issue, cancel `nfsd_shrinker_work` using synchronous
    mode in nfs4_state_shutdown_net.
    
    Fixes: 7c24fa225081 ("NFSD: replace delayed_work with work_struct for nfsd_client_shrinker")
    Signed-off-by: Yang Erkun <yangerkun@huaweicloud.com>
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

nfsd: restore callback functionality for NFSv4.0 [+ + +]
Author: NeilBrown <neilb@suse.de>
Date:   Fri Dec 20 15:28:18 2024 +1100

    nfsd: restore callback functionality for NFSv4.0
    
    [ Upstream commit 7917f01a286ce01e9c085e24468421f596ee1a0c ]
    
    A recent patch inadvertently broke callbacks for NFSv4.0.
    
    In the 4.0 case we do not expect a session to be found but still need to
    call setup_callback_client() which will not try to dereference it.
    
    This patch moves the check for failure to find a session into the 4.1+
    branch of setup_callback_client()
    
    Fixes: 1e02c641c3a4 ("NFSD: Prevent NULL dereference in nfsd4_process_cb_update()")
    Signed-off-by: NeilBrown <neilb@suse.de>
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nilfs2: prevent use of deleted inode [+ + +]
Author: Edward Adam Davis <eadavis@qq.com>
Date:   Mon Dec 9 15:56:52 2024 +0900

    nilfs2: prevent use of deleted inode
    
    commit 901ce9705fbb9f330ff1f19600e5daf9770b0175 upstream.
    
    syzbot reported a WARNING in nilfs_rmdir. [1]
    
    Because the inode bitmap is corrupted, an inode with an inode number that
    should exist as a ".nilfs" file was reassigned by nilfs_mkdir for "file0",
    causing an inode duplication during execution.  And this causes an
    underflow of i_nlink in rmdir operations.
    
    The inode is used twice by the same task to unmount and remove directories
    ".nilfs" and "file0", it trigger warning in nilfs_rmdir.
    
    Avoid to this issue, check i_nlink in nilfs_iget(), if it is 0, it means
    that this inode has been deleted, and iput is executed to reclaim it.
    
    [1]
    WARNING: CPU: 1 PID: 5824 at fs/inode.c:407 drop_nlink+0xc4/0x110 fs/inode.c:407
    ...
    Call Trace:
     <TASK>
     nilfs_rmdir+0x1b0/0x250 fs/nilfs2/namei.c:342
     vfs_rmdir+0x3a3/0x510 fs/namei.c:4394
     do_rmdir+0x3b5/0x580 fs/namei.c:4453
     __do_sys_rmdir fs/namei.c:4472 [inline]
     __se_sys_rmdir fs/namei.c:4470 [inline]
     __x64_sys_rmdir+0x47/0x50 fs/namei.c:4470
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Link: https://lkml.kernel.org/r/20241209065759.6781-1-konishi.ryusuke@gmail.com
    Fixes: d25006523d0b ("nilfs2: pathname operations")
    Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Reported-by: syzbot+9260555647a5132edd48@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=9260555647a5132edd48
    Tested-by: syzbot+9260555647a5132edd48@syzkaller.appspotmail.com
    Signed-off-by: Edward Adam Davis <eadavis@qq.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
of/irq: Fix using uninitialized variable @addr_len in API of_irq_parse_one() [+ + +]
Author: Zijun Hu <quic_zijuhu@quicinc.com>
Date:   Mon Dec 9 21:25:02 2024 +0800

    of/irq: Fix using uninitialized variable @addr_len in API of_irq_parse_one()
    
    commit 0f7ca6f69354e0c3923bbc28c92d0ecab4d50a3e upstream.
    
    of_irq_parse_one() may use uninitialized variable @addr_len as shown below:
    
    // @addr_len is uninitialized
    int addr_len;
    
    // This operation does not touch @addr_len if it fails.
    addr = of_get_property(device, "reg", &addr_len);
    
    // Use uninitialized @addr_len if the operation fails.
    if (addr_len > sizeof(addr_buf))
            addr_len = sizeof(addr_buf);
    
    // Check the operation result here.
    if (addr)
            memcpy(addr_buf, addr, addr_len);
    
    Fix by initializing @addr_len before the operation.
    
    Fixes: b739dffa5d57 ("of/irq: Prevent device address out-of-bounds read in interrupt map walk")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
    Link: https://lore.kernel.org/r/20241209-of_irq_fix-v1-4-782f1419c8a1@quicinc.com
    Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
of: Fix error path in of_parse_phandle_with_args_map() [+ + +]
Author: Herve Codina <herve.codina@bootlin.com>
Date:   Mon Dec 2 17:58:19 2024 +0100

    of: Fix error path in of_parse_phandle_with_args_map()
    
    commit d7dfa7fde63dde4d2ec0083133efe2c6686c03ff upstream.
    
    The current code uses some 'goto put;' to cancel the parsing operation
    and can lead to a return code value of 0 even on error cases.
    
    Indeed, some goto calls are done from a loop without setting the ret
    value explicitly before the goto call and so the ret value can be set to
    0 due to operation done in previous loop iteration. For instance match
    can be set to 0 in the previous loop iteration (leading to a new
    iteration) but ret can also be set to 0 it the of_property_read_u32()
    call succeed. In that case if no match are found or if an error is
    detected the new iteration, the return value can be wrongly 0.
    
    Avoid those cases setting the ret value explicitly before the goto
    calls.
    
    Fixes: bd6f2fd5a1d5 ("of: Support parsing phandle argument lists through a nexus node")
    Cc: stable@vger.kernel.org
    Signed-off-by: Herve Codina <herve.codina@bootlin.com>
    Link: https://lore.kernel.org/r/20241202165819.158681-1-herve.codina@bootlin.com
    Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

of: Fix refcount leakage for OF node returned by __of_get_dma_parent() [+ + +]
Author: Zijun Hu <quic_zijuhu@quicinc.com>
Date:   Fri Dec 6 08:52:30 2024 +0800

    of: Fix refcount leakage for OF node returned by __of_get_dma_parent()
    
    commit 5d009e024056ded20c5bb1583146b833b23bbd5a upstream.
    
    __of_get_dma_parent() returns OF device node @args.np, but the node's
    refcount is increased twice, by both of_parse_phandle_with_args() and
    of_node_get(), so causes refcount leakage for the node.
    
    Fix by directly returning the node got by of_parse_phandle_with_args().
    
    Fixes: f83a6e5dea6c ("of: address: Add support for the parent DMA bus")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
    Link: https://lore.kernel.org/r/20241206-of_core_fix-v1-4-dc28ed56bec3@quicinc.com
    Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
PCI/AER: Disable AER service on suspend [+ + +]
Author: Kai-Heng Feng <kai.heng.feng@canonical.com>
Date:   Sun Jul 28 12:08:50 2024 -0400

    PCI/AER: Disable AER service on suspend
    
    [ Upstream commit 5afc2f763edc5daae4722ee46fea4e627d01fa90 ]
    
    If the link is powered off during suspend, electrical noise may cause
    errors that are logged via AER.  If the AER interrupt is enabled and shares
    an IRQ with PME, that causes a spurious wakeup during suspend.
    
    Disable the AER interrupt during suspend to prevent this.  Clear error
    status before re-enabling IRQ interrupts during resume so we don't get an
    interrupt for errors that occurred during the suspend/resume process.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=209149
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=216295
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=218090
    Link: https://lore.kernel.org/r/20240416043225.1462548-2-kai.heng.feng@canonical.com
    Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
    [bhelgaas: drop pci_ancestor_pr3_present() etc, commit log]
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
PCI: Add ACS quirk for Broadcom BCM5760X NIC [+ + +]
Author: Ajit Khaparde <ajit.khaparde@broadcom.com>
Date:   Sun Jul 28 12:08:43 2024 -0400

    PCI: Add ACS quirk for Broadcom BCM5760X NIC
    
    [ Upstream commit 524e057b2d66b61f9b63b6db30467ab7b0bb4796 ]
    
    The Broadcom BCM5760X NIC may be a multi-function device.
    
    While it does not advertise an ACS capability, peer-to-peer transactions
    are not possible between the individual functions. So it is ok to treat
    them as fully isolated.
    
    Add an ACS quirk for this device so the functions can be in independent
    IOMMU groups and attached individually to userspace applications using
    VFIO.
    
    [kwilczynski: commit log]
    Link: https://lore.kernel.org/linux-pci/20240510204228.73435-1-ajit.khaparde@broadcom.com
    Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
    Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Andy Gospodarek <gospo@broadcom.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: Use preserve_config in place of pci_flags [+ + +]
Author: Vidya Sagar <vidyas@nvidia.com>
Date:   Sun Jul 28 12:08:44 2024 -0400

    PCI: Use preserve_config in place of pci_flags
    
    [ Upstream commit 7246a4520b4bf1494d7d030166a11b5226f6d508 ]
    
    Use preserve_config in place of checking for PCI_PROBE_ONLY flag to enable
    support for "linux,pci-probe-only" on a per host bridge basis.
    
    This also obviates the use of adding PCI_REASSIGN_ALL_BUS flag if
    !PCI_PROBE_ONLY, as pci_assign_unassigned_root_bus_resources() takes care
    of reassigning the resources that are not already claimed.
    
    Link: https://lore.kernel.org/r/20240508174138.3630283-5-vidyas@nvidia.com
    Signed-off-by: Vidya Sagar <vidyas@nvidia.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

PCI: vmd: Create domain symlink before pci_bus_add_devices() [+ + +]
Author: Jiwei Sun <sunjw10@lenovo.com>
Date:   Sun Jul 28 12:08:53 2024 -0400

    PCI: vmd: Create domain symlink before pci_bus_add_devices()
    
    [ Upstream commit f24c9bfcd423e2b2bb0d198456412f614ec2030a ]
    
    The vmd driver creates a "domain" symlink in sysfs for each VMD bridge.
    Previously this symlink was created after pci_bus_add_devices() added
    devices below the VMD bridge and emitted udev events to announce them to
    userspace.
    
    This led to a race between userspace consumers of the udev events and the
    kernel creation of the symlink.  One such consumer is mdadm, which
    assembles block devices into a RAID array, and for devices below a VMD
    bridge, mdadm depends on the "domain" symlink.
    
    If mdadm loses the race, it may be unable to assemble a RAID array, which
    may cause a boot failure or other issues, with complaints like this:
    
      (udev-worker)[2149]: nvme1n1: '/sbin/mdadm -I /dev/nvme1n1'(err) 'mdadm: Unable to get real path for '/sys/bus/pci/drivers/vmd/0000:c7:00.5/domain/device''
      (udev-worker)[2149]: nvme1n1: '/sbin/mdadm -I /dev/nvme1n1'(err) 'mdadm: /dev/nvme1n1 is not attached to Intel(R) RAID controller.'
      (udev-worker)[2149]: nvme1n1: '/sbin/mdadm -I /dev/nvme1n1'(err) 'mdadm: No OROM/EFI properties for /dev/nvme1n1'
      (udev-worker)[2149]: nvme1n1: '/sbin/mdadm -I /dev/nvme1n1'(err) 'mdadm: no RAID superblock on /dev/nvme1n1.'
      (udev-worker)[2149]: nvme1n1: Process '/sbin/mdadm -I /dev/nvme1n1' failed with exit code 1.
    
    This symptom prevents the OS from booting successfully.
    
    After a NVMe disk is probed/added by the nvme driver, udevd invokes mdadm
    to detect if there is a mdraid associated with this NVMe disk, and mdadm
    determines if a NVMe device is connected to a particular VMD domain by
    checking the "domain" symlink. For example:
    
      Thread A                   Thread B             Thread mdadm
      vmd_enable_domain
        pci_bus_add_devices
          __driver_probe_device
           ...
           work_on_cpu
             schedule_work_on
             : wakeup Thread B
                                 nvme_probe
                                 : wakeup scan_work
                                   to scan nvme disk
                                   and add nvme disk
                                   then wakeup udevd
                                                      : udevd executes
                                                        mdadm command
             flush_work                               main
             : wait for nvme_probe done                ...
          __driver_probe_device                        find_driver_devices
          : probe next nvme device                     : 1) Detect domain symlink
          ...                                            2) Find domain symlink
          ...                                               from vmd sysfs
          ...                                            3) Domain symlink not
          ...                                               created yet; failed
        sysfs_create_link
        : create domain symlink
    
    Create the VMD "domain" symlink before invoking pci_bus_add_devices() to
    avoid this race.
    
    Suggested-by: Adrian Huang <ahuang12@lenovo.com>
    Link: https://lore.kernel.org/linux-pci/20240605124844.24293-1-sjiwei@163.com
    Signed-off-by: Jiwei Sun <sunjw10@lenovo.com>
    Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
    [bhelgaas: commit log]
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Nirmal Patel <nirmal.patel@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
phy: core: Fix an OF node refcount leakage in _of_phy_get() [+ + +]
Author: Zijun Hu <quic_zijuhu@quicinc.com>
Date:   Fri Dec 13 20:36:44 2024 +0800

    phy: core: Fix an OF node refcount leakage in _of_phy_get()
    
    commit 5ebdc6be16c2000e37fcb8b4072d442d268ad492 upstream.
    
    _of_phy_get() will directly return when suffers of_device_is_compatible()
    error, but it forgets to decrease refcount of OF node @args.np before error
    return, the refcount was increased by previous of_parse_phandle_with_args()
    so causes the OF node's refcount leakage.
    
    Fix by decreasing the refcount via of_node_put() before the error return.
    
    Fixes: b7563e2796f8 ("phy: work around 'phys' references to usb-nop-xceiv devices")
    Cc: stable@vger.kernel.org
    Reviewed-by: Johan Hovold <johan+linaro@kernel.org>
    Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
    Link: https://lore.kernel.org/r/20241213-phy_core_fix-v6-4-40ae28f5015a@quicinc.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

phy: core: Fix an OF node refcount leakage in of_phy_provider_lookup() [+ + +]
Author: Zijun Hu <quic_zijuhu@quicinc.com>
Date:   Fri Dec 13 20:36:45 2024 +0800

    phy: core: Fix an OF node refcount leakage in of_phy_provider_lookup()
    
    commit a2d633cb1421e679b56f1a9fe1f42f089706f1ed upstream.
    
    For macro for_each_child_of_node(parent, child), refcount of @child has
    been increased before entering its loop body, so normally needs to call
    of_node_put(@child) before returning from the loop body to avoid refcount
    leakage.
    
    of_phy_provider_lookup() has such usage but does not call of_node_put()
    before returning, so cause leakage of the OF node refcount.
    
    Fix by simply calling of_node_put() before returning from the loop body.
    
    The APIs affected by this issue are shown below since they indirectly
    invoke problematic of_phy_provider_lookup().
    phy_get()
    of_phy_get()
    devm_phy_get()
    devm_of_phy_get()
    devm_of_phy_get_by_index()
    
    Fixes: 2a4c37016ca9 ("phy: core: Fix of_phy_provider_lookup to return PHY provider for sub node")
    Cc: stable@vger.kernel.org
    Reviewed-by: Johan Hovold <johan+linaro@kernel.org>
    Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
    Link: https://lore.kernel.org/r/20241213-phy_core_fix-v6-5-40ae28f5015a@quicinc.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

phy: core: Fix that API devm_of_phy_provider_unregister() fails to unregister the phy provider [+ + +]
Author: Zijun Hu <quic_zijuhu@quicinc.com>
Date:   Fri Dec 13 20:36:42 2024 +0800

    phy: core: Fix that API devm_of_phy_provider_unregister() fails to unregister the phy provider
    
    commit c0b82ab95b4f1fbc3e3aeab9d829d012669524b6 upstream.
    
    For devm_of_phy_provider_unregister(), its comment says it needs to invoke
    of_phy_provider_unregister() to unregister the phy provider, but it will
    not actually invoke the function since devres_destroy() does not call
    devm_phy_provider_release(), and the missing of_phy_provider_unregister()
    call will cause:
    
    - The phy provider fails to be unregistered.
    - Leak both memory and the OF node refcount.
    
    Fortunately, the faulty API has not been used by current kernel tree.
    Fix by using devres_release() instead of devres_destroy() within the API.
    
    Fixes: ff764963479a ("drivers: phy: add generic PHY framework")
    Reviewed-by: Johan Hovold <johan+linaro@kernel.org>
    Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
    Link: https://lore.kernel.org/stable/20241213-phy_core_fix-v6-2-40ae28f5015a%40quicinc.com
    Link: https://lore.kernel.org/r/20241213-phy_core_fix-v6-2-40ae28f5015a@quicinc.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

phy: core: Fix that API devm_phy_destroy() fails to destroy the phy [+ + +]
Author: Zijun Hu <quic_zijuhu@quicinc.com>
Date:   Fri Dec 13 20:36:43 2024 +0800

    phy: core: Fix that API devm_phy_destroy() fails to destroy the phy
    
    commit 4dc48c88fcf82b89fdebd83a906aaa64f40fb8a9 upstream.
    
    For devm_phy_destroy(), its comment says it needs to invoke phy_destroy()
    to destroy the phy, but it will not actually invoke the function since
    devres_destroy() does not call devm_phy_consume(), and the missing
    phy_destroy() call will cause that the phy fails to be destroyed.
    
    Fortunately, the faulty API has not been used by current kernel tree.
    Fix by using devres_release() instead of devres_destroy() within the API.
    
    Fixes: ff764963479a ("drivers: phy: add generic PHY framework")
    Reviewed-by: Johan Hovold <johan+linaro@kernel.org>
    Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
    Link: https://lore.kernel.org/r/20241213-phy_core_fix-v6-3-40ae28f5015a@quicinc.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

phy: core: Fix that API devm_phy_put() fails to release the phy [+ + +]
Author: Zijun Hu <quic_zijuhu@quicinc.com>
Date:   Fri Dec 13 20:36:41 2024 +0800

    phy: core: Fix that API devm_phy_put() fails to release the phy
    
    commit fe4bfa9b6d7bd752bfe4700c937f235aa8ce997b upstream.
    
    For devm_phy_put(), its comment says it needs to invoke phy_put() to
    release the phy, but it will not actually invoke the function since
    devres_destroy() does not call devm_phy_release(), and the missing
    phy_put() call will cause:
    
    - The phy fails to be released.
    - devm_phy_put() can not fully undo what API devm_phy_get() does.
    - Leak refcount of both the module and device for below typical usage:
    
      devm_phy_get(); // or its variant
      ...
      err = do_something();
      if (err)
          goto err_out;
      ...
      err_out:
      devm_phy_put(); // leak refcount here
    
      The file(s) affected by this issue are shown below since they have such
      typical usage.
      drivers/pci/controller/cadence/pcie-cadence.c
      drivers/net/ethernet/ti/am65-cpsw-nuss.c
    
    Fix by using devres_release() instead of devres_destroy() within the API.
    
    Fixes: ff764963479a ("drivers: phy: add generic PHY framework")
    Cc: stable@vger.kernel.org
    Cc: Lorenzo Pieralisi <lpieralisi@kernel.org>
    Cc: Krzysztof Wilczyński <kw@linux.com>
    Cc: Bjorn Helgaas <bhelgaas@google.com>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: Eric Dumazet <edumazet@google.com>
    Cc: Jakub Kicinski <kuba@kernel.org>
    Cc: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Johan Hovold <johan+linaro@kernel.org>
    Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
    Link: https://lore.kernel.org/r/20241213-phy_core_fix-v6-1-40ae28f5015a@quicinc.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
pinctrl: mcp23s08: Fix sleeping in atomic context due to regmap locking [+ + +]
Author: Evgenii Shatokhin <e.shatokhin@yadro.com>
Date:   Mon Dec 9 10:46:59 2024 +0300

    pinctrl: mcp23s08: Fix sleeping in atomic context due to regmap locking
    
    commit a37eecb705f33726f1fb7cd2a67e514a15dfe693 upstream.
    
    If a device uses MCP23xxx IO expander to receive IRQs, the following
    bug can happen:
    
      BUG: sleeping function called from invalid context
        at kernel/locking/mutex.c:283
      in_atomic(): 1, irqs_disabled(): 1, non_block: 0, ...
      preempt_count: 1, expected: 0
      ...
      Call Trace:
      ...
      __might_resched+0x104/0x10e
      __might_sleep+0x3e/0x62
      mutex_lock+0x20/0x4c
      regmap_lock_mutex+0x10/0x18
      regmap_update_bits_base+0x2c/0x66
      mcp23s08_irq_set_type+0x1ae/0x1d6
      __irq_set_trigger+0x56/0x172
      __setup_irq+0x1e6/0x646
      request_threaded_irq+0xb6/0x160
      ...
    
    We observed the problem while experimenting with a touchscreen driver which
    used MCP23017 IO expander (I2C).
    
    The regmap in the pinctrl-mcp23s08 driver uses a mutex for protection from
    concurrent accesses, which is the default for regmaps without .fast_io,
    .disable_locking, etc.
    
    mcp23s08_irq_set_type() calls regmap_update_bits_base(), and the latter
    locks the mutex.
    
    However, __setup_irq() locks desc->lock spinlock before calling these
    functions. As a result, the system tries to lock the mutex whole holding
    the spinlock.
    
    It seems, the internal regmap locks are not needed in this driver at all.
    mcp->lock seems to protect the regmap from concurrent accesses already,
    except, probably, in mcp_pinconf_get/set.
    
    mcp23s08_irq_set_type() and mcp23s08_irq_mask/unmask() are called under
    chip_bus_lock(), which calls mcp23s08_irq_bus_lock(). The latter takes
    mcp->lock and enables regmap caching, so that the potentially slow I2C
    accesses are deferred until chip_bus_unlock().
    
    The accesses to the regmap from mcp23s08_probe_one() do not need additional
    locking.
    
    In all remaining places where the regmap is accessed, except
    mcp_pinconf_get/set(), the driver already takes mcp->lock.
    
    This patch adds locking in mcp_pinconf_get/set() and disables internal
    locking in the regmap config. Among other things, it fixes the sleeping
    in atomic context described above.
    
    Fixes: 8f38910ba4f6 ("pinctrl: mcp23s08: switch to regmap caching")
    Cc: stable@vger.kernel.org
    Signed-off-by: Evgenii Shatokhin <e.shatokhin@yadro.com>
    Link: https://lore.kernel.org/20241209074659.1442898-1-e.shatokhin@yadro.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
platform/x86: asus-nb-wmi: Ignore unknown event 0xCF [+ + +]
Author: Armin Wolf <W_Armin@gmx.de>
Date:   Sat Nov 23 23:47:00 2024 +0100

    platform/x86: asus-nb-wmi: Ignore unknown event 0xCF
    
    [ Upstream commit e9fba20c29e27dc99e55e1c550573a114561bf8c ]
    
    On the Asus X541UAK an unknown event 0xCF is emited when the charger
    is plugged in. This is caused by the following AML code:
    
        If (ACPS ())
        {
            ACPF = One
            Local0 = 0x58
            If (ATKP)
            {
                ^^^^ATKD.IANE (0xCF)
            }
        }
        Else
        {
            ACPF = Zero
            Local0 = 0x57
        }
    
        Notify (AC0, 0x80) // Status Change
        If (ATKP)
        {
            ^^^^ATKD.IANE (Local0)
        }
    
        Sleep (0x64)
        PNOT ()
        Sleep (0x0A)
        NBAT (0x80)
    
    Ignore the 0xCF event to silence the unknown event warning.
    
    Reported-by: Pau Espin Pedrol <pespin@espeweb.net>
    Closes: https://lore.kernel.org/platform-driver-x86/54d4860b-ec9c-4992-acf6-db3f90388293@espeweb.net
    Signed-off-by: Armin Wolf <W_Armin@gmx.de>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20241123224700.18530-1-W_Armin@gmx.de
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
power: supply: gpio-charger: Fix set charge current limits [+ + +]
Author: Dimitri Fedrau <dimitri.fedrau@liebherr.com>
Date:   Mon Dec 9 11:46:15 2024 +0100

    power: supply: gpio-charger: Fix set charge current limits
    
    commit afc6e39e824ad0e44b2af50a97885caec8d213d1 upstream.
    
    Fix set charge current limits for devices which allow to set the lowest
    charge current limit to be greater zero. If requested charge current limit
    is below lowest limit, the index equals current_limit_map_size which leads
    to accessing memory beyond allocated memory.
    
    Fixes: be2919d8355e ("power: supply: gpio-charger: add charge-current-limit feature")
    Cc: stable@vger.kernel.org
    Signed-off-by: Dimitri Fedrau <dimitri.fedrau@liebherr.com>
    Link: https://lore.kernel.org/r/20241209-fix-charge-current-limit-v1-1-760d9b8f2af3@liebherr.com
    Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
RDMA/bnxt_re: Add check for path mtu in modify_qp [+ + +]
Author: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
Date:   Wed Dec 11 14:09:28 2024 +0530

    RDMA/bnxt_re: Add check for path mtu in modify_qp
    
    [ Upstream commit 798653a0ee30d3cd495099282751c0f248614ae7 ]
    
    When RDMA app configures path MTU, add a check in modify_qp verb
    to make sure that it doesn't go beyond interface MTU. If this
    check fails, driver will fail the modify_qp verb.
    
    Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver")
    Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Signed-off-by: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Link: https://patch.msgid.link/20241211083931.968831-3-kalesh-anakkur.purayil@broadcom.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Fix max_qp_wrs reported [+ + +]
Author: Selvin Xavier <selvin.xavier@broadcom.com>
Date:   Tue Dec 17 15:56:45 2024 +0530

    RDMA/bnxt_re: Fix max_qp_wrs reported
    
    [ Upstream commit 40be32303ec829ea12f9883e499bfd3fe9e52baf ]
    
    While creating qps, driver adds one extra entry to the sq size
    passed by the ULPs in order to avoid queue full condition.
    When ULPs creates QPs with max_qp_wr reported, driver creates
    QP with 1 more than the max_wqes supported by HW. Create QP fails
    in this case. To avoid this error, reduce 1 entry in max_qp_wqes
    and report it to the stack.
    
    Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver")
    Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Link: https://patch.msgid.link/20241217102649.1377704-2-kalesh-anakkur.purayil@broadcom.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Fix reporting hw_ver in query_device [+ + +]
Author: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Date:   Wed Dec 11 14:09:31 2024 +0530

    RDMA/bnxt_re: Fix reporting hw_ver in query_device
    
    [ Upstream commit 7179fe0074a3c962e43a9e51169304c4911989ed ]
    
    Driver currently populates subsystem_device id in the
    "hw_ver" field of ib_attr structure in query_device.
    
    Updated to populate PCI revision ID.
    
    Fixes: 1ac5a4047975 ("RDMA/bnxt_re: Add bnxt_re RoCE driver")
    Reviewed-by: Preethi G <preethi.gurusiddalingeswaraswamy@broadcom.com>
    Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Link: https://patch.msgid.link/20241211083931.968831-6-kalesh-anakkur.purayil@broadcom.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/bnxt_re: Fix the locking while accessing the QP table [+ + +]
Author: Selvin Xavier <selvin.xavier@broadcom.com>
Date:   Tue Dec 17 15:56:49 2024 +0530

    RDMA/bnxt_re: Fix the locking while accessing the QP table
    
    [ Upstream commit 9272cba0ded71b5a2084da3004ec7806b8cb7fd2 ]
    
    QP table handling is synchronized with destroy QP and Async
    event from the HW. The same needs to be synchronized
    during create_qp also. Use the same lock in create_qp also.
    
    Fixes: 76d3ddff7153 ("RDMA/bnxt_re: synchronize the qp-handle table array")
    Fixes: f218d67ef004 ("RDMA/bnxt_re: Allow posting when QPs are in error")
    Fixes: 84cf229f4001 ("RDMA/bnxt_re: Fix the qp table indexing")
    Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
    Link: https://patch.msgid.link/20241217102649.1377704-6-kalesh-anakkur.purayil@broadcom.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/hns: Fix mapping error of zero-hop WQE buffer [+ + +]
Author: wenglianfa <wenglianfa@huawei.com>
Date:   Fri Dec 20 13:52:46 2024 +0800

    RDMA/hns: Fix mapping error of zero-hop WQE buffer
    
    [ Upstream commit 8673a6c2d9e483dfeeef83a1f06f59e05636f4d1 ]
    
    Due to HW limitation, the three region of WQE buffer must be mapped
    and set to HW in a fixed order: SQ buffer, SGE buffer, and RQ buffer.
    
    Currently when one region is zero-hop while the other two are not,
    the zero-hop region will not be mapped. This violate the limitation
    above and leads to address error.
    
    Fixes: 38389eaa4db1 ("RDMA/hns: Add mtr support for mixed multihop addressing")
    Signed-off-by: wenglianfa <wenglianfa@huawei.com>
    Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
    Link: https://patch.msgid.link/20241220055249.146943-2-huangjunxian6@hisilicon.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Fix missing flush CQE for DWQE [+ + +]
Author: Chengchang Tang <tangchengchang@huawei.com>
Date:   Fri Dec 20 13:52:49 2024 +0800

    RDMA/hns: Fix missing flush CQE for DWQE
    
    [ Upstream commit e3debdd48423d3d75b9d366399228d7225d902cd ]
    
    Flush CQE handler has not been called if QP state gets into errored
    mode in DWQE path. So, the new added outstanding WQEs will never be
    flushed.
    
    It leads to a hung task timeout when using NFS over RDMA:
        __switch_to+0x7c/0xd0
        __schedule+0x350/0x750
        schedule+0x50/0xf0
        schedule_timeout+0x2c8/0x340
        wait_for_common+0xf4/0x2b0
        wait_for_completion+0x20/0x40
        __ib_drain_sq+0x140/0x1d0 [ib_core]
        ib_drain_sq+0x98/0xb0 [ib_core]
        rpcrdma_xprt_disconnect+0x68/0x270 [rpcrdma]
        xprt_rdma_close+0x20/0x60 [rpcrdma]
        xprt_autoclose+0x64/0x1cc [sunrpc]
        process_one_work+0x1d8/0x4e0
        worker_thread+0x154/0x420
        kthread+0x108/0x150
        ret_from_fork+0x10/0x18
    
    Fixes: 01584a5edcc4 ("RDMA/hns: Add support of direct wqe")
    Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
    Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
    Link: https://patch.msgid.link/20241220055249.146943-5-huangjunxian6@hisilicon.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Fix warning storm caused by invalid input in IO path [+ + +]
Author: Chengchang Tang <tangchengchang@huawei.com>
Date:   Fri Dec 20 13:52:48 2024 +0800

    RDMA/hns: Fix warning storm caused by invalid input in IO path
    
    [ Upstream commit fa5c4ba8cdbfd2c2d6422e001311c8213283ebbf ]
    
    WARN_ON() is called in the IO path. And it could lead to a warning
    storm. Use WARN_ON_ONCE() instead of WARN_ON().
    
    Fixes: 12542f1de179 ("RDMA/hns: Refactor process about opcode in post_send()")
    Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
    Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
    Link: https://patch.msgid.link/20241220055249.146943-4-huangjunxian6@hisilicon.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Remove redundant 'attr_mask' in modify_qp_init_to_init() [+ + +]
Author: Yixing Liu <liuyixing1@huawei.com>
Date:   Thu Sep 22 20:33:07 2022 +0800

    RDMA/hns: Remove redundant 'attr_mask' in modify_qp_init_to_init()
    
    [ Upstream commit bb4874af19686019d0dafd58726ed7b4058663ca ]
    
    The attr_mask variable is not used in the function,
    so remove it.
    
    Link: https://lore.kernel.org/r/20220922123315.3732205-5-xuhaoyue1@hisilicon.com
    Signed-off-by: Yixing Liu <liuyixing1@huawei.com>
    Signed-off-by: Haoyue Xu <xuhaoyue1@hisilicon.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Stable-dep-of: 8673a6c2d9e4 ("RDMA/hns: Fix mapping error of zero-hop WQE buffer")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

RDMA/hns: Remove redundant 'bt_level' for hem_list_alloc_item() [+ + +]
Author: Yunsheng Lin <linyunsheng@huawei.com>
Date:   Thu Sep 22 20:33:08 2022 +0800

    RDMA/hns: Remove redundant 'bt_level' for hem_list_alloc_item()
    
    [ Upstream commit be1eeb667eb748391b1c8158678fe4d892187793 ]
    
    The 'bt_level' parameter is not used in hem_list_alloc_item(),
    so remove it.
    
    Link: https://lore.kernel.org/r/20220922123315.3732205-6-xuhaoyue1@hisilicon.com
    Signed-off-by: Yunsheng Lin <linyunsheng@huawei.com>
    Signed-off-by: Haoyue Xu <xuhaoyue1@hisilicon.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Stable-dep-of: 8673a6c2d9e4 ("RDMA/hns: Fix mapping error of zero-hop WQE buffer")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/mlx5: Enforce same type port association for multiport RoCE [+ + +]
Author: Patrisious Haddad <phaddad@nvidia.com>
Date:   Tue Dec 3 15:45:37 2024 +0200

    RDMA/mlx5: Enforce same type port association for multiport RoCE
    
    [ Upstream commit e05feab22fd7dabcd6d272c4e2401ec1acdfdb9b ]
    
    Different core device types such as PFs and VFs shouldn't be affiliated
    together since they have different capabilities, fix that by enforcing
    type check before doing the affiliation.
    
    Fixes: 32f69e4be269 ("{net, IB}/mlx5: Manage port association for multiport RoCE")
    Reviewed-by: Mark Bloch <mbloch@nvidia.com>
    Signed-off-by: Patrisious Haddad <phaddad@nvidia.com>
    Link: https://patch.msgid.link/88699500f690dff1c1852c1ddb71f8a1cc8b956e.1733233480.git.leonro@nvidia.com
    Reviewed-by: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/rtrs: Ensure 'ib_sge list' is accessible [+ + +]
Author: Li Zhijian <lizhijian@fujitsu.com>
Date:   Tue Dec 31 09:34:16 2024 +0800

    RDMA/rtrs: Ensure 'ib_sge list' is accessible
    
    [ Upstream commit fb514b31395946022f13a08e06a435f53cf9e8b3 ]
    
    Move the declaration of the 'ib_sge list' variable outside the
    'always_invalidate' block to ensure it remains accessible for use
    throughout the function.
    
    Previously, 'ib_sge list' was declared within the 'always_invalidate'
    block, limiting its accessibility, then caused a
    'BUG: kernel NULL pointer dereference'[1].
     ? __die_body.cold+0x19/0x27
     ? page_fault_oops+0x15a/0x2d0
     ? search_module_extables+0x19/0x60
     ? search_bpf_extables+0x5f/0x80
     ? exc_page_fault+0x7e/0x180
     ? asm_exc_page_fault+0x26/0x30
     ? memcpy_orig+0xd5/0x140
     rxe_mr_copy+0x1c3/0x200 [rdma_rxe]
     ? rxe_pool_get_index+0x4b/0x80 [rdma_rxe]
     copy_data+0xa5/0x230 [rdma_rxe]
     rxe_requester+0xd9b/0xf70 [rdma_rxe]
     ? finish_task_switch.isra.0+0x99/0x2e0
     rxe_sender+0x13/0x40 [rdma_rxe]
     do_task+0x68/0x1e0 [rdma_rxe]
     process_one_work+0x177/0x330
     worker_thread+0x252/0x390
     ? __pfx_worker_thread+0x10/0x10
    
    This change ensures the variable is available for subsequent operations
    that require it.
    
    [1] https://lore.kernel.org/linux-rdma/6a1f3e8f-deb0-49f9-bc69-a9b03ecfcda7@fujitsu.com/
    
    Fixes: 9cb837480424 ("RDMA/rtrs: server: main functionality")
    Signed-off-by: Li Zhijian <lizhijian@fujitsu.com>
    Link: https://patch.msgid.link/20241231013416.1290920-1-lizhijian@fujitsu.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/uverbs: Prevent integer overflow issue [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Sat Nov 30 13:06:41 2024 +0300

    RDMA/uverbs: Prevent integer overflow issue
    
    commit d0257e089d1bbd35c69b6c97ff73e3690ab149a9 upstream.
    
    In the expression "cmd.wqe_size * cmd.wr_count", both variables are u32
    values that come from the user so the multiplication can lead to integer
    wrapping.  Then we pass the result to uverbs_request_next_ptr() which also
    could potentially wrap.  The "cmd.sge_count * sizeof(struct ib_uverbs_sge)"
    multiplication can also overflow on 32bit systems although it's fine on
    64bit systems.
    
    This patch does two things.  First, I've re-arranged the condition in
    uverbs_request_next_ptr() so that the use controlled variable "len" is on
    one side of the comparison by itself without any math.  Then I've modified
    all the callers to use size_mul() for the multiplications.
    
    Fixes: 67cdb40ca444 ("[IB] uverbs: Implement more commands")
    Cc: stable@vger.kernel.org
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Link: https://patch.msgid.link/b8765ab3-c2da-4611-aae0-ddd6ba173d23@stanley.mountain
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
regmap: Use correct format specifier for logging range errors [+ + +]
Author: Mark Brown <broonie@kernel.org>
Date:   Wed Nov 27 13:35:06 2024 +0000

    regmap: Use correct format specifier for logging range errors
    
    [ Upstream commit 3f1aa0c533d9dd8a835caf9a6824449c463ee7e2 ]
    
    The register addresses are unsigned ints so we should use %u not %d to
    log them.
    
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Link: https://patch.msgid.link/20241127-regmap-test-high-addr-v1-1-74a48a9e0dc5@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
scsi: megaraid_sas: Fix for a potential deadlock [+ + +]
Author: Tomas Henzl <thenzl@redhat.com>
Date:   Mon Sep 23 19:48:33 2024 +0200

    scsi: megaraid_sas: Fix for a potential deadlock
    
    [ Upstream commit 50740f4dc78b41dec7c8e39772619d5ba841ddd7 ]
    
    This fixes a 'possible circular locking dependency detected' warning
          CPU0                    CPU1
          ----                    ----
     lock(&instance->reset_mutex);
                                  lock(&shost->scan_mutex);
                                  lock(&instance->reset_mutex);
     lock(&shost->scan_mutex);
    
    Fix this by temporarily releasing the reset_mutex.
    
    Signed-off-by: Tomas Henzl <thenzl@redhat.com>
    Link: https://lore.kernel.org/r/20240923174833.45345-1-thenzl@redhat.com
    Acked-by: Chandrakanth Patil <chandrakanth.patil@broadcom.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: mpt3sas: Diag-Reset when Doorbell-In-Use bit is set during driver load time [+ + +]
Author: Ranjan Kumar <ranjan.kumar@broadcom.com>
Date:   Sun Nov 10 23:03:40 2024 +0530

    scsi: mpt3sas: Diag-Reset when Doorbell-In-Use bit is set during driver load time
    
    [ Upstream commit 3f5eb062e8aa335643181c480e6c590c6cedfd22 ]
    
    Issue a Diag-Reset when the "Doorbell-In-Use" bit is set during the
    driver load/initialization.
    
    Signed-off-by: Ranjan Kumar <ranjan.kumar@broadcom.com>
    Link: https://lore.kernel.org/r/20241110173341.11595-2-ranjan.kumar@broadcom.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: qla1280: Fix hw revision numbering for ISP1020/1040 [+ + +]
Author: Magnus Lindholm <linmag7@gmail.com>
Date:   Wed Nov 13 23:51:49 2024 +0100

    scsi: qla1280: Fix hw revision numbering for ISP1020/1040
    
    [ Upstream commit c064de86d2a3909222d5996c5047f64c7a8f791b ]
    
    Fix the hardware revision numbering for Qlogic ISP1020/1040 boards.  HWMASK
    suggests that the revision number only needs four bits, this is consistent
    with how NetBSD does things in their ISP driver. Verified on a IPS1040B
    which is seen as rev 5 not as BIT_4.
    
    Signed-off-by: Magnus Lindholm <linmag7@gmail.com>
    Link: https://lore.kernel.org/r/20241113225636.2276-1-linmag7@gmail.com
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: storvsc: Do not flag MAINTENANCE_IN return of SRB_STATUS_DATA_OVERRUN as an error [+ + +]
Author: Cathy Avery <cavery@redhat.com>
Date:   Wed Nov 27 13:13:24 2024 -0500

    scsi: storvsc: Do not flag MAINTENANCE_IN return of SRB_STATUS_DATA_OVERRUN as an error
    
    [ Upstream commit b1aee7f034615b6824d2c70ddb37ef9fc23493b7 ]
    
    This partially reverts commit 812fe6420a6e ("scsi: storvsc: Handle
    additional SRB status values").
    
    HyperV does not support MAINTENANCE_IN resulting in FC passthrough
    returning the SRB_STATUS_DATA_OVERRUN value. Now that
    SRB_STATUS_DATA_OVERRUN is treated as an error, multipath ALUA paths go
    into a faulty state as multipath ALUA submits RTPG commands via
    MAINTENANCE_IN.
    
    [    3.215560] hv_storvsc 1d69d403-9692-4460-89f9-a8cbcc0f94f3:
    tag#230 cmd 0xa3 status: scsi 0x0 srb 0x12 hv 0xc0000001
    [    3.215572] scsi 1:0:0:32: alua: rtpg failed, result 458752
    
    Make MAINTENANCE_IN return success to avoid the error path as is
    currently done with INQUIRY and MODE_SENSE.
    
    Suggested-by: Michael Kelley <mhklinux@outlook.com>
    Signed-off-by: Cathy Avery <cavery@redhat.com>
    Link: https://lore.kernel.org/r/20241127181324.3318443-1-cavery@redhat.com
    Reviewed-by: Michael Kelley <mhklinux@outlook.com>
    Reviewed-by: Ewan D. Milne <emilne@redhat.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selinux: ignore unknown extended permissions [+ + +]
Author: Thiébaud Weksteen <tweek@google.com>
Date:   Thu Dec 5 12:09:19 2024 +1100

    selinux: ignore unknown extended permissions
    
    commit 900f83cf376bdaf798b6f5dcb2eae0c822e908b6 upstream.
    
    When evaluating extended permissions, ignore unknown permissions instead
    of calling BUG(). This commit ensures that future permissions can be
    added without interfering with older kernels.
    
    Cc: stable@vger.kernel.org
    Fixes: fa1aa143ac4a ("selinux: extended permissions for ioctls")
    Signed-off-by: Thiébaud Weksteen <tweek@google.com>
    Signed-off-by: Paul Moore <paul@paul-moore.com>
    Acked-by: Paul Moore <paul@paul-moore.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sh: clk: Fix clk_enable() to return 0 on NULL clk [+ + +]
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Thu Feb 2 17:20:55 2023 +0100

    sh: clk: Fix clk_enable() to return 0 on NULL clk
    
    commit ff30bd6a6618e979b16977617371c0f28a95036e upstream.
    
    On SH, devm_clk_get_optional_enabled() fails with -EINVAL if the clock
    is not found.  This happens because __devm_clk_get() assumes it can pass
    a NULL clock pointer (as returned by clk_get_optional()) to the init()
    function (clk_prepare_enable() in this case), while the SH
    implementation of clk_enable() considers that an error.
    
    Fix this by making the SH clk_enable() implementation return zero
    instead, like the Common Clock Framework does.
    
    Reported-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Tested-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Acked-by: Stephen Boyd <sboyd@kernel.org>
    Link: https://lore.kernel.org/r/b53e6b557b4240579933b3359dda335ff94ed5af.1675354849.git.geert+renesas@glider.be
    Signed-off-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sky2: Add device ID 11ab:4373 for Marvell 88E8075 [+ + +]
Author: Pascal Hambourg <pascal@plouf.fr.eu.org>
Date:   Mon Dec 23 17:44:01 2024 +0100

    sky2: Add device ID 11ab:4373 for Marvell 88E8075
    
    commit 03c8d0af2e409e15c16130b185e12b5efba0a6b9 upstream.
    
    A Marvell 88E8075 ethernet controller has this device ID instead of
    11ab:4370 and works fine with the sky2 driver.
    
    Signed-off-by: Pascal Hambourg <pascal@plouf.fr.eu.org>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/10165a62-99fb-4be6-8c64-84afd6234085@plouf.fr.eu.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sound: usb: enable DSD output for ddHiFi TC44C [+ + +]
Author: Adrian Ratiu <adrian.ratiu@collabora.com>
Date:   Mon Dec 9 11:05:28 2024 +0200

    sound: usb: enable DSD output for ddHiFi TC44C
    
    [ Upstream commit c84bd6c810d1880194fea2229c7086e4b73fddc1 ]
    
    This is a UAC 2 DAC capable of raw DSD on intf 2 alt 4:
    
    Bus 007 Device 004: ID 262a:9302 SAVITECH Corp. TC44C
    Device Descriptor:
      bLength                18
      bDescriptorType         1
      bcdUSB               2.00
      bDeviceClass          239 Miscellaneous Device
      bDeviceSubClass         2 [unknown]
      bDeviceProtocol         1 Interface Association
      bMaxPacketSize0        64
      idVendor           0x262a SAVITECH Corp.
      idProduct          0x9302 TC44C
      bcdDevice            0.01
      iManufacturer           1 DDHIFI
      iProduct                2 TC44C
      iSerial                 6 5000000001
    .......
        Interface Descriptor:
          bLength                 9
          bDescriptorType         4
          bInterfaceNumber        2
          bAlternateSetting       4
          bNumEndpoints           2
          bInterfaceClass         1 Audio
          bInterfaceSubClass      2 Streaming
          bInterfaceProtocol      32
          iInterface              0
            AudioStreaming Interface Descriptor:
              bLength                16
              bDescriptorType        36
              bDescriptorSubtype     1 (AS_GENERAL)
              bTerminalLink          3
              bmControls             0x00
              bFormatType            1
              bmFormats              0x80000000
              bNrChannels            2
              bmChannelConfig        0x00000000
              iChannelNames          0
    .......
    
    Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
    Link: https://patch.msgid.link/20241209090529.16134-1-adrian.ratiu@collabora.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

sound: usb: format: don't warn that raw DSD is unsupported [+ + +]
Author: Adrian Ratiu <adrian.ratiu@collabora.com>
Date:   Mon Dec 9 11:05:29 2024 +0200

    sound: usb: format: don't warn that raw DSD is unsupported
    
    [ Upstream commit b50a3e98442b8d72f061617c7f7a71f7dba19484 ]
    
    UAC 2 & 3 DAC's set bit 31 of the format to signal support for a
    RAW_DATA type, typically used for DSD playback.
    
    This is correctly tested by (format & UAC*_FORMAT_TYPE_I_RAW_DATA),
    fp->dsd_raw = true; and call snd_usb_interface_dsd_format_quirks(),
    however a confusing and unnecessary message gets printed because
    the bit is not properly tested in the last "unsupported" if test:
    if (format & ~0x3F) { ... }
    
    For example the output:
    
    usb 7-1: new high-speed USB device number 5 using xhci_hcd
    usb 7-1: New USB device found, idVendor=262a, idProduct=9302, bcdDevice=0.01
    usb 7-1: New USB device strings: Mfr=1, Product=2, SerialNumber=6
    usb 7-1: Product: TC44C
    usb 7-1: Manufacturer: TC44C
    usb 7-1: SerialNumber: 5000000001
    hid-generic 0003:262A:9302.001E: No inputs registered, leaving
    hid-generic 0003:262A:9302.001E: hidraw6: USB HID v1.00 Device [DDHIFI TC44C] on usb-0000:08:00.3-1/input0
    usb 7-1: 2:4 : unsupported format bits 0x100000000
    
    This last "unsupported format" is actually wrong: we know the
    format is a RAW_DATA which we assume is DSD, so there is no need
    to print the confusing message.
    
    This we unset bit 31 of the format after recognizing it, to avoid
    the message.
    
    Suggested-by: Takashi Iwai <tiwai@suse.com>
    Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
    Link: https://patch.msgid.link/20241209090529.16134-2-adrian.ratiu@collabora.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tcp_bpf: Add sk_rmem_alloc related logic for tcp_bpf ingress redirection [+ + +]
Author: Zijian Zhang <zijianzhang@bytedance.com>
Date:   Tue Dec 10 01:20:39 2024 +0000

    tcp_bpf: Add sk_rmem_alloc related logic for tcp_bpf ingress redirection
    
    [ Upstream commit d888b7af7c149c115dd6ac772cc11c375da3e17c ]
    
    When we do sk_psock_verdict_apply->sk_psock_skb_ingress, an sk_msg will
    be created out of the skb, and the rmem accounting of the sk_msg will be
    handled by the skb.
    
    For skmsgs in __SK_REDIRECT case of tcp_bpf_send_verdict, when redirecting
    to the ingress of a socket, although we sk_rmem_schedule and add sk_msg to
    the ingress_msg of sk_redir, we do not update sk_rmem_alloc. As a result,
    except for the global memory limit, the rmem of sk_redir is nearly
    unlimited. Thus, add sk_rmem_alloc related logic to limit the recv buffer.
    
    Since the function sk_msg_recvmsg and __sk_psock_purge_ingress_msg are
    used in these two paths. We use "msg->skb" to test whether the sk_msg is
    skb backed up. If it's not, we shall do the memory accounting explicitly.
    
    Fixes: 604326b41a6f ("bpf, sockmap: convert to generic sk_msg interface")
    Signed-off-by: Zijian Zhang <zijianzhang@bytedance.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: John Fastabend <john.fastabend@gmail.com>
    Link: https://lore.kernel.org/bpf/20241210012039.1669389-3-zijianzhang@bytedance.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp_bpf: Charge receive socket buffer in bpf_tcp_ingress() [+ + +]
Author: Cong Wang <cong.wang@bytedance.com>
Date:   Tue Dec 10 01:20:38 2024 +0000

    tcp_bpf: Charge receive socket buffer in bpf_tcp_ingress()
    
    [ Upstream commit 54f89b3178d5448dd4457afbb98fc1ab99090a65 ]
    
    When bpf_tcp_ingress() is called, the skmsg is being redirected to the
    ingress of the destination socket. Therefore, we should charge its
    receive socket buffer, instead of sending socket buffer.
    
    Because sk_rmem_schedule() tests pfmemalloc of skb, we need to
    introduce a wrapper and call it for skmsg.
    
    Fixes: 604326b41a6f ("bpf, sockmap: convert to generic sk_msg interface")
    Signed-off-by: Cong Wang <cong.wang@bytedance.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: John Fastabend <john.fastabend@gmail.com>
    Link: https://lore.kernel.org/bpf/20241210012039.1669389-2-zijianzhang@bytedance.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
thunderbolt: Add Intel Barlow Ridge PCI ID [+ + +]
Author: Mika Westerberg <mika.westerberg@linux.intel.com>
Date:   Sat Dec 17 08:35:04 2022 +0200

    thunderbolt: Add Intel Barlow Ridge PCI ID
    
    [ Upstream commit 6f14a210661ce03988ef4ed3c8402037c8e06539 ]
    
    Intel Barlow Ridge is the first USB4 v2 controller from Intel. The
    controller exposes standard USB4 PCI class ID in typical configurations,
    however there is a way to configure it so that it uses a special class
    ID to allow using s different driver than the Windows inbox one. For
    this reason add the Barlow Ridge PCI ID to the Linux driver too so that
    the driver can attach regardless of the class ID.
    
    Tested-by: Pengfei Xu <pengfei.xu@intel.com>
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Stable-dep-of: 8644b48714dc ("thunderbolt: Add support for Intel Panther Lake-M/P")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

thunderbolt: Add support for Intel Lunar Lake [+ + +]
Author: Mika Westerberg <mika.westerberg@linux.intel.com>
Date:   Fri May 20 13:47:11 2022 +0300

    thunderbolt: Add support for Intel Lunar Lake
    
    [ Upstream commit 2cd3da4e37453019e21a486d9de3144f46b4fdf7 ]
    
    Intel Lunar Lake has similar integrated Thunderbolt/USB4 controller as
    Intel Meteor Lake with some small differences in the host router (it has
    3 DP IN adapters for instance). Add the Intel Lunar Lake PCI IDs to the
    driver list of supported devices.
    
    Tested-by: Pengfei Xu <pengfei.xu@intel.com>
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Stable-dep-of: 8644b48714dc ("thunderbolt: Add support for Intel Panther Lake-M/P")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

thunderbolt: Add support for Intel Meteor Lake [+ + +]
Author: Mika Westerberg <mika.westerberg@linux.intel.com>
Date:   Tue Jun 29 13:32:29 2021 -0700

    thunderbolt: Add support for Intel Meteor Lake
    
    [ Upstream commit 32249fd8c8cccd7a1ed86c3b6d9b6ae9b4a83623 ]
    
    Intel Meteor Lake has the same integrated Thunderbolt/USB4 controller as
    Intel Alder Lake. Add the Intel Meteor Lake PCI IDs to the driver list
    of supported devices.
    
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Stable-dep-of: 8644b48714dc ("thunderbolt: Add support for Intel Panther Lake-M/P")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

thunderbolt: Add support for Intel Panther Lake-M/P [+ + +]
Author: Mika Westerberg <mika.westerberg@linux.intel.com>
Date:   Tue May 14 10:15:14 2024 +0300

    thunderbolt: Add support for Intel Panther Lake-M/P
    
    [ Upstream commit 8644b48714dca8bf2f42a4ff8311de8efc9bd8c3 ]
    
    Intel Panther Lake-M/P has the same integrated Thunderbolt/USB4
    controller as Lunar Lake. Add these PCI IDs to the driver list of
    supported devices.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

thunderbolt: Add support for Intel Raptor Lake [+ + +]
Author: George D Sworo <george.d.sworo@intel.com>
Date:   Wed Jun 1 15:41:02 2022 -0700

    thunderbolt: Add support for Intel Raptor Lake
    
    [ Upstream commit 7ec58378a985618909ffae18e4ac0de2ae625f33 ]
    
    Intel Raptor Lake has the same integrated Thunderbolt/USB4 controller as
    Intel Alder Lake. By default it is still using firmware based connection
    manager so we can use most of the Alder Lake flows.
    
    Signed-off-by: George D Sworo <george.d.sworo@intel.com>
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Stable-dep-of: 8644b48714dc ("thunderbolt: Add support for Intel Panther Lake-M/P")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tracing/kprobe: Make trace_kprobe's module callback called after jump_label update [+ + +]
Author: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Date:   Wed Dec 11 09:10:55 2024 +0900

    tracing/kprobe: Make trace_kprobe's module callback called after jump_label update
    
    [ Upstream commit d685d55dfc86b1a4bdcec77c3c1f8a83f181264e ]
    
    Make sure the trace_kprobe's module notifer callback function is called
    after jump_label's callback is called. Since the trace_kprobe's callback
    eventually checks jump_label address during registering new kprobe on
    the loading module, jump_label must be updated before this registration
    happens.
    
    Link: https://lore.kernel.org/all/173387585556.995044.3157941002975446119.stgit@devnote2/
    
    Fixes: 614243181050 ("tracing/kprobes: Support module init function probing")
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tracing: Add "%s" check in test_event_printk() [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Mon Dec 16 21:41:21 2024 -0500

    tracing: Add "%s" check in test_event_printk()
    
    commit 65a25d9f7ac02e0cf361356e834d1c71d36acca9 upstream.
    
    The test_event_printk() code makes sure that when a trace event is
    registered, any dereferenced pointers in from the event's TP_printk() are
    pointing to content in the ring buffer. But currently it does not handle
    "%s", as there's cases where the string pointer saved in the ring buffer
    points to a static string in the kernel that will never be freed. As that
    is a valid case, the pointer needs to be checked at runtime.
    
    Currently the runtime check is done via trace_check_vprintf(), but to not
    have to replicate everything in vsnprintf() it does some logic with the
    va_list that may not be reliable across architectures. In order to get rid
    of that logic, more work in the test_event_printk() needs to be done. Some
    of the strings can be validated at this time when it is obvious the string
    is valid because the string will be saved in the ring buffer content.
    
    Do all the validation of strings in the ring buffer at boot in
    test_event_printk(), and make sure that the field of the strings that
    point into the kernel are accessible. This will allow adding checks at
    runtime that will validate the fields themselves and not rely on paring
    the TP_printk() format at runtime.
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Al Viro <viro@ZenIV.linux.org.uk>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Link: https://lore.kernel.org/20241217024720.685917008@goodmis.org
    Fixes: 5013f454a352c ("tracing: Add check of trace event print fmts for dereferencing pointers")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tracing: Add missing helper functions in event pointer dereference check [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Mon Dec 16 21:41:20 2024 -0500

    tracing: Add missing helper functions in event pointer dereference check
    
    commit 917110481f6bc1c96b1e54b62bb114137fbc6d17 upstream.
    
    The process_pointer() helper function looks to see if various trace event
    macros are used. These macros are for storing data in the event. This
    makes it safe to dereference as the dereference will then point into the
    event on the ring buffer where the content of the data stays with the
    event itself.
    
    A few helper functions were missing. Those were:
    
      __get_rel_dynamic_array()
      __get_dynamic_array_len()
      __get_rel_dynamic_array_len()
      __get_rel_sockaddr()
    
    Also add a helper function find_print_string() to not need to use a middle
    man variable to test if the string exists.
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Al Viro <viro@ZenIV.linux.org.uk>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Link: https://lore.kernel.org/20241217024720.521836792@goodmis.org
    Fixes: 5013f454a352c ("tracing: Add check of trace event print fmts for dereferencing pointers")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tracing: Constify string literal data member in struct trace_event_call [+ + +]
Author: Christian Göttsche <cgzones@googlemail.com>
Date:   Mon Nov 25 11:50:25 2024 +0100

    tracing: Constify string literal data member in struct trace_event_call
    
    commit 452f4b31e3f70a52b97890888eeb9eaa9a87139a upstream.
    
    The name member of the struct trace_event_call is assigned with
    generated string literals; declare them pointer to read-only.
    
    Reported by clang:
    
        security/landlock/syscalls.c:179:1: warning: initializing 'char *' with an expression of type 'const char[34]' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers]
          179 | SYSCALL_DEFINE3(landlock_create_ruleset,
              | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          180 |                 const struct landlock_ruleset_attr __user *const, attr,
              |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          181 |                 const size_t, size, const __u32, flags)
              |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        ./include/linux/syscalls.h:226:36: note: expanded from macro 'SYSCALL_DEFINE3'
          226 | #define SYSCALL_DEFINE3(name, ...) SYSCALL_DEFINEx(3, _##name, __VA_ARGS__)
              |                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        ./include/linux/syscalls.h:234:2: note: expanded from macro 'SYSCALL_DEFINEx'
          234 |         SYSCALL_METADATA(sname, x, __VA_ARGS__)                 \
              |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        ./include/linux/syscalls.h:184:2: note: expanded from macro 'SYSCALL_METADATA'
          184 |         SYSCALL_TRACE_ENTER_EVENT(sname);                       \
              |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        ./include/linux/syscalls.h:151:30: note: expanded from macro 'SYSCALL_TRACE_ENTER_EVENT'
          151 |                         .name                   = "sys_enter"#sname,    \
              |                                                   ^~~~~~~~~~~~~~~~~
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Mickaël Salaün <mic@digikod.net>
    Cc: Günther Noack <gnoack@google.com>
    Cc: Nathan Chancellor <nathan@kernel.org>
    Cc: Nick Desaulniers <ndesaulniers@google.com>
    Cc: Bill Wendling <morbo@google.com>
    Cc: Justin Stitt <justinstitt@google.com>
    Link: https://lore.kernel.org/20241125105028.42807-1-cgoettsche@seltendoof.de
    Fixes: b77e38aa240c3 ("tracing: add event trace infrastructure")
    Signed-off-by: Christian Göttsche <cgzones@googlemail.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tracing: Fix test_event_printk() to process entire print argument [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Mon Dec 16 21:41:19 2024 -0500

    tracing: Fix test_event_printk() to process entire print argument
    
    commit a6629626c584200daf495cc9a740048b455addcd upstream.
    
    The test_event_printk() analyzes print formats of trace events looking for
    cases where it may dereference a pointer that is not in the ring buffer
    which can possibly be a bug when the trace event is read from the ring
    buffer and the content of that pointer no longer exists.
    
    The function needs to accurately go from one print format argument to the
    next. It handles quotes and parenthesis that may be included in an
    argument. When it finds the start of the next argument, it uses a simple
    "c = strstr(fmt + i, ',')" to find the end of that argument!
    
    In order to include "%s" dereferencing, it needs to process the entire
    content of the print format argument and not just the content of the first
    ',' it finds. As there may be content like:
    
     ({ const char *saved_ptr = trace_seq_buffer_ptr(p); static const char
       *access_str[] = { "---", "--x", "w--", "w-x", "-u-", "-ux", "wu-", "wux"
       }; union kvm_mmu_page_role role; role.word = REC->role;
       trace_seq_printf(p, "sp gen %u gfn %llx l%u %u-byte q%u%s %s%s" " %snxe
       %sad root %u %s%c", REC->mmu_valid_gen, REC->gfn, role.level,
       role.has_4_byte_gpte ? 4 : 8, role.quadrant, role.direct ? " direct" : "",
       access_str[role.access], role.invalid ? " invalid" : "", role.efer_nx ? ""
       : "!", role.ad_disabled ? "!" : "", REC->root_count, REC->unsync ?
       "unsync" : "sync", 0); saved_ptr; })
    
    Which is an example of a full argument of an existing event. As the code
    already handles finding the next print format argument, process the
    argument at the end of it and not the start of it. This way it has both
    the start of the argument as well as the end of it.
    
    Add a helper function "process_pointer()" that will do the processing during
    the loop as well as at the end. It also makes the code cleaner and easier
    to read.
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Al Viro <viro@ZenIV.linux.org.uk>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Link: https://lore.kernel.org/20241217024720.362271189@goodmis.org
    Fixes: 5013f454a352c ("tracing: Add check of trace event print fmts for dereferencing pointers")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tracing: Have process_string() also allow arrays [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Tue Dec 31 00:06:46 2024 -0500

    tracing: Have process_string() also allow arrays
    
    commit afc6717628f959941d7b33728570568b4af1c4b8 upstream.
    
    In order to catch a common bug where a TRACE_EVENT() TP_fast_assign()
    assigns an address of an allocated string to the ring buffer and then
    references it in TP_printk(), which can be executed hours later when the
    string is free, the function test_event_printk() runs on all events as
    they are registered to make sure there's no unwanted dereferencing.
    
    It calls process_string() to handle cases in TP_printk() format that has
    "%s". It returns whether or not the string is safe. But it can have some
    false positives.
    
    For instance, xe_bo_move() has:
    
     TP_printk("move_lacks_source:%s, migrate object %p [size %zu] from %s to %s device_id:%s",
                __entry->move_lacks_source ? "yes" : "no", __entry->bo, __entry->size,
                xe_mem_type_to_name[__entry->old_placement],
                xe_mem_type_to_name[__entry->new_placement], __get_str(device_id))
    
    Where the "%s" references into xe_mem_type_to_name[]. This is an array of
    pointers that should be safe for the event to access. Instead of flagging
    this as a bad reference, if a reference points to an array, where the
    record field is the index, consider it safe.
    
    Link: https://lore.kernel.org/all/9dee19b6185d325d0e6fa5f7cbba81d007d99166.camel@sapience.com/
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Link: https://lore.kernel.org/20241231000646.324fb5f7@gandalf.local.home
    Fixes: 65a25d9f7ac02 ("tracing: Add "%s" check in test_event_printk()")
    Reported-by: Genes Lists <lists@sapience.com>
    Tested-by: Gene C <arch@sapience.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tracing: Prevent bad count for tracing_cpumask_write [+ + +]
Author: Lizhi Xu <lizhi.xu@windriver.com>
Date:   Mon Dec 16 15:32:38 2024 +0800

    tracing: Prevent bad count for tracing_cpumask_write
    
    commit 98feccbf32cfdde8c722bc4587aaa60ee5ac33f0 upstream.
    
    If a large count is provided, it will trigger a warning in bitmap_parse_user.
    Also check zero for it.
    
    Cc: stable@vger.kernel.org
    Fixes: 9e01c1b74c953 ("cpumask: convert kernel trace functions")
    Link: https://lore.kernel.org/20241216073238.2573704-1-lizhi.xu@windriver.com
    Reported-by: syzbot+0aecfd34fb878546f3fd@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=0aecfd34fb878546f3fd
    Tested-by: syzbot+0aecfd34fb878546f3fd@syzkaller.appspotmail.com
    Signed-off-by: Lizhi Xu <lizhi.xu@windriver.com>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
udmabuf: also check for F_SEAL_FUTURE_WRITE [+ + +]
Author: Jann Horn <jannh@google.com>
Date:   Wed Dec 4 17:26:20 2024 +0100

    udmabuf: also check for F_SEAL_FUTURE_WRITE
    
    commit 0a16e24e34f28210f68195259456c73462518597 upstream.
    
    When F_SEAL_FUTURE_WRITE was introduced, it was overlooked that udmabuf
    must reject memfds with this flag, just like ones with F_SEAL_WRITE.
    Fix it by adding F_SEAL_FUTURE_WRITE to SEALS_DENIED.
    
    Fixes: ab3948f58ff8 ("mm/memfd: add an F_SEAL_FUTURE_WRITE seal to memfd")
    Cc: stable@vger.kernel.org
    Acked-by: Vivek Kasireddy <vivek.kasireddy@intel.com>
    Signed-off-by: Jann Horn <jannh@google.com>
    Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org>
    Signed-off-by: Vivek Kasireddy <vivek.kasireddy@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20241204-udmabuf-fixes-v2-2-23887289de1c@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: cdns3: Add quirk flag to enable suspend residency [+ + +]
Author: Roger Quadros <rogerq@kernel.org>
Date:   Sun Jul 28 12:08:45 2024 -0400

    usb: cdns3: Add quirk flag to enable suspend residency
    
    [ Upstream commit 0aca19e4037a4143273e90f1b44666b78b4dde9b ]
    
    Some platforms (e.g. ti,j721e-usb, ti,am64-usb) require
    this bit to be set to workaround a lockup issue with PHY
    short suspend intervals [1]. Add a platform quirk flag
    to indicate if Suspend Residency should be enabled.
    
    [1] - https://www.ti.com/lit/er/sprz457h/sprz457h.pdf
    i2409 - USB: USB2 PHY locks up due to short suspend
    
    Signed-off-by: Roger Quadros <rogerq@kernel.org>
    Signed-off-by: Ravi Gunasekaran <r-gunasekaran@ti.com>
    Acked-by: Peter Chen <peter.chen@kernel.org>
    Link: https://lore.kernel.org/r/20240516044537.16801-2-r-gunasekaran@ti.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: dwc2: gadget: Don't write invalid mapped sg entries into dma_desc with iommu enabled [+ + +]
Author: Peng Hongchi <hongchi.peng@siengine.com>
Date:   Sun Jul 28 12:08:46 2024 -0400

    usb: dwc2: gadget: Don't write invalid mapped sg entries into dma_desc with iommu enabled
    
    [ Upstream commit 1134289b6b93d73721340b66c310fd985385e8fa ]
    
    When using dma_map_sg() to map the scatterlist with iommu enabled,
    the entries in the scatterlist can be mergerd into less but longer
    entries in the function __finalise_sg(). So that the number of
    valid mapped entries is actually smaller than ureq->num_reqs,and
    there are still some invalid entries in the scatterlist with
    dma_addr=0xffffffff and len=0. Writing these invalid sg entries
    into the dma_desc can cause a data transmission error.
    
    The function dma_map_sg() returns the number of valid map entries
    and the return value is assigned to usb_request::num_mapped_sgs in
    function usb_gadget_map_request_by_dev(). So that just write valid
    mapped entries into dma_desc according to the usb_request::num_mapped_sgs,
    and set the IOC bit if it's the last valid mapped entry.
    
    This patch poses no risk to no-iommu situation, cause
    ureq->num_mapped_sgs equals ureq->num_sgs while using dma_direct_map_sg()
    to map the scatterlist whith iommu disabled.
    
    Signed-off-by: Peng Hongchi <hongchi.peng@siengine.com>
    Link: https://lore.kernel.org/r/20240523100315.7226-1-hongchi.peng@siengine.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
USB: serial: option: add MediaTek T7XX compositions [+ + +]
Author: Jack Wu <wojackbb@gmail.com>
Date:   Thu Nov 28 10:22:27 2024 +0800

    USB: serial: option: add MediaTek T7XX compositions
    
    commit f07dfa6a1b65034a5c3ba3a555950d972f252757 upstream.
    
    Add the MediaTek T7XX compositions:
    
    T:  Bus=03 Lev=01 Prnt=01 Port=05 Cnt=01 Dev#= 74 Spd=480  MxCh= 0
    D:  Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=0e8d ProdID=7129 Rev= 0.01
    S:  Manufacturer=MediaTek Inc.
    S:  Product=USB DATA CARD
    S:  SerialNumber=004402459035402
    C:* #Ifs=10 Cfg#= 1 Atr=a0 MxPwr=500mA
    A:  FirstIf#= 0 IfCount= 2 Cls=02(comm.) Sub=0e Prot=00
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 6 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 7 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 8 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=08(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 9 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=8a(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=09(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    -------------------------------
    | If Number | Function        |
    -------------------------------
    | 2         | USB AP Log Port |
    -------------------------------
    | 3         | USB AP GNSS Port|
    -------------------------------
    | 4         | USB AP META Port|
    -------------------------------
    | 5         | ADB port        |
    -------------------------------
    | 6         | USB MD AT Port  |
    ------------------------------
    | 7         | USB MD META Port|
    -------------------------------
    | 8         | USB NTZ Port    |
    -------------------------------
    | 9         | USB Debug port  |
    -------------------------------
    
    Signed-off-by: Jack Wu <wojackbb@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 MeiG Smart SLM770A [+ + +]
Author: Michal Hrusecky <michal.hrusecky@turris.com>
Date:   Tue Nov 19 14:00:18 2024 +0100

    USB: serial: option: add MeiG Smart SLM770A
    
    commit 724d461e44dfc0815624d2a9792f2f2beb7ee46d upstream.
    
    Update the USB serial option driver to support MeiG Smart SLM770A.
    
    ID 2dee:4d57 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=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=2dee ProdID=4d57 Rev= 1.00
    S:  Manufacturer=Marvell
    S:  Product=Mobile Composite Device Bus
    C:* #Ifs= 6 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= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=0b(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=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
    I:* If#= 4 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=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=0f(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=0e(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Tested successfully connecting to the Internet via rndis interface after
    dialing via AT commands on If#=3 or If#=4.
    Not sure of the purpose of the other serial interfaces.
    
    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: serial: option: add Netprisma LCUK54 modules for WWAN Ready [+ + +]
Author: Mank Wang <mank.wang@netprisma.com>
Date:   Fri Nov 22 09:06:00 2024 +0000

    USB: serial: option: add Netprisma LCUK54 modules for WWAN Ready
    
    commit aa954ae08262bb5cd6ab18dd56a0b58c1315db8b upstream.
    
    LCUK54-WRD's pid/vid
    0x3731/0x010a
    0x3731/0x010c
    
    LCUK54-WWD's pid/vid
    0x3731/0x010b
    0x3731/0x010d
    
    Above products use the exact same interface layout and option
    driver:
    MBIM + GNSS + DIAG + NMEA + AT + QDSS + DPL
    
    T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#=  5 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=3731 ProdID=0101 Rev= 5.04
    S:  Manufacturer=NetPrisma
    S:  Product=LCUK54-WRD
    S:  SerialNumber=feeba631
    C:* #Ifs= 8 Cfg#= 1 Atr=a0 MxPwr=500mA
    A:  FirstIf#= 0 IfCount= 2 Cls=02(comm.) Sub=0e Prot=00
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=81(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 0 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    I:* If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=8e(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=0f(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 2 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=40 Driver=option
    E:  Ad=85(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=87(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 6 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=70 Driver=(none)
    E:  Ad=88(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:* If#= 7 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=8f(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Signed-off-by: Mank Wang <mank.wang@netprisma.com>
    [ johan: use lower case hex notation ]
    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 TCL IK512 MBIM & ECM [+ + +]
Author: Daniel Swanemar <d.swanemar@gmail.com>
Date:   Mon Nov 4 14:42:17 2024 +0100

    USB: serial: option: add TCL IK512 MBIM & ECM
    
    commit fdad4fb7c506bea8b419f70ff2163d99962e8ede upstream.
    
    Add the following TCL IK512 compositions:
    
    0x0530: Modem + Diag + AT + MBIM
    T:  Bus=04 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  3 Spd=10000 MxCh= 0
    D:  Ver= 3.20 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs=  1
    P:  Vendor=1bbb ProdID=0530 Rev=05.04
    S:  Manufacturer=TCL
    S:  Product=TCL 5G USB Dongle
    S:  SerialNumber=3136b91a
    C:  #Ifs= 5 Cfg#= 1 Atr=80 MxPwr=896mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=82(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=85(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=86(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 4 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=0f(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=8e(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    
    0x0640: ECM + Modem + Diag + AT
    T:  Bus=04 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  4 Spd=10000 MxCh= 0
    D:  Ver= 3.20 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs=  1
    P:  Vendor=1bbb ProdID=0640 Rev=05.04
    S:  Manufacturer=TCL
    S:  Product=TCL 5G USB Dongle
    S:  SerialNumber=3136b91a
    C:  #Ifs= 5 Cfg#= 1 Atr=80 MxPwr=896mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=06 Prot=00 Driver=cdc_ether
    E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
    E:  Ad=0f(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=8e(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=82(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=83(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=84(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    
    Signed-off-by: Daniel Swanemar <d.swanemar@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: serial: option: add Telit FE910C04 rmnet compositions [+ + +]
Author: Daniele Palmas <dnlplm@gmail.com>
Date:   Mon Dec 9 16:32:54 2024 +0100

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

 
usb: xhci: Avoid queuing redundant Stop Endpoint commands [+ + +]
Author: Michal Pecio <michal.pecio@gmail.com>
Date:   Wed Nov 6 12:14:59 2024 +0200

    usb: xhci: Avoid queuing redundant Stop Endpoint commands
    
    [ Upstream commit 474538b8dd1cd9c666e56cfe8ef60fbb0fb513f4 ]
    
    Stop Endpoint command on an already stopped endpoint fails and may be
    misinterpreted as a known hardware bug by the completion handler. This
    results in an unnecessary delay with repeated retries of the command.
    
    Avoid queuing this command when endpoint state flags indicate that it's
    stopped or halted and the command will fail. If commands are pending on
    the endpoint, their completion handlers will process cancelled TDs so
    it's done. In case of waiting for external operations like clearing TT
    buffer, the endpoint is stopped and cancelled TDs can be processed now.
    
    This eliminates practically all unnecessary retries because an endpoint
    with pending URBs is maintained in Running state by the driver, unless
    aforementioned commands or other operations are pending on it. This is
    guaranteed by xhci_ring_ep_doorbell() and by the fact that it is called
    every time any of those operations completes.
    
    The only known exceptions are hardware bugs (the endpoint never starts
    at all) and Stream Protocol errors not associated with any TRB, which
    cause an endpoint reset not followed by restart. Sounds like a bug.
    
    Generally, these retries are only expected to happen when the endpoint
    fails to start for unknown/no reason, which is a worse problem itself,
    and fixing the bug eliminates the retries too.
    
    All cases were tested and found to work as expected. SET_DEQ_PENDING
    was produced by patching uvcvideo to unlink URBs in 100us intervals,
    which then runs into this case very often. EP_HALTED was produced by
    restarting 'cat /dev/ttyUSB0' on a serial dongle with broken cable.
    EP_CLEARING_TT by the same, with the dongle on an external hub.
    
    Fixes: fd9d55d190c0 ("xhci: retry Stop Endpoint on buggy NEC controllers")
    CC: stable@vger.kernel.org
    Signed-off-by: Michal Pecio <michal.pecio@gmail.com>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20241106101459.775897-34-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: xhci: Limit Stop Endpoint retries [+ + +]
Author: Michal Pecio <michal.pecio@gmail.com>
Date:   Wed Nov 6 12:14:57 2024 +0200

    usb: xhci: Limit Stop Endpoint retries
    
    [ Upstream commit 42b7581376015c1bbcbe5831f043cd0ac119d028 ]
    
    Some host controllers fail to atomically transition an endpoint to the
    Running state on a doorbell ring and enter a hidden "Restarting" state,
    which looks very much like Stopped, with the important difference that
    it will spontaneously transition to Running anytime soon.
    
    A Stop Endpoint command queued in the Restarting state typically fails
    with Context State Error and the completion handler sees the Endpoint
    Context State as either still Stopped or already Running. Even a case
    of Halted was observed, when an error occurred right after the restart.
    
    The Halted state is already recovered from by resetting the endpoint.
    The Running state is handled by retrying Stop Endpoint.
    
    The Stopped state was recognized as a problem on NEC controllers and
    worked around also by retrying, because the endpoint soon restarts and
    then stops for good. But there is a risk: the command may fail if the
    endpoint is "stopped for good" already, and retries will fail forever.
    
    The possibility of this was not realized at the time, but a number of
    cases were discovered later and reproduced. Some proved difficult to
    deal with, and it is outright impossible to predict if an endpoint may
    fail to ever start at all due to a hardware bug. One such bug (albeit
    on ASM3142, not on NEC) was found to be reliably triggered simply by
    toggling an AX88179 NIC up/down in a tight loop for a few seconds.
    
    An endless retries storm is quite nasty. Besides putting needless load
    on the xHC and CPU, it causes URBs never to be given back, paralyzing
    the device and connection/disconnection logic for the whole bus if the
    device is unplugged. User processes waiting for URBs become unkillable,
    drivers and kworker threads lock up and xhci_hcd cannot be reloaded.
    
    For peace of mind, impose a timeout on Stop Endpoint retries in this
    case. If they don't succeed in 100ms, consider the endpoint stopped
    permanently for some reason and just give back the unlinked URBs. This
    failure case is rare already and work is under way to make it rarer.
    
    Start this work today by also handling one simple case of race with
    Reset Endpoint, because it costs just two lines to implement.
    
    Fixes: fd9d55d190c0 ("xhci: retry Stop Endpoint on buggy NEC controllers")
    CC: stable@vger.kernel.org
    Signed-off-by: Michal Pecio <michal.pecio@gmail.com>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20241106101459.775897-32-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: e21ebe51af68 ("xhci: Turn NEC specific quirk for handling Stop Endpoint errors generic")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
virtio-blk: don't keep queue frozen during system suspend [+ + +]
Author: Ming Lei <ming.lei@redhat.com>
Date:   Tue Nov 12 20:58:21 2024 +0800

    virtio-blk: don't keep queue frozen during system suspend
    
    [ Upstream commit 7678abee0867e6b7fb89aa40f6e9f575f755fb37 ]
    
    Commit 4ce6e2db00de ("virtio-blk: Ensure no requests in virtqueues before
    deleting vqs.") replaces queue quiesce with queue freeze in virtio-blk's
    PM callbacks. And the motivation is to drain inflight IOs before suspending.
    
    block layer's queue freeze looks very handy, but it is also easy to cause
    deadlock, such as, any attempt to call into bio_queue_enter() may run into
    deadlock if the queue is frozen in current context. There are all kinds
    of ->suspend() called in suspend context, so keeping queue frozen in the
    whole suspend context isn't one good idea. And Marek reported lockdep
    warning[1] caused by virtio-blk's freeze queue in virtblk_freeze().
    
    [1] https://lore.kernel.org/linux-block/ca16370e-d646-4eee-b9cc-87277c89c43c@samsung.com/
    
    Given the motivation is to drain in-flight IOs, it can be done by calling
    freeze & unfreeze, meantime restore to previous behavior by keeping queue
    quiesced during suspend.
    
    Cc: Yi Sun <yi.sun@unisoc.com>
    Cc: Michael S. Tsirkin <mst@redhat.com>
    Cc: Jason Wang <jasowang@redhat.com>
    Cc: Stefan Hajnoczi <stefanha@redhat.com>
    Cc: virtualization@lists.linux.dev
    Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Signed-off-by: Ming Lei <ming.lei@redhat.com>
    Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
    Link: https://lore.kernel.org/r/20241112125821.1475793-1-ming.lei@redhat.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
vmalloc: fix accounting with i915 [+ + +]
Author: Matthew Wilcox (Oracle) <willy@infradead.org>
Date:   Mon Dec 23 20:18:00 2024 +0000

    vmalloc: fix accounting with i915
    
    [ Upstream commit a2e740e216f5bf49ccb83b6d490c72a340558a43 ]
    
    If the caller of vmap() specifies VM_MAP_PUT_PAGES (currently only the
    i915 driver), we will decrement nr_vmalloc_pages and MEMCG_VMALLOC in
    vfree().  These counters are incremented by vmalloc() but not by vmap() so
    this will cause an underflow.  Check the VM_MAP_PUT_PAGES flag before
    decrementing either counter.
    
    Link: https://lkml.kernel.org/r/20241211202538.168311-1-willy@infradead.org
    Fixes: b944afc9d64d ("mm: add a VM_MAP_PUT_PAGES flag for vmap")
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Acked-by: Johannes Weiner <hannes@cmpxchg.org>
    Reviewed-by: Shakeel Butt <shakeel.butt@linux.dev>
    Reviewed-by: Balbir Singh <balbirs@nvidia.com>
    Acked-by: Michal Hocko <mhocko@suse.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Muchun Song <muchun.song@linux.dev>
    Cc: Roman Gushchin <roman.gushchin@linux.dev>
    Cc: "Uladzislau Rezki (Sony)" <urezki@gmail.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
watchdog: it87_wdt: add PWRGD enable quirk for Qotom QCML04 [+ + +]
Author: James Hilliard <james.hilliard1@gmail.com>
Date:   Fri Oct 25 00:34:40 2024 -0600

    watchdog: it87_wdt: add PWRGD enable quirk for Qotom QCML04
    
    [ Upstream commit 43439076383a7611300334d1357c0f8883f40816 ]
    
    For the watchdog timer to work properly on the QCML04 board we need to
    set PWRGD enable in the Environment Controller Configuration Registers
    Special Configuration Register 1 when it is not already set, this may
    be the case when the watchdog is not enabled from within the BIOS.
    
    Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
    Reviewed-by: Guenter Roeck <linux@roeck-us.net>
    Link: https://lore.kernel.org/r/20241025063441.3494837-1-james.hilliard1@gmail.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
wifi: mac80211: wake the queues in case of failure in resume [+ + +]
Author: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Date:   Tue Nov 19 17:35:39 2024 +0200

    wifi: mac80211: wake the queues in case of failure in resume
    
    [ Upstream commit 220bf000530f9b1114fa2a1022a871c7ce8a0b38 ]
    
    In case we fail to resume, we'll WARN with
    "Hardware became unavailable during restart." and we'll wait until user
    space does something. It'll typically bring the interface down and up to
    recover. This won't work though because the queues are still stopped on
    IEEE80211_QUEUE_STOP_REASON_SUSPEND reason.
    Make sure we clear that reason so that we give a chance to the recovery
    to succeed.
    
    Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219447
    Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
    Link: https://patch.msgid.link/20241119173108.cd628f560f97.I76a15fdb92de450e5329940125f3c58916be3942@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/hyperv: Fix hv tsc page based sched_clock for hibernation [+ + +]
Author: Naman Jain <namjain@linux.microsoft.com>
Date:   Tue Sep 17 11:09:17 2024 +0530

    x86/hyperv: Fix hv tsc page based sched_clock for hibernation
    
    commit bcc80dec91ee745b3d66f3e48f0ec2efdea97149 upstream.
    
    read_hv_sched_clock_tsc() assumes that the Hyper-V clock counter is
    bigger than the variable hv_sched_clock_offset, which is cached during
    early boot, but depending on the timing this assumption may be false
    when a hibernated VM starts again (the clock counter starts from 0
    again) and is resuming back (Note: hv_init_tsc_clocksource() is not
    called during hibernation/resume); consequently,
    read_hv_sched_clock_tsc() may return a negative integer (which is
    interpreted as a huge positive integer since the return type is u64)
    and new kernel messages are prefixed with huge timestamps before
    read_hv_sched_clock_tsc() grows big enough (which typically takes
    several seconds).
    
    Fix the issue by saving the Hyper-V clock counter just before the
    suspend, and using it to correct the hv_sched_clock_offset in
    resume. This makes hv tsc page based sched_clock continuous and ensures
    that post resume, it starts from where it left off during suspend.
    Override x86_platform.save_sched_clock_state and
    x86_platform.restore_sched_clock_state routines to correct this as soon
    as possible.
    
    Note: if Invariant TSC is available, the issue doesn't happen because
    1) we don't register read_hv_sched_clock_tsc() for sched clock:
    See commit e5313f1c5404 ("clocksource/drivers/hyper-v: Rework
    clocksource and sched clock setup");
    2) the common x86 code adjusts TSC similarly: see
    __restore_processor_state() ->  tsc_verify_tsc_adjust(true) and
    x86_platform.restore_sched_clock_state().
    
    Cc: stable@vger.kernel.org
    Fixes: 1349401ff1aa ("clocksource/drivers/hyper-v: Suspend/resume Hyper-V clocksource for hibernation")
    Co-developed-by: Dexuan Cui <decui@microsoft.com>
    Signed-off-by: Dexuan Cui <decui@microsoft.com>
    Signed-off-by: Naman Jain <namjain@linux.microsoft.com>
    Reviewed-by: Michael Kelley <mhklinux@outlook.com>
    Link: https://lore.kernel.org/r/20240917053917.76787-1-namjain@linux.microsoft.com
    Signed-off-by: Wei Liu <wei.liu@kernel.org>
    Message-ID: <20240917053917.76787-1-namjain@linux.microsoft.com>
    Signed-off-by: Naman Jain <namjain@linux.microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xhci: retry Stop Endpoint on buggy NEC controllers [+ + +]
Author: Michal Pecio <michal.pecio@gmail.com>
Date:   Thu Feb 29 16:14:36 2024 +0200

    xhci: retry Stop Endpoint on buggy NEC controllers
    
    [ Upstream commit fd9d55d190c0e5fefd3a9165ea361809427885a1 ]
    
    Two NEC uPD720200 adapters have been observed to randomly misbehave:
    a Stop Endpoint command fails with Context Error, the Output Context
    indicates Stopped state, and the endpoint keeps running. Very often,
    Set TR Dequeue Pointer is seen to fail next with Context Error too,
    in addition to problems from unexpectedly completed cancelled work.
    
    The pathology is common on fast running isoc endpoints like uvcvideo,
    but has also been reproduced on a full-speed bulk endpoint of pl2303.
    It seems all EPs are affected, with risk proportional to their load.
    
    Reproduction involves receiving any kind of stream and closing it to
    make the device driver cancel URBs already queued in advance.
    
    Deal with it by retrying the command like in the Running state.
    
    Signed-off-by: Michal Pecio <michal.pecio@gmail.com>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20240229141438.619372-8-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: e21ebe51af68 ("xhci: Turn NEC specific quirk for handling Stop Endpoint errors generic")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

xhci: Turn NEC specific quirk for handling Stop Endpoint errors generic [+ + +]
Author: Mathias Nyman <mathias.nyman@linux.intel.com>
Date:   Tue Dec 17 12:21:21 2024 +0200

    xhci: Turn NEC specific quirk for handling Stop Endpoint errors generic
    
    [ Upstream commit e21ebe51af688eb98fd6269240212a3c7300deea ]
    
    xHC hosts from several vendors have the same issue where endpoints start
    so slowly that a later queued 'Stop Endpoint' command may complete before
    endpoint is up and running.
    
    The 'Stop Endpoint' command fails with context state error as the endpoint
    still appears as  stopped.
    
    See commit 42b758137601 ("usb: xhci: Limit Stop Endpoint retries") for
    details
    
    CC: stable@vger.kernel.org
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20241217102122.2316814-2-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
zram: refuse to use zero sized block device as backing device [+ + +]
Author: Kairui Song <kasong@tencent.com>
Date:   Tue Dec 10 00:57:15 2024 +0800

    zram: refuse to use zero sized block device as backing device
    
    commit be48c412f6ebf38849213c19547bc6d5b692b5e5 upstream.
    
    Patch series "zram: fix backing device setup issue", v2.
    
    This series fixes two bugs of backing device setting:
    
    - ZRAM should reject using a zero sized (or the uninitialized ZRAM
      device itself) as the backing device.
    - Fix backing device leaking when removing a uninitialized ZRAM
      device.
    
    
    This patch (of 2):
    
    Setting a zero sized block device as backing device is pointless, and one
    can easily create a recursive loop by setting the uninitialized ZRAM
    device itself as its own backing device by (zram0 is uninitialized):
    
        echo /dev/zram0 > /sys/block/zram0/backing_dev
    
    It's definitely a wrong config, and the module will pin itself, kernel
    should refuse doing so in the first place.
    
    By refusing to use zero sized device we avoided misuse cases including
    this one above.
    
    Link: https://lkml.kernel.org/r/20241209165717.94215-1-ryncsn@gmail.com
    Link: https://lkml.kernel.org/r/20241209165717.94215-2-ryncsn@gmail.com
    Fixes: 013bf95a83ec ("zram: add interface to specif backing device")
    Signed-off-by: Kairui Song <kasong@tencent.com>
    Reported-by: Desheng Wu <deshengwu@tencent.com>
    Reviewed-by: Sergey Senozhatsky <senozhatsky@chromium.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>