From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: Andreas Hindborg <a.hindborg@kernel.org>
Cc: "Alice Ryhl" <aliceryhl@google.com>,
"Alexander Viro" <viro@zeniv.linux.org.uk>,
"Arnd Bergmann" <arnd@arndb.de>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <benno.lossin@proton.me>,
"Trevor Gross" <tmgross@umich.edu>,
"Danilo Krummrich" <dakr@kernel.org>,
"Matthew Maurer" <mmaurer@google.com>,
"Lee Jones" <lee@kernel.org>,
linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org
Subject: Re: [PATCH 0/5] Rust support for `struct iov_iter`
Date: Wed, 19 Mar 2025 04:42:34 -0700 [thread overview]
Message-ID: <2025031928-connected-confider-dda5@gregkh> (raw)
In-Reply-To: <87wmclgttg.fsf@kernel.org>
On Wed, Mar 19, 2025 at 12:10:03PM +0100, Andreas Hindborg wrote:
> "Greg Kroah-Hartman" <gregkh@linuxfoundation.org> writes:
>
> > On Tue, Mar 18, 2025 at 09:57:55PM +0100, Andreas Hindborg wrote:
> >> "Greg Kroah-Hartman" <gregkh@linuxfoundation.org> writes:
> >>
> >> > On Tue, Mar 11, 2025 at 02:25:11PM +0000, Alice Ryhl wrote:
> >> >> This series adds support for the `struct iov_iter` type. This type
> >> >> represents an IO buffer for reading or writing, and can be configured
> >> >> for either direction of communication.
> >> >>
> >> >> In Rust, we define separate types for reading and writing. This will
> >> >> ensure that you cannot mix them up and e.g. call copy_from_iter in a
> >> >> read_iter syscall.
> >> >>
> >> >> To use the new abstractions, miscdevices are given new methods read_iter
> >> >> and write_iter that can be used to implement the read/write syscalls on
> >> >> a miscdevice. The miscdevice sample is updated to provide read/write
> >> >> operations.
> >> >
> >> > Nice, this is good to have, but what's the odds of tieing in the
> >> > "untrusted buffer" logic here so that all misc drivers HAVE to properly
> >> > validate the data sent to them before they can touch it:
> >> > https://lore.kernel.org/r/20240925205244.873020-1-benno.lossin@proton.me
> >> >
> >> > I'd like to force drivers to do this, otherwise it's just going to force
> >> > us to audit all paths from userspace->kernel that happen.
> >> >
> >>
> >> I think that for user backed iterators (`user_backed_iter(iter) != 0`)
> >> we will have the same problems as discussed in [1]. To validate, we
> >> would have to copy the data to another buffer and then validate it
> >> there, in a race free place. But the copying is apparently a problem.
> >
> > We already copy all data first, that's not an issue. Validate it after
> > it has been copied before you do something with it, just like we do
> > today for normal ioctl C code. Same goes for data coming from hardware,
> > it's already been copied into a buffer that you can use, no need to copy
> > it again, just "validate" it before using it.
>
> I guess that depends on the user of the `iov_iter`? At least when it is
> used for direct IO, the operation is zero copy with pages mapped into
> kernel and IO performed directly from those pages.
Great, and then, before you actually do something with that data, you
have to validate it that it is correct, right? If this is just a
"pass-through" then no need to do anything to it. But if you have to
inspect/act-on-it, then just inspect it in the verifier portion.
I'm not trying to add any additional overhead here, as you normally
would have to verify the data is correct before doing something with it,
but rather just forcing that validation to be done in an obvious place
where everyone can see that it is being done, or not being done.
In other words, make it obvious to reviewers that this is happening,
instead of forcing them to dig through code paths to hopefully find out
where it happens.
thanks,
greg k-h
next prev parent reply other threads:[~2025-03-19 11:43 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-11 14:25 [PATCH 0/5] Rust support for `struct iov_iter` Alice Ryhl
2025-03-11 14:25 ` [PATCH 1/5] rust: iov: add iov_iter abstractions for ITER_SOURCE Alice Ryhl
2025-03-18 20:10 ` Christian Schrefl
2025-03-19 12:08 ` Alice Ryhl
2025-03-19 18:33 ` Andreas Hindborg
2025-03-19 18:54 ` Andreas Hindborg
2025-03-22 21:00 ` Miguel Ojeda
2025-03-22 22:05 ` Andreas Hindborg
2025-03-11 14:25 ` [PATCH 2/5] rust: iov: add iov_iter abstractions for ITER_DEST Alice Ryhl
2025-03-18 20:13 ` Christian Schrefl
2025-03-19 19:14 ` Andreas Hindborg
2025-03-19 20:01 ` Christian Schrefl
2025-03-19 21:12 ` Benno Lossin
2025-03-11 14:25 ` [PATCH 3/5] rust: miscdevice: Provide additional abstractions for iov_iter and kiocb structures Alice Ryhl
2025-03-19 19:26 ` Andreas Hindborg
2025-03-19 20:16 ` Andreas Hindborg
2025-03-11 14:25 ` [PATCH 4/5] rust: alloc: add Vec::clear Alice Ryhl
2025-03-11 14:40 ` Danilo Krummrich
2025-03-12 7:05 ` Alice Ryhl
2025-03-19 19:38 ` Andreas Hindborg
2025-03-19 20:22 ` Tamir Duberstein
2025-03-11 14:25 ` [PATCH 5/5] samples: rust_misc_device: Expand the sample to support read()ing from userspace Alice Ryhl
2025-03-19 20:11 ` Andreas Hindborg
2025-03-11 14:37 ` [PATCH 0/5] Rust support for `struct iov_iter` Greg Kroah-Hartman
2025-03-12 2:16 ` Benno Lossin
2025-03-12 6:47 ` Greg Kroah-Hartman
2025-03-18 20:57 ` Andreas Hindborg
2025-03-18 23:34 ` Greg Kroah-Hartman
2025-03-19 11:10 ` Andreas Hindborg
2025-03-19 11:42 ` Greg Kroah-Hartman [this message]
2025-03-19 18:24 ` Andreas Hindborg
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=2025031928-connected-confider-dda5@gregkh \
--to=gregkh@linuxfoundation.org \
--cc=a.hindborg@kernel.org \
--cc=aliceryhl@google.com \
--cc=arnd@arndb.de \
--cc=benno.lossin@proton.me \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=dakr@kernel.org \
--cc=gary@garyguo.net \
--cc=lee@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mmaurer@google.com \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=tmgross@umich.edu \
--cc=viro@zeniv.linux.org.uk \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).