Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp2729044pxv; Mon, 12 Jul 2021 00:04:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz59a/Y8YehMgYk72x+5aGnUS+k5O0CaRUjZ9nItwFbcld9cb53NkolvzcwuVy4cqwanDxI X-Received: by 2002:a92:1942:: with SMTP id e2mr37910901ilm.4.1626073442933; Mon, 12 Jul 2021 00:04:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626073442; cv=none; d=google.com; s=arc-20160816; b=ZVJ0tyVsm0MmKy3ePWddkubxhKPAZ/omWwLxgP+LomnpHAk9Lqc2KQEu6tY923Tsf7 FvbK/16qsPLh4uQPgxxmrftLM5ylTldvbXdaaoN0CqnrZnnPRMwpkuDF+agwrEz1tJ4H 44n2QZopPmbIAn1OPKwhk9zxubw37Cu+dlB9YKko9jMY0kVD6N8bdhwRFicdJHTo8Z7O 3KGYR8qvKM0tvpNYiq6Hj5xDXo5AKsVDXbr85zyAuEpbPo9kWpzeWDMBNy8iXC4SoAcR csncBEzIfi2kuL1caEbSNiTj0BRTzdvbQJurbCjtV3mnzN3qAR0tHeNe4PyXF3gNYQ+Y Utvg== 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:dkim-signature; bh=mHetNL+iQLChchIlXh0LWwwwa3FMzjI3Auxaz2R5FsI=; b=b2EAU5DxzdCIVT7QGBta1jf7KLokgSNA/hUvXBG5r8cX9IgsFwfZ41IH/0PsXA38Du ld1iqCCR4XkIraxRIp1TFMmXPu3RCtQA1QIKjhwTy/1kdTOiJKzd7OZBgty2rJXFApsL 7UtRC/WBh4+rBRRKyBcCGtwcCVZFovFJWtyuH0SdC+vFrOtWQjJt1rhtihC9ouSo2aHH bX2h5hKsEkguL2cb3eAAnZF/QSphG0MqRQaLpmqC3Rh1/OVK7FjIzin6bZ21wJi4mFmu QV3g5PSsGAZ9y94FgbYeB7KzHFPUwwEE1WALnewdU09KhWKy03pQFKwPbUULyaexJdmA Z3YA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=BEFkYjej; 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=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id m4si17195057iln.52.2021.07.12.00.03.51; Mon, 12 Jul 2021 00:04:02 -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=@linuxfoundation.org header.s=korg header.b=BEFkYjej; 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=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241832AbhGLHEG (ORCPT + 99 others); Mon, 12 Jul 2021 03:04:06 -0400 Received: from mail.kernel.org ([198.145.29.99]:41250 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238033AbhGLGqt (ORCPT ); Mon, 12 Jul 2021 02:46:49 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 4D9D9611AF; Mon, 12 Jul 2021 06:42:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626072151; bh=3a+wzGLX9RpC5rgw6c3JCNr49YoAr/9qDC4YFexWgvU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BEFkYjejre8TlR80LukW9hkT414funlr3l2OD8v4KySgR5VjwEEOvo0sXsHOKJtND 7zmL1qp8S88AX/DlO6tUb6wZ3drmEUwDt8Ztx39Gt7aPDu5lATSTeyoZMhw4nbDPxY MTVkg2437Nm/6xkR4qPGJmiBsB6Dg/2eaBrwY6nc= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Vadim Fedorenko , Seth Forshee , Jakub Kicinski , "David S. Miller" , Sasha Levin Subject: [PATCH 5.10 375/593] tls: prevent oversized sendfile() hangs by ignoring MSG_MORE Date: Mon, 12 Jul 2021 08:08:55 +0200 Message-Id: <20210712060928.070795511@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210712060843.180606720@linuxfoundation.org> References: <20210712060843.180606720@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: Jakub Kicinski [ Upstream commit d452d48b9f8b1a7f8152d33ef52cfd7fe1735b0a ] We got multiple reports that multi_chunk_sendfile test case from tls selftest fails. This was sort of expected, as the original fix was never applied (see it in the first Link:). The test in question uses sendfile() with count larger than the size of the underlying file. This will make splice set MSG_MORE on all sendpage calls, meaning TLS will never close and flush the last partial record. Eric seem to have addressed a similar problem in commit 35f9c09fe9c7 ("tcp: tcp_sendpages() should call tcp_push() once") by introducing MSG_SENDPAGE_NOTLAST. Unlike MSG_MORE MSG_SENDPAGE_NOTLAST is not set on the last call of a "pipefull" of data (PIPE_DEF_BUFFERS == 16, so every 16 pages or whenever we run out of data). Having a break every 16 pages should be fine, TLS can pack exactly 4 pages into a record, so for aligned reads there should be no difference, unaligned may see one extra record per sendpage(). Sticking to TCP semantics seems preferable to modifying splice, but we can revisit it if real life scenarios show a regression. Reported-by: Vadim Fedorenko Reported-by: Seth Forshee Link: https://lore.kernel.org/netdev/1591392508-14592-1-git-send-email-pooja.trivedi@stackpath.com/ Fixes: 3c4d7559159b ("tls: kernel TLS support") Signed-off-by: Jakub Kicinski Tested-by: Seth Forshee Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- net/tls/tls_sw.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c index 3abe5257f757..15395683b8e2 100644 --- a/net/tls/tls_sw.c +++ b/net/tls/tls_sw.c @@ -1154,7 +1154,7 @@ static int tls_sw_do_sendpage(struct sock *sk, struct page *page, int ret = 0; bool eor; - eor = !(flags & (MSG_MORE | MSG_SENDPAGE_NOTLAST)); + eor = !(flags & MSG_SENDPAGE_NOTLAST); sk_clear_bit(SOCKWQ_ASYNC_NOSPACE, sk); /* Call the sk_stream functions to manage the sndbuf mem. */ -- 2.30.2