[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20231130093603.113036-1-aliceryhl@google.com>
Date: Thu, 30 Nov 2023 09:36:03 +0000
From: Alice Ryhl <aliceryhl@...gle.com>
To: brauner@...nel.org
Cc: a.hindborg@...sung.com, alex.gaynor@...il.com,
aliceryhl@...gle.com, arve@...roid.com, benno.lossin@...ton.me,
bjorn3_gh@...tonmail.com, boqun.feng@...il.com,
cmllamas@...gle.com, dan.j.williams@...el.com, dxu@...uu.xyz,
gary@...yguo.net, gregkh@...uxfoundation.org,
joel@...lfernandes.org, keescook@...omium.org,
linux-fsdevel@...r.kernel.org, linux-kernel@...r.kernel.org,
maco@...roid.com, ojeda@...nel.org, peterz@...radead.org,
rust-for-linux@...r.kernel.org, surenb@...gle.com,
tglx@...utronix.de, tkjos@...roid.com, viro@...iv.linux.org.uk,
wedsonaf@...il.com, willy@...radead.org
Subject: Re: [PATCH 5/7] rust: file: add `Kuid` wrapper
Christian Brauner <brauner@...nel.org> writes:
> I'm a bit puzzled by all these rust_helper_*() calls. Can you explain
> why they are needed? Because they are/can be static inlines and that
> somehow doesn't work?
Yes, it's because the methods are inline. Rust can only call C methods
that are actually exported by the C code.
>> + /// Converts this kernel UID into a UID that userspace understands. Uses the namespace of the
>> + /// current task.
>> + pub fn into_uid_in_current_ns(self) -> bindings::uid_t {
>
> Hm, I wouldn't special-case this. Just expose from_kuid() and let it
> take a namespace argument, no? You don't need to provide bindings for
> namespaces ofc.
To make `from_kuid` safe, I would need to wrap the namespace type too. I
could do that, but it would be more code than this method because I need
another wrapper struct and so on.
Personally I would prefer to special-case it until someone needs the
non-special-case. Then, they can delete this method when they introduce
the non-special-case.
But I'll do it if you think I should.
>> +impl PartialEq for Kuid {
>> + fn eq(&self, other: &Kuid) -> bool {
>> + // SAFETY: Just an FFI call.
>> + unsafe { bindings::uid_eq(self.kuid, other.kuid) }
>> + }
>> +}
>> +
>> +impl Eq for Kuid {}
>
> Do you need that?
Yes. This is the code that tells the compiler what `==` means for the
`Kuid` type. Binder uses it here:
https://github.com/Darksonn/linux/blob/dca45e6c7848e024709b165a306cdbe88e5b086a/drivers/android/context.rs#L174
Alice
Powered by blists - more mailing lists