Merge patch series "File abstractions needed by Rust Binder"
authorChristian Brauner <brauner@kernel.org>
Mon, 30 Sep 2024 11:02:35 +0000 (13:02 +0200)
committerChristian Brauner <brauner@kernel.org>
Tue, 8 Oct 2024 12:32:22 +0000 (14:32 +0200)
Alice Ryhl <aliceryhl@google.com> says:

This patchset contains the file abstractions needed by the Rust
implementation of the Binder driver.

Please see the Rust Binder RFC for usage examples:
https://lore.kernel.org/rust-for-linux/20231101-rust-binder-v1-0-08ba9197f637@google.com

Users of "rust: types: add `NotThreadSafe`":
[PATCH 5/9] rust: file: add `FileDescriptorReservation`

Users of "rust: task: add `Task::current_raw`":
[PATCH 7/9] rust: file: add `Kuid` wrapper
[PATCH 8/9] rust: file: add `DeferredFdCloser`

Users of "rust: file: add Rust abstraction for `struct file`":
[PATCH RFC 02/20] rust_binder: add binderfs support to Rust binder
[PATCH RFC 03/20] rust_binder: add threading support

Users of "rust: cred: add Rust abstraction for `struct cred`":
[PATCH RFC 05/20] rust_binder: add nodes and context managers
[PATCH RFC 06/20] rust_binder: add oneway transactions
[PATCH RFC 11/20] rust_binder: send nodes in transaction
[PATCH RFC 13/20] rust_binder: add BINDER_TYPE_FD support

Users of "rust: security: add abstraction for secctx":
[PATCH RFC 06/20] rust_binder: add oneway transactions

Users of "rust: file: add `FileDescriptorReservation`":
[PATCH RFC 13/20] rust_binder: add BINDER_TYPE_FD support
[PATCH RFC 14/20] rust_binder: add BINDER_TYPE_FDA support

Users of "rust: file: add `Kuid` wrapper":
[PATCH RFC 05/20] rust_binder: add nodes and context managers
[PATCH RFC 06/20] rust_binder: add oneway transactions

Users of "rust: file: add abstraction for `poll_table`":
[PATCH RFC 07/20] rust_binder: add epoll support

This patchset has some uses of read_volatile in place of READ_ONCE.
Please see the following rfc for context on this:
https://lore.kernel.org/all/20231025195339.1431894-1-boqun.feng@gmail.com/

* patches from https://lore.kernel.org/r/20240915-alice-file-v10-0-88484f7a3dcf@google.com:
  rust: file: add abstraction for `poll_table`
  rust: file: add `Kuid` wrapper
  rust: file: add `FileDescriptorReservation`
  rust: security: add abstraction for secctx
  rust: cred: add Rust abstraction for `struct cred`
  rust: file: add Rust abstraction for `struct file`
  rust: task: add `Task::current_raw`
  rust: types: add `NotThreadSafe`

Link: https://lore.kernel.org/r/20240915-alice-file-v10-0-88484f7a3dcf@google.com
Signed-off-by: Christian Brauner <brauner@kernel.org>
1  2 
fs/file.c
rust/kernel/lib.rs

diff --cc fs/file.c
+++ b/fs/file.c
@@@ -1096,8 -1123,15 +1096,15 @@@ EXPORT_SYMBOL(task_lookup_next_fdget_rc
   *
   * The fput_needed flag returned by fget_light should be passed to the
   * corresponding fput_light.
+  *
+  * (As an exception to rule 2, you can call filp_close between fget_light and
+  * fput_light provided that you capture a real refcount with get_file before
+  * the call to filp_close, and ensure that this real refcount is fput *after*
+  * the fput_light call.)
+  *
+  * See also the documentation in rust/kernel/file.rs.
   */
 -static unsigned long __fget_light(unsigned int fd, fmode_t mask)
 +static inline struct fd __fget_light(unsigned int fd, fmode_t mask)
  {
        struct files_struct *files = current->files;
        struct file *file;
@@@ -45,7 -47,7 +47,8 @@@ pub mod page
  pub mod prelude;
  pub mod print;
  pub mod rbtree;
+ pub mod security;
 +pub mod sizes;
  mod static_assert;
  #[doc(hidden)]
  pub mod std_vendor;