diff options
| author | 2023-01-05 12:49:00 +0000 | |
|---|---|---|
| committer | 2023-01-05 12:49:00 +0000 | |
| commit | 6b9c2948e045313cb377ddd718d20cf02f3145cb (patch) | |
| tree | a87253b231181e59357e8949426f37a6b077eabb | |
| parent | aa757543f4b1db43213f52a55a1244546fecedeb (diff) | |
| parent | c5944b179e2fc98aa5fca114ccc49276b0b9566c (diff) | |
Merge changes I66723a00,I07f8182d
* changes:
Enforce MEDIA_CONTENT_CONTROL in verifyPackageName
Simplify if/else branch in MR2ServiceImpl
4 files changed, 19 insertions, 33 deletions
diff --git a/media/java/android/media/IMediaRouterService.aidl b/media/java/android/media/IMediaRouterService.aidl index f6a9162cda39..aa7e4df18186 100644 --- a/media/java/android/media/IMediaRouterService.aidl +++ b/media/java/android/media/IMediaRouterService.aidl @@ -50,8 +50,7 @@ interface IMediaRouterService { // MediaRouterService.java for readability. // Methods for MediaRouter2 - boolean verifyPackageName(String clientPackageName); - void enforceMediaContentControlPermission(); + boolean verifyPackageExists(String clientPackageName); List<MediaRoute2Info> getSystemRoutes(); RoutingSessionInfo getSystemSessionInfo(); diff --git a/media/java/android/media/MediaRouter2.java b/media/java/android/media/MediaRouter2.java index 5faa794151b1..fa74a9f12d7c 100644 --- a/media/java/android/media/MediaRouter2.java +++ b/media/java/android/media/MediaRouter2.java @@ -208,9 +208,9 @@ public final class MediaRouter2 { IMediaRouterService.Stub.asInterface( ServiceManager.getService(Context.MEDIA_ROUTER_SERVICE)); try { - // SecurityException will be thrown if there's no permission. - serviceBinder.enforceMediaContentControlPermission(); - if (!serviceBinder.verifyPackageName(clientPackageName)) { + // verifyPackageExists throws SecurityException if the caller doesn't hold + // MEDIA_CONTENT_CONTROL permission. + if (!serviceBinder.verifyPackageExists(clientPackageName)) { Log.e(TAG, "Package " + clientPackageName + " not found. Ignoring."); return null; } diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java index 15586c4a055e..cc485baef0c9 100644 --- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java +++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java @@ -169,10 +169,17 @@ class MediaRouter2ServiceImpl { // Start of methods that implement MediaRouter2 operations. @NonNull - public boolean verifyPackageName(@NonNull String clientPackageName) { + public boolean verifyPackageExists(@NonNull String clientPackageName) { + final int pid = Binder.getCallingPid(); + final int uid = Binder.getCallingUid(); final long token = Binder.clearCallingIdentity(); try { + mContext.enforcePermission( + Manifest.permission.MEDIA_CONTENT_CONTROL, + pid, + uid, + "Must hold MEDIA_CONTENT_CONTROL permission."); PackageManager pm = mContext.getPackageManager(); pm.getPackageInfo(clientPackageName, PackageManager.PackageInfoFlags.of(0)); return true; @@ -184,20 +191,6 @@ class MediaRouter2ServiceImpl { } @NonNull - public void enforceMediaContentControlPermission() { - final int pid = Binder.getCallingPid(); - final int uid = Binder.getCallingUid(); - final long token = Binder.clearCallingIdentity(); - - try { - mContext.enforcePermission(Manifest.permission.MEDIA_CONTENT_CONTROL, pid, uid, - "Must hold MEDIA_CONTENT_CONTROL permission."); - } finally { - Binder.restoreCallingIdentity(token); - } - } - - @NonNull public List<MediaRoute2Info> getSystemRoutes() { final int uid = Binder.getCallingUid(); final int userId = UserHandle.getUserHandleForUid(uid).getIdentifier(); @@ -1959,12 +1952,12 @@ class MediaRouter2ServiceImpl { @NonNull RoutingSessionInfo oldSession, @NonNull MediaRoute2Info route) { try { if (route.isSystemRoute() && !routerRecord.mHasModifyAudioRoutingPermission) { - routerRecord.mRouter.requestCreateSessionByManager(uniqueRequestId, - oldSession, mSystemProvider.getDefaultRoute()); - } else { - routerRecord.mRouter.requestCreateSessionByManager(uniqueRequestId, - oldSession, route); + // The router lacks permission to modify system routing, so we hide system + // route info from them. + route = mSystemProvider.getDefaultRoute(); } + routerRecord.mRouter.requestCreateSessionByManager( + uniqueRequestId, oldSession, route); } catch (RemoteException ex) { Slog.w(TAG, "getSessionHintsForCreatingSessionOnHandler: " + "Failed to request. Router probably died.", ex); diff --git a/services/core/java/com/android/server/media/MediaRouterService.java b/services/core/java/com/android/server/media/MediaRouterService.java index ad82e1c786e3..3ad0e44e6ea3 100644 --- a/services/core/java/com/android/server/media/MediaRouterService.java +++ b/services/core/java/com/android/server/media/MediaRouterService.java @@ -380,14 +380,8 @@ public final class MediaRouterService extends IMediaRouterService.Stub // Binder call @Override - public boolean verifyPackageName(String clientPackageName) { - return mService2.verifyPackageName(clientPackageName); - } - - // Binder call - @Override - public void enforceMediaContentControlPermission() { - mService2.enforceMediaContentControlPermission(); + public boolean verifyPackageExists(String clientPackageName) { + return mService2.verifyPackageExists(clientPackageName); } // Binder call |