binder

Struct ThreadState

Source
pub struct ThreadState;
Expand description

Static utility functions to manage Binder thread state.

Implementations§

Source§

impl ThreadState

Source

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.

Source

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.

Source

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.

Source

pub fn with_calling_sid<T, F>(check_permission: F) -> T
where for<'a> F: FnOnce(Option<&'a CStr>) -> 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§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

Convert 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)

Convert &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)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.