Loading media/libmediatranscoding/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -60,6 +60,7 @@ cc_library_shared { ], shared_libs: [ "libandroid", "libbinder_ndk", "libcutils", "liblog", Loading media/libmediatranscoding/TranscodingClientManager.cpp +15 −24 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <aidl/android/media/BnTranscodingClient.h> #include <aidl/android/media/IMediaTranscodingService.h> #include <android/binder_ibinder.h> #include <android/permission_manager.h> #include <inttypes.h> #include <media/TranscodingClientManager.h> #include <media/TranscodingRequest.h> Loading @@ -27,15 +28,11 @@ #include <private/android_filesystem_config.h> #include <utils/Log.h> #include <utils/String16.h> namespace android { static_assert(sizeof(ClientIdType) == sizeof(void*), "ClientIdType should be pointer-sized"); static constexpr const char* MEDIA_PROVIDER_PKG_NAMES[] = { "com.android.providers.media.module", "com.google.android.providers.media.module", }; using ::aidl::android::media::BnTranscodingClient; using ::aidl::android::media::IMediaTranscodingService; // For service error codes using ::aidl::android::media::TranscodingRequestParcel; Loading Loading @@ -137,7 +134,7 @@ Status TranscodingClientManager::ClientImpl::submitRequest( in_clientUid = callingUid; } else if (in_clientUid < 0) { return Status::ok(); } else if (in_clientUid != callingUid && !owner->isTrustedCallingUid(callingUid)) { } else if (in_clientUid != callingUid && !owner->isTrustedCaller(callingPid, callingUid)) { ALOGE("MediaTranscodingService::registerClient rejected (clientPid %d, clientUid %d) " "(don't trust callingUid %d)", in_clientPid, in_clientUid, callingUid); Loading @@ -154,7 +151,7 @@ Status TranscodingClientManager::ClientImpl::submitRequest( in_clientPid = callingPid; } else if (in_clientPid < 0) { return Status::ok(); } else if (in_clientPid != callingPid && !owner->isTrustedCallingUid(callingUid)) { } else if (in_clientPid != callingPid && !owner->isTrustedCaller(callingPid, callingUid)) { ALOGE("MediaTranscodingService::registerClient rejected (clientPid %d, clientUid %d) " "(don't trust callingUid %d)", in_clientPid, in_clientUid, callingUid); Loading Loading @@ -266,14 +263,8 @@ TranscodingClientManager::TranscodingClientManager( : mDeathRecipient(AIBinder_DeathRecipient_new(BinderDiedCallback)), mSessionController(controller) { ALOGD("TranscodingClientManager started"); uid_t mpuid; for (const char* pkgName : MEDIA_PROVIDER_PKG_NAMES) { if (TranscodingUidPolicy::getUidForPackage(String16(pkgName), mpuid) == NO_ERROR) { ALOGI("Found %s's uid: %d", pkgName, mpuid); mMediaProviderUid.insert(mpuid); } else { ALOGW("Couldn't get uid for %s.", pkgName); } for (uid_t uid : {AID_ROOT, AID_SYSTEM, AID_SHELL, AID_MEDIA}) { mTrustedUids.insert(uid); } } Loading Loading @@ -305,20 +296,20 @@ void TranscodingClientManager::dumpAllClients(int fd, const Vector<String16>& ar write(fd, result.string(), result.size()); } bool TranscodingClientManager::isTrustedCallingUid(uid_t uid) { if (uid > 0 && mMediaProviderUid.count(uid) > 0) { bool TranscodingClientManager::isTrustedCaller(pid_t pid, uid_t uid) { if (uid > 0 && mTrustedUids.count(uid) > 0) { return true; } switch (uid) { case AID_ROOT: // root user case AID_SYSTEM: case AID_SHELL: case AID_MEDIA: // mediaserver int32_t result; if (APermissionManager_checkPermission("android.permission.MANAGE_EXTERNAL_STORAGE", pid, uid, &result) == PERMISSION_MANAGER_STATUS_OK && result == PERMISSION_MANAGER_PERMISSION_GRANTED) { mTrustedUids.insert(uid); return true; default: return false; } return false; } status_t TranscodingClientManager::addClient( Loading media/libmediatranscoding/TranscodingUidPolicy.cpp +0 −16 Original line number Diff line number Diff line Loading @@ -21,10 +21,7 @@ #include <aidl/android/media/IResourceManagerService.h> #include <android/binder_manager.h> #include <android/binder_process.h> #include <android/content/pm/IPackageManagerNative.h> #include <binder/ActivityManager.h> #include <binder/IServiceManager.h> #include <binder/PermissionController.h> #include <cutils/misc.h> // FIRST_APPLICATION_UID #include <cutils/multiuser.h> #include <inttypes.h> Loading Loading @@ -113,19 +110,6 @@ void TranscodingUidPolicy::UidObserver::binderDied(const wp<IBinder>& /*who*/) { //////////////////////////////////////////////////////////////////////////// //static status_t TranscodingUidPolicy::getUidForPackage(String16 packageName, /*inout*/ uid_t& uid) { PermissionController pc; uid = pc.getPackageUid(packageName, 0); if (uid <= 0) { ALOGE("Unknown package: '%s'", String8(packageName).string()); return BAD_VALUE; } uid = multiuser_get_uid(0 /*userId*/, uid); return NO_ERROR; } TranscodingUidPolicy::TranscodingUidPolicy() : mAm(std::make_shared<ActivityManager>()), mUidObserver(new UidObserver(this)), Loading media/libmediatranscoding/include/media/TranscodingClientManager.h +2 −2 Original line number Diff line number Diff line Loading @@ -87,7 +87,7 @@ private: TranscodingClientManager(const std::shared_ptr<ControllerClientInterface>& controller); // Checks if a user is trusted (and allowed to submit sessions on behalf of other uids) bool isTrustedCallingUid(uid_t uid); bool isTrustedCaller(pid_t pid, uid_t uid); /** * Removes an existing client from the manager. Loading @@ -109,7 +109,7 @@ private: ::ndk::ScopedAIBinder_DeathRecipient mDeathRecipient; std::shared_ptr<ControllerClientInterface> mSessionController; std::unordered_set<uid_t> mMediaProviderUid; std::unordered_set<uid_t> mTrustedUids; static std::atomic<ClientIdType> sCookieCounter; static std::mutex sCookie2ClientLock; Loading media/libmediatranscoding/include/media/TranscodingUidPolicy.h +0 −2 Original line number Diff line number Diff line Loading @@ -49,8 +49,6 @@ public: void setCallback(const std::shared_ptr<UidPolicyCallbackInterface>& cb) override; // ~UidPolicyInterface static status_t getUidForPackage(String16 packageName, /*inout*/ uid_t& uid); private: void onUidStateChanged(uid_t uid, int32_t procState); void setUidObserverRegistered(bool registerd); Loading Loading
media/libmediatranscoding/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -60,6 +60,7 @@ cc_library_shared { ], shared_libs: [ "libandroid", "libbinder_ndk", "libcutils", "liblog", Loading
media/libmediatranscoding/TranscodingClientManager.cpp +15 −24 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <aidl/android/media/BnTranscodingClient.h> #include <aidl/android/media/IMediaTranscodingService.h> #include <android/binder_ibinder.h> #include <android/permission_manager.h> #include <inttypes.h> #include <media/TranscodingClientManager.h> #include <media/TranscodingRequest.h> Loading @@ -27,15 +28,11 @@ #include <private/android_filesystem_config.h> #include <utils/Log.h> #include <utils/String16.h> namespace android { static_assert(sizeof(ClientIdType) == sizeof(void*), "ClientIdType should be pointer-sized"); static constexpr const char* MEDIA_PROVIDER_PKG_NAMES[] = { "com.android.providers.media.module", "com.google.android.providers.media.module", }; using ::aidl::android::media::BnTranscodingClient; using ::aidl::android::media::IMediaTranscodingService; // For service error codes using ::aidl::android::media::TranscodingRequestParcel; Loading Loading @@ -137,7 +134,7 @@ Status TranscodingClientManager::ClientImpl::submitRequest( in_clientUid = callingUid; } else if (in_clientUid < 0) { return Status::ok(); } else if (in_clientUid != callingUid && !owner->isTrustedCallingUid(callingUid)) { } else if (in_clientUid != callingUid && !owner->isTrustedCaller(callingPid, callingUid)) { ALOGE("MediaTranscodingService::registerClient rejected (clientPid %d, clientUid %d) " "(don't trust callingUid %d)", in_clientPid, in_clientUid, callingUid); Loading @@ -154,7 +151,7 @@ Status TranscodingClientManager::ClientImpl::submitRequest( in_clientPid = callingPid; } else if (in_clientPid < 0) { return Status::ok(); } else if (in_clientPid != callingPid && !owner->isTrustedCallingUid(callingUid)) { } else if (in_clientPid != callingPid && !owner->isTrustedCaller(callingPid, callingUid)) { ALOGE("MediaTranscodingService::registerClient rejected (clientPid %d, clientUid %d) " "(don't trust callingUid %d)", in_clientPid, in_clientUid, callingUid); Loading Loading @@ -266,14 +263,8 @@ TranscodingClientManager::TranscodingClientManager( : mDeathRecipient(AIBinder_DeathRecipient_new(BinderDiedCallback)), mSessionController(controller) { ALOGD("TranscodingClientManager started"); uid_t mpuid; for (const char* pkgName : MEDIA_PROVIDER_PKG_NAMES) { if (TranscodingUidPolicy::getUidForPackage(String16(pkgName), mpuid) == NO_ERROR) { ALOGI("Found %s's uid: %d", pkgName, mpuid); mMediaProviderUid.insert(mpuid); } else { ALOGW("Couldn't get uid for %s.", pkgName); } for (uid_t uid : {AID_ROOT, AID_SYSTEM, AID_SHELL, AID_MEDIA}) { mTrustedUids.insert(uid); } } Loading Loading @@ -305,20 +296,20 @@ void TranscodingClientManager::dumpAllClients(int fd, const Vector<String16>& ar write(fd, result.string(), result.size()); } bool TranscodingClientManager::isTrustedCallingUid(uid_t uid) { if (uid > 0 && mMediaProviderUid.count(uid) > 0) { bool TranscodingClientManager::isTrustedCaller(pid_t pid, uid_t uid) { if (uid > 0 && mTrustedUids.count(uid) > 0) { return true; } switch (uid) { case AID_ROOT: // root user case AID_SYSTEM: case AID_SHELL: case AID_MEDIA: // mediaserver int32_t result; if (APermissionManager_checkPermission("android.permission.MANAGE_EXTERNAL_STORAGE", pid, uid, &result) == PERMISSION_MANAGER_STATUS_OK && result == PERMISSION_MANAGER_PERMISSION_GRANTED) { mTrustedUids.insert(uid); return true; default: return false; } return false; } status_t TranscodingClientManager::addClient( Loading
media/libmediatranscoding/TranscodingUidPolicy.cpp +0 −16 Original line number Diff line number Diff line Loading @@ -21,10 +21,7 @@ #include <aidl/android/media/IResourceManagerService.h> #include <android/binder_manager.h> #include <android/binder_process.h> #include <android/content/pm/IPackageManagerNative.h> #include <binder/ActivityManager.h> #include <binder/IServiceManager.h> #include <binder/PermissionController.h> #include <cutils/misc.h> // FIRST_APPLICATION_UID #include <cutils/multiuser.h> #include <inttypes.h> Loading Loading @@ -113,19 +110,6 @@ void TranscodingUidPolicy::UidObserver::binderDied(const wp<IBinder>& /*who*/) { //////////////////////////////////////////////////////////////////////////// //static status_t TranscodingUidPolicy::getUidForPackage(String16 packageName, /*inout*/ uid_t& uid) { PermissionController pc; uid = pc.getPackageUid(packageName, 0); if (uid <= 0) { ALOGE("Unknown package: '%s'", String8(packageName).string()); return BAD_VALUE; } uid = multiuser_get_uid(0 /*userId*/, uid); return NO_ERROR; } TranscodingUidPolicy::TranscodingUidPolicy() : mAm(std::make_shared<ActivityManager>()), mUidObserver(new UidObserver(this)), Loading
media/libmediatranscoding/include/media/TranscodingClientManager.h +2 −2 Original line number Diff line number Diff line Loading @@ -87,7 +87,7 @@ private: TranscodingClientManager(const std::shared_ptr<ControllerClientInterface>& controller); // Checks if a user is trusted (and allowed to submit sessions on behalf of other uids) bool isTrustedCallingUid(uid_t uid); bool isTrustedCaller(pid_t pid, uid_t uid); /** * Removes an existing client from the manager. Loading @@ -109,7 +109,7 @@ private: ::ndk::ScopedAIBinder_DeathRecipient mDeathRecipient; std::shared_ptr<ControllerClientInterface> mSessionController; std::unordered_set<uid_t> mMediaProviderUid; std::unordered_set<uid_t> mTrustedUids; static std::atomic<ClientIdType> sCookieCounter; static std::mutex sCookie2ClientLock; Loading
media/libmediatranscoding/include/media/TranscodingUidPolicy.h +0 −2 Original line number Diff line number Diff line Loading @@ -49,8 +49,6 @@ public: void setCallback(const std::shared_ptr<UidPolicyCallbackInterface>& cb) override; // ~UidPolicyInterface static status_t getUidForPackage(String16 packageName, /*inout*/ uid_t& uid); private: void onUidStateChanged(uid_t uid, int32_t procState); void setUidObserverRegistered(bool registerd); Loading