Skip to content
  1. Feb 02, 2022
    • Florian Westphal's avatar
      netfilter: conntrack: don't increment invalid counter on NF_REPEAT · 1af995c9
      Florian Westphal authored
      [ Upstream commit 830af2eb ]
      
      The packet isn't invalid, REPEAT means we're trying again after cleaning
      out a stale connection, e.g. via tcp tracker.
      
      This caused increases of invalid stat counter in a test case involving
      frequent connection reuse, even though no packet is actually invalid.
      
      Fixes: 56a62e22
      
       ("netfilter: conntrack: fix NF_REPEAT handling")
      Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1af995c9
    • Naveen N. Rao's avatar
      powerpc64/bpf: Limit 'ldbrx' to processors compliant with ISA v2.06 · 129c7182
      Naveen N. Rao authored
      [ Upstream commit 3f5f766d ]
      
      Johan reported the below crash with test_bpf on ppc64 e5500:
      
        test_bpf: #296 ALU_END_FROM_LE 64: 0x0123456789abcdef -> 0x67452301 jited:1
        Oops: Exception in kernel mode, sig: 4 [#1]
        BE PAGE_SIZE=4K SMP NR_CPUS=24 QEMU e500
        Modules linked in: test_bpf(+)
        CPU: 0 PID: 76 Comm: insmod Not tainted 5.14.0-03771-g98c2059e008a-dirty #1
        NIP:  8000000000061c3c LR: 80000000006dea64 CTR: 8000000000061c18
        REGS: c0000000032d3420 TRAP: 0700   Not tainted (5.14.0-03771-g98c2059e008a-dirty)
        MSR:  0000000080089000 <EE,ME>  CR: 88002822  XER: 20000000 IRQMASK: 0
        <...>
        NIP [8000000000061c3c] 0x8000000000061c3c
        LR [80000000006dea64] .__run_one+0x104/0x17c [test_bpf]
        Call Trace:
         .__run_one+0x60/0x17c [test_bpf] (unreliable)
         .test_bpf_init+0x6a8/0xdc8 [test_bpf]
         .do_one_initcall+0x6c/0x28c
         .do_init_module+0x68/0x28c
         .load_module+0x2460/0x2abc
         .__do_sys_init_module+0x120/0x18c
         .system_call_exception+0x110/0x1b8
         system_call_common+0xf0/0x210
        --- interrupt: c00 at 0x101d0acc
        <...>
        ---[ end trace 47b2bf19090bb3d0 ]---
      
        Illegal instruction
      
      The illegal instruction turned out to be 'ldbrx' emitted for
      BPF_FROM_[L|B]E, which was only introduced in ISA v2.06. Guard use of
      the same and implement an alternative approach for older processors.
      
      Fixes: 156d0e29
      
       ("powerpc/ebpf/jit: Implement JIT compiler for extended BPF")
      Reported-by: default avatarJohan Almbladh <johan.almbladh@anyfinetworks.com>
      Signed-off-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
      Tested-by: default avatarJohan Almbladh <johan.almbladh@anyfinetworks.com>
      Acked-by: default avatarJohan Almbladh <johan.almbladh@anyfinetworks.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/d1e51c6fdf572062cf3009a751c3406bda01b832.1641468127.git.naveen.n.rao@linux.vnet.ibm.com
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      129c7182
    • Trond Myklebust's avatar
      NFS: Ensure the server has an up to date ctime before renaming · 7a32824f
      Trond Myklebust authored
      [ Upstream commit 6ff9d99b ]
      
      Renaming a file is required by POSIX to update the file ctime, so
      ensure that the file data is synced to disk so that we don't clobber the
      updated ctime by writing back after creating the hard link.
      
      Fixes: f2c2c552
      
       ("NFS: Move delegation recall into the NFSv4 callback for rename_setup()")
      Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
      Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7a32824f
    • Trond Myklebust's avatar
      NFS: Ensure the server has an up to date ctime before hardlinking · 666f6ab8
      Trond Myklebust authored
      [ Upstream commit 20497503 ]
      
      Creating a hard link is required by POSIX to update the file ctime, so
      ensure that the file data is synced to disk so that we don't clobber the
      updated ctime by writing back after creating the hard link.
      
      Fixes: 9f768272
      
       ("NFS: Move the delegation return down into nfs4_proc_link()")
      Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
      Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      666f6ab8
    • Eric Dumazet's avatar
      ipv6: annotate accesses to fn->fn_sernum · 4cd0ef62
      Eric Dumazet authored
      commit aafc2e32 upstream.
      
      struct fib6_node's fn_sernum field can be
      read while other threads change it.
      
      Add READ_ONCE()/WRITE_ONCE() annotations.
      
      Do not change existing smp barriers in fib6_get_cookie_safe()
      and __fib6_update_sernum_upto_root()
      
      syzbot reported:
      
      BUG: KCSAN: data-race in fib6_clean_node / inet6_csk_route_socket
      
      write to 0xffff88813df62e2c of 4 bytes by task 1920 on cpu 1:
       fib6_clean_node+0xc2/0x260 net/ipv6/ip6_fib.c:2178
       fib6_walk_continue+0x38e/0x430 net/ipv6/ip6_fib.c:2112
       fib6_walk net/ipv6/ip6_fib.c:2160 [inline]
       fib6_clean_tree net/ipv6/ip6_fib.c:2240 [inline]
       __fib6_clean_all+0x1a9/0x2e0 net/ipv6/ip6_fib.c:2256
       fib6_flush_trees+0x6c/0x80 net/ipv6/ip6_fib.c:2281
       rt_genid_bump_ipv6 include/net/net_namespace.h:488 [inline]
       addrconf_dad_completed+0x57f/0x870 net/ipv6/addrconf.c:4230
       addrconf_dad_work+0x908/0x1170
       process_one_work+0x3f6/0x960 kernel/workqueue.c:2307
       worker_thread+0x616/0xa70 kernel/workqueue.c:2454
       kthread+0x1bf/0x1e0 kernel/kthread.c:359
       ret_from_fork+0x1f/0x30
      
      read to 0xffff88813df62e2c of 4 bytes by task 15701 on cpu 0:
       fib6_get_cookie_safe include/net/ip6_fib.h:285 [inline]
       rt6_get_cookie include/net/ip6_fib.h:306 [inline]
       ip6_dst_store include/net/ip6_route.h:234 [inline]
       inet6_csk_route_socket+0x352/0x3c0 net/ipv6/inet6_connection_sock.c:109
       inet6_csk_xmit+0x91/0x1e0 net/ipv6/inet6_connection_sock.c:121
       __tcp_transmit_skb+0x1323/0x1840 net/ipv4/tcp_output.c:1402
       tcp_transmit_skb net/ipv4/tcp_output.c:1420 [inline]
       tcp_write_xmit+0x1450/0x4460 net/ipv4/tcp_output.c:2680
       __tcp_push_pending_frames+0x68/0x1c0 net/ipv4/tcp_output.c:2864
       tcp_push+0x2d9/0x2f0 net/ipv4/tcp.c:725
       mptcp_push_release net/mptcp/protocol.c:1491 [inline]
       __mptcp_push_pending+0x46c/0x490 net/mptcp/protocol.c:1578
       mptcp_sendmsg+0x9ec/0xa50 net/mptcp/protocol.c:1764
       inet6_sendmsg+0x5f/0x80 net/ipv6/af_inet6.c:643
       sock_sendmsg_nosec net/socket.c:705 [inline]
       sock_sendmsg net/socket.c:725 [inline]
       kernel_sendmsg+0x97/0xd0 net/socket.c:745
       sock_no_sendpage+0x84/0xb0 net/core/sock.c:3086
       inet_sendpage+0x9d/0xc0 net/ipv4/af_inet.c:834
       kernel_sendpage+0x187/0x200 net/socket.c:3492
       sock_sendpage+0x5a/0x70 net/socket.c:1007
       pipe_to_sendpage+0x128/0x160 fs/splice.c:364
       splice_from_pipe_feed fs/splice.c:418 [inline]
       __splice_from_pipe+0x207/0x500 fs/splice.c:562
       splice_from_pipe fs/splice.c:597 [inline]
       generic_splice_sendpage+0x94/0xd0 fs/splice.c:746
       do_splice_from fs/splice.c:767 [inline]
       direct_splice_actor+0x80/0xa0 fs/splice.c:936
       splice_direct_to_actor+0x345/0x650 fs/splice.c:891
       do_splice_direct+0x106/0x190 fs/splice.c:979
       do_sendfile+0x675/0xc40 fs/read_write.c:1245
       __do_sys_sendfile64 fs/read_write.c:1310 [inline]
       __se_sys_sendfile64 fs/read_write.c:1296 [inline]
       __x64_sys_sendfile64+0x102/0x140 fs/read_write.c:1296
       do_syscall_x64 arch/x86/entry/common.c:50 [inline]
       do_syscall_64+0x44/0xd0 arch/x86/entry/common.c:80
       entry_SYSCALL_64_after_hwframe+0x44/0xae
      
      value changed: 0x0000026f -> 0x00000271
      
      Reported by Kernel Concurrency Sanitizer on:
      CPU: 0 PID: 15701 Comm: syz-executor.2 Not tainted 5.16.0-syzkaller #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
      
      The Fixes tag I chose is probably arbitrary, I do not think
      we need to backport this patch to older kernels.
      
      Fixes: c5cff856
      
       ("ipv6: add rcu grace period before freeing fib6_node")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
      Link: https://lore.kernel.org/r/20220120174112.1126644-1-eric.dumazet@gmail.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4cd0ef62
    • José Expósito's avatar
      drm/msm/dsi: invalid parameter check in msm_dsi_phy_enable · 79c0b528
      José Expósito authored
      commit 5e761a22 upstream.
      
      The function performs a check on the "phy" input parameter, however, it
      is used before the check.
      
      Initialize the "dev" variable after the sanity check to avoid a possible
      NULL pointer dereference.
      
      Fixes: 5c829028
      
       ("drm/msm/dsi: Split PHY drivers to separate files")
      Addresses-Coverity-ID: 1493860 ("Null pointer dereference")
      Signed-off-by: default avatarJosé Expósito <jose.exposito89@gmail.com>
      Reviewed-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
      Link: https://lore.kernel.org/r/20220116181844.7400-1-jose.exposito89@gmail.com
      Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      79c0b528
    • Miaoqian Lin's avatar
      drm/msm/dsi: Fix missing put_device() call in dsi_get_phy · 3ab44a40
      Miaoqian Lin authored
      commit c04c3148 upstream.
      
      If of_find_device_by_node() succeeds, dsi_get_phy() doesn't
      a corresponding put_device(). Thus add put_device() to fix the exception
      handling.
      
      Fixes: ec31abf6
      
       ("drm/msm/dsi: Separate PHY to another platform device")
      Signed-off-by: default avatarMiaoqian Lin <linmq006@gmail.com>
      Reviewed-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
      Link: https://lore.kernel.org/r/20211230070943.18116-1-linmq006@gmail.com
      Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3ab44a40
    • Xianting Tian's avatar
      drm/msm: Fix wrong size calculation · 82c310d0
      Xianting Tian authored
      commit 0a727b45
      
       upstream.
      
      For example, memory-region in .dts as below,
      	reg = <0x0 0x50000000 0x0 0x20000000>
      
      We can get below values,
      struct resource r;
      r.start = 0x50000000;
      r.end	= 0x6fffffff;
      
      So the size should be:
      size = r.end - r.start + 1 = 0x20000000
      
      Signed-off-by: default avatarXianting Tian <xianting.tian@linux.alibaba.com>
      Fixes: 072f1f91
      
       ("drm/msm: add support for "stolen" mem")
      Reviewed-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
      Link: https://lore.kernel.org/r/20220112123334.749776-1-xianting.tian@linux.alibaba.com
      Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      82c310d0
    • Jianguo Wu's avatar
      net-procfs: show net devices bound packet types · f57a99c9
      Jianguo Wu authored
      commit 1d10f8a1 upstream.
      
      After commit:7866a621 ("dev: add per net_device packet type chains"),
      we can not get packet types that are bound to a specified net device by
      /proc/net/ptype, this patch fix the regression.
      
      Run "tcpdump -i ens192 udp -nns0" Before and after apply this patch:
      
      Before:
        [root@localhost ~]# cat /proc/net/ptype
        Type Device      Function
        0800          ip_rcv
        0806          arp_rcv
        86dd          ipv6_rcv
      
      After:
        [root@localhost ~]# cat /proc/net/ptype
        Type Device      Function
        ALL  ens192   tpacket_rcv
        0800          ip_rcv
        0806          arp_rcv
        86dd          ipv6_rcv
      
      v1 -> v2:
        - fix the regression rather than adding new /proc API as
          suggested by Stephen Hemminger.
      
      Fixes: 7866a621
      
       ("dev: add per net_device packet type chains")
      Signed-off-by: default avatarJianguo Wu <wujianguo@chinatelecom.cn>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f57a99c9
    • Trond Myklebust's avatar
      NFSv4: nfs_atomic_open() can race when looking up a non-regular file · 87880e38
      Trond Myklebust authored
      commit 1751fc1d upstream.
      
      If the file type changes back to being a regular file on the server
      between the failed OPEN and our LOOKUP, then we need to re-run the OPEN.
      
      Fixes: 0dd2b474
      
       ("nfs: implement i_op->atomic_open()")
      Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
      Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      87880e38
    • Trond Myklebust's avatar
      NFSv4: Handle case where the lookup of a directory fails · ce8c552b
      Trond Myklebust authored
      commit ac795161
      
       upstream.
      
      If the application sets the O_DIRECTORY flag, and tries to open a
      regular file, nfs_atomic_open() will punt to doing a regular lookup.
      If the server then returns a regular file, we will happily return a
      file descriptor with uninitialised open state.
      
      The fix is to return the expected ENOTDIR error in these cases.
      
      Reported-by: default avatarLyu Tao <tao.lyu@epfl.ch>
      Fixes: 0dd2b474
      
       ("nfs: implement i_op->atomic_open()")
      Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
      Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ce8c552b
    • Guenter Roeck's avatar
      hwmon: (lm90) Reduce maximum conversion rate for G781 · b48a05ce
      Guenter Roeck authored
      [ Upstream commit a66c5ed5 ]
      
      According to its datasheet, G781 supports a maximum conversion rate value
      of 8 (62.5 ms). However, chips labeled G781 and G780 were found to only
      support a maximum conversion rate value of 7 (125 ms). On the other side,
      chips labeled G781-1 and G784 were found to support a conversion rate value
      of 8. There is no known means to distinguish G780 from G781 or G784; all
      chips report the same manufacturer ID and chip revision.
      Setting the conversion rate register value to 8 on chips not supporting
      it causes unexpected behavior since the real conversion rate is set to 0
      (16 seconds) if a value of 8 is written into the conversion rate register.
      Limit the conversion rate register value to 7 for all G78x chips to avoid
      the problem.
      
      Fixes: ae544f64
      
       ("hwmon: (lm90) Add support for GMT G781")
      Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b48a05ce
    • Eric Dumazet's avatar
      ipv4: avoid using shared IP generator for connected sockets · b26fed25
      Eric Dumazet authored
      commit 23f57406 upstream.
      
      ip_select_ident_segs() has been very conservative about using
      the connected socket private generator only for packets with IP_DF
      set, claiming it was needed for some VJ compression implementations.
      
      As mentioned in this referenced document, this can be abused.
      (Ref: Off-Path TCP Exploits of the Mixed IPID Assignment)
      
      Before switching to pure random IPID generation and possibly hurt
      some workloads, lets use the private inet socket generator.
      
      Not only this will remove one vulnerability, this will also
      improve performance of TCP flows using pmtudisc==IP_PMTUDISC_DONT
      
      Fixes: 73f156a6
      
       ("inetpeer: get rid of ip_id_count")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
      Reported-by: default avatarRay Che <xijiache@gmail.com>
      Cc: Willy Tarreau <w@1wt.eu>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b26fed25
    • Xin Long's avatar
      ping: fix the sk_bound_dev_if match in ping_lookup · 283aa5a5
      Xin Long authored
      commit 2afc3b5a upstream.
      
      When 'ping' changes to use PING socket instead of RAW socket by:
      
         # sysctl -w net.ipv4.ping_group_range="0 100"
      
      the selftests 'router_broadcast.sh' will fail, as such command
      
        # ip vrf exec vrf-h1 ping -I veth0 198.51.100.255 -b
      
      can't receive the response skb by the PING socket. It's caused by mismatch
      of sk_bound_dev_if and dif in ping_rcv() when looking up the PING socket,
      as dif is vrf-h1 if dif's master was set to vrf-h1.
      
      This patch is to fix this regression by also checking the sk_bound_dev_if
      against sdif so that the packets can stil be received even if the socket
      is not bound to the vrf device but to the real iif.
      
      Fixes: c319b4d7
      
       ("net: ipv4: add IPPROTO_ICMP socket kind")
      Reported-by: default avatarHangbin Liu <liuhangbin@gmail.com>
      Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      283aa5a5
    • Guenter Roeck's avatar
      hwmon: (lm90) Mark alert as broken for MAX6680 · 7bcb0c19
      Guenter Roeck authored
      commit 94746b0b upstream.
      
      Experiments with MAX6680 and MAX6681 show that the alert function of those
      chips is broken, similar to other chips supported by the lm90 driver.
      Mark it accordingly.
      
      Fixes: 4667bcb8
      
       ("hwmon: (lm90) Introduce chip parameter structure")
      Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7bcb0c19
    • Guenter Roeck's avatar
      hwmon: (lm90) Mark alert as broken for MAX6646/6647/6649 · 925cbd59
      Guenter Roeck authored
      commit f614629f upstream.
      
      Experiments with MAX6646 and MAX6648 show that the alert function of those
      chips is broken, similar to other chips supported by the lm90 driver.
      Mark it accordingly.
      
      Fixes: 4667bcb8
      
       ("hwmon: (lm90) Introduce chip parameter structure")
      Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      925cbd59
    • Congyu Liu's avatar
      net: fix information leakage in /proc/net/ptype · db044d97
      Congyu Liu authored
      commit 47934e06 upstream.
      
      In one net namespace, after creating a packet socket without binding
      it to a device, users in other net namespaces can observe the new
      `packet_type` added by this packet socket by reading `/proc/net/ptype`
      file. This is minor information leakage as packet socket is
      namespace aware.
      
      Add a net pointer in `packet_type` to keep the net namespace of
      of corresponding packet socket. In `ptype_seq_show`, this net pointer
      must be checked when it is not NULL.
      
      Fixes: 2feb27db
      
       ("[NETNS]: Minor information leak via /proc/net/ptype file.")
      Signed-off-by: default avatarCongyu Liu <liu3101@purdue.edu>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      db044d97
    • Ido Schimmel's avatar
      ipv6_tunnel: Rate limit warning messages · feb770cc
      Ido Schimmel authored
      commit 6cee105e upstream.
      
      The warning messages can be invoked from the data path for every packet
      transmitted through an ip6gre netdev, leading to high CPU utilization.
      
      Fix that by rate limiting the messages.
      
      Fixes: 09c6bbf0
      
       ("[IPV6]: Do mandatory IPv6 tunnel endpoint checks in realtime")
      Reported-by: default avatarMaksym Yaremchuk <maksymy@nvidia.com>
      Tested-by: default avatarMaksym Yaremchuk <maksymy@nvidia.com>
      Signed-off-by: default avatarIdo Schimmel <idosch@nvidia.com>
      Reviewed-by: default avatarAmit Cohen <amcohen@nvidia.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      feb770cc
    • John Meneghini's avatar
      scsi: bnx2fc: Flush destroy_work queue before calling bnx2fc_interface_put() · 00849de1
      John Meneghini authored
      commit 847f9ea4 upstream.
      
      The bnx2fc_destroy() functions are removing the interface before calling
      destroy_work. This results multiple WARNings from sysfs_remove_group() as
      the controller rport device attributes are removed too early.
      
      Replace the fcoe_port's destroy_work queue. It's not needed.
      
      The problem is easily reproducible with the following steps.
      
      Example:
      
        $ dmesg -w &
        $ systemctl enable --now fcoe
        $ fipvlan -s -c ens2f1
        $ fcoeadm -d ens2f1.802
        [  583.464488] host2: libfc: Link down on port (7500a1)
        [  583.472651] bnx2fc: 7500a1 - rport not created Yet!!
        [  583.490468] ------------[ cut here ]------------
        [  583.538725] sysfs group 'power' not found for kobject 'rport-2:0-0'
        [  583.568814] WARNING: CPU: 3 PID: 192 at fs/sysfs/group.c:279 sysfs_remove_group+0x6f/0x80
        [  583.607130] Modules linked in: dm_service_time 8021q garp mrp stp llc bnx2fc cnic uio rpcsec_gss_krb5 auth_rpcgss nfsv4 ...
        [  583.942994] CPU: 3 PID: 192 Comm: kworker/3:2 Kdump: loaded Not tainted 5.14.0-39.el9.x86_64 #1
        [  583.984105] Hardware name: HP ProLiant DL120 G7, BIOS J01 07/01/2013
        [  584.016535] Workqueue: fc_wq_2 fc_rport_final_delete [scsi_transport_fc]
        [  584.050691] RIP: 0010:sysfs_remove_group+0x6f/0x80
        [  584.074725] Code: ff 5b 48 89 ef 5d 41 5c e9 ee c0 ff ff 48 89 ef e8 f6 b8 ff ff eb d1 49 8b 14 24 48 8b 33 48 c7 c7 ...
        [  584.162586] RSP: 0018:ffffb567c15afdc0 EFLAGS: 00010282
        [  584.188225] RAX: 0000000000000000 RBX: ffffffff8eec4220 RCX: 0000000000000000
        [  584.221053] RDX: ffff8c1586ce84c0 RSI: ffff8c1586cd7cc0 RDI: ffff8c1586cd7cc0
        [  584.255089] RBP: 0000000000000000 R08: 0000000000000000 R09: ffffb567c15afc00
        [  584.287954] R10: ffffb567c15afbf8 R11: ffffffff8fbe7f28 R12: ffff8c1486326400
        [  584.322356] R13: ffff8c1486326480 R14: ffff8c1483a4a000 R15: 0000000000000004
        [  584.355379] FS:  0000000000000000(0000) GS:ffff8c1586cc0000(0000) knlGS:0000000000000000
        [  584.394419] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
        [  584.421123] CR2: 00007fe95a6f7840 CR3: 0000000107674002 CR4: 00000000000606e0
        [  584.454888] Call Trace:
        [  584.466108]  device_del+0xb2/0x3e0
        [  584.481701]  device_unregister+0x13/0x60
        [  584.501306]  bsg_unregister_queue+0x5b/0x80
        [  584.522029]  bsg_remove_queue+0x1c/0x40
        [  584.541884]  fc_rport_final_delete+0xf3/0x1d0 [scsi_transport_fc]
        [  584.573823]  process_one_work+0x1e3/0x3b0
        [  584.592396]  worker_thread+0x50/0x3b0
        [  584.609256]  ? rescuer_thread+0x370/0x370
        [  584.628877]  kthread+0x149/0x170
        [  584.643673]  ? set_kthread_struct+0x40/0x40
        [  584.662909]  ret_from_fork+0x22/0x30
        [  584.680002] ---[ end trace 53575ecefa942ece ]---
      
      Link: https://lore.kernel.org/r/20220115040044.1013475-1-jmeneghi@redhat.com
      Fixes: 0cbf32e1
      
       ("[SCSI] bnx2fc: Avoid calling bnx2fc_if_destroy with unnecessary locks")
      Tested-by: default avatarGuangwu Zhang <guazhang@redhat.com>
      Co-developed-by: default avatarMaurizio Lombardi <mlombard@redhat.com>
      Signed-off-by: default avatarMaurizio Lombardi <mlombard@redhat.com>
      Signed-off-by: default avatarJohn Meneghini <jmeneghi@redhat.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      00849de1
    • Matthias Kaehlcke's avatar
      rpmsg: char: Fix race between the release of rpmsg_eptdev and cdev · fcaf94c4
      Matthias Kaehlcke authored
      commit 7a534ae8 upstream.
      
      struct rpmsg_eptdev contains a struct cdev. The current code frees
      the rpmsg_eptdev struct in rpmsg_eptdev_destroy(), but the cdev is
      a managed object, therefore its release is not predictable and the
      rpmsg_eptdev could be freed before the cdev is entirely released.
      
      The cdev_device_add/del() API was created to address this issue
      (see commit '233ed09d ("chardev: add helper function to register
      char devs with a struct device")'), use it instead of cdev add/del().
      
      Fixes: c0cdc19f
      
       ("rpmsg: Driver for user space endpoint interface")
      Suggested-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
      Signed-off-by: default avatarMatthias Kaehlcke <mka@chromium.org>
      Reviewed-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
      Reviewed-by: default avatarStephen Boyd <swboyd@chromium.org>
      Reviewed-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
      Signed-off-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
      Link: https://lore.kernel.org/r/20220110104706.v6.2.Idde68b05b88d4a2e6e54766c653f3a6d9e419ce6@changeid
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      fcaf94c4
    • Sujit Kautkar's avatar
      rpmsg: char: Fix race between the release of rpmsg_ctrldev and cdev · 1dbb2067
      Sujit Kautkar authored
      commit b7fb2dad upstream.
      
      struct rpmsg_ctrldev contains a struct cdev. The current code frees
      the rpmsg_ctrldev struct in rpmsg_ctrldev_release_device(), but the
      cdev is a managed object, therefore its release is not predictable
      and the rpmsg_ctrldev could be freed before the cdev is entirely
      released, as in the backtrace below.
      
      [   93.625603] ODEBUG: free active (active state 0) object type: timer_list hint: delayed_work_timer_fn+0x0/0x7c
      [   93.636115] WARNING: CPU: 0 PID: 12 at lib/debugobjects.c:488 debug_print_object+0x13c/0x1b0
      [   93.644799] Modules linked in: veth xt_cgroup xt_MASQUERADE rfcomm algif_hash algif_skcipher af_alg uinput ip6table_nat fuse uvcvideo videobuf2_vmalloc venus_enc venus_dec videobuf2_dma_contig hci_uart btandroid btqca snd_soc_rt5682_i2c bluetooth qcom_spmi_temp_alarm snd_soc_rt5682v
      [   93.715175] CPU: 0 PID: 12 Comm: kworker/0:1 Tainted: G    B             5.4.163-lockdep #26
      [   93.723855] Hardware name: Google Lazor (rev3 - 8) with LTE (DT)
      [   93.730055] Workqueue: events kobject_delayed_cleanup
      [   93.735271] pstate: 60c00009 (nZCv daif +PAN +UAO)
      [   93.740216] pc : debug_print_object+0x13c/0x1b0
      [   93.744890] lr : debug_print_object+0x13c/0x1b0
      [   93.749555] sp : ffffffacf5bc7940
      [   93.752978] x29: ffffffacf5bc7940 x28: dfffffd000000000
      [   93.758448] x27: ffffffacdb11a800 x26: dfffffd000000000
      [   93.763916] x25: ffffffd0734f856c x24: dfffffd000000000
      [   93.769389] x23: 0000000000000000 x22: ffffffd0733c35b0
      [   93.774860] x21: ffffffd0751994a0 x20: ffffffd075ec27c0
      [   93.780338] x19: ffffffd075199100 x18: 00000000000276e0
      [   93.785814] x17: 0000000000000000 x16: dfffffd000000000
      [   93.791291] x15: ffffffffffffffff x14: 6e6968207473696c
      [   93.796768] x13: 0000000000000000 x12: ffffffd075e2b000
      [   93.802244] x11: 0000000000000001 x10: 0000000000000000
      [   93.807723] x9 : d13400dff1921900 x8 : d13400dff1921900
      [   93.813200] x7 : 0000000000000000 x6 : 0000000000000000
      [   93.818676] x5 : 0000000000000080 x4 : 0000000000000000
      [   93.824152] x3 : ffffffd0732a0fa4 x2 : 0000000000000001
      [   93.829628] x1 : ffffffacf5bc7580 x0 : 0000000000000061
      [   93.835104] Call trace:
      [   93.837644]  debug_print_object+0x13c/0x1b0
      [   93.841963]  __debug_check_no_obj_freed+0x25c/0x3c0
      [   93.846987]  debug_check_no_obj_freed+0x18/0x20
      [   93.851669]  slab_free_freelist_hook+0xbc/0x1e4
      [   93.856346]  kfree+0xfc/0x2f4
      [   93.859416]  rpmsg_ctrldev_release_device+0x78/0xb8
      [   93.864445]  device_release+0x84/0x168
      [   93.868310]  kobject_cleanup+0x12c/0x298
      [   93.872356]  kobject_delayed_cleanup+0x10/0x18
      [   93.876948]  process_one_work+0x578/0x92c
      [   93.881086]  worker_thread+0x804/0xcf8
      [   93.884963]  kthread+0x2a8/0x314
      [   93.888303]  ret_from_fork+0x10/0x18
      
      The cdev_device_add/del() API was created to address this issue (see
      commit '233ed09d ("chardev: add helper function to register char
      devs with a struct device")'), use it instead of cdev add/del().
      
      Fixes: c0cdc19f
      
       ("rpmsg: Driver for user space endpoint interface")
      Signed-off-by: default avatarSujit Kautkar <sujitka@chromium.org>
      Signed-off-by: default avatarMatthias Kaehlcke <mka@chromium.org>
      Reviewed-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
      Reviewed-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
      Reviewed-by: default avatarStephen Boyd <swboyd@chromium.org>
      Signed-off-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
      Link: https://lore.kernel.org/r/20220110104706.v6.1.Iaac908f3e3149a89190ce006ba166e2d3fd247a3@changeid
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1dbb2067
    • Linyu Yuan's avatar
      usb: roles: fix include/linux/usb/role.h compile issue · 20f66758
      Linyu Yuan authored
      commit 945c37ed upstream.
      
      when CONFIG_USB_ROLE_SWITCH is not defined,
      add usb_role_switch_find_by_fwnode() definition which return NULL.
      
      Fixes: c6919d5e
      
       ("usb: roles: Add usb_role_switch_find_by_fwnode()")
      Signed-off-by: default avatarLinyu Yuan <quic_linyyuan@quicinc.com>
      Link: https://lore.kernel.org/r/1641818608-25039-1-git-send-email-quic_linyyuan@quicinc.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      20f66758
    • Joe Damato's avatar
      i40e: fix unsigned stat widths · 6aeff8a7
      Joe Damato authored
      commit 3b8428b8 upstream.
      
      Change i40e_update_vsi_stats and struct i40e_vsi to use u64 fields to match
      the width of the stats counters in struct i40e_rx_queue_stats.
      
      Update debugfs code to use the correct format specifier for u64.
      
      Fixes: 41c445ff
      
       ("i40e: main driver core")
      Signed-off-by: default avatarJoe Damato <jdamato@fastly.com>
      Reported-by: default avatarkernel test robot <lkp@intel.com>
      Tested-by: default avatarGurucharan G <gurucharanx.g@intel.com>
      Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6aeff8a7
    • Karen Sornek's avatar
      i40e: Fix for failed to init adminq while VF reset · d2ed5997
      Karen Sornek authored
      commit 0f344c81 upstream.
      
      Fix for failed to init adminq: -53 while VF is resetting via MAC
      address changing procedure.
      Added sync module to avoid reading deadbeef value in reinit adminq
      during software reset.
      Without this patch it is possible to trigger VF reset procedure
      during reinit adminq. This resulted in an incorrect reading of
      value from the AQP registers and generated the -53 error.
      
      Fixes: 5c3c48ac
      
       ("i40e: implement virtual device interface")
      Signed-off-by: default avatarGrzegorz Szczurek <grzegorzx.szczurek@intel.com>
      Signed-off-by: default avatarKaren Sornek <karen.sornek@intel.com>
      Tested-by: default avatarKonrad Jankowski <konrad0.jankowski@intel.com>
      Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d2ed5997
    • Sylwester Dziedziuch's avatar
      i40e: Fix queues reservation for XDP · 768eb705
      Sylwester Dziedziuch authored
      commit 92947844 upstream.
      
      When XDP was configured on a system with large number of CPUs
      and X722 NIC there was a call trace with NULL pointer dereference.
      
      i40e 0000:87:00.0: failed to get tracking for 256 queues for VSI 0 err -12
      i40e 0000:87:00.0: setup of MAIN VSI failed
      
      BUG: kernel NULL pointer dereference, address: 0000000000000000
      RIP: 0010:i40e_xdp+0xea/0x1b0 [i40e]
      Call Trace:
      ? i40e_reconfig_rss_queues+0x130/0x130 [i40e]
      dev_xdp_install+0x61/0xe0
      dev_xdp_attach+0x18a/0x4c0
      dev_change_xdp_fd+0x1e6/0x220
      do_setlink+0x616/0x1030
      ? ahci_port_stop+0x80/0x80
      ? ata_qc_issue+0x107/0x1e0
      ? lock_timer_base+0x61/0x80
      ? __mod_timer+0x202/0x380
      rtnl_setlink+0xe5/0x170
      ? bpf_lsm_binder_transaction+0x10/0x10
      ? security_capable+0x36/0x50
      rtnetlink_rcv_msg+0x121/0x350
      ? rtnl_calcit.isra.0+0x100/0x100
      netlink_rcv_skb+0x50/0xf0
      netlink_unicast+0x1d3/0x2a0
      netlink_sendmsg+0x22a/0x440
      sock_sendmsg+0x5e/0x60
      __sys_sendto+0xf0/0x160
      ? __sys_getsockname+0x7e/0xc0
      ? _copy_from_user+0x3c/0x80
      ? __sys_setsockopt+0xc8/0x1a0
      __x64_sys_sendto+0x20/0x30
      do_syscall_64+0x33/0x40
      entry_SYSCALL_64_after_hwframe+0x44/0xae
      RIP: 0033:0x7f83fa7a39e0
      
      This was caused by PF queue pile fragmentation due to
      flow director VSI queue being placed right after main VSI.
      Because of this main VSI was not able to resize its
      queue allocation for XDP resulting in no queues allocated
      for main VSI when XDP was turned on.
      
      Fix this by always allocating last queue in PF queue pile
      for a flow director VSI.
      
      Fixes: 41c445ff ("i40e: main driver core")
      Fixes: 74608d17
      
       ("i40e: add support for XDP_TX action")
      Signed-off-by: default avatarSylwester Dziedziuch <sylwesterx.dziedziuch@intel.com>
      Signed-off-by: default avatarMateusz Palczewski <mateusz.palczewski@intel.com>
      Reviewed-by: default avatarMaciej Fijalkowski <maciej.fijalkowski@intel.com>
      Tested-by: default avatarKiran Bhandare <kiranx.bhandare@intel.com>
      Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      768eb705
    • Jedrzej Jagielski's avatar
      i40e: Fix issue when maximum queues is exceeded · 39896710
      Jedrzej Jagielski authored
      commit d701658a upstream.
      
      Before this patch VF interface vanished when
      maximum queue number was exceeded. Driver tried
      to add next queues even if there was not enough
      space. PF sent incorrect number of queues to
      the VF when there were not enough of them.
      
      Add an additional condition introduced to check
      available space in 'qp_pile' before proceeding.
      This condition makes it impossible to add queues
      if they number is greater than the number resulting
      from available space.
      Also add the search for free space in PF queue
      pair piles.
      
      Without this patch VF interfaces are not seen
      when available space for queues has been
      exceeded and following logs appears permanently
      in dmesg:
      "Unable to get VF config (-32)".
      "VF 62 failed opcode 3, retval: -5"
      "Unable to get VF config due to PF error condition, not retrying"
      
      Fixes: 7daa6bf3 ("i40e: driver core headers")
      Fixes: 41c445ff
      
       ("i40e: main driver core")
      Signed-off-by: default avatarJaroslaw Gawin <jaroslawx.gawin@intel.com>
      Signed-off-by: default avatarSlawomir Laba <slawomirx.laba@intel.com>
      Signed-off-by: default avatarJedrzej Jagielski <jedrzej.jagielski@intel.com>
      Tested-by: default avatarKonrad Jankowski <konrad0.jankowski@intel.com>
      Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      39896710
    • Jedrzej Jagielski's avatar
      i40e: Increase delay to 1 s after global EMP reset · 9068bcb2
      Jedrzej Jagielski authored
      commit 9b13bd53 upstream.
      
      Recently simplified i40e_rebuild causes that FW sometimes
      is not ready after NVM update, the ping does not return.
      
      Increase the delay in case of EMP reset.
      Old delay of 300 ms was introduced for specific cards for 710 series.
      Now it works for all the cards and delay was increased.
      
      Fixes: 1fa51a65
      
       ("i40e: Add delay after EMP reset for firmware to recover")
      Signed-off-by: default avatarArkadiusz Kubalewski <arkadiusz.kubalewski@intel.com>
      Signed-off-by: default avatarJedrzej Jagielski <jedrzej.jagielski@intel.com>
      Tested-by: default avatarGurucharan G <gurucharanx.g@intel.com>
      Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9068bcb2
    • Christophe Leroy's avatar
      powerpc/32: Fix boot failure with GCC latent entropy plugin · b4c9b6af
      Christophe Leroy authored
      commit bba49665 upstream.
      
      Boot fails with GCC latent entropy plugin enabled.
      
      This is due to early boot functions trying to access 'latent_entropy'
      global data while the kernel is not relocated at its final
      destination yet.
      
      As there is no way to tell GCC to use PTRRELOC() to access it,
      disable latent entropy plugin in early_32.o and feature-fixups.o and
      code-patching.o
      
      Fixes: 38addce8
      
       ("gcc-plugins: Add latent_entropy plugin")
      Cc: stable@vger.kernel.org # v4.9+
      Reported-by: default avatarErhard Furtner <erhard_f@mailbox.org>
      Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=215217
      Link: https://lore.kernel.org/r/2bac55483b8daf5b1caa163a45fa5f9cdbe18be4.1640178426.git.christophe.leroy@csgroup.eu
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b4c9b6af
    • Christophe Leroy's avatar
      powerpc/32s: Fix kasan_init_region() for KASAN · 50f5d0a8
      Christophe Leroy authored
      commit d37823c3 upstream.
      
      It has been reported some configuration where the kernel doesn't
      boot with KASAN enabled.
      
      This is due to wrong BAT allocation for the KASAN area:
      
      	---[ Data Block Address Translation ]---
      	0: 0xc0000000-0xcfffffff 0x00000000       256M Kernel rw      m
      	1: 0xd0000000-0xdfffffff 0x10000000       256M Kernel rw      m
      	2: 0xe0000000-0xefffffff 0x20000000       256M Kernel rw      m
      	3: 0xf8000000-0xf9ffffff 0x2a000000        32M Kernel rw      m
      	4: 0xfa000000-0xfdffffff 0x2c000000        64M Kernel rw      m
      
      A BAT must have both virtual and physical addresses alignment matching
      the size of the BAT. This is not the case for BAT 4 above.
      
      Fix kasan_init_region() by using block_size() function that is in
      book3s32/mmu.c. To be able to reuse it here, make it non static and
      change its name to bat_block_size() in order to avoid name conflict
      with block_size() defined in <linux/blkdev.h>
      
      Also reuse find_free_bat() to avoid an error message from setbat()
      when no BAT is available.
      
      And allocate memory outside of linear memory mapping to avoid
      wasting that precious space.
      
      With this change we get correct alignment for BATs and KASAN shadow
      memory is allocated outside the linear memory space.
      
      	---[ Data Block Address Translation ]---
      	0: 0xc0000000-0xcfffffff 0x00000000       256M Kernel rw
      	1: 0xd0000000-0xdfffffff 0x10000000       256M Kernel rw
      	2: 0xe0000000-0xefffffff 0x20000000       256M Kernel rw
      	3: 0xf8000000-0xfbffffff 0x7c000000        64M Kernel rw
      	4: 0xfc000000-0xfdffffff 0x7a000000        32M Kernel rw
      
      Fixes: 7974c473
      
       ("powerpc/32s: Implement dedicated kasan_init_region()")
      Cc: stable@vger.kernel.org
      Reported-by: default avatarMaxime Bizon <mbizon@freebox.fr>
      Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
      Tested-by: default avatarMaxime Bizon <mbizon@freebox.fr>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/7a50ef902494d1325227d47d33dada01e52e5518.1641818726.git.christophe.leroy@csgroup.eu
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      50f5d0a8
    • Christophe Leroy's avatar
      powerpc/32s: Allocate one 256k IBAT instead of two consecutives 128k IBATs · 5d3af1df
      Christophe Leroy authored
      commit 37eb7ca9
      
       upstream.
      
      Today we have the following IBATs allocated:
      
      	---[ Instruction Block Address Translation ]---
      	0: 0xc0000000-0xc03fffff 0x00000000         4M Kernel   x     m
      	1: 0xc0400000-0xc05fffff 0x00400000         2M Kernel   x     m
      	2: 0xc0600000-0xc06fffff 0x00600000         1M Kernel   x     m
      	3: 0xc0700000-0xc077ffff 0x00700000       512K Kernel   x     m
      	4: 0xc0780000-0xc079ffff 0x00780000       128K Kernel   x     m
      	5: 0xc07a0000-0xc07bffff 0x007a0000       128K Kernel   x     m
      	6:         -
      	7:         -
      
      The two 128K should be a single 256K instead.
      
      When _etext is not aligned to 128Kbytes, the system will allocate
      all necessary BATs to the lower 128Kbytes boundary, then allocate
      an additional 128Kbytes BAT for the remaining block.
      
      Instead, align the top to 128Kbytes so that the function directly
      allocates a 256Kbytes last block:
      
      	---[ Instruction Block Address Translation ]---
      	0: 0xc0000000-0xc03fffff 0x00000000         4M Kernel   x     m
      	1: 0xc0400000-0xc05fffff 0x00400000         2M Kernel   x     m
      	2: 0xc0600000-0xc06fffff 0x00600000         1M Kernel   x     m
      	3: 0xc0700000-0xc077ffff 0x00700000       512K Kernel   x     m
      	4: 0xc0780000-0xc07bffff 0x00780000       256K Kernel   x     m
      	5:         -
      	6:         -
      	7:         -
      
      Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/ab58b296832b0ec650e2203200e060adbcb2677d.1637930421.git.christophe.leroy@csgroup.eu
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5d3af1df
    • Yazen Ghannam's avatar
      x86/MCE/AMD: Allow thresholding interface updates after init · 08f090bb
      Yazen Ghannam authored
      commit 1f52b0ab upstream.
      
      Changes to the AMD Thresholding sysfs code prevents sysfs writes from
      updating the underlying registers once CPU init is completed, i.e.
      "threshold_banks" is set.
      
      Allow the registers to be updated if the thresholding interface is
      already initialized or if in the init path. Use the "set_lvt_off" value
      to indicate if running in the init path, since this value is only set
      during init.
      
      Fixes: a037f3ca
      
       ("x86/mce/amd: Make threshold bank setting hotplug robust")
      Signed-off-by: default avatarYazen Ghannam <yazen.ghannam@amd.com>
      Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20220117161328.19148-1-yazen.ghannam@amd.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      08f090bb
    • Mathieu Desnoyers's avatar
      sched/membarrier: Fix membarrier-rseq fence command missing from query bitmask · 791e5d5d
      Mathieu Desnoyers authored
      commit 80923261 upstream.
      
      The membarrier command MEMBARRIER_CMD_QUERY allows querying the
      available membarrier commands. When the membarrier-rseq fence commands
      were added, a new MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ_BITMASK was
      introduced with the intent to expose them with the MEMBARRIER_CMD_QUERY
      command, the but it was never added to MEMBARRIER_CMD_BITMASK.
      
      The membarrier-rseq fence commands are therefore not wired up with the
      query command.
      
      Rename MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ_BITMASK to
      MEMBARRIER_PRIVATE_EXPEDITED_RSEQ_BITMASK (the bitmask is not a command
      per-se), and change the erroneous
      MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ_BITMASK (which does not
      actually exist) to MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ.
      
      Wire up MEMBARRIER_PRIVATE_EXPEDITED_RSEQ_BITMASK in
      MEMBARRIER_CMD_BITMASK. Fixing this allows discovering availability of
      the membarrier-rseq fence feature.
      
      Fixes: 2a36ab71
      
       ("rseq/membarrier: Add MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ")
      Signed-off-by: default avatarMathieu Desnoyers <mathieu.desnoyers@efficios.com>
      Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Cc: <stable@vger.kernel.org> # 5.10+
      Link: https://lkml.kernel.org/r/20220117203010.30129-1-mathieu.desnoyers@efficios.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      791e5d5d
    • Joseph Qi's avatar
      ocfs2: fix a deadlock when commit trans · afbde455
      Joseph Qi authored
      commit ddf4b773 upstream.
      
      commit 6f1b2285 introduces a regression which can deadlock as
      follows:
      
        Task1:                              Task2:
        jbd2_journal_commit_transaction     ocfs2_test_bg_bit_allocatable
        spin_lock(&jh->b_state_lock)        jbd_lock_bh_journal_head
        __jbd2_journal_remove_checkpoint    spin_lock(&jh->b_state_lock)
        jbd2_journal_put_journal_head
        jbd_lock_bh_journal_head
      
      Task1 and Task2 lock bh->b_state and jh->b_state_lock in different
      order, which finally result in a deadlock.
      
      So use jbd2_journal_[grab|put]_journal_head instead in
      ocfs2_test_bg_bit_allocatable() to fix it.
      
      Link: https://lkml.kernel.org/r/20220121071205.100648-3-joseph.qi@linux.alibaba.com
      Fixes: 6f1b2285
      
       ("ocfs2: fix race between searching chunks and release journal_head from buffer_head")
      Signed-off-by: default avatarJoseph Qi <joseph.qi@linux.alibaba.com>
      Reported-by: default avatarGautham Ananthakrishna <gautham.ananthakrishna@oracle.com>
      Tested-by: default avatarGautham Ananthakrishna <gautham.ananthakrishna@oracle.com>
      Reported-by: default avatarSaeed Mirzamohammadi <saeed.mirzamohammadi@oracle.com>
      Cc: "Theodore Ts'o" <tytso@mit.edu>
      Cc: Andreas Dilger <adilger.kernel@dilger.ca>
      Cc: Changwei Ge <gechangwei@live.cn>
      Cc: Gang He <ghe@suse.com>
      Cc: Joel Becker <jlbec@evilplan.org>
      Cc: Jun Piao <piaojun@huawei.com>
      Cc: Junxiao Bi <junxiao.bi@oracle.com>
      Cc: Mark Fasheh <mark@fasheh.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      afbde455
    • Joseph Qi's avatar
      jbd2: export jbd2_journal_[grab|put]_journal_head · 97f75e7d
      Joseph Qi authored
      commit 4cd1103d
      
       upstream.
      
      Patch series "ocfs2: fix a deadlock case".
      
      This fixes a deadlock case in ocfs2.  We firstly export jbd2 symbols
      jbd2_journal_[grab|put]_journal_head as preparation and later use them
      in ocfs2 insread of jbd_[lock|unlock]_bh_journal_head to fix the
      deadlock.
      
      This patch (of 2):
      
      This exports symbols jbd2_journal_[grab|put]_journal_head, which will be
      used outside modules, e.g.  ocfs2.
      
      Link: https://lkml.kernel.org/r/20220121071205.100648-2-joseph.qi@linux.alibaba.com
      Signed-off-by: default avatarJoseph Qi <joseph.qi@linux.alibaba.com>
      Cc: Mark Fasheh <mark@fasheh.com>
      Cc: Joel Becker <jlbec@evilplan.org>
      Cc: Junxiao Bi <junxiao.bi@oracle.com>
      Cc: Changwei Ge <gechangwei@live.cn>
      Cc: Gang He <ghe@suse.com>
      Cc: Jun Piao <piaojun@huawei.com>
      Cc: Andreas Dilger <adilger.kernel@dilger.ca>
      Cc: Gautham Ananthakrishna <gautham.ananthakrishna@oracle.com>
      Cc: Saeed Mirzamohammadi <saeed.mirzamohammadi@oracle.com>
      Cc: "Theodore Ts'o" <tytso@mit.edu>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      97f75e7d
    • Sing-Han Chen's avatar
      ucsi_ccg: Check DEV_INT bit only when starting CCG4 · 3921d081
      Sing-Han Chen authored
      commit 82591149 upstream.
      
      CCGx clears Bit 0:Device Interrupt in the INTR_REG
      if CCGx is reset successfully. However, there might
      be a chance that other bits in INTR_REG are not
      cleared due to internal data queued in PPM. This case
      misleads the driver that CCGx reset failed.
      
      The commit checks bit 0 in INTR_REG and ignores other
      bits. The ucsi driver would reset PPM later.
      
      Fixes: 247c554a
      
       ("usb: typec: ucsi: add support for Cypress CCGx")
      Cc: stable@vger.kernel.org
      Reviewed-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
      Signed-off-by: default avatarSing-Han Chen <singhanc@nvidia.com>
      Signed-off-by: default avatarWayne Chang <waynec@nvidia.com>
      Link: https://lore.kernel.org/r/20220112094143.628610-1-waynec@nvidia.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3921d081
    • Badhri Jagan Sridharan's avatar
      usb: typec: tcpm: Do not disconnect while receiving VBUS off · 598a884c
      Badhri Jagan Sridharan authored
      commit 90b8aa9f upstream.
      
      With some chargers, vbus might momentarily raise above VSAFE5V and fall
      back to 0V before tcpm gets to read port->tcpc->get_vbus. This will
      will report a VBUS off event causing TCPM to transition to
      SNK_UNATTACHED where it should be waiting in either SNK_ATTACH_WAIT
      or SNK_DEBOUNCED state. This patch makes TCPM avoid vbus off events
      while in SNK_ATTACH_WAIT or SNK_DEBOUNCED state.
      
      Stub from the spec:
          "4.5.2.2.4.2 Exiting from AttachWait.SNK State
          A Sink shall transition to Unattached.SNK when the state of both
          the CC1 and CC2 pins is SNK.Open for at least tPDDebounce.
          A DRP shall transition to Unattached.SRC when the state of both
          the CC1 and CC2 pins is SNK.Open for at least tPDDebounce."
      
      [23.194131] CC1: 0 -> 0, CC2: 0 -> 5 [state SNK_UNATTACHED, polarity 0, connected]
      [23.201777] state change SNK_UNATTACHED -> SNK_ATTACH_WAIT [rev3 NONE_AMS]
      [23.209949] pending state change SNK_ATTACH_WAIT -> SNK_DEBOUNCED @ 170 ms [rev3 NONE_AMS]
      [23.300579] VBUS off
      [23.300668] state change SNK_ATTACH_WAIT -> SNK_UNATTACHED [rev3 NONE_AMS]
      [23.301014] VBUS VSAFE0V
      [23.301111] Start toggling
      
      Fixes: f0690a25
      
       ("staging: typec: USB Type-C Port Manager (tcpm)")
      Cc: stable@vger.kernel.org
      Acked-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
      Signed-off-by: default avatarBadhri Jagan Sridharan <badhri@google.com>
      Link: https://lore.kernel.org/r/20220122015520.332507-1-badhri@google.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      598a884c
    • Alan Stern's avatar
      USB: core: Fix hang in usb_kill_urb by adding memory barriers · e3b131e3
      Alan Stern authored
      commit 26fbe977
      
       upstream.
      
      The syzbot fuzzer has identified a bug in which processes hang waiting
      for usb_kill_urb() to return.  It turns out the issue is not unlinking
      the URB; that works just fine.  Rather, the problem arises when the
      wakeup notification that the URB has completed is not received.
      
      The reason is memory-access ordering on SMP systems.  In outline form,
      usb_kill_urb() and __usb_hcd_giveback_urb() operating concurrently on
      different CPUs perform the following actions:
      
      CPU 0					CPU 1
      ----------------------------		---------------------------------
      usb_kill_urb():				__usb_hcd_giveback_urb():
        ...					  ...
        atomic_inc(&urb->reject);		  atomic_dec(&urb->use_count);
        ...					  ...
        wait_event(usb_kill_urb_queue,
      	atomic_read(&urb->use_count) == 0);
      					  if (atomic_read(&urb->reject))
      						wake_up(&usb_kill_urb_queue);
      
      Confining your attention to urb->reject and urb->use_count, you can
      see that the overall pattern of accesses on CPU 0 is:
      
      	write urb->reject, then read urb->use_count;
      
      whereas the overall pattern of accesses on CPU 1 is:
      
      	write urb->use_count, then read urb->reject.
      
      This pattern is referred to in memory-model circles as SB (for "Store
      Buffering"), and it is well known that without suitable enforcement of
      the desired order of accesses -- in the form of memory barriers -- it
      is entirely possible for one or both CPUs to execute their reads ahead
      of their writes.  The end result will be that sometimes CPU 0 sees the
      old un-decremented value of urb->use_count while CPU 1 sees the old
      un-incremented value of urb->reject.  Consequently CPU 0 ends up on
      the wait queue and never gets woken up, leading to the observed hang
      in usb_kill_urb().
      
      The same pattern of accesses occurs in usb_poison_urb() and the
      failure pathway of usb_hcd_submit_urb().
      
      The problem is fixed by adding suitable memory barriers.  To provide
      proper memory-access ordering in the SB pattern, a full barrier is
      required on both CPUs.  The atomic_inc() and atomic_dec() accesses
      themselves don't provide any memory ordering, but since they are
      present, we can use the optimized smp_mb__after_atomic() memory
      barrier in the various routines to obtain the desired effect.
      
      This patch adds the necessary memory barriers.
      
      CC: <stable@vger.kernel.org>
      Reported-and-tested-by: default avatar <syzbot+76629376e06e2c2ad626@syzkaller.appspotmail.com>
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Link: https://lore.kernel.org/r/Ye8K0QYee0Q0Nna2@rowland.harvard.edu
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e3b131e3
    • Pavankumar Kondeti's avatar
      usb: gadget: f_sourcesink: Fix isoc transfer for USB_SPEED_SUPER_PLUS · 3ca928c8
      Pavankumar Kondeti authored
      commit 904edf8a upstream.
      
      Currently when gadget enumerates in super speed plus, the isoc
      endpoint request buffer size is not calculated correctly. Fix
      this by checking the gadget speed against USB_SPEED_SUPER_PLUS
      and update the request buffer size.
      
      Fixes: 90c4d057
      
       ("usb: fix various gadgets null ptr deref on 10gbps cabling.")
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: default avatarPavankumar Kondeti <quic_pkondeti@quicinc.com>
      Link: https://lore.kernel.org/r/1642820602-20619-1-git-send-email-quic_pkondeti@quicinc.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3ca928c8
    • Jon Hunter's avatar
      usb: common: ulpi: Fix crash in ulpi_match() · 053274bc
      Jon Hunter authored
      commit 2e3dd4a6 upstream.
      
      Commit 7495af93 ("ARM: multi_v7_defconfig: Enable drivers for
      DragonBoard 410c") enables the CONFIG_PHY_QCOM_USB_HS for the ARM
      multi_v7_defconfig. Enabling this Kconfig is causing the kernel to crash
      on the Tegra20 Ventana platform in the ulpi_match() function.
      
      The Qualcomm USB HS PHY driver that is enabled by CONFIG_PHY_QCOM_USB_HS,
      registers a ulpi_driver but this driver does not provide an 'id_table',
      so when ulpi_match() is called on the Tegra20 Ventana platform, it
      crashes when attempting to deference the id_table pointer which is not
      valid. The Qualcomm USB HS PHY driver uses device-tree for matching the
      ULPI driver with the device and so fix this crash by using device-tree
      for matching if the id_table is not valid.
      
      Fixes: ef6a7bcf
      
       ("usb: ulpi: Support device discovery via DT")
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: default avatarJon Hunter <jonathanh@nvidia.com>
      Link: https://lore.kernel.org/r/20220117150039.44058-1-jonathanh@nvidia.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      053274bc
    • Frank Li's avatar
      usb: xhci-plat: fix crash when suspend if remote wake enable · 20c51a4c
      Frank Li authored
      commit 9df47846 upstream.
      
      Crashed at i.mx8qm platform when suspend if enable remote wakeup
      
      Internal error: synchronous external abort: 96000210 [#1] PREEMPT SMP
      Modules linked in:
      CPU: 2 PID: 244 Comm: kworker/u12:6 Not tainted 5.15.5-dirty #12
      Hardware name: Freescale i.MX8QM MEK (DT)
      Workqueue: events_unbound async_run_entry_fn
      pstate: 600000c5 (nZCv daIF -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
      pc : xhci_disable_hub_port_wake.isra.62+0x60/0xf8
      lr : xhci_disable_hub_port_wake.isra.62+0x34/0xf8
      sp : ffff80001394bbf0
      x29: ffff80001394bbf0 x28: 0000000000000000 x27: ffff00081193b578
      x26: ffff00081193b570 x25: 0000000000000000 x24: 0000000000000000
      x23: ffff00081193a29c x22: 0000000000020001 x21: 0000000000000001
      x20: 0000000000000000 x19: ffff800014e90490 x18: 0000000000000000
      x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000
      x14: 0000000000000000 x13: 0000000000000002 x12: 0000000000000000
      x11: 0000000000000000 x10: 0000000000000960 x9 : ffff80001394baa0
      x8 : ffff0008145d1780 x7 : ffff0008f95b8e80 x6 : 000000001853b453
      x5 : 0000000000000496 x4 : 0000000000000000 x3 : ffff00081193a29c
      x2 : 0000000000000001 x1 : 0000000000000000 x0 : ffff000814591620
      Call trace:
       xhci_disable_hub_port_wake.isra.62+0x60/0xf8
       xhci_suspend+0x58/0x510
       xhci_plat_suspend+0x50/0x78
       platform_pm_suspend+0x2c/0x78
       dpm_run_callback.isra.25+0x50/0xe8
       __device_suspend+0x108/0x3c0
      
      The basic flow:
      	1. run time suspend call xhci_suspend, xhci parent devices gate the clock.
              2. echo mem >/sys/power/state, system _device_suspend call xhci_suspend
              3. xhci_suspend call xhci_disable_hub_port_wake, which access register,
      	   but clock already gated by run time suspend.
      
      This problem was hidden by power domain driver, which call run time resume before it.
      
      But the below commit remove it and make this issue happen.
      	commit c1df456d
      
       ("PM: domains: Don't runtime resume devices at genpd_prepare()")
      
      This patch call run time resume before suspend to make sure clock is on
      before access register.
      
      Reviewed-by: default avatarPeter Chen <peter.chen@kernel.org>
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: default avatarFrank Li <Frank.Li@nxp.com>
      Testeb-by: default avatarAbel Vesa <abel.vesa@nxp.com>
      Link: https://lore.kernel.org/r/20220110172738.31686-1-Frank.Li@nxp.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      20c51a4c