From patchwork Sun Feb 23 17:22:29 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Begunkov X-Patchwork-Id: 13987154 Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B92E3CA4B for ; Sun, 23 Feb 2025 17:21:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740331308; cv=none; b=I/4dikOoVKvhBQVCUqo9jIWgH+r5ZEAXhiJ0lf8Zpk/y0n66pTyk1rWcUoHXqmoQVvZ3Zg+whfEVC9vfHq+DftoAP3K/ZiCDzmi2AOqRvAlpQj7aNUgcjnrti5Tp3qFQDSl8zCv0Dz05qnl4MozDO7zCUqr9gq2FT6u/9NrPV9w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740331308; c=relaxed/simple; bh=C+zEs6nVdyhTtF2XN0jArsqKWLnJ+vrSrTevSH/0Tsc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=F0f4FCnOSjExlYPF0xwyktAbbOTXaTnI8cbNqhz8ANjvuSxHL6hAuPl2gbS9t2g/Jr77RthtIAFJxpUeizBQiTeVHMWUm62PqOdAx7tiomJsuUw85z3Ga5Cil9tu8lDwuGxdYpy5/QTaSFVYiQtOLANL7YEAbPe3JpaIN6nMndk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VdfxX+Zu; arc=none smtp.client-ip=209.85.221.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VdfxX+Zu" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-38f5fc33602so1981968f8f.0 for ; Sun, 23 Feb 2025 09:21:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740331304; x=1740936104; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=lDXQBSAm0udiXjcaiwUj+OYuOs1KauBHUR0fNdOsnFg=; b=VdfxX+ZuOobilbs/TeOeVT8jqngBLaq6XyS9FSG3Q8OeRkAg4J/Y7FxpDY41L4N76e 8dMRXteMJRQyBYHj8A4MAYFC77mN0dZBEm2naTIjNUnZXAfjFO7pt7/w3x+9OCjVIkhq Fr0YhMp9FLuhr/5ukMYxoahkXMWrUkWhR478UZeklgXSsb/AtFrMGDf+3QFxrSjZs0+H 5gHB8kBXvgJYAmdw7PbkCM2KkHo7cZPj7AvyiNwEvBN85wkgswaopZ/utMAnNNYTdPto 8nGsM0MwDYAYXY5MSjupOhaoY2puGCoUk+ccwr6DjuMkzD5JIhSeV33N7G7B1RCo+XbP 6TXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740331304; x=1740936104; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=lDXQBSAm0udiXjcaiwUj+OYuOs1KauBHUR0fNdOsnFg=; b=mnvVZcjmpPtCQhBFXgmXhFCW463oF0QIbmqVNPy7rW8JmlwD/dEEJp6LpF+ypJXoGh aMBBfbl8H0H1mLfA/8edz1Petfe2tw0hIbk56eelaxOKxAh5s1zCfOqe7cSikxlLhSB3 nUpxx9+4iAYL/yBe/1y+fGmSuBfVYybccFGKtS+bi753NrK6JucmkNjZWLdbEk4btcOO 4glIkSN54CTuDgzp/BZQgYexAXJDvV/QxgkRGJqLkwoYSlkfd5YFOWGcPvCAG7zy2S+5 8rg3r746ThHmoYBqxGZbRkXM/0aVKLXVsL3v7bEyHeEYKfvMgD61PN/qAdeztpdulgBR GhCw== X-Gm-Message-State: AOJu0YxxEsM6a9+jhBmVOjNbPPbZ6SEoZouqDEUf3Sz1s0F/wMAdoUtk vK2m/x0Bd7TbNdyMjLylVIAGSDTbLJGgjtZaDRbVJG2U7KbA2wrQz3gvJA== X-Gm-Gg: ASbGncvvGeaNZ91vcT78YYWyyzBAE9N8Rm2EnAOhYZO1SmYs60Cg/h1/p5RpWFpd5Qh qAZiQkv38KgDviiLqsrVA+T1hxBKHkz9czaMhN9pOXLSPDRxsUDLwC5dYxsvbdZuEayBnoJs7bP MHfa+iZSUxfQEyCMSqfpmKt/v5JJEEYOKgp8Axwzco9pKP/5NPqZy81Ay88LEXjYj5hd2Z+xLFH XjCaH4uyO00RXZB97HNCM6ws3vvRjzo7aq8bIG5wHqHlf2Caqusq0cjbtEYrVpWOdz1K1bWfh9O Qi9fN9A3s4iqht2s3Wp8JX3xjeLqQ0elgRMhYH4= X-Google-Smtp-Source: AGHT+IEedfsNCD5AcCZxXZL4gRebDptd71koP9+W/quLDaOFrpyoO4QG3K30I2PhJFBK/JRoMm87Bw== X-Received: by 2002:a05:6000:401e:b0:38d:d414:124d with SMTP id ffacd0b85a97d-38f6160faedmr11565615f8f.19.1740331304418; Sun, 23 Feb 2025 09:21:44 -0800 (PST) Received: from 127.0.0.1localhost ([148.252.146.93]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02d684dsm82117765e9.16.2025.02.23.09.21.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Feb 2025 09:21:43 -0800 (PST) From: Pavel Begunkov To: io-uring@vger.kernel.org Cc: asml.silence@gmail.com Subject: [PATCH 1/3] io_uring/net: fix accept multishot handling Date: Sun, 23 Feb 2025 17:22:29 +0000 Message-ID: <51c6deb01feaa78b08565ca8f24843c017f5bc80.1740331076.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: io-uring@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 REQ_F_APOLL_MULTISHOT doesn't guarantee it's executed from the multishot context, so a multishot accept may get executed inline, fail io_req_post_cqe(), and ask the core code to kill the request with -ECANCELED by returning IOU_STOP_MULTISHOT even when a socket has been accepted and installed. Cc: stable@vger.kernel.org Fixes: 390ed29b5e425 ("io_uring: add IORING_ACCEPT_MULTISHOT for accept") Signed-off-by: Pavel Begunkov --- io_uring/net.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/io_uring/net.c b/io_uring/net.c index 000dc70d08d0..657b8f5341cf 100644 --- a/io_uring/net.c +++ b/io_uring/net.c @@ -1718,6 +1718,8 @@ int io_accept(struct io_kiocb *req, unsigned int issue_flags) } io_req_set_res(req, ret, cflags); + if (!(issue_flags & IO_URING_F_MULTISHOT)) + return IOU_OK; return IOU_STOP_MULTISHOT; } From patchwork Sun Feb 23 17:22:30 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Begunkov X-Patchwork-Id: 13987155 Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 430F478F46 for ; Sun, 23 Feb 2025 17:21:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740331309; cv=none; b=hM7H3+9+5wSTIfdlOevjHH2Ojp4zlJO81/htrtdMJGHDLcEe16mYEOEI+dhsj/54H2LyuLq2qSQ55SymK56+ZNQUIVc9aj34PyxXaINKVEsu6oy48bMXYrjLGLyXMqvAe7ni3ZIxd5drl0/VgqNf8Lv16zhEGTG0zUNxDHvwF4U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740331309; c=relaxed/simple; bh=Z6NDeIIHJsZ/MIOHzwQUFO5Nr2FUJMJ7ePuoeEt5IOQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XsMxUivBjdFaQ0TbghgKr2rK7zivS8uspSUUvYh5+xtWn8eGWRaDns+T275/a6KosoRhDhQ4kUGUro7j8zTOyQJ4g12Qp0QVAt/oUKAGNXt/Mp2ZnnEprS7zKQ9qXkIYS1k+NB3RQ6gSrn+YqFgYcG/R93h9Xx7WgCZUmmwaWug= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=OWch3Xzh; arc=none smtp.client-ip=209.85.221.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="OWch3Xzh" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-38f3ee8a119so1746114f8f.0 for ; Sun, 23 Feb 2025 09:21:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740331306; x=1740936106; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=sasaUeW0+Wy+FJGZVV0GAt6C+s0g70GHMAWt1JiKZfQ=; b=OWch3XzhuCfrRxGWFjni1mSSGbMsCFIqaeAtf94x8eWjuC8hRPjsqcVznu0FVcGImo 72B9ZYNiifbtJJe0tv61tXTpEZ2x1zr2ZXKy7gRWyqlPX9Cue8jjeSJ4P6HvNmuW7SdH kJ683zU2TNahxf1iRZtx9dTxAFG2knjCDZIEKDTkdCs84EZU/iRYHHZGWFy2ORFGZiz0 q7ExoAzIwBToEeZJndawlu67x5Btmeuf84X9kEkF9f+ObTWVeqmrq3/Hx6va7O9Wac2F ZED1Nq0I6+u5lJLiaisnp0tToti2+YucqVjDT5zSSYtjAuhvxLYkJG92GUw0oOQYwNlr d3ng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740331306; x=1740936106; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sasaUeW0+Wy+FJGZVV0GAt6C+s0g70GHMAWt1JiKZfQ=; b=V2/MbpWZMUZWluY3ZKyo5zm7sr4IZVRj2vn9y4tXfjeTsaEClO6i05RkfGI4lO2VpS WDeo3BIqHeX6PymDbWhWUz8URbIyEbZJW6sEf2aKk4N/XUpGXa5QJFmVR5aTS4QhKnzl mhPrXcLm8YP3o0lpQXu5oTFyij12XGgZRupBuc2S3Ia2dKsyYKvXwHq4LVGd/ElLIxBC ItTH9v7Z+Y13tiV3cD+eyjF2jNLXTbDcPsb9+a1e0niUYeTOKUXWjM4Q27+BLQScb8Gp 1M8Qg7x3McOYI2LQpxc3xY7NTaWVHgOqAd3YC5499CyDunFHW7XuyjXfaUOUFSDzOTSF 4tCQ== X-Gm-Message-State: AOJu0YxjzNs1jZvrg2xX1fWUelk4GIv+GGZPTTyqZa+RTF51bFjcw239 cadJxjIsYlFs1xta6hYkhULYsR16Q4yJOlsIqe0KcbUU29k5bbhujvUJEA== X-Gm-Gg: ASbGncvjr6FiFoQUTI1G9zWlurimY1zniJ4ls8ZiqSIB2LCbK1YXi2gLVwGuDXQQwhr DBMJsNZ2ISxir/E6Bw9JS455xXb/o/FewgZjIzE7+RIHqrwlnSvcwqkcxPYAEKFtrJm8JB+Ywz9 sgwUOv8nTo7yPdqEYfz3dhIu1SloBXCBh7aX2nZyTCdXoSs/icjeFQOhNm2/Un8/7cCzvYxyaw7 0gOlVWOKI9mnco80SREIVcAXPzYt3f8jGhjVJPJWM94GynUppMY6YEfapu6iQwA11Hs6L4T7pG3 njOMIFW61ZVFNPNNKa0mZLeDn1Ti4OfX9paA7Yc= X-Google-Smtp-Source: AGHT+IGlqfpf/G8jRqf/wao4AGU1yDfChu5nuT6iJd2jmBJdDattMU/iAWTHpiw+HxSJeYSLNO6LOg== X-Received: by 2002:a05:6000:2a2:b0:38f:4fa5:58ce with SMTP id ffacd0b85a97d-38f70772a64mr7207728f8f.6.1740331305792; Sun, 23 Feb 2025 09:21:45 -0800 (PST) Received: from 127.0.0.1localhost ([148.252.146.93]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02d684dsm82117765e9.16.2025.02.23.09.21.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Feb 2025 09:21:44 -0800 (PST) From: Pavel Begunkov To: io-uring@vger.kernel.org Cc: asml.silence@gmail.com Subject: [PATCH 2/3] io_uring/net: canonise accept mshot handling Date: Sun, 23 Feb 2025 17:22:30 +0000 Message-ID: X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: io-uring@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Use a more recongnisable pattern for mshot accept, first try to post an mshot cqe if needed and after do terminating handling. Signed-off-by: Pavel Begunkov --- io_uring/net.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/io_uring/net.c b/io_uring/net.c index 657b8f5341cf..d22fa61539a3 100644 --- a/io_uring/net.c +++ b/io_uring/net.c @@ -1689,7 +1689,6 @@ int io_accept(struct io_kiocb *req, unsigned int issue_flags) } if (ret == -ERESTARTSYS) ret = -EINTR; - req_set_fail(req); } else if (!fixed) { fd_install(fd, file); ret = fd; @@ -1702,14 +1701,8 @@ int io_accept(struct io_kiocb *req, unsigned int issue_flags) if (!arg.is_empty) cflags |= IORING_CQE_F_SOCK_NONEMPTY; - if (!(req->flags & REQ_F_APOLL_MULTISHOT)) { - io_req_set_res(req, ret, cflags); - return IOU_OK; - } - - if (ret < 0) - return ret; - if (io_req_post_cqe(req, ret, cflags | IORING_CQE_F_MORE)) { + if (ret >= 0 && (req->flags & REQ_F_APOLL_MULTISHOT) && + io_req_post_cqe(req, ret, cflags | IORING_CQE_F_MORE)) { if (cflags & IORING_CQE_F_SOCK_NONEMPTY || arg.is_empty == -1) goto retry; if (issue_flags & IO_URING_F_MULTISHOT) @@ -1718,6 +1711,8 @@ int io_accept(struct io_kiocb *req, unsigned int issue_flags) } io_req_set_res(req, ret, cflags); + if (ret < 0) + req_set_fail(req); if (!(issue_flags & IO_URING_F_MULTISHOT)) return IOU_OK; return IOU_STOP_MULTISHOT; From patchwork Sun Feb 23 17:22:31 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Begunkov X-Patchwork-Id: 13987156 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2587D126BEE for ; Sun, 23 Feb 2025 17:21:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740331310; cv=none; b=LBcprlSn+75sU0x++/Ho0KtF4UOuXSKCUab9MnW0U5hHeVSEf5Jjjtkqhzs3WYGN5rYpM/FZeT/tkSr9iAOYumpIuBkoDvJpMu6TWQtAH/FQn7KSdy3FtWIH7IRLCKGAARn3NdhBDBBzoYjvXqQ948vC+T8U40/4BtACPnXRdEg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740331310; c=relaxed/simple; bh=Hn2SSGLa1Zf2M8XXQtR718u9JMVg3QCKYLTf39YwZ34=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IhddXxKf4ZLGju8qBas/ETed4V1bz0L608jixAOiB6d89vJIWUhXny7BIlzZc+gwNk9DXUwtZoOL7jLn9uO7WNxRsBRgJKvAjhlOk62nuplAUOIBK/wPPtyR0upu8f+7gn00iPezX2sMPwx0NkONpYKS/AGvUr+CoSvfa8BnbLI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=TIr2Vz+U; arc=none smtp.client-ip=209.85.128.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="TIr2Vz+U" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-43937cf2131so24478315e9.2 for ; Sun, 23 Feb 2025 09:21:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740331307; x=1740936107; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ExhDyyv3Sh2t0xfSNNu2pV2UTZ/1xa15A50v3I1MnlA=; b=TIr2Vz+U+M1LXqHEZjgdPWwYURVpqfZD18kkeVYCCIHHgC5O/tcROQs/r8RAWm9vO8 9S64GaNpXzSnjDOWZG7w5OiGDwlHfu4G/85050snjIXlioXT3BvmuddK98G59eSoVPTQ txIV9t3VFSaxZPDLgQ7xDkRWr8mam+tQPqZNuvDzQBuYHKsY7ClFpUaMTJ2d4Iq8uV5t 6sB3pedXn8emKKHmTxD4nCdkvEY4T3igSOPZinghy91sn7nz9Avc97xV+ZUPzut9/nQE HB6RfDivcx2mGUUKVAwedSUEaI4tZ9wMw0ASDspRMyVQ2h0mxhR2RkxSdwFgXH7Dzss1 NDgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740331307; x=1740936107; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ExhDyyv3Sh2t0xfSNNu2pV2UTZ/1xa15A50v3I1MnlA=; b=PbKzG6B6DdVhaCkpR0ZjhUgk78jSuWLzPYz25tU60CtkkSKglnHaRM0TBHFBBqD+qV J8vLfIxuGrxm92yf2RRs3g3nb8o2S//PAzcptFRXfF1+jakJehfVAz4FQPwTQjTK1oc2 DdJcjYM8qsm+tsSlFpHbv+BzOZOEDTXru0iyDw8Y1ZPbgLTyyK/TGjCCQXuHp5HbsGrx GiZAbtUKKldFfN2wDCgz8aCvuDYbU0+jzgLlZAtA3hj7OHz+QdcetOnnBQgzG1roRGK5 6pJt+t4uy2y1L9bhmcTntYvHEjsx4/u9nLHC3K+CXP32RH2fqtwW90bTIeDiGW4X6xk3 bndw== X-Gm-Message-State: AOJu0Yxwdt5nG3NnMIrDbpVJsATLzFVO7EtV+++ObslRAqvxs/xIny27 2VB60jAKDC4zzY1mIZj0+ZwReRvmhK0CBQOd8qfTi/l5jviol75dvLTRsQ== X-Gm-Gg: ASbGncvi0nw1Nv1eMeRr2Qb1dINBt/r3AR1yvYds/hZyDytIpeKi5Oi0uLG2ZDPaVDf WJkR+UI7PO+m5HhChc/ePxdG6iX6u3/k73Cf7hAWRAy7i/h63Uc0QVzdrbyos10ujb6R3lqWizT uARlFjwyA6V4TgyMBIY2hbl6uCQ/n/e0FMwoV6LCuuRmQ5U4OQRY4CFXu8U7xp7Pc6EMpVJGhls LrmHXvEEaKRYOH7ERbbEVqnjUQ38pjKA/OfMchob2wijyVCMd0cRCIOfLod7xYMfbXzvQcg/Ecz btxNZRZJBe3fgpcfHYdXD4dVFCGQd6O60Ted7aI= X-Google-Smtp-Source: AGHT+IF0dYXUykBYnTNJKrKdHbVMOkshwr0o5FJnd+0tvlnL8vZXjR5piMHweD3lijVDM2CHCG4AHQ== X-Received: by 2002:a05:600c:3b09:b0:439:8b19:fa87 with SMTP id 5b1f17b1804b1-439ae1d982amr90765025e9.4.1740331307111; Sun, 23 Feb 2025 09:21:47 -0800 (PST) Received: from 127.0.0.1localhost ([148.252.146.93]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-439b02d684dsm82117765e9.16.2025.02.23.09.21.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 23 Feb 2025 09:21:46 -0800 (PST) From: Pavel Begunkov To: io-uring@vger.kernel.org Cc: asml.silence@gmail.com Subject: [PATCH 3/3] io_uring: make io_poll_issue() sturdier Date: Sun, 23 Feb 2025 17:22:31 +0000 Message-ID: <3096d7b1026d9a52426a598bdfc8d9d324555545.1740331076.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: io-uring@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 io_poll_issue() forwards the call to io_issue_sqe() and thus inherits some of the handling. That's not particularly failure resistant, as for example returning an innocently looking IOU_OK from a multishot issue will lead to severe bugs. Reimplement io_poll_issue() without io_issue_sqe()'s request completion logic. Remove extra checks as we know that req->file is already set, linked timeout are armed, and iopoll is not supported. Also cover it with warnings for now. The patch should be useful by itself, but it's also preparing the codebase for other future clean ups. Signed-off-by: Pavel Begunkov --- io_uring/io_uring.c | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c index 58528bf61638..a7f5794c1930 100644 --- a/io_uring/io_uring.c +++ b/io_uring/io_uring.c @@ -1721,15 +1721,13 @@ static bool io_assign_file(struct io_kiocb *req, const struct io_issue_def *def, return !!req->file; } -static int io_issue_sqe(struct io_kiocb *req, unsigned int issue_flags) +static inline int __io_issue_sqe(struct io_kiocb *req, + unsigned int issue_flags, + const struct io_issue_def *def) { - const struct io_issue_def *def = &io_issue_defs[req->opcode]; const struct cred *creds = NULL; int ret; - if (unlikely(!io_assign_file(req, def, issue_flags))) - return -EBADF; - if (unlikely((req->flags & REQ_F_CREDS) && req->creds != current_cred())) creds = override_creds(req->creds); @@ -1744,6 +1742,19 @@ static int io_issue_sqe(struct io_kiocb *req, unsigned int issue_flags) if (creds) revert_creds(creds); + return ret; +} + +static int io_issue_sqe(struct io_kiocb *req, unsigned int issue_flags) +{ + const struct io_issue_def *def = &io_issue_defs[req->opcode]; + int ret; + + if (unlikely(!io_assign_file(req, def, issue_flags))) + return -EBADF; + + ret = __io_issue_sqe(req, issue_flags, def); + if (ret == IOU_OK) { if (issue_flags & IO_URING_F_COMPLETE_DEFER) io_req_complete_defer(req); @@ -1766,9 +1777,24 @@ static int io_issue_sqe(struct io_kiocb *req, unsigned int issue_flags) int io_poll_issue(struct io_kiocb *req, io_tw_token_t tw) { + const unsigned int issue_flags = IO_URING_F_NONBLOCK | + IO_URING_F_MULTISHOT | + IO_URING_F_COMPLETE_DEFER; + int ret; + io_tw_lock(req->ctx, tw); - return io_issue_sqe(req, IO_URING_F_NONBLOCK|IO_URING_F_MULTISHOT| - IO_URING_F_COMPLETE_DEFER); + + WARN_ON_ONCE(!req->file); + if (WARN_ON_ONCE(req->ctx->flags & IORING_SETUP_IOPOLL)) + return -EFAULT; + + ret = __io_issue_sqe(req, issue_flags, &io_issue_defs[req->opcode]); + + WARN_ON_ONCE(ret == IOU_OK); + + if (ret == IOU_ISSUE_SKIP_COMPLETE) + ret = 0; + return ret; } struct io_wq_work *io_wq_free_work(struct io_wq_work *work)