From patchwork Thu Oct 5 19:07:12 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: William Tu X-Patchwork-Id: 822123 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@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; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="KmBwAamD"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3y7RkY5Vf7z9t5Y for ; Fri, 6 Oct 2017 09:09:09 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751409AbdJEWJG (ORCPT ); Thu, 5 Oct 2017 18:09:06 -0400 Received: from mail-pf0-f194.google.com ([209.85.192.194]:33181 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751369AbdJEWJF (ORCPT ); Thu, 5 Oct 2017 18:09:05 -0400 Received: by mail-pf0-f194.google.com with SMTP id m28so15274399pfi.0 for ; Thu, 05 Oct 2017 15:09:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=GLPGZh6D1TcfN+cBuhUmfppJG5YXcygV2D0+stB4i4g=; b=KmBwAamDLMrVCNi+7nFEhJ5uuqKi388QM/QXETmZSRCyxDRo8wvDrCic8mBZs/YhN1 LRn8ZOXOIDFykikg24MvFkFU7VQ4K1b7Pek/XJs3KfCtRTelDDyMum7JxdryhgNXehXX zuWYhhw/ho/WQejFg1UpLK61BpX5bRviH3p9oLx8/VWfyoZ/AJYRdBuLqANXMiLBstUb 820sQIq3VK8LI2lFnEqZHEen0ZRph3RuLt+RsO2RnE3Jh4JYoFsy+m+knUyfM/QQg1OD HdVdYlace8oGw13Od4ttd8CijwQEXHE3cjFkSC+8klRa4FYZFCXiuSY4N0Dk8DPqWdyG 0Xqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=GLPGZh6D1TcfN+cBuhUmfppJG5YXcygV2D0+stB4i4g=; b=DeCBuRTDcmYFii9g77ZCpPWryhe3PzUC61WXS+1+IPW5BZDsxlPNR5fW7N11hzaAZ1 gGV+0emeEERdJwX9Y4v5q3s5Jz4EQkhtp1S90gUeqhwCFRv8GDsgAPdUGo0L8Fat/fiO 3ndyPpKUmJ01ET9jb0Fn0QdFF5LZJbdCR8NVe4cLDiZ2cLc9Hv49669WWfn+CdoMDx7B W9nsLb/INxEd2aWXUyo5XHPbyMhzBtNB6qQta3IpsA8WjWJBlnY2Dqg5IXRFpeC0Oyah EYI/FkcdFzZ7t486q7IGRJ00XqPjYsvGcJLUBEdH4BtWZXF1XHkOt2kuqBpTjXo9B38d HovQ== X-Gm-Message-State: AMCzsaVUQONTlD2bZngSLXxhfzw9L/Wg3I6Ws92pZVKEeCDu9/3kkeZW bwaZjo9kg7w9mem9GNc9ekxOyI2f X-Google-Smtp-Source: AOwi7QCiuseCXdqAkctBjr2lTPRboUL2DjdwSL1LmsQ0qYJQyNR3m+R/snpqTrIcwO5R0IVNsmKuIg== X-Received: by 10.98.19.75 with SMTP id b72mr125177pfj.284.1507241344762; Thu, 05 Oct 2017 15:09:04 -0700 (PDT) Received: from localhost.localdomain ([24.5.191.4]) by smtp.gmail.com with ESMTPSA id y16sm55480pfl.99.2017.10.05.15.09.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 05 Oct 2017 15:09:03 -0700 (PDT) From: William Tu To: netdev@vger.kernel.org Cc: Xin Long , David Laight Subject: [net-next, v2] ip_gre: check packet length and mtu correctly in erspan tx Date: Thu, 5 Oct 2017 12:07:12 -0700 Message-Id: <1507230432-56495-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 Similarly to early patch for erspan_xmit(), the ARPHDR_ETHER device is the length of the whole ether packet. So skb->len should subtract the dev->hard_header_len. Fixes: 1a66a836da63 ("gre: add collect_md mode to ERSPAN tunnel") Fixes: 84e54fe0a5ea ("gre: introduce native tunnel support for ERSPAN") Signed-off-by: William Tu Cc: Xin Long Cc: David Laight Reviewed-by: Xin Long --- v1->v2: use addition to avoid overflow fix pskb_trim size --- net/ipv4/ip_gre.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c index b279c325c7f6..fb95f68d6e53 100644 --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c @@ -579,8 +579,8 @@ static void erspan_fb_xmit(struct sk_buff *skb, struct net_device *dev, if (gre_handle_offloads(skb, false)) goto err_free_rt; - if (skb->len > dev->mtu) { - pskb_trim(skb, dev->mtu); + if (skb->len > dev->mtu + dev->hard_header_len) { + pskb_trim(skb, dev->mtu + dev->hard_header_len); truncate = true; } @@ -731,8 +731,8 @@ static netdev_tx_t erspan_xmit(struct sk_buff *skb, if (skb_cow_head(skb, dev->needed_headroom)) goto free_skb; - if (skb->len - dev->hard_header_len > dev->mtu) { - pskb_trim(skb, dev->mtu); + if (skb->len > dev->mtu + dev->hard_header_len) { + pskb_trim(skb, dev->mtu + dev->hard_header_len); truncate = true; }