All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Günther Noack" <gnoack@google.com>
To: Pavel Begunkov <asml.silence@gmail.com>
Cc: io-uring@vger.kernel.org, axboe@kernel.dk,
	Google Big Sleep
	<big-sleep-vuln-reports+bigsleep-458654612@google.com>
Subject: Re: [PATCH 1/1] io_uring: regbuf vector size truncation
Date: Fri, 7 Nov 2025 22:14:52 +0100	[thread overview]
Message-ID: <aQ5hTIBM0euPZGnD@google.com> (raw)
In-Reply-To: <11fbc25aecfd5dcb722a757dfe5d3f676391c955.1762540764.git.asml.silence@gmail.com>

On Fri, Nov 07, 2025 at 06:41:26PM +0000, Pavel Begunkov wrote:
> There is a report of io_estimate_bvec_size() truncating the calculated
> number of segments that leads to corruption issues. Check it doesn't
> overflow "int"s used later. Rough but simple, can be improved on top.
> 
> Cc: stable@vger.kernel.org
> Fixes: 9ef4cbbcb4ac3 ("io_uring: add infra for importing vectored reg buffers")
> Reported-by: Google Big Sleep <big-sleep-vuln-reports+bigsleep-458654612@google.com>
> Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
> ---
>  io_uring/rsrc.c | 11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c
> index 4053d104bf4c..a49dcbae11f0 100644
> --- a/io_uring/rsrc.c
> +++ b/io_uring/rsrc.c
> @@ -1405,8 +1405,11 @@ static int io_estimate_bvec_size(struct iovec *iov, unsigned nr_iovs,
>  	size_t max_segs = 0;
>  	unsigned i;
>  
> -	for (i = 0; i < nr_iovs; i++)
> +	for (i = 0; i < nr_iovs; i++) {
>  		max_segs += (iov[i].iov_len >> shift) + 2;
> +		if (max_segs > INT_MAX)
> +			return -EOVERFLOW;
> +	}
>  	return max_segs;
>  }
>  
> @@ -1512,7 +1515,11 @@ int io_import_reg_vec(int ddir, struct iov_iter *iter,
>  		if (unlikely(ret))
>  			return ret;
>  	} else {
> -		nr_segs = io_estimate_bvec_size(iov, nr_iovs, imu);
> +		int ret = io_estimate_bvec_size(iov, nr_iovs, imu);
> +
> +		if (ret < 0)
> +			return ret;
> +		nr_segs = ret;
>  	}
>  
>  	if (sizeof(struct bio_vec) > sizeof(struct iovec)) {
> -- 
> 2.49.0
> 

I reviewed the logic and the check looks correct,
and I tested that it works as expected.

(Minor remark: You might want to annotate the conditions as unlikely()?)

Reviewed-by: Günther Noack <gnoack@google.com>
Tested-by: Günther Noack <gnoack@google.com>

—Günther

  parent reply	other threads:[~2025-11-07 21:14 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-07 18:41 [PATCH 1/1] io_uring: regbuf vector size truncation Pavel Begunkov
2025-11-07 18:43 ` Pavel Begunkov
2025-11-07 21:14 ` Günther Noack [this message]
2025-11-10 12:19   ` Pavel Begunkov
2025-11-08  0:17 ` Jens Axboe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aQ5hTIBM0euPZGnD@google.com \
    --to=gnoack@google.com \
    --cc=asml.silence@gmail.com \
    --cc=axboe@kernel.dk \
    --cc=big-sleep-vuln-reports+bigsleep-458654612@google.com \
    --cc=io-uring@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.