Loading services/camera/libcameraservice/CameraService.cpp +18 −2 Original line number Diff line number Diff line Loading @@ -973,11 +973,14 @@ Status CameraService::validateClientPermissionsLocked(const String8& cameraId, // Make sure the UID is in an active state to use the camera if (!mUidPolicy->isUidActive(callingUid, String16(clientName8))) { int32_t procState = mUidPolicy->getProcState(callingUid); ALOGE("Access Denial: can't use the camera from an idle UID pid=%d, uid=%d", clientPid, clientUid); return STATUS_ERROR_FMT(ERROR_DISABLED, "Caller \"%s\" (PID %d, UID %d) cannot open camera \"%s\" from background", clientName8.string(), clientUid, clientPid, cameraId.string()); "Caller \"%s\" (PID %d, UID %d) cannot open camera \"%s\" from background (" "calling UID %d proc state %" PRId32 ")", clientName8.string(), clientUid, clientPid, cameraId.string(), callingUid, procState); } // If sensor privacy is enabled then prevent access to the camera Loading Loading @@ -2736,6 +2739,19 @@ bool CameraService::UidPolicy::isUidActiveLocked(uid_t uid, String16 callingPack return active; } int32_t CameraService::UidPolicy::getProcState(uid_t uid) { Mutex::Autolock _l(mUidLock); return getProcStateLocked(uid); } int32_t CameraService::UidPolicy::getProcStateLocked(uid_t uid) { int32_t procState = ActivityManager::PROCESS_STATE_UNKNOWN; if (mMonitoredUids.find(uid) != mMonitoredUids.end()) { procState = mMonitoredUids[uid].first; } return procState; } void CameraService::UidPolicy::UidPolicy::addOverrideUid(uid_t uid, String16 callingPackage, bool active) { updateOverrideUid(uid, callingPackage, active, true); Loading services/camera/libcameraservice/CameraService.h +2 −0 Original line number Diff line number Diff line Loading @@ -542,6 +542,7 @@ private: void unregisterSelf(); bool isUidActive(uid_t uid, String16 callingPackage); int32_t getProcState(uid_t uid); void onUidGone(uid_t uid, bool disabled); void onUidActive(uid_t uid); Loading @@ -558,6 +559,7 @@ private: virtual void binderDied(const wp<IBinder> &who); private: bool isUidActiveLocked(uid_t uid, String16 callingPackage); int32_t getProcStateLocked(uid_t uid); void updateOverrideUid(uid_t uid, String16 callingPackage, bool active, bool insert); Mutex mUidLock; Loading Loading
services/camera/libcameraservice/CameraService.cpp +18 −2 Original line number Diff line number Diff line Loading @@ -973,11 +973,14 @@ Status CameraService::validateClientPermissionsLocked(const String8& cameraId, // Make sure the UID is in an active state to use the camera if (!mUidPolicy->isUidActive(callingUid, String16(clientName8))) { int32_t procState = mUidPolicy->getProcState(callingUid); ALOGE("Access Denial: can't use the camera from an idle UID pid=%d, uid=%d", clientPid, clientUid); return STATUS_ERROR_FMT(ERROR_DISABLED, "Caller \"%s\" (PID %d, UID %d) cannot open camera \"%s\" from background", clientName8.string(), clientUid, clientPid, cameraId.string()); "Caller \"%s\" (PID %d, UID %d) cannot open camera \"%s\" from background (" "calling UID %d proc state %" PRId32 ")", clientName8.string(), clientUid, clientPid, cameraId.string(), callingUid, procState); } // If sensor privacy is enabled then prevent access to the camera Loading Loading @@ -2736,6 +2739,19 @@ bool CameraService::UidPolicy::isUidActiveLocked(uid_t uid, String16 callingPack return active; } int32_t CameraService::UidPolicy::getProcState(uid_t uid) { Mutex::Autolock _l(mUidLock); return getProcStateLocked(uid); } int32_t CameraService::UidPolicy::getProcStateLocked(uid_t uid) { int32_t procState = ActivityManager::PROCESS_STATE_UNKNOWN; if (mMonitoredUids.find(uid) != mMonitoredUids.end()) { procState = mMonitoredUids[uid].first; } return procState; } void CameraService::UidPolicy::UidPolicy::addOverrideUid(uid_t uid, String16 callingPackage, bool active) { updateOverrideUid(uid, callingPackage, active, true); Loading
services/camera/libcameraservice/CameraService.h +2 −0 Original line number Diff line number Diff line Loading @@ -542,6 +542,7 @@ private: void unregisterSelf(); bool isUidActive(uid_t uid, String16 callingPackage); int32_t getProcState(uid_t uid); void onUidGone(uid_t uid, bool disabled); void onUidActive(uid_t uid); Loading @@ -558,6 +559,7 @@ private: virtual void binderDied(const wp<IBinder> &who); private: bool isUidActiveLocked(uid_t uid, String16 callingPackage); int32_t getProcStateLocked(uid_t uid); void updateOverrideUid(uid_t uid, String16 callingPackage, bool active, bool insert); Mutex mUidLock; Loading