Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

uaccess: gate _copy_[to|from]_user on !INLINE_COPY_FROM_USER

These methods only exist when INLINE_COPY_FROM_USER is disabled, so update
the header file to reflect that.

This fixes the following error on builds that enable both RUST and
INLINE_COPY_FROM_USER.

ERROR: modpost: "_copy_from_user" [samples/rust/rust_misc_device.ko] undefined!
ERROR: modpost: "_copy_to_user" [samples/rust/rust_misc_device.ko] undefined!

This error is triggered because when a method is available both as a
rust_helper_* and normal method, Rust will call the normal method.

[akpm@linux-foundation.org: s/INLINE_COPY_FROM_USER/INLINE_COPY_TO_USER/, per Alice]
Link: https://lkml.kernel.org/r/20251118173250.2821388-1-aliceryhl@google.com
Fixes: d99dc586ca7c ("uaccess: decouple INLINE_COPY_FROM_USER and CONFIG_RUST")
Signed-off-by: Alice Ryhl <aliceryhl@google.com>
Cc: Alex Gaynor <alex.gaynor@gmail.com>
Cc: Andreas Hindborg <a.hindborg@kernel.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Björn Roy Baron <bjorn3_gh@protonmail.com>
Cc: Boqun Feng <boqun.feng@gmail.com>
Cc: Danilo Krummrich <dakr@kernel.org>
Cc: Gary Guo <gary@garyguo.net>
Cc: John Hubbard <jhubbard@nvidia.com>
Cc: Miguel Ojeda <ojeda@kernel.org>
Cc: Trevor Gross <tmgross@umich.edu>
Cc: Yury Norov (NVIDIA) <yury.norov@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

Alice Ryhl and committed by
Andrew Morton
9031b852 aa014556

+4
+4
include/linux/uaccess.h
··· 181 181 memset(to + (n - res), 0, res); 182 182 return res; 183 183 } 184 + #ifndef INLINE_COPY_FROM_USER 184 185 extern __must_check unsigned long 185 186 _copy_from_user(void *, const void __user *, unsigned long); 187 + #endif 186 188 187 189 static inline __must_check unsigned long 188 190 _inline_copy_to_user(void __user *to, const void *from, unsigned long n) ··· 198 196 } 199 197 return n; 200 198 } 199 + #ifndef INLINE_COPY_TO_USER 201 200 extern __must_check unsigned long 202 201 _copy_to_user(void __user *, const void *, unsigned long); 202 + #endif 203 203 204 204 static __always_inline unsigned long __must_check 205 205 copy_from_user(void *to, const void __user *from, unsigned long n)