diff options
Diffstat (limited to 'libs/gui/BufferQueueConsumer.cpp')
| -rw-r--r-- | libs/gui/BufferQueueConsumer.cpp | 16 | 
1 files changed, 12 insertions, 4 deletions
diff --git a/libs/gui/BufferQueueConsumer.cpp b/libs/gui/BufferQueueConsumer.cpp index 5e5de443f4..873814913f 100644 --- a/libs/gui/BufferQueueConsumer.cpp +++ b/libs/gui/BufferQueueConsumer.cpp @@ -15,6 +15,8 @@   */  #include <inttypes.h> +#include <pwd.h> +#include <sys/types.h>  #define LOG_TAG "BufferQueueConsumer"  #define ATRACE_TAG ATRACE_TAG_GRAPHICS @@ -34,7 +36,6 @@  #include <binder/IPCThreadState.h>  #include <binder/PermissionCache.h> -#include <private/android_filesystem_config.h>  namespace android { @@ -745,12 +746,19 @@ status_t BufferQueueConsumer::discardFreeBuffers() {  }  status_t BufferQueueConsumer::dumpState(const String8& prefix, String8* outResult) const { +    struct passwd* pwd = getpwnam("shell"); +    uid_t shellUid = pwd ? pwd->pw_uid : 0; +    if (!shellUid) { +        int savedErrno = errno; +        BQ_LOGE("Cannot get AID_SHELL"); +        return savedErrno ? -savedErrno : UNKNOWN_ERROR; +    } +      const IPCThreadState* ipc = IPCThreadState::self();      const pid_t pid = ipc->getCallingPid();      const uid_t uid = ipc->getCallingUid(); -    if ((uid != AID_SHELL) -            && !PermissionCache::checkPermission(String16( -            "android.permission.DUMP"), pid, uid)) { +    if ((uid != shellUid) && +        !PermissionCache::checkPermission(String16("android.permission.DUMP"), pid, uid)) {          outResult->appendFormat("Permission Denial: can't dump BufferQueueConsumer "                  "from pid=%d, uid=%d\n", pid, uid);          android_errorWriteWithInfoLog(0x534e4554, "27046057",  |