1. 01 Nov, 2018 1 commit
    • David S. Miller's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf · df975da4
      David S. Miller authored
      Daniel Borkmann says:
      
      ====================
      pull-request: bpf 2018-11-01
      
      The following pull-request contains BPF updates for your *net* tree.
      
      The main changes are:
      
      1) Fix tcp_bpf_recvmsg() to return -EAGAIN instead of 0 in non-blocking
         case when no data is available yet, from John.
      
      2) Fix a compilation error in libbpf_attach_type_by_name() when compiled
         with clang 3.8, from Andrey.
      
      3) Fix a partial copy of map pointer on scalar alu and remove id
         generation for RET_PTR_TO_MAP_VALUE return types, from Daniel.
      
      4) Add unlimited memlock limit for kernel selftest's flow_dissector_load
         program, from Yonghong.
      
      5) Fix ping for some BPF shell based kselftests where distro does not
         ship "ping -6" anymore, from Li.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      df975da4
  2. 31 Oct, 2018 29 commits
  3. 30 Oct, 2018 10 commits
    • John Fastabend's avatar
      bpf: tcp_bpf_recvmsg should return EAGAIN when nonblocking and no data · 27b31e68
      John Fastabend authored
      We return 0 in the case of a nonblocking socket that has no data
      available. However, this is incorrect and may confuse applications.
      After this patch we do the correct thing and return the error
      EAGAIN.
      
      Quoting return codes from recvmsg manpage,
      
      EAGAIN or EWOULDBLOCK
       The socket is marked nonblocking and the receive operation would
       block, or a receive timeout had been set and the timeout expired
       before data was received.
      
      Fixes: 604326b4 ("bpf, sockmap: convert to generic sk_msg interface")
      Signed-off-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
      Acked-by: default avatarSong Liu <songliubraving@fb.com>
      Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
      27b31e68
    • Yonghong Song's avatar
      tools/bpf: add unlimited rlimit for flow_dissector_load · b31d30d9
      Yonghong Song authored
      On our test machine, bpf selftest test_flow_dissector.sh failed
      with the following error:
        # ./test_flow_dissector.sh
        bpffs not mounted. Mounting...
        libbpf: failed to create map (name: 'jmp_table'): Operation not permitted
        libbpf: failed to load object 'bpf_flow.o'
        ./flow_dissector_load: bpf_prog_load bpf_flow.o
        selftests: test_flow_dissector [FAILED]
      
      Let us increase the rlimit to remove the above map
      creation failure.
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      Acked-by: default avatarSong Liu <songliubraving@fb.com>
      Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
      b31d30d9
    • Marc Zyngier's avatar
      net: mvpp2: Fix affinity hint allocation · a6b3a3fa
      Marc Zyngier authored
      The mvpp2 driver has the curious behaviour of passing a stack variable
      to irq_set_affinity_hint(), which results in the kernel exploding
      the first time anyone accesses this information. News flash: userspace
      does, and irqbalance will happily take the machine down. Great stuff.
      
      An easy fix is to track the mask within the queue_vector structure,
      and to make sure it has the same lifetime as the interrupt itself.
      
      Fixes: e531f767 ("net: mvpp2: handle cases where more CPUs are available than s/w threads")
      Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a6b3a3fa
    • Eric Dumazet's avatar
      net/mlx4_en: add a missing <net/ip.h> include · 3aa8029e
      Eric Dumazet authored
      Abdul Haleem reported a build error on ppc :
      
      drivers/net/ethernet/mellanox/mlx4/en_rx.c:582:18: warning: `struct
      iphdr` declared inside parameter list [enabled by default]
                 struct iphdr *iph)
                        ^
      drivers/net/ethernet/mellanox/mlx4/en_rx.c:582:18: warning: its scope is
      only this definition or declaration, which is probably not what you want
      [enabled by default]
      drivers/net/ethernet/mellanox/mlx4/en_rx.c: In function
      get_fixed_ipv4_csum:
      drivers/net/ethernet/mellanox/mlx4/en_rx.c:586:20: error: dereferencing
      pointer to incomplete type
        __u8 ipproto = iph->protocol;
                          ^
      
      Fixes: 55469bc6 ("drivers: net: remove <net/busy_poll.h> inclusion when not needed")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Reported-by: default avatarAbdul Haleem <abdhalee@linux.vnet.ibm.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      3aa8029e
    • Ido Schimmel's avatar
      rtnetlink: Disallow FDB configuration for non-Ethernet device · da715775
      Ido Schimmel authored
      When an FDB entry is configured, the address is validated to have the
      length of an Ethernet address, but the device for which the address is
      configured can be of any type.
      
      The above can result in the use of uninitialized memory when the address
      is later compared against existing addresses since 'dev->addr_len' is
      used and it may be greater than ETH_ALEN, as with ip6tnl devices.
      
      Fix this by making sure that FDB entries are only configured for
      Ethernet devices.
      
      BUG: KMSAN: uninit-value in memcmp+0x11d/0x180 lib/string.c:863
      CPU: 1 PID: 4318 Comm: syz-executor998 Not tainted 4.19.0-rc3+ #49
      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+0x14b/0x190 lib/dump_stack.c:113
        kmsan_report+0x183/0x2b0 mm/kmsan/kmsan.c:956
        __msan_warning+0x70/0xc0 mm/kmsan/kmsan_instr.c:645
        memcmp+0x11d/0x180 lib/string.c:863
        dev_uc_add_excl+0x165/0x7b0 net/core/dev_addr_lists.c:464
        ndo_dflt_fdb_add net/core/rtnetlink.c:3463 [inline]
        rtnl_fdb_add+0x1081/0x1270 net/core/rtnetlink.c:3558
        rtnetlink_rcv_msg+0xa0b/0x1530 net/core/rtnetlink.c:4715
        netlink_rcv_skb+0x36e/0x5f0 net/netlink/af_netlink.c:2454
        rtnetlink_rcv+0x50/0x60 net/core/rtnetlink.c:4733
        netlink_unicast_kernel net/netlink/af_netlink.c:1317 [inline]
        netlink_unicast+0x1638/0x1720 net/netlink/af_netlink.c:1343
        netlink_sendmsg+0x1205/0x1290 net/netlink/af_netlink.c:1908
        sock_sendmsg_nosec net/socket.c:621 [inline]
        sock_sendmsg net/socket.c:631 [inline]
        ___sys_sendmsg+0xe70/0x1290 net/socket.c:2114
        __sys_sendmsg net/socket.c:2152 [inline]
        __do_sys_sendmsg net/socket.c:2161 [inline]
        __se_sys_sendmsg+0x2a3/0x3d0 net/socket.c:2159
        __x64_sys_sendmsg+0x4a/0x70 net/socket.c:2159
        do_syscall_64+0xb8/0x100 arch/x86/entry/common.c:291
        entry_SYSCALL_64_after_hwframe+0x63/0xe7
      RIP: 0033:0x440ee9
      Code: e8 cc 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 bb 0a fc ff c3 66 2e 0f 1f 84 00 00 00 00
      RSP: 002b:00007fff6a93b518 EFLAGS: 00000213 ORIG_RAX: 000000000000002e
      RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 0000000000440ee9
      RDX: 0000000000000000 RSI: 0000000020000240 RDI: 0000000000000003
      RBP: 0000000000000000 R08: 00000000004002c8 R09: 00000000004002c8
      R10: 00000000004002c8 R11: 0000000000000213 R12: 000000000000b4b0
      R13: 0000000000401ec0 R14: 0000000000000000 R15: 0000000000000000
      
      Uninit was created at:
        kmsan_save_stack_with_flags mm/kmsan/kmsan.c:256 [inline]
        kmsan_internal_poison_shadow+0xb8/0x1b0 mm/kmsan/kmsan.c:181
        kmsan_kmalloc+0x98/0x100 mm/kmsan/kmsan_hooks.c:91
        kmsan_slab_alloc+0x10/0x20 mm/kmsan/kmsan_hooks.c:100
        slab_post_alloc_hook mm/slab.h:446 [inline]
        slab_alloc_node mm/slub.c:2718 [inline]
        __kmalloc_node_track_caller+0x9e7/0x1160 mm/slub.c:4351
        __kmalloc_reserve net/core/skbuff.c:138 [inline]
        __alloc_skb+0x2f5/0x9e0 net/core/skbuff.c:206
        alloc_skb include/linux/skbuff.h:996 [inline]
        netlink_alloc_large_skb net/netlink/af_netlink.c:1189 [inline]
        netlink_sendmsg+0xb49/0x1290 net/netlink/af_netlink.c:1883
        sock_sendmsg_nosec net/socket.c:621 [inline]
        sock_sendmsg net/socket.c:631 [inline]
        ___sys_sendmsg+0xe70/0x1290 net/socket.c:2114
        __sys_sendmsg net/socket.c:2152 [inline]
        __do_sys_sendmsg net/socket.c:2161 [inline]
        __se_sys_sendmsg+0x2a3/0x3d0 net/socket.c:2159
        __x64_sys_sendmsg+0x4a/0x70 net/socket.c:2159
        do_syscall_64+0xb8/0x100 arch/x86/entry/common.c:291
        entry_SYSCALL_64_after_hwframe+0x63/0xe7
      
      v2:
      * Make error message more specific (David)
      
      Fixes: 090096bf ("net: generic fdb support for drivers without ndo_fdb_<op>")
      Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Reported-and-tested-by: syzbot+3a288d5f5530b901310e@syzkaller.appspotmail.com
      Reported-and-tested-by: syzbot+d53ab4e92a1db04110ff@syzkaller.appspotmail.com
      Cc: Vlad Yasevich <vyasevich@gmail.com>
      Cc: David Ahern <dsahern@gmail.com>
      Reviewed-by: default avatarDavid Ahern <dsahern@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      da715775
    • Xin Long's avatar
      sctp: check policy more carefully when getting pr status · 71335836
      Xin Long authored
      When getting pr_assocstatus and pr_streamstatus by sctp_getsockopt,
      it doesn't correctly process the case when policy is set with
      SCTP_PR_SCTP_ALL | SCTP_PR_SCTP_MASK. It even causes a
      slab-out-of-bounds in sctp_getsockopt_pr_streamstatus().
      
      This patch fixes it by return -EINVAL for this case.
      
      Fixes: 0ac1077e ("sctp: get pr_assoc and pr_stream all status with SCTP_PR_SCTP_ALL")
      Reported-by: syzbot+5da0d0a72a9e7d791748@syzkaller.appspotmail.com
      Suggested-by: default avatarMarcelo Ricardo Leitner <marcelo.leitner@gmail.com>
      Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      71335836
    • Xin Long's avatar
      sctp: clear the transport of some out_chunk_list chunks in sctp_assoc_rm_peer · df132eff
      Xin Long authored
      If a transport is removed by asconf but there still are some chunks with
      this transport queuing on out_chunk_list, later an use-after-free issue
      will be caused when accessing this transport from these chunks in
      sctp_outq_flush().
      
      This is an old bug, we fix it by clearing the transport of these chunks
      in out_chunk_list when removing a transport in sctp_assoc_rm_peer().
      
      Reported-by: syzbot+56a40ceee5fb35932f4d@syzkaller.appspotmail.com
      Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      df132eff
    • David S. Miller's avatar
      Merge branch 'mlxsw-Couple-of-fixes' · 2b0ab727
      David S. Miller authored
      Ido Schimmel says:
      
      ====================
      mlxsw: Couple of fixes
      
      First patch makes sure mlxsw does not ignore user requests to delete FDB
      entries that were learned by the device.
      
      Second patch fixes a use-after-free that can be triggered by requesting
      a reload via devlink when the previous reload failed.
      
      Please consider both patches for stable. They apply cleanly to both
      4.18.y and 4.19.y.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      2b0ab727
    • Shalom Toledo's avatar
      mlxsw: core: Fix devlink unregister flow · a22712a9
      Shalom Toledo authored
      After a failed reload, the driver is still registered to devlink, its
      devlink instance is still allocated and the 'reload_fail' flag is set.
      Then, in the next reload try, the driver's allocated devlink instance will
      be freed without unregistering from devlink and its components (e.g,
      resources). This scenario can cause a use-after-free if the user tries to
      execute command via devlink user-space tool.
      
      Fix by not freeing the devlink instance during reload (failed or not).
      
      Fixes: 24cc68ad ("mlxsw: core: Add support for reload")
      Signed-off-by: default avatarShalom Toledo <shalomt@mellanox.com>
      Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
      Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a22712a9
    • Petr Machata's avatar
      mlxsw: spectrum_switchdev: Don't ignore deletions of learned MACs · ad0b9d94
      Petr Machata authored
      Demands to remove FDB entries should be honored even if the FDB entry in
      question was originally learned, and not added by the user. Therefore
      ignore the added_by_user datum for SWITCHDEV_FDB_DEL_TO_DEVICE.
      
      Fixes: 816a3bed ("switchdev: Add fdb.added_by_user to switchdev notifications")
      Signed-off-by: default avatarPetr Machata <petrm@mellanox.com>
      Suggested-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ad0b9d94