From patchwork Fri Sep 22 23:42:37 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Willem de Bruijn X-Patchwork-Id: 817739 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=google.com header.i=@google.com header.b="WIYtJ32b"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xzVQl0jQWz9sxR for ; Sat, 23 Sep 2017 09:42:54 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752071AbdIVXmt (ORCPT ); Fri, 22 Sep 2017 19:42:49 -0400 Received: from mail-qt0-f181.google.com ([209.85.216.181]:47851 "EHLO mail-qt0-f181.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751974AbdIVXms (ORCPT ); Fri, 22 Sep 2017 19:42:48 -0400 Received: by mail-qt0-f181.google.com with SMTP id b1so2560757qtc.4 for ; Fri, 22 Sep 2017 16:42:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=/Egvbng4Q3Ldu+6QV4jFI4HKIpNpjofCwAeigER/pvI=; b=WIYtJ32b2scqhcqnJVWWhw2vk7NqYBi46BAT7S634hrV2kAc8wULtOl/UJsKw9KMbR FR7uBLbi0MC4ILjrkUMl7I/nPFVpNKvpZVyWCCU6QT4feKVReBI87n4dl85iwxSH3yic kqEEBahJdWirylcudlsN+5/twKNsCbs5xxsQyiGVBWRt2U2a/jt1FKnGvDaEtiH2Cp5M VK27Zz7ln0/vFNV6CV7WoiExyucadbMOUHK2A+hz9E5ssTpEzeKA+4uHvXLDq79IV/Ik xZ/Xu1iqmsrGFXc2iMd4iGLlxfwrvPo3pSJA0ldoTJl1gnccXjE1EW79t2B85mJvDpkN 22Tg== 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=/Egvbng4Q3Ldu+6QV4jFI4HKIpNpjofCwAeigER/pvI=; b=SwL0PApvx5irhs2+0RO01AIcPqYe84hDSwbkrf0d2nPz/Zlr3IZowIa1FAgc4zpAnQ 1CcPIF7UsUyK1xw1xqRO4c2alVf7rXBU0fd0S4VD1/ki/FgvIUfkfYMYjlzIT3MPqtW0 1fUhkudsg/z1ZEJw07bu0qeEfKm4xdRFe5xA+0WztQj9S6lNRLSykXS2uNVZ3p6GoUA3 8uvDdOh6C9CZJrqz6QYQM/YQX7qtgj3irC963kmKNRd0GFNxkATdZcF1MldKon85CPTJ LprkWrEn19gQeLrcbGwkAzKhs4kLmiHY1cj10F1xGsbEIZBngUs6BjYNWPlOrxQddxjs Rotw== X-Gm-Message-State: AHPjjUimugI16vgndCojiweDqfCCHPlJ+117HUYsqrnp9k7zfFFL+BB2 y/s3g/sW7NcKkasNWNyck84ieKI0T24= X-Google-Smtp-Source: AOwi7QBucWY3ROjCLEembqOdiUkckBushgV0RYfKKMT5fckVe9ExOJcNh+s9F+1Li3S/1gHI5oKqWQ== X-Received: by 10.200.45.50 with SMTP id n47mr1250435qta.253.1506123767071; Fri, 22 Sep 2017 16:42:47 -0700 (PDT) Received: from willemb1.nyc.corp.google.com ([100.101.212.81]) by smtp.gmail.com with ESMTPSA id 4sm784689qke.50.2017.09.22.16.42.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 22 Sep 2017 16:42:45 -0700 (PDT) From: Willem de Bruijn To: netdev@vger.kernel.org Cc: davem@davemloft.net, Willem de Bruijn Subject: [PATCH net v2] net: orphan frags on stand-alone ptype in dev_queue_xmit_nit Date: Fri, 22 Sep 2017 19:42:37 -0400 Message-Id: <20170922234237.43174-1-willemb@google.com> X-Mailer: git-send-email 2.14.1.821.g8fa685d3b7-goog Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Zerocopy skbs frags are copied when the skb is looped to a local sock. Commit 1080e512d44d ("net: orphan frags on receive") introduced calls to skb_orphan_frags to deliver_skb and __netif_receive_skb for this. With msg_zerocopy, these skbs can also exist in the tx path and thus loop from dev_queue_xmit_nit. This already calls deliver_skb in its loop. But it does not orphan before a separate pt_prev->func(). Add the missing skb_orphan_frags_rx. Changes v1->v2: handle skb_orphan_frags_rx failure Fixes: 1f8b977ab32d ("sock: enable MSG_ZEROCOPY") Signed-off-by: Willem de Bruijn Reviewed-by: Eric Dumazet --- net/core/dev.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/net/core/dev.c b/net/core/dev.c index 9a2254f9802f..588b473194a8 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -1948,8 +1948,12 @@ void dev_queue_xmit_nit(struct sk_buff *skb, struct net_device *dev) goto again; } out_unlock: - if (pt_prev) - pt_prev->func(skb2, skb->dev, pt_prev, skb->dev); + if (pt_prev) { + if (!skb_orphan_frags_rx(skb2, GFP_ATOMIC)) + pt_prev->func(skb2, skb->dev, pt_prev, skb->dev); + else + kfree_skb(skb2); + } rcu_read_unlock(); } EXPORT_SYMBOL_GPL(dev_queue_xmit_nit);