1. 18 5月, 2018 2 次提交
  2. 17 5月, 2018 2 次提交
    • D
      net/sched: fix refcnt leak in the error path of tcf_vlan_init() · 5a4931ae
      Davide Caratti 提交于
      Similarly to what was done with commit a52956df ("net sched actions:
      fix refcnt leak in skbmod"), fix the error path of tcf_vlan_init() to avoid
      refcnt leaks when wrong value of TCA_VLAN_PUSH_VLAN_PROTOCOL is given.
      
      Fixes: 5026c9b1 ("net sched: vlan action fix late binding")
      CC: Roman Mashak <mrv@mojatatu.com>
      Signed-off-by: NDavide Caratti <dcaratti@redhat.com>
      Acked-by: NJamal Hadi Salim <jhs@mojatatu.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      5a4931ae
    • E
      tcp: purge write queue in tcp_connect_init() · 7f582b24
      Eric Dumazet 提交于
      syzkaller found a reliable way to crash the host, hitting a BUG()
      in __tcp_retransmit_skb()
      
      Malicous MSG_FASTOPEN is the root cause. We need to purge write queue
      in tcp_connect_init() at the point we init snd_una/write_seq.
      
      This patch also replaces the BUG() by a less intrusive WARN_ON_ONCE()
      
      kernel BUG at net/ipv4/tcp_output.c:2837!
      invalid opcode: 0000 [#1] SMP KASAN
      Dumping ftrace buffer:
         (ftrace buffer empty)
      Modules linked in:
      CPU: 0 PID: 5276 Comm: syz-executor0 Not tainted 4.17.0-rc3+ #51
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
      RIP: 0010:__tcp_retransmit_skb+0x2992/0x2eb0 net/ipv4/tcp_output.c:2837
      RSP: 0000:ffff8801dae06ff8 EFLAGS: 00010206
      RAX: ffff8801b9fe61c0 RBX: 00000000ffc18a16 RCX: ffffffff864e1a49
      RDX: 0000000000000100 RSI: ffffffff864e2e12 RDI: 0000000000000005
      RBP: ffff8801dae073a0 R08: ffff8801b9fe61c0 R09: ffffed0039c40dd2
      R10: ffffed0039c40dd2 R11: ffff8801ce206e93 R12: 00000000421eeaad
      R13: ffff8801ce206d4e R14: ffff8801ce206cc0 R15: ffff8801cd4f4a80
      FS:  0000000000000000(0000) GS:ffff8801dae00000(0063) knlGS:00000000096bc900
      CS:  0010 DS: 002b ES: 002b CR0: 0000000080050033
      CR2: 0000000020000000 CR3: 00000001c47b6000 CR4: 00000000001406f0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      Call Trace:
       <IRQ>
       tcp_retransmit_skb+0x2e/0x250 net/ipv4/tcp_output.c:2923
       tcp_retransmit_timer+0xc50/0x3060 net/ipv4/tcp_timer.c:488
       tcp_write_timer_handler+0x339/0x960 net/ipv4/tcp_timer.c:573
       tcp_write_timer+0x111/0x1d0 net/ipv4/tcp_timer.c:593
       call_timer_fn+0x230/0x940 kernel/time/timer.c:1326
       expire_timers kernel/time/timer.c:1363 [inline]
       __run_timers+0x79e/0xc50 kernel/time/timer.c:1666
       run_timer_softirq+0x4c/0x70 kernel/time/timer.c:1692
       __do_softirq+0x2e0/0xaf5 kernel/softirq.c:285
       invoke_softirq kernel/softirq.c:365 [inline]
       irq_exit+0x1d1/0x200 kernel/softirq.c:405
       exiting_irq arch/x86/include/asm/apic.h:525 [inline]
       smp_apic_timer_interrupt+0x17e/0x710 arch/x86/kernel/apic/apic.c:1052
       apic_timer_interrupt+0xf/0x20 arch/x86/entry/entry_64.S:863
      
      Fixes: cf60af03 ("net-tcp: Fast Open client - sendmsg(MSG_FASTOPEN)")
      Signed-off-by: NEric Dumazet <edumazet@google.com>
      Cc: Yuchung Cheng <ycheng@google.com>
      Cc: Neal Cardwell <ncardwell@google.com>
      Reported-by: Nsyzbot <syzkaller@googlegroups.com>
      Acked-by: NNeal Cardwell <ncardwell@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      7f582b24
  3. 15 5月, 2018 1 次提交
    • E
      net/smc: check for missing nlattrs in SMC_PNETID messages · d49baa7e
      Eric Biggers 提交于
      It's possible to crash the kernel in several different ways by sending
      messages to the SMC_PNETID generic netlink family that are missing the
      expected attributes:
      
      - Missing SMC_PNETID_NAME => null pointer dereference when comparing
        names.
      - Missing SMC_PNETID_ETHNAME => null pointer dereference accessing
        smc_pnetentry::ndev.
      - Missing SMC_PNETID_IBNAME => null pointer dereference accessing
        smc_pnetentry::smcibdev.
      - Missing SMC_PNETID_IBPORT => out of bounds array access to
        smc_ib_device::pattr[-1].
      
      Fix it by validating that all expected attributes are present and that
      SMC_PNETID_IBPORT is nonzero.
      
      Reported-by: syzbot+5cd61039dc9b8bfa6e47@syzkaller.appspotmail.com
      Fixes: 6812baab ("smc: establish pnet table management")
      Cc: <stable@vger.kernel.org> # v4.11+
      Signed-off-by: NEric Biggers <ebiggers@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d49baa7e
  4. 14 5月, 2018 2 次提交
    • W
      packet: in packet_snd start writing at link layer allocation · b84bbaf7
      Willem de Bruijn 提交于
      Packet sockets allow construction of packets shorter than
      dev->hard_header_len to accommodate protocols with variable length
      link layer headers. These packets are padded to dev->hard_header_len,
      because some device drivers interpret that as a minimum packet size.
      
      packet_snd reserves dev->hard_header_len bytes on allocation.
      SOCK_DGRAM sockets call skb_push in dev_hard_header() to ensure that
      link layer headers are stored in the reserved range. SOCK_RAW sockets
      do the same in tpacket_snd, but not in packet_snd.
      
      Syzbot was able to send a zero byte packet to a device with massive
      116B link layer header, causing padding to cross over into skb_shinfo.
      Fix this by writing from the start of the llheader reserved range also
      in the case of packet_snd/SOCK_RAW.
      
      Update skb_set_network_header to the new offset. This also corrects
      it for SOCK_DGRAM, where it incorrectly double counted reserve due to
      the skb_push in dev_hard_header.
      
      Fixes: 9ed988cd ("packet: validate variable length ll headers")
      Reported-by: syzbot+71d74a5406d02057d559@syzkaller.appspotmail.com
      Signed-off-by: NWillem de Bruijn <willemb@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      b84bbaf7
    • C
      netfilter: nf_tables: fix memory leak on error exit return · f0dfd7a2
      Colin Ian King 提交于
      Currently the -EBUSY error return path is not free'ing resources
      allocated earlier, leaving a memory leak. Fix this by exiting via the
      error exit label err5 that performs the necessary resource clean
      up.
      
      Detected by CoverityScan, CID#1432975 ("Resource leak")
      
      Fixes: 9744a6fc ("netfilter: nf_tables: check if same extensions are set when adding elements")
      Signed-off-by: NColin Ian King <colin.king@canonical.com>
      Signed-off-by: NPablo Neira Ayuso <pablo@netfilter.org>
      f0dfd7a2
  5. 12 5月, 2018 4 次提交
    • R
      net sched actions: fix refcnt leak in skbmod · a52956df
      Roman Mashak 提交于
      When application fails to pass flags in netlink TLV when replacing
      existing skbmod action, the kernel will leak refcnt:
      
      $ tc actions get action skbmod index 1
      total acts 0
      
              action order 0: skbmod pipe set smac 00:11:22:33:44:55
               index 1 ref 1 bind 0
      
      For example, at this point a buggy application replaces the action with
      index 1 with new smac 00:aa:22:33:44:55, it fails because of zero flags,
      however refcnt gets bumped:
      
      $ tc actions get actions skbmod index 1
      total acts 0
      
              action order 0: skbmod pipe set smac 00:11:22:33:44:55
               index 1 ref 2 bind 0
      $
      
      Tha patch fixes this by calling tcf_idr_release() on existing actions.
      
      Fixes: 86da71b5 ("net_sched: Introduce skbmod action")
      Signed-off-by: NRoman Mashak <mrv@mojatatu.com>
      Acked-by: NCong Wang <xiyou.wangcong@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      a52956df
    • J
      net: sched: fix error path in tcf_proto_create() when modules are not configured · d68d75fd
      Jiri Pirko 提交于
      In case modules are not configured, error out when tp->ops is null
      and prevent later null pointer dereference.
      
      Fixes: 33a48927 ("sched: push TC filter protocol creation into a separate function")
      Signed-off-by: NJiri Pirko <jiri@mellanox.com>
      Acked-by: NCong Wang <xiyou.wangcong@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d68d75fd
    • R
      net sched actions: fix invalid pointer dereferencing if skbedit flags missing · af5d0184
      Roman Mashak 提交于
      When application fails to pass flags in netlink TLV for a new skbedit action,
      the kernel results in the following oops:
      
      [    8.307732] BUG: unable to handle kernel paging request at 0000000000021130
      [    8.309167] PGD 80000000193d1067 P4D 80000000193d1067 PUD 180e0067 PMD 0
      [    8.310595] Oops: 0000 [#1] SMP PTI
      [    8.311334] Modules linked in: kvm_intel kvm irqbypass crct10dif_pclmul crc32_pclmul ghash_clmulni_intel pcbc aesni_intel aes_x86_64 crypto_simd cryptd glue_helper serio_raw
      [    8.314190] CPU: 1 PID: 397 Comm: tc Not tainted 4.17.0-rc3+ #357
      [    8.315252] RIP: 0010:__tcf_idr_release+0x33/0x140
      [    8.316203] RSP: 0018:ffffa0718038f840 EFLAGS: 00010246
      [    8.317123] RAX: 0000000000000001 RBX: 0000000000021100 RCX: 0000000000000000
      [    8.319831] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000021100
      [    8.321181] RBP: 0000000000000000 R08: 000000000004adf8 R09: 0000000000000122
      [    8.322645] R10: 0000000000000000 R11: ffffffff9e5b01ed R12: 0000000000000000
      [    8.324157] R13: ffffffff9e0d3cc0 R14: 0000000000000000 R15: 0000000000000000
      [    8.325590] FS:  00007f591292e700(0000) GS:ffff8fcf5bc40000(0000) knlGS:0000000000000000
      [    8.327001] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [    8.327987] CR2: 0000000000021130 CR3: 00000000180e6004 CR4: 00000000001606a0
      [    8.329289] Call Trace:
      [    8.329735]  tcf_skbedit_init+0xa7/0xb0
      [    8.330423]  tcf_action_init_1+0x362/0x410
      [    8.331139]  ? try_to_wake_up+0x44/0x430
      [    8.331817]  tcf_action_init+0x103/0x190
      [    8.332511]  tc_ctl_action+0x11a/0x220
      [    8.333174]  rtnetlink_rcv_msg+0x23d/0x2e0
      [    8.333902]  ? _cond_resched+0x16/0x40
      [    8.334569]  ? __kmalloc_node_track_caller+0x5b/0x2c0
      [    8.335440]  ? rtnl_calcit.isra.31+0xf0/0xf0
      [    8.336178]  netlink_rcv_skb+0xdb/0x110
      [    8.336855]  netlink_unicast+0x167/0x220
      [    8.337550]  netlink_sendmsg+0x2a7/0x390
      [    8.338258]  sock_sendmsg+0x30/0x40
      [    8.338865]  ___sys_sendmsg+0x2c5/0x2e0
      [    8.339531]  ? pagecache_get_page+0x27/0x210
      [    8.340271]  ? filemap_fault+0xa2/0x630
      [    8.340943]  ? page_add_file_rmap+0x108/0x200
      [    8.341732]  ? alloc_set_pte+0x2aa/0x530
      [    8.342573]  ? finish_fault+0x4e/0x70
      [    8.343332]  ? __handle_mm_fault+0xbc1/0x10d0
      [    8.344337]  ? __sys_sendmsg+0x53/0x80
      [    8.345040]  __sys_sendmsg+0x53/0x80
      [    8.345678]  do_syscall_64+0x4f/0x100
      [    8.346339]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
      [    8.347206] RIP: 0033:0x7f591191da67
      [    8.347831] RSP: 002b:00007fff745abd48 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
      [    8.349179] RAX: ffffffffffffffda RBX: 00007fff745abe70 RCX: 00007f591191da67
      [    8.350431] RDX: 0000000000000000 RSI: 00007fff745abdc0 RDI: 0000000000000003
      [    8.351659] RBP: 000000005af35251 R08: 0000000000000001 R09: 0000000000000000
      [    8.352922] R10: 00000000000005f1 R11: 0000000000000246 R12: 0000000000000000
      [    8.354183] R13: 00007fff745afed0 R14: 0000000000000001 R15: 00000000006767c0
      [    8.355400] Code: 41 89 d4 53 89 f5 48 89 fb e8 aa 20 fd ff 85 c0 0f 84 ed 00
      00 00 48 85 db 0f 84 cf 00 00 00 40 84 ed 0f 85 cd 00 00 00 45 84 e4 <8b> 53 30
      74 0d 85 d2 b8 ff ff ff ff 0f 8f b3 00 00 00 8b 43 2c
      [    8.358699] RIP: __tcf_idr_release+0x33/0x140 RSP: ffffa0718038f840
      [    8.359770] CR2: 0000000000021130
      [    8.360438] ---[ end trace 60c66be45dfc14f0 ]---
      
      The caller calls action's ->init() and passes pointer to "struct tc_action *a",
      which later may be initialized to point at the existing action, otherwise
      "struct tc_action *a" is still invalid, and therefore dereferencing it is an
      error as happens in tcf_idr_release, where refcnt is decremented.
      
      So in case of missing flags tcf_idr_release must be called only for
      existing actions.
      
      v2:
          - prepare patch for net tree
      
      Fixes: 5e1567ae ("net sched: skbedit action fix late binding")
      Signed-off-by: NRoman Mashak <mrv@mojatatu.com>
      Acked-by: NCong Wang <xiyou.wangcong@gmail.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      af5d0184
    • A
      ipv4: fix memory leaks in udp_sendmsg, ping_v4_sendmsg · 1b97013b
      Andrey Ignatov 提交于
      Fix more memory leaks in ip_cmsg_send() callers. Part of them were fixed
      earlier in 91948309.
      
      * udp_sendmsg one was there since the beginning when linux sources were
        first added to git;
      * ping_v4_sendmsg one was copy/pasted in c319b4d7.
      
      Whenever return happens in udp_sendmsg() or ping_v4_sendmsg() IP options
      have to be freed if they were allocated previously.
      
      Add label so that future callers (if any) can use it instead of kfree()
      before return that is easy to forget.
      
      Fixes: c319b4d7 (net: ipv4: add IPPROTO_ICMP socket kind)
      Signed-off-by: NAndrey Ignatov <rdna@fb.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      1b97013b
  6. 11 5月, 2018 11 次提交
  7. 10 5月, 2018 3 次提交
    • Y
      tipc: eliminate KMSAN uninit-value in strcmp complaint · 94f6a80c
      Ying Xue 提交于
      When we get link properties through netlink interface with
      tipc_nl_node_get_link(), we don't validate TIPC_NLA_LINK_NAME
      attribute at all, instead we directly use it. As a consequence,
      KMSAN detected the TIPC_NLA_LINK_NAME attribute was an uninitialized
      value, and then posted the following complaint:
      
      ==================================================================
      BUG: KMSAN: uninit-value in strcmp+0xf7/0x160 lib/string.c:329
      CPU: 1 PID: 4527 Comm: syz-executor655 Not tainted 4.16.0+ #87
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
      Google 01/01/2011
      Call Trace:
        __dump_stack lib/dump_stack.c:17 [inline]
        dump_stack+0x185/0x1d0 lib/dump_stack.c:53
        kmsan_report+0x142/0x240 mm/kmsan/kmsan.c:1067
        __msan_warning_32+0x6c/0xb0 mm/kmsan/kmsan_instr.c:683
        strcmp+0xf7/0x160 lib/string.c:329
        tipc_nl_node_get_link+0x220/0x6f0 net/tipc/node.c:1881
        genl_family_rcv_msg net/netlink/genetlink.c:599 [inline]
        genl_rcv_msg+0x1686/0x1810 net/netlink/genetlink.c:624
        netlink_rcv_skb+0x378/0x600 net/netlink/af_netlink.c:2447
        genl_rcv+0x63/0x80 net/netlink/genetlink.c:635
        netlink_unicast_kernel net/netlink/af_netlink.c:1311 [inline]
        netlink_unicast+0x166b/0x1740 net/netlink/af_netlink.c:1337
        netlink_sendmsg+0x1048/0x1310 net/netlink/af_netlink.c:1900
        sock_sendmsg_nosec net/socket.c:630 [inline]
        sock_sendmsg net/socket.c:640 [inline]
        ___sys_sendmsg+0xec0/0x1310 net/socket.c:2046
        __sys_sendmsg net/socket.c:2080 [inline]
        SYSC_sendmsg+0x2a3/0x3d0 net/socket.c:2091
        SyS_sendmsg+0x54/0x80 net/socket.c:2087
        do_syscall_64+0x309/0x430 arch/x86/entry/common.c:287
        entry_SYSCALL_64_after_hwframe+0x3d/0xa2
      RIP: 0033:0x445589
      RSP: 002b:00007fb7ee66cdb8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
      RAX: ffffffffffffffda RBX: 00000000006dac24 RCX: 0000000000445589
      RDX: 0000000000000000 RSI: 0000000020023000 RDI: 0000000000000003
      RBP: 00000000006dac20 R08: 0000000000000000 R09: 0000000000000000
      R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
      R13: 00007fffa2bf3f3f R14: 00007fb7ee66d9c0 R15: 0000000000000001
      
      Uninit was created at:
        kmsan_save_stack_with_flags mm/kmsan/kmsan.c:278 [inline]
        kmsan_internal_poison_shadow+0xb8/0x1b0 mm/kmsan/kmsan.c:188
        kmsan_kmalloc+0x94/0x100 mm/kmsan/kmsan.c:314
        kmsan_slab_alloc+0x11/0x20 mm/kmsan/kmsan.c:321
        slab_post_alloc_hook mm/slab.h:445 [inline]
        slab_alloc_node mm/slub.c:2737 [inline]
        __kmalloc_node_track_caller+0xaed/0x11c0 mm/slub.c:4369
        __kmalloc_reserve net/core/skbuff.c:138 [inline]
        __alloc_skb+0x2cf/0x9f0 net/core/skbuff.c:206
        alloc_skb include/linux/skbuff.h:984 [inline]
        netlink_alloc_large_skb net/netlink/af_netlink.c:1183 [inline]
        netlink_sendmsg+0x9a6/0x1310 net/netlink/af_netlink.c:1875
        sock_sendmsg_nosec net/socket.c:630 [inline]
        sock_sendmsg net/socket.c:640 [inline]
        ___sys_sendmsg+0xec0/0x1310 net/socket.c:2046
        __sys_sendmsg net/socket.c:2080 [inline]
        SYSC_sendmsg+0x2a3/0x3d0 net/socket.c:2091
        SyS_sendmsg+0x54/0x80 net/socket.c:2087
        do_syscall_64+0x309/0x430 arch/x86/entry/common.c:287
        entry_SYSCALL_64_after_hwframe+0x3d/0xa2
      ==================================================================
      
      To quiet the complaint, TIPC_NLA_LINK_NAME attribute has been
      validated in tipc_nl_node_get_link() before it's used.
      
      Reported-by: syzbot+df0257c92ffd4fcc58cd@syzkaller.appspotmail.com
      Signed-off-by: NYing Xue <ying.xue@windriver.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      94f6a80c
    • S
      net/9p: correct some comment errors in 9p file system code · 4a026da9
      Sun Lianwen 提交于
      There are follow comment errors:
      1 The function name is wrong in p9_release_pages() comment.
      2 The function name and variable name is wrong in p9_poll_workfn() comment.
      3 There is no variable dm_mr and lkey in struct p9_trans_rdma.
      4 The function name is wrong in rdma_create_trans() comment.
      5 There is no variable initialized in struct virtio_chan.
      6 The variable name is wrong in p9_virtio_zc_request() comment.
      Signed-off-by: NSun Lianwen <sunlw.fnst@cn.fujitsu.com>
      Reviewed-by: NRandy Dunlap <rdunlap@infradead.org>
      Reviewed-by: NRandy Dunlap <rdunlap@infradead.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4a026da9
    • I
      libceph: add osd_req_op_extent_osd_data_bvecs() · 0010f705
      Ilya Dryomov 提交于
      ... and store num_bvecs for client code's convenience.
      Signed-off-by: NIlya Dryomov <idryomov@gmail.com>
      Reviewed-by: NJeff Layton <jlayton@redhat.com>
      Reviewed-by: N"Yan, Zheng" <zyan@redhat.com>
      0010f705
  8. 09 5月, 2018 3 次提交
  9. 08 5月, 2018 12 次提交
    • F
      netfilter: nf_tables: don't assume chain stats are set when jumplabel is set · 00924094
      Florian Westphal 提交于
      nft_chain_stats_replace() and all other spots assume ->stats can be
      NULL, but nft_update_chain_stats does not.  It must do this check,
      just because the jump label is set doesn't mean all basechains have stats
      assigned.
      Signed-off-by: NFlorian Westphal <fw@strlen.de>
      Signed-off-by: NPablo Neira Ayuso <pablo@netfilter.org>
      00924094
    • F
      netfilter: x_tables: add module alias for icmp matches · a44f6d82
      Florian Westphal 提交于
      The icmp matches are implemented in ip_tables and ip6_tables,
      respectively, so for normal iptables they are always available:
      those modules are loaded once iptables calls getsockopt() to fetch
      available module revisions.
      
      In iptables-over-nftables case probing occurs via nfnetlink, so
      these modules might not be loaded.  Add aliases so modprobe can load
      these when icmp/icmp6 is requested.
      Signed-off-by: NFlorian Westphal <fw@strlen.de>
      Signed-off-by: NPablo Neira Ayuso <pablo@netfilter.org>
      a44f6d82
    • F
      netfilter: prefer nla_strlcpy for dealing with NLA_STRING attributes · 4e09fc87
      Florian Westphal 提交于
      fixes these warnings:
      'nfnl_cthelper_create' at net/netfilter/nfnetlink_cthelper.c:237:2,
      'nfnl_cthelper_new' at net/netfilter/nfnetlink_cthelper.c:450:9:
      ./include/linux/string.h:246:9: warning: '__builtin_strncpy' specified bound 16 equals destination size [-Wstringop-truncation]
        return __builtin_strncpy(p, q, size);
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      
      Moreover, strncpy assumes null-terminated source buffers, but thats
      not the case here.
      Unlike strlcpy, nla_strlcpy *does* pad the destination buffer
      while also considering nla attribute size.
      Signed-off-by: NFlorian Westphal <fw@strlen.de>
      Signed-off-by: NPablo Neira Ayuso <pablo@netfilter.org>
      4e09fc87
    • F
      netfilter: core: add missing __rcu annotation · 25fd386e
      Florian Westphal 提交于
      removes following sparse error:
      net/netfilter/core.c:598:30: warning: incorrect type in argument 1 (different address spaces)
      net/netfilter/core.c:598:30:    expected struct nf_hook_entries **e
      net/netfilter/core.c:598:30:    got struct nf_hook_entries [noderef] <asn:4>**<noident>
      Signed-off-by: NFlorian Westphal <fw@strlen.de>
      Signed-off-by: NPablo Neira Ayuso <pablo@netfilter.org>
      25fd386e
    • J
      ipvs: fix stats update from local clients · d5e032fc
      Julian Anastasov 提交于
      Local clients are not properly synchronized on 32-bit CPUs when
      updating stats (3.10+). Now it is possible estimation_timer (timer),
      a stats reader, to interrupt the local client in the middle of
      write_seqcount_{begin,end} sequence leading to loop (DEADLOCK).
      The same interrupt can happen from received packet (SoftIRQ)
      which updates the same per-CPU stats.
      
      Fix it by disabling BH while updating stats.
      
      Found with debug:
      
      WARNING: inconsistent lock state
      4.17.0-rc2-00105-g35cb6d7-dirty #2 Not tainted
      --------------------------------
      inconsistent {IN-SOFTIRQ-R} -> {SOFTIRQ-ON-W} usage.
      ftp/2545 [HC0[0]:SC0[0]:HE1:SE1] takes:
      86845479 (&syncp->seq#6){+.+-}, at: ip_vs_schedule+0x1c5/0x59e [ip_vs]
      {IN-SOFTIRQ-R} state was registered at:
       lock_acquire+0x44/0x5b
       estimation_timer+0x1b3/0x341 [ip_vs]
       call_timer_fn+0x54/0xcd
       run_timer_softirq+0x10c/0x12b
       __do_softirq+0xc1/0x1a9
       do_softirq_own_stack+0x1d/0x23
       irq_exit+0x4a/0x64
       smp_apic_timer_interrupt+0x63/0x71
       apic_timer_interrupt+0x3a/0x40
       default_idle+0xa/0xc
       arch_cpu_idle+0x9/0xb
       default_idle_call+0x21/0x23
       do_idle+0xa0/0x167
       cpu_startup_entry+0x19/0x1b
       start_secondary+0x133/0x182
       startup_32_smp+0x164/0x168
      irq event stamp: 42213
      
      other info that might help us debug this:
      Possible unsafe locking scenario:
      
            CPU0
            ----
       lock(&syncp->seq#6);
       <Interrupt>
         lock(&syncp->seq#6);
      
      *** DEADLOCK ***
      
      Fixes: ac69269a ("ipvs: do not disable bh for long time")
      Signed-off-by: NJulian Anastasov <ja@ssi.bg>
      Acked-by: NSimon Horman <horms@verge.net.au>
      Signed-off-by: NPablo Neira Ayuso <pablo@netfilter.org>
      d5e032fc
    • J
      ipvs: fix refcount usage for conns in ops mode · a050d345
      Julian Anastasov 提交于
      Connections in One-packet scheduling mode (-o, --ops) are
      removed with refcnt=0 because they are not hashed in conn table.
      To avoid refcount_dec reporting this as error, change them to be
      removed with refcount_dec_if_one as all other connections.
      
      refcount_t hit zero at ip_vs_conn_put+0x31/0x40 [ip_vs]
      in sh[15519], uid/euid: 497/497
      WARNING: CPU: 0 PID: 15519 at ../kernel/panic.c:657
      refcount_error_report+0x94/0x9e
      Modules linked in: ip_vs_rr cirrus ttm sb_edac
      edac_core drm_kms_helper crct10dif_pclmul crc32_pclmul
      ghash_clmulni_intel pcbc mousedev drm aesni_intel aes_x86_64
      crypto_simd glue_helper cryptd psmouse evdev input_leds led_class
      intel_agp fb_sys_fops syscopyarea sysfillrect intel_rapl_perf mac_hid
      intel_gtt serio_raw sysimgblt agpgart i2c_piix4 i2c_core ata_generic
      pata_acpi floppy cfg80211 rfkill button loop macvlan ip_vs
      nf_conntrack libcrc32c crc32c_generic ip_tables x_tables ipv6
      crc_ccitt autofs4 ext4 crc16 mbcache jbd2 fscrypto ata_piix libata
      atkbd libps2 scsi_mod crc32c_intel i8042 rtc_cmos serio af_packet
      dm_mod dax fuse xen_netfront xen_blkfront
      CPU: 0 PID: 15519 Comm: sh Tainted: G        W
      4.15.17 #1-NixOS
      Hardware name: Xen HVM domU, BIOS 4.2.amazon 08/24/2006
      RIP: 0010:refcount_error_report+0x94/0x9e
      RSP: 0000:ffffa344dde039c8 EFLAGS: 00010296
      RAX: 0000000000000057 RBX: ffffffff92f20e06 RCX: 0000000000000006
      RDX: 0000000000000007 RSI: 0000000000000086 RDI: ffffa344dde165c0
      RBP: ffffa344dde03b08 R08: 0000000000000218 R09: 0000000000000004
      R10: ffffffff93006a80 R11: 0000000000000001 R12: ffffa344d68cd100
      R13: 00000000000001f1 R14: ffffffff92f12fb0 R15: 0000000000000004
      FS:  00007fc9d2040fc0(0000) GS:ffffa344dde00000(0000)
      knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 000000000262a000 CR3: 0000000016a0c004 CR4: 00000000001606f0
      Call Trace:
       <IRQ>
       ex_handler_refcount+0x4e/0x80
       fixup_exception+0x33/0x40
       do_trap+0x83/0x140
       do_error_trap+0x83/0xf0
       ? ip_vs_conn_drop_conntrack+0x120/0x1a5 [ip_vs]
       ? ip_finish_output2+0x29c/0x390
       ? ip_finish_output2+0x1a2/0x390
       invalid_op+0x1b/0x40
      RIP: 0010:ip_vs_conn_put+0x31/0x40 [ip_vs]
      RSP: 0000:ffffa344dde03bb8 EFLAGS: 00010246
      RAX: 0000000000000001 RBX: ffffa344df31cf00 RCX: ffffa344d7450198
      RDX: 0000000000000003 RSI: 00000000fffffe01 RDI: ffffa344d7450140
      RBP: 0000000000000002 R08: 0000000000000476 R09: 0000000000000000
      R10: ffffa344dde03b28 R11: ffffa344df200000 R12: ffffa344d7d09000
      R13: ffffa344def3a980 R14: ffffffffc04f6e20 R15: 0000000000000008
       ip_vs_in.part.29.constprop.36+0x34f/0x640 [ip_vs]
       ? ip_vs_conn_out_get+0xe0/0xe0 [ip_vs]
       ip_vs_remote_request4+0x47/0xa0 [ip_vs]
       ? ip_vs_in.part.29.constprop.36+0x640/0x640 [ip_vs]
       nf_hook_slow+0x43/0xc0
       ip_local_deliver+0xac/0xc0
       ? ip_rcv_finish+0x400/0x400
       ip_rcv+0x26c/0x380
       __netif_receive_skb_core+0x3a0/0xb10
       ? inet_gro_receive+0x23c/0x2b0
       ? netif_receive_skb_internal+0x24/0xb0
       netif_receive_skb_internal+0x24/0xb0
       napi_gro_receive+0xb8/0xe0
       xennet_poll+0x676/0xb40 [xen_netfront]
       net_rx_action+0x139/0x3a0
       __do_softirq+0xde/0x2b4
       irq_exit+0xae/0xb0
       xen_evtchn_do_upcall+0x2c/0x40
       xen_hvm_callback_vector+0x7d/0x90
       </IRQ>
      RIP: 0033:0x7fc9d11c91f9
      RSP: 002b:00007ffebe8a2ea0 EFLAGS: 00000202 ORIG_RAX:
      ffffffffffffff0c
      RAX: 00000000ffffffff RBX: 0000000002609808 RCX: 0000000000000054
      RDX: 0000000000000001 RSI: 0000000002605440 RDI: 00000000025f940e
      RBP: 00000000025f940e R08: 000000000260213d R09: 1999999999999999
      R10: 000000000262a808 R11: 00000000025f942d R12: 00000000025f940e
      R13: 00007fc9d1301e20 R14: 00000000025f9408 R15: 00007fc9d1302720
      Code: 48 8b 95 80 00 00 00 41 55 49 8d 8c 24 e0 05 00
      00 45 8b 84 24 38 04 00 00 41 89 c1 48 89 de 48 c7 c7 a8 2f f2 92 e8
      7c fa ff ff <0f> 0b 58 5b 5d 41 5c 41 5d c3 0f 1f 44 00 00 55 48 89 e5
      41 56
      Reported-by: NNet Filter <netfilternetfilter@gmail.com>
      Fixes: b54ab92b ("netfilter: refcounter conversions")
      Signed-off-by: NJulian Anastasov <ja@ssi.bg>
      Acked-by: NSimon Horman <horms@verge.net.au>
      Signed-off-by: NPablo Neira Ayuso <pablo@netfilter.org>
      a050d345
    • F
      netfilter: nf_tables: nft_compat: fix refcount leak on xt module · b8e9dc1c
      Florian Westphal 提交于
      Taehee Yoo reported following bug:
          iptables-compat -I OUTPUT -m cpu --cpu 0
          iptables-compat -F
          lsmod |grep xt_cpu
          xt_cpu                 16384  1
      
      Quote:
      "When above command is given, a netlink message has two expressions that
      are the cpu compat and the nft_counter.
      The nft_expr_type_get() in the nf_tables_expr_parse() successes
      first expression then, calls select_ops callback.
      (allocates memory and holds module)
      But, second nft_expr_type_get() in the nf_tables_expr_parse()
      returns -EAGAIN because of request_module().
      In that point, by the 'goto err1',
      the 'module_put(info[i].ops->type->owner)' is called.
      There is no release routine."
      
      The core problem is that unlike all other expression,
      nft_compat select_ops has side effects.
      
      1. it allocates dynamic memory which holds an nft ops struct.
         In all other expressions, ops has static storage duration.
      2. It grabs references to the xt module that it is supposed to
         invoke.
      
      Depending on where things go wrong, error unwinding doesn't
      always do the right thing.
      
      In the above scenario, a new nft_compat_expr is created and
      xt_cpu module gets loaded with a refcount of 1.
      
      Due to to -EAGAIN, the netlink messages get re-parsed.
      When that happens, nft_compat finds that xt_cpu is already present
      and increments module refcount again.
      
      This fixes the problem by making select_ops to have no visible
      side effects and removes all extra module_get/put.
      
      When select_ops creates a new nft_compat expression, the new
      expression has a refcount of 0, and the xt module gets its refcount
      incremented.
      
      When error happens, the next call finds existing entry, but will no
      longer increase the reference count -- the presence of existing
      nft_xt means we already hold a module reference.
      
      Because nft_xt_put is only called from nft_compat destroy hook,
      it will never see the initial zero reference count.
      ->destroy can only be called after ->init(), and that will increase the
      refcount.
      
      Lastly, we now free nft_xt struct with kfree_rcu.
      Else, we get use-after free in nf_tables_rule_destroy:
      
        while (expr != nft_expr_last(rule) && expr->ops) {
          nf_tables_expr_destroy(ctx, expr);
          expr = nft_expr_next(expr); // here
      
      nft_expr_next() dereferences expr->ops. This is safe
      for all users, as ops have static storage duration.
      In nft_compat case however, its ->destroy callback can
      free the memory that hold the ops structure.
      Tested-by: NTaehee Yoo <ap420073@gmail.com>
      Reported-by: NTaehee Yoo <ap420073@gmail.com>
      Signed-off-by: NFlorian Westphal <fw@strlen.de>
      Signed-off-by: NPablo Neira Ayuso <pablo@netfilter.org>
      b8e9dc1c
    • S
      netfilter: bridge: stp fix reference to uninitialized data · a4995684
      Stephen Hemminger 提交于
      The destination mac (destmac) is only valid if EBT_DESTMAC flag
      is set. Fix by changing the order of the comparison to look for
      the flag first.
      
      Reported-by: syzbot+5c06e318fc558cc27823@syzkaller.appspotmail.com
      Signed-off-by: NStephen Hemminger <stephen@networkplumber.org>
      Signed-off-by: NPablo Neira Ayuso <pablo@netfilter.org>
      a4995684
    • E
      llc: better deal with too small mtu · 2c5d5b13
      Eric Dumazet 提交于
      syzbot loves to set very small mtu on devices, since it brings joy.
      We must make llc_ui_sendmsg() fool proof.
      
      usercopy: Kernel memory overwrite attempt detected to wrapped address (offset 0, size 18446612139802320068)!
      
      kernel BUG at mm/usercopy.c:100!
      invalid opcode: 0000 [#1] SMP KASAN
      Dumping ftrace buffer:
         (ftrace buffer empty)
      Modules linked in:
      CPU: 0 PID: 17464 Comm: syz-executor1 Not tainted 4.17.0-rc3+ #36
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
      RIP: 0010:usercopy_abort+0xbb/0xbd mm/usercopy.c:88
      RSP: 0018:ffff8801868bf800 EFLAGS: 00010282
      RAX: 000000000000006c RBX: ffffffff87d2fb00 RCX: 0000000000000000
      RDX: 000000000000006c RSI: ffffffff81610731 RDI: ffffed0030d17ef6
      RBP: ffff8801868bf858 R08: ffff88018daa4200 R09: ffffed003b5c4fb0
      R10: ffffed003b5c4fb0 R11: ffff8801dae27d87 R12: ffffffff87d2f8e0
      R13: ffffffff87d2f7a0 R14: ffffffff87d2f7a0 R15: ffffffff87d2f7a0
      FS:  00007f56a14ac700(0000) GS:ffff8801dae00000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 0000001b2bc21000 CR3: 00000001abeb1000 CR4: 00000000001426f0
      DR0: 0000000020000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000030602
      Call Trace:
       check_bogus_address mm/usercopy.c:153 [inline]
       __check_object_size+0x5d9/0x5d9 mm/usercopy.c:256
       check_object_size include/linux/thread_info.h:108 [inline]
       check_copy_size include/linux/thread_info.h:139 [inline]
       copy_from_iter_full include/linux/uio.h:121 [inline]
       memcpy_from_msg include/linux/skbuff.h:3305 [inline]
       llc_ui_sendmsg+0x4b1/0x1530 net/llc/af_llc.c:941
       sock_sendmsg_nosec net/socket.c:629 [inline]
       sock_sendmsg+0xd5/0x120 net/socket.c:639
       __sys_sendto+0x3d7/0x670 net/socket.c:1789
       __do_sys_sendto net/socket.c:1801 [inline]
       __se_sys_sendto net/socket.c:1797 [inline]
       __x64_sys_sendto+0xe1/0x1a0 net/socket.c:1797
       do_syscall_64+0x1b1/0x800 arch/x86/entry/common.c:287
       entry_SYSCALL_64_after_hwframe+0x49/0xbe
      RIP: 0033:0x455979
      RSP: 002b:00007f56a14abc68 EFLAGS: 00000246 ORIG_RAX: 000000000000002c
      RAX: ffffffffffffffda RBX: 00007f56a14ac6d4 RCX: 0000000000455979
      RDX: 0000000000000000 RSI: 0000000020000000 RDI: 0000000000000018
      RBP: 000000000072bea0 R08: 00000000200012c0 R09: 0000000000000010
      R10: 0000000000000000 R11: 0000000000000246 R12: 00000000ffffffff
      R13: 0000000000000548 R14: 00000000006fbf60 R15: 0000000000000000
      Code: 55 c0 e8 c0 55 bb ff ff 75 c8 48 8b 55 c0 4d 89 f9 ff 75 d0 4d 89 e8 48 89 d9 4c 89 e6 41 56 48 c7 c7 80 fa d2 87 e8 a0 0b a3 ff <0f> 0b e8 95 55 bb ff e8 c0 a8 f7 ff 8b 95 14 ff ff ff 4d 89 e8
      RIP: usercopy_abort+0xbb/0xbd mm/usercopy.c:88 RSP: ffff8801868bf800
      
      Fixes: 1da177e4 ("Linux-2.6.12-rc2")
      Signed-off-by: NEric Dumazet <edumazet@google.com>
      Reported-by: Nsyzbot <syzkaller@googlegroups.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      2c5d5b13
    • G
      trivial: fix inconsistent help texts · a9f71d0d
      Georg Hofmann 提交于
      This patch removes "experimental" from the help text where depends on
      CONFIG_EXPERIMENTAL was already removed.
      Signed-off-by: NGeorg Hofmann <georg@hofmannsweb.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      a9f71d0d
    • A
      net/tls: Fix connection stall on partial tls record · 080324c3
      Andre Tomt 提交于
      In the case of writing a partial tls record we forgot to clear the
      ctx->in_tcp_sendpages flag, causing some connections to stall.
      
      Fixes: c212d2c7 ("net/tls: Don't recursively call push_record during tls_write_space callbacks")
      Signed-off-by: NAndre Tomt <andre@tomt.net>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      080324c3
    • E
      tls: fix use after free in tls_sk_proto_close · 98f0a395
      Eric Dumazet 提交于
      syzbot reported a use-after-free in tls_sk_proto_close
      
      Add a boolean value to cleanup a bit this function.
      
      BUG: KASAN: use-after-free in tls_sk_proto_close+0x8ab/0x9c0 net/tls/tls_main.c:297
      Read of size 1 at addr ffff8801ae40a858 by task syz-executor363/4503
      
      CPU: 0 PID: 4503 Comm: syz-executor363 Not tainted 4.17.0-rc3+ #34
      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+0x1b9/0x294 lib/dump_stack.c:113
       print_address_description+0x6c/0x20b mm/kasan/report.c:256
       kasan_report_error mm/kasan/report.c:354 [inline]
       kasan_report.cold.7+0x242/0x2fe mm/kasan/report.c:412
       __asan_report_load1_noabort+0x14/0x20 mm/kasan/report.c:430
       tls_sk_proto_close+0x8ab/0x9c0 net/tls/tls_main.c:297
       inet_release+0x104/0x1f0 net/ipv4/af_inet.c:427
       inet6_release+0x50/0x70 net/ipv6/af_inet6.c:460
       sock_release+0x96/0x1b0 net/socket.c:594
       sock_close+0x16/0x20 net/socket.c:1149
       __fput+0x34d/0x890 fs/file_table.c:209
       ____fput+0x15/0x20 fs/file_table.c:243
       task_work_run+0x1e4/0x290 kernel/task_work.c:113
       exit_task_work include/linux/task_work.h:22 [inline]
       do_exit+0x1aee/0x2730 kernel/exit.c:865
       do_group_exit+0x16f/0x430 kernel/exit.c:968
       get_signal+0x886/0x1960 kernel/signal.c:2469
       do_signal+0x98/0x2040 arch/x86/kernel/signal.c:810
       exit_to_usermode_loop+0x28a/0x310 arch/x86/entry/common.c:162
       prepare_exit_to_usermode arch/x86/entry/common.c:196 [inline]
       syscall_return_slowpath arch/x86/entry/common.c:265 [inline]
       do_syscall_64+0x6ac/0x800 arch/x86/entry/common.c:290
       entry_SYSCALL_64_after_hwframe+0x49/0xbe
      RIP: 0033:0x4457b9
      RSP: 002b:00007fdf4d766da8 EFLAGS: 00000246 ORIG_RAX: 00000000000000ca
      RAX: fffffffffffffe00 RBX: 00000000006dac3c RCX: 00000000004457b9
      RDX: 0000000000000000 RSI: 0000000000000000 RDI: 00000000006dac3c
      RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
      R10: 0000000000000000 R11: 0000000000000246 R12: 00000000006dac38
      R13: 3692738801137283 R14: 6bf92c39443c4c1d R15: 0000000000000006
      
      Allocated by task 4498:
       save_stack+0x43/0xd0 mm/kasan/kasan.c:448
       set_track mm/kasan/kasan.c:460 [inline]
       kasan_kmalloc+0xc4/0xe0 mm/kasan/kasan.c:553
       kmem_cache_alloc_trace+0x152/0x780 mm/slab.c:3620
       kmalloc include/linux/slab.h:512 [inline]
       kzalloc include/linux/slab.h:701 [inline]
       create_ctx net/tls/tls_main.c:521 [inline]
       tls_init+0x1f9/0xb00 net/tls/tls_main.c:633
       tcp_set_ulp+0x1bc/0x520 net/ipv4/tcp_ulp.c:153
       do_tcp_setsockopt.isra.39+0x44a/0x2600 net/ipv4/tcp.c:2588
       tcp_setsockopt+0xc1/0xe0 net/ipv4/tcp.c:2893
       sock_common_setsockopt+0x9a/0xe0 net/core/sock.c:3039
       __sys_setsockopt+0x1bd/0x390 net/socket.c:1903
       __do_sys_setsockopt net/socket.c:1914 [inline]
       __se_sys_setsockopt net/socket.c:1911 [inline]
       __x64_sys_setsockopt+0xbe/0x150 net/socket.c:1911
       do_syscall_64+0x1b1/0x800 arch/x86/entry/common.c:287
       entry_SYSCALL_64_after_hwframe+0x49/0xbe
      
      Freed by task 4503:
       save_stack+0x43/0xd0 mm/kasan/kasan.c:448
       set_track mm/kasan/kasan.c:460 [inline]
       __kasan_slab_free+0x11a/0x170 mm/kasan/kasan.c:521
       kasan_slab_free+0xe/0x10 mm/kasan/kasan.c:528
       __cache_free mm/slab.c:3498 [inline]
       kfree+0xd9/0x260 mm/slab.c:3813
       tls_sw_free_resources+0x2a3/0x360 net/tls/tls_sw.c:1037
       tls_sk_proto_close+0x67c/0x9c0 net/tls/tls_main.c:288
       inet_release+0x104/0x1f0 net/ipv4/af_inet.c:427
       inet6_release+0x50/0x70 net/ipv6/af_inet6.c:460
       sock_release+0x96/0x1b0 net/socket.c:594
       sock_close+0x16/0x20 net/socket.c:1149
       __fput+0x34d/0x890 fs/file_table.c:209
       ____fput+0x15/0x20 fs/file_table.c:243
       task_work_run+0x1e4/0x290 kernel/task_work.c:113
       exit_task_work include/linux/task_work.h:22 [inline]
       do_exit+0x1aee/0x2730 kernel/exit.c:865
       do_group_exit+0x16f/0x430 kernel/exit.c:968
       get_signal+0x886/0x1960 kernel/signal.c:2469
       do_signal+0x98/0x2040 arch/x86/kernel/signal.c:810
       exit_to_usermode_loop+0x28a/0x310 arch/x86/entry/common.c:162
       prepare_exit_to_usermode arch/x86/entry/common.c:196 [inline]
       syscall_return_slowpath arch/x86/entry/common.c:265 [inline]
       do_syscall_64+0x6ac/0x800 arch/x86/entry/common.c:290
       entry_SYSCALL_64_after_hwframe+0x49/0xbe
      
      The buggy address belongs to the object at ffff8801ae40a800
       which belongs to the cache kmalloc-256 of size 256
      The buggy address is located 88 bytes inside of
       256-byte region [ffff8801ae40a800, ffff8801ae40a900)
      The buggy address belongs to the page:
      page:ffffea0006b90280 count:1 mapcount:0 mapping:ffff8801ae40a080 index:0x0
      flags: 0x2fffc0000000100(slab)
      raw: 02fffc0000000100 ffff8801ae40a080 0000000000000000 000000010000000c
      raw: ffffea0006bea9e0 ffffea0006bc94a0 ffff8801da8007c0 0000000000000000
      page dumped because: kasan: bad access detected
      
      Fixes: dd0bed16 ("tls: support for Inline tls record")
      Signed-off-by: NEric Dumazet <edumazet@google.com>
      Cc: Atul Gupta <atul.gupta@chelsio.com>
      Cc: Steve Wise <swise@opengridcomputing.com>
      Cc: Ilya Lesokhin <ilyal@mellanox.com>
      Cc: Aviad Yehezkel <aviadye@mellanox.com>
      Cc: Dave Watson <davejwatson@fb.com>
      Reported-by: Nsyzbot <syzkaller@googlegroups.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      98f0a395