public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
From: Alexander Duyck <alexander.duyck@gmail.com>
To: netdev@vger.kernel.org, willemb@google.com, davem@davemloft.net
Subject: [net-next PATCH v2 7/8] udp: Do not copy destructor if one is not present
Date: Fri, 04 May 2018 11:31:45 -0700	[thread overview]
Message-ID: <20180504183110.5194.5449.stgit@localhost.localdomain> (raw)
In-Reply-To: <20180504182537.5194.72775.stgit@localhost.localdomain>

From: Alexander Duyck <alexander.h.duyck@intel.com>

This patch makes it so that if a destructor is not present we avoid trying
to update the skb socket or any reference counting that would be associated
with the NULL socket and/or descriptor. By doing this we can support
traffic coming from another namespace without any issues.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
---

v2: Do not overwrite destructor if not sock_wfree as per Eric
    Drop WARN_ON as per Eric

 net/ipv4/udp_offload.c |   21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/net/ipv4/udp_offload.c b/net/ipv4/udp_offload.c
index fd94bbb369b2..e802f6331589 100644
--- a/net/ipv4/udp_offload.c
+++ b/net/ipv4/udp_offload.c
@@ -195,6 +195,7 @@ struct sk_buff *__udp_gso_segment(struct sk_buff *gso_skb,
 	unsigned int sum_truesize = 0;
 	struct udphdr *uh;
 	unsigned int mss;
+	bool copy_dtor;
 	__sum16 check;
 	__be16 newlen;
 
@@ -208,12 +209,14 @@ struct sk_buff *__udp_gso_segment(struct sk_buff *gso_skb,
 	skb_pull(gso_skb, sizeof(*uh));
 
 	/* clear destructor to avoid skb_segment assigning it to tail */
-	WARN_ON_ONCE(gso_skb->destructor != sock_wfree);
-	gso_skb->destructor = NULL;
+	copy_dtor = gso_skb->destructor == sock_wfree;
+	if (copy_dtor)
+		gso_skb->destructor = NULL;
 
 	segs = skb_segment(gso_skb, features);
 	if (unlikely(IS_ERR_OR_NULL(segs))) {
-		gso_skb->destructor = sock_wfree;
+		if (copy_dtor)
+			gso_skb->destructor = sock_wfree;
 		return segs;
 	}
 
@@ -234,9 +237,11 @@ struct sk_buff *__udp_gso_segment(struct sk_buff *gso_skb,
 					    (__force u32)newlen));
 
 	for (;;) {
-		seg->destructor = sock_wfree;
-		seg->sk = sk;
-		sum_truesize += seg->truesize;
+		if (copy_dtor) {
+			seg->destructor = sock_wfree;
+			seg->sk = sk;
+			sum_truesize += seg->truesize;
+		}
 
 		if (!seg->next)
 			break;
@@ -268,7 +273,9 @@ struct sk_buff *__udp_gso_segment(struct sk_buff *gso_skb,
 		uh->check = gso_make_checksum(seg, ~check);
 
 	/* update refcount for the packet */
-	refcount_add(sum_truesize - gso_skb->truesize, &sk->sk_wmem_alloc);
+	if (copy_dtor)
+		refcount_add(sum_truesize - gso_skb->truesize,
+			     &sk->sk_wmem_alloc);
 out:
 	return segs;
 }

  parent reply	other threads:[~2018-05-04 18:31 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-04 18:28 [net-next PATCH v2 0/8] UDP GSO Segmentation clean-ups Alexander Duyck
2018-05-04 18:28 ` [net-next PATCH v2 1/8] udp: Record gso_segs when supporting UDP segmentation offload Alexander Duyck
2018-05-05  8:23   ` Willem de Bruijn
2018-05-04 18:29 ` [net-next PATCH v2 2/8] udp: Verify that pulling UDP header in GSO segmentation doesn't fail Alexander Duyck
2018-05-04 20:07   ` Eric Dumazet
2018-05-05  8:12   ` Willem de Bruijn
2018-05-05 17:10     ` Alexander Duyck
2018-05-04 18:29 ` [net-next PATCH v2 3/8] udp: Do not pass MSS as parameter to GSO segmentation Alexander Duyck
2018-05-04 20:08   ` Eric Dumazet
2018-05-05  8:13     ` Willem de Bruijn
2018-05-04 18:30 ` [net-next PATCH v2 4/8] udp: Do not pass checksum as a " Alexander Duyck
2018-05-04 20:19   ` Eric Dumazet
2018-05-04 22:28     ` Alexander Duyck
2018-05-05 10:01   ` Willem de Bruijn
2018-05-05 17:39     ` Alexander Duyck
2018-05-06 17:17       ` Willem de Bruijn
2018-05-06 22:29         ` Alexander Duyck
2018-05-04 18:30 ` [net-next PATCH v2 5/8] udp: Partially unroll handling of first segment and last segment Alexander Duyck
2018-05-05  8:37   ` Willem de Bruijn
2018-05-05 17:13     ` Alexander Duyck
2018-05-04 18:31 ` [net-next PATCH v2 6/8] udp: Add support for software checksum and GSO_PARTIAL with GSO offload Alexander Duyck
2018-05-06 21:50   ` Willem de Bruijn
2018-05-06 22:13     ` Alexander Duyck
2018-05-04 18:31 ` Alexander Duyck [this message]
2018-05-05  8:45   ` [net-next PATCH v2 7/8] udp: Do not copy destructor if one is not present Willem de Bruijn
2018-05-04 18:31 ` [net-next PATCH v2 8/8] net: Add NETIF_F_GSO_UDP_L4 to list of GSO offloads with fallback Alexander Duyck
2018-05-05 10:06 ` [net-next PATCH v2 0/8] UDP GSO Segmentation clean-ups Willem de Bruijn
2018-05-07 18:02   ` Alexander Duyck
2018-05-09 15:39     ` Willem de Bruijn
2018-05-09 15:58       ` Alexander Duyck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180504183110.5194.5449.stgit@localhost.localdomain \
    --to=alexander.duyck@gmail.com \
    --cc=davem@davemloft.net \
    --cc=netdev@vger.kernel.org \
    --cc=willemb@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox