OpenCloudOS-Kernel/rust/macros
Benno Lossin a4dec33d27 rust: macros: fix soundness issue in `module!` macro
[ Upstream commit 7044dcff8301b29269016ebd17df27c4736140d2 ]

The `module!` macro creates glue code that are called by C to initialize
the Rust modules using the `Module::init` function. Part of this glue
code are the local functions `__init` and `__exit` that are used to
initialize/destroy the Rust module.

These functions are safe and also visible to the Rust mod in which the
`module!` macro is invoked. This means that they can be called by other
safe Rust code. But since they contain `unsafe` blocks that rely on only
being called at the right time, this is a soundness issue.

Wrap these generated functions inside of two private modules, this
guarantees that the public functions cannot be called from the outside.
Make the safe functions `unsafe` and add SAFETY comments.

Cc: stable@vger.kernel.org
Reported-by: Björn Roy Baron <bjorn3_gh@protonmail.com>
Closes: https://github.com/Rust-for-Linux/linux/issues/629
Fixes: 1fbde52bde ("rust: add `macros` crate")
Signed-off-by: Benno Lossin <benno.lossin@proton.me>
Reviewed-by: Wedson Almeida Filho <walmeida@microsoft.com>
Link: https://lore.kernel.org/r/20240401185222.12015-1-benno.lossin@proton.me
[ Moved `THIS_MODULE` out of the private-in-private modules since it
  should remain public, as Dirk Behme noticed [1]. Capitalized comments,
  avoided newline in non-list SAFETY comments and reworded to add
  Reported-by and newline. ]
Link: https://rust-for-linux.zulipchat.com/#narrow/stream/291565-Help/topic/x/near/433512583 [1]
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-05-17 12:01:56 +02:00
..
concat_idents.rs
helpers.rs rust: macros: refactor generics parsing of `#[pin_data]` into its own function 2023-05-31 18:53:09 +02:00
lib.rs rust: remove `params` from `module` macro example 2024-05-02 16:32:42 +02:00
module.rs rust: macros: fix soundness issue in `module!` macro 2024-05-17 12:01:56 +02:00
paste.rs rust: macros: add `paste!` proc macro 2023-08-10 22:28:02 +02:00
pin_data.rs rust: macros: replace Self with the concrete type in #[pin_data] 2023-05-31 18:53:09 +02:00
pinned_drop.rs rust: init: add `PinnedDrop` trait and macros 2023-04-12 18:41:05 +02:00
quote.rs rust: add derive macro for `Zeroable` 2023-08-21 14:31:48 +02:00
vtable.rs rust: macros: vtable: fix `HAS_*` redefinition (`gen_const_name`) 2023-08-09 21:15:07 +02:00
zeroable.rs rust: add derive macro for `Zeroable` 2023-08-21 14:31:48 +02:00