From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8F8F21D042D; Tue, 15 Oct 2024 13:08:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1728997698; cv=none; b=mMNehHbOKDLBOoNRUTAgZR6kgkoITu+YSMIDV4M8OM9nC/L/Z7Q8Ck2JVn2E4TKx6yEt6K46ZAsQATBdsBPF+udJcqceGkqICWFfr5VRNaXpWAst1Kt+jGpFV+q8gXqcRwpbfDxr1JyTg0obJ736Ce+pmH/Zol3fUMFN9d9BkBA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1728997698; c=relaxed/simple; bh=LVZ1FndNg/gTp/lU6Q9t+larHPqsQ5eoBZo3b1qkGsg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RvumXlvpU2eVNiuos3w0jYJadbD6Vdn4dTzD30C3mBLR+3tQfDw/ewsGTh4xyfUYvUjDRJ5wn801MVHjlUz1jbJm65az+/WDUPUq3csrVnhFmXVWdAT/WKcATWZS7oHVOsHhpJw5Fk5b4uLvaFEuCVMjZoYseaHVpDJjAmlvv44= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=VFu+MRvH; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="VFu+MRvH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0B9D6C4CEC6; Tue, 15 Oct 2024 13:08:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1728997698; bh=LVZ1FndNg/gTp/lU6Q9t+larHPqsQ5eoBZo3b1qkGsg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=VFu+MRvHjXC/BR15wTh6q9FaTANS5fkzFy9E9hnx3HhJawuhACRJBnxVgL08QM+JE wzose+zM34oAmNUd1nxkms3eDz6nWOtDpj/NxPuP7V9IAM0hW0HibpTAgv6+vL1pcH pqr423BzIVI2bdFqNtV29ssUi1gaaCJSrXQxfx2A= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Felix Moessbauer , Jens Axboe Subject: [PATCH 5.10 259/518] io_uring/sqpoll: do not allow pinning outside of cpuset Date: Tue, 15 Oct 2024 14:42:43 +0200 Message-ID: <20241015123926.983629881@linuxfoundation.org> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20241015123916.821186887@linuxfoundation.org> References: <20241015123916.821186887@linuxfoundation.org> User-Agent: quilt/0.67 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: patches@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 5.10-stable review patch. If anyone has any objections, please let me know. ------------------ From: Felix Moessbauer The submit queue polling threads are userland threads that just never exit to the userland. When creating the thread with IORING_SETUP_SQ_AFF, the affinity of the poller thread is set to the cpu specified in sq_thread_cpu. However, this CPU can be outside of the cpuset defined by the cgroup cpuset controller. This violates the rules defined by the cpuset controller and is a potential issue for realtime applications. In b7ed6d8ffd6 we fixed the default affinity of the poller thread, in case no explicit pinning is required by inheriting the one of the creating task. In case of explicit pinning, the check is more complicated, as also a cpu outside of the parent cpumask is allowed. We implemented this by using cpuset_cpus_allowed (that has support for cgroup cpusets) and testing if the requested cpu is in the set. Fixes: 37d1e2e3642e ("io_uring: move SQPOLL thread io-wq forked worker") Cc: stable@vger.kernel.org # 6.1+ Signed-off-by: Felix Moessbauer Link: https://lore.kernel.org/r/20240909150036.55921-1-felix.moessbauer@siemens.com Signed-off-by: Jens Axboe Signed-off-by: Greg Kroah-Hartman --- io_uring/io_uring.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) --- a/io_uring/io_uring.c +++ b/io_uring/io_uring.c @@ -56,6 +56,7 @@ #include #include #include +#include #include #include #include @@ -8571,10 +8572,12 @@ static int io_sq_offload_create(struct i return 0; if (p->flags & IORING_SETUP_SQ_AFF) { + struct cpumask allowed_mask; int cpu = p->sq_thread_cpu; ret = -EINVAL; - if (cpu >= nr_cpu_ids || !cpu_online(cpu)) + cpuset_cpus_allowed(current, &allowed_mask); + if (!cpumask_test_cpu(cpu, &allowed_mask)) goto err_sqpoll; sqd->sq_cpu = cpu; } else {