diff options
author | Mathias Agopian <mathias@google.com> | 2009-06-15 18:24:59 -0700 |
---|---|---|
committer | Mathias Agopian <mathias@google.com> | 2009-06-15 21:56:51 -0700 |
commit | 151e859e0fc3a930bdf6d270d275e69e9eba0cbf (patch) | |
tree | 90abe1d328fe3f7234815651237ab31219a1de03 /libs/surfaceflinger/LayerBase.cpp | |
parent | e19476214a2fe718c82461f54e6b56cee7faa5f4 (diff) | |
download | frameworks_base-151e859e0fc3a930bdf6d270d275e69e9eba0cbf.zip frameworks_base-151e859e0fc3a930bdf6d270d275e69e9eba0cbf.tar.gz frameworks_base-151e859e0fc3a930bdf6d270d275e69e9eba0cbf.tar.bz2 |
new Permission class used to improve permission checks speed (by caching results)
Diffstat (limited to 'libs/surfaceflinger/LayerBase.cpp')
-rw-r--r-- | libs/surfaceflinger/LayerBase.cpp | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/libs/surfaceflinger/LayerBase.cpp b/libs/surfaceflinger/LayerBase.cpp index c678711..b65c983 100644 --- a/libs/surfaceflinger/LayerBase.cpp +++ b/libs/surfaceflinger/LayerBase.cpp @@ -729,27 +729,20 @@ void LayerBaseClient::Surface::getSurfaceData( } status_t LayerBaseClient::Surface::onTransact( - uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) + uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { switch (code) { case REGISTER_BUFFERS: case UNREGISTER_BUFFERS: case CREATE_OVERLAY: { - // codes that require permission check - IPCThreadState* ipc = IPCThreadState::self(); - const int pid = ipc->getCallingPid(); - const int self_pid = getpid(); - if (LIKELY(pid != self_pid)) { - // we're called from a different process, do the real check - if (!checkCallingPermission( - String16("android.permission.ACCESS_SURFACE_FLINGER"))) - { - const int uid = ipc->getCallingUid(); - LOGE("Permission Denial: " - "can't access SurfaceFlinger pid=%d, uid=%d", pid, uid); - return PERMISSION_DENIED; - } + if (!mFlinger->mAccessSurfaceFlinger.checkCalling()) { + IPCThreadState* ipc = IPCThreadState::self(); + const int pid = ipc->getCallingPid(); + const int uid = ipc->getCallingUid(); + LOGE("Permission Denial: " + "can't access SurfaceFlinger pid=%d, uid=%d", pid, uid); + return PERMISSION_DENIED; } } } |