From patchwork Wed Feb 26 11:41:15 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Begunkov X-Patchwork-Id: 13992099 Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) (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 A8D8217BB35 for ; Wed, 26 Feb 2025 11:40:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740570037; cv=none; b=XzsQbMvMYWsaBgWhwaxJBpzkLVL9diCYSaWUqww1SLHUKHZAHELuuy9Byrbab/AoTgitf2GA2GbGoioQ9uY/iwJUl7qYT1em8SLSw7oRiIISb3X/Kh89lpdQRJatt+PKNZfvAxI+KlsNBdID6VcKwDRnlYsx4wiKoUdBBk7bywI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740570037; c=relaxed/simple; bh=/pxwft0KfZH7w3fHGORDU64FaSwjat6dBOf5sp4tL5g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Q2p1C5u05yFqJpBYk7zYfqWKJd9xges9NeULF+c/4stxwVxX5uhLa17BRKsKNbmMGElyyW5cN4cfkkx7zdEkV8OvI+zUCOhomlGS1aVx4oo+SjAchc+OdF1DWJmorYriEUGyyLj3zKRArRkjAUEj+oRuGmNZZqsKc2v33ApRN34= 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=RPv2+6Xa; arc=none smtp.client-ip=209.85.208.48 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="RPv2+6Xa" Received: by mail-ed1-f48.google.com with SMTP id 4fb4d7f45d1cf-5dca468c5e4so11963609a12.1 for ; Wed, 26 Feb 2025 03:40:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740570033; x=1741174833; 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=0LXbnwcIBc2J1W8+NT/KbDyiw6ZmnDEsBSK3rUjcCzQ=; b=RPv2+6XavdwBnJGiIMj92UQt+y1vgAf9n6SlzKm90PXa4hwZAB6AoGeEjIckJTNNNv ypCgFbQ33xFp+BuYDyiYF2C23v3ff+2THaVd8ZlvN4b8uwSMjy0h5RGEPtf9E21/k23I M6LryG731DrJ7HTzQAKfF/wzi5jCOoa+4kIEmynRIM0K+/AN/cwtMBs7+RnocHlTP7dl QKSs0a2upyGeLeXx2p/k/HhW5GwMLjs54zZ9wDJFg9dzyZN6YUvtVucapoyINmp1ORaB C/nNQu3iRJ+YUmMDzNcq9WHXMIp0uHFv7EaR6UkWpDD63iXdR2vjdZ7/A6IEqn9mbaM7 +bjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740570033; x=1741174833; 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=0LXbnwcIBc2J1W8+NT/KbDyiw6ZmnDEsBSK3rUjcCzQ=; b=p9sep1XgjhkijEFjz1RxTjsmtCKOhlmqSegqxuxAaVeG2wXvSHDamByaFODymwHrlq uqoFlFTYrBeQNrGQxUBrsnM79+5NdxaGLsLmdCG7GeOLzNdlqxVDavjZGlxejDoouZ8w uSRSfj17vGhzGbmTQZwGL+N/Wy+olmWcKLua0pOQ3x2F5eIMdleNfQ7ReJ7PMCh92dXw 6OHjKLi/+XP9ckyZg5eQNC7JNU4z3MRAOEfKo9xL0VxViOHiqG1p5Tiqr/i7stjIigY8 T4lXp9LnzcaSLYWcBJCemffoH2AL73W8g6AUz980jZ5BODPhigMK8UbdsFlNLwaZO8QW 0vMA== X-Gm-Message-State: AOJu0YweL2eMgWbMNVgdM/GqMBxEwx5aF9RLZaCxm+NGPpfaZAoxpqAK 0ijnNn9uyeShmg9K8wozmGtPnDk4G50MRoDAkDQ9xhreME4EBSX5TqIqaA== X-Gm-Gg: ASbGnct8Fa308i9KXDY427bKklfDCgF+cb4q2oC9RduM5u2obdph1nuSuWkKQEYYDk8 F/oW1LFzU33R4tU12rW2VeVZXdSwd/OeeiH4sJhxW4f5JJU/NVr/CfU9fwhfz9428uzt8d5utkb 5T8TgjFVchHLDoPVN7OC39XaYD9cQ1ToQiFJv9TRupiacpG7Wy5k9MUk6OSPsMlFVIZUrnfcX9t CmGVsz7ZHvHsAOafJBcPTGRJ5N7qXY5YJFwmOscae/Wk7yvdHbZfPPj/XoqAHrzDk7/XWVdRCpK 0Imc8kjQ9Q== X-Google-Smtp-Source: AGHT+IH5N+MU1rm63geijzZE5ziA1EbI/NAfepVyuGX2dIZldjZoZj0k8JdvJygqXoqUe2jlu2EXJQ== X-Received: by 2002:a05:6402:2743:b0:5df:4181:d2c6 with SMTP id 4fb4d7f45d1cf-5e4469dd8d8mr7902700a12.19.1740570033268; Wed, 26 Feb 2025 03:40:33 -0800 (PST) Received: from 127.com ([2620:10d:c092:600::1:7b07]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5e45b80b935sm2692418a12.41.2025.02.26.03.40.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Feb 2025 03:40:32 -0800 (PST) From: Pavel Begunkov To: io-uring@vger.kernel.org Cc: asml.silence@gmail.com Subject: [PATCH 1/7] io_uring/net: remove unnecessary REQ_F_NEED_CLEANUP Date: Wed, 26 Feb 2025 11:41:15 +0000 Message-ID: <6aedc3141c1fc027128a4503656cfd686a6980ef.1740569495.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_NEED_CLEANUP in io_recvmsg_prep_setup() and in io_sendmsg_setup() are relics of the past and don't do anything useful, the flag should be and are set earlier on iovec and async_data allocation. Signed-off-by: Pavel Begunkov --- io_uring/net.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/io_uring/net.c b/io_uring/net.c index bce75d64be92..c78edfd5085e 100644 --- a/io_uring/net.c +++ b/io_uring/net.c @@ -388,14 +388,10 @@ static int io_sendmsg_setup(struct io_kiocb *req, const struct io_uring_sqe *sqe { struct io_sr_msg *sr = io_kiocb_to_cmd(req, struct io_sr_msg); struct io_async_msghdr *kmsg = req->async_data; - int ret; sr->umsg = u64_to_user_ptr(READ_ONCE(sqe->addr)); - ret = io_sendmsg_copy_hdr(req, kmsg); - if (!ret) - req->flags |= REQ_F_NEED_CLEANUP; - return ret; + return io_sendmsg_copy_hdr(req, kmsg); } #define SENDMSG_FLAGS (IORING_RECVSEND_POLL_FIRST | IORING_RECVSEND_BUNDLE) @@ -774,10 +770,7 @@ static int io_recvmsg_prep_setup(struct io_kiocb *req) return 0; } - ret = io_recvmsg_copy_hdr(req, kmsg); - if (!ret) - req->flags |= REQ_F_NEED_CLEANUP; - return ret; + return io_recvmsg_copy_hdr(req, kmsg); } #define RECVMSG_FLAGS (IORING_RECVSEND_POLL_FIRST | IORING_RECV_MULTISHOT | \ From patchwork Wed Feb 26 11:41:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Begunkov X-Patchwork-Id: 13992113 Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.41]) (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 42538215779 for ; Wed, 26 Feb 2025 11:40:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740570040; cv=none; b=HjKXwPyZ1qaHTtKfrUqtTp2beeVcLHNzMwZTCHPuWBxxajPuOrs8y5TjO4TZPWnDDYfmjO3TWeawaZ7hEUkapZjJVXRXXN4kAdZy53+t/dYjxpkxHb4+1DE7ZkF7C70FlWXfyg9IsZk9lMkLplmrMofkIT/By24dTN/GCh/plY8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740570040; c=relaxed/simple; bh=gI4Cwarylx1yMPDotLehl7ONUnkOPP1wwRmj3p7vbm8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VVjMHQYD3Vj/j5SpixyCweg03tpmXQNB6GPm7TTDoA1n2vesMh9akThwk7Tb3JAGkPZgYj4Vd2wpIbsQ3uHzR9ybZjfzWVfVVFbbYY02/UhJFZswZnFJP13qihQOAGguo1dOa1PvtFewfwNKP+JHwTnK94uyKm/j75+m2e2mOhs= 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=Mnngzc8r; arc=none smtp.client-ip=209.85.218.41 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="Mnngzc8r" Received: by mail-ej1-f41.google.com with SMTP id a640c23a62f3a-abb7520028bso902489566b.3 for ; Wed, 26 Feb 2025 03:40:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740570037; x=1741174837; 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=TTrmXxEi4oVTAINbO/NnDUch5MwURBjaWqrxGV0Cbeo=; b=Mnngzc8rRAeMNG7zhaZiDOSdQkIjdK654rQWzG0eY1596TP2yHOaMD//1tnxBQQdYn GgU9xug9WN00JkKU7ZNsJ9wsfiBHtiaJzRS1BD4n/BLOyc0oJM9+7dDozWSZB+8NWv0y 5sBt6E4Evx9OX/eMa5/cqV2WR90+vdGVNMbMLbMzw8TZYaz2ZFaH7SDok5Lw7vq/wCJC AT3iCbStTvg5r2ugs+sCCai5dCv13ToxbBOFq7fgFoVofEmR2btBc0aImnI+aREZnLDE EwR7k+6xtla76rkkaanrHh0dCXt2evTPGg4WMXTbEVGSfxWXrVFhO6OEhHxkeyGQQiw6 5tqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740570037; x=1741174837; 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=TTrmXxEi4oVTAINbO/NnDUch5MwURBjaWqrxGV0Cbeo=; b=wTQE0IjUKbvccmQTRtvqI4ckpN0EnxKQWIdEJXNOYQ32eEHAD0CYx4GKRqqMhcZ2Jh jEHDb8VVd9LcjYLZgm4NGti+Y+g7T3qKcEJT8ZlZEqZkLwEjtj+qs9jROKHNKlO9Qk29 P1zJTh/ZO7p1WTepMz5ZfypuZK0wOxIPNCmCvjE697Y2LcwWbVb8/HZt33dTPlx2V0Ta 6Dz6v8rfKTfzwUlXEyeLYauA/RDo/gCVAjOvA9iJ2pzPR8uwlEuBYGy2UHfumouFzxjx 0D6GQRG2L7xjoi3alaV37sOWiX8cc2CUqP0SWagmAAwhd+H0Jv+1Bq+b49zWusMs9VMv tC0A== X-Gm-Message-State: AOJu0Yws6K1qzNE+NK6eR9FNlYVdU8YOe8KflUs97nk3nmYItGIZ8Lc/ +Bw8xKYc40R3IspId/QpUd4fzP5nVmIGoTHAAf3Bms9g8X4duk+a3BdWqA== X-Gm-Gg: ASbGnctQHOM8/O/feIms1tNcXwUhBdnvKTtIvzhhK3cp/yrNHmqdQJBOINW7vV3SI/R nTiygsGla2WoDxntMyLX/lX6J0CglMC4Jfhf+F8dj8HxUJkUAH3q03Vi8xyRKdjR1MuyxNng81O WNwXROB/yRWBw2jIEsIv0fXMpg7zb4V5hSTAMBIzo8uKg3y96CFVGDjU+AL7dBrP16YaO+kqI1f OlYv12VCpNhcowpR8ro0gecXqaCH0dvywNBWXDu8wvKMAGuGAVdlJisRloijKkWp2BbwVV41v6B x0RUUjSjMA== X-Google-Smtp-Source: AGHT+IFmR+5lx0KGwG8rdTtZ0PW70ry+iJUXIaLZRq9btbUnT0lDOlmxaWXct+KpbRGSHXOCjQOVmw== X-Received: by 2002:a17:906:308c:b0:abe:ce46:6231 with SMTP id a640c23a62f3a-abeeed5b40cmr326641366b.16.1740570035339; Wed, 26 Feb 2025 03:40:35 -0800 (PST) Received: from 127.com ([2620:10d:c092:600::1:7b07]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5e45b80b935sm2692418a12.41.2025.02.26.03.40.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Feb 2025 03:40:34 -0800 (PST) From: Pavel Begunkov To: io-uring@vger.kernel.org Cc: asml.silence@gmail.com Subject: [PATCH 2/7] io_uring/net: simplify compat selbuf iov parsing Date: Wed, 26 Feb 2025 11:41:16 +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 copy_from_user() instead of open coded access_ok() + get_user(), that's simpler and we don't care about compat that much. Signed-off-by: Pavel Begunkov --- io_uring/net.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/io_uring/net.c b/io_uring/net.c index c78edfd5085e..0013a7169d10 100644 --- a/io_uring/net.c +++ b/io_uring/net.c @@ -215,21 +215,19 @@ static int io_compat_msg_copy_hdr(struct io_kiocb *req, uiov = compat_ptr(msg->msg_iov); if (req->flags & REQ_F_BUFFER_SELECT) { - compat_ssize_t clen; - if (msg->msg_iovlen == 0) { sr->len = iov->iov_len = 0; iov->iov_base = NULL; } else if (msg->msg_iovlen > 1) { return -EINVAL; } else { - if (!access_ok(uiov, sizeof(*uiov))) - return -EFAULT; - if (__get_user(clen, &uiov->iov_len)) + struct compat_iovec tmp_iov; + + if (copy_from_user(&tmp_iov, uiov, sizeof(tmp_iov))) return -EFAULT; - if (clen < 0) + if (tmp_iov.iov_len < 0) return -EINVAL; - sr->len = clen; + sr->len = tmp_iov.iov_len; } return 0; From patchwork Wed Feb 26 11:41:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Begunkov X-Patchwork-Id: 13992114 Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) (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 0A7C621505D for ; Wed, 26 Feb 2025 11:40:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740570041; cv=none; b=g3B6l6qhTadEC4EklvnSL1sYxei5gT0d3kDcTZ3FjNu7gc1vBIpt9+lOFVq/YpsAvdps8eCLx+EncYGN3S3gcX7yKsuEKg/9cHKrnd+OQrU9l40f0IlSJqDKB18H9JbUo0S1QqQkmYzFXzh6qhoIPTe5WFRSstQ1yPo+gtus7LY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740570041; c=relaxed/simple; bh=24FvXa9aG9vZ4yHSjilp07gbtCfvWhj/d8PPrNWFwKM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NR0N892wG8SMktROGiusF8U6eC6PXEhIk3fIhFryK9OEpAlcjNFszHLckJYVmYZY1A89PMKXpHEfg6vZP2Ph/oNZNR1M5JSOWrF8MiljJc9p6FtxMC2h1BK0sxtS7KejGWVcu1QwvHzVFatfNB2Lo+eMoIgY6sgw2yKUaABx9KQ= 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=LeUFI9Mq; arc=none smtp.client-ip=209.85.208.48 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="LeUFI9Mq" Received: by mail-ed1-f48.google.com with SMTP id 4fb4d7f45d1cf-5e04064af07so10690002a12.0 for ; Wed, 26 Feb 2025 03:40:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740570038; x=1741174838; 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=Jp+JgVKUVU7tG6AlWMu65MLLWLDtLTF+BDF9puXzNcs=; b=LeUFI9MqTg2s3S8lDME99rq8epgjC4Lg5wnhkrZ+oNU3C3NZbuOWE3zm7TfN7CUEs3 CZPeJ5WsZt9rw0DI+S1JfWPz/dF54fiqzyoXs+hcfvilXcWAlWwQWFxeV5DPJIh9AItL 3IGqitVu5GcbrVEnrN2S44uJ2iFV8K4SWNhi3bJcIOm36HutnGKbeeC0yPrT1vARifby ZrpovF6dRDIP+HP2pbuHalneOshxJ5NSrnbro935Md6AD72WyFo9L6hLDRkylm1PgH+5 U1LutIM64gemcds2XCyfnrjun3Rhhb+kVKsv42k3HJ/aP92LqRd13gVY+X6GMMH4ifk4 Mkyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740570038; x=1741174838; 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=Jp+JgVKUVU7tG6AlWMu65MLLWLDtLTF+BDF9puXzNcs=; b=MFJadfuIPdZXZeDVGYBzMh7ofyiREkoi4cI6H/Ww6tpH21SsFjPoid8bqYvBQTxp89 dMC8ZVhe6JgN5mdBOzCcmPZ5ZwnHCTw/4rBK605WvZHQRNZTX90xou9il17Dx4WyYktE RsKHL4M5+ytOx9HymIdtnN/oAUmcbnNKLZv6VC3lea3DSLyWXgTB6kGnHCeLTrXzpVv1 3RD19Clc/VrTtQyyaKEwfuPLyhJzVckw1jO1DSvyDRQiIaBebhFBuHBynWCW9isTNRYf Wzh9IwTPpkxBlntDLW4sy3dK+WsbwNiEkcRXLDIZW/DZFq4CV1KMH2M3aZX2aj+IOcRH W5/A== X-Gm-Message-State: AOJu0YzbwKzqFzDWG/pr/sPwLyC9Ue6KW5I5odUzO56m7sPmzEV13GqQ Sw+3uBAZJnvkbCWm32MtOldvQ7oduPJdQeDrA6Q+6K/wqvosvFTejpfLjQ== X-Gm-Gg: ASbGnctbJBJYzktSPWbMhIU1FTryARde+Bu68f0qo/0VWVeX+SyMmKeqPWpQq58fhHl BUxPfTcZu3S5xnWAZzvvUViAsndMW8j8qdz4/bSgeSPbfWeoeMA6fiYfAWlWlqJ8AVXROXp+ZOb SABPvxKAPYS800zsoKItHrkwjCqOtsjJVzfKSpbSvd6uL8Kvh3v5LM/LgXH6gFiJBcEPehXnyOF UzrjLHRlZ5CdSckoO1XdZomIqBwrqH81qC0yFVkI9vaVGgxBaktKTcXQV39vko6DP7X6Hv2r86J xg8bpnal1A== X-Google-Smtp-Source: AGHT+IG3uk2c8fvUhhmNHDfR5Z3PwlP2xPAFP3fTe7U1tpyPBps6HLjezA5hLKUKoJCSrM1YGQ0oLg== X-Received: by 2002:a05:6402:4604:b0:5e0:8c55:531 with SMTP id 4fb4d7f45d1cf-5e445994128mr6374449a12.14.1740570037693; Wed, 26 Feb 2025 03:40:37 -0800 (PST) Received: from 127.com ([2620:10d:c092:600::1:7b07]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5e45b80b935sm2692418a12.41.2025.02.26.03.40.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Feb 2025 03:40:37 -0800 (PST) From: Pavel Begunkov To: io-uring@vger.kernel.org Cc: asml.silence@gmail.com Subject: [PATCH 3/7] io_uring/net: isolate msghdr copying code Date: Wed, 26 Feb 2025 11:41:17 +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 The user access section in io_msg_copy_hdr() is overextended by covering selected buffers. It's hard to work with and prone to errors. Limit the section to msghdr import only, selected buffers will do a separate copy_from_user() call, and then move it into its own function. This should be fine, selected buffer single shots are not important, for multishots the overhead should be non-existent, and it's not that expensive overall. Signed-off-by: Pavel Begunkov --- io_uring/net.c | 45 +++++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/io_uring/net.c b/io_uring/net.c index 0013a7169d10..67d768e6ecdd 100644 --- a/io_uring/net.c +++ b/io_uring/net.c @@ -243,6 +243,24 @@ static int io_compat_msg_copy_hdr(struct io_kiocb *req, } #endif +static int io_copy_msghdr_from_user(struct user_msghdr *msg, + struct user_msghdr __user *umsg) +{ + if (!user_access_begin(umsg, sizeof(*umsg))) + return -EFAULT; + unsafe_get_user(msg->msg_name, &umsg->msg_name, ua_end); + unsafe_get_user(msg->msg_namelen, &umsg->msg_namelen, ua_end); + unsafe_get_user(msg->msg_iov, &umsg->msg_iov, ua_end); + unsafe_get_user(msg->msg_iovlen, &umsg->msg_iovlen, ua_end); + unsafe_get_user(msg->msg_control, &umsg->msg_control, ua_end); + unsafe_get_user(msg->msg_controllen, &umsg->msg_controllen, ua_end); + user_access_end(); + return 0; +ua_end: + user_access_end(); + return -EFAULT; +} + static int io_msg_copy_hdr(struct io_kiocb *req, struct io_async_msghdr *iomsg, struct user_msghdr *msg, int ddir) { @@ -259,16 +277,10 @@ static int io_msg_copy_hdr(struct io_kiocb *req, struct io_async_msghdr *iomsg, nr_segs = 1; } - if (!user_access_begin(umsg, sizeof(*umsg))) - return -EFAULT; + ret = io_copy_msghdr_from_user(msg, umsg); + if (unlikely(ret)) + return ret; - ret = -EFAULT; - unsafe_get_user(msg->msg_name, &umsg->msg_name, ua_end); - unsafe_get_user(msg->msg_namelen, &umsg->msg_namelen, ua_end); - unsafe_get_user(msg->msg_iov, &umsg->msg_iov, ua_end); - unsafe_get_user(msg->msg_iovlen, &umsg->msg_iovlen, ua_end); - unsafe_get_user(msg->msg_control, &umsg->msg_control, ua_end); - unsafe_get_user(msg->msg_controllen, &umsg->msg_controllen, ua_end); msg->msg_flags = 0; if (req->flags & REQ_F_BUFFER_SELECT) { @@ -276,24 +288,17 @@ static int io_msg_copy_hdr(struct io_kiocb *req, struct io_async_msghdr *iomsg, sr->len = iov->iov_len = 0; iov->iov_base = NULL; } else if (msg->msg_iovlen > 1) { - ret = -EINVAL; - goto ua_end; + return -EINVAL; } else { struct iovec __user *uiov = msg->msg_iov; - /* we only need the length for provided buffers */ - if (!access_ok(&uiov->iov_len, sizeof(uiov->iov_len))) - goto ua_end; - unsafe_get_user(iov->iov_len, &uiov->iov_len, ua_end); + if (copy_from_user(iov, uiov, sizeof(*iov))) + return -EFAULT; sr->len = iov->iov_len; } - ret = 0; -ua_end: - user_access_end(); - return ret; + return 0; } - user_access_end(); ret = __import_iovec(ddir, msg->msg_iov, msg->msg_iovlen, nr_segs, &iov, &iomsg->msg.msg_iter, false); if (unlikely(ret < 0)) From patchwork Wed Feb 26 11:41:18 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Begunkov X-Patchwork-Id: 13992116 Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.49]) (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 48BF5215F7A for ; Wed, 26 Feb 2025 11:40:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740570044; cv=none; b=AFX8NbCaGi+/4Uol0nTcc9eByRi47Md1HI85fzro11OMZmjT04rYAagUu25k0YsozX1ugXAqlnxgp05KryhUuG5ARzOx4e0f5T43Apw2ENvEBXzPF5ukDOYQHHd+TesgBWV8R/FkOLseuO1cIIOa/SB4wajpphIuow6G7aKwZQw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740570044; c=relaxed/simple; bh=ClYm6cbQqyX0JpAqY8whR/FFUBrkwCmdlj1N+8SItsg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nwLN4pXKIEae47rtWUHGyZLHZIUBmcOzFIIa5gN9HFxuwRtDD6Y2rMjmjvSSq2ubVVd3QYxqp2H7XJUryRj+6pB+W/PRiUnMrFdelq3fWrgQ58aAv8gh2lCJz6sZ0rrGpAtLm1rgSzVXkyeUOiT8TCRLdPNZsQnQLSkPoznBrjI= 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=ZZskVEL4; arc=none smtp.client-ip=209.85.218.49 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="ZZskVEL4" Received: by mail-ej1-f49.google.com with SMTP id a640c23a62f3a-abbae92be71so732348166b.2 for ; Wed, 26 Feb 2025 03:40:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740570039; x=1741174839; 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=PL5SI83UJTbPXLKlQ3hxjCmTfTXlIzKEVpKcOTSPXkI=; b=ZZskVEL4L3T33jsR/Z76zO/RLvi5MOuUCJH+9giC4K0Z2FFwRrhO62AYZ/vc/Jy/9U CofBFgUMGs2lWdTVumdSb8KI5twp2+b0GOHTgnr6cf+jbfnvNb1Bx7VhB/FwifFzJfbH wPbbf/8JXKnjnpMxD5Qp/kMni+68bhSQE8fKOPwihbUbyIfkd+AQ9iqHLxDBvmYnr0W5 Jmcro1PB7hTIBomB3x0Eoxw60Uz7fukuD3DOSjYmUjTiUtF6R7GqrDBPDs9rYQ9KrdPj kxlhRtOjiCXxDVQeqHn76DwxmgdbJnNxD4sA2hUlzpO0oazvlfc0cp6Xrp9O7gImRQkj Y0qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740570039; x=1741174839; 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=PL5SI83UJTbPXLKlQ3hxjCmTfTXlIzKEVpKcOTSPXkI=; b=usuUekAM3KdPU2a/CwJ75KBzU/yBFndMOPqCtHm40wzwyijjxTZNIsfGtWAKhc48Zj 8DiTSHmZ2Ya1bKYW75VKmLtwdyFkuxjVyoTMJ1kcti2hxG5GwiRaHge435ozC8lPX5eR 1yi4KyiZT/WSLU1phn2KPfpHxfFK/pDows3Ou6APnRArPESbX9MSqKInrwR2/w7P82f8 rwWjC1P3DML2k/BFx3Yo0mTJ1UNFzgZ8r4iaeqKmpQbXdkwBOqiIPhz5KkQDP9qiheTa TF8131XvLJMfRvjFXM0W30pH3JD5YvfcOhXxMKJCGgMb2cXO02/l2oyNclKmXRn/A5rE 8r1A== X-Gm-Message-State: AOJu0YwINS9fd9/EJBFbswJk37T5PG1Co4W0fpZ4dj6K8EzuQNJAju7w TOfSy0VhTo9eki2I+/Pr2zyaEd6osj8rw7rcgDTnvsoZq5u0HdPZF2/3SA== X-Gm-Gg: ASbGncvBHJqxgh9KJ9XKdCoBA3qjFf4IpUMXK9VkhhYWhqPfa4xBWFyOY0SNljklzSu 0fiWDDXmljnfFkxw3YDaUnTTvFa8RcC4KtXRyfWGqwsmhw8Quv3JSTBY8R9Rj30LjJgHBUCfMKR NLa+0pqK0ISzmCka0XenCVs8gCIIuaX999oWknopwQCA0zx8dkvFhvdtbm6yrs57jKWb2LnSGFm 1ZHWcZR7upJr2lO+QF1dXQbZlSO29tcLfUTHpFGIG2x5RhHuQyfUbRYkdJ1/0EdAs42EamQgXej U+wm41GpZKOAtilvoPjZBVxQXv/s X-Google-Smtp-Source: AGHT+IGKCq8m3lak+yXKDeSGpcY5VuJ1aruejcye2OkblPMK330FSDcoAivvX/kQg/swZzBz+PX/ew== X-Received: by 2002:a05:6402:35d4:b0:5dc:6e27:e6e8 with SMTP id 4fb4d7f45d1cf-5e44a256a84mr16885209a12.24.1740570038907; Wed, 26 Feb 2025 03:40:38 -0800 (PST) Received: from 127.com ([2620:10d:c092:600::1:7b07]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5e45b80b935sm2692418a12.41.2025.02.26.03.40.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Feb 2025 03:40:38 -0800 (PST) From: Pavel Begunkov To: io-uring@vger.kernel.org Cc: asml.silence@gmail.com Subject: [PATCH 4/7] io_uring/net: verify msghdr before copying iovec Date: Wed, 26 Feb 2025 11:41:18 +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 Normally, net/ would verify msghdr before importing iovec, for example see copy_msghdr_from_user(), which further assumed by __copy_msghdr() validating msg->msg_iovlen. io_uring does it in reverse order, which is fine, but it'll be more convenient for flip it so that the iovec business is done at the end and eventually can be nicely pulled out of msghdr parsing section and thought as a sepaarate step. That also makes structure accesses more localised, which should be better for caches. Signed-off-by: Pavel Begunkov --- io_uring/net.c | 43 ++++++++++++++++++------------------------- 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/io_uring/net.c b/io_uring/net.c index 67d768e6ecdd..14eeebfd8a5a 100644 --- a/io_uring/net.c +++ b/io_uring/net.c @@ -195,7 +195,8 @@ static inline void io_mshot_prep_retry(struct io_kiocb *req, #ifdef CONFIG_COMPAT static int io_compat_msg_copy_hdr(struct io_kiocb *req, struct io_async_msghdr *iomsg, - struct compat_msghdr *msg, int ddir) + struct compat_msghdr *msg, int ddir, + struct sockaddr __user **save_addr) { struct io_sr_msg *sr = io_kiocb_to_cmd(req, struct io_sr_msg); struct compat_iovec __user *uiov; @@ -213,6 +214,10 @@ static int io_compat_msg_copy_hdr(struct io_kiocb *req, if (copy_from_user(msg, sr->umsg_compat, sizeof(*msg))) return -EFAULT; + ret = __get_compat_msghdr(&iomsg->msg, msg, save_addr); + if (ret) + return ret; + uiov = compat_ptr(msg->msg_iov); if (req->flags & REQ_F_BUFFER_SELECT) { if (msg->msg_iovlen == 0) { @@ -262,7 +267,8 @@ static int io_copy_msghdr_from_user(struct user_msghdr *msg, } static int io_msg_copy_hdr(struct io_kiocb *req, struct io_async_msghdr *iomsg, - struct user_msghdr *msg, int ddir) + struct user_msghdr *msg, int ddir, + struct sockaddr __user **save_addr) { struct io_sr_msg *sr = io_kiocb_to_cmd(req, struct io_sr_msg); struct user_msghdr __user *umsg = sr->umsg; @@ -283,6 +289,10 @@ static int io_msg_copy_hdr(struct io_kiocb *req, struct io_async_msghdr *iomsg, msg->msg_flags = 0; + ret = __copy_msghdr(&iomsg->msg, msg, save_addr); + if (ret) + return ret; + if (req->flags & REQ_F_BUFFER_SELECT) { if (msg->msg_iovlen == 0) { sr->len = iov->iov_len = 0; @@ -322,22 +332,14 @@ static int io_sendmsg_copy_hdr(struct io_kiocb *req, if (io_is_compat(req->ctx)) { struct compat_msghdr cmsg; - ret = io_compat_msg_copy_hdr(req, iomsg, &cmsg, ITER_SOURCE); - if (unlikely(ret)) - return ret; - - ret = __get_compat_msghdr(&iomsg->msg, &cmsg, NULL); + ret = io_compat_msg_copy_hdr(req, iomsg, &cmsg, ITER_SOURCE, + NULL); sr->msg_control = iomsg->msg.msg_control_user; return ret; } #endif - ret = io_msg_copy_hdr(req, iomsg, &msg, ITER_SOURCE); - if (unlikely(ret)) - return ret; - - ret = __copy_msghdr(&iomsg->msg, &msg, NULL); - + ret = io_msg_copy_hdr(req, iomsg, &msg, ITER_SOURCE, NULL); /* save msg_control as sys_sendmsg() overwrites it */ sr->msg_control = iomsg->msg.msg_control_user; return ret; @@ -719,27 +721,18 @@ static int io_recvmsg_copy_hdr(struct io_kiocb *req, if (io_is_compat(req->ctx)) { struct compat_msghdr cmsg; - ret = io_compat_msg_copy_hdr(req, iomsg, &cmsg, ITER_DEST); + ret = io_compat_msg_copy_hdr(req, iomsg, &cmsg, ITER_DEST, + &iomsg->uaddr); if (unlikely(ret)) return ret; - - ret = __get_compat_msghdr(&iomsg->msg, &cmsg, &iomsg->uaddr); - if (unlikely(ret)) - return ret; - return io_recvmsg_mshot_prep(req, iomsg, cmsg.msg_namelen, cmsg.msg_controllen); } #endif - ret = io_msg_copy_hdr(req, iomsg, &msg, ITER_DEST); + ret = io_msg_copy_hdr(req, iomsg, &msg, ITER_DEST, &iomsg->uaddr); if (unlikely(ret)) return ret; - - ret = __copy_msghdr(&iomsg->msg, &msg, &iomsg->uaddr); - if (unlikely(ret)) - return ret; - return io_recvmsg_mshot_prep(req, iomsg, msg.msg_namelen, msg.msg_controllen); } From patchwork Wed Feb 26 11:41:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Begunkov X-Patchwork-Id: 13992115 Received: from mail-ed1-f46.google.com (mail-ed1-f46.google.com [209.85.208.46]) (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 5CCFD216380 for ; Wed, 26 Feb 2025 11:40:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740570044; cv=none; b=JMIWJ6GTBp6W6uBZ1fto3h+IJj4UxtC9I5YT934WPKSepzv4xHH6OD/rPCGo693nqDCYgeoC4Zc9zas4FqxI5m0/E59WxRGMG4k5eL9M34G1hsyzjyvxvpnRt5kF1gBHzPAWpR6wiVgGMix8DcsYpN7VnEYlpteVCabCPnLO0b0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740570044; c=relaxed/simple; bh=ZjqhMIKWojNH1Fw5h0ut7wxl/cVzvmR5RoeB+laF98k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hKrgLP2PreNpc0mD4MtTiIk5p9dhLyzSAGwXEhK1k8nWN0EsSwxcUJAGfm6maK/+GHQwa20PukXE+Q0P1S8869gRVnDt+Plt9LSTFSf4Q3PVHAsYNC9RgC/lfTrIjGwP1gMzidYLI7EV+GxEqRvw1Ocjf0vPMO7GRWd3PBNjjFo= 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=C0HsjIJ0; arc=none smtp.client-ip=209.85.208.46 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="C0HsjIJ0" Received: by mail-ed1-f46.google.com with SMTP id 4fb4d7f45d1cf-5e05717755bso10164644a12.0 for ; Wed, 26 Feb 2025 03:40:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740570040; x=1741174840; 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=d2FjhbDI3XS7khyxUO37XmaPy8jPaHgTcWcgyeR3Bjo=; b=C0HsjIJ0MDRnWtjc8WcLv5v+YdlVtHEWGUt+zSAHdnhlFIlBGqh4O+VS5LSv/PWlgI K3vvfx6iZaDIvd7ZQCT/wP3bJL1hbYkgnGqn3YT3rjR1xWotnTCx1F0f2LiCwZRATDnO SpJbcd9lUs9A8dJUyJA4V92Izy0oOrc14o+/8nsyvDC+G14V6TSlzSsTzTaYBbOYYWbu Asr3xDootklHzRtDvYXYzwMyj2IAyvpSxX6munElF6YXZWafmvLKrzoN9dxrTCb0jHUe cfU88YOA0U7+nxi1CJnHPi96ronblAaJqwCKFLbFckAdM+NPOeS9nYorLPuUZHMf+k0T ZtBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740570040; x=1741174840; 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=d2FjhbDI3XS7khyxUO37XmaPy8jPaHgTcWcgyeR3Bjo=; b=j3JVCDl7GH4nCJFV/OJpL7CZcVaPkVhpNr47wwO/4GZDgMjoTUkkaxbD7Ah9dphsw/ sWpT7LNZmlRnYG7SLj0cl0+xghsFdesp3KnV2XU2FI88fj1aKOBsaGqzhyxSJqIxYEHt wBjJFCDptBRfMB4OTKTJje0uZOG9pyuaZOLsy065lur0tzVu/yN9idSDTp9R+mBQ9O2R G03kYf3nGdGxDmR6ky0NbJn7LnowZsQbHtxZQGobOrqIdThs/WnypDDp2iCuY7A9QfQe ZOAS2HBvDFCFb3TaBrRgg1co2VB0Z53BpU2RM++20TpcOAA9UlyZ1/PoiXGPoOcUtWZ4 Gy6A== X-Gm-Message-State: AOJu0YxNEOGNlX7c43+DQx5XFOZjg8Qjygg8Rc6lUHXm7Gowe6qm+PJs fYXQZOiQ+/laVlUSwBDn2pMsEWjgR5u+yaAglhE1K1QyIC768FF3W5s8dg== X-Gm-Gg: ASbGncvlnvmrcfniLB+7Qh5OOOA26jCEe3ATi2W4QD2w8ldByOsdQiHwoBkhkk2O8E+ YEXuV3TBLur5sLMP/WoZJqh8J5khcrHOc+3XSzu+d+DkE9zQZbwbc376o/Za3mRZ5RcYOcop2Gr +DYkq1Ro7Ic0G5vwtJwPKOhmA1R/IvfKq5d6TTZfprlZjRqfeqW6MMWwZV5TPJCApnAb+YV24+9 QkUr9LVDyYHPrQNYm+HWB5PSe297m1UE9p2ol626vw8e4CqAnIeGZJSty6EjsXdLZGbmxkib4UF Kba6tAE4QA== X-Google-Smtp-Source: AGHT+IFe1iy3YKe9l4rfiHeXdmiRwkwkQM1EwKgD0AuAXULvyCOXnxOMnUxDgEqv1vihvAMjxzhpaw== X-Received: by 2002:a05:6402:1e96:b0:5de:dff7:7d8f with SMTP id 4fb4d7f45d1cf-5e4469dd8b9mr9219072a12.18.1740570040104; Wed, 26 Feb 2025 03:40:40 -0800 (PST) Received: from 127.com ([2620:10d:c092:600::1:7b07]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5e45b80b935sm2692418a12.41.2025.02.26.03.40.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Feb 2025 03:40:39 -0800 (PST) From: Pavel Begunkov To: io-uring@vger.kernel.org Cc: asml.silence@gmail.com Subject: [PATCH 5/7] io_uring/net: derive iovec storage later Date: Wed, 26 Feb 2025 11:41:19 +0000 Message-ID: <8bfa7d74c33e37860a724f4e0e96660c25cd4c02.1740569495.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 Don't read free_iov until right before we need it to import the iovec. The only place that uses it before that is provided buffer selection, but it only serves as temporary storage and iovec content is not reused afterwards, so use a local variable for that. Signed-off-by: Pavel Begunkov --- io_uring/net.c | 43 +++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/io_uring/net.c b/io_uring/net.c index 14eeebfd8a5a..8a9ec4783a2b 100644 --- a/io_uring/net.c +++ b/io_uring/net.c @@ -203,14 +203,6 @@ static int io_compat_msg_copy_hdr(struct io_kiocb *req, struct iovec *iov; int ret, nr_segs; - if (iomsg->free_iov) { - nr_segs = iomsg->free_iov_nr; - iov = iomsg->free_iov; - } else { - iov = &iomsg->fast_iov; - nr_segs = 1; - } - if (copy_from_user(msg, sr->umsg_compat, sizeof(*msg))) return -EFAULT; @@ -221,8 +213,7 @@ static int io_compat_msg_copy_hdr(struct io_kiocb *req, uiov = compat_ptr(msg->msg_iov); if (req->flags & REQ_F_BUFFER_SELECT) { if (msg->msg_iovlen == 0) { - sr->len = iov->iov_len = 0; - iov->iov_base = NULL; + sr->len = 0; } else if (msg->msg_iovlen > 1) { return -EINVAL; } else { @@ -238,6 +229,14 @@ static int io_compat_msg_copy_hdr(struct io_kiocb *req, return 0; } + if (iomsg->free_iov) { + nr_segs = iomsg->free_iov_nr; + iov = iomsg->free_iov; + } else { + iov = &iomsg->fast_iov; + nr_segs = 1; + } + ret = __import_iovec(ddir, (struct iovec __user *)uiov, msg->msg_iovlen, nr_segs, &iov, &iomsg->msg.msg_iter, true); if (unlikely(ret < 0)) @@ -275,14 +274,6 @@ static int io_msg_copy_hdr(struct io_kiocb *req, struct io_async_msghdr *iomsg, struct iovec *iov; int ret, nr_segs; - if (iomsg->free_iov) { - nr_segs = iomsg->free_iov_nr; - iov = iomsg->free_iov; - } else { - iov = &iomsg->fast_iov; - nr_segs = 1; - } - ret = io_copy_msghdr_from_user(msg, umsg); if (unlikely(ret)) return ret; @@ -295,20 +286,28 @@ static int io_msg_copy_hdr(struct io_kiocb *req, struct io_async_msghdr *iomsg, if (req->flags & REQ_F_BUFFER_SELECT) { if (msg->msg_iovlen == 0) { - sr->len = iov->iov_len = 0; - iov->iov_base = NULL; + sr->len = 0; } else if (msg->msg_iovlen > 1) { return -EINVAL; } else { struct iovec __user *uiov = msg->msg_iov; + struct iovec tmp_iov; - if (copy_from_user(iov, uiov, sizeof(*iov))) + if (copy_from_user(&tmp_iov, uiov, sizeof(tmp_iov))) return -EFAULT; - sr->len = iov->iov_len; + sr->len = tmp_iov.iov_len; } return 0; } + if (iomsg->free_iov) { + nr_segs = iomsg->free_iov_nr; + iov = iomsg->free_iov; + } else { + iov = &iomsg->fast_iov; + nr_segs = 1; + } + ret = __import_iovec(ddir, msg->msg_iov, msg->msg_iovlen, nr_segs, &iov, &iomsg->msg.msg_iter, false); if (unlikely(ret < 0)) From patchwork Wed Feb 26 11:41:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Begunkov X-Patchwork-Id: 13992117 Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.50]) (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 A35CD17BB35 for ; Wed, 26 Feb 2025 11:40:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740570045; cv=none; b=sI8LORov4OEHI6aECVLUXLD6ypfRMUZqUiguck1Lvcwq3C4Hr7ErVvRAk+Au+NCE7zFDeVhFKDdMowqezjSMY1U6OOPJBWCJEhCPkvbJ6k6U3bmYpoqnPWrj+wsTGOshON5EHBOAj1Qfd2Jxj4SWO/npcw0QW4mn7+ValNZvQeg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740570045; c=relaxed/simple; bh=kdqId0mP8jeHPu8z0z587kbx+n+rMncOGELARTQSY08=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IuIujDCxEkh51R1wnaSvuCoRphP1+SNIhxM9UO3fb8frnszcCNgsKjT39LRFtgWo++Vko+3KPifXf1QEWTE2DgprA3TJkbP7qj/WfyqH0gZ5VFd7VRq227KzDBVbPBA2RYs72O4l7vPSh6gimxU3jdnzzFkizcLjiKdUv/0NN0E= 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=YUKHf85G; arc=none smtp.client-ip=209.85.208.50 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="YUKHf85G" Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-5debbced002so1473000a12.1 for ; Wed, 26 Feb 2025 03:40:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740570041; x=1741174841; 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=z8uwK6v+DsppZ0r8tWopdQYtvh9gO1Hb9aYAqj3+BIw=; b=YUKHf85G/TGI6IjJZjBsqhZ3GrvlFwxQjidRbxxA6nXHUPfVq3bV/MP5QPS8v/xe0C oEK631xJT9LRciR1YIH0PQ1+8kqBrH5R2KpnYzGujApi1SVzKJpFcGdAcCrsAjwQl7Ni VvCzMCnASKQMYGIlbuljwc/SugQ4NQSoIWJPKyslLPZgpAEjf97B0K0anjnsxY37aTfj pS6HObjIeT76BPYMpQQfzfJwYmXA7v4vsBJewrIByCx7rjrmIi9fuv0koQtDgbvCsbhw kcmc9gnkn1VlGmonRSSh0kLTyB4stU9JdvssVMrf9S3adT/tl9XvxVhZR8JsHNqV0WEd 734Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740570041; x=1741174841; 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=z8uwK6v+DsppZ0r8tWopdQYtvh9gO1Hb9aYAqj3+BIw=; b=cQ0bsM/9ScsyQNnemSZX8dbx0Agkgmg6rz7oAVe3/44gUIkEEq8nMuhVc0pavITxJG 89/409jrs9OSiA5cr3XXiR2aY5NpAAihNAQC0RSDIj+4KKQaKD5iCgYEpgyyR6+HBies 6HePFqO+PDCLqgVp4YOLH2iG4sGG9Nl9nFk7snzjd+LDovXUlg0XvlNu7yYVQBEUXSco Lvbtuhzhl4szW1qJifBkO48YYkTmj9IJ5SPb01qlQk040gIiF9Vn0hYZlACx+c1aW7Dp bLHdseeuwpM/ocHVNNPljqwT6fHOttD4ezNpWUpyYjH7QxW9z+meagaw5UltF31zy5l+ ZpJg== X-Gm-Message-State: AOJu0Yxe4dSwGsDZayjDUOP/5Hzx7vAQzel5D4WmlnP1TKNfarz3ytGc VCu6DvDovYO5Of+eYxJC4rSHCs4vunUV3yJgSM1DkSEmL8P5nJWeqg7EQA== X-Gm-Gg: ASbGnctcv1MDZ7ELBYCXpAzFbryFkOKY2N8mdvc3es/PTqEge8j0vLzGwvadiF9wg6D fHmzIQJC3f1AGa+pRpmnn1XN/XGsnRhqdLVjaRGmw+HmcZE4F91V5wVqdtkSBpwM7MkeubgvzCo bMNCcMtZzMcwooXSfhqH4IxItl2WFJKwD1A36YjP04330R9lbtFCLdohWECv2Rd+a+e1EQ9Vv35 Kil6tAQO/iJkD5dl/bJwO6gNOjTF81KyXDYr40+u8TjKlsUIgBvM84ix6Orx234+72wliXbQNPT YcF3exjOdQ== X-Google-Smtp-Source: AGHT+IGW6DIYt+ms97jTAtciWBDJO30HBhTQKoSe1Oz0P5hRVPrREsT7yfJUwwlqYl0/sIZQG7cvjQ== X-Received: by 2002:a05:6402:42c7:b0:5e0:8840:5032 with SMTP id 4fb4d7f45d1cf-5e0a11ffb02mr25271336a12.3.1740570041271; Wed, 26 Feb 2025 03:40:41 -0800 (PST) Received: from 127.com ([2620:10d:c092:600::1:7b07]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5e45b80b935sm2692418a12.41.2025.02.26.03.40.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Feb 2025 03:40:40 -0800 (PST) From: Pavel Begunkov To: io-uring@vger.kernel.org Cc: asml.silence@gmail.com Subject: [PATCH 6/7] io_uring/net: unify *mshot_prep calls with compat Date: Wed, 26 Feb 2025 11:41:20 +0000 Message-ID: <94e62386dec570f83b4a4270a46ac60bc415fb71.1740569495.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 Instead of duplicating a io_recvmsg_mshot_prep() call in the compat path, let the common code handle it. For that, copy necessary compat fields into struct user_msghdr. Note, it zeroes user_msghdr to be on the safe side as compat is not that interesting and overhead shouldn't be high. Signed-off-by: Pavel Begunkov --- io_uring/net.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/io_uring/net.c b/io_uring/net.c index 8a9ec4783a2b..de2d6bd44ef0 100644 --- a/io_uring/net.c +++ b/io_uring/net.c @@ -716,20 +716,20 @@ static int io_recvmsg_copy_hdr(struct io_kiocb *req, iomsg->msg.msg_name = &iomsg->addr; iomsg->msg.msg_iter.nr_segs = 0; -#ifdef CONFIG_COMPAT if (io_is_compat(req->ctx)) { +#ifdef CONFIG_COMPAT struct compat_msghdr cmsg; ret = io_compat_msg_copy_hdr(req, iomsg, &cmsg, ITER_DEST, &iomsg->uaddr); - if (unlikely(ret)) - return ret; - return io_recvmsg_mshot_prep(req, iomsg, cmsg.msg_namelen, - cmsg.msg_controllen); - } + memset(&msg, 0, sizeof(msg)); + msg.msg_namelen = cmsg.msg_namelen; + msg.msg_controllen = cmsg.msg_controllen; #endif + } else { + ret = io_msg_copy_hdr(req, iomsg, &msg, ITER_DEST, &iomsg->uaddr); + } - ret = io_msg_copy_hdr(req, iomsg, &msg, ITER_DEST, &iomsg->uaddr); if (unlikely(ret)) return ret; return io_recvmsg_mshot_prep(req, iomsg, msg.msg_namelen, From patchwork Wed Feb 26 11:41:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Begunkov X-Patchwork-Id: 13992118 Received: from mail-ed1-f54.google.com (mail-ed1-f54.google.com [209.85.208.54]) (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 738762153F0 for ; Wed, 26 Feb 2025 11:40:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740570048; cv=none; b=devLdtTGy1qb/btQHEiUr4wE/9ap/JJfjdAqzZgnxgAIhivdWNCrYyHH/la2cQbMOqU5o4clCHWc2tSKt1VIshh63Av1CYJatak0wLx7yTdSLLaOHVLAGDSjtM4Ch+bVeWOW7bh/vziQ0Wdb1qm2XnxoB24myRixaJRL7WcfNvc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740570048; c=relaxed/simple; bh=K5wqmtjAIu1Q8YZOIlGwSGOozfn6OjTt8K3q2ZLDtzo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=M30iRGPXUvNGwzaoyLurk/1O9MzBdA5QZgZtzkZU7GRy4naWKsf1fHl7EsRJNBQJW1ARkj+KloDgFXSwduR8ewd+grExxJiW6Tjrkn9UvuWlq/IWUENgc4C0PPNto5KS8dMt7BAs1kH2j6SFZHqayMadrP+dS1cGIufya4XyU+0= 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=iwrqWEqY; arc=none smtp.client-ip=209.85.208.54 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="iwrqWEqY" Received: by mail-ed1-f54.google.com with SMTP id 4fb4d7f45d1cf-5deb1266031so12185504a12.2 for ; Wed, 26 Feb 2025 03:40:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740570043; x=1741174843; 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=AY/GD7BWTRCQXLBYMXkRaYEXNHAXYnnP2VHqb/Vhtds=; b=iwrqWEqYjbhlKrJqM4JVN8+4JmTfr3qfK+s1xEDfo9aulyiOTwDrhXYFR0OQDw1Eeu uAPSJKlXqNaaljDu9QfRtV7T9Ngpg81IfxF1n7fVTzS4uxGVwmbYrAfLcTejw7rjVcvV jaQj+MdT51X3eR+8hQY1LDU7ghIqyWVMAXO2Asue8+Kwq9ykCNwTXbURpC8r93IJDPiG lUBbh14XOG5WIUi0Gix1z/yeS4FTKX+NTCKRDDMcgY85vtfL8ZxlXLkQv7N8Zd1nhh4F vW0ZWUk9iwou+Ny3bAFvIPOf+ggWMlmG9NWFqhbXxY29VNa2cnkduls7LlRS2Nng4+T4 7NCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740570043; x=1741174843; 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=AY/GD7BWTRCQXLBYMXkRaYEXNHAXYnnP2VHqb/Vhtds=; b=cLT+3AJ6zNuNLuQbhoEOHCotTJo58WQjgYbzRijmCu3zZR4BjZks/Ck129T4WNTSGS Z4XkVwjJDF1ZibevN8z7vyzpKVlLF2sttgtnJkMjiViZNK/rOHx+J/kkaXXn8FJDAWzl 2T4/SPbBIzspheXcJvVkkSUowjfbAEgtxPjlEoE7bCPcghlTB7POXx4ONbYWYQngSHBN yOlCBhYfTRicAUPhP4VGvmjECPvwwPWwBL4YJey776e6KbYQI6b06dpf2jnEkqTJVXZa KTAd3GPmL8nw3u6hUv5lCDVkat/w9RitAmP8mBf1ZRDfWLkennWGurGCqzDvlozwTQ5V 1D0g== X-Gm-Message-State: AOJu0YyHyZVsJ3AwwCSODSH+ThAwFg8w18i0v8c50amIH7MfZ2wFXk5g eeta9pOGn03t6ry3QlcDschEq7FgibzHPvfu99dfaZK9Ae8o4Ua4zOr3PQ== X-Gm-Gg: ASbGncvLaMDwzii6880wJx+/PWlNJUosjiTkGt3iUZxvpxOIbaoR86+2DXFwPjR135g FO5DKiTicz/4OzXBMcTtlC3qHRmuQ8mQJnyl361JwVVZ9bQkg2BzgM/Y3ZJefOiX+0L4OOOzEs7 TVnZFfqiBOn5KV/hCsJnicwJ4LtqH8RbAVe/X0VoO3Ux0gzcKyN2dd6ZFwxEETfXUd/a+P6e8Ym dKTn/D8p21fxR19wBvcxKsBd1uhRheE8dsGConkmWubG3VwC9eJ3iZReZByYopW1IRdiGOcliWq dINvE0SKfA== X-Google-Smtp-Source: AGHT+IEtMmUSLZ/lUbTw2llTTM5a3LvsgSq+V6tAAH957GCmzdrtEXwfvZ3n7eSWj02wXIMuRNmVcQ== X-Received: by 2002:a05:6402:518f:b0:5e0:51c0:701e with SMTP id 4fb4d7f45d1cf-5e0b7254f98mr21055638a12.32.1740570043245; Wed, 26 Feb 2025 03:40:43 -0800 (PST) Received: from 127.com ([2620:10d:c092:600::1:7b07]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5e45b80b935sm2692418a12.41.2025.02.26.03.40.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 26 Feb 2025 03:40:41 -0800 (PST) From: Pavel Begunkov To: io-uring@vger.kernel.org Cc: asml.silence@gmail.com Subject: [PATCH 7/7] io_uring/net: extract iovec import into a helper Date: Wed, 26 Feb 2025 11:41:21 +0000 Message-ID: <6a5f8c526f6732c4249a7fa0213b49e1a3ecccf0.1740569495.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 Deduplicate iovec imports between compat and !compat by introducing a helper function. Signed-off-by: Pavel Begunkov --- io_uring/net.c | 62 +++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 34 deletions(-) diff --git a/io_uring/net.c b/io_uring/net.c index de2d6bd44ef0..da6c828b9985 100644 --- a/io_uring/net.c +++ b/io_uring/net.c @@ -192,6 +192,29 @@ static inline void io_mshot_prep_retry(struct io_kiocb *req, req->buf_index = sr->buf_group; } +static int io_net_import_vec(struct io_kiocb *req, struct io_async_msghdr *iomsg, + const struct iovec __user *uiov, unsigned uvec_seg, + int ddir) +{ + struct iovec *iov; + int ret, nr_segs; + + if (iomsg->free_iov) { + nr_segs = iomsg->free_iov_nr; + iov = iomsg->free_iov; + } else { + nr_segs = 1; + iov = &iomsg->fast_iov; + } + + ret = __import_iovec(ddir, uiov, uvec_seg, nr_segs, &iov, + &iomsg->msg.msg_iter, io_is_compat(req->ctx)); + if (unlikely(ret < 0)) + return ret; + io_net_vec_assign(req, iomsg, iov); + return 0; +} + #ifdef CONFIG_COMPAT static int io_compat_msg_copy_hdr(struct io_kiocb *req, struct io_async_msghdr *iomsg, @@ -200,8 +223,7 @@ static int io_compat_msg_copy_hdr(struct io_kiocb *req, { struct io_sr_msg *sr = io_kiocb_to_cmd(req, struct io_sr_msg); struct compat_iovec __user *uiov; - struct iovec *iov; - int ret, nr_segs; + int ret; if (copy_from_user(msg, sr->umsg_compat, sizeof(*msg))) return -EFAULT; @@ -229,21 +251,8 @@ static int io_compat_msg_copy_hdr(struct io_kiocb *req, return 0; } - if (iomsg->free_iov) { - nr_segs = iomsg->free_iov_nr; - iov = iomsg->free_iov; - } else { - iov = &iomsg->fast_iov; - nr_segs = 1; - } - - ret = __import_iovec(ddir, (struct iovec __user *)uiov, msg->msg_iovlen, - nr_segs, &iov, &iomsg->msg.msg_iter, true); - if (unlikely(ret < 0)) - return ret; - - io_net_vec_assign(req, iomsg, iov); - return 0; + return io_net_import_vec(req, iomsg, (struct iovec __user *)uiov, + msg->msg_iovlen, ddir); } #endif @@ -271,8 +280,7 @@ static int io_msg_copy_hdr(struct io_kiocb *req, struct io_async_msghdr *iomsg, { struct io_sr_msg *sr = io_kiocb_to_cmd(req, struct io_sr_msg); struct user_msghdr __user *umsg = sr->umsg; - struct iovec *iov; - int ret, nr_segs; + int ret; ret = io_copy_msghdr_from_user(msg, umsg); if (unlikely(ret)) @@ -300,21 +308,7 @@ static int io_msg_copy_hdr(struct io_kiocb *req, struct io_async_msghdr *iomsg, return 0; } - if (iomsg->free_iov) { - nr_segs = iomsg->free_iov_nr; - iov = iomsg->free_iov; - } else { - iov = &iomsg->fast_iov; - nr_segs = 1; - } - - ret = __import_iovec(ddir, msg->msg_iov, msg->msg_iovlen, nr_segs, - &iov, &iomsg->msg.msg_iter, false); - if (unlikely(ret < 0)) - return ret; - - io_net_vec_assign(req, iomsg, iov); - return 0; + return io_net_import_vec(req, iomsg, msg->msg_iov, msg->msg_iovlen, ddir); } static int io_sendmsg_copy_hdr(struct io_kiocb *req,