Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp3028159ybt; Mon, 29 Jun 2020 13:18:09 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwmlZGjxAuebi2xR0+GX4ket/Yx1YrDJlOyhd6oRZ/JTxHZaXoP3ikQeCyhuaz4zTVSLf6s X-Received: by 2002:a05:6402:cb3:: with SMTP id cn19mr15739044edb.368.1593461889744; Mon, 29 Jun 2020 13:18:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593461889; cv=none; d=google.com; s=arc-20160816; b=ynx9R5IkLs+Ceyt6EJH3EtpoTdx5k7rbBYqUOzIxnOxAZ/++OPKxcU3aWoy8uhiqEq NLVFFdkKfJbqWcCjzvnr4HEhSU+GdE06QLW064W73n+neZD7A++0IBqC2pWcPF0UpnQ9 ynAl7DjsM2oGIuadmolcBRKkeLYyJ48LAsfAH91DYw7k833rPPcsgYaFIq4neBHrDOAr b8k7vSwhqAOa7F6j92VjHVrGuh4J/w7101ppG/pEBoWVE8cHyOmHbjp8H0W/NdYEtLv6 MmqnGQQyvbXWibjp4Sak6zkytamfNSFlZg+OsDkDopEbl8QRofvYVHNJddGrM1Ydn/o+ dXNg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=K/3LBlXuyzyHtxoC+7W5tz7kDr941wvrWjpUKppwmf0=; b=xBHV2MEjQvoLUMkfZpwPtx+3nRRnd7UPiblLqHsEVPrNXmCO1QAw9uDG5F9UKC1uRi 4OJbtq2tPXc68OkZSUIwd9ITfs8ZW/pCIkzdn5xbkTsa0GMGWVkDbM/mzO2lVctE4lGJ tKsgaLLKpOQjpYMlJIsTJKpNX9UhtH33/G7uh0CJcNRBJPjPHnryPCsLZSiKC/hhxefn yqLcP+fLBYYMJrxuj6+XjpOo8NNaLUUefTi4qL+9eMfCtOphIO2s0K2c75AAwCQYkh/7 sryL1L6mf8iUw+0DQ5nF1yVdih5XPazzCgvxVNqm9OHJEJfeAAeixKClzTA5LfQbc5j0 9dag== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=1PSwTOMp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g9si394720ejj.380.2020.06.29.13.17.46; Mon, 29 Jun 2020 13:18:09 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=1PSwTOMp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732613AbgF2UO1 (ORCPT + 99 others); Mon, 29 Jun 2020 16:14:27 -0400 Received: from mail.kernel.org ([198.145.29.99]:40584 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732844AbgF2TaS (ORCPT ); Mon, 29 Jun 2020 15:30:18 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 20C8C252E4; Mon, 29 Jun 2020 15:38:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1593445115; bh=mHTMAWW1raNFP2h5TTT6iMi2R378EA2fCHGDsRw1TvM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=1PSwTOMpjxYANKD6gJ8/VFCnoyTP4L2OHn3x8GD9a2ZUYT/m3qdp/UQeqDU+bkM2c KBCLC1i0v7R+LWZ/++M5DtriP3EoI1oWl7NK2IQ0B76A1WVQNY7cMiKg1lO3FLwrIJ mh5GYcpP+d6vmTV4bZ4rBQ2urKeiriccJiAj/Cxs= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Tariq Toukan , Boris Pismenny , "David S . Miller" , Greg Kroah-Hartman Subject: [PATCH 4.14 21/78] net: Do not clear the sock TX queue in sk_set_socket() Date: Mon, 29 Jun 2020 11:37:09 -0400 Message-Id: <20200629153806.2494953-22-sashal@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200629153806.2494953-1-sashal@kernel.org> References: <20200629153806.2494953-1-sashal@kernel.org> MIME-Version: 1.0 X-KernelTest-Patch: http://kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.14.186-rc1.gz X-KernelTest-Tree: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git X-KernelTest-Branch: linux-4.14.y X-KernelTest-Patches: git://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git X-KernelTest-Version: 4.14.186-rc1 X-KernelTest-Deadline: 2020-07-01T15:38+00:00 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Tariq Toukan [ Upstream commit 41b14fb8724d5a4b382a63cb4a1a61880347ccb8 ] Clearing the sock TX queue in sk_set_socket() might cause unexpected out-of-order transmit when called from sock_orphan(), as outstanding packets can pick a different TX queue and bypass the ones already queued. This is undesired in general. More specifically, it breaks the in-order scheduling property guarantee for device-offloaded TLS sockets. Remove the call to sk_tx_queue_clear() in sk_set_socket(), and add it explicitly only where needed. Fixes: e022f0b4a03f ("net: Introduce sk_tx_queue_mapping") Signed-off-by: Tariq Toukan Reviewed-by: Boris Pismenny Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- include/net/sock.h | 1 - net/core/sock.c | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/include/net/sock.h b/include/net/sock.h index c6a003bc4737c..a2e10d0b12804 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -1687,7 +1687,6 @@ static inline int sk_tx_queue_get(const struct sock *sk) static inline void sk_set_socket(struct sock *sk, struct socket *sock) { - sk_tx_queue_clear(sk); sk->sk_socket = sock; } diff --git a/net/core/sock.c b/net/core/sock.c index d2cb2051d0453..08ca2ec0ce60a 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -1538,6 +1538,7 @@ struct sock *sk_alloc(struct net *net, int family, gfp_t priority, cgroup_sk_alloc(&sk->sk_cgrp_data); sock_update_classid(&sk->sk_cgrp_data); sock_update_netprioidx(&sk->sk_cgrp_data); + sk_tx_queue_clear(sk); } return sk; @@ -1740,6 +1741,7 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority) */ sk_refcnt_debug_inc(newsk); sk_set_socket(newsk, NULL); + sk_tx_queue_clear(newsk); newsk->sk_wq = NULL; if (newsk->sk_prot->sockets_allocated) -- 2.25.1