Re: [PATCH v2 1/2] rust: add untrusted data abstraction

Benno Lossin
2024-09-26T21:40:27Z

On 26.09.24 22:31, kernel test robot wrote:
> Hi Benno,
>
> kernel test robot noticed the following build errors:
>
> [auto build test ERROR on a2f11547052001bd448ccec81dd1e68409078fbb]
>
> url: https://github.com/intel-lab-lkp/linux/commits/Benno-Lossin/rust-add-untrusted-data-abstraction/20240926-045445
> base: a2f11547052001bd448ccec81dd1e68409078fbb
> patch link: https://lore.kernel.org/r/20240925205244.873020-2-benno.lossin%40proton.me
> patch subject: [PATCH v2 1/2] rust: add untrusted data abstraction
> config: x86_64-buildonly-randconfig-002-20240927 (https://download.01.org/0day-ci/archive/20240927/202409270303.kUIAmOmY-lkp@intel.com/config)
> compiler: clang version 18.1.8 (https://github.com/llvm/llvm-project 3b5b5c1ec4a3095ab096dd780e84d7ab81f3d7ff)
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240927/202409270303.kUIAmOmY-lkp@intel.com/reproduce)
>
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202409270303.kUIAmOmY-lkp@intel.com/
>
> All errors (new ones prefixed by >>):
>
>>> error[E0004]: non-exhaustive patterns: `Err(_)` not covered
> --> rust/kernel/validate.rs:188:15
> |
> 188 | match unsafe { value.__init(ptr) } {
> | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pattern `Err(_)` not covered
> |
> note: `core::result::Result<(), Infallible>` defined here
> --> /opt/cross/rustc-1.78.0-bindgen-0.65.1/rustup/toolchains/1.78.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/result.rs:502:1
> |
> 502 | pub enum Result<T, E> {
> | ^^^^^^^^^^^^^^^^^^^^^
> ...
> 511 | Err(#[stable(feature = "rust1", since = "1.0.0")] E),
> | --- not covered
> = note: the matched value is of type `core::result::Result<(), Infallible>`
> help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown
> |
> 189 ~ Ok(()) => {},
> 190 + Err(_) => todo!()

I didn't include the `Err` variant here, since on nightly it would give
me this error:

error: unreachable pattern
--> rust/kernel/validate.rs:190:13
|
190 | Err(i) => match i {},
| ^^^^^^ matches no values because `Infallible` is uninhabited
|
= note: to learn more about uninhabited types, see https://doc.rust-lang.org/nomicon/exotic-sizes.html#empty-types
= note: `-D unreachable-patterns` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(unreachable_patterns)]`

error: aborting due to 1 previous error

I can reproduce this error locally in a Rust project, but am unable to
do so on play.rust-lang.org. That seems very strange to me, anyone else
on 1.83 or 1.82 can confirm? AFAIK, it was stabilized in 1.82, see [1].

I would like to use `#[cfg("rust version <= 1.82")]`, but I don't know
how to do that. Do we already have support for checking the version in a
cfg? The alternative would be `#[allow(unreachable_patterns)]`, but I
would like to avoid that.

[1]: https://github.com/rust-lang/rust/issues/119612

---
Cheers,
Benno

> |
>
> --
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki