• Aya Levin's avatar
    net: ipv6: Validate GSO SKB before finish IPv6 processing · b210de4f
    Aya Levin authored
    There are cases where GSO segment's length exceeds the egress MTU:
     - Forwarding of a TCP GRO skb, when DF flag is not set.
     - Forwarding of an skb that arrived on a virtualisation interface
       (virtio-net/vhost/tap) with TSO/GSO size set by other network
       stack.
     - Local GSO skb transmitted on an NETIF_F_TSO tunnel stacked over an
       interface with a smaller MTU.
     - Arriving GRO skb (or GSO skb in a virtualised environment) that is
       bridged to a NETIF_F_TSO tunnel stacked over an interface with an
       insufficient MTU.
    
    If so:
     - Consume the SKB and its segments.
     - Issue an ICMP packet with 'Packet Too Big' message containing the
       MTU, allowing the source host to reduce its Path MTU appropriately.
    
    Note: These cases are handled in the same manner in IPv4 output finish.
    This patch aligns the behavior of IPv6 and the one of IPv4.
    
    Fixes: 9e508490 ("netfilter: ipv6: move POSTROUTING invocation before fragmentation")
    Signed-off-by: default avatarAya Levin <ayal@nvidia.com>
    Reviewed-by: default avatarTariq Toukan <tariqt@nvidia.com>
    Link: https://lore.kernel.org/r/1610027418-30438-1-git-send-email-ayal@nvidia.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    b210de4f
ip6_output.c 50.6 KB