Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp1679296pxu; Sun, 6 Dec 2020 03:49:28 -0800 (PST) X-Google-Smtp-Source: ABdhPJybCrm+9hi4Ipt3W3qUGHHoQNQG8H6VFmTZsEBD7m8CrZ428VxDu0OcZZQLuKZk35QM+n6V X-Received: by 2002:a05:6402:48d:: with SMTP id k13mr15412873edv.92.1607255368229; Sun, 06 Dec 2020 03:49:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1607255368; cv=none; d=google.com; s=arc-20160816; b=zowSNLyIEXDX5O3cAdPHQ0ETRiOkn6TK5NmLUq4K28DotAZt0qIhmeSpUi2c/g/47a Yv3b1x4VjDybwSqgoo2FXLZs7rhFruMdIjqKYT/LJN6TzqSBFIAorBbtgGaMxRaPzL/N /awmyYmtAeBM8d8BVkZat3kvdkQV9LtL6WXd76uMkjckDlMBfGZb/wxIZHXd+KdQADgk EZKhvl+GZVZC7KNG+KblruDFzGWSuAzOVRCuZEMRZIy32E+MRzE+W+0QafCWiW58vh7f ylEdBaGECUeVaxFbq4WN9/7KyGsZ1cPunzUPzfQiPc5jVGr5o+ESH7oHVdP55F8zSajl jjUg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from; bh=HwPhetpKh1MrGWPgUESw9KWeJ/aItSQQzIOehECBIiQ=; b=CVqfNCeb8efN2BHVCSr4cZX0LWFKRTgn1C8DiB+uY/6iakUIrzi7CPMQ+O4EpRkPBq IPyyAVQqwcMK6REpZmvUsN/9f2u1ELtrWkUvMb1vT/35Nnm4uHH0tKHZEDQ15jiNPOxI Frned4RS0mYSOm/if4PJ/lGyY79qB+m6cOEpHa4DumseRlPnEVrA4+UxxmPIN6t/9I9E E7WR1hBZDAYzsWMpezwli5UjqM70g1KyIsSs0OHqg3Yfn86z2+2ZrbqGlIDSKr+as4kc 26HtVkuLI3bOordSzgnBFzj2T3Pt//WKRiUW58MbiQDo/FZtstWH+WAR8iMW2UNkYeCo 4o8Q== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g12si6344513edl.16.2020.12.06.03.49.05; Sun, 06 Dec 2020 03:49:28 -0800 (PST) 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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729504AbgLFLpp (ORCPT + 99 others); Sun, 6 Dec 2020 06:45:45 -0500 Received: from mail.kernel.org ([198.145.29.99]:46122 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727558AbgLFLpm (ORCPT ); Sun, 6 Dec 2020 06:45:42 -0500 From: Greg Kroah-Hartman Authentication-Results: mail.kernel.org; dkim=permerror (bad message/signature format) To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, justin.he@arm.com, Sergio Lopez , Stefano Garzarella , Jakub Kicinski Subject: [PATCH 5.9 13/46] vsock/virtio: discard packets only when socket is really closed Date: Sun, 6 Dec 2020 12:17:21 +0100 Message-Id: <20201206111557.101061969@linuxfoundation.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201206111556.455533723@linuxfoundation.org> References: <20201206111556.455533723@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Stefano Garzarella [ Upstream commit 3fe356d58efae54dade9ec94ea7c919ed20cf4db ] Starting from commit 8692cefc433f ("virtio_vsock: Fix race condition in virtio_transport_recv_pkt"), we discard packets in virtio_transport_recv_pkt() if the socket has been released. When the socket is connected, we schedule a delayed work to wait the RST packet from the other peer, also if SHUTDOWN_MASK is set in sk->sk_shutdown. This is done to complete the virtio-vsock shutdown algorithm, releasing the port assigned to the socket definitively only when the other peer has consumed all the packets. If we discard the RST packet received, the socket will be closed only when the VSOCK_CLOSE_TIMEOUT is reached. Sergio discovered the issue while running ab(1) HTTP benchmark using libkrun [1] and observing a latency increase with that commit. To avoid this issue, we discard packet only if the socket is really closed (SOCK_DONE flag is set). We also set SOCK_DONE in virtio_transport_release() when we don't need to wait any packets from the other peer (we didn't schedule the delayed work). In this case we remove the socket from the vsock lists, releasing the port assigned. [1] https://github.com/containers/libkrun Fixes: 8692cefc433f ("virtio_vsock: Fix race condition in virtio_transport_recv_pkt") Cc: justin.he@arm.com Reported-by: Sergio Lopez Tested-by: Sergio Lopez Signed-off-by: Stefano Garzarella Acked-by: Jia He Link: https://lore.kernel.org/r/20201120104736.73749-1-sgarzare@redhat.com Signed-off-by: Jakub Kicinski Signed-off-by: Greg Kroah-Hartman --- net/vmw_vsock/virtio_transport_common.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) --- a/net/vmw_vsock/virtio_transport_common.c +++ b/net/vmw_vsock/virtio_transport_common.c @@ -841,8 +841,10 @@ void virtio_transport_release(struct vso virtio_transport_free_pkt(pkt); } - if (remove_sock) + if (remove_sock) { + sock_set_flag(sk, SOCK_DONE); vsock_remove_sock(vsk); + } } EXPORT_SYMBOL_GPL(virtio_transport_release); @@ -1132,8 +1134,8 @@ void virtio_transport_recv_pkt(struct vi lock_sock(sk); - /* Check if sk has been released before lock_sock */ - if (sk->sk_shutdown == SHUTDOWN_MASK) { + /* Check if sk has been closed before lock_sock */ + if (sock_flag(sk, SOCK_DONE)) { (void)virtio_transport_reset_no_sock(t, pkt); release_sock(sk); sock_put(sk);