summaryrefslogtreecommitdiffstats
path: root/rust/helpers/task.c
diff options
context:
space:
mode:
authorWedson Almeida Filho <wedsonaf@gmail.com>2024-09-15 14:31:32 +0000
committerChristian Brauner <brauner@kernel.org>2024-09-30 13:02:29 +0200
commit5da9857b127e9d78bb59b4950653e74a2f598529 (patch)
tree4d18ff2bbb0c1ae8902abc77b7530596d636a1a8 /rust/helpers/task.c
parent94d356c0335f95412575c4fa3954b48722359c8a (diff)
downloadlinux-5da9857b127e9d78bb59b4950653e74a2f598529.tar.gz
linux-5da9857b127e9d78bb59b4950653e74a2f598529.tar.bz2
linux-5da9857b127e9d78bb59b4950653e74a2f598529.zip
rust: file: add `FileDescriptorReservation`
Allow for the creation of a file descriptor in two steps: first, we reserve a slot for it, then we commit or drop the reservation. The first step may fail (e.g., the current process ran out of available slots), but commit and drop never fail (and are mutually exclusive). This is needed by Rust Binder when fds are sent from one process to another. It has to be a two-step process to properly handle the case where multiple fds are sent: The operation must fail or succeed atomically, which we achieve by first reserving the fds we need, and only installing the files once we have reserved enough fds to send the files. Fd reservations assume that the value of `current` does not change between the call to get_unused_fd_flags and the call to fd_install (or put_unused_fd). By not implementing the Send trait, this abstraction ensures that the `FileDescriptorReservation` cannot be moved into a different process. Signed-off-by: Wedson Almeida Filho <wedsonaf@gmail.com> Co-developed-by: Alice Ryhl <aliceryhl@google.com> Reviewed-by: Benno Lossin <benno.lossin@proton.me> Reviewed-by: Martin Rodriguez Reboredo <yakoyoku@gmail.com> Reviewed-by: Trevor Gross <tmgross@umich.edu> Reviewed-by: Gary Guo <gary@garyguo.net> Signed-off-by: Alice Ryhl <aliceryhl@google.com> Link: https://lore.kernel.org/r/20240915-alice-file-v10-6-88484f7a3dcf@google.com Signed-off-by: Christian Brauner <brauner@kernel.org>
Diffstat (limited to 'rust/helpers/task.c')
0 files changed, 0 insertions, 0 deletions