Changelog in Linux kernel 5.4.289

 
af_packet: fix vlan_get_protocol_dgram() vs MSG_PEEK [+ + +]
Author: Eric Dumazet <[email protected]>
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: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Cc: Chengen Du <[email protected]>
    Reviewed-by: Willem de Bruijn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

af_packet: fix vlan_get_tci() vs MSG_PEEK [+ + +]
Author: Eric Dumazet <[email protected]>
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: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Cc: Chengen Du <[email protected]>
    Reviewed-by: Willem de Bruijn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ALSA: usb-audio: US16x08: Initialize array before use [+ + +]
Author: Tanya Agarwal <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: usb: Fix UBSAN warning in parse_audio_unit() [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Sun Jul 28 12:10:27 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: [email protected]
    Closes: https://lore.kernel.org/[email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ARC: build: Try to guess GCC variant of cross compiler [+ + +]
Author: Leon Romanovsky <[email protected]>
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 <[email protected]>
    Signed-off-by: Vineet Gupta <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf: Check negative offsets in __bpf_skb_min_len() [+ + +]
Author: Cong Wang <[email protected]>
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 <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Acked-by: John Fastabend <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

bpf: fix potential error return [+ + +]
Author: Anton Protopopov <[email protected]>
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 <[email protected]>
    Acked-by: Jiri Olsa <[email protected]>
    Acked-by: Andrii Nakryiko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bpf: fix recursive lock when verdict program return SK_PASS [+ + +]
Author: Jiayuan Chen <[email protected]>
Date:   Sun Dec 29 00:44:15 2024 +0530

    bpf: fix recursive lock when verdict program return SK_PASS
    
    commit 8ca2a1eeadf09862190b2810697702d803ceef2d upstream.
    
    When the stream_verdict program returns SK_PASS, it places the received skb
    into its own receive queue, but a recursive lock eventually occurs, leading
    to an operating system deadlock. This issue has been present since v6.9.
    
    '''
    sk_psock_strp_data_ready
        write_lock_bh(&sk->sk_callback_lock)
        strp_data_ready
          strp_read_sock
            read_sock -> tcp_read_sock
              strp_recv
                cb.rcv_msg -> sk_psock_strp_read
                  # now stream_verdict return SK_PASS without peer sock assign
                  __SK_PASS = sk_psock_map_verd(SK_PASS, NULL)
                  sk_psock_verdict_apply
                    sk_psock_skb_ingress_self
                      sk_psock_skb_ingress_enqueue
                        sk_psock_data_ready
                          read_lock_bh(&sk->sk_callback_lock) <= dead lock
    
    '''
    
    This topic has been discussed before, but it has not been fixed.
    Previous discussion:
    https://lore.kernel.org/all/[email protected]
    
    Fixes: 6648e613226e ("bpf, skmsg: Fix NULL pointer dereference in sk_psock_skb_ingress_enqueue")
    Reported-by: Vincent Whitchurch <[email protected]>
    Signed-off-by: Jiayuan Chen <[email protected]>
    Signed-off-by: John Fastabend <[email protected]>
    Acked-by: Martin KaFai Lau <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    [srish: Apply to stable branch linux-5.10.y]
    Signed-off-by: Srish Srinivasan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
btrfs: avoid monopolizing a core when activating a swap file [+ + +]
Author: Filipe Manana <[email protected]>
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: [email protected] # 5.4+
    Reviewed-by: Qu Wenruo <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: tree-checker: reject inline extent items with 0 ref count [+ + +]
Author: Qu Wenruo <[email protected]>
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: [email protected] # 5.4+
    Link: https://lore.kernel.org/linux-btrfs/[email protected]/
    Reported-by: Frankie Fisher <[email protected]>
    Reviewed-by: Filipe Manana <[email protected]>
    Signed-off-by: Qu Wenruo <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
chelsio/chtls: prevent potential integer overflow on 32bit [+ + +]
Author: Dan Carpenter <[email protected]>
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: [email protected]
    Signed-off-by: Dan Carpenter <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dmaengine: at_xdmac: avoid null_prt_deref in at_xdmac_prep_dma_memset [+ + +]
Author: Chen Ridong <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: mv_xor: fix child node refcount handling in early exit [+ + +]
Author: Javier Carrasco <[email protected]>
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: [email protected]
    Fixes: f7d12ef53ddf ("dma: mv_xor: add Device Tree binding")
    Signed-off-by: Javier Carrasco <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

    Drivers: hv: util: Avoid accessing a ringbuffer not initialized yet
    
    [ Upstream commit 07a756a49f4b4290b49ea46e089cbe6f79ff8d26 ]
    
    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 <[email protected]>
    Fixes: e0fa3e5e7df6 ("Drivers: hv: utils: fix a race on userspace daemons registration")
    Cc: [email protected]
    Signed-off-by: Michael Kelley <[email protected]>
    Acked-by: Wei Liu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Wei Liu <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/bridge: adv7511_audio: Update Audio InfoFrame properly [+ + +]
Author: Stefan Ekenberg <[email protected]>
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 <[email protected]>
    Fixes: 53c515befe28 ("drm/bridge: adv7511: Add Audio support")
    Signed-off-by: Stefan Ekenberg <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/i915: Fix memory leak by correcting cache object name in error handler [+ + +]
Author: Jiasheng Jiang <[email protected]>
Date:   Tue Dec 17 21:00:51 2024 +0000

    drm/i915: Fix memory leak by correcting cache object name in error handler
    
    [ Upstream commit 9bc5e7dc694d3112bbf0fa4c46ef0fa0f114937a ]
    
    Replace "slab_priorities" with "slab_dependencies" in the error handler
    to avoid memory leak.
    
    Fixes: 32eb6bcfdda9 ("drm/i915: Make request allocation caches global")
    Cc: <[email protected]> # v5.2+
    Signed-off-by: Jiasheng Jiang <[email protected]>
    Reviewed-by: Nirmoy Das <[email protected]>
    Reviewed-by: Andi Shyti <[email protected]>
    Signed-off-by: Andi Shyti <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Tvrtko Ursulin <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm: adv7511: Drop dsi single lane support [+ + +]
Author: Biju Das <[email protected]>
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 <[email protected]>
    Cc: [email protected]
    Reviewed-by: Laurent Pinchart <[email protected]>
    Reviewed-by: Adam Ford <[email protected]>
    Signed-off-by: Biju Das <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm: bridge: adv7511: Enable SPDIF DAI [+ + +]
Author: Bogdan Togorean <[email protected]>
Date:   Mon Apr 13 14:35:07 2020 +0300

    drm: bridge: adv7511: Enable SPDIF DAI
    
    [ Upstream commit f7f436b99364a3904387eba613fc69853cc2f220 ]
    
    ADV7511 support I2S or SPDIF as audio input interfaces. This commit
    enable support for SPDIF.
    
    Signed-off-by: Bogdan Togorean <[email protected]>
    Reviewed-by: Andrzej Hajda <[email protected]>
    Signed-off-by: Andrzej Hajda <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Stable-dep-of: 902806baf3c1 ("drm/bridge: adv7511_audio: Update Audio InfoFrame properly")
    Signed-off-by: Sasha Levin <[email protected]>

 
efivarfs: Fix error on non-existent file [+ + +]
Author: James Bottomley <[email protected]>
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 <[email protected]>
    Cc: <[email protected]>
    [ardb: make efivarfs_valid_name() static]
    Signed-off-by: Ard Biesheuvel <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
epoll: Add synchronous wakeup support for ep_poll_callback [+ + +]
Author: Xuewen Yan <[email protected]>
Date:   Thu Dec 26 19:14:29 2024 +0800

    epoll: Add synchronous wakeup support for ep_poll_callback
    
    [ Upstream commit 900bbaae67e980945dec74d36f8afe0de7556d5a ]
    
    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 <[email protected]>
    Signed-off-by: Jing Xia <[email protected]>
    Signed-off-by: Xuewen Yan <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Brian Geffon <[email protected]>
    Reviewed-by: Brian Geffon <[email protected]>
    Reported-by: Benoit Lize <[email protected]>
    Signed-off-by: Christian Brauner <[email protected]>
    [ Redefine wake_up_sync(x) as __wake_up_sync(x, TASK_NORMAL, 1) to
      make it work on 5.4.y ]
    Signed-off-by: Wenshan Lan <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
erofs: fix incorrect symlink detection in fast symlink [+ + +]
Author: Gao Xiang <[email protected]>
Date:   Wed Dec 18 15:39:38 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 <[email protected]>
    Reported-by: https://honggfuzz.dev/
    Link: https://lore.kernel.org/r/[email protected]
    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/[email protected]
    [ Gao Xiang: fix 5.4.y build warning due to `check_add_overflow`. ]
    Signed-off-by: Gao Xiang <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

erofs: fix order >= MAX_ORDER warning due to crafted negative i_size [+ + +]
Author: Gao Xiang <[email protected]>
Date:   Wed Dec 18 15:39:37 2024 +0800

    erofs: fix order >= MAX_ORDER warning due to crafted negative i_size
    
    commit 1dd73601a1cba37a0ed5f89a8662c90191df5873 upstream.
    
    As syzbot reported [1], the root cause is that i_size field is a
    signed type, and negative i_size is also less than EROFS_BLKSIZ.
    As a consequence, it's handled as fast symlink unexpectedly.
    
    Let's fall back to the generic path to deal with such unusual i_size.
    
    [1] https://lore.kernel.org/r/[email protected]
    
    Reported-by: [email protected]
    Fixes: 431339ba9042 ("staging: erofs: add inode operations")
    Reviewed-by: Yue Hu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Gao Xiang <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ftrace: use preempt_enable/disable notrace macros to avoid double fault [+ + +]
Author: Koichiro Den <[email protected]>
Date:   Wed Jan 8 12:17:36 2025 +0900

    ftrace: use preempt_enable/disable notrace macros to avoid double fault
    
    Since the backport commit eea46baf1451 ("ftrace: Fix possible
    use-after-free issue in ftrace_location()") on linux-5.4.y branch, the
    old ftrace_int3_handler()->ftrace_location() path has included
    rcu_read_lock(), which has mcount location inside and leads to potential
    double fault.
    
    Replace rcu_read_lock/unlock with preempt_enable/disable notrace macros
    so that the mcount location does not appear on the int3 handler path.
    
    This fix is specific to linux-5.4.y branch, the only branch still using
    ftrace_int3_handler with commit e60b613df8b6 ("ftrace: Fix possible
    use-after-free issue in ftrace_location()") backported. It also avoids
    the need to backport the code conversion to text_poke() on this branch.
    
    Reported-by: Koichiro Den <[email protected]>
    Closes: https://lore.kernel.org/all/74gjhwxupvozwop7ndhrh7t5qeckomt7yqvkkbm5j2tlx6dkfk@rgv7sijvry2k
    Fixes: eea46baf1451 ("ftrace: Fix possible use-after-free issue in ftrace_location()") # linux-5.4.y
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Koichiro Den <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
i2c: pnx: Fix timeout in wait functions [+ + +]
Author: Vladimir Riabchun <[email protected]>
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 <[email protected]>
    Signed-off-by: Andi Shyti <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

i2c: riic: Always round-up when calculating bus period [+ + +]
Author: Geert Uytterhoeven <[email protected]>
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 <[email protected]>
    Signed-off-by: Geert Uytterhoeven <[email protected]>
    Cc: <[email protected]> # v4.15+
    Link: https://lore.kernel.org/r/c59aea77998dfea1b4456c4b33b55ab216fcbf5e.1732284746.git.geert+renesas@glider.be
    Signed-off-by: Andi Shyti <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
IB/mlx5: Introduce and use mlx5_core_is_vf() [+ + +]
Author: Parav Pandit <[email protected]>
Date:   Mon Oct 28 23:35:30 2019 +0000

    IB/mlx5: Introduce and use mlx5_core_is_vf()
    
    [ Upstream commit e53a9d26cf80565cfb7172fc52a0dfac73613a0f ]
    
    Instead of deciding a given device is virtual function or
    not based on a device is PF or not, use already defined
    MLX5_COREDEV_VF by introducing an helper API mlx5_core_is_vf().
    
    This enables to clearly identify PF, VF and non virtual functions.
    
    Signed-off-by: Parav Pandit <[email protected]>
    Reviewed-by: Vu Pham <[email protected]>
    Signed-off-by: Saeed Mahameed <[email protected]>
    Stable-dep-of: e05feab22fd7 ("RDMA/mlx5: Enforce same type port association for multiport RoCE")
    Signed-off-by: Sasha Levin <[email protected]>

 
ila: serialize calls to nf_register_net_hooks() [+ + +]
Author: Eric Dumazet <[email protected]>
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: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Cc: Florian Westphal <[email protected]>
    Cc: Tom Herbert <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ionic: use ee->offset when returning sprom data [+ + +]
Author: Shannon Nelson <[email protected]>
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 <[email protected]>
    Reviewed-by: Jacob Keller <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ipv6: fix possible UAF in ip6_finish_output2() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Tue Dec 24 21:16:24 2024 -0800

    ipv6: fix possible UAF in ip6_finish_output2()
    
    [ Upstream commit e891b36de161fcd96f12ff83667473e5067b9037 ]
    
    If skb_expand_head() returns NULL, skb has been freed
    and associated dst/idev could also have been freed.
    
    We need to hold rcu_read_lock() to make sure the dst and
    associated idev are alive.
    
    Fixes: 5796015fa968 ("ipv6: allocate enough headroom in ip6_finish_output2()")
    Signed-off-by: Eric Dumazet <[email protected]>
    Cc: Vasily Averin <[email protected]>
    Reviewed-by: David Ahern <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    (cherry picked from commit e891b36de161fcd96f12ff83667473e5067b9037)
    Signed-off-by: Harshvardhan Jha <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ipv6: prevent possible UAF in ip6_xmit() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Tue Aug 20 16:08:59 2024 +0000

    ipv6: prevent possible UAF in ip6_xmit()
    
    commit 2d5ff7e339d04622d8282661df36151906d0e1c7 upstream.
    
    If skb_expand_head() returns NULL, skb has been freed
    and the associated dst/idev could also have been freed.
    
    We must use rcu_read_lock() to prevent a possible UAF.
    
    Fixes: 0c9f227bee11 ("ipv6: use skb_expand_head in ip6_xmit")
    Signed-off-by: Eric Dumazet <[email protected]>
    Cc: Vasily Averin <[email protected]>
    Reviewed-by: David Ahern <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ipv6: use skb_expand_head in ip6_finish_output2 [+ + +]
Author: Vasily Averin <[email protected]>
Date:   Tue Dec 24 21:16:22 2024 -0800

    ipv6: use skb_expand_head in ip6_finish_output2
    
    [ Upstream commit e415ed3a4b8b246ee5e9d109ff5153efcf96b9f2 ]
    
    Unlike skb_realloc_headroom, new helper skb_expand_head does not allocate
    a new skb if possible.
    
    Additionally this patch replaces commonly used dereferencing with variables.
    
    Signed-off-by: Vasily Averin <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    (cherry picked from commit e415ed3a4b8b246ee5e9d109ff5153efcf96b9f2)
    Signed-off-by: Harshvardhan Jha <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ipv6: use skb_expand_head in ip6_xmit [+ + +]
Author: Vasily Averin <[email protected]>
Date:   Tue Dec 24 21:16:23 2024 -0800

    ipv6: use skb_expand_head in ip6_xmit
    
    [ Upstream commit 0c9f227bee11910a49e1d159abe102d06e3745d5 ]
    
    Unlike skb_realloc_headroom, new helper skb_expand_head
    does not allocate a new skb if possible.
    
    Additionally this patch replaces commonly used dereferencing with variables.
    
    Signed-off-by: Vasily Averin <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    (cherry picked from commit 0c9f227bee11910a49e1d159abe102d06e3745d5)
    Signed-off-by: Harshvardhan Jha <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
irqchip/gic: Correct declaration of *percpu_base pointer in union gic_base [+ + +]
Author: Uros Bizjak <[email protected]>
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 <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Acked-by: Marc Zyngier <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
Linux: Linux 5.4.289 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Thu Jan 9 13:23:37 2025 +0100

    Linux 5.4.289
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Tested-by: Linux Kernel Functional Testing <[email protected]>
    Tested-by: Shuah Khan <[email protected]>
    Tested-by: kernelci.org bot <[email protected]>
    Tested-by: Harshit Mogalapalli <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
media: dvb-frontends: dib3000mb: fix uninit-value in dib3000_write_reg [+ + +]
Author: Nikita Zhandarovich <[email protected]>
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: [email protected]
    Signed-off-by: Nikita Zhandarovich <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
MIPS: Probe toolchain support of -msym32 [+ + +]
Author: Jiaxun Yang <[email protected]>
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 <[email protected]>
    Signed-off-by: Thomas Bogendoerfer <[email protected]>
    Signed-off-by: WangYuli <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mm: vmscan: account for free pages to prevent infinite Loop in throttle_direct_reclaim() [+ + +]
Author: Seiji Nishikawa <[email protected]>
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.
    
    [[email protected]: coding-style cleanups]
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 5a1c84b404a7 ("mm: remove reclaim and compaction retry approximations")
    Signed-off-by: Seiji Nishikawa <[email protected]>
    Cc: Mel Gorman <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mmc: sdhci-tegra: Remove SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC quirk [+ + +]
Author: Prathamesh Shete <[email protected]>
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: [email protected]
    Signed-off-by: Prathamesh Shete <[email protected]>
    Acked-by: Thierry Reding <[email protected]>
    Acked-by: Adrian Hunter <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
modpost: fix input MODULE_DEVICE_TABLE() built for 64-bit on 32-bit host [+ + +]
Author: Masahiro Yamada <[email protected]>
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 <[email protected]>
    Stable-dep-of: bf36b4bf1b9a ("modpost: fix the missed iteration for the max bit in do_input()")
    Signed-off-by: Sasha Levin <[email protected]>

modpost: fix the missed iteration for the max bit in do_input() [+ + +]
Author: Masahiro Yamada <[email protected]>
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 <[email protected]>
    Tested-by: John Paul Adrian Glaubitz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mtd: diskonchip: Cast an operand to prevent potential overflow [+ + +]
Author: Zichen Xie <[email protected]>
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 <[email protected]>
    Cc: [email protected]
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mtd: rawnand: fix double free in atmel_pmecc_create_user() [+ + +]
Author: Dan Carpenter <[email protected]>
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 <[email protected]>
    Signed-off-by: Miquel Raynal <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net/mlx5: Make API mlx5_core_is_ecpf accept const pointer [+ + +]
Author: Parav Pandit <[email protected]>
Date:   Fri Nov 20 15:03:36 2020 -0800

    net/mlx5: Make API mlx5_core_is_ecpf accept const pointer
    
    [ Upstream commit 3b1e58aa832ed537289be6a51a2015309688a90c ]
    
    Subsequent patch implements helper API which has mlx5_core_dev
    as const pointer, make its caller API too const *.
    
    Signed-off-by: Parav Pandit <[email protected]>
    Reviewed-by: Bodong Wang <[email protected]>
    Signed-off-by: Saeed Mahameed <[email protected]>
    Stable-dep-of: e05feab22fd7 ("RDMA/mlx5: Enforce same type port association for multiport RoCE")
    Signed-off-by: Sasha Levin <[email protected]>

 
net/sctp: Prevent autoclose integer overflow in sctp_association_init() [+ + +]
Author: Nikolay Kuratov <[email protected]>
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: [email protected]
    Fixes: 9f70f46bd4c7 ("sctp: properly latch and use autoclose value from sock to association")
    Signed-off-by: Nikolay Kuratov <[email protected]>
    Acked-by: Xin Long <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net/smc: check sndbuf_space again after NOSPACE flag is set in smc_poll [+ + +]
Author: Guangguan Wang <[email protected]>
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 <[email protected]>
    Suggested-by: Paolo Abeni <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net: ethernet: bgmac-platform: fix an OF node reference leak [+ + +]
Author: Joe Hattori <[email protected]>
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 <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: hinic: Fix cleanup in create_rxqs/txqs() [+ + +]
Author: Dan Carpenter <[email protected]>
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 <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: llc: reset skb->transport_header [+ + +]
Author: Antonio Pastor <[email protected]>
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 <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: sched: fix ordering of qlen adjustment [+ + +]
Author: Lion Ackermann <[email protected]>
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 <[email protected]>
    Acked-by: Toke Høiland-Jørgensen <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Cc: Artem Metla <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
net: usb: qmi_wwan: add Telit FE910C04 compositions [+ + +]
Author: Daniele Palmas <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
netfilter: ipset: Fix for recursive locking warning [+ + +]
Author: Phil Sutter <[email protected]>
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 <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nft_set_hash: unaligned atomic read on struct nft_set_ext [+ + +]
Author: Pablo Neira Ayuso <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: Replace zero-length array with flexible-array member [+ + +]
Author: Gustavo A. R. Silva <[email protected]>
Date:   Thu Feb 20 07:59:14 2020 -0600

    netfilter: Replace zero-length array with flexible-array member
    
    [ Upstream commit 6daf14140129d30207ed6a0a69851fa6a3636bda ]
    
    The current codebase makes use of the zero-length array language
    extension to the C90 standard, but the preferred mechanism to declare
    variable-length types such as these ones is a flexible array member[1][2],
    introduced in C99:
    
    struct foo {
            int stuff;
            struct boo array[];
    };
    
    By making use of the mechanism above, we will get a compiler warning
    in case the flexible array does not occur last in the structure, which
    will help us prevent some kind of undefined behavior bugs from being
    inadvertently introduced[3] to the codebase from now on.
    
    Also, notice that, dynamic memory allocations won't be affected by
    this change:
    
    "Flexible array members have incomplete type, and so the sizeof operator
    may not be applied. As a quirk of the original implementation of
    zero-length arrays, sizeof evaluates to zero."[1]
    
    Lastly, fix checkpatch.pl warning
    WARNING: __aligned(size) is preferred over __attribute__((aligned(size)))
    in net/bridge/netfilter/ebtables.c
    
    This issue was found with the help of Coccinelle.
    
    [1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
    [2] https://github.com/KSPP/linux/issues/21
    [3] commit 76497732932f ("cxgb3/l2t: Fix undefined behaviour")
    
    Signed-off-by: Gustavo A. R. Silva <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Stable-dep-of: 542ed8145e6f ("netfilter: nft_set_hash: unaligned atomic read on struct nft_set_ext")
    Signed-off-by: Sasha Levin <[email protected]>

 
netrom: check buffer length before accessing it [+ + +]
Author: Ilya Shchipletsov <[email protected]>
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 <[email protected]>
    Signed-off-by: Nikita Marushkin <[email protected]>
    Signed-off-by: Ilya Shchipletsov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
NFS/pnfs: Fix a live lock between recalled layouts and layoutget [+ + +]
Author: Trond Myklebust <[email protected]>
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: [email protected]
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nfsd: restore callback functionality for NFSv4.0 [+ + +]
Author: NeilBrown <[email protected]>
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 <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nilfs2: prevent use of deleted inode [+ + +]
Author: Edward Adam Davis <[email protected]>
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/[email protected]
    Fixes: d25006523d0b ("nilfs2: pathname operations")
    Signed-off-by: Ryusuke Konishi <[email protected]>
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=9260555647a5132edd48
    Tested-by: [email protected]
    Signed-off-by: Edward Adam Davis <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
of/irq: Fix using uninitialized variable @addr_len in API of_irq_parse_one() [+ + +]
Author: Zijun Hu <[email protected]>
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: [email protected]
    Signed-off-by: Zijun Hu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Rob Herring (Arm) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
of: Fix error path in of_parse_phandle_with_args_map() [+ + +]
Author: Herve Codina <[email protected]>
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: [email protected]
    Signed-off-by: Herve Codina <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Rob Herring (Arm) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

of: Fix refcount leakage for OF node returned by __of_get_dma_parent() [+ + +]
Author: Zijun Hu <[email protected]>
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: [email protected]
    Signed-off-by: Zijun Hu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Rob Herring (Arm) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
PCI/AER: Disable AER service on suspend [+ + +]
Author: Kai-Heng Feng <[email protected]>
Date:   Sun Jul 28 12:10:24 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/[email protected]
    Signed-off-by: Kai-Heng Feng <[email protected]>
    [bhelgaas: drop pci_ancestor_pr3_present() etc, commit log]
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
PCI: Add ACS quirk for Broadcom BCM5760X NIC [+ + +]
Author: Ajit Khaparde <[email protected]>
Date:   Sun Jul 28 12:10:21 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/[email protected]
    Signed-off-by: Ajit Khaparde <[email protected]>
    Signed-off-by: Krzysztof Wilczyński <[email protected]>
    Signed-off-by: Bjorn Helgaas <[email protected]>
    Reviewed-by: Andy Gospodarek <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
phy: core: Fix an OF node refcount leakage in _of_phy_get() [+ + +]
Author: Zijun Hu <[email protected]>
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: [email protected]
    Reviewed-by: Johan Hovold <[email protected]>
    Signed-off-by: Zijun Hu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

phy: core: Fix an OF node refcount leakage in of_phy_provider_lookup() [+ + +]
Author: Zijun Hu <[email protected]>
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: [email protected]
    Reviewed-by: Johan Hovold <[email protected]>
    Signed-off-by: Zijun Hu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

phy: core: Fix that API devm_phy_destroy() fails to destroy the phy [+ + +]
Author: Zijun Hu <[email protected]>
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 <[email protected]>
    Signed-off-by: Zijun Hu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

phy: core: Fix that API devm_phy_put() fails to release the phy [+ + +]
Author: Zijun Hu <[email protected]>
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: [email protected]
    Cc: Lorenzo Pieralisi <[email protected]>
    Cc: Krzysztof Wilczyński <[email protected]>
    Cc: Bjorn Helgaas <[email protected]>
    Cc: David S. Miller <[email protected]>
    Cc: Eric Dumazet <[email protected]>
    Cc: Jakub Kicinski <[email protected]>
    Cc: Paolo Abeni <[email protected]>
    Reviewed-by: Johan Hovold <[email protected]>
    Signed-off-by: Zijun Hu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
pinctrl: mcp23s08: Fix sleeping in atomic context due to regmap locking [+ + +]
Author: Evgenii Shatokhin <[email protected]>
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: [email protected]
    Signed-off-by: Evgenii Shatokhin <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
platform/x86: asus-nb-wmi: Ignore unknown event 0xCF [+ + +]
Author: Armin Wolf <[email protected]>
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 <[email protected]>
    Closes: https://lore.kernel.org/platform-driver-x86/[email protected]
    Signed-off-by: Armin Wolf <[email protected]>
    Reviewed-by: Hans de Goede <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/bnxt_re: Add check for path mtu in modify_qp [+ + +]
Author: Saravanan Vajravel <[email protected]>
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 <[email protected]>
    Signed-off-by: Saravanan Vajravel <[email protected]>
    Signed-off-by: Selvin Xavier <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

RDMA/bnxt_re: Fix max_qp_wrs reported [+ + +]
Author: Selvin Xavier <[email protected]>
Date:   Mon Nov 30 05:13:06 2020 -0800

    RDMA/bnxt_re: Fix max_qp_wrs reported
    
    [ Upstream commit c63e1c4dfc33d1bdae395ee8fbcbfad4830b12c0 ]
    
    While creating qps, the 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.
    
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Devesh Sharma <[email protected]>
    Signed-off-by: Selvin Xavier <[email protected]>
    Signed-off-by: Jason Gunthorpe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

RDMA/bnxt_re: Fix reporting hw_ver in query_device [+ + +]
Author: Kalesh AP <[email protected]>
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 <[email protected]>
    Signed-off-by: Kalesh AP <[email protected]>
    Signed-off-by: Selvin Xavier <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/mlx5: Enforce same type port association for multiport RoCE [+ + +]
Author: Patrisious Haddad <[email protected]>
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 <[email protected]>
    Signed-off-by: Patrisious Haddad <[email protected]>
    Link: https://patch.msgid.link/88699500f690dff1c1852c1ddb71f8a1cc8b956e.1733233480.git.leonro@nvidia.com
    Reviewed-by: Mateusz Polchlopek <[email protected]>
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/uverbs: Prevent integer overflow issue [+ + +]
Author: Dan Carpenter <[email protected]>
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: [email protected]
    Signed-off-by: Dan Carpenter <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
regmap: Use correct format specifier for logging range errors [+ + +]
Author: Mark Brown <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
scsi: megaraid_sas: Fix for a potential deadlock [+ + +]
Author: Tomas Henzl <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Acked-by: Chandrakanth Patil <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: mpt3sas: Diag-Reset when Doorbell-In-Use bit is set during driver load time [+ + +]
Author: Ranjan Kumar <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: qla1280: Fix hw revision numbering for ISP1020/1040 [+ + +]
Author: Magnus Lindholm <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
selinux: ignore unknown extended permissions [+ + +]
Author: Thiébaud Weksteen <[email protected]>
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: [email protected]
    Fixes: fa1aa143ac4a ("selinux: extended permissions for ioctls")
    Signed-off-by: Thiébaud Weksteen <[email protected]>
    Signed-off-by: Paul Moore <[email protected]>
    Acked-by: Paul Moore <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sh: clk: Fix clk_enable() to return 0 on NULL clk [+ + +]
Author: Geert Uytterhoeven <[email protected]>
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 <[email protected]>
    Signed-off-by: Geert Uytterhoeven <[email protected]>
    Tested-by: John Paul Adrian Glaubitz <[email protected]>
    Acked-by: Stephen Boyd <[email protected]>
    Link: https://lore.kernel.org/r/b53e6b557b4240579933b3359dda335ff94ed5af.1675354849.git.geert+renesas@glider.be
    Signed-off-by: John Paul Adrian Glaubitz <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Linux: skb_expand_head() adjust skb->truesize incorrectly [+ + +]
Author: Vasily Averin <[email protected]>
Date:   Fri Oct 22 13:28:37 2021 +0300

    skb_expand_head() adjust skb->truesize incorrectly
    
    commit 7f678def99d29c520418607509bb19c7fc96a6db upstream.
    
    Christoph Paasch reports [1] about incorrect skb->truesize
    after skb_expand_head() call in ip6_xmit.
    This may happen because of two reasons:
    - skb_set_owner_w() for newly cloned skb is called too early,
    before pskb_expand_head() where truesize is adjusted for (!skb-sk) case.
    - pskb_expand_head() does not adjust truesize in (skb->sk) case.
    In this case sk->sk_wmem_alloc should be adjusted too.
    
    [1] https://lkml.org/lkml/2021/8/20/1082
    
    Fixes: f1260ff15a71 ("skbuff: introduce skb_expand_head()")
    Fixes: 2d85a1b31dde ("ipv6: ip6_finish_output2: set sk into newly allocated nskb")
    Reported-by: Christoph Paasch <[email protected]>
    Signed-off-by: Vasily Averin <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
skbuff: introduce skb_expand_head() [+ + +]
Author: Vasily Averin <[email protected]>
Date:   Tue Dec 24 21:16:21 2024 -0800

    skbuff: introduce skb_expand_head()
    
    [ Upstream commit f1260ff15a71b8fc122b2c9abd8a7abffb6e0168 ]
    
    Like skb_realloc_headroom(), new helper increases headroom of specified skb.
    Unlike skb_realloc_headroom(), it does not allocate a new skb if possible;
    copies skb->sk on new skb when as needed and frees original skb in case
    of failures.
    
    This helps to simplify ip[6]_finish_output2() and a few other similar cases.
    
    Signed-off-by: Vasily Averin <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    (cherry picked from commit f1260ff15a71b8fc122b2c9abd8a7abffb6e0168)
    Signed-off-by: Harshvardhan Jha <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
sky2: Add device ID 11ab:4373 for Marvell 88E8075 [+ + +]
Author: Pascal Hambourg <[email protected]>
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 <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sound: usb: format: don't warn that raw DSD is unsupported [+ + +]
Author: Adrian Ratiu <[email protected]>
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 <[email protected]>
    Signed-off-by: Adrian Ratiu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tracing/kprobe: Make trace_kprobe's module callback called after jump_label update [+ + +]
Author: Masami Hiramatsu (Google) <[email protected]>
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) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tracing: Constify string literal data member in struct trace_event_call [+ + +]
Author: Christian Göttsche <[email protected]>
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: [email protected]
    Cc: Masami Hiramatsu <[email protected]>
    Cc: Mathieu Desnoyers <[email protected]>
    Cc: Mickaël Salaün <[email protected]>
    Cc: Günther Noack <[email protected]>
    Cc: Nathan Chancellor <[email protected]>
    Cc: Nick Desaulniers <[email protected]>
    Cc: Bill Wendling <[email protected]>
    Cc: Justin Stitt <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Fixes: b77e38aa240c3 ("tracing: add event trace infrastructure")
    Signed-off-by: Christian Göttsche <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
udmabuf: also check for F_SEAL_FUTURE_WRITE [+ + +]
Author: Jann Horn <[email protected]>
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: [email protected]
    Acked-by: Vivek Kasireddy <[email protected]>
    Signed-off-by: Jann Horn <[email protected]>
    Reviewed-by: Joel Fernandes (Google) <[email protected]>
    Signed-off-by: Vivek Kasireddy <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usb: dwc2: gadget: Don't write invalid mapped sg entries into dma_desc with iommu enabled [+ + +]
Author: Peng Hongchi <[email protected]>
Date:   Sun Jul 28 12:10:22 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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
USB: serial: option: add MediaTek T7XX compositions [+ + +]
Author: Jack Wu <[email protected]>
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 <[email protected]>
    Cc: [email protected]
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: option: add MeiG Smart SLM770A [+ + +]
Author: Michal Hrusecky <[email protected]>
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 <[email protected]>
    Cc: [email protected]
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: option: add Netprisma LCUK54 modules for WWAN Ready [+ + +]
Author: Mank Wang <[email protected]>
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 <[email protected]>
    [ johan: use lower case hex notation ]
    Cc: [email protected]
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: option: add TCL IK512 MBIM & ECM [+ + +]
Author: Daniel Swanemar <[email protected]>
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 <[email protected]>
    Cc: [email protected]
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: option: add Telit FE910C04 rmnet compositions [+ + +]
Author: Daniele Palmas <[email protected]>
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 <[email protected]>
    Cc: [email protected]
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
virtio-blk: don't keep queue frozen during system suspend [+ + +]
Author: Ming Lei <[email protected]>
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/[email protected]/
    
    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 <[email protected]>
    Cc: Michael S. Tsirkin <[email protected]>
    Cc: Jason Wang <[email protected]>
    Cc: Stefan Hajnoczi <[email protected]>
    Cc: [email protected]
    Reported-by: Marek Szyprowski <[email protected]>
    Signed-off-by: Ming Lei <[email protected]>
    Acked-by: Stefan Hajnoczi <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
wifi: mac80211: wake the queues in case of failure in resume [+ + +]
Author: Emmanuel Grumbach <[email protected]>
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 <[email protected]>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219447
    Signed-off-by: Miri Korenblit <[email protected]>
    Link: https://patch.msgid.link/20241119173108.cd628f560f97.I76a15fdb92de450e5329940125f3c58916be3942@changeid
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
zram: refuse to use zero sized block device as backing device [+ + +]
Author: Kairui Song <[email protected]>
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/[email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 013bf95a83ec ("zram: add interface to specif backing device")
    Signed-off-by: Kairui Song <[email protected]>
    Reported-by: Desheng Wu <[email protected]>
    Reviewed-by: Sergey Senozhatsky <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>