Loading services/camera/virtualcamera/VirtualCameraService.cc +11 −5 Original line number Diff line number Diff line Loading @@ -240,11 +240,16 @@ ndk::ScopedAStatus VirtualCameraService::registerCamera( const VirtualCameraConfiguration& configuration, const std::string& cameraId, const int32_t deviceId, bool* _aidl_return) { if (!mPermissionProxy.checkCallingPermission(kCreateVirtualDevicePermission)) { ALOGE("%s: caller (pid %d, uid %d) doesn't hold %s permission", __func__, getpid(), getuid(), kCreateVirtualDevicePermission); return ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY); } return registerCameraNoCheck(token, configuration, cameraId, deviceId, _aidl_return); } ndk::ScopedAStatus VirtualCameraService::registerCameraNoCheck( const ::ndk::SpAIBinder& token, const VirtualCameraConfiguration& configuration, const std::string& cameraId, const int32_t deviceId, bool* _aidl_return) { if (_aidl_return == nullptr) { return ndk::ScopedAStatus::fromServiceSpecificError( Status::EX_ILLEGAL_ARGUMENT); Loading Loading @@ -481,7 +486,8 @@ binder_status_t VirtualCameraService::enableTestCameraCmd( configuration.virtualCameraCallback = ndk::SharedRefBase::make<VirtualCameraTestInstance>( inputFps.value_or(kTestCameraDefaultInputFps)); registerCamera(mTestCameraToken, configuration, registerCameraNoCheck( mTestCameraToken, configuration, cameraId.value_or(std::to_string(sNextIdNumericalPortion++)), kDefaultDeviceId, &ret); if (ret) { Loading services/camera/virtualcamera/VirtualCameraService.h +9 −0 Original line number Diff line number Diff line Loading @@ -87,6 +87,15 @@ class VirtualCameraService // Disable and destroy test camera instance if there's one. void disableTestCameraCmd(int out); // Register camera corresponding to the binder token without checking for // caller permission. ndk::ScopedAStatus registerCameraNoCheck( const ::ndk::SpAIBinder& token, const ::aidl::android::companion::virtualcamera::VirtualCameraConfiguration& configuration, const std::string& cameraId, int32_t deviceId, bool* _aidl_return) EXCLUDES(mLock); std::shared_ptr<VirtualCameraProvider> mVirtualCameraProvider; bool mVerifyEglExtensions = true; const PermissionsProxy& mPermissionProxy; Loading services/camera/virtualcamera/util/Permissions.cc +9 −3 Original line number Diff line number Diff line Loading @@ -20,7 +20,7 @@ #include "Permissions.h" #include "binder/PermissionCache.h" #include "log/log.h" #include "log/log_main.h" namespace android { namespace companion { Loading @@ -39,8 +39,14 @@ bool PermissionsProxyImpl::checkCallingPermission( const bool hasPermission = PermissionCache::checkCallingPermission( String16(permission.c_str()), &pid, &uid); ALOGV("%s: Checking %s permission for pid %d uid %d: %s", __func__, permission.c_str(), pid, uid, hasPermission ? "granted" : "denied"); if (hasPermission) { ALOGV("%s: Checking %s permission for pid %d uid %d: granted", __func__, permission.c_str(), pid, uid); } else { ALOGW("%s: Checking %s permission for pid %d uid %d: denied", __func__, permission.c_str(), pid, uid); } return hasPermission; } } // namespace Loading Loading
services/camera/virtualcamera/VirtualCameraService.cc +11 −5 Original line number Diff line number Diff line Loading @@ -240,11 +240,16 @@ ndk::ScopedAStatus VirtualCameraService::registerCamera( const VirtualCameraConfiguration& configuration, const std::string& cameraId, const int32_t deviceId, bool* _aidl_return) { if (!mPermissionProxy.checkCallingPermission(kCreateVirtualDevicePermission)) { ALOGE("%s: caller (pid %d, uid %d) doesn't hold %s permission", __func__, getpid(), getuid(), kCreateVirtualDevicePermission); return ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY); } return registerCameraNoCheck(token, configuration, cameraId, deviceId, _aidl_return); } ndk::ScopedAStatus VirtualCameraService::registerCameraNoCheck( const ::ndk::SpAIBinder& token, const VirtualCameraConfiguration& configuration, const std::string& cameraId, const int32_t deviceId, bool* _aidl_return) { if (_aidl_return == nullptr) { return ndk::ScopedAStatus::fromServiceSpecificError( Status::EX_ILLEGAL_ARGUMENT); Loading Loading @@ -481,7 +486,8 @@ binder_status_t VirtualCameraService::enableTestCameraCmd( configuration.virtualCameraCallback = ndk::SharedRefBase::make<VirtualCameraTestInstance>( inputFps.value_or(kTestCameraDefaultInputFps)); registerCamera(mTestCameraToken, configuration, registerCameraNoCheck( mTestCameraToken, configuration, cameraId.value_or(std::to_string(sNextIdNumericalPortion++)), kDefaultDeviceId, &ret); if (ret) { Loading
services/camera/virtualcamera/VirtualCameraService.h +9 −0 Original line number Diff line number Diff line Loading @@ -87,6 +87,15 @@ class VirtualCameraService // Disable and destroy test camera instance if there's one. void disableTestCameraCmd(int out); // Register camera corresponding to the binder token without checking for // caller permission. ndk::ScopedAStatus registerCameraNoCheck( const ::ndk::SpAIBinder& token, const ::aidl::android::companion::virtualcamera::VirtualCameraConfiguration& configuration, const std::string& cameraId, int32_t deviceId, bool* _aidl_return) EXCLUDES(mLock); std::shared_ptr<VirtualCameraProvider> mVirtualCameraProvider; bool mVerifyEglExtensions = true; const PermissionsProxy& mPermissionProxy; Loading
services/camera/virtualcamera/util/Permissions.cc +9 −3 Original line number Diff line number Diff line Loading @@ -20,7 +20,7 @@ #include "Permissions.h" #include "binder/PermissionCache.h" #include "log/log.h" #include "log/log_main.h" namespace android { namespace companion { Loading @@ -39,8 +39,14 @@ bool PermissionsProxyImpl::checkCallingPermission( const bool hasPermission = PermissionCache::checkCallingPermission( String16(permission.c_str()), &pid, &uid); ALOGV("%s: Checking %s permission for pid %d uid %d: %s", __func__, permission.c_str(), pid, uid, hasPermission ? "granted" : "denied"); if (hasPermission) { ALOGV("%s: Checking %s permission for pid %d uid %d: granted", __func__, permission.c_str(), pid, uid); } else { ALOGW("%s: Checking %s permission for pid %d uid %d: denied", __func__, permission.c_str(), pid, uid); } return hasPermission; } } // namespace Loading