* [PATCH] rust: allow `suspicious_runtime_symbol_definitions` lint for Rust >= 1.98
@ 2026-06-15 14:32 Miguel Ojeda
2026-06-15 14:40 ` Alice Ryhl
2026-06-15 17:09 ` Gary Guo
0 siblings, 2 replies; 5+ messages in thread
From: Miguel Ojeda @ 2026-06-15 14:32 UTC (permalink / raw)
To: Miguel Ojeda
Cc: Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin,
Andreas Hindborg, Alice Ryhl, Trevor Gross, Danilo Krummrich,
Daniel Almeida, Tamir Duberstein, Alexandre Courbot,
Onur Özkan, rust-for-linux, Urgau
Starting with Rust 1.98.0 (expected 2026-08-20), Rust is introducing a
couple new lints, `invalid_runtime_symbol_definitions` (deny-by-default)
and `suspicious_runtime_symbol_definitions` (warn-by-default), which check
the signature of items whose symbol name is a runtime symbol expected by
`core`.
Our build hits the second one, i.e. the warning:
error: suspicious definition of the runtime `strlen` symbol used by the standard library
--> rust/bindings/bindings_generated.rs:20018:5
|
20018 | pub fn strlen(s: *const ffi::c_char) -> usize;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: expected `unsafe extern "C" fn(*const i8) -> usize`
found `unsafe extern "C" fn(*const u8) -> usize`
= help: either fix the signature or remove any attributes like `#[unsafe(no_mangle)]`, `#[unsafe(export_name = "strlen")]`, or `#[link_name = "strlen"]`
= help: allow this lint if the signature is compatible
= note: `-D suspicious-runtime-symbol-definitions` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(suspicious_runtime_symbol_definitions)]`
error: suspicious definition of the runtime `strlen` symbol used by the standard library
--> rust/uapi/uapi_generated.rs:14236:5
|
14236 | pub fn strlen(s: *const ffi::c_char) -> usize;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: expected `unsafe extern "C" fn(*const i8) -> usize`
found `unsafe extern "C" fn(*const u8) -> usize`
= help: either fix the signature or remove any attributes like `#[unsafe(no_mangle)]`, `#[unsafe(export_name = "strlen")]`, or `#[link_name = "strlen"]`
= help: allow this lint if the signature is compatible
= note: `-D suspicious-runtime-symbol-definitions` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(suspicious_runtime_symbol_definitions)]`
Thus `allow` the lint in `bindings` and `uapi`.
A more targeted alternative to avoid `allow`ing it would be to pass
`--blocklist-function strlen` to `bindgen`, but we would perhaps need
to adjust if other C headers end up adding more (or Rust checking more).
Since it is just the less critical one that we hit, and since eventually
this should be properly fixed by getting upstream Rust to provide a flag
like GCC/Clang's `-funsigned-char` [2][3], just `allow` it for now.
Cc: Urgau <urgau@numericable.fr>
Link: https://github.com/rust-lang/rust/pull/155521 [1]
Link: https://github.com/rust-lang/rust/issues/138446 [2]
Link: https://github.com/Rust-for-Linux/linux/issues/355 [3]
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
---
init/Kconfig | 3 +++
rust/bindings/lib.rs | 4 ++++
rust/uapi/lib.rs | 4 ++++
3 files changed, 11 insertions(+)
diff --git a/init/Kconfig b/init/Kconfig
index 2937c4d308ae..c2c6011dfe98 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -190,6 +190,9 @@ config RUSTC_HAS_FILE_WITH_NUL
config RUSTC_HAS_FILE_AS_C_STR
def_bool RUSTC_VERSION >= 109100
+config RUSTC_HAS_SUSPICIOUS_RUNTIME_SYMBOL_DEFINITIONS
+ def_bool RUSTC_VERSION >= 109800
+
config PAHOLE_VERSION
int
default "$(PAHOLE_VERSION)"
diff --git a/rust/bindings/lib.rs b/rust/bindings/lib.rs
index 854e7c471434..812f8e5a08d5 100644
--- a/rust/bindings/lib.rs
+++ b/rust/bindings/lib.rs
@@ -27,6 +27,10 @@
#[allow(clippy::ref_as_ptr)]
#[allow(clippy::undocumented_unsafe_blocks)]
#[cfg_attr(CONFIG_RUSTC_HAS_UNNECESSARY_TRANSMUTES, allow(unnecessary_transmutes))]
+#[cfg_attr(
+ CONFIG_RUSTC_HAS_SUSPICIOUS_RUNTIME_SYMBOL_DEFINITIONS,
+ allow(suspicious_runtime_symbol_definitions)
+)]
mod bindings_raw {
use pin_init::{MaybeZeroable, Zeroable};
diff --git a/rust/uapi/lib.rs b/rust/uapi/lib.rs
index b8a515de31ca..797ead5b5626 100644
--- a/rust/uapi/lib.rs
+++ b/rust/uapi/lib.rs
@@ -24,6 +24,10 @@
unsafe_op_in_unsafe_fn
)]
#![cfg_attr(CONFIG_RUSTC_HAS_UNNECESSARY_TRANSMUTES, allow(unnecessary_transmutes))]
+#![cfg_attr(
+ CONFIG_RUSTC_HAS_SUSPICIOUS_RUNTIME_SYMBOL_DEFINITIONS,
+ allow(suspicious_runtime_symbol_definitions)
+)]
#![feature(cfi_encoding)]
// Manual definition of blocklisted types.
base-commit: 8cd9520d35a6c38db6567e97dd93b1f11f185dc6
--
2.54.0
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH] rust: allow `suspicious_runtime_symbol_definitions` lint for Rust >= 1.98
2026-06-15 14:32 [PATCH] rust: allow `suspicious_runtime_symbol_definitions` lint for Rust >= 1.98 Miguel Ojeda
@ 2026-06-15 14:40 ` Alice Ryhl
2026-06-15 15:05 ` Miguel Ojeda
2026-06-15 17:09 ` Gary Guo
1 sibling, 1 reply; 5+ messages in thread
From: Alice Ryhl @ 2026-06-15 14:40 UTC (permalink / raw)
To: Miguel Ojeda
Cc: Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin,
Andreas Hindborg, Trevor Gross, Danilo Krummrich, Daniel Almeida,
Tamir Duberstein, Alexandre Courbot, Onur Özkan,
rust-for-linux, Urgau
On Mon, Jun 15, 2026 at 04:32:25PM +0200, Miguel Ojeda wrote:
> Starting with Rust 1.98.0 (expected 2026-08-20), Rust is introducing a
> couple new lints, `invalid_runtime_symbol_definitions` (deny-by-default)
> and `suspicious_runtime_symbol_definitions` (warn-by-default), which check
> the signature of items whose symbol name is a runtime symbol expected by
> `core`.
>
> Our build hits the second one, i.e. the warning:
>
> error: suspicious definition of the runtime `strlen` symbol used by the standard library
> --> rust/bindings/bindings_generated.rs:20018:5
> |
> 20018 | pub fn strlen(s: *const ffi::c_char) -> usize;
> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> |
> = note: expected `unsafe extern "C" fn(*const i8) -> usize`
> found `unsafe extern "C" fn(*const u8) -> usize`
> = help: either fix the signature or remove any attributes like `#[unsafe(no_mangle)]`, `#[unsafe(export_name = "strlen")]`, or `#[link_name = "strlen"]`
> = help: allow this lint if the signature is compatible
> = note: `-D suspicious-runtime-symbol-definitions` implied by `-D warnings`
> = help: to override `-D warnings` add `#[allow(suspicious_runtime_symbol_definitions)]`
>
> error: suspicious definition of the runtime `strlen` symbol used by the standard library
> --> rust/uapi/uapi_generated.rs:14236:5
> |
> 14236 | pub fn strlen(s: *const ffi::c_char) -> usize;
> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> |
> = note: expected `unsafe extern "C" fn(*const i8) -> usize`
> found `unsafe extern "C" fn(*const u8) -> usize`
> = help: either fix the signature or remove any attributes like `#[unsafe(no_mangle)]`, `#[unsafe(export_name = "strlen")]`, or `#[link_name = "strlen"]`
> = help: allow this lint if the signature is compatible
> = note: `-D suspicious-runtime-symbol-definitions` implied by `-D warnings`
> = help: to override `-D warnings` add `#[allow(suspicious_runtime_symbol_definitions)]`
>
> Thus `allow` the lint in `bindings` and `uapi`.
>
> A more targeted alternative to avoid `allow`ing it would be to pass
> `--blocklist-function strlen` to `bindgen`, but we would perhaps need
> to adjust if other C headers end up adding more (or Rust checking more).
> Since it is just the less critical one that we hit, and since eventually
> this should be properly fixed by getting upstream Rust to provide a flag
> like GCC/Clang's `-funsigned-char` [2][3], just `allow` it for now.
>
> Cc: Urgau <urgau@numericable.fr>
> Link: https://github.com/rust-lang/rust/pull/155521 [1]
> Link: https://github.com/rust-lang/rust/issues/138446 [2]
> Link: https://github.com/Rust-for-Linux/linux/issues/355 [3]
> Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
The change itself LGTM. With below question answered:
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
> #![cfg_attr(CONFIG_RUSTC_HAS_UNNECESSARY_TRANSMUTES, allow(unnecessary_transmutes))]
> +#![cfg_attr(
> + CONFIG_RUSTC_HAS_SUSPICIOUS_RUNTIME_SYMBOL_DEFINITIONS,
> + allow(suspicious_runtime_symbol_definitions)
> +)]
I'm wondering whether the cfg_attr is required? Is there a warning from
specifying an unknown warning otherwise?
Alice
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] rust: allow `suspicious_runtime_symbol_definitions` lint for Rust >= 1.98
2026-06-15 14:40 ` Alice Ryhl
@ 2026-06-15 15:05 ` Miguel Ojeda
0 siblings, 0 replies; 5+ messages in thread
From: Miguel Ojeda @ 2026-06-15 15:05 UTC (permalink / raw)
To: Alice Ryhl
Cc: Miguel Ojeda, Boqun Feng, Gary Guo, Björn Roy Baron,
Benno Lossin, Andreas Hindborg, Trevor Gross, Danilo Krummrich,
Daniel Almeida, Tamir Duberstein, Alexandre Courbot,
Onur Özkan, rust-for-linux, Urgau
On Mon, Jun 15, 2026 at 4:40 PM Alice Ryhl <aliceryhl@google.com> wrote:
>
> I'm wondering whether the cfg_attr is required? Is there a warning from
> specifying an unknown warning otherwise?
Yes -- please see the `cfg_attr` above it in both hunks, same situation.
Cheers,
Miguel
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] rust: allow `suspicious_runtime_symbol_definitions` lint for Rust >= 1.98
2026-06-15 14:32 [PATCH] rust: allow `suspicious_runtime_symbol_definitions` lint for Rust >= 1.98 Miguel Ojeda
2026-06-15 14:40 ` Alice Ryhl
@ 2026-06-15 17:09 ` Gary Guo
2026-06-15 17:14 ` Tamir Duberstein
1 sibling, 1 reply; 5+ messages in thread
From: Gary Guo @ 2026-06-15 17:09 UTC (permalink / raw)
To: Miguel Ojeda
Cc: Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin,
Andreas Hindborg, Alice Ryhl, Trevor Gross, Danilo Krummrich,
Daniel Almeida, Tamir Duberstein, Alexandre Courbot,
Onur Özkan, rust-for-linux, Urgau
On Mon Jun 15, 2026 at 3:32 PM BST, Miguel Ojeda wrote:
> Starting with Rust 1.98.0 (expected 2026-08-20), Rust is introducing a
> couple new lints, `invalid_runtime_symbol_definitions` (deny-by-default)
> and `suspicious_runtime_symbol_definitions` (warn-by-default), which check
> the signature of items whose symbol name is a runtime symbol expected by
> `core`.
>
> Our build hits the second one, i.e. the warning:
>
> error: suspicious definition of the runtime `strlen` symbol used by the standard library
> --> rust/bindings/bindings_generated.rs:20018:5
> |
> 20018 | pub fn strlen(s: *const ffi::c_char) -> usize;
> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> |
> = note: expected `unsafe extern "C" fn(*const i8) -> usize`
> found `unsafe extern "C" fn(*const u8) -> usize`
> = help: either fix the signature or remove any attributes like `#[unsafe(no_mangle)]`, `#[unsafe(export_name = "strlen")]`, or `#[link_name = "strlen"]`
> = help: allow this lint if the signature is compatible
> = note: `-D suspicious-runtime-symbol-definitions` implied by `-D warnings`
> = help: to override `-D warnings` add `#[allow(suspicious_runtime_symbol_definitions)]`
>
> error: suspicious definition of the runtime `strlen` symbol used by the standard library
> --> rust/uapi/uapi_generated.rs:14236:5
> |
> 14236 | pub fn strlen(s: *const ffi::c_char) -> usize;
> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> |
> = note: expected `unsafe extern "C" fn(*const i8) -> usize`
> found `unsafe extern "C" fn(*const u8) -> usize`
> = help: either fix the signature or remove any attributes like `#[unsafe(no_mangle)]`, `#[unsafe(export_name = "strlen")]`, or `#[link_name = "strlen"]`
> = help: allow this lint if the signature is compatible
> = note: `-D suspicious-runtime-symbol-definitions` implied by `-D warnings`
> = help: to override `-D warnings` add `#[allow(suspicious_runtime_symbol_definitions)]`
>
> Thus `allow` the lint in `bindings` and `uapi`.
>
> A more targeted alternative to avoid `allow`ing it would be to pass
> `--blocklist-function strlen` to `bindgen`, but we would perhaps need
> to adjust if other C headers end up adding more (or Rust checking more).
> Since it is just the less critical one that we hit, and since eventually
> this should be properly fixed by getting upstream Rust to provide a flag
> like GCC/Clang's `-funsigned-char` [2][3], just `allow` it for now.
>
> Cc: Urgau <urgau@numericable.fr>
> Link: https://github.com/rust-lang/rust/pull/155521 [1]
> Link: https://github.com/rust-lang/rust/issues/138446 [2]
> Link: https://github.com/Rust-for-Linux/linux/issues/355 [3]
> Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
Reviewed-by: Gary Guo <gary@garyguo.net>
> ---
> init/Kconfig | 3 +++
> rust/bindings/lib.rs | 4 ++++
> rust/uapi/lib.rs | 4 ++++
> 3 files changed, 11 insertions(+)
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] rust: allow `suspicious_runtime_symbol_definitions` lint for Rust >= 1.98
2026-06-15 17:09 ` Gary Guo
@ 2026-06-15 17:14 ` Tamir Duberstein
0 siblings, 0 replies; 5+ messages in thread
From: Tamir Duberstein @ 2026-06-15 17:14 UTC (permalink / raw)
To: Gary Guo
Cc: Miguel Ojeda, Boqun Feng, Björn Roy Baron, Benno Lossin,
Andreas Hindborg, Alice Ryhl, Trevor Gross, Danilo Krummrich,
Daniel Almeida, Alexandre Courbot, Onur Özkan,
rust-for-linux, Urgau
On Mon, Jun 15, 2026 at 1:09 PM Gary Guo <gary@garyguo.net> wrote:
>
> On Mon Jun 15, 2026 at 3:32 PM BST, Miguel Ojeda wrote:
> > Starting with Rust 1.98.0 (expected 2026-08-20), Rust is introducing a
> > couple new lints, `invalid_runtime_symbol_definitions` (deny-by-default)
> > and `suspicious_runtime_symbol_definitions` (warn-by-default), which check
> > the signature of items whose symbol name is a runtime symbol expected by
> > `core`.
> >
> > Our build hits the second one, i.e. the warning:
> >
> > error: suspicious definition of the runtime `strlen` symbol used by the standard library
> > --> rust/bindings/bindings_generated.rs:20018:5
> > |
> > 20018 | pub fn strlen(s: *const ffi::c_char) -> usize;
> > | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > |
> > = note: expected `unsafe extern "C" fn(*const i8) -> usize`
> > found `unsafe extern "C" fn(*const u8) -> usize`
> > = help: either fix the signature or remove any attributes like `#[unsafe(no_mangle)]`, `#[unsafe(export_name = "strlen")]`, or `#[link_name = "strlen"]`
> > = help: allow this lint if the signature is compatible
> > = note: `-D suspicious-runtime-symbol-definitions` implied by `-D warnings`
> > = help: to override `-D warnings` add `#[allow(suspicious_runtime_symbol_definitions)]`
> >
> > error: suspicious definition of the runtime `strlen` symbol used by the standard library
> > --> rust/uapi/uapi_generated.rs:14236:5
> > |
> > 14236 | pub fn strlen(s: *const ffi::c_char) -> usize;
> > | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > |
> > = note: expected `unsafe extern "C" fn(*const i8) -> usize`
> > found `unsafe extern "C" fn(*const u8) -> usize`
> > = help: either fix the signature or remove any attributes like `#[unsafe(no_mangle)]`, `#[unsafe(export_name = "strlen")]`, or `#[link_name = "strlen"]`
> > = help: allow this lint if the signature is compatible
> > = note: `-D suspicious-runtime-symbol-definitions` implied by `-D warnings`
> > = help: to override `-D warnings` add `#[allow(suspicious_runtime_symbol_definitions)]`
> >
> > Thus `allow` the lint in `bindings` and `uapi`.
> >
> > A more targeted alternative to avoid `allow`ing it would be to pass
> > `--blocklist-function strlen` to `bindgen`, but we would perhaps need
> > to adjust if other C headers end up adding more (or Rust checking more).
> > Since it is just the less critical one that we hit, and since eventually
> > this should be properly fixed by getting upstream Rust to provide a flag
> > like GCC/Clang's `-funsigned-char` [2][3], just `allow` it for now.
> >
> > Cc: Urgau <urgau@numericable.fr>
> > Link: https://github.com/rust-lang/rust/pull/155521 [1]
> > Link: https://github.com/rust-lang/rust/issues/138446 [2]
> > Link: https://github.com/Rust-for-Linux/linux/issues/355 [3]
> > Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
>
> Reviewed-by: Gary Guo <gary@garyguo.net>
Reviewed-by: Tamir Duberstein <tamird@kernel.org>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-06-15 17:14 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-15 14:32 [PATCH] rust: allow `suspicious_runtime_symbol_definitions` lint for Rust >= 1.98 Miguel Ojeda
2026-06-15 14:40 ` Alice Ryhl
2026-06-15 15:05 ` Miguel Ojeda
2026-06-15 17:09 ` Gary Guo
2026-06-15 17:14 ` Tamir Duberstein
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox