Skip to content

Commit

Permalink
libbinderwrapper: Add GetCallingUid() and GetCallingPid().
Browse files Browse the repository at this point in the history
Add methods to BinderWrapper for getting the caller's UID
and PID while in a transaction.

Bug: 24988639
Change-Id: Ibd711fc6b3d83623d4bb1060838c65aaef30d76e
  • Loading branch information
Daniel Erat committed Oct 16, 2015
1 parent b8cc70a commit 7cba9db
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 1 deletion.
6 changes: 6 additions & 0 deletions include/binderwrapper/binder_wrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
#ifndef SYSTEM_CORE_INCLUDE_BINDERWRAPPER_BINDER_WRAPPER_H_
#define SYSTEM_CORE_INCLUDE_BINDERWRAPPER_BINDER_WRAPPER_H_

#include <sys/types.h>

#include <string>

#include <base/callback.h>
Expand Down Expand Up @@ -68,6 +70,10 @@ class BinderWrapper {
// Unregisters the callback, if any, for |binder|.
virtual bool UnregisterForDeathNotifications(const sp<IBinder>& 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_;
};
Expand Down
9 changes: 9 additions & 0 deletions include/binderwrapper/stub_binder_wrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -97,6 +100,8 @@ class StubBinderWrapper : public BinderWrapper {
bool RegisterForDeathNotifications(const sp<IBinder>& binder,
const base::Closure& callback) override;
bool UnregisterForDeathNotifications(const sp<IBinder>& binder) override;
uid_t GetCallingUid() override;
pid_t GetCallingPid() override;

private:
using ServiceMap = std::map<std::string, sp<IBinder>>;
Expand All @@ -116,6 +121,10 @@ class StubBinderWrapper : public BinderWrapper {
// death.
std::map<sp<IBinder>, base::Closure> death_callbacks_;

// Values to return from GetCallingUid() and GetCallingPid();
uid_t calling_uid_;
pid_t calling_pid_;

DISALLOW_COPY_AND_ASSIGN(StubBinderWrapper);
};

Expand Down
9 changes: 9 additions & 0 deletions libbinderwrapper/real_binder_wrapper.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include <base/logging.h>
#include <binder/Binder.h>
#include <binder/IBinder.h>
#include <binder/IPCThreadState.h>
#include <binder/IServiceManager.h>

namespace android {
Expand Down Expand Up @@ -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
2 changes: 2 additions & 0 deletions libbinderwrapper/real_binder_wrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ class RealBinderWrapper : public BinderWrapper {
bool RegisterForDeathNotifications(const sp<IBinder>& binder,
const base::Closure& callback) override;
bool UnregisterForDeathNotifications(const sp<IBinder>& binder) override;
uid_t GetCallingUid() override;
pid_t GetCallingPid() override;

private:
class DeathRecipient;
Expand Down
12 changes: 11 additions & 1 deletion libbinderwrapper/stub_binder_wrapper.cc
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@

namespace android {

StubBinderWrapper::StubBinderWrapper() = default;
StubBinderWrapper::StubBinderWrapper()
: calling_uid_(-1),
calling_pid_(-1) {}

StubBinderWrapper::~StubBinderWrapper() = default;

Expand Down Expand Up @@ -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

0 comments on commit 7cba9db

Please sign in to comment.