1. 25 9月, 2020 1 次提交
  2. 24 9月, 2020 18 次提交
  3. 23 9月, 2020 2 次提交
  4. 22 9月, 2020 7 次提交
    • E
      inet_diag: validate INET_DIAG_REQ_PROTOCOL attribute · d5e4d0a5
      Eric Dumazet 提交于
      User space could send an invalid INET_DIAG_REQ_PROTOCOL attribute
      as caught by syzbot.
      
      BUG: KMSAN: uninit-value in inet_diag_lock_handler net/ipv4/inet_diag.c:55 [inline]
      BUG: KMSAN: uninit-value in __inet_diag_dump+0x58c/0x720 net/ipv4/inet_diag.c:1147
      CPU: 0 PID: 8505 Comm: syz-executor174 Not tainted 5.9.0-rc4-syzkaller #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
      Call Trace:
       __dump_stack lib/dump_stack.c:77 [inline]
       dump_stack+0x21c/0x280 lib/dump_stack.c:118
       kmsan_report+0xf7/0x1e0 mm/kmsan/kmsan_report.c:122
       __msan_warning+0x58/0xa0 mm/kmsan/kmsan_instr.c:219
       inet_diag_lock_handler net/ipv4/inet_diag.c:55 [inline]
       __inet_diag_dump+0x58c/0x720 net/ipv4/inet_diag.c:1147
       inet_diag_dump_compat+0x2a5/0x380 net/ipv4/inet_diag.c:1254
       netlink_dump+0xb73/0x1cb0 net/netlink/af_netlink.c:2246
       __netlink_dump_start+0xcf2/0xea0 net/netlink/af_netlink.c:2354
       netlink_dump_start include/linux/netlink.h:246 [inline]
       inet_diag_rcv_msg_compat+0x5da/0x6c0 net/ipv4/inet_diag.c:1288
       sock_diag_rcv_msg+0x24f/0x620 net/core/sock_diag.c:256
       netlink_rcv_skb+0x6d7/0x7e0 net/netlink/af_netlink.c:2470
       sock_diag_rcv+0x63/0x80 net/core/sock_diag.c:275
       netlink_unicast_kernel net/netlink/af_netlink.c:1304 [inline]
       netlink_unicast+0x11c8/0x1490 net/netlink/af_netlink.c:1330
       netlink_sendmsg+0x173a/0x1840 net/netlink/af_netlink.c:1919
       sock_sendmsg_nosec net/socket.c:651 [inline]
       sock_sendmsg net/socket.c:671 [inline]
       ____sys_sendmsg+0xc82/0x1240 net/socket.c:2353
       ___sys_sendmsg net/socket.c:2407 [inline]
       __sys_sendmsg+0x6d1/0x820 net/socket.c:2440
       __do_sys_sendmsg net/socket.c:2449 [inline]
       __se_sys_sendmsg+0x97/0xb0 net/socket.c:2447
       __x64_sys_sendmsg+0x4a/0x70 net/socket.c:2447
       do_syscall_64+0x9f/0x140 arch/x86/entry/common.c:48
       entry_SYSCALL_64_after_hwframe+0x44/0xa9
      RIP: 0033:0x441389
      Code: e8 fc ab 02 00 48 83 c4 18 c3 0f 1f 80 00 00 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 0f 83 1b 09 fc ff c3 66 2e 0f 1f 84 00 00 00 00
      RSP: 002b:00007fff3b02ce98 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
      RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 0000000000441389
      RDX: 0000000000000000 RSI: 0000000020001500 RDI: 0000000000000003
      RBP: 00000000006cb018 R08: 00000000004002c8 R09: 00000000004002c8
      R10: 0000000000000004 R11: 0000000000000246 R12: 0000000000402130
      R13: 00000000004021c0 R14: 0000000000000000 R15: 0000000000000000
      
      Uninit was created at:
       kmsan_save_stack_with_flags mm/kmsan/kmsan.c:143 [inline]
       kmsan_internal_poison_shadow+0x66/0xd0 mm/kmsan/kmsan.c:126
       kmsan_slab_alloc+0x8a/0xe0 mm/kmsan/kmsan_hooks.c:80
       slab_alloc_node mm/slub.c:2907 [inline]
       __kmalloc_node_track_caller+0x9aa/0x12f0 mm/slub.c:4511
       __kmalloc_reserve net/core/skbuff.c:142 [inline]
       __alloc_skb+0x35f/0xb30 net/core/skbuff.c:210
       alloc_skb include/linux/skbuff.h:1094 [inline]
       netlink_alloc_large_skb net/netlink/af_netlink.c:1176 [inline]
       netlink_sendmsg+0xdb9/0x1840 net/netlink/af_netlink.c:1894
       sock_sendmsg_nosec net/socket.c:651 [inline]
       sock_sendmsg net/socket.c:671 [inline]
       ____sys_sendmsg+0xc82/0x1240 net/socket.c:2353
       ___sys_sendmsg net/socket.c:2407 [inline]
       __sys_sendmsg+0x6d1/0x820 net/socket.c:2440
       __do_sys_sendmsg net/socket.c:2449 [inline]
       __se_sys_sendmsg+0x97/0xb0 net/socket.c:2447
       __x64_sys_sendmsg+0x4a/0x70 net/socket.c:2447
       do_syscall_64+0x9f/0x140 arch/x86/entry/common.c:48
       entry_SYSCALL_64_after_hwframe+0x44/0xa9
      
      Fixes: 3f935c75 ("inet_diag: support for wider protocol numbers")
      Signed-off-by: NEric Dumazet <edumazet@google.com>
      Cc: Paolo Abeni <pabeni@redhat.com>
      Cc: Christoph Paasch <cpaasch@apple.com>
      Cc: Mat Martineau <mathew.j.martineau@linux.intel.com>
      Acked-by: NPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d5e4d0a5
    • V
      net: bridge: br_vlan_get_pvid_rcu() should dereference the VLAN group under RCU · 99f62a74
      Vladimir Oltean 提交于
      When calling the RCU brother of br_vlan_get_pvid(), lockdep warns:
      
      =============================
      WARNING: suspicious RCU usage
      5.9.0-rc3-01631-g13c17acb8e38-dirty #814 Not tainted
      -----------------------------
      net/bridge/br_private.h:1054 suspicious rcu_dereference_protected() usage!
      
      Call trace:
       lockdep_rcu_suspicious+0xd4/0xf8
       __br_vlan_get_pvid+0xc0/0x100
       br_vlan_get_pvid_rcu+0x78/0x108
      
      The warning is because br_vlan_get_pvid_rcu() calls nbp_vlan_group()
      which calls rtnl_dereference() instead of rcu_dereference(). In turn,
      rtnl_dereference() calls rcu_dereference_protected() which assumes
      operation under an RCU write-side critical section, which obviously is
      not the case here. So, when the incorrect primitive is used to access
      the RCU-protected VLAN group pointer, READ_ONCE() is not used, which may
      cause various unexpected problems.
      
      I'm sad to say that br_vlan_get_pvid() and br_vlan_get_pvid_rcu() cannot
      share the same implementation. So fix the bug by splitting the 2
      functions, and making br_vlan_get_pvid_rcu() retrieve the VLAN groups
      under proper locking annotations.
      
      Fixes: 7582f5b7 ("bridge: add br_vlan_get_pvid_rcu()")
      Signed-off-by: NVladimir Oltean <vladimir.oltean@nxp.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      99f62a74
    • Y
      bpf: Using rcu_read_lock for bpf_sk_storage_map iterator · c69d2ddb
      Yonghong Song 提交于
      If a bucket contains a lot of sockets, during bpf_iter traversing
      a bucket, concurrent userspace bpf_map_update_elem() and
      bpf program bpf_sk_storage_{get,delete}() may experience
      some undesirable delays as they will compete with bpf_iter
      for bucket lock.
      
      Note that the number of buckets for bpf_sk_storage_map
      is roughly the same as the number of cpus. So if there
      are lots of sockets in the system, each bucket could
      contain lots of sockets.
      
      Different actual use cases may experience different delays.
      Here, using selftest bpf_iter subtest bpf_sk_storage_map,
      I hacked the kernel with ktime_get_mono_fast_ns()
      to collect the time when a bucket was locked
      during bpf_iter prog traversing that bucket. This way,
      the maximum incurred delay was measured w.r.t. the
      number of elements in a bucket.
          # elems in each bucket          delay(ns)
            64                            17000
            256                           72512
            2048                          875246
      
      The potential delays will be further increased if
      we have even more elemnts in a bucket. Using rcu_read_lock()
      is a reasonable compromise here. It may lose some precision, e.g.,
      access stale sockets, but it will not hurt performance of
      bpf program or user space application which also tries
      to get/delete or update map elements.
      Signed-off-by: NYonghong Song <yhs@fb.com>
      Signed-off-by: NAlexei Starovoitov <ast@kernel.org>
      Acked-by: NSong Liu <songliubraving@fb.com>
      Cc: Martin KaFai Lau <kafai@fb.com>
      Link: https://lore.kernel.org/bpf/20200916224645.720172-1-yhs@fb.com
      c69d2ddb
    • L
      bpf: Allow specifying a BTF ID per argument in function protos · 9436ef6e
      Lorenz Bauer 提交于
      Function prototypes using ARG_PTR_TO_BTF_ID currently use two ways to signal
      which BTF IDs are acceptable. First, bpf_func_proto.btf_id is an array of
      IDs, one for each argument. This array is only accessed up to the highest
      numbered argument that uses ARG_PTR_TO_BTF_ID and may therefore be less than
      five arguments long. It usually points at a BTF_ID_LIST. Second, check_btf_id
      is a function pointer that is called by the verifier if present. It gets the
      actual BTF ID of the register, and the argument number we're currently checking.
      It turns out that the only user check_arg_btf_id ignores the argument, and is
      simply used to check whether the BTF ID has a struct sock_common at it's start.
      
      Replace both of these mechanisms with an explicit BTF ID for each argument
      in a function proto. Thanks to btf_struct_ids_match this is very flexible:
      check_arg_btf_id can be replaced by requiring struct sock_common.
      Signed-off-by: NLorenz Bauer <lmb@cloudflare.com>
      Signed-off-by: NAlexei Starovoitov <ast@kernel.org>
      Acked-by: NMartin KaFai Lau <kafai@fb.com>
      Link: https://lore.kernel.org/bpf/20200921121227.255763-5-lmb@cloudflare.com
      9436ef6e
    • X
      ipv6: route: convert comma to semicolon · 91b2c9a0
      Xu Wang 提交于
      Replace a comma between expression statements by a semicolon.
      Signed-off-by: NXu Wang <vulab@iscas.ac.cn>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      91b2c9a0
    • J
      net: unix: remove redundant assignment to variable 'err' · c8c33b80
      Jing Xiangfeng 提交于
      After commit 37ab4fa7 ("net: unix: allow bind to fail on mutex lock"),
      the assignment to err is redundant. So remove it.
      Signed-off-by: NJing Xiangfeng <jingxiangfeng@huawei.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c8c33b80
    • P
      net-sysfs: add backlog len and CPU id to softnet data · 7d58e655
      Paolo Abeni 提交于
      Currently the backlog status in not exposed to user-space.
      Since long backlogs (or simply not empty ones) can be a
      source of noticeable latency, -RT deployments need some way
      to inspect it.
      
      Additionally, there isn't a direct match between 'softnet_stat'
      lines and the related CPU - sd for offline CPUs are not dumped -
      so this patch also includes the CPU id into such entry.
      Signed-off-by: NPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      7d58e655
  5. 21 9月, 2020 12 次提交