Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
  • Register
  • Sign in
  • L linux
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • Deployments
    • Deployments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Commits
  • Issue Boards
Collapse sidebar
  • Kirill Smelkov
  • linux
  • Repository
You need to sign in or sign up before continuing.
  • linux
  • rust
  • kernel
  • types.rs
Find file BlameHistoryPermalink
  • Alice Ryhl's avatar
    rust: uaccess: add typed accessors for userspace pointers · b33bf37a
    Alice Ryhl authored May 28, 2024
    
    
    Add safe methods for reading and writing Rust values to and from
    userspace pointers.
    
    The C methods for copying to/from userspace use a function called
    `check_object_size` to verify that the kernel pointer is not dangling.
    However, this check is skipped when the length is a compile-time
    constant, with the assumption that such cases trivially have a correct
    kernel pointer.
    
    In this patch, we apply the same optimization to the typed accessors.
    For both methods, the size of the operation is known at compile time to
    be size_of of the type being read or written. Since the C side doesn't
    provide a variant that skips only this check, we create custom helpers
    for this purpose.
    
    The majority of reads and writes to userspace pointers in the Rust
    Binder driver uses these accessor methods. Benchmarking has found that
    skipping the `check_object_size` check makes a big difference for the
    cases being skipped here. (And that the check doesn't make a difference
    for the cases that use the raw read/write methods.)
    
    This code is based on something that was originally written by Wedson on
    the old rust branch. It was modified by Alice to skip the
    `check_object_size` check, and to update various comments, including the
    notes about kernel pointers in `WritableToBytes`.
    
    Co-developed-by: default avatarWedson Almeida Filho <wedsonaf@gmail.com>
    Signed-off-by: default avatarWedson Almeida Filho <wedsonaf@gmail.com>
    Reviewed-by: default avatarBenno Lossin <benno.lossin@proton.me>
    Reviewed-by: default avatarBoqun Feng <boqun.feng@gmail.com>
    Reviewed-by: default avatarTrevor Gross <tmgross@umich.edu>
    Reviewed-by: default avatarGary Guo <gary@garyguo.net>
    Signed-off-by: default avatarAlice Ryhl <aliceryhl@google.com>
    Link: https://lore.kernel.org/r/20240528-alice-mm-v7-3-78222c31b8f4@google.com
    
    
    [ Wrapped docs to 100 and added a few intra-doc links. - Miguel ]
    Signed-off-by: default avatarMiguel Ojeda <ojeda@kernel.org>
    b33bf37a
GitLab Nexedi Edition | About GitLab | About Nexedi | 沪ICP备2021021310号-2 | 沪ICP备2021021310号-7