From patchwork Fri May 11 12:49:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: William Tu X-Patchwork-Id: 911983 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="D3CQCvzg"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40j9161Z2Zz9ry1 for ; Fri, 11 May 2018 22:50:18 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752729AbeEKMuQ (ORCPT ); Fri, 11 May 2018 08:50:16 -0400 Received: from mail-pf0-f196.google.com ([209.85.192.196]:44881 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750726AbeEKMuP (ORCPT ); Fri, 11 May 2018 08:50:15 -0400 Received: by mail-pf0-f196.google.com with SMTP id q22-v6so2693750pff.11 for ; Fri, 11 May 2018 05:50:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=VVDq1W37zDWKdh9CvuEk23kUKogSFQBZHcQ1SYiqzSw=; b=D3CQCvzgbFBak6yyTsKHxRNMhX4G7OBinW831JiOflTHA4xDYZa+0uHF6k27zFRImk UuDiZqJUjhnA2tJuPcefAVx4wiALCQLWYfSB11uosgl+u5YR8AKz9RS/Y21lFzPW29Y0 gFvnrgJsyJu9BiJu9si0aB0PsE2GKpxRzEXPhZhOkoPOdpMtucl9tvB+9Fna4IiADJW7 OErZgwkQmRmzAz4p13w+rhighSF6QGNP7kPQjKJRzQoL56SUbLwzHCcnlrByRmPaYZL7 g08fMjIsM1/BMqOpMHdYQXM5mTdUjEbl2fkqB9fyVHVdoBhDYEEGsqSJOeGaMmCRrvlP pVGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=VVDq1W37zDWKdh9CvuEk23kUKogSFQBZHcQ1SYiqzSw=; b=fPfHSYaDjqzWgHRdN8X5ENXdcS+DhqGWgxEQ0fwzJoWP1uf/J1m60Of5+Ebptpj2QK b44Y2xi0vuqnphJm/ztdKfxDf9UI9hOynNsk+yHIzuIQS4icWmrvH3ms5xJnkDJ3kTBJ fqapJhsRvc2OPOrVpdLkr0TrQOsWYVyG5C8uTZOmN7knQhOmRN7TqK8AclgMVsWPbM2v SB8mLxpRqenqkHCKPLa3g5EculHpkWx5g/LDlGYXJoe3wv6LzbNMb2wtBz5zvypGIYtK jU7lqSadRpLzbmQVnO/CD1LOK/DDKlYPsl6tfNqfXn8+4jFMsYQTtPr7dp9jycAOAwMF Wgjg== X-Gm-Message-State: ALKqPwcEwJh0rufMQJB2QPC4UnWKMoBoiVMxpElNHLzI8x1M0Pza2Je8 /Gr+pmoUHsW//Oz2SuQHqxixhCLH X-Google-Smtp-Source: AB8JxZqLHvN542lxLbDO0W+pJC979A0EeDFWWwHFFQxs2VTUba4VixTka4D/ZOEvlyMZpK3TnZo0uw== X-Received: by 2002:a65:5288:: with SMTP id y8-v6mr4442982pgp.69.1526043014351; Fri, 11 May 2018 05:50:14 -0700 (PDT) Received: from sc9-mailhost3.vmware.com (c-73-231-16-221.hsd1.ca.comcast.net. [73.231.16.221]) by smtp.gmail.com with ESMTPSA id 184-v6sm6141253pfg.89.2018.05.11.05.50.13 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 11 May 2018 05:50:13 -0700 (PDT) From: William Tu To: netdev@vger.kernel.org Subject: [PATCH net-next] erspan: auto detect truncated ipv6 packets. Date: Fri, 11 May 2018 05:49:47 -0700 Message-Id: <1526042987-20015-1-git-send-email-u9012063@gmail.com> X-Mailer: git-send-email 2.7.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Currently the truncated bit is set only when 1) the mirrored packet is larger than mtu and 2) the ipv4 packet tot_len is larger than the actual skb->len. This patch adds another case for detecting whether ipv6 packet is truncated or not, by checking the ipv6 header payload_len and the skb->len. Reported-by: Xiaoyan Jin Signed-off-by: William Tu --- net/ipv4/ip_gre.c | 6 ++++++ net/ipv6/ip6_gre.c | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c index dfe5b22f6ed4..2409e648454d 100644 --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c @@ -579,6 +579,7 @@ static void erspan_fb_xmit(struct sk_buff *skb, struct net_device *dev, int version; __be16 df; int nhoff; + int thoff; tun_info = skb_tunnel_info(skb); if (unlikely(!tun_info || !(tun_info->mode & IP_TUNNEL_INFO_TX) || @@ -611,6 +612,11 @@ static void erspan_fb_xmit(struct sk_buff *skb, struct net_device *dev, (ntohs(ip_hdr(skb)->tot_len) > skb->len - nhoff)) truncate = true; + thoff = skb_transport_header(skb) - skb_mac_header(skb); + if (skb->protocol == htons(ETH_P_IPV6) && + (ntohs(ipv6_hdr(skb)->payload_len) > skb->len - thoff)) + truncate = true; + if (version == 1) { erspan_build_header(skb, ntohl(tunnel_id_to_key32(key->tun_id)), ntohl(md->u.index), truncate, true); diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c index b511818b268c..bede77f24784 100644 --- a/net/ipv6/ip6_gre.c +++ b/net/ipv6/ip6_gre.c @@ -897,6 +897,7 @@ static netdev_tx_t ip6erspan_tunnel_xmit(struct sk_buff *skb, int err = -EINVAL; __u32 mtu; int nhoff; + int thoff; if (!ip6_tnl_xmit_ctl(t, &t->parms.laddr, &t->parms.raddr)) goto tx_err; @@ -914,6 +915,11 @@ static netdev_tx_t ip6erspan_tunnel_xmit(struct sk_buff *skb, (ntohs(ip_hdr(skb)->tot_len) > skb->len - nhoff)) truncate = true; + thoff = skb_transport_header(skb) - skb_mac_header(skb); + if (skb->protocol == htons(ETH_P_IPV6) && + (ntohs(ipv6_hdr(skb)->payload_len) > skb->len - thoff)) + truncate = true; + if (skb_cow_head(skb, dev->needed_headroom)) goto tx_err;