diff --git a/include/binderwrapper/binder_wrapper.h b/include/binderwrapper/binder_wrapper.h index e57cf8318..921c4ed19 100644 --- a/include/binderwrapper/binder_wrapper.h +++ b/include/binderwrapper/binder_wrapper.h @@ -17,6 +17,8 @@ #ifndef SYSTEM_CORE_INCLUDE_BINDERWRAPPER_BINDER_WRAPPER_H_ #define SYSTEM_CORE_INCLUDE_BINDERWRAPPER_BINDER_WRAPPER_H_ +#include + #include #include @@ -68,6 +70,10 @@ class BinderWrapper { // Unregisters the callback, if any, for |binder|. virtual bool UnregisterForDeathNotifications(const sp& binder) = 0; + // When called while in a transaction, returns the caller's UID or PID. + virtual uid_t GetCallingUid() = 0; + virtual pid_t GetCallingPid() = 0; + private: static BinderWrapper* instance_; }; diff --git a/include/binderwrapper/stub_binder_wrapper.h b/include/binderwrapper/stub_binder_wrapper.h index 6e198aea3..01c96483c 100644 --- a/include/binderwrapper/stub_binder_wrapper.h +++ b/include/binderwrapper/stub_binder_wrapper.h @@ -77,6 +77,9 @@ class StubBinderWrapper : public BinderWrapper { } void clear_local_binders() { local_binders_.clear(); } + void set_calling_uid(uid_t uid) { calling_uid_ = uid; } + void set_calling_pid(pid_t pid) { calling_pid_ = pid; } + // Sets the binder to return when |service_name| is passed to GetService() or // WaitForService(). void SetBinderForService(const std::string& service_name, @@ -97,6 +100,8 @@ class StubBinderWrapper : public BinderWrapper { bool RegisterForDeathNotifications(const sp& binder, const base::Closure& callback) override; bool UnregisterForDeathNotifications(const sp& binder) override; + uid_t GetCallingUid() override; + pid_t GetCallingPid() override; private: using ServiceMap = std::map>; @@ -116,6 +121,10 @@ class StubBinderWrapper : public BinderWrapper { // death. std::map, base::Closure> death_callbacks_; + // Values to return from GetCallingUid() and GetCallingPid(); + uid_t calling_uid_; + pid_t calling_pid_; + DISALLOW_COPY_AND_ASSIGN(StubBinderWrapper); }; diff --git a/libbinderwrapper/real_binder_wrapper.cc b/libbinderwrapper/real_binder_wrapper.cc index adff19bed..1c518226d 100644 --- a/libbinderwrapper/real_binder_wrapper.cc +++ b/libbinderwrapper/real_binder_wrapper.cc @@ -19,6 +19,7 @@ #include #include #include +#include #include namespace android { @@ -111,4 +112,12 @@ bool RealBinderWrapper::UnregisterForDeathNotifications( return true; } +uid_t RealBinderWrapper::GetCallingUid() { + return IPCThreadState::self()->getCallingUid(); +} + +pid_t RealBinderWrapper::GetCallingPid() { + return IPCThreadState::self()->getCallingPid(); +} + } // namespace android diff --git a/libbinderwrapper/real_binder_wrapper.h b/libbinderwrapper/real_binder_wrapper.h index 8e281f2f8..ea0837171 100644 --- a/libbinderwrapper/real_binder_wrapper.h +++ b/libbinderwrapper/real_binder_wrapper.h @@ -38,6 +38,8 @@ class RealBinderWrapper : public BinderWrapper { bool RegisterForDeathNotifications(const sp& binder, const base::Closure& callback) override; bool UnregisterForDeathNotifications(const sp& binder) override; + uid_t GetCallingUid() override; + pid_t GetCallingPid() override; private: class DeathRecipient; diff --git a/libbinderwrapper/stub_binder_wrapper.cc b/libbinderwrapper/stub_binder_wrapper.cc index 1d2468101..87c6ab793 100644 --- a/libbinderwrapper/stub_binder_wrapper.cc +++ b/libbinderwrapper/stub_binder_wrapper.cc @@ -22,7 +22,9 @@ namespace android { -StubBinderWrapper::StubBinderWrapper() = default; +StubBinderWrapper::StubBinderWrapper() + : calling_uid_(-1), + calling_pid_(-1) {} StubBinderWrapper::~StubBinderWrapper() = default; @@ -73,4 +75,12 @@ bool StubBinderWrapper::UnregisterForDeathNotifications( return true; } +uid_t StubBinderWrapper::GetCallingUid() { + return calling_uid_; +} + +pid_t StubBinderWrapper::GetCallingPid() { + return calling_pid_; +} + } // namespace android