From: Zhi Wang <zhiw@nvidia.com>
To: Alice Ryhl <aliceryhl@google.com>
Cc: "Miguel Ojeda" <ojeda@kernel.org>,
"Boqun Feng" <boqun@kernel.org>, "Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Trevor Gross" <tmgross@umich.edu>,
"Danilo Krummrich" <dakr@kernel.org>,
"Daniel Almeida" <daniel.almeida@collabora.com>,
"Tamir Duberstein" <tamird@kernel.org>,
"Alexandre Courbot" <acourbot@nvidia.com>,
"Onur Özkan" <work@onurozkan.dev>,
"Dave Jiang" <dave.jiang@intel.com>,
"Jason Gunthorpe" <jgg@ziepe.ca>,
"Saeed Mahameed" <saeedm@nvidia.com>,
"Jonathan Cameron" <jic23@kernel.org>,
rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org,
"Sami Tolvanen" <samitolvanen@google.com>,
stable@vger.kernel.org
Subject: Re: [PATCH] rust: fwctl: declare cfi_encoding for fwctl_rpc_scope
Date: Tue, 20 Oct 2026 11:55:34 +0300 [thread overview]
Message-ID: <20261020115534.1134f2b3@inno-dell> (raw)
In-Reply-To: <20261020-fwctl-cfi-encoding-v1-1-ebb30d1500df@google.com>
On Tue, 20 Oct 2026 08:28:37 +0000
Alice Ryhl <aliceryhl@google.com> wrote:
> Currently, VTable::fw_rpc_callback() takes scope as a u32, whereas C
> calls fwctl_ops::fw_rpc with enum fwctl_rpc_scope. With kCFI enabled,
> enum types are encoded distinctly from integers, causing every fw_rpc
> indirect call into a Rust fwctl driver to trip a CFI failure. Thus,
> generate fwctl_rpc_scope as a newtype with a cfi_encoding attribute
> and use it in fw_rpc_callback().
>
Thanks for the fix. Looks good to me.
Reviewed-by: Zhi Wang <zhiw@nvidia.com>
BTW: I saw this “lru_status” needs the same treatment, guess bindgen
will someday automatically handle this?
Z.
> Cc: stable@vger.kernel.org
> Fixes: e052daab94ee ("rust: introduce abstractions for fwctl")
> Signed-off-by: Alice Ryhl <aliceryhl@google.com>
> ---
> rust/bindgen_parameters | 2 ++
> rust/kernel/fwctl.rs | 12 ++++++------
> 2 files changed, 8 insertions(+), 6 deletions(-)
>
> diff --git a/rust/bindgen_parameters b/rust/bindgen_parameters
> index 8402b0c93545..e4f8c07743a8 100644
> --- a/rust/bindgen_parameters
> +++ b/rust/bindgen_parameters
> @@ -27,6 +27,8 @@
> --opaque-type spinlock
>
> # enums that appear in indirect function calls should specify a cfi
> type +--newtype-enum fwctl_rpc_scope
> +--with-attribute-custom-enum=fwctl_rpc_scope='#[cfi_encoding="15fwctl_rpc_scope"]'
> --newtype-enum lru_status
> --with-attribute-custom-enum=lru_status='#[cfi_encoding="10lru_status"]'
>
> diff --git a/rust/kernel/fwctl.rs b/rust/kernel/fwctl.rs
> index f29244fb0d1d..b7778e4d5ee0 100644
> --- a/rust/kernel/fwctl.rs
> +++ b/rust/kernel/fwctl.rs
> @@ -53,13 +53,13 @@ pub enum DeviceType {
> #[derive(Copy, Clone, Debug, Eq, PartialEq)]
> pub enum RpcScope {
> /// Read/write access to device configuration.
> - Configuration =
> bindings::fwctl_rpc_scope_FWCTL_RPC_CONFIGURATION,
> + Configuration =
> bindings::fwctl_rpc_scope::FWCTL_RPC_CONFIGURATION.0, /// Read-only
> access to debug information.
> - DebugReadOnly =
> bindings::fwctl_rpc_scope_FWCTL_RPC_DEBUG_READ_ONLY,
> + DebugReadOnly =
> bindings::fwctl_rpc_scope::FWCTL_RPC_DEBUG_READ_ONLY.0, /// Write
> access to lockdown-compatible debug information.
> - DebugWrite = bindings::fwctl_rpc_scope_FWCTL_RPC_DEBUG_WRITE,
> + DebugWrite = bindings::fwctl_rpc_scope::FWCTL_RPC_DEBUG_WRITE.0,
> /// Full read/write access to all debug information (requires
> `CAP_SYS_RAWIO`).
> - DebugWriteFull =
> bindings::fwctl_rpc_scope_FWCTL_RPC_DEBUG_WRITE_FULL,
> + DebugWriteFull =
> bindings::fwctl_rpc_scope::FWCTL_RPC_DEBUG_WRITE_FULL.0, }
>
> impl TryFrom<u32> for RpcScope {
> @@ -539,12 +539,12 @@ impl<T: Operations> VTable<T> {
> /// - `out_len` must be valid for reading and writing an
> initialised `usize`. unsafe extern "C" fn fw_rpc_callback(
> uctx: *mut bindings::fwctl_uctx,
> - scope: u32,
> + scope: bindings::fwctl_rpc_scope,
> rpc_in: *mut ffi::c_void,
> in_len: usize,
> out_len: *mut usize,
> ) -> *mut ffi::c_void {
> - let scope = match RpcScope::try_from(scope) {
> + let scope = match RpcScope::try_from(scope.0) {
> Ok(s) => s,
> Err(e) => return Error::to_ptr(e),
> };
>
> ---
> base-commit: c03c1a14507dfaf8b856c2608f9ac216021fc222
> change-id: 20261020-fwctl-cfi-encoding-70766ce0a03a
>
> Best regards,
next prev parent reply other threads:[~2026-10-20 8:56 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-20 8:28 [PATCH] rust: fwctl: declare cfi_encoding for fwctl_rpc_scope Alice Ryhl
2026-10-20 8:55 ` Zhi Wang [this message]
2026-10-20 9:04 ` Alice Ryhl
2026-10-20 9:08 ` Zhi Wang
2026-10-20 9:40 ` Alice Ryhl
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=20261020115534.1134f2b3@inno-dell \
--to=zhiw@nvidia.com \
--cc=a.hindborg@kernel.org \
--cc=acourbot@nvidia.com \
--cc=aliceryhl@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun@kernel.org \
--cc=dakr@kernel.org \
--cc=daniel.almeida@collabora.com \
--cc=dave.jiang@intel.com \
--cc=gary@garyguo.net \
--cc=jgg@ziepe.ca \
--cc=jic23@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lossin@kernel.org \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=saeedm@nvidia.com \
--cc=samitolvanen@google.com \
--cc=stable@vger.kernel.org \
--cc=tamird@kernel.org \
--cc=tmgross@umich.edu \
--cc=work@onurozkan.dev \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.