Received: by 2002:a05:7412:251c:b0:e2:908c:2ebd with SMTP id w28csp1177866rda; Mon, 23 Oct 2023 05:14:14 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEFCUNgV/2YZ+HhzSSIe3htnIvduinRk0bjb72zk2bIGQWvE1HFufabVZSYAIfMVmNFx+wj X-Received: by 2002:a17:90a:aa8d:b0:27e:22b:dce5 with SMTP id l13-20020a17090aaa8d00b0027e022bdce5mr8794278pjq.27.1698063254578; Mon, 23 Oct 2023 05:14:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698063254; cv=none; d=google.com; s=arc-20160816; b=RQ1H+abFv01tHSMSvUuLUp32XpaOmkgYC1x0xEPfYcCYbX6TaGz8YZGh4l/GRQcaGZ /EAzWL8qANsx69Egizu10VThNsXWDqypoEK1XivjrAJQosQPJv7W/ckvjNH3KXJ5fcYG 6K+sYZdzw4MXK/f7kxt5N2gFmfWX4OLo52GlxI8yYrBcDA0y6W5BgNa67vYOpZe3ZX8h nu695eGuRqngZnNAic8nAA9aWk9pzu9aSq+ecV6vildy3VNjtgrG8xBJ4RmCqbwrn8ua SipRWC9La0Flh8SGHvzYNeWX/phdtL8GddqPV0Z+wb+f19eneIzgfl3G10YEPhF+SeoS y7wQ== 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 :message-id:date:subject:cc:to:from; bh=JjvFdOR27gB0lB5r6SOrg/Bx3qeegr/zhwv3l5dUpaU=; fh=fGJV0nYKNfmptrIcAw60/CgI6rm6lADpftUdM2LcMrU=; b=gM7qYyN5oGYJXl9ulBSgz3cCDgnkM+EGCUNIT82Htiudjj+XDnaa9TiMslm089PYhC BvzGC8eALE4GmebuVR2YNyqjESXGEYi9L2aMg0/M5ii4TM/UDSAsmXtIfooUbeWSq64t LIIX6qYjw0Tw3dmHKdoDzuLL2VY78wglg0TLL0xGPUx3OhaZqWDQOlDfnF4AvESUXbZJ 6uo6XRH79SzhyRSr4mycR2fkRYgYOXlfTIRLRXEItDThQKrXR3AttlNgVZ6joatGMWfB FZRO5nJzHR6SfTBPounmEGun6wyvkAS064xijfXT9VJxbiO+xPqgDP4fxE85VhcE5xRO rABA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from agentk.vger.email (agentk.vger.email. [2620:137:e000::3:2]) by mx.google.com with ESMTPS id n22-20020a17090ac69600b0026961fdd37bsi6399445pjt.97.2023.10.23.05.14.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Oct 2023 05:14:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) client-ip=2620:137:e000::3:2; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 1C0A2805C169; Mon, 23 Oct 2023 05:14:12 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233303AbjJWMN6 (ORCPT + 99 others); Mon, 23 Oct 2023 08:13:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44406 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230001AbjJWMNw (ORCPT ); Mon, 23 Oct 2023 08:13:52 -0400 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [IPv6:2a0a:edc0:2:b01:1d::104]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3DB4DF9 for ; Mon, 23 Oct 2023 05:13:50 -0700 (PDT) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qutoa-00029G-MB; Mon, 23 Oct 2023 14:13:48 +0200 Received: from [2a0a:edc0:0:1101:1d::28] (helo=dude02.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qutoZ-003ho9-Rt; Mon, 23 Oct 2023 14:13:47 +0200 Received: from sha by dude02.red.stw.pengutronix.de with local (Exim 4.96) (envelope-from ) id 1qutoZ-00HCDW-2Z; Mon, 23 Oct 2023 14:13:47 +0200 From: Sascha Hauer To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, "David S . Miller" , Jakub Kicinski , Paolo Abeni , Jens Axboe , kernel@pengutronix.de, Sascha Hauer Subject: [PATCH] net: Do not break out of sk_stream_wait_memory() with TIF_NOTIFY_SIGNAL Date: Mon, 23 Oct 2023 14:13:46 +0200 Message-Id: <20231023121346.4098160-1-s.hauer@pengutronix.de> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: sha@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Mon, 23 Oct 2023 05:14:12 -0700 (PDT) It can happen that a socket sends the remaining data at close() time. With io_uring and KTLS it can happen that sk_stream_wait_memory() bails out with -512 (-ERESTARTSYS) because TIF_NOTIFY_SIGNAL is set for the current task. This flag has been set in io_req_normal_work_add() by calling task_work_add(). It seems signal_pending() is too broad, so this patch replaces it with task_sigpending(), thus ignoring the TIF_NOTIFY_SIGNAL flag. A discussion of this issue can be found at https://lore.kernel.org/20231010141932.GD3114228@pengutronix.de Suggested-by: Jens Axboe Fixes: 12db8b690010c ("entry: Add support for TIF_NOTIFY_SIGNAL") Signed-off-by: Sascha Hauer --- net/core/stream.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/net/core/stream.c b/net/core/stream.c index 96fbcb9bbb30a..e9e17b48e0122 100644 --- a/net/core/stream.c +++ b/net/core/stream.c @@ -67,7 +67,7 @@ int sk_stream_wait_connect(struct sock *sk, long *timeo_p) return -EPIPE; if (!*timeo_p) return -EAGAIN; - if (signal_pending(tsk)) + if (task_sigpending(tsk)) return sock_intr_errno(*timeo_p); add_wait_queue(sk_sleep(sk), &wait); @@ -103,7 +103,7 @@ void sk_stream_wait_close(struct sock *sk, long timeout) do { if (sk_wait_event(sk, &timeout, !sk_stream_closing(sk), &wait)) break; - } while (!signal_pending(current) && timeout); + } while (!task_sigpending(current) && timeout); remove_wait_queue(sk_sleep(sk), &wait); } @@ -134,7 +134,7 @@ int sk_stream_wait_memory(struct sock *sk, long *timeo_p) goto do_error; if (!*timeo_p) goto do_eagain; - if (signal_pending(current)) + if (task_sigpending(current)) goto do_interrupted; sk_clear_bit(SOCKWQ_ASYNC_NOSPACE, sk); if (sk_stream_memory_free(sk) && !vm_wait) -- 2.39.2