pub struct ThreadState;
Expand description
Static utility functions to manage Binder thread state.
Implementations§
Source§impl ThreadState
impl ThreadState
Sourcepub fn get_calling_uid() -> uid_t
pub fn get_calling_uid() -> uid_t
This returns the calling UID assuming that this thread is called from a
thread that is processing a binder transaction (for instance, in the
implementation of
Remotable::on_transact
).
This can be used with higher-level system services to determine the caller’s identity and check permissions.
Available since API level 29.
\return calling uid or the current process’s UID if this thread isn’t processing a transaction.
Sourcepub fn get_calling_pid() -> pid_t
pub fn get_calling_pid() -> pid_t
This returns the calling PID assuming that this thread is called from a
thread that is processing a binder transaction (for instance, in the
implementation of
Remotable::on_transact
).
This can be used with higher-level system services to determine the caller’s identity and check permissions. However, when doing this, one should be aware of possible TOCTOU problems when the calling process dies and is replaced with another process with elevated permissions and the same PID.
Warning: oneway transactions do not receive PID. Even if you expect a transaction to be synchronous, a misbehaving client could send it as a synchronous call and result in a 0 PID here. Additionally, if there is a race and the calling process dies, the PID may still be 0 for a synchronous call.
Available since API level 29.
\return calling pid or the current process’s PID if this thread isn’t processing a transaction.
Sourcepub fn is_handling_transaction() -> bool
pub fn is_handling_transaction() -> bool
Determine whether the current thread is currently executing an incoming transaction.
\return true if the current thread is currently executing an incoming transaction, and false otherwise.
Sourcepub fn with_calling_sid<T, F>(check_permission: F) -> T
pub fn with_calling_sid<T, F>(check_permission: F) -> T
This function makes the client’s security context available to the service calling this function. This can be used for access control. It does not suffer from the TOCTOU issues of get_calling_pid.
Implementations of check_permission
should use the given CStr
argument as context for selinux permission checks. If None
is
given, the implementation should fall back to using the PID
instead.
Note: None
may be passed to the callback if the caller did not
set_requesting_sid
on the serviced binder, or if the underlying
kernel is too old to support this feature.
Auto Trait Implementations§
impl Freeze for ThreadState
impl RefUnwindSafe for ThreadState
impl Send for ThreadState
impl Sync for ThreadState
impl Unpin for ThreadState
impl UnwindSafe for ThreadState
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.