Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp328811pxb; Mon, 16 Aug 2021 06:26:47 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw0Z7V2kt/rnidlR+jpCxO3A880w1dZGqQfv03fU1bmb7Tk16SJm2JbWkK83xwXVdO4Qpym X-Received: by 2002:a05:6638:ccf:: with SMTP id e15mr15015083jak.143.1629120407657; Mon, 16 Aug 2021 06:26:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1629120407; cv=none; d=google.com; s=arc-20160816; b=edSJ0A8e9gMXbDZDmGh34Q05zrElWWTbKDVXeLtAmfsFy8K1VNwp6u3IpNd+zp6Ggf fL3CuJTgCzpodUPk6fLvVSemvHsvDUZ5Ss8UEN4Jp76jlCJeg1pcRgnR4AwoLvEUZmNp wiGVMEVuGw7WH4SFrrCzZBb0w8OYB0g25ooBxqjI3w9oeHHih8H0uGTVs2MzvIDL4QN2 5NNy5an5LR3U/551HOH47yFUFHctsCDXMT5T1Isdr7o9F4HX0Ovi6JXSwSwzLBFx5WrV yQJ77+aVoMt07+9YatVHDTIc4gFPNMtqPwe4NHqASn7gzph2CUlfcXHqlb1kzrT7SvrE +r2A== 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=y38KsPbgqVAe2yFJVIih0eb2DuKrHdGqBg3/raXEJm0=; b=YbOutwj3IhZj40m3AuzARAl3WJeozqFPhdWpccPY0ek+UiNg5yMCZx72eYuug/eMrg VDdL5T/TaSwwtHyLJGvxrgDFCsOSYUSvAkOiZpJuDteLP3dmv3AALVJyPLCVSIVJyzbk ThOIoReaey3Kci5ECrB1y8ctEEG6bRBirjXPJRBva478iW+DBagN641B+TNpaXgk3sYU Logxo0dyPehg0gdZ/oZp/zbzsEpDRTVzNNuy9KJnLtdQRuPjTXXcQ/ZlR0Sm+DLYHAgQ omYbCFmf79t5NZSlUEf+lJafkCsL5GNxtun0HD6I3eGyGpEyCkELOhkzmhGy9xOLHybf GK+Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=YfrAMFeV; 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 g15si7893660ilc.45.2021.08.16.06.26.36; Mon, 16 Aug 2021 06:26:47 -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=YfrAMFeV; 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 S241252AbhHPNZR (ORCPT + 99 others); Mon, 16 Aug 2021 09:25:17 -0400 Received: from mail.kernel.org ([198.145.29.99]:37186 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240299AbhHPNPE (ORCPT ); Mon, 16 Aug 2021 09:15:04 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 16AD3632D8; Mon, 16 Aug 2021 13:12:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1629119544; bh=wIIjKmFH0euQgXstQ8ky9Kw/RhFBEoQ27fKrn1QOueE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YfrAMFeVwXKMVE5m6vJVndS10oHi8RyRazeEhGuyVenrZtHb7g2a+Pi/nOcBlgghp qbqLPTmEGxiIufEOUTfykRPkp6ArZNKcpv9t6ibmeQebLdCeN/0puQDD4tcDBRTGK6 7OjXh08p0hkBnirrus0KxjcnRN0T0S6UsxCmd1+g= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jens Axboe , Pavel Begunkov , Nadav Amit , Sasha Levin Subject: [PATCH 5.13 068/151] io_uring: clear TIF_NOTIFY_SIGNAL when running task work Date: Mon, 16 Aug 2021 15:01:38 +0200 Message-Id: <20210816125446.308819084@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210816125444.082226187@linuxfoundation.org> References: <20210816125444.082226187@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: Nadav Amit [ Upstream commit ef98eb0409c31c39ab55ff46b2721c3b4f84c122 ] When using SQPOLL, the submission queue polling thread calls task_work_run() to run queued work. However, when work is added with TWA_SIGNAL - as done by io_uring itself - the TIF_NOTIFY_SIGNAL remains set afterwards and is never cleared. Consequently, when the submission queue polling thread checks whether signal_pending(), it may always find a pending signal, if task_work_add() was ever called before. The impact of this bug might be different on different kernel versions. It appears that on 5.14 it would only cause unnecessary calculation and prevent the polling thread from sleeping. On 5.13, where the bug was found, it stops the polling thread from finding newly submitted work. Instead of task_work_run(), use tracehook_notify_signal() that clears TIF_NOTIFY_SIGNAL. Test for TIF_NOTIFY_SIGNAL in addition to current->task_works to avoid a race in which task_works is cleared but the TIF_NOTIFY_SIGNAL is set. Fixes: 685fe7feedb96 ("io-wq: eliminate the need for a manager thread") Cc: Jens Axboe Cc: Pavel Begunkov Signed-off-by: Nadav Amit Link: https://lore.kernel.org/r/20210808001342.964634-2-namit@vmware.com Signed-off-by: Jens Axboe Signed-off-by: Sasha Levin --- fs/io_uring.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fs/io_uring.c b/fs/io_uring.c index 32f3df13a812..8a8507cab580 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -78,6 +78,7 @@ #include #include #include +#include #define CREATE_TRACE_POINTS #include @@ -2250,9 +2251,9 @@ static inline unsigned int io_put_rw_kbuf(struct io_kiocb *req) static inline bool io_run_task_work(void) { - if (current->task_works) { + if (test_thread_flag(TIF_NOTIFY_SIGNAL) || current->task_works) { __set_current_state(TASK_RUNNING); - task_work_run(); + tracehook_notify_signal(); return true; } -- 2.30.2