Re: [PATCH v6 2/4] uaccess: always export _copy_[from|to]_user with CONFIG_RUST
From: Arnd Bergmann
Date: Wed May 15 2024 - 03:35:07 EST
On Tue, May 14, 2024, at 17:27, Andrew Morton wrote:
> On Thu, 18 Apr 2024 08:59:18 +0000 Alice Ryhl <aliceryhl@xxxxxxxxxx> wrote:
>
>> From: Arnd Bergmann <arnd@xxxxxxxx>
>>
>> Rust code needs to be able to access _copy_from_user and _copy_to_user
>> so that it can skip the check_copy_size check in cases where the length
>> is known at compile-time, mirroring the logic for when C code will skip
>> check_copy_size. To do this, we ensure that exported versions of these
>> methods are available when CONFIG_RUST is enabled.
>>
>> Alice has verified that this patch passes the CONFIG_TEST_USER_COPY test
>> on x86 using the Android cuttlefish emulator.
>>
>> ...
>>
>> -#ifdef INLINE_COPY_TO_USER
>> static inline __must_check unsigned long
>> -_copy_to_user(void __user *to, const void *from, unsigned long n)
>> +_inline_copy_to_user(void __user *to, const void *from, unsigned long n)
>> {
>
> I think it would be helpful to have some comments in here describing
> why we're doing this _inline_* thing. What problem is it avoiding?
How about
/*
* Architectures that #define INLINE_COPY_TO_USER use this function
* directly in the normal copy_to_user(), the other ones go through
* an extern _copy_to_user(), which expands the same code here.
* Rust code always uses the extern definition.
*/
Arnd