From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7DE18C43381 for ; Tue, 26 Feb 2019 10:56:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 44AA92173C for ; Tue, 26 Feb 2019 10:56:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=broadcom.com header.i=@broadcom.com header.b="NrvpJiDw" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727286AbfBZK46 (ORCPT ); Tue, 26 Feb 2019 05:56:58 -0500 Received: from mail-pf1-f195.google.com ([209.85.210.195]:34529 "EHLO mail-pf1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726084AbfBZK46 (ORCPT ); Tue, 26 Feb 2019 05:56:58 -0500 Received: by mail-pf1-f195.google.com with SMTP id u9so6076392pfn.1 for ; Tue, 26 Feb 2019 02:56:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id; bh=RJcC3u8dGAkq0E7qxyGY6iIgI2JZvMbvjkswEvRHUNA=; b=NrvpJiDwGW4TlOs3GEf4XZNIPkAmcNYZDhJBsmUGwrgT2fYhFApNH+czvC0JKy7z1m m2KZOhLfQoRllDkJ7w9gPs1/4oXECaN7rC+H45SmXzZhG30JavTlf84gQoBb+zuRyAyD 8ndFr25e+MWexF2i+C7uL6OIsrfWiPf6ocgZU= 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=RJcC3u8dGAkq0E7qxyGY6iIgI2JZvMbvjkswEvRHUNA=; b=REvjYN+aX8/LKM4kPI7VnEk3gvihMZUG6jiArh37sSgzzUuc8nomZNIxSjN4ZceyEW Q3FyrMkBgWQsTznO+GShrEXQV/8IpLaLmO3idvfQi9mm24JRs1I2epaWeeGue5TmN1St GzwA1ypmZWL4zlME3UwouLPhewpdxGRU+bXhcZXiOBPjg1FqukvF60OEtGKVQHUXZucV XOdg+c2ZEXZK3SK3hTFFen4zjEJR+vyo016LxbIi48mqGGdOTehJC1ul+1U10d7gtBo5 Rv9GzPvDmFp3Az001SHGuXGoEYOn9mqal7lFkkDbAtxt0sWwL37pivRP+eL7SPRow0cZ v9eQ== X-Gm-Message-State: AHQUAuYOxi0nkVUSzYQTFTpcQ4F3j3S+NZLdE/3sxODuRvonk0D8u5H8 vGG9kOH+WtdAzGsphOcsCB1Gfw== X-Google-Smtp-Source: AHgI3IY+fAMpgJgIkxN1MhzwClfZTw4Wos3it39OGDPGmZZqzEuWMLReOX32RD4ubyILLDGvnT3v+g== X-Received: by 2002:a63:4b0a:: with SMTP id y10mr23807144pga.66.1551178617346; Tue, 26 Feb 2019 02:56:57 -0800 (PST) Received: from localhost.dhcp.broadcom.net ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id s6sm23009433pgi.56.2019.02.26.02.56.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Feb 2019 02:56:56 -0800 (PST) From: Michael Chan To: davem@davemloft.net, maheshb@google.com, edumazet@google.com Cc: dja@axrens.net, netdev@vger.kernel.org Subject: [PATCH RFC] net: Validate size of non-TSO packets in validate_xmit_skb(). Date: Tue, 26 Feb 2019 05:56:41 -0500 Message-Id: <1551178601-16564-1-git-send-email-michael.chan@broadcom.com> X-Mailer: git-send-email 1.8.3.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org There have been reports of oversize UDP packets being sent to the driver to be transmitted, causing error conditions. The issue is likely caused by the dst of the SKB switching between 'lo' with 64K MTU and the hardware device with a smaller MTU. Patches are being proposed by Mahesh Bandewar to fix the issue. Separately, we should add a length check in validate_xmit_skb() to drop these oversize packets before they reach the driver. This patch only validates non-TSO packets. Complete validation of segmented TSO packet size will probably be too slow. Signed-off-by: Michael Chan --- net/core/dev.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/net/core/dev.c b/net/core/dev.c index 5d03889..50c5174 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -3373,6 +3373,13 @@ static struct sk_buff *validate_xmit_skb(struct sk_buff *skb, struct net_device } } + if (!skb_is_gso(skb) && + skb->len > (dev->mtu + dev->hard_header_len + VLAN_HLEN)) { + net_warn_ratelimited("%s(): Dropping %d bytes oversize skb.\n", + __func__, skb->len); + goto out_kfree_skb; + } + skb = validate_xmit_xfrm(skb, features, again); return skb; -- 2.5.1