1. 14 4月, 2017 16 次提交
  2. 13 4月, 2017 2 次提交
    • I
      gso: Support frag_list splitting with head_frag · eaffadbb
      Ilan Tayari 提交于
      A driver may use build_skb() for received packets.
      These SKBs then have a head_frag.
      
      Since commit d7e8883c ("net: make GRO aware of
      skb->head_frag"), GRO may build frag_list SKBs out of
      head_frag received SKBs.
      In such a case, the chained SKBs end up with a head_frag.
      
      Commit 07b26c94 ("gso: Support partial splitting at
      the frag_list pointer") adds partial segmentation of frag_list
      SKB chains into individual SKBs.
      However, this is not done if the chained SKBs have any
      linear part, because the device may not be able to DMA
      the private linear buffer.
      
      A chained frag_list SKB with head_frag is wrongfully
      detected in this case as having a private linear part
      and thus falls back to software GSO, while in fact the
      linear part is backed by a DMA page just like any other frag.
      
      This causes low performance when forwarding those packets
      that were built with build_skb()
      
      Allow partial segmentation at the frag_list pointer for
      chained SKBs with head_frag.
      
      Note that such SKBs can only be created by GRO, when applied
      to received packets with head_frag.
      Also note that this change only affects the data path that
      performs the partial segmentation at frag_list pointer, and
      not any of the other more common data paths.
      Signed-off-by: NIlan Tayari <ilant@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      eaffadbb
    • R
      ipv6: Fix idev->addr_list corruption · a2d6cbb0
      Rabin Vincent 提交于
      addrconf_ifdown() removes elements from the idev->addr_list without
      holding the idev->lock.
      
      If this happens while the loop in __ipv6_dev_get_saddr() is handling the
      same element, that function ends up in an infinite loop:
      
        NMI watchdog: BUG: soft lockup - CPU#1 stuck for 23s! [test:1719]
        Call Trace:
         ipv6_get_saddr_eval+0x13c/0x3a0
         __ipv6_dev_get_saddr+0xe4/0x1f0
         ipv6_dev_get_saddr+0x1b4/0x204
         ip6_dst_lookup_tail+0xcc/0x27c
         ip6_dst_lookup_flow+0x38/0x80
         udpv6_sendmsg+0x708/0xba8
         sock_sendmsg+0x18/0x30
         SyS_sendto+0xb8/0xf8
         syscall_common+0x34/0x58
      
      Fixes: 6a923934 (Revert "ipv6: Revert optional address flusing on ifdown.")
      Signed-off-by: NRabin Vincent <rabinv@axis.com>
      Acked-by: NDavid Ahern <dsa@cumulusnetworks.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      a2d6cbb0
  3. 12 4月, 2017 20 次提交
  4. 10 4月, 2017 2 次提交
    • E
      tcp: clear saved_syn in tcp_disconnect() · 17c3060b
      Eric Dumazet 提交于
      In the (very unlikely) case a passive socket becomes a listener,
      we do not want to duplicate its saved SYN headers.
      
      This would lead to double frees, use after free, and please hackers and
      various fuzzers
      
      Tested:
          0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
         +0 setsockopt(3, IPPROTO_TCP, TCP_SAVE_SYN, [1], 4) = 0
         +0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
      
         +0 bind(3, ..., ...) = 0
         +0 listen(3, 5) = 0
      
         +0 < S 0:0(0) win 32972 <mss 1460,nop,wscale 7>
         +0 > S. 0:0(0) ack 1 <...>
        +.1 < . 1:1(0) ack 1 win 257
         +0 accept(3, ..., ...) = 4
      
         +0 connect(4, AF_UNSPEC, ...) = 0
         +0 close(3) = 0
         +0 bind(4, ..., ...) = 0
         +0 listen(4, 5) = 0
      
         +0 < S 0:0(0) win 32972 <mss 1460,nop,wscale 7>
         +0 > S. 0:0(0) ack 1 <...>
        +.1 < . 1:1(0) ack 1 win 257
      
      Fixes: cd8ae852 ("tcp: provide SYN headers for passive connections")
      Signed-off-by: NEric Dumazet <edumazet@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      17c3060b
    • D
      Revert "rtnl: Add support for netdev event to link messages" · bf74b20d
      David S. Miller 提交于
      This reverts commit def12888.
      
      As per discussion between Roopa Prabhu and David Ahern, it is
      advisable that we instead have the code collect the setlink triggered
      events into a bitmask emitted in the IFLA_EVENT netlink attribute.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      bf74b20d